[
  {
    "path": ".dockerignore",
    "content": ".git\n.vagrant\ndocs\n*/node_modules\n*/bower_components\n*/tests\n*/tmp\n*/db.sqlite3\n*/.tox\n*/.pyc\n*/__pycache__\n"
  },
  {
    "path": ".drone.yml",
    "content": "image: scrapinghub\n\nscript:\n  - echo \"Portia is at:\"`git show -s --pretty=%d HEAD`\n  - git restore-mtime\n  - shopt -s extglob\n  - nvm install 10.16.0\n  - nvm use 10.16.0\n  - sudo mkdir -p ~/.npm ~/.node-gyp ~/.cache\n  - sudo chown -R ubuntu ~/.npm ~/.node-gyp ~/.cache\n  - npm install -g bower ember-cli@2.6.3 --cache-min 999999\n  - docker/compile-assets.sh\n  - build_docker_image\n  - publish_to_dockerhub\n\ncache:\n  - /home/ubuntu/.npm\n  - /home/ubuntu/.node-gyp\n  - /home/ubuntu/.cache\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nindent_style = space\nindent_size = 2\n\n[*.js]\nindent_style = space\nindent_size = 2\n\n[*.hbs]\nindent_style = space\nindent_size = 2\n\n[*.css]\nindent_style = space\nindent_size = 2\n\n[*.html]\nindent_style = space\nindent_size = 2\n\n[*.{diff,md}]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.sh eol=lf\n*.bat eol=crlf\n*.js text\n*.py text\n*.css text\n*.hbs text\n*.json text\n*.html text\n*.xml text\n*.yml text\n*.txt text\n*.rst text\n*.md text\n*.cfg text\n*.conf text\nMakefile* text\n\n*.png binary\n*.swf binary\n*.ttf binary\n*.woff binary\n*.woff2 binary"
  },
  {
    "path": ".gitignore",
    "content": "# Python compiled files\n*__pycache__/*\n*.pyc\n\n# Vagrant files\n.vagrant/\n/.idea/\n\n# Python build files\n*.egg-info\nslybot/dist\nslybot/build\nslyd/slyd/dist\nslyd/slyd/build\n\n# npm files\nnode_modules/*\nslyd/bower_components/*\nslyd/tmp/*\nnpm-debug.log\nslybot/slybot/splash-script-combined.js\n\n# Local Settings\nslyd/slyd/local_settings.py\nslybot/slybot/local_slybot_settings.py\n\n# Testing\nslybot/.tox\n\n# Docs build directory\ndocs/_build\n\n# Development Databases\n*.sqlite*\n\n# Default Portia data directory\nslyd/slyd/data\n/data/\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n  \"predef\": [\n    \"document\",\n    \"window\",\n    \"-Promise\"\n  ],\n  \"browser\": true,\n  \"boss\": true,\n  \"curly\": true,\n  \"debug\": false,\n  \"devel\": true,\n  \"eqeqeq\": true,\n  \"evil\": true,\n  \"forin\": false,\n  \"immed\": false,\n  \"laxbreak\": false,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"noempty\": false,\n  \"nonew\": false,\n  \"nomen\": false,\n  \"onevar\": false,\n  \"plusplus\": false,\n  \"regexp\": false,\n  \"undef\": true,\n  \"sub\": true,\n  \"strict\": false,\n  \"white\": false,\n  \"eqnull\": true,\n  \"esnext\": true,\n  \"unused\": true\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: python\npython: 3.7\ndist: bionic\nservices:\n  - docker\nenv:\n- WHEELHOUSE=$HOME/.cache/wheelhouse PIP_FIND_LINKS=file://$WHEELHOUSE PIP_WHEEL_DIR=$WHEELHOUSE\ncache:\n  directories:\n  - \"$HOME/.cache/pip\"\n  - \"$HOME/.cache/wheelhouse\"\n  - portiaui/node_modules\n  - portiaui/bower_components\n\nbefore_install:\n  - docker build -t scrapinghub/portia .\n  - docker ps -a\n\ninstall:\n- docker run scrapinghub/portia /app/docker/run-tests.sh\n- pushd portiaui\n- nvm install 10.16.0\n- nvm use 10.16.0\n- npm install -g bower ember-cli@2.6.3\n- npm install\n- bower install\n- popd\n\nscript:\n- pushd portiaui\n- npm rebuild node-sass\n- npm test\n- popd\n\nbefore_deploy:\n- cd slybot\n- pip install twine\n- sudo chown -R $USER .\ndeploy:\n  provider: pypi\n  distributions: sdist bdist_wheel\n  user: scrapinghub\n  password:\n    secure: S5hZT2YBncUSkPTyR5RUQnACfTsW2ZtpHeQucIamKWN+xkE8KK9O0cWUMuKQ0q3U5ShFkZdhO4PnBjvtP54Dq9IogJAudkDJCylctf4qGoIlWu01mAoJzcUfrS5KW+VolF/opBJObwG38EIOOsVy9UYq7DeQcryAAG1RuMjONAk=\n  on:\n    all_branches: true\n    tags: true\n    repo: scrapinghub/portia\n    condition: \"$TRAVIS_TAG =~ ^slybot-[0-9][.][0-9]*\"\n"
  },
  {
    "path": "CHANGES",
    "content": "2.0.8 - 2017-04-20\n\nLimit project and spider id length to avoid causing issues in windows\nOnly use auto annotations when calculating container selectors\nUpdate portia2code to 0.0.12 - Handle malformed schemas\nConvert splash url to unicode instead of bytes\nEnable item nesting in samples from ember config\nAdd logic for keeping track of, and blocking pages that fail to load in Portia\nFix 404 error when downloading projects from git backend as a new user\n\n2.0.7 - 2017-03-28\n\nPin ember data to 2.11.x\nDo not initialize tree mirror in web page until after initial page load\nChange order of compilation for injected JS files in splash\nSet text content correctly for html elements with a content attribute\n\n2.0.6 - 2017-03-07\n\nAdd option to have default data format for project\nDo not show any version control info if it is not enabled\nFix Extractor overflow bug\nFix error when loading broken samples in UI\nFix splash browser tab storing wrong html\nFix bug with repr for tab\n\n2.0.5 - 2017-02-27\n\nAdd data directory for storing spider data and ignore all new data in it\nUpdate install instructions and scripts\nUpdate Docs\nThrow KeyError when trying to get non existent model from collection\nFix loading html as raw from the tab in the socket for extraction\nFix missing objects in branch by deleting the branch\nFix UnicodeDecodeError for downloads and css parsing\nFix bytes/unicode issue with slybot extractors\n\n2.0.4 - 2017-02-23\n\nFix error when trying to load assets by proxy from an invalid tab\nFix value resolved to `None` when merging lists\nFix unicode error in regex for removing XSS from CSS assets\nFix sample loading for old spiders\nFix for running legacy spiders\nFix storage being cleared by another message while in use\nFix error caused by downloading invalid project name\nDisable error logging for missing websocket command, just log debug message\nCache selector searches for container to increase sample build speed\nDo not throw error for missing annotation data in sample when finding schema\nDo not log model error when operating on deleted model\n\n2.0.3 - 2017-02-21\n\nAdd download option for downloading a Portia project for use with slybot\nAdd download option for downloading a Portia project as Python code\nAdd copy for moving spiders from one project to another\nAdd loading slider when changing page or loading models\nAdd droplet to inform use that they have changes\nAdd better message when websocket is reconnecting\nAdd help icon describing what crawl rules do\nAdd message informing user when they have an unused required field in their schema\nAdd automatic selection of new field type in some cases\nAdd dropdown for projects - publish, discard, download\nAdd option to create new projects from UI (open source only)\nAdd dropdown for spiders - Copy, Download and delete\nAdd dropdown for schemas - delete\nFix bug with using master when scheduling spider\nFix error when errors with numeric ids are returned by server\nFix spider listing loading in UI\nFix so that project changes show up whenever there is a change\nFix model not being loaded when changing field or schema\nFix handling malformed extractor objects\nFix merging html data during a conflict - take mine\nFix when changing item schema in UI\nFix extractors were not shown in UI\nFix spiders would not run after a rename\nFix deletes where file may be requested for delete more than once\nFix with missing node when mirroring page from server\nFix incorrect node data when mirroring page from server\nFix loading extractors during migration\nFix RuntimeError when loading tab url after tab has been closed\nFix deletion of html files during cascade delete\nFix loading extractors when reading annotations\nFix loading html into sample in websocket for extraction\nFix logged error due to missing `save_html` callback\nFix html not being saved while creating sample\nFix loading samples from `template_names` field instead of spider directory\n\n2.0.2 - 2017-01-20\n\nGracefully handle missing objects in DB\n\n2.0.1 - 2017-01-19\n\nLimit number of spiders shown at once in UI to 15\nFix scheduling when spider has been run from Portia\nDisplay helpful error messages to users\nReplace guid spider ids with spider name\nAdd spider id if it is missing\nAdd a schema for newly created items\nFix PathResolutionError for unmigrated samples\nBetter migrate samples that extract from tables\n\n2.0.0 - 2017-01-02\nChange backend to use Django instead of Twisted web\nCreated a new JSON API and ORM to handle all Portia objects for greater consistency + efficiency\nAutomatically detect if a user should enable or disable JS for better extraction\nAdded support for generating urls\nAdded support for using a feed as a start url\nAdded support for extracting multiple values to a single field\nAdded support for a spinner showing the extraction progress for a better UX\nMany bug fixes and stability improvements\n\n16.07.2 - 2016-07-26\nFix bug with `project_filename` method missing Fix bug when initializing project\n\n16.05.1 - 2016-05-17\nNew transactional request handling\nInline element overlays (correctly show tags that may wrap around the page)\nNew download endpoint for projects/spiders `GET portia/api/projects/<PROJECT_ID>/download[/<SPIDER_ID>]`\nSave selection_mode, pre_text and post_text for annotations\nAdd toggle CSS button\n\n16.04.1 - 2016-04-05\nAdd link to docs\nAdd auto pagination, learns from start_urls\nAdd git status endpoint for projects\nLoad page when it is specified as url param `url`\nSave selection mode for annotation when using xpath/css selector\nImprove Portia on smaller screens Notify users of unpublished changes\nReject annotations with elements that share a container with the hovered element\nFix issue with extracting items with more than one sibling\nFix bug where clicking on help icon toggled checkbox\n\n16.02.2 - 2016-02-16\n\nFix incompatability with latest splash\nFix error with next page link following\nLog traceback if error occurs in websocket\n\n16.02.1 - 2016-02-09\nAdd automatic next page link extractor to slybot\nShow errors to user instead of event id\nFix bug where items are not initialized correctly\nLog websocket errors\nFix regex validation\nFix conflicts resolution errors\n\n16.01.1 - 2016-01-25\nFix Unicode error when creating spiders\nFix install packages\nExtract data from a list of urls `POST portia/projects/<PROJECT>/spec/extract/<SPIDER> {\"urls\": [\"http://example.com\"]}`\nAllow `.` to be used in spider and sample names\nCorrectly handle Atom, RSS and XML sitemaps\nAutomatically dismiss suggested annotations if user doesn't use them\nCorrectly place annotations when page contains `<ins>` tags\nUse Qt5 for internal splash instance\nFix scrolling page action\nFix URL validation\n\n15.12.2 - 2015-12-30\nFix issue when copying spiders that reference deleted extractors\nFix issue with using srcdoc in IE\nEnable annotation suggestions and page actions by default\n\n15.12.1 - 2015-12-03\nFix issue with overwritten JSON library in splash\nFix error when merging samples modified in one or more branches\nFix event passing in Safari\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM ubuntu:16.04\nWORKDIR /app/slyd\n\nENV PATH=\"/opt/qt59/5.9.1/gcc_64/bin:${PATH}\"\nENV DEBIAN_FRONTEND noninteractive\nENV QT_MIRROR http://ftp.fau.de/qtproject/official_releases/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run\n\nCOPY docker/portia.conf /app/portia.conf\nCOPY docker/qt_install.qs /app/script.qs\nCOPY docker/provision.sh /app/provision.sh\nCOPY slybot/requirements.txt /app/slybot/requirements.txt\nCOPY slyd/requirements.txt /app/slyd/requirements.txt\nCOPY portia_server/requirements.txt /app/portia_server/requirements.txt\n\nRUN /app/provision.sh prepare_install && \\\n    /app/provision.sh install_deps && \\\n    /app/provision.sh install_qtwebkit_deps && \\\n    /app/provision.sh download_official_qt && \\\n    /app/provision.sh install_official_qt && \\\n    /app/provision.sh install_qtwebkit && \\\n    /app/provision.sh install_pyqt5 && \\\n    /app/provision.sh install_python_deps && \\\n    /app/provision.sh install_flash && \\\n    /app/provision.sh install_msfonts && \\\n    /app/provision.sh install_extra_fonts && \\\n    /app/provision.sh remove_builddeps && \\\n    /app/provision.sh remove_extra\n\nADD docker/nginx /etc/nginx\nADD . /app\nRUN pip install -e /app/slyd && \\\n    pip install -e /app/slybot\nRUN python3 /app/portia_server/manage.py migrate\n\nEXPOSE 9001\nENTRYPOINT [\"/app/docker/entry\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) Scrapinghub.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    1. Redistributions of source code must retain the above copyright notice, \n       this list of conditions and the following disclaimer.\n    \n    2. Redistributions in binary form must reproduce the above copyright \n       notice, this list of conditions and the following disclaimer in the\n       documentation and/or other materials provided with the distribution.\n\n    3. Neither the name of Portia nor the names of its contributors may be used\n       to endorse or promote products derived from this software without\n       specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "Portia\n======\n\nPortia is a tool that allows you to visually scrape websites without any programming knowledge required. With Portia you can annotate a web page to identify the data you wish to extract, and Portia will understand based on these annotations how to scrape data from similar pages.\n\n# Running Portia\n\nThe easiest way to run Portia is using [Docker]:\n\nYou can run Portia using Docker & official Portia-image by running:\n\n    docker run -v ~/portia_projects:/app/data/projects:rw -p 9001:9001 scrapinghub/portia\n\nYou can also set up a local instance with [Docker-compose] by cloning this repo & running from the root of the folder:\n\n    docker-compose up\n\nFor more detailed instructions, and alternatives to using Docker, see the [Installation] docs.\n\n# Documentation\n\nDocumentation can be found from [Read the docs]. Source files can be found in the ``docs`` directory.\n\n[Docker]: https://www.docker.com/\n[Docker-compose]:https://docs.docker.com/compose\n[Installation]: http://portia.readthedocs.org/en/latest/installation.html\n[Read the docs]: http://portia.readthedocs.org/en/latest/index.html\n[Scrapinghub]: https://portia.scrapinghub.com/\n"
  },
  {
    "path": "VERSION",
    "content": "2.0.8\n"
  },
  {
    "path": "Vagrantfile",
    "content": "# vim:ft=ruby\n\nVagrant.configure(\"2\") do |config|\n\tconfig.vm.box = \"ubuntu/trusty64\"\n\tconfig.vm.host_name = \"portia\"\n\tconfig.vm.provision :shell, :path => 'docker/provision.sh', :args => [\n\t\t\"install_deps\", \"install_splash\", \"install_python_deps\", \"configure_nginx\", \"configure_initctl\", \"migrate_django_db\", \"start_portia\"\n\t]\n\tconfig.vm.network \"private_network\", ip: \"33.33.33.10\"\n\tconfig.vm.network \"forwarded_port\", guest: 9001, host: 9001\n\tconfig.vm.provider \"virtualbox\" do |v|\n\t\tv.memory = 2048\n\t\tv.cpus = 2\n\tend\nend\n\n"
  },
  {
    "path": "bin/bump_version.py",
    "content": "#!/usr/bin/env python3\nimport os\nfrom datetime import datetime\n_BASE_PATH = os.path.abspath(os.path.dirname(__file__))\nVERSION_FILE = os.path.abspath(os.path.join(_BASE_PATH, '../VERSION'))\n\n\ndef next_version(version_file):\n    now = datetime.now()\n    this_month = datetime(now.year, now.month, 1)\n    with open(version_file, 'r') as f:\n        version = f.read().strip().split('.')\n        release_month = datetime.strptime('.'.join(version[:-1]), '%y.%m')\n        release_number = int(version[-1]) + 1\n        if this_month != release_month:\n            release_number = 1\n        release_number =  max(1, release_number)\n        return '{:%y.%m}.{}'.format(this_month, release_number).decode('utf-8')\n\n\ndef bump_version_file(filename=None):\n    if filename is None:\n        filename = VERSION_FILE\n    next_version_string = next_version(filename)\n    with open(filename, 'w') as f:\n        f.write(next_version_string)\n\n\nif __name__ == '__main__':\n    bump_version_file()\n\n"
  },
  {
    "path": "docker/compile-assets.sh",
    "content": "#!/bin/bash\ncd portiaui\nnpm install\nnpm run build\n"
  },
  {
    "path": "docker/entry",
    "content": "#!/bin/bash\nset -x\naction=$1\nshift\n\n_run() {\n  service nginx start\n  _set_env\n  echo $PYTHONPATH\n  /app/slyd/bin/slyd -p 9002 -r /app/portiaui/dist &\n  /app/portia_server/manage.py runserver\n}\n\n_set_env() {\n  path='/app/portia_server:/app/slyd:/app/slybot'\n  export PYTHONPATH=\"$path\"\n}\n\nif [ -z \"$action\" ]; then\n  _run\nelse\n  case $action in\n    start-dev|start-prod)\n      _run\n      ;;\n    start-webshell)\n      _run_webshell \"$@\"\n      ;;\n    *)\n      exec $action \"$@\"\n      ;;\n  esac\nfi"
  },
  {
    "path": "docker/nginx/nginx.conf",
    "content": "worker_processes 1;\n\nevents { worker_connections 1024; }\n\nhttp {\n    include mime.types;\n\n    sendfile on;\n    client_max_body_size 0;\n    gzip              on;\n    gzip_static       on;\n    gzip_http_version 1.0;\n    gzip_proxied      any;\n    gzip_min_length   500;\n    gzip_disable      \"MSIE [1-6]\\.\";\n    gzip_types        text/plain text/xml text/css\n                      text/comma-separated-values\n                      text/javascript\n                      application/json\n                      application/javascript\n                      application/x-javascript\n                      application/atom+xml;\n\n    # Configuration for the server\n    server {\n        # Running port\n        listen 9001;\n        root /app/portiaui/dist;\n\n        location ~ \\.map$ {\n            return 404;\n        }\n\n        location = /index.html {\n            rewrite /index.html /;\n        }\n\n        location /static {\n            alias /app/portiaui/dist;\n        }\n\n        location / {\n            try_files $uri @backend;\n        }\n\n        location /api {\n            include proxy_portia_server.conf;\n        }\n\n        location /server_capabilities {\n            include proxy_portia_server.conf;\n        }\n\n        location @backend {\n            include proxy_slyd.conf;\n        }\n\n        location /ws {\n            proxy_http_version 1.1;\n            proxy_buffering    off;\n            proxy_set_header   Upgrade $http_upgrade;\n            proxy_set_header   Connection \"Upgrade\";\n            # proxy_set_header   Host 127.0.0.1:9002;\n            include proxy_slyd.conf;\n        }\n    }\n}\n"
  },
  {
    "path": "docker/nginx/proxy_portia_server.conf",
    "content": "proxy_pass         http://127.0.0.1:8000;\nproxy_redirect     off;\nproxy_set_header   Host $http_host;\nproxy_set_header   X-Real-IP $remote_addr;\nproxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header   X-Forwarded-Host $server_name;\n"
  },
  {
    "path": "docker/nginx/proxy_slyd.conf",
    "content": "proxy_pass         http://127.0.0.1:9002;\nproxy_redirect     off;\nproxy_set_header   Host $host:9002;\nproxy_set_header   X-Real-IP $remote_addr;\nproxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header   X-Forwarded-Host $server_name;\n"
  },
  {
    "path": "docker/portia.conf",
    "content": "description \"portia server\"\nstart on vagrant-mounted or filesystem\nstop on runlevel [!2345]\n\nscript\n    export PYTHONPATH='/vagrant/portia_server:/vagrant/slyd:/vagrant/slybot'\n    /vagrant/slyd/bin/slyd -p 9002 -r /vagrant/portiaui/dist &\n    /vagrant/portia_server/manage.py runserver\nend script\nrespawn\n"
  },
  {
    "path": "docker/provision.sh",
    "content": "#!/bin/bash\nset -e\n\nif [ \"x$APP_ROOT\" = x ]\nthen\n    for dir in \"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\" /app /vagrant $(pwd)\n    do\n        if [ -d \"$dir\" ] && [ -d \"$dir/slyd\" ]\n        then\n            APP_ROOT=\"$dir\"\n            break\n        fi\n    done\nfi\n\nif [ \"x$APP_ROOT\" = x ]\nthen\n    echo \"Could not determine app directory\"\n    exit 1\nfi\n\necho \"APP_ROOT=$APP_ROOT\"\n\nusage() {\n    cat <<EOF\nPortia provisioner.\n\nUsage: $0 COMMAND [ COMMAND ... ]\n\nAvailable commands:\nusage -- print this message\nprepare_install -- prepare image for installation\ninstall_deps -- install general system-level dependencies\ninstall_qtwebkit_deps -- install Qt and WebKit dependencies\ninstall_official_qt -- install Qt using official installer\ninstall_qtwebkit -- install updated WebKit for QT\ninstall_pyqt5 -- install PyQT5 from sources\ninstall_python_deps -- install python packages\ninstall_msfonts -- agree with EULA and install Microsoft fonts\ninstall_extra_fonts -- install extra fonts\ninstall_flash -- install flash plugin\nremove_builddeps -- WARNING: only for Docker! Remove build-dependencies.\nremove_extra -- WARNING: only for Docker! Eemove files that are not necessary to run Splash.\nconfigure_initctl -- installs initctl configuration\nconfigure_nginx -- installs nginx configuration\n\nEOF\n}\n\nSPLASH_SIP_VERSION=${SPLASH_SIP_VERSION:-\"4.19.3\"}\nSPLASH_PYQT_VERSION=${SPLASH_PYQT_VERSION:-\"5.9\"}\nSPLASH_BUILD_PARALLEL_JOBS=${SPLASH_BUILD_PARALLEL_JOBS:-\"2\"}\nQT_MIRROR=${QT_MIRROR:-\"http://ftp.fau.de/qtproject/official_releases/qt/5.9/5.9.1/qt-opensource-linux-x64-5.9.1.run\"}\nexport PATH=/opt/qt59/5.9.1/gcc_64/bin:$PATH\n\n# '2' is not supported by this script; allowed values are \"3\" and \"venv\" (?).\nSPLASH_PYTHON_VERSION=${SPLASH_PYTHON_VERSION:-\"3\"}\n\nif [[ ${SPLASH_PYTHON_VERSION} == \"venv\" ]]; then\n    _PYTHON=python\nelse\n    _PYTHON=python${SPLASH_PYTHON_VERSION}\nfi\n\n_activate_venv () {\n    if [[ ${SPLASH_PYTHON_VERSION} == \"venv\" ]]; then\n        source ${VIRTUAL_ENV}/bin/activate\n    fi\n}\n\nprepare_install () {\n    # Prepare docker image for installation of packages, docker images are\n    # usually stripped and apt-get doesn't work immediately.\n    #\n    # python-software-properties contains \"add-apt-repository\" command for PPA conf\n    sed 's/main$/main universe/' -i /etc/apt/sources.list\n    apt-get update\n    apt-get install -y --no-install-recommends \\\n        curl \\\n        software-properties-common \\\n        apt-transport-https \\\n        python3-software-properties\n}\n\ninstall_deps () {\n    # Get more recent node install\n    echo deb http://nginx.org/packages/ubuntu/ trusty nginx > /etc/apt/sources.list.d/nginx.list\n    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62\n    wget -O - https://deb.nodesource.com/setup_8.x | bash -\n    # Install system dependencies for Qt, Python packages, etc.\n    # ppa:pi-rho/security is a repo for libre2-dev\n    add-apt-repository -y ppa:pi-rho/security && \\\n    apt-get update -q && \\\n    apt-get install -y --no-install-recommends \\\n        python3 \\\n        python3-dev \\\n        python3-pip \\\n        build-essential \\\n        libre2-dev \\\n        liblua5.2-dev \\\n        libsqlite3-dev \\\n        zlib1g \\\n        zlib1g-dev \\\n        netbase \\\n        ca-certificates \\\n        pkg-config \\\n        nodejs \\\n        libmysqlclient-dev \\\n        python-mysql.connector \\\n        python-numpy \\\n        python-openssl \\\n        python-pip \\\n        nginx\n}\n\ninstall_qtwebkit_deps () {\n    apt-get install -y --no-install-recommends \\\n        xvfb \\\n        libjpeg-turbo8-dev \\\n        libgl1-mesa-dev \\\n        libglu1-mesa-dev \\\n        mesa-common-dev \\\n        libfontconfig1-dev \\\n        libicu-dev \\\n        libpng12-dev \\\n        libxslt1-dev \\\n        libxml2-dev \\\n        libhyphen-dev \\\n        libgbm1 \\\n        libxcb-image0 \\\n        libxcb-icccm4 \\\n        libxcb-keysyms1 \\\n        libxcb-render-util0 \\\n        libxi6 \\\n        libxcomposite-dev \\\n        libxrender-dev \\\n        libgstreamer1.0-dev \\\n        libgstreamer-plugins-base1.0-dev \\\n        libgstreamer-plugins-good1.0-dev \\\n        gstreamer1.0-plugins-good \\\n        gstreamer1.0-x \\\n        gstreamer1.0-libav \\\n        webp \\\n        rsync\n}\n\n_ensure_folders () {\n    mkdir -p /downloads && \\\n    mkdir -p /builds && \\\n    chmod a+rw /downloads && \\\n    chmod a+rw /builds\n}\n\ndownload_official_qt() {\n    _ensure_folders && \\\n    curl -L -o /downloads/qt-installer.run \\\n               $QT_MIRROR\n}\n\ninstall_official_qt () {\n    # XXX: if qt version is changed, Dockerfile should be updated,\n    # as well as qt-installer-noninteractive.qs script.\n    chmod +x /downloads/qt-installer.run && \\\n    xvfb-run /downloads/qt-installer.run \\\n        --script /app/script.qs \\\n        | egrep -v '\\[[0-9]+\\] Warning: (Unsupported screen format)|((QPainter|QWidget))' && \\\n    ls /opt/qt59/ && \\\n#    cat /opt/qt59/InstallationLog.txt && \\\n    cat /opt/qt59/components.xml\n}\n\n\ninstall_qtwebkit () {\n    # Install webkit from https://github.com/annulen/webkit\n    _ensure_folders && \\\n    curl -L -o /downloads/qtwebkit.tar.xz https://github.com/annulen/webkit/releases/download/qtwebkit-5.212.0-alpha2/qtwebkit-5.212.0_alpha2-qt59-linux-x64.tar.xz && \\\n    pushd /builds && \\\n    tar xvfJ /downloads/qtwebkit.tar.xz --keep-newer-files && \\\n    rsync -aP /builds/qtwebkit-5.212.0_alpha2-qt59-linux-x64/* `qmake -query QT_INSTALL_PREFIX`\n}\n\n\ninstall_pyqt5 () {\n    _ensure_folders && \\\n    _activate_venv && \\\n    ${_PYTHON} --version && \\\n    curl -L -o /downloads/sip.tar.gz https://sourceforge.net/projects/pyqt/files/sip/sip-${SPLASH_SIP_VERSION}/sip-${SPLASH_SIP_VERSION}.tar.gz && \\\n    curl -L -o /downloads/pyqt5.tar.gz https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-${SPLASH_PYQT_VERSION}/PyQt5_gpl-${SPLASH_PYQT_VERSION}.tar.gz && \\\n#    curl -L -o /downloads/sip.tar.gz https://www.riverbankcomputing.com/static/Downloads/sip/sip-${SPLASH_SIP_VERSION}.tar.gz && \\\n#    curl -L -o /downloads/pyqt5.tar.gz https://www.riverbankcomputing.com/static/Downloads/PyQt5/PyQt5_gpl-${SPLASH_PYQT_VERSION}.tar.gz && \\\n    ls -lh /downloads && \\\n    # TODO: check downloads\n    pushd /builds && \\\n    # SIP\n    tar xzf /downloads/sip.tar.gz --keep-newer-files  && \\\n    pushd sip-${SPLASH_SIP_VERSION}  && \\\n    ${_PYTHON} configure.py  && \\\n    make -j ${SPLASH_BUILD_PARALLEL_JOBS} && \\\n    make install  && \\\n    popd  && \\\n    # PyQt5\n    tar xzf /downloads/pyqt5.tar.gz --keep-newer-files  && \\\n    pushd PyQt5_gpl-${SPLASH_PYQT_VERSION}  && \\\n#        --qmake \"${SPLASH_QT_PATH}/bin/qmake\" \\\n    ${_PYTHON} configure.py -c \\\n        --verbose \\\n        --confirm-license \\\n        --no-designer-plugin \\\n        --no-qml-plugin \\\n        --no-python-dbus \\\n        -e QtCore \\\n        -e QtGui \\\n        -e QtWidgets \\\n        -e QtNetwork \\\n        -e QtWebKit \\\n        -e QtWebKitWidgets \\\n        -e QtSvg \\\n        -e QtPrintSupport && \\\n    make -j ${SPLASH_BUILD_PARALLEL_JOBS} && \\\n    make install && \\\n    popd  && \\\n    # Builds Complete\n    popd\n}\n\n\ninstall_python_deps(){\n    # Install python-level dependencies.\n    _activate_venv && \\\n    ${_PYTHON} -m pip install -U pip setuptools six && \\\n    ${_PYTHON} -m pip install \\\n        qt5reactor==0.4 \\\n        psutil==5.0.0 \\\n        Twisted==16.1.1 \\\n        adblockparser==0.7 \\\n        xvfbwrapper==0.2.9 \\\n        funcparserlib==0.3.6 \\\n        Pillow==3.4.2 \\\n        lupa==1.3 && \\\n    ${_PYTHON} -m pip install https://github.com/sunu/pyre2/archive/c610be52c3b5379b257d56fc0669d022fd70082a.zip#egg=re2\n    ${_PYTHON} -m pip install -r \"$APP_ROOT/slybot/requirements.txt\"\n    ${_PYTHON} -m pip install -r \"$APP_ROOT/slyd/requirements.txt\"\n    ${_PYTHON} -m pip install -r \"$APP_ROOT/portia_server/requirements.txt\"\n}\n\n\ninstall_msfonts() {\n    # Agree with EULA and install Microsoft fonts\n#    apt-add-repository -y \"deb http://archive.ubuntu.com/ubuntu xenial multiverse\" && \\\n#    apt-add-repository -y \"deb http://archive.ubuntu.com/ubuntu xenial-updates multiverse\" && \\\n#    apt-get update && \\\n    echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \\\n    apt-get install --no-install-recommends -y ttf-mscorefonts-installer\n}\n\ninstall_extra_fonts() {\n    # Install extra fonts (Chinese and other)\n    apt-get install --no-install-recommends -y \\\n        fonts-liberation \\\n        ttf-wqy-zenhei \\\n        fonts-arphic-gbsn00lp \\\n        fonts-arphic-bsmi00lp \\\n        fonts-arphic-gkai00mp \\\n        fonts-arphic-bkai00mp \\\n        fonts-beng\n}\n\ninstall_flash () {\n    apt-add-repository -y \"deb http://archive.ubuntu.com/ubuntu trusty multiverse\" && \\\n    apt-get update && \\\n    apt-get install -y flashplugin-installer\n}\n\nremove_builddeps () {\n    # WARNING: only for Docker, don't run blindly!\n    # Uninstall build dependencies.\n    apt-get remove -y --purge \\\n        python3-dev \\\n        libpython3.5-dev \\\n        libpython3.5 \\\n        libpython3.5-dev \\\n        build-essential \\\n        libre2-dev \\\n        liblua5.2-dev \\\n        zlib1g-dev \\\n        libc-dev \\\n        libjpeg-turbo8-dev \\\n        libcurl3 \\\n        gcc cpp cpp-5 binutils perl rsync && \\\n    apt-get clean -y\n}\n\nremove_extra () {\n    # WARNING: only for Docker, don't run blindly!\n    # Remove unnecessary files.\n    rm -rf \\\n        /builds \\\n        /downloads \\\n        /opt/qt59/Docs \\\n        /opt/qt59/Tools \\\n        /opt/qt59/Examples \\\n        /app/.git \\\n        /usr/share/man \\\n        /usr/share/info \\\n        /usr/share/doc \\\n        /var/lib/apt/lists/*\n}\n\ninstall_splash(){\n    cd /tmp\n    curl -L -o splash.tar.gz 'https://github.com/scrapinghub/splash/archive/3.2.x.tar.gz'\n    tar -xvf splash.tar.gz --keep-newer-files\n    cd splash-*\n    _activate_venv\n    prepare_install\n    install_deps\n    install_qtwebkit_deps\n    download_official_qt\n    install_official_qt\n    install_qtwebkit\n    install_pyqt5\n    install_python_deps\n    pip install .\n}\n\nconfigure_nginx(){\n    cp -r $APP_ROOT/nginx/* /etc/nginx\n    sed 's/\\/app\\//'\"\"${APP_ROOT//\\//\\\\\\/}\"\"'\\//g' -i /etc/nginx/nginx.conf\n}\n\nconfigure_initctl(){\n    cp \"$APP_ROOT/portia.conf\" /etc/init\n}\n\n\nmigrate_django_db(){\n    python /vagrant/portia_server/manage.py migrate\n}\n\nstart_portia(){\n    echo \"Starting Nginx\"\n    echo \"==============\"\n    /etc/init.d/nginx start\n    echo \"Starting Nginx\"\n    echo \"==============\"\n    start portia\n}\n\ninstall_frontend_deps() {\n    npm install -g bower ember-cli\n}\n\nbuild_assets() {\n    cd \"$APP_ROOT/portiaui\"\n    npm install && npm run build\n}\n\nif [ \\( $# -eq 0 \\) -o \\( \"$1\" = \"-h\" \\) -o \\( \"$1\" = \"--help\" \\) ]; then\n    usage\n    exit 1\nfi\n\nUNKNOWN=0\nfor cmd in \"$@\"; do\n    if [ \"$(type -t -- \"$cmd\")\" != \"function\" ]; then\n        echo \"Unknown command: $cmd\"\n        UNKNOWN=1\n    fi\ndone\n\nif [ $UNKNOWN -eq 1 ]; then\n    echo \"Unknown commands encountered, exiting...\"\n    exit 1\nfi\n\nwhile [ $# -gt 0 ]; do\n    echo \"Executing command: $1\"\n    \"$1\"\n    shift\ndone\n\n"
  },
  {
    "path": "docker/qt_install.qs",
    "content": "// Emacs mode hint: -*- mode: JavaScript -*-\n// https://bitbucket.org/xiannox/trusty-qt5.7-beta-x64/raw/HEAD/qt-installer-noninteractive.qs\n// https://bitbucket.org/xiannox/trusty-qt5.7-beta-x64\n\nfunction Controller() {\n    installer.autoRejectMessageBoxes();\n    installer.installationFinished.connect(function() {\n        gui.clickButton(buttons.NextButton);\n    })\n}\n\nController.prototype.WelcomePageCallback = function() {\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.CredentialsPageCallback = function() {\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.IntroductionPageCallback = function() {\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.TargetDirectoryPageCallback = function()\n{\n    gui.currentPageWidget().TargetDirectoryLineEdit.setText(\"/opt/qt59\");\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.ComponentSelectionPageCallback = function() {\n    var widget = gui.currentPageWidget();\n    // To get component names, comment out widget.deselectAll()\n    // to install everything default, then check components.xml file.\n    widget.deselectAll();\n    widget.selectComponent(\"qt.591.gcc_64\");\n    widget.selectComponent(\"qt.591.qtwebengine.gcc_64\");\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.LicenseAgreementPageCallback = function() {\n    gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.StartMenuDirectoryPageCallback = function() {\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.ReadyForInstallationPageCallback = function()\n{\n    gui.clickButton(buttons.NextButton);\n}\n\nController.prototype.FinishedPageCallback = function() {\nvar checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm\nif (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {\n    checkBoxForm.launchQtCreatorCheckBox.checked = false;\n}\n    gui.clickButton(buttons.FinishButton);\n}\n"
  },
  {
    "path": "docker/restore-mtime.sh",
    "content": "#!/bin/bash\ncommit=$(git rev-list -n 1 HEAD requirements.txt)\nmtime=$(git show --pretty=format:%ai --abbrev-commit $commit |head -n1)\ntouch -d \"$mtime\" requirements.txt\n"
  },
  {
    "path": "docker/run-tests.sh",
    "content": "#!/bin/bash\n\nexport PYTHONPATH=`pwd`/slybot:`pwd`/slyd\npip install tox\n\ncd /app/slyd\npython2.7 tests/testserver/server.py 2>&1 | grep -v 'HTTP/1.1\" 200' &\nsleep 3\n\ncd /app/slybot\ntox\ncd /app/portia_server\n./manage.py test portia_orm.tests\n./manage.py test portia_api.tests\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: '3'\nservices:\n  app:\n    build: .\n    command: /app/docker/entry start-dev\n    volumes:\n      - ./data/projects:/app/data/projects:rw\n      - ./portiaui/dist:/app/portiaui/dist\n      - ./slyd:/app/slyd\n      - ./portia_server:/app/portia_server\n      - ./slybot:/app/slybot\n    ports:\n      - 9001:9001\n    restart: always\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# User-friendly check for sphinx-build\nifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)\n$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)\nendif\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  latexpdfja to make LaTeX files and run them through platex/dvipdfmx\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  xml        to make Docutils-native XML files\"\n\t@echo \"  pseudoxml  to make pseudoxml-XML files for display purposes\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\trm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/Portia.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/Portia.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/Portia\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Portia\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\nlatexpdfja:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through platex and dvipdfmx...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\nxml:\n\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml\n\t@echo\n\t@echo \"Build finished. The XML files are in $(BUILDDIR)/xml.\"\n\npseudoxml:\n\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml\n\t@echo\n\t@echo \"Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml.\"\n"
  },
  {
    "path": "docs/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Portia documentation build configuration file, created by\n# sphinx-quickstart on Tue Aug 25 13:51:18 2015.\n#\n# This file is execfile()d with the current directory set to its\n# containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys\nimport os\nfrom datetime import datetime\nfrom os import path\n\nVERSION_FILE = path.abspath(path.join(path.dirname(__file__), '..', 'VERSION'))\nYEAR = datetime.now().year\nwith open(VERSION_FILE, 'r') as f:\n    RELEASE = f.read().strip()\n    VERSION = RELEASE.rsplit('.', 1)[0]\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#sys.path.insert(0, os.path.abspath('.'))\n\n# -- General configuration ------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = []\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = u'Portia'\ncopyright = u'{}, Scrapinghub'.format(YEAR)\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = VERSION\n# The full version, including alpha/beta/rc tags.\nrelease = RELEASE\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all\n# documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n# If true, keep warnings as \"system message\" paragraphs in the built documents.\n#keep_warnings = False\n\n\n# -- Options for HTML output ----------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'default'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n#html_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n#html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# Add any extra paths that contain custom files (such as robots.txt or\n# .htaccess) here, relative to this directory. These files are copied\n# directly to the root of the documentation.\n#html_extra_path = []\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\n#html_domain_indices = True\n\n# If false, no index is generated.\n#html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'Portiadoc'\n\n\n# -- Options for LaTeX output ---------------------------------------------\n\nlatex_elements = {\n# The paper size ('letterpaper' or 'a4paper').\n#'papersize': 'letterpaper',\n\n# The font size ('10pt', '11pt' or '12pt').\n#'pointsize': '10pt',\n\n# Additional stuff for the LaTeX preamble.\n#'preamble': '',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n  ('index', 'Portia.tex', u'Portia Documentation',\n   u'Scrapinghub', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output ---------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'portia', u'Portia Documentation',\n     [u'Scrapinghub'], 1)\n]\n\n# If true, show URL addresses after external links.\n#man_show_urls = False\n\n\n# -- Options for Texinfo output -------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n  ('index', 'Portia', u'Portia Documentation',\n   u'Scrapinghub', 'Portia', 'One line description of project.',\n   'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#texinfo_appendices = []\n\n# If false, no module index is generated.\n#texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#texinfo_show_urls = 'footnote'\n\n# If true, do not generate a @detailmenu in the \"Top\" node's menu.\n#texinfo_no_detailmenu = False\n\n### Following is taken from https://github.com/snide/sphinx_rtd_theme#using-this-theme-locally-then-building-on-read-the-docs\n# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org\non_rtd = os.environ.get('READTHEDOCS', None) == 'True'\n\nif not on_rtd:  # only import and set the theme if we're building docs locally\n    import sphinx_rtd_theme\n    html_theme = 'sphinx_rtd_theme'\n    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]\n\n# otherwise, readthedocs.org uses their theme by default, so no need to specify it\n### end\n"
  },
  {
    "path": "docs/examples.rst",
    "content": ".. _examples:\n\n========\nExamples\n========\n\nCrawling paginated listings\n===========================\n\nMost e-commerce sites use pagination to spread results across multiple pages.\n\nWhen crawling these sites with Portia, there are some best practices you should follow:\n\n\t* Use the target categories as start pages.\n\t* Use URL follow patterns to limit Portia to only visit category and article pages.\n\nThis will prevent Portia from visiting unnecessary pages so you can crawl the items a lot faster.\n\nLet's use `timberlandonline.co.uk <http://www.timberlandonline.co.uk>`_ as an example. Say you want to only scrape products from the `boots <http://www.timberlandonline.co.uk/en/men-footwear-boots>`_ and `shoes <http://www.timberlandonline.co.uk/en/men-footwear-shoes>`_ categories. You can `create a spider <getting-started>`_ and add the categories to its start URLs:\n\n.. image:: _static/portia-start-urls.png\n    :target: _static/portia-start-urls.png\n    :alt: Start URLs\n\nTo ensure the spider only visits relevant pages, you'll need to limit crawling to the target categories and product pages. You can accomplish this defining URL follow patterns in the Link Crawling configuration of your spider:\n\n.. image:: _static/portia-follow-patterns.png\n    :target: _static/portia-follow-patterns.png\n    :alt: Follow patterns\n\nYou can use follow patterns to filter URLs with `regular expressions <https://en.wikipedia.org/Regular_expressions>`_. You can see which links will be followed by clicking the |icon-toggle-links| button (toggle highlighting) to the right of Portia's URL bar. Followed links will be highlighted in green and excluded links in red.\n\n.. |icon-toggle-links| image:: _static/portia-icon-toggle-links.png\n    :width: 16px\n    :height: 16px\n\nAs you can see above, the spider will now only visit the boots and shoes category pages and their product listings. To ensure that only products belonging to the target categories are visited, we filter against the ``catID`` parameter value in the URL.\n\nCrawling listings in this manner is much more efficient. You avoid visiting tons of unwanted pages on the site and instead crawl only those you need.\n\nSelecting elements with CSS and XPath\n=====================================\n\nYou can select elements with CSS or XPath by changing the selection mode of an annotation. You can do it clicking the |cog-symbol| symbol right to the annotation name in the ``ITEMS`` section of the left sidebar.\n\n.. image:: _static/portia-change-selection-mode.png\n    :alt: Changing the selection mode of an annotation.\n\nThis way, you can tweak your selections, making them more or less specific, for example.\n\n.. |cog-symbol| unicode:: 0x2699\n\nExtracting a single attribute to multiple fields\n================================================\n\nPortia supports multiple annotations for the same attribute. You can take advantage of this to extract an attribute to multiple fields by simply creating an annotation for each field.\n\nImagine you want to extract the username and the date from blog posts and this information is represented like this:\n\n.. code-block:: html\n\n    <div class=\"details\">\n        By johndoe on March 3th\n    </div>\n\nTo extract this information separately, you have to annotate the element, click the gear icon right after the field name and add an extractor with a regular expression that captures only the username: ``By (\\w+).*``.\n\nAfter that, you have to go back to annotation mode, click the |icon-add| button in the toolbar and then annotate the same element again. Now, you have to create another extractor to capture only the date from the element: ``By \\w+ on (.*)``.\n\n.. |icon-add| image:: _static/portia-icon-add.png\n    :width: 16px\n    :height: 16px\n\n\nScraping multiple items from a single page\n==========================================\n\nYou'll often need to retrieve several items from a single page. You can do this using either the repeating element tool |portia-icon-add-repeat| or with the wand |portia-icon-wand| by annotating the first item's element and then clicking the second item's element. Portia will detect all similar items on the page and create annotations for each of them.\n\n.. |portia-icon-add-repeat| image:: _static/portia-icon-add-repeat.png\n    :width: 16px\n    :height: 16px\n\n.. |portia-icon-wand| image:: _static/portia-icon-wand.png\n    :width: 16px\n    :height: 16px\n\nLet's revisit the `timerberlandonline.co.uk <http://www.timberlandonline.co.uk>`_ spider and demonstrate this process by annotating a couple of pairs of shoes.\n\nClick the tiles icon to select the repeating element tool and then click an element, and Portia will find all similar elements and link them to the same field:\n\n.. image:: _static/portia-multi-preview.png\n    :target: _static/portia-multi-preview.png\n    :alt: Start URLs\n\nNow you just need to do same for the other fields, and you're done!\n\n.. _multiple-samples-example:\n\nUsing Multiple Samples to Deal with Different Layouts\n=====================================================\n\nSome websites use different layouts to display the same kind of information. E-commerce websites usually create special pages for some products on Black Friday, for example. Sometimes, the problem is that some pages might not have all the data you need.\n\nYou can create multiple samples, even if you are extracting only one item type, to make sure your spider can handle these variations.\n\n**Consider this example:** our spider has an item type with the fields ``name``, ``price``, ``description`` and ``manufacturer``, where ``name`` and ``price`` are required fields. We have created a sample with annotations for each of those fields. Upon running the spider, many items are correctly scraped; however, there are a large number of scraped items where the ``manufacturer`` field contains what should be the ``description``, and the ``description`` field is empty. This has been caused by some pages having a different layout:\n\nLayout A:\n\n.. code-block:: html\n\n    <table>\n        <tbody>\n            <tr>\n                <td>name</td>\n                <td>price</td>\n            </tr>\n            <tr>\n                <td colspan=\"2\">manufacturer</td>\n            <tr>\n            <tr>\n                <td colspan=\"2\">description</td>\n            </tr>\n        </tbody>\n    </table>\n\nLayout B:\n\n.. code-block:: html\n\n    <table>\n        <tbody>\n            <tr>\n                <td>name</td>\n                <td>price</td>\n            </tr>\n            <tr>\n                <td colspan=\"2\">description</td>\n            </tr>\n        </tbody>\n    </table>\n\nAs you can see, the problem lies with the fact that in layout B the description is where manufacturer would be, and with ``description`` not being a required field it means that the sample created for layout A will match layout B. Creating a new sample for layout B won't be enough to fix the problem, as layout A's sample :ref:`would contain more annotation and be matched against first <multiple-samples>`.\n\nInstead we need to modify layout A's sample, and mark the ``description`` annotation as **Required**. With this added constraint, items displayed with layout B will not be matched against layout A's sample due to the missing ``description`` field, so the spider will proceed onto layout B's sample which will extract the data successfully.\n\n:ref:`Click here to learn more about Multiple Samples <multiple-samples>`.\n"
  },
  {
    "path": "docs/faq.rst",
    "content": ".. _faq:\n\nFAQ\n===\n\nHow do I use Crawlera with Portia?\n----------------------------------\n\nPortia spiders are standard Scrapy spiders, so you can enable the `middleware <https://github.com/scrapy-plugins/scrapy-crawlera>`_ in your project's `settings.py`.\n\nDoes Portia support AJAX based websites?\n----------------------------------------\n\nYes.\n\nDoes Portia work with large JavaScript frameworks like Ember?\n-------------------------------------------------------------\n\nBackbone, Angular, and Ember have all been thoroughly tested using Portia, and in most cases should work fine. React based websites aren't supported yet but we're working on it.\n\nDoes Portia support sites that require you to log in?\n-----------------------------------------------------\n\nYes, you can set credentials in your spider's crawling configuration.\n\nDoes Portia support content behind search forms?\n------------------------------------------------\n\nNo, but we plan on adding support in the near future.\n\n"
  },
  {
    "path": "docs/getting-started.rst",
    "content": ".. _getting-started:\n\n===============\nGetting Started\n===============\n\n.. note:: If you don't have Portia running yet, please read the :ref:`Installation guide <installation>` first. \n\nThis tutorial will briefly cover how to begin extracting data with Portia.\n\nCreating a spider\n=================\n\nLet's start by creating a project. Enter a URL and Portia will render it like below:\n\n\n.. This tutorial will briefly cover how to retrieve products from Amazon.com_ using Portia.\n\n.. .. _amazon.com: http://amazon.com/\n\n.. First, create a Portia project and enter a URL. Portia will render it like below:\n\n.. image:: _static/portia-main-page.png\n    :alt: Portia main page\n\nClick the ``New spider`` button to create a new spider. Portia will add the page's URL as a start page automatically. Start pages are used to seed the crawl and Portia will visit them when you start the spider to find more links.\n\nCreating a sample\n=================\n\nA sample describes how data should be extracted from the page. Portia will use your samples to extract data from other pages with a similar structure.\n\nPortia works like a web browser, so you can navigate between pages as you would normally. Navigate to a page you want to scrape \tand then the ``New sample`` button to create a :ref:`sample <samples>` of the page.\n\n.. image:: _static/portia-new-spider.png\n    :alt: Newly created sample\n\nNow that you've created the sample, you can begin :ref:`annotating <what-are-annotations>` the page. Annotations link a piece of data in the page to an item field. You'll notice that you can highlight elements on the page, if you click on it will create a new field to which the element will be extracted. \n\nPortia will create an :ref:`item <items>` schema from the elements that you annotated and will use it as the data format for the scraped :ref:`items <items>`.\n\n\n.. image:: _static/portia-annotation.png\n    :alt: Annotating a page\n\nYou can see a preview of the items your sample will extract on the right. Once you've annotated all the data you wish to extract, close the sample. Your spider is :ref:`ready to run <running-spider>`, but you may want to configure it further in which case you should continue reading.\n\nConfiguring your crawler\n========================\n\nTo start crawling a website, Portia needs one or more URLs to visit first so it can gather further links to crawl. You can define these URLs on the left under ``START PAGES``.\n\n.. image:: _static/portia-add-start-pages.png\n    :alt: Adding start pages\n\n\nPortia follows all in-domain URLs by default. In many cases you'll want to limit the pages Portia will visit so requests aren't wasted on irrelevant pages. \n\nTo do this, you can set follow and exclude patterns that whitelist and blacklist URLs respectively. These can be configured by changing the crawling policy to ``Configure URL patterns``. \n\nFor example, Amazon products' URLs contain ``/gp/``, so you can add this as a follow pattern and Portia will know to only follow such URLs.\n\n.. image:: _static/portia-configuring-crawling.png\n    :alt: Configuring the crawling\n\nWhat's next?\n============\n\nOnce you've created your samples and configured crawling behavior, it's time to :ref:`run <running-spider>` your spider.\n\nCheck out the :ref:`examples` to learn a few tips to be more productive with Portia.\n"
  },
  {
    "path": "docs/index.rst",
    "content": "Welcome to Portia's documentation!\n==================================\n\nContents:\n\n.. toctree::\n   :maxdepth: 2\n\n   installation\n   getting-started\n   examples\n   projects\n   spiders\n   samples\n   items\n   faq\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`\n"
  },
  {
    "path": "docs/installation.rst",
    "content": ".. _installation:\n\nInstallation\n============\n\nDocker (recommended)\n--------------------\n\nIf you are on a Linux machine you will need `Docker <https://docs.docker.com/installation/>`_ installed or if you are using a `Windows <https://docs.docker.com/installation/windows/>`_ or `Mac OS X <https://docs.docker.com/installation/mac/>`_ machine you will need `boot2docker <http://boot2docker.io/>`_.\n\nYou can run Portia with the command below::\n\n    docker run -i -t --rm -v <PROJECTS_FOLDER>:/app/data/projects:rw -p 9001:9001 scrapinghub/portia\n\nOr with docker-compose by running::\n\n    docker compose up\n\nPortia will now be running on port 9001 and you can access it at ``http://localhost:9001``.\nProjects will be stored in the project folder that you mount to docker.\n\nTo extract data using portia you can run your spider with::\n\n    docker run -i -t --rm -v <PROJECTS_FOLDER>:/app/data/projects:rw -v <OUPUT_FOLDER>:/mnt:rw -p 9001:9001 scrapinghub/portia \\\n        portiacrawl /app/data/projects/PROJECT_NAME SPIDER_NAME -o /mnt/SPIDER_NAME.jl\n\nAfter the crawl finishes you will find your extracted data in the the `OUTPUT_FOLDER`\n\n.. note:: *<PROJECT_FOLDER>* and *<OUTPUT_FOLDER>* are just paths on your system where your projects and extracted data are stored.\n.. warning:: For Windows the *<PROJECT_FOLDER>* path must be of the form */<DRIVE_LETTER/<PATH>*. For example */C/Users/UserName/Documents/PortiaProjects*\n\n\nVagrant\n-------\n\nCheckout the repository::\n\n    $ git clone https://github.com/scrapinghub/portia\n\nYou will need `Vagrant <http://www.vagrantup.com/downloads.html>`_ , `VirtualBox <https://www.virtualbox.org/wiki/Downloads>`_ `Node.js <https://nodejs.org/en/download/package-manager/>`_, `Bower <https://bower.io/#install-bower>`_ and `ember-cli <https://ember-cli.com/>`_ installed.\n\nRun the following in Portia's directory::\n\n    docker/compile-assets.sh\n    vagrant up\n\nThis will launch an Ubuntu virtual machine, build Portia and start the ``portia`` server. You'll then be able to access Portia at ``http://localhost:9001``. You can stop the ``portia`` server using ``vagrant suspend`` or ``vagrant halt``. To run ``portiacrawl`` you will need to SSH into the virtual machine by running ``vagrant ssh``.\n\n\nUbuntu\n------\n\nRunning Portia Locally\n^^^^^^^^^^^^^^^^^^^^^^\n\n**These instructions are only valid for an Ubuntu based OS**\n\nInstall the following dependencies::\n\n    sudo ./provision.sh install_deps\n\nIf you would like to run Portia locally you should create an environment with virtualenv::\n\n    virtualenv YOUR_ENV_NAME --no-site-packages\n    source YOUR_ENV_NAME/bin/activate\n    cd ENV_NAME\n\nNow clone this repository into that env::\n\n    git clone https://github.com/scrapinghub/portia.git\n    cd portia\n\nInstall splash and the required packages::\n\n    sudo ./provision.sh install_deps install_splash install_python_deps\n\nTo run Portia start slyd and portia_server::\n\n    PYTHONPATH='/vagrant/portia_server:/vagrant/slyd:/vagrant/slybot'\n    slyd/bin/slyd -p 9002 -r portiaui/dist &\n    portia_server/manage.py runserver\n\nPortia should now be running on port 9001 and you can access it at ``http://localhost:9001``.\n\n\nDeveloping Portia using Docker\n------------------------------\n\nTo develop Portia using docker you will need `Node.js <https://nodejs.org/en/download/package-manager/>`_, `Bower <https://bower.io/#install-bower>`_ and `ember-cli <https://ember-cli.com/>`_ installed.\n\nTo set up Portia for development use the commands below::\n\n    mkdir ~/data\n    git clone git@github.com:scrapinghub/portia.git\n    cd portia/portiaui\n    npm install && bower install\n    cd node_modules/ember-cli && npm install && cd ../../\n    ember build\n    cd ..\n    docker build . -t portia\n\nYou can run it using::\n\n    docker run -i -t --rm -p 9001:9001 \\\n        -v ~/data:/app/data/projects:rw \\\n        -v ~/portia/portiaui/dist:/app/portiaui/dist \\\n        -v ~/portia/slyd:/app/slyd \\\n        -v ~/portia/portia_server:/app/portia_server \\\n        portia\n\nThis sets up the ``portia_server`` to restart with every change you make and if you run\n``cd ~/portia/portiaui && ember build -w`` in another shell you can rebuild the Portia assets with every change too.\n"
  },
  {
    "path": "docs/items.rst",
    "content": ".. _items:\n\n=====\nItems\n=====\n\nAn item refers to a single item of data scraped from the target website. A common example of an item would be a product for sale on an e-commerce website. It's important to differentiate **item** and **item definition**. In Portia, an item definition or item type refers to the schema of an item rather than the item itself. For example, ``book`` would be an item definition, and a specific book scraped from the website would be an item. An item definition consists of multiple fields, so using the example of a product you might have fields named ``name``, ``price``, ``manufacturer`` and so on. We use annotations to extract data from the page into each of these fields.\n\nTo ensure certain fields are extracted, you can set the **Required** flag on each required field. Portia will discard an item if any required fields are missing. Portia will also remove any duplicate items by default.\n\nIn some cases you may have fields where the value can vary despite being the same item, in which case you can mark them as **Vary**. This will ignore the field when checking for duplicates. It’s important to only use **Vary** when necessary, as misuse could easily lead to duplicate items being stored. The ``url`` field is a good example of where **Vary** is useful, as the same item may have multiple URLs. If the ``url`` field wasn’t marked as **Vary**, each duplicate item would be seen as unique because its URL would be different.\n\nField types\n===========\n\nYou can set a field's type to ensure it will only match that kind of data. The following field types are available:\n\n========= ===========\ntype      description\n========= ===========\ntext      Plain text. Any markup is stripped and text within nested elements is also extracted.\nnumber    A numeric value e.g. 7, 9.59.\nimage     An image URL. In most cases you will want to map an ``img`` element's ``src`` attribute.\nprice     The same as ``number``, a numeric value.\nraw html  Non-sanitized HTML.\nsafe html Sanitized HTML. See below for more details.\ngeopoint  The same as ``text``.\nurl       A URL.\ndate      A date value parsed by `dateparser <https://github.com/scrapinghub/dateparser>`_. Won't work if the annotated element has non-date text.\n========= ===========\n\n\nThe ``safe html`` field type keeps the following elements: ``br``, ``p``, ``big``, ``em``, ``small``, ``strong``, ``sub``, ``sup``, ``ins``, ``del``, ``code``, ``kbd``, ``samp``, ``tt``, ``var``, ``pre``, ``listing``, ``plaintext``, ``abbr``, ``acronym``, ``address``, ``bdo``, ``blockquote``, ``q``, ``cite``, ``dfn``, ``table``, ``tr``, ``th``, ``td``, ``tbody``, ``ul``, ``ol``, ``li``, ``dl``, ``dd``, ``dt``.\n\nAll other elements are discarded, with the exception of header tags (``h1``, ``h2`` ... ``h6``) and ``b`` which are replaced with ``strong``, and ``i`` which is replaced with ``em``. Whitelisted elements contained within non-whitelisted elements will still be retained, with the exception of elements contained within a ``script``, ``img`` or ``input`` element. For example, ``<div><code>example</code></div>`` would extract to ``<code>example</code>``, whereas ``<script><code>example</code></script>`` would be discarded completely."
  },
  {
    "path": "docs/make.bat",
    "content": "@ECHO OFF\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset BUILDDIR=_build\r\nset ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .\r\nset I18NSPHINXOPTS=%SPHINXOPTS% .\r\nif NOT \"%PAPER%\" == \"\" (\r\n\tset ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%\r\n\tset I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%\r\n)\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\nif \"%1\" == \"help\" (\r\n\t:help\r\n\techo.Please use `make ^<target^>` where ^<target^> is one of\r\n\techo.  html       to make standalone HTML files\r\n\techo.  dirhtml    to make HTML files named index.html in directories\r\n\techo.  singlehtml to make a single large HTML file\r\n\techo.  pickle     to make pickle files\r\n\techo.  json       to make JSON files\r\n\techo.  htmlhelp   to make HTML files and a HTML help project\r\n\techo.  qthelp     to make HTML files and a qthelp project\r\n\techo.  devhelp    to make HTML files and a Devhelp project\r\n\techo.  epub       to make an epub\r\n\techo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\r\n\techo.  text       to make text files\r\n\techo.  man        to make manual pages\r\n\techo.  texinfo    to make Texinfo files\r\n\techo.  gettext    to make PO message catalogs\r\n\techo.  changes    to make an overview over all changed/added/deprecated items\r\n\techo.  xml        to make Docutils-native XML files\r\n\techo.  pseudoxml  to make pseudoxml-XML files for display purposes\r\n\techo.  linkcheck  to check all external links for integrity\r\n\techo.  doctest    to run all doctests embedded in the documentation if enabled\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"clean\" (\r\n\tfor /d %%i in (%BUILDDIR%\\*) do rmdir /q /s %%i\r\n\tdel /q /s %BUILDDIR%\\*\r\n\tgoto end\r\n)\r\n\r\n\r\n%SPHINXBUILD% 2> nul\r\nif errorlevel 9009 (\r\n\techo.\r\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\r\n\techo.installed, then set the SPHINXBUILD environment variable to point\r\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\r\n\techo.may add the Sphinx directory to PATH.\r\n\techo.\r\n\techo.If you don't have Sphinx installed, grab it from\r\n\techo.http://sphinx-doc.org/\r\n\texit /b 1\r\n)\r\n\r\nif \"%1\" == \"html\" (\r\n\t%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/html.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"dirhtml\" (\r\n\t%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"singlehtml\" (\r\n\t%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"pickle\" (\r\n\t%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the pickle files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"json\" (\r\n\t%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the JSON files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"htmlhelp\" (\r\n\t%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run HTML Help Workshop with the ^\r\n.hhp project file in %BUILDDIR%/htmlhelp.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"qthelp\" (\r\n\t%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run \"qcollectiongenerator\" with the ^\r\n.qhcp project file in %BUILDDIR%/qthelp, like this:\r\n\techo.^> qcollectiongenerator %BUILDDIR%\\qthelp\\Portia.qhcp\r\n\techo.To view the help file:\r\n\techo.^> assistant -collectionFile %BUILDDIR%\\qthelp\\Portia.ghc\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"devhelp\" (\r\n\t%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"epub\" (\r\n\t%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The epub file is in %BUILDDIR%/epub.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latex\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; the LaTeX files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latexpdf\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tcd %BUILDDIR%/latex\r\n\tmake all-pdf\r\n\tcd %BUILDDIR%/..\r\n\techo.\r\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latexpdfja\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tcd %BUILDDIR%/latex\r\n\tmake all-pdf-ja\r\n\tcd %BUILDDIR%/..\r\n\techo.\r\n\techo.Build finished; the PDF files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"text\" (\r\n\t%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The text files are in %BUILDDIR%/text.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"man\" (\r\n\t%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The manual pages are in %BUILDDIR%/man.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"texinfo\" (\r\n\t%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"gettext\" (\r\n\t%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The message catalogs are in %BUILDDIR%/locale.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"changes\" (\r\n\t%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.The overview file is in %BUILDDIR%/changes.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"linkcheck\" (\r\n\t%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Link check complete; look for any errors in the above output ^\r\nor in %BUILDDIR%/linkcheck/output.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"doctest\" (\r\n\t%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Testing of doctests in the sources finished, look at the ^\r\nresults in %BUILDDIR%/doctest/output.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"xml\" (\r\n\t%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The XML files are in %BUILDDIR%/xml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"pseudoxml\" (\r\n\t%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.\r\n\tgoto end\r\n)\r\n\r\n:end\r\n"
  },
  {
    "path": "docs/projects.rst",
    "content": ".. _projects:\n\n========\nProjects\n========\n\nA project in Portia consists of one or more :ref:`spiders <spiders>` and can be deployed to any `scrapyd`_ instance.\n\nVersioning\n==========\n\n.. _project-deployment:\n\nPortia provides project versioning via Git, but this isn't enabled by default.\n\nGit versioning can be enabled by creating a `local_settings.py` file in the `slyd/slyd` directory and adding the following:\n\n.. code-block:: python\n\n    import os\n    \n    SPEC_FACTORY = {\n        'PROJECT_SPEC': 'slyd.gitstorage.projectspec.ProjectSpec',\n        'PROJECT_MANAGER': 'slyd.gitstorage.projects.ProjectsManager',\n        'PARAMS': {\n            'storage_backend': 'dulwich.repo.Repo',\n            'location': os.environ.get('PORTIA_DATA_DIR', SPEC_DATA_DIR)\n        },\n        'CAPABILITIES': {\n            'version_control': True,\n            'create_projects': True,\n            'delete_projects': True,\n            'rename_projects': True\n        }\n    }\n\nYou can also use MySQL to store your project files in combination with Git:\n\n.. code-block:: python\n\n    import os\n\n    SPEC_FACTORY = {\n        'PROJECT_SPEC': 'slyd.gitstorage.projectspec.ProjectSpec',\n        'PROJECT_MANAGER': 'slyd.gitstorage.projects.ProjectsManager',\n        'PARAMS': {\n            'storage_backend': 'slyd.gitstorage.repo.MysqlRepo',\n            'location': os.environ.get('DB_URL'),\n        },\n        'CAPABILITIES': {\n            'version_control': True,\n            'create_projects': True,\n            'delete_projects': True,\n            'rename_projects': True\n        }\n    }\n\nThis will store versioned projects as blobs within the MySQL database that you specify by setting the environment variable below::\n\n    DB_URL = mysql://<USERNAME>:<PASSWORD>@<HOST>:<PORT>/<DB>\n\nWhen this env variable is set the database can be initialized by running the bin/init_mysqldb script.\n\n.. note:: The MySQL backend only stores project data. Data generated during crawl is still stored locally.\n\nDeployment\n==========\n\nYou can deploy your Portia projects using `scrapyd`_. Change directory into ``slyd/data/projects/PROJECT_NAME`` and add your target to ``scrapy.cfg``. You'll then be able to run ``scrapyd-deploy`` which will deploy your project using the default deploy target. Alternatively, you can specify a target and project using the following::\n\n    scrapyd-deploy your_scrapyd_target -p project_name\n\nOnce your spider is deployed, you can schedule your spider via ``schedule.json``::\n\n    curl http://your_scrapyd_host:6800/schedule.json -d project=your_project_name -d spider=your_spider_name\n\n.. warning:: Running scrapyd from your project directory will cause deployment to fail.\n\n.. _scrapyd: https://scrapyd.readthedocs.org/en/latest/\n"
  },
  {
    "path": "docs/samples.rst",
    "content": ".. _samples:\n\n=======\nSamples\n=======\n\nWhat are samples?\n=================\n\nWhen the crawler visits a page, it matches the page against each sample. Samples with more annotations take precedence over those with less. If the page matches a sample, it will use the sample's annotations to extract data. Assuming all required fields are filled, it will yield an item. Spiders consist of one or more samples and each sample is made up of annotations that define the elements you wish to extract. Within the sample you define the item you want to extract and mark required fields for that item.\n\n.. _what-are-annotations:\n\nWhat are annotations?\n=====================\n\nAn annotation defines the location of a piece of data on the web page and how it should be used by the spider. Typically an annotation maps some element on the page to a particular field of an item, but there is also the option to mark the data as being required without storing the data in an item. It's possible to map attributes of a particular element instead of the content if this is required, for example you can map the ``href`` attribute of an anchor link rather than the text.\n\nAnnotations\n===========\n\nCreating annotations\n--------------------\n\nYou can create annotations by clicking an element on the page with the appropriate tool selected. You should use the wand (|icon-wand|) most of the time as it will select the appropriate tool automatically. The following tools are available:\n\n* |icon-wand| - Select the most appropriate tool when clicking on an element\n* |icon-select| - Select an element\n* |icon-add| - Add an element\n* |icon-sub| - Remove an element\n* |icon-add-repeat| - Add repeating element\n\n.. |icon-wand| image:: _static/portia-icon-wand.png\n    :width: 16px\n    :height: 16px\n.. |icon-select| image:: _static/portia-icon-pointer.png\n    :width: 16px\n    :height: 16px\n.. |icon-add| image:: _static/portia-icon-add.png\n    :width: 16px\n    :height: 16px\n.. |icon-sub| image:: _static/portia-icon-sub.png\n    :width: 16px\n    :height: 16px\n.. |icon-add-repeat| image:: _static/portia-icon-add-repeat.png\n    :width: 16px\n    :height: 16px\n\nExtractors\n----------\n\nYou can also add extractors to annotations. Extractors let you use regular expressions or a pre-defined type to further refine data extracted from a page.\n\nFor example, assume there's an element that contains a phone number, but it has additional text that you don't need. In this scenario you could add an extractor to retrieve only the phone number instead of the full text.\n\nYou can define the extractor for a particular field by clicking in the gear icon right after the field type:\n\n.. image:: _static/portia-goto-extractors.png\n    :alt: Field extractors\n\nAnd then you can select use any built-in extractors or create your own extractor via regular expressions:\n\n.. image:: _static/portia-extractors.png\n    :alt: Field extractors\n\nMultiple fields\n---------------\n\nIt's possible to extract multiple fields using a single annotation if there are several properties you want to extract from an element. For example, if there was an image you wanted, you could map the ``src`` attribute that contains the image URL to one field, and the ``alt`` attribute to another.\n\nYou can do it in the ``Inspector`` panel in the top left of the screen:\n\n.. image:: _static/portia-sample-multiple-fields.png\n    :alt: Multiple fields from one element\n\nJust click the ``+`` button right after an attribute to add a new field based on the same annotation.\n\n.. _multiple-samples:\n\nMultiple samples\n================\n\nIt's often necessary to use multiple samples within one spider, even if you're only extracting one item type. Some pages containing the same item type may have a different layout or fields missing, and you will need to accommodate for those pages by creating a sample for each variation in layout.\n\nSample precedence\n-----------------\n\nThe more annotations a sample has, the more specific the data being extracted and therefore less chance of a false positive. For this reason, samples with more annotations take precedence over those with less annotations. If a subset of samples contains equal number of annotations per sample, then within that subset samples will be tried in the order they were created from first to last. In other words, samples are tried sequentially in order of number of annotations first, and age second.\n\nIf you are working with a large number of samples, it may be difficult to ensure the correct sample is applied to the right page. It's best to keep samples as strict as possible to avoid any false matches. It's useful to take advantage of the ``Required`` option from item fields and annotate elements that will always appear on matching pages to reduce the number of false positives.\n\n**Check this example** to learn how to do it: :ref:`multiple-samples-example`.\n"
  },
  {
    "path": "docs/spiders.rst",
    "content": ".. _spiders:\n\n=======\nSpiders\n=======\n\nSpiders are web crawlers that use :ref:`samples <samples>` to extract data from the pages it visits.\n\n.. _spider-properties:\n\nSpider properties\n=================\n\nYou can access your spider's properties by clicking the gear icon located right of your spider in the list on the left.\n\n.. image:: _static/portia-spider-properties.png\n    :alt: Spider properties\n\n\nConfiguring login details\n-------------------------\n\nIf you need to log into a site, you can configure login details by ticking 'Perform login' in the :ref:`spider properties <spider-properties>` menu. Here you can set the login URL, username and password.\n\n\nEnabling JavaScript\n-------------------\n\nYou can enable JavaScript in your spider by ticking ``Enable JavaScript`` in the :ref:`spider properties <spider-properties>` menu. Note that you'll need to set the ``SPLASH_URL`` Scrapy setting to your [Splash](https://github.com/scrapinghub/splash) endpoint URL for JavaScript to work during the crawl.\n\nStart pages and link crawling\n=============================\n\nStart pages are the initial URLs that Portia will visit to start the crawl. You can add and remove start pages on the left menu.\n\nYou can choose how Portia will follow links under ``LINK CRAWLING``.\n\n.. image:: _static/portia-spider-link-crawling.png\n    :alt: Link crawling properties\n\n\n* Follow all in-domain links - follow all links under the same domain and subdomain.\n* Don't follow links - only visit start URLs.\n* Configure url patterns - use regular expressions to choose which URLs to follow.\n\nThe ``Configure url patterns`` option lets you set follow and exclude patterns as well as choose whether to respect the ``nofollow`` attribute. Click the gear icon to show the link crawling options where you can set the follow/exclude patterns.\n\n.. _running-spider:\n\nRunning a spider\n================\n\nPortia will save your projects in ``slyd/data/projects``. You can use ``portiacrawl`` to run a spider::\n\n    portiacrawl PROJECT_PATH SPIDER_NAME\n\nwhere ``PROJECT_PATH`` is the path of the project and ``SPIDER_NAME`` is a spider that exists within that project. You can list the spiders for a project with the following::\n\n    portiacrawl PROJECT_PATH\n\nPortia spiders are ultimately `Scrapy <http://scrapy.org>`_ spiders. You can pass Scrapy arguments when running with ``portiacrawl`` using the ``-a`` option. You can also specify a custom settings module using the ``--settings`` option. The `Scrapy documentation <http://doc.scrapy.org/en/latest>`_ contains full details on available options and settings.\n\nMinimum items threshold\n=======================\n\nTo avoid infinite crawling loops, Portia spiders check to see if the number of scraped items meet a minimum threshold over a given period of time. If not, the job is closed with ``slybot_fewitems_scraped`` outcome.\n\nBy default, the period of time is 3600 seconds and the threshold is 200 items scraped. This means if less than 200 items were scraped in the last 3600 seconds, the job will close.\n\nYou can set the period in seconds with the ``SLYCLOSE_SPIDER_CHECK_PERIOD`` setting, and the threshold number of items with the ``SLYCLOSE_SPIDER_PERIOD_ITEMS`` setting.\n\n"
  },
  {
    "path": "portia_server/db_repo/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/db_repo/apps.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.apps import AppConfig\n\n\nclass DbRepoConfig(AppConfig):\n    name = 'db_repo'\n"
  },
  {
    "path": "portia_server/db_repo/migrations/0001_initial.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.10 on 2016-10-04 06:54\nfrom __future__ import unicode_literals\n\nimport db_repo.models\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Objs',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('oid', db_repo.models.RealBinaryField(default='\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00', max_length=40)),\n                ('repo', models.CharField(max_length=64)),\n                ('type', db_repo.models.PositiveTinyIntegerField(db_index=True)),\n                ('size', db_repo.models.PositiveBigIntegerField(db_index=True)),\n                ('data', db_repo.models.CompressedBinaryField()),\n            ],\n            options={\n                'db_table': 'objs',\n            },\n        ),\n        migrations.CreateModel(\n            name='Refs',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('ref', models.CharField(default='', max_length=100)),\n                ('repo', models.CharField(max_length=64)),\n                ('value', db_repo.models.RealBinaryField(db_index=True, max_length=40)),\n            ],\n            options={\n                'db_table': 'refs',\n            },\n        ),\n        migrations.AlterUniqueTogether(\n            name='refs',\n            unique_together=set([('ref', 'repo')]),\n        ),\n        migrations.AlterUniqueTogether(\n            name='objs',\n            unique_together=set([('oid', 'repo')]),\n        ),\n    ]\n"
  },
  {
    "path": "portia_server/db_repo/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/db_repo/migrations/slyd_to_django.sql",
    "content": "ALTER TABLE `objs` DROP PRIMARY KEY,\n                   ADD COLUMN `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,\n                   ADD CONSTRAINT `objs_oid_feda89ac_uniq` UNIQUE (`oid`, `repo`),\n                   CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,\n                   ALTER COLUMN `oid` DROP DEFAULT;\nDROP INDEX `type` ON `objs`;\nDROP INDEX `size` ON `objs`;\nCREATE INDEX `objs_599dcce2` ON `objs` (`type`);\nCREATE INDEX `objs_f7bd60b7` ON `objs` (`size`);\n\nALTER TABLE `refs` DROP PRIMARY KEY,\n                   ADD COLUMN `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,\n                   ADD CONSTRAINT `refs_ref_4a751775_uniq` UNIQUE (`ref`, `repo`),\n                   CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,\n                   ALTER COLUMN `ref` DROP DEFAULT;\nDROP INDEX `value` ON `refs`;\nCREATE INDEX `refs_2063c160` ON `refs` (`value`);"
  },
  {
    "path": "portia_server/db_repo/models.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.db.models import (Model, BinaryField, BigIntegerField,\n                              PositiveSmallIntegerField, CharField)\nfrom django.db.models.expressions import Func, Value\n\n\nclass PositiveTinyIntegerField(PositiveSmallIntegerField):\n    def db_type(self, connection):\n        if connection.vendor == 'mysql':\n            return \"tinyint(1) unsigned\"\n        else:\n            return super(PositiveTinyIntegerField, self).db_type(connection)\n\n\nclass PositiveBigIntegerField(BigIntegerField):\n    def db_type(self, connection):\n        if connection.vendor == 'mysql':\n            return \"bigint(20) unsigned\"\n        else:\n            return super(PositiveBigIntegerField, self).db_type(connection)\n\n\nclass RealBinaryField(BinaryField):\n    def db_type(self, connection):\n        if connection.vendor == 'mysql':\n            return \"binary({})\".format(self.max_length)\n        else:\n            return super(RealBinaryField, self).db_type(connection)\n\n\nclass CompressedBinaryField(BinaryField):\n    def get_db_prep_save(self, value, connection):\n        prepped_value = super(CompressedBinaryField, self).get_db_prep_save(\n            value, connection)\n        if connection.vendor == 'mysql':\n            return Func(Value(prepped_value), function='COMPRESS')\n        return prepped_value\n\n    def select_format(self, compiler, sql, params):\n        sql, params = super(CompressedBinaryField, self).select_format(\n            compiler, sql, params)\n        if compiler.connection.vendor == 'mysql':\n            sql = 'UNCOMPRESS({})'.format(sql)\n        return sql, params\n\n\nclass Objs(Model):\n    oid = RealBinaryField(max_length=40, default='\\0' * 40, null=False)\n    repo = CharField(max_length=64, null=False)\n    type = PositiveTinyIntegerField(null=False, db_index=True)\n    size = PositiveBigIntegerField(null=False, db_index=True)\n    data = CompressedBinaryField(null=False)\n\n    class Meta(object):\n        unique_together = (('oid', 'repo'),)\n        db_table = 'objs'\n\n\nclass Refs(Model):\n    ref = CharField(max_length=100, default='', null=False)\n    repo = CharField(max_length=64, null=False)\n    value = RealBinaryField(max_length=40, null=False, db_index=True)\n\n    class Meta(object):\n        unique_together = (('ref', 'repo'),)\n        db_table = 'refs'\n"
  },
  {
    "path": "portia_server/db_repo/repo.py",
    "content": "from django.db.transaction import get_autocommit\nfrom django.db.utils import IntegrityError\nfrom dulwich.errors import ObjectMissing\nfrom dulwich.object_store import BaseObjectStore, MemoryObjectStore\nfrom dulwich.objects import sha_to_hex\nfrom dulwich.repo import BaseRepo, MemoryRepo\nfrom dulwich.refs import DictRefsContainer, RefsContainer, SYMREF\nfrom six import get_unbound_function\n\nfrom .models import Objs, Refs\n\n\nclass MysqlObjectStore(BaseObjectStore):\n    \"\"\"Object store that keeps all objects in a mysql database.\"\"\"\n\n    def __init__(self, repo):\n        super(MysqlObjectStore, self).__init__()\n        self._repo = repo\n\n    add_objects = get_unbound_function(MemoryObjectStore.add_objects)\n    add_thin_pack = get_unbound_function(MemoryObjectStore.add_thin_pack)\n    contains_packed = get_unbound_function(MemoryObjectStore.contains_packed)\n    packs = MemoryObjectStore.packs\n    _complete_thin_pack = get_unbound_function(\n        MemoryObjectStore._complete_thin_pack)\n\n    def _to_hexsha(self, sha):\n        if len(sha) == 40:\n            return sha\n        elif len(sha) == 20:\n            return sha_to_hex(sha)\n        else:\n            raise ValueError(\"Invalid sha %r\" % (sha,))\n\n    def _has_sha(self, sha):\n        \"\"\"Look for the sha in the database.\"\"\"\n        return Objs.objects.filter(repo=self._repo, oid=sha).exists()\n\n    def _all_shas(self):\n        \"\"\"Return all db sha keys.\"\"\"\n        for obj in Objs.objects.filter(repo=self._repo).only('oid').iterator():\n            yield obj.oid\n\n    def contains_loose(self, sha):\n        \"\"\"Check if a particular object is present by SHA1 and is loose.\"\"\"\n        return self._has_sha(self._to_hexsha(sha))\n\n    def __iter__(self):\n        \"\"\"Iterate over the SHAs that are present in this store.\"\"\"\n        return self._all_shas()\n\n    def get_raw(self, name):\n        \"\"\"Obtain the raw text for an object.\n\n        :param name: sha for the object.\n        :return: tuple with numeric type and object contents.\n        \"\"\"\n        try:\n            obj = Objs.objects.only('type', 'data')\\\n                              .get(repo=self._repo, oid=self._to_hexsha(name))\n        except Objs.DoesNotExist:\n            # last resort fallback, this exception will cause a retry\n            raise ObjectMissing(name)\n        else:\n            return obj.type, obj.data\n\n    def add_object(self, obj):\n        data = obj.as_raw_string()\n        oid = obj.id\n        tnum = obj.get_type()\n        try:\n            Objs.objects.update_or_create(\n                repo=self._repo, oid=oid, type=tnum, size=len(data), data=data)\n        except IntegrityError:\n            pass\n\n    def delete_objects(self, object_ids):\n        Objs.objects.filter(repo=self._repo, oid__in=object_ids).delete()\n\n\nclass MysqlRefsContainer(RefsContainer):\n    \"\"\"RefsContainer backed by MySql.\n\n    This container does not support packed references.\n    \"\"\"\n    def __init__(self, repo):\n        super(MysqlRefsContainer, self).__init__()\n        self._repo = repo\n\n    get_packed_refs = get_unbound_function(DictRefsContainer.get_packed_refs)\n\n    def allkeys(self):\n        for ref in Refs.objects.filter(repo=self._repo).only('ref').iterator():\n            yield ref.ref\n\n    def read_loose_ref(self, name):\n        qs = Refs.objects.only('value')\n        if not get_autocommit(using=qs._db):\n            qs = qs.select_for_update()\n        try:\n            ref = qs.get(repo=self._repo, ref=name)\n        except Refs.DoesNotExist:\n            return None\n        else:\n            return ref.value\n\n    def set_symbolic_ref(self, name, other):\n        self._update_ref(name, SYMREF + other)\n\n    def set_if_equals(self, name, old_ref, new_ref):\n        if old_ref is not None and self.read_loose_ref(name) != old_ref:\n            return False\n        realnames, _ = self.follow(name)\n        for realname in realnames:\n            self._check_refname(realname)\n            self._update_ref(realname, new_ref)\n        return True\n\n    def add_if_new(self, name, ref):\n        if self.read_loose_ref(name):\n            return False\n        self._update_ref(name, ref)\n        return True\n\n    def remove_if_equals(self, name, old_ref):\n        if old_ref is not None and self.read_loose_ref(name) != old_ref:\n            return False\n        self._remove_ref(name)\n        return True\n\n    def _update_ref(self, name, value):\n        Refs.objects.update_or_create(repo=self._repo, ref=name, defaults={\n            'value': value,\n        })\n\n    def _remove_ref(self, name):\n        Refs.objects.filter(repo=self._repo, ref=name).delete()\n\n\nclass MysqlRepo(BaseRepo):\n    \"\"\"Repo that stores refs, objects, and named files in MySql.\n\n    MySql repos are always bare: they have no working tree and no index, since\n    those have a stronger dependency on the filesystem.\n    \"\"\"\n\n    def __init__(self, name):\n        self._name = name\n        BaseRepo.__init__(self, MysqlObjectStore(name),\n                          MysqlRefsContainer(name))\n        self.bare = True\n\n    open_index = get_unbound_function(MemoryRepo.open_index)\n\n    def head(self):\n        \"\"\"Return the SHA1 pointed at by HEAD.\"\"\"\n        return self.refs['refs/heads/master']\n\n    @classmethod\n    def init_bare(cls, name):\n        \"\"\"Create a new bare repository.\"\"\"\n        return cls(name)\n\n    @classmethod\n    def open(cls, name):\n        \"\"\"Open an existing repository.\"\"\"\n        return cls(name)\n\n    @classmethod\n    def repo_exists(cls, name):\n        \"\"\"Check if a repository exists.\"\"\"\n        return Objs.objects.filter(repo=name).exists()\n\n    @classmethod\n    def list_repos(cls):\n        \"\"\"List all repository names.\"\"\"\n        return Objs.objects.distinct().values_list('repo', flat=True)\n\n    @classmethod\n    def delete_repo(cls, name):\n        \"\"\"Delete a repository.\"\"\"\n        Objs.objects.filter(repo=name).delete()\n        Refs.objects.filter(repo=name).delete()\n"
  },
  {
    "path": "portia_server/manage.py",
    "content": "#!/usr/bin/env python3\nimport os\nimport sys\n\nif __name__ == \"__main__\":\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"portia_server.settings\")\n\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "portia_server/portia_api/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_api/apps.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.apps import AppConfig\n\n\nclass PortiaApiConfig(AppConfig):\n    name = 'portia_api'\n"
  },
  {
    "path": "portia_server/portia_api/errors.py",
    "content": "class BaseError(Exception):\n    def __init__(self, status, title, body=''):\n        self._status = status\n        self._title = title\n        self._body = body\n\n    @property\n    def title(self):\n        return self._title\n\n    @property\n    def body(self):\n        return self._body\n\n    @property\n    def status(self):\n        return self._status\n\n    def __repr__(self):\n        return '%s(%s)' % (self.__class__.__name__, str(self))\n\n    def __str__(self):\n        return '%s: %s' % (self.status, self.title)\n\n\nclass BaseHTTPError(BaseError):\n    _status = 999\n\n    def __init__(self, title, body=''):\n        super(BaseHTTPError, self).__init__(self._status, title, body)\n\n\nclass BadRequest(BaseHTTPError):\n    _status = 400\n\n\nclass Forbidden(BaseHTTPError):\n    _status = 403\n\n\nclass NotFound(BaseHTTPError):\n    _status = 404\n\n\nclass InternalServerError(BaseHTTPError):\n    _status = 500\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/__init__.py",
    "content": "from .response import JSONResponse\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/exceptions.py",
    "content": "from collections import OrderedDict\nfrom uuid import uuid4\n\nfrom rest_framework.exceptions import APIException, ValidationError\nfrom rest_framework.status import (HTTP_400_BAD_REQUEST, HTTP_409_CONFLICT,\n                                   HTTP_404_NOT_FOUND)\nfrom rest_framework.views import exception_handler\n\n\nfrom .utils import get_status_title\n\n\nclass JsonApiValidationError(ValidationError):\n    def __init__(self, detail):\n        super(JsonApiValidationError, self).__init__({\n            'errors': [OrderedDict([\n                ('status', self.status_code),\n                ('title', get_status_title(self.status_code)),\n                ('detail', error['detail']),\n                ('source', error['source']),\n            ]) for error in detail.get('errors', [])]\n        })\n\n\ndef render_exception(status_code, detail):\n    return {\n        'errors': [OrderedDict([\n            ('id', str(uuid4())),\n            ('status', status_code),\n            ('title', get_status_title(status_code)),\n            ('detail', detail)\n        ])]\n    }\n\n\nclass JsonApiBadRequestError(APIException):\n    status_code = HTTP_400_BAD_REQUEST\n    default_detail = (u\"The server cannot process the request due to invalid \"\n                      u\"data.\")\n\n\nclass JsonApiNotFoundError(APIException):\n    status_code = HTTP_404_NOT_FOUND\n    default_detail = u\"Could not find the resource specified\"\n\n\nclass JsonApiConflictError(APIException):\n    status_code = HTTP_409_CONFLICT\n    default_detail = u\"The server cannot process the request due to a conflict.\"\n\n\nclass JsonApiFeatureNotAvailableError(JsonApiBadRequestError):\n    default_detail = u\"This feature is not available for your project.\"\n\n\nclass JsonApiGeneralException(APIException):\n    def __init__(self, detail=None, status_code=None):\n        assert status_code is not None\n        self.status_code = status_code\n        super(JsonApiGeneralException, self).__init__(detail)\n\n\ndef jsonapi_exception_handler(exc, context):\n    accepts = context['request'].accepted_media_type or ''\n    if accepts.startswith('application/vnd.api+json'):\n        try:\n            exc.detail = render_exception(exc.status_code, exc.detail)\n        except AttributeError:\n            pass  # Ignore django exceptions\n    response = exception_handler(exc, context)\n    return response\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/parsers.py",
    "content": "from __future__ import unicode_literals\n\nfrom rest_framework.parsers import JSONParser\n\n\nclass JSONApiParser(JSONParser):\n    media_type = 'application/vnd.api+json'\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/registry.py",
    "content": "from portia_orm.exceptions import ImproperlyConfigured\n\n\n__all__ = [\n    'schema',\n]\n\nschemas = {}\n\n\ndef get_schema(schema_type):\n    try:\n        return schemas[schema_type]\n    except KeyError:\n        raise ImproperlyConfigured(\n            u\"No schema for type '{}' exists\".format(schema_type))\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/relationships.py",
    "content": "from marshmallow_jsonapi.fields import Relationship as BaseRelationship\n\nfrom portia_api.jsonapi.registry import get_schema\nfrom portia_api.jsonapi.utils import (\n    TOP_LEVEL_OBJECT_ORDER, LINKS_OBJECT_ORDER, type_from_model_name,\n    order_dict, cached_property, cached_property_ignore_set)\n\n\nclass Relationship(BaseRelationship):\n    def __init__(self, **kwargs):\n        self._serializer = kwargs.get('serializer')\n        super(Relationship, self).__init__(**kwargs)\n\n    @cached_property\n    def schema(self):\n        schema = self._serializer or get_schema(self.type_)\n        return schema(fields_map=self.root.fields_map,\n                      exclude_map=self.root.exclude_map,\n                      include_data=self.root.include_map.get(self.name, []),\n                      include_data_map=self.root.include_data_map)\n\n    @cached_property_ignore_set\n    def include_resource_linkage(self):\n        return self.name in self.root.relationship_set\n\n    def get_related_url(self, obj):\n        if self.related_url:\n            try:\n                return self.related_url.format(self=obj)\n            except AttributeError:\n                pass\n        return None\n\n    def get_self_url(self, obj):\n        if self.self_url:\n            try:\n                return self.self_url.format(self=obj)\n            except AttributeError:\n                pass\n        return None\n\n    def get_resource_linkage(self, value):\n        data = super(Relationship, self).get_resource_linkage(value)\n        if self.many:\n            return [order_dict(item, TOP_LEVEL_OBJECT_ORDER) for item in data]\n        return order_dict(data, TOP_LEVEL_OBJECT_ORDER)\n\n    def _serialize(self, value, attr, obj):\n        data = super(Relationship, self)._serialize(value, attr, obj)\n        if 'links' in data:\n            data['links'] = order_dict(data['links'], LINKS_OBJECT_ORDER)\n        return order_dict(data, TOP_LEVEL_OBJECT_ORDER)\n\n\nclass PolymorphicRelationship(Relationship):\n    def __init__(self, **kwargs):\n        super(PolymorphicRelationship, self).__init__(**kwargs)\n\n    def _serialize(self, value, attr, obj):\n        if not self.many:\n            value = [value]\n\n        links = None\n        result = []\n        if value:\n            for instance in value:\n                field = Relationship(\n                    type_=type_from_model_name(instance.__class__.__name__),\n                    id_field='pk',\n                    self_url=self.self_url,\n                    related_url=self.related_url,\n                    many=False)\n                field._add_to_schema(self.name, self.parent)\n                field.include_data = self.include_data\n                data = field._serialize(instance, attr, obj)\n                if links is None and 'links' in data:\n                    links = data['links']\n                result.append(data.get('data'))\n        else:\n            data = super(PolymorphicRelationship, self)._serialize(\n                None, attr, obj)\n            if links is None and 'links' in data:\n                links = data['links']\n\n        if not self.many:\n            result = result[0]\n        data = {}\n        if links is not None:\n            data['links'] = order_dict(links, LINKS_OBJECT_ORDER)\n        if self.include_resource_linkage or self.include_data:\n            data['data'] = result\n        return order_dict(data, TOP_LEVEL_OBJECT_ORDER)\n\n    def _deserialize(self, value, attr, data):\n        return value\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/renderers.py",
    "content": "from __future__ import unicode_literals\n\nfrom rest_framework.renderers import JSONRenderer as BaseJSONRenderer\n\n\nclass JSONRenderer(BaseJSONRenderer):\n    default_indent = 2\n\n    def get_indent(self, accepted_media_type, renderer_context):\n        indent = super(JSONRenderer, self).get_indent(\n            accepted_media_type, renderer_context)\n        if indent is None:\n            return self.default_indent\n        return indent\n\n\nclass JSONApiRenderer(JSONRenderer):\n    media_type = 'application/vnd.api+json'\n\n    def render(self, data, accepted_media_type=None, renderer_context=None):\n        ret = super(JSONApiRenderer, self).render(data, accepted_media_type,\n                                                  renderer_context)\n        response = renderer_context['response']\n\n        content_type = self.media_type\n        try:\n            profiles = data['links']['profile']\n        except (TypeError, KeyError):\n            profiles = []\n        if profiles:\n            content_type += '; profile=\"{}\"'.format(' '.join(profiles))\n        response['Content-Type'] = content_type\n\n        return ret\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/response.py",
    "content": "from django.http import HttpResponse\nfrom rest_framework.renderers import JSONRenderer\n\n\nclass JSONResponse(HttpResponse):\n    \"\"\"\n    An HttpResponse that renders its content into JSON.\n    \"\"\"\n    def __init__(self, data, **kwargs):\n        content = JSONRenderer().render(data)\n        kwargs['content_type'] = 'application/json'\n        super(JSONResponse, self).__init__(content, **kwargs)\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/serializers.py",
    "content": "from collections import defaultdict, OrderedDict\nfrom functools import partial\nfrom itertools import chain\nfrom operator import itemgetter\n\nfrom marshmallow import pre_dump, post_dump, ValidationError\nfrom marshmallow.fields import Method\nfrom marshmallow.schema import SchemaMeta\nfrom marshmallow_jsonapi import Schema as BaseSchema, SchemaOpts\nfrom marshmallow_jsonapi.exceptions import IncorrectTypeError\nfrom six import iteritems, iterkeys, string_types, with_metaclass\nfrom six.moves import map, zip\n\nfrom portia_api.jsonapi.registry import schemas, get_schema\nfrom portia_api.jsonapi.relationships import (\n    Relationship, PolymorphicRelationship)\nfrom portia_api.jsonapi.utils import (\n    RESOURCE_OBJECT_ORDER, TOP_LEVEL_OBJECT_ORDER, cached_property,\n    camel_case_to_dashes, deep_getattr, dasherize, order_dict,\n    should_include_field, type_from_model_name)\nfrom portia_orm.base import AUTO_PK, Model\nfrom portia_orm.exceptions import ImproperlyConfigured\nfrom portia_orm.fields import Field as OrmField\nfrom portia_orm.relationships import BaseRelationship, HasMany\n\n__all__ = [\n    'JsonApiSerializer',\n    'JsonApiPolymorphicSerializer',\n]\n\nDELETED_PROFILE = 'https://portia.scrapinghub.com/jsonapi/extensions/deleted'\nUPDATES_PROFILE = 'https://portia.scrapinghub.com/jsonapi/extensions/updates'\nDELETED_PROFILE_ALIAS = 'deleted'\nUPDATES_PROFILE_ALIAS = 'updates'\n\n\nclass JsonApiSerializerMeta(SchemaMeta):\n    \"\"\"Meta class for JSON API schemas.\"\"\"\n    def __new__(mcs, name, bases, attrs):\n        parents = [b for b in bases if isinstance(b, JsonApiSerializerMeta)]\n        if not parents:\n            return super(JsonApiSerializerMeta, mcs).__new__(\n                mcs, name, bases, attrs)\n\n        meta = attrs.pop('Meta', None)\n\n        try:\n            model = meta.model\n        except AttributeError:\n            raise TypeError(\n                u\"Class '{}' is missing the 'Meta.model' attribute.\".format(\n                    name))\n\n        schema_type = type_from_model_name(model.__name__)\n\n        meta_bases = (meta, object) if meta else (object,)\n        schema_attrs = {\n            'Meta': type('Meta', meta_bases, {\n                'type_': schema_type,\n                'inflect': dasherize,\n            })\n        }\n\n        links = getattr(meta, 'links', {})\n        for attrname, field in iteritems(model._fields):\n            if isinstance(field, OrmField):\n                field_copy = object.__new__(field.__class__)\n                field_copy.__dict__ = dict(field.__dict__)\n                field_copy.load_from = None\n                field_copy.dump_to = None\n                schema_attrs[attrname] = field_copy\n            elif isinstance(field, BaseRelationship):\n                rel_links = links.get(attrname, {})\n                rel_many = isinstance(field, HasMany)\n                rel_options = {\n                    'self_url': rel_links.get('self', ''),\n                    'related_url': rel_links.get('related', ''),\n                    'many': rel_many\n                }\n                if not rel_many:\n                    rel_options['allow_none'] = True\n                if field.polymorphic:\n                    schema_attrs[attrname] = PolymorphicRelationship(\n                        **rel_options)\n                else:\n                    schema_attrs[attrname] = Relationship(\n                        type_=type_from_model_name(field.model.__name__),\n                        id_field='pk',\n                        serializer=rel_links.get('serializer'),\n                        **rel_options)\n\n        if 'id' not in schema_attrs:\n            pk_field = model._fields[model._pk_field]\n            schema_attrs['id'] = type(pk_field)(attribute=model._pk_field)\n\n        # we need to access the serialized object to generate the url, but\n        # get_resource_links takes the serialized item, so we add a method field\n        # to do the work\n        schema_attrs['_url'] = Method('get_url')\n\n        attrs.update(schema_attrs)\n        cls = super(JsonApiSerializerMeta, mcs).__new__(mcs, name, bases, attrs)\n\n        # add new schema to registry by type\n        is_custom = name.replace('Serializer', '') != model.__name__\n        key = camel_case_to_dashes(name) if is_custom else schema_type\n        schemas[key] = cls\n        return cls\n\n\nclass JsonApiSerializerOpts(SchemaOpts):\n    def __init__(self, meta):\n        super(JsonApiSerializerOpts, self).__init__(meta)\n        if meta is BaseSchema.Meta:\n            return\n\n        self.strict = True\n        # the model from which the Schema was created, required\n        self.model = getattr(meta, 'model', None)\n        if not issubclass(self.model, Model):\n            raise ValueError(\"'model' option must be a orm.Model.\")\n        # url for an object instance\n        self.url = getattr(meta, 'url', None)\n        if not isinstance(self.url, string_types):\n            raise ValueError(\"'url' option must be a string.\")\n        # default context for serialization\n        self.default_kwargs = getattr(meta, 'default_kwargs', {})\n        if not isinstance(self.default_kwargs, dict):\n            raise ValueError(\"'default_kwargs' option must be a dictionary.\")\n\n\nclass JsonApiSerializer(with_metaclass(JsonApiSerializerMeta, BaseSchema)):\n    OPTIONS_CLASS = JsonApiSerializerOpts\n\n    def __init__(self, instance=None, data=None, storage=None, only=(),\n                 **kwargs):\n        default_kwargs = dict(self.opts.default_kwargs)\n        fields_map = dict(default_kwargs.pop('fields_map', {}),\n                          **kwargs.pop('fields_map', {}))\n        exclude_map = dict(default_kwargs.pop('exclude_map', {}),\n                           **kwargs.pop('exclude_map', {}))\n        include_data_map = dict(default_kwargs.pop('include_data_map', {}),\n                                **kwargs.pop('include_data_map', {}))\n        kwargs = dict(default_kwargs, **kwargs)\n\n        self.current_url = kwargs.pop('current_url', None)\n        self.include = kwargs.pop('include_data', [])\n        self.ordering = kwargs.pop('ordering', [])\n        self.fields_map = fields_map\n        self.exclude_map = exclude_map\n        self.include_data_map = include_data_map\n\n        type_ = self.opts.type_\n        model = self.opts.model\n        self.include_map = include_map = defaultdict(list)\n        for include in chain(self.include,\n                             self.include_data_map.get(type_, [])):\n            parts = include.split('.', 1)\n            prefix_map = include_map[parts[0]]\n            if len(parts) == 2:\n                prefix_map.append(parts[1])\n\n        field_names = model._field_names\n        relationship_names = model._relationship_names\n        fields = fields_map.get(type_)\n        exclude = exclude_map.get(type_)\n\n        if not only:\n            f_set = fields and set(fields)\n            e_set = exclude and set(exclude)\n\n            self.field_set = field_set = set()\n            self.relationship_set = relationship_set = set()\n            for name in field_names:\n                if should_include_field(self.inflect(name),\n                                        include=f_set, exclude=e_set):\n                    field_set.add(name)\n            for name in relationship_names:\n                if should_include_field(self.inflect(name),\n                                        include=f_set, exclude=e_set):\n                    relationship_set.add(name)\n\n            only = list(field_set | {'id'})\n            for name in relationship_names:\n                relationship = self._declared_fields[name]\n                if (name in relationship_set or relationship.related_url or\n                        relationship.self_url):\n                    only.append(name)\n            only.append('_url')\n\n        self.field_order = list(\n            chain(fields or [], map(self.inflect, field_names)))\n        self.relationship_order = list(\n            chain(fields or [], map(self.inflect, relationship_names)))\n\n        only_set = set(only)\n        kwargs['include_data'] = tuple(\n            k for k in iterkeys(self.include_map) if k in only_set)\n        super(JsonApiSerializer, self).__init__(only=only, **kwargs)\n        self.instance = instance\n        self.initial_data = data\n        if storage:\n            self.storage = storage\n        elif isinstance(instance, Model):\n            self.storage = instance.storage\n        else:\n            self.storage = None\n        self.deleted = []\n        self.updated = []\n\n    @property\n    def data(self):\n        return self.dump(self.instance).data\n\n    @cached_property\n    def errors(self):\n        if not hasattr(self, '_errors'):\n            self.is_valid()\n        return self._errors\n\n    @cached_property\n    def validated_data(self):\n        if not hasattr(self, '_errors'):\n            self.is_valid()\n        return self._validated_data\n\n    @cached_property\n    def validated_profile_updates_data(self):\n        if not hasattr(self, '_errors'):\n            self.is_valid()\n        return self._validated_profile_updates_data\n\n    def deserialize_related_model(self, model, id_):\n        if id_ is None:\n            return None\n        return model(self.storage, **{\n            model._pk_field: id_,\n        })\n\n    def update(self, instance, validated_data):\n        model = instance.__class__\n\n        errors = {}\n        fields = []\n        for attrname in model._ordered_fields:\n            if attrname in validated_data:\n                try:\n                    value = validated_data[attrname]\n                    if attrname in model._field_names:\n                        setattr(instance, attrname, value)\n                        fields.append(attrname)\n                    elif attrname in model._relationship_names:\n                        # read in existing value to populate data stores\n                        getattr(instance, attrname)\n\n                        related_model = model._fields[attrname].model\n                        if isinstance(value, list):\n                            setattr(instance, attrname, [\n                                self.deserialize_related_model(related_model, v)\n                                for v in value])\n                            fields.append(attrname)\n                        else:\n                            setattr(instance, attrname,\n                                    self.deserialize_related_model(\n                                        related_model, value))\n                            fields.append(attrname)\n                except ValidationError as err:\n                    errors[attrname] = err.messages\n\n        if errors:\n            raise ValidationError(errors)\n\n        instance.save(only=fields)\n        return instance\n\n    def create(self, validated_data):\n        model = self.opts.model\n\n        processed_attributes = {\n            model._pk_field: AUTO_PK,\n        }\n        for attrname, value in iteritems(validated_data):\n            if attrname in model._relationship_names:\n                related_model = model._fields[attrname].model\n                related_name = model._fields[attrname].related_name\n                if isinstance(value, list):\n                    value = [self.deserialize_related_model(related_model, v)\n                             for v in value]\n                else:\n                    value = self.deserialize_related_model(related_model, value)\n                # read in existing values to populate data stores, for unique\n                # key generation\n                if value is not None:\n                    for v in (value if isinstance(value, list) else [value]):\n                        getattr(v, related_name)\n            processed_attributes[attrname] = value\n\n        instance = model(self.storage, **processed_attributes)\n        instance.save()\n        return instance\n\n    def apply_profile_updates(self, validated_data, serializers):\n        errors = {}\n\n        for data, serializer in zip(validated_data, serializers):\n            id_ = data['id']\n            instance = self.deserialize_related_model(\n                serializer.opts.model, id_)\n\n            serializer.instance = instance\n            try:\n                serializer.save()\n            except ValidationError as err:\n                errors.update(err.messages)\n                continue\n\n            self.updated.append(instance)\n            self.updated.extend(serializer.updated)\n            self.deleted.extend(serializer.deleted)\n\n        if errors:\n            raise ValidationError(errors)\n\n    def save(self):\n        if not hasattr(self, '_errors'):\n            self.is_valid(raise_exception=True)\n\n        validated_data = self.validated_data\n        validated_profile_updates_data = self.validated_profile_updates_data\n\n        errors = {}\n\n        try:\n            if self.instance is not None:\n                self.instance = self.update(self.instance, validated_data)\n            else:\n                self.instance = self.create(validated_data)\n        except ValidationError as err:\n            errors.update(err.messages)\n\n        if validated_profile_updates_data:\n            try:\n                self.apply_profile_updates(validated_profile_updates_data,\n                                           self._profile_updates_serializers)\n            except ValidationError as err:\n                errors.update(err.messages)\n\n        if errors:\n            formatted_messages = self.format_errors(errors, many=self.many)\n            raise ValidationError(formatted_messages)\n\n        return self.instance\n\n    def delete(self):\n        data, serializers = self.load_profile_updates()\n        self._validated_profile_updates_data = data\n        self._profile_updates_serializers = serializers\n\n        if self._validated_profile_updates_data:\n            self.apply_profile_updates(self._validated_profile_updates_data,\n                                       self._profile_updates_serializers)\n\n        self.deleted.extend(self.instance.delete())\n        self.instance = self.instance.with_snapshots(('working',))\n\n    def is_valid(self, raise_exception=False):\n        errors = []\n\n        try:\n            self._validated_data = self.load(self.initial_data).data\n        except (ValidationError, IncorrectTypeError) as err:\n            errors.extend(err.messages.get('errors', []))\n\n        try:\n            data, serializers = self.load_profile_updates()\n            self._validated_profile_updates_data = data\n            self._profile_updates_serializers = serializers\n        except (ValidationError, IncorrectTypeError) as err:\n            errors.extend(err.messages.get('errors', []))\n\n        if errors:\n            self._validated_data = {}\n            self._validated_profile_updates_data = []\n            self._errors = errors\n            if raise_exception:\n                err = ValidationError(u'Invalid data.')\n                err.messages = {\n                    'errors': errors\n                }\n                raise err\n            return False\n\n        self._errors = {}\n        return True\n\n    def load_profile_updates(self):\n        if UPDATES_PROFILE not in self.initial_data.get(\n                'links', {}).get('profile', []):\n            return [], []\n        for alias, profile in iteritems(self.initial_data.get('aliases', {})):\n            if profile == UPDATES_PROFILE:\n                break\n        else:\n            return [], []\n\n        errors = []\n        validated_data = []\n        profile_serializers = []\n        for i, update in enumerate(\n                self.initial_data.get('meta', {}).get(alias, [])):\n            if 'type' not in update:\n                errors.append({\n                    'detail': '`data` object must include `type` key.',\n                    'source': {\n                        'pointer': '/meta/{}/{}/data'.format(alias, i)\n                    }\n                })\n                continue\n\n            type_ = update['type']\n            data = {\n                'data': update,\n            }\n\n            try:\n                serializer_class = get_schema(type_)\n            except ImproperlyConfigured:\n                errors.append({\n                    'detail': 'Invalid type: {}.'.format(type_),\n                    'source': {\n                        'pointer': '/meta/{}/{}/data/type'.format(alias, i),\n                    },\n                })\n                continue\n\n            serializer = serializer_class(\n                data=data,\n                partial=set(\n                    serializer_class.opts.model._ordered_fields).difference(\n                        {'id'}))\n\n            try:\n                validated_data.append(serializer.validated_data)\n                profile_serializers.append(serializer)\n            except (ValidationError, IncorrectTypeError) as err:\n                errors.extend({\n                    'detail': error['detail'],\n                    'source': {\n                        'pointer': '/meta/{}/{}{}'.format(\n                            alias, i, error['source']['pointer'])\n                    },\n                } for error in err.messages.get('errors', []))\n                continue\n\n        if errors:\n            err = ValidationError(u'Invalid data for updates.')\n            err.messages = {\n                'errors': errors\n            }\n            raise err\n\n        return validated_data, profile_serializers\n\n    @pre_dump(pass_many=True)\n    def sort_collection(self, models, many):\n        ordering = self.ordering\n        if not many or not ordering:\n            return models\n\n        for key in reversed(ordering):\n            reverse = key[0] == '-'\n            if reverse:\n                key = key[1:]\n            models = sorted(models, key=partial(deep_getattr, key=key),\n                            reverse=reverse)\n\n        return models\n\n    @post_dump(pass_many=True)\n    def format_json_api_response(self, data, many):\n        updated_set = set()\n        deleted_set = set()\n        updated = []\n        deleted = []\n\n        for instance in self.deleted:\n            if instance.data_key in deleted_set:\n                continue\n            deleted_set.add(instance.data_key)\n            if instance != self.instance:\n                deleted.append(instance)\n\n        for instance in self.updated:\n            if (instance.data_key in updated_set or\n                    instance.data_key in deleted_set):\n                continue\n            updated_set.add(instance.data_key)\n            updated.append(instance)\n\n        self.add_includes(updated)\n        response = super(JsonApiSerializer, self).format_json_api_response(\n            data, many)\n\n        if 'included' in response:\n            response['included'].sort(key=itemgetter('type', 'id'))\n\n        deleted = self.format_profile_references(deleted)\n        if deleted:\n            self.add_profile_to_response(DELETED_PROFILE, DELETED_PROFILE_ALIAS,\n                                         deleted, response)\n\n        updated = self.format_profile_references(updated)\n        if updated:\n            self.add_profile_to_response(UPDATES_PROFILE, UPDATES_PROFILE_ALIAS,\n                                         updated, response)\n\n        if (isinstance(self.instance, Model) and\n                self.instance.data_key in deleted_set):\n            response.pop('data', None)\n            if not response.get('meta'):\n                return {}\n\n        return order_dict(response, TOP_LEVEL_OBJECT_ORDER)\n\n    def format_item(self, item):\n        item = super(JsonApiSerializer, self).format_item(item)\n        if 'attributes' in item:\n            attributes = item.pop('attributes')\n            attributes.pop('-url', None)  # super call adds this\n            if attributes:\n                item['attributes'] = order_dict(attributes, self.field_order)\n        if 'relationships' in item:\n            item['relationships'] = order_dict(item['relationships'],\n                                               self.relationship_order)\n        return order_dict(item, RESOURCE_OBJECT_ORDER)\n\n    def get_top_level_links(self, data, many):\n        if self.current_url:\n            return OrderedDict([('self', self.current_url)])\n        return None\n\n    def get_resource_links(self, item):\n        url = item.get('_url')\n        if url:\n            return OrderedDict([('self', url)])\n        return None\n\n    def get_url(self, obj):\n        return self.opts.url.format(self=obj)\n\n    def add_includes(self, includes):\n        included_data = self.included_data\n        for instance in includes:\n            type_ = type_from_model_name(instance.__class__.__name__)\n            serializer = get_schema(type_)(\n                instance,\n                fields_map=self.fields_map,\n                exclude_map=self.exclude_map)\n            data = serializer.data\n            item = data['data']\n            included_data[(item['type'], item['id'])] = item\n            included_data.update(serializer.included_data)\n\n    def format_profile_references(self, instances):\n        references = []\n        for instance in instances:\n            type_ = type_from_model_name(instance.__class__.__name__)\n            serializer = get_schema(type_)(\n                instance.with_snapshots(('working',)),\n                only=('id',))\n            data = serializer.data.get('data', {})\n            if data:\n                references.append(data)\n\n        return references\n\n    def add_profile_to_response(self, profile, alias, data, response):\n        response.setdefault('aliases', {})[alias] = profile\n        response.setdefault('links', {}).setdefault('profile', []).append(\n            profile)\n        response.setdefault('meta', {})[alias] = data\n\n\nclass JsonApiPolymorphicSerializer(object):\n    def __new__(cls, base, default_model, instance=None, data=None, many=False,\n                **kwargs):\n        if not many:\n            # in the single instance case return the correct serializer by type\n            # or the default_model's serializer if type is not valid for base\n            type_ = None\n            if instance:\n                type_ = type_from_model_name(instance.__class__.__name__)\n            elif data:\n                type_ = data.get('data', {}).get('type')\n\n            if type_:\n                serializer_class = get_schema(type_)\n                if not issubclass(serializer_class.opts.model, base):\n                    type_ = None\n\n            if not type_:\n                type_ = type_from_model_name(default_model.__name__)\n                serializer_class = get_schema(type_)\n\n            return serializer_class(\n                instance=instance, data=data, many=many, **kwargs)\n\n        if data:\n            raise ValueError(\n                u\"You can only use a JsonApiPolymorphicSerializer with \"\n                u\"many=True for serializing a ModelCollection\")\n\n        return super(JsonApiPolymorphicSerializer, cls).__new__(\n            cls, base, default_model, instance, data, many, **kwargs)\n\n    def __init__(self, base, default_model, instance=None, data=None,\n                 many=False, **kwargs):\n        # this is only used for serializing a ModelCollection\n        self.base = base\n        self.default_model = default_model\n        self.collection = instance\n        self.kwargs = kwargs\n\n    @property\n    def data(self):\n        links = None\n        data = []\n        included = []\n        included_set = set()\n\n        default_type = type_from_model_name(self.default_model.__name__)\n        default_serializer = get_schema(default_type)\n\n        for instance in self.collection:\n            type_ = type_from_model_name(instance.__class__.__name__)\n            serializer_class = get_schema(type_)\n            if not issubclass(serializer_class.opts.model, self.base):\n                serializer_class = default_serializer\n\n            serialized = serializer_class(instance=instance, **self.kwargs).data\n            if not links and 'links' in serialized:\n                links = serialized['links']\n            data.append(serialized['data'])\n            for include in serialized.get('included', []):\n                key = (include['type'], include['id'])\n                if key not in included_set:\n                    included.append(include)\n                    included_set.add(key)\n\n        response = {\n            'data': data\n        }\n        if links:\n            response['links'] = links\n        if included:\n            included.sort(key=itemgetter('type', 'id'))\n            response['included'] = included\n\n        return order_dict(response, TOP_LEVEL_OBJECT_ORDER)\n"
  },
  {
    "path": "portia_server/portia_api/jsonapi/utils.py",
    "content": "from collections import defaultdict, OrderedDict\n\nfrom django.utils.text import camel_case_to_spaces\nfrom requests.status_codes import _codes as status_codes\nfrom six import iteritems\nfrom six.moves import reduce\n\nfrom portia_orm.utils import cached_property, cached_property_ignore_set\n\n__all__ = [\n    'cached_property',\n    'cached_property_ignore_set',\n    'dasherize',\n    'deep_getattr',\n    'order_dict',\n    'should_include_field',\n    'type_from_model_name',\n    'LINKS_OBJECT_ORDER',\n    'RESOURCE_OBJECT_ORDER',\n    'TOP_LEVEL_OBJECT_ORDER',\n]\n\nTOP_LEVEL_OBJECT_ORDER = (\n    'jsonapi',\n    'aliases',\n    'links',\n    'data',\n    'errors',\n    'included',\n    'meta',\n)\n\nRESOURCE_OBJECT_ORDER = (\n    'type',\n    'id',\n    'links',\n    'attributes',\n    'relationships',\n    'meta',\n)\n\nLINKS_OBJECT_ORDER = (\n    'self',\n    'related',\n    'profile',\n)\n\n\ndef camel_case_to_dashes(value):\n    return '-'.join(camel_case_to_spaces(value).split(' '))\n\n\ndef dasherize(value):\n    return str(value).replace('_', '-')\n\n\ndef type_from_model_name(value):\n    return '{}s'.format(camel_case_to_dashes(value))\n\n\ndef deep_getattr(obj, key):\n    try:\n        return reduce(getattr, key.split('.'), obj)\n    except AttributeError:\n        return None\n\n\ndef should_include_field(field, include, exclude):\n    if include is not None:\n        return field in include\n    if exclude is not None:\n        return field not in exclude\n    return True\n\n\ndef order_dict(data, ordered_keys, key_map_cache={}):\n    can_cache = True\n    try:\n        key_map = key_map_cache.get(ordered_keys)\n    except TypeError:\n        key_map = None\n        can_cache = False\n    if key_map is None:\n        key_map = defaultdict(lambda: float('inf'))\n        for i, k in enumerate(ordered_keys):\n            if k not in key_map:\n                key_map[k] = i\n        if can_cache:\n            key_map_cache[ordered_keys] = key_map\n    return OrderedDict(sorted(iteritems(data), key=lambda kv: key_map[kv[0]]))\n\n\ndef get_status_title(status_code):\n    return status_codes[status_code][0].replace('_', ' ').title()\n"
  },
  {
    "path": "portia_server/portia_api/resources/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_api/resources/annotations.py",
    "content": "from .projects import BaseProjectModelRoute\nfrom ..jsonapi.utils import cached_property\nfrom portia_orm.models import BaseAnnotation, Annotation\n\n\nclass AnnotationRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'annotation_id'\n    default_model = Annotation\n    polymorphic = BaseAnnotation\n\n    @cached_property\n    def sample(self):\n        return (self.project.spiders[self.kwargs.get('spider_id')]\n                            .samples[self.kwargs.get('sample_id')])\n\n    def perform_create(self, serializer):\n        self.sample.ordered_children  # preload items and annotations\n        return super(AnnotationRoute, self).perform_create(serializer)\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('annotation_id')]\n\n    def get_collection(self):\n        project = self.project\n        project.schemas  # preload schemas and fields\n        project.extractors  # preload extractors\n        return self.sample.ordered_children\n\n    def get_detail_kwargs(self):\n        return {\n            'include_data_map': {\n                'items': [\n                    'schema.fields',\n                    'annotations',\n                ],\n                'annotations': [\n                    'field.schema.fields',\n                    'extractors',\n                ],\n            },\n        }\n"
  },
  {
    "path": "portia_server/portia_api/resources/extractors.py",
    "content": "from .projects import BaseProjectModelRoute\nfrom portia_orm.models import Extractor\n\n\nclass ExtractorRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'extractor_id'\n    default_model = Extractor\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('extractor_id')]\n\n    def get_collection(self):\n        return self.project.extractors\n"
  },
  {
    "path": "portia_server/portia_api/resources/fields.py",
    "content": "from portia_orm.models import Field\n\nfrom .projects import BaseProjectModelRoute\nfrom ..jsonapi.exceptions import JsonApiBadRequestError\n\n\nclass FieldRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'field_id'\n    default_model = Field\n\n    def perform_create(self, serializer):\n        self.project.schemas  # preload schemas\n        super(FieldRoute, self).perform_create(serializer)\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('field_id')]\n\n    def get_collection(self):\n        return self.project.schemas[self.kwargs.get('schema_id')].fields\n\n    def destroy(self, *args, **kwargs):\n        annotation_count = self._annotation_count\n        if annotation_count > 0:\n            raise JsonApiBadRequestError(self._destroy_error(annotation_count))\n        return super(FieldRoute, self).destroy(*args, **kwargs)\n\n    def _destroy_error(self, annotation_count):\n        field = self.get_instance()\n        annotation = 'annotation' if annotation_count == 1 else 'annotations'\n        return ('Unable to delete the field \"{}\" as it has {} {}.'\n                .format(field.name, annotation_count, annotation))\n\n    @property\n    def _annotation_count(self):\n        self._load_annotations()\n        return len(self.get_instance().annotations)\n\n    def _load_annotations(self):\n        for spider in self.project.spiders:\n            for sample in spider.samples:\n                sample.annotations\n"
  },
  {
    "path": "portia_server/portia_api/resources/items.py",
    "content": "from .projects import BaseProjectModelRoute\nfrom ..jsonapi.utils import cached_property\nfrom portia_orm.models import Item\n\n\nclass ItemRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'item_id'\n    default_model = Item\n\n    @cached_property\n    def spider(self):\n        return self.project.spiders[self.kwargs.get('spider_id')]\n\n    def perform_create(self, serializer):\n        self.spider.samples  # preload samples\n        return super(ItemRoute, self).perform_create(serializer)\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('item_id')]\n\n    def get_collection(self):\n        project = self.project\n        project.schemas  # preload schemas and fields\n        project.extractors  # preload extractors\n        return self.spider.samples[self.kwargs.get('sample_id')].ordered_items\n\n    def get_detail_kwargs(self):\n        return {\n            'include_data_map': {\n                'items': [\n                    'schema.fields',\n                    'annotations',\n                ],\n                'annotations': [\n                    'field.schema.fields',\n                    'extractors',\n                ],\n            },\n        }\n"
  },
  {
    "path": "portia_server/portia_api/resources/models.py",
    "content": "from itertools import chain\n\nfrom marshmallow_jsonapi import Schema, fields\nfrom marshmallow import pre_dump, post_load\n\n\nclass SlydSchema(Schema):\n    _properties = ('project', 'spider', 'schema', 'item', 'sample', 'field')\n\n    @staticmethod\n    def empty_data():\n        return {\n            'meta': {}\n        }\n\n    def __init__(self, *args, **kwargs):\n        self._skip_relationships = kwargs.pop('skip_relationships', False)\n        if self._skip_relationships:\n            relationships = ((f, '%s_id' % f) for f in self._properties)\n            exclude = kwargs.get('exclude', [])\n            excluded = tuple(chain(exclude, *zip(*relationships)))\n            kwargs['exclude'] = excluded\n        super(SlydSchema, self).__init__(*args, **kwargs)\n\n    @property\n    def project_id(self):\n        return self.context.get('project_id')\n\n    @property\n    def spider_id(self):\n        return self.context.get('spider_id')\n\n    @property\n    def sample_id(self):\n        return self.context.get('sample_id')\n\n    @property\n    def schema_id(self):\n        return self.context.get('schema_id')\n\n    @property\n    def item_id(self):\n        return self.context.get('item_id')\n\n    @property\n    def field_id(self):\n        return self.context.get('field_id')\n\n    @pre_dump\n    def _dump_relationship_properties(self, item):\n        if getattr(self, '_skip_relationships', False):\n            return item\n        for attr in self._properties:\n            _id = '_'.join((attr, 'id'))\n            if _id not in item or item['id'] is None:\n                item[_id] = getattr(self, _id)\n            else:\n                self.context[_id] = item[_id]\n            if item.get(attr) is None and item[_id]:\n                item[attr] = {'id': item[_id]}\n        return item\n\n\nclass ProjectSchema(SlydSchema):\n    id = fields.Str(load_from='name')\n    name = fields.Str()\n    spiders = fields.Relationship(\n        related_url='/api/projects/{project_id}/spiders',\n        related_url_kwargs={'project_id': '<id>'}, type_='spiders',\n        include_resource_linkage=True, many=True\n    )\n    schemas = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas',\n        related_url_kwargs={'project_id': '<id>'}, type_='schemas',\n        include_resource_linkage=True, many=True\n    )\n    extractors = fields.Relationship(\n        related_url='/api/projects/{project_id}/extractors',\n        related_url_kwargs={'project_id': '<id>'}, type_='extractors',\n        include_resource_linkage=True, many=True\n    )\n    project = fields.Relationship(\n        self_url='/api/projects/{project_id}',\n        self_url_kwargs={'project_id': '<id>'}, type_='projects'\n    )\n\n    class Meta:\n        type_ = 'projects'\n\n\nclass SchemaSchema(SlydSchema):\n    id = fields.Str(dump_only=True)\n    name = fields.Str()\n    default = fields.Boolean()\n    project = fields.Relationship(\n        related_url='/api/projects/{project_id}',\n        related_url_kwargs={'project_id': '<project_id>'},\n        type_='projects',\n        include_resource_linkage=True\n    )\n    fields = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas/{schema_id}/fields',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'schema_id': '<id>'},\n        many=True, include_resource_linkage=True, type_='fields'\n    )\n\n    class Meta:\n        type_ = 'schemas'\n\n\nclass FieldSchema(SlydSchema):\n    id = fields.Str()\n    name = fields.Str()\n    type = fields.Str()\n    vary = fields.Boolean(default=False)\n    required = fields.Boolean(default=False)\n\n    project = fields.Relationship(\n        related_url='/api/projects/{project_id}',\n        related_url_kwargs={'project_id': '<project_id>'},\n        type_='projects',\n        include_resource_linkage=True\n    )\n    schema = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas/{schema_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'schema_id': '<schema_id>'},\n        type_='schema',\n        include_resource_linkage=True\n    )\n\n    class Meta:\n        type_ = 'fields'\n\n\nclass SpiderSchema(SlydSchema):\n    id = fields.Str(dump_only=True, load_from='name')\n    name = fields.Str()\n    start_urls = fields.List(fields.Str(), default=[])\n    links_to_follow = fields.Str(default='patterns')\n    follow_patterns = fields.List(fields.Str(), default=[])\n    exclude_patterns = fields.List(fields.Str(), default=[])\n    js_enabled = fields.Boolean(default=False)\n    js_enable_patterns = fields.List(fields.Str(), default=[])\n    js_disable_patterns = fields.List(fields.Str(), default=[])\n    respect_nofollow = fields.Boolean(default=True)\n    allowed_domains = fields.List(fields.Str(), default=[])\n    login_url = fields.Str()\n    login_user = fields.Str()\n    login_password = fields.Str()\n    perform_login = fields.Boolean(default=False)\n    samples = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>'},\n        many=True, include_resource_linkage=True, type_='samples'\n    )\n    project = fields.Relationship(\n        related_url='/api/projects/{project_id}',\n        related_url_kwargs={'project_id': '<project_id>'},\n        type_='projects',\n        include_resource_linkage=True\n    )\n\n    @pre_dump\n    def _dump_login_data(self, item):\n        init_requests = item.pop('init_requests', None)\n        if init_requests:\n            login_request = init_requests[0]\n            item['login_url'] = login_request['loginurl']\n            item['login_user'] = login_request['username']\n            item['login_password'] = login_request['password']\n        return item\n\n    @post_load\n    def _load_login_data(self, item):\n        fields = ('login_url', 'login_user', 'login_password')\n        if all(field in item and item[field] for field in fields):\n            item['init_requests'] = [{\n                'type': 'login',\n                'loginurl': item.pop('login_url'),\n                'username': item.pop('login_user'),\n                'password': item.pop('login_password')\n            }]\n        for field in fields:\n            item.pop(field, None)\n        return item\n\n    class Meta:\n        type_ = 'spiders'\n\n\nclass SampleSchema(SlydSchema):\n    id = fields.Str(dump_only=True)\n    name = fields.Str()\n    url = fields.Str(required=True)\n    page_id = fields.Str()\n    page_type = fields.Str(default='item')\n    scrapes = fields.Str()\n    extractors = fields.Dict(default={})\n    project = fields.Relationship(\n        related_url='/api/projects/{project_id}',\n        related_url_kwargs={'project_id': '<project_id>'},\n        type_='projects', include_resource_linkage=True\n    )\n    spider = fields.Relationship(\n        related_url='/api/projects/{project_id}/spiders/{spider_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>'},\n        type_='spiders', include_resource_linkage=True\n    )\n    original_body = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}/original_body',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<id>'},\n        type_='html', include_resource_linkage=False\n    )\n    rendered_body = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}/rendered_body',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<id>'},\n        type_='html', include_resource_linkage=False\n    )\n    items = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}/items',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<id>'},\n        type_='items', many=True, include_resource_linkage=True\n    )\n\n    def dump(self, obj, many=None, update_fields=True, **kwargs):\n        many = self.many if many is None else bool(many)\n        if many:\n            for o in obj:\n                o.setdefault('items', [])\n        else:\n            obj.setdefault('items', [])\n        return super(SampleSchema, self).dump(obj, many, update_fields,\n                                              **kwargs)\n\n    class Meta:\n        type_ = 'samples'\n\n\nclass BaseAnnotationSchema(SlydSchema):\n    id = fields.Str()\n    attribute = fields.Str(required=True)\n    accept_selectors = fields.List(fields.Str(), default=[])\n    reject_selectors = fields.List(fields.Str(), default=[])\n    tagid = fields.Integer(required=True)\n    text_content = fields.Str()\n    selector = fields.Str()\n\n    sample = fields.Relationship(\n        related_url='/api/projects/{project_id}/spiders/{spider_id}/samples/'\n                    '{sample_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<sample_id>'},\n        type_='samples',\n        include_resource_linkage=True\n    )\n    parent = fields.Relationship(\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<sample_id>',\n                            'item_id': '<parent_id>'},\n        type_='items', include_resource_linkage=True\n    )\n\n    @property\n    def parent_id(self):\n        return self.context.get('container_id', self.item_id)\n\n    @pre_dump\n    def _dump_parent_id(self, item):\n        parent_id = None\n        if 'parent' in item:\n            parent_id = item['parent']['id']\n        if not parent_id:\n            parent_id = item.get('container_id', self.parent_id) or ''\n        if (item['id'].split('#')[0] == parent_id or\n                parent_id.split('#')[0] == item['id']):\n            item.pop('parent', None)\n            item.pop('parent_id', None)\n            return\n        if parent_id:\n            item['parent'] = {'id': parent_id}\n        if parent_id and item.get('parent_id') is None:\n            item['parent_id'] = parent_id\n\n\nclass AnnotationSchema(BaseAnnotationSchema):\n    required = fields.Boolean(default=False)\n    ignore = fields.Boolean(default=False)\n    ignore_beneath = fields.Boolean(default=False)\n    variant = fields.Integer(default=False)\n    slice = fields.List(fields.Integer())\n    pre_text = fields.Str()\n    post_text = fields.Str()\n    selection_mode = fields.Str()\n\n    field = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas/{schema_id}/fields/'\n                    '{field_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'schema_id': '<schema_id>',\n                            'field_id': '<field.id>'},\n        type_='fields', include_resource_linkage=True\n    )\n    extractors = fields.Relationship(\n        related_url='/api/projects/{project_id}/extractors',\n        related_url_kwargs={'project_id': '<project_id>'},\n        many=True, include_resource_linkage=True, type_='extractors'\n    )\n\n    class Meta:\n        type_ = 'annotations'\n\n\nclass ItemAnnotationSchema(BaseAnnotationSchema):\n    item_container = fields.Boolean(default=True)\n    container_id = fields.Str()\n    repeated = fields.Boolean()\n    repeated_container_id = fields.Str(dump_only=True)\n    repeated_accept_selectors = fields.Str(dump_only=True)\n    siblings = fields.Integer()\n    parent_field = fields.Str()\n    schema = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas/{schema_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'schema_id': '<schema_id>'},\n        type_='schemas', include_resource_linkage=True\n    )\n\n    class Meta:\n        type_ = 'item_annotations'\n\n\nclass ExtractorSchema(SlydSchema):\n    id = fields.Str()\n    type = fields.Str()\n    value = fields.Str()\n    project = fields.Relationship(\n        related_url='/api/projects/{project_id}',\n        related_url_kwargs={'project_id': '<project_id>'},\n        type_='projects',\n        include_resource_linkage=True\n    )\n\n    @pre_dump\n    def _dump_extractor_attributes(self, item):\n        if 'type' not in item:\n            item['type'] = 'type' if 'type_extractor' in item else 'regex'\n        if 'value' not in item:\n            item['value'] = item['type_extractor'] if item['type'] == 'type' \\\n                else item['regular_expression']\n        return item\n\n    class Meta:\n        type_ = 'extractors'\n\n\nclass HtmlSchema(SlydSchema):\n    id = fields.Str()\n    html = fields.Str()\n\n    class Meta:\n        type_ = 'html'\n\n\nclass RenderedBody(SlydSchema):\n    id = fields.Str()\n    html = fields.Str()\n\n    class Meta:\n        type_ = 'rendered-bodys'\n\n\nclass OriginalBody(SlydSchema):\n    id = fields.Str()\n    html = fields.Str()\n\n    class Meta:\n        type_ = 'original-bodys'\n\n\nclass ItemSchema(SlydSchema):\n    \"\"\"Instance of a schema. Meta item built from sample.\"\"\"\n    id = fields.Str()\n    sample = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<sample_id>'},\n        include_resource_linkage=True, type_='samples'\n    )\n    schema = fields.Relationship(\n        related_url='/api/projects/{project_id}/schemas/{schema_id}',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'schema_id': '<schema_id>'},\n        type_='schemas', include_resource_linkage=True\n    )\n    annotations = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}/items/{item_id}/annotations',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<sample_id>',\n                            'item_id': '<id>'},\n        many=True, include_resource_linkage=True, type_='annotations'\n    )\n    item_annotation = fields.Relationship(\n        related_url='/api/projects/{project_id}/spider/{spider_id}/samples/'\n                    '{sample_id}/items/{item_id}/item_annotation',\n        related_url_kwargs={'project_id': '<project_id>',\n                            'spider_id': '<spider_id>',\n                            'sample_id': '<sample_id>',\n                            'item_id': '<id>'},\n        include_resource_linkage=True, type_='item_annotations'\n    )\n    parent = fields.Relationship(type_='items', include_resource_linkage=True)\n\n    @pre_dump\n    def _dump_parent_id(self, item):\n        parent_id = item.get('container_id') or ''\n        if parent_id:\n            item['parent'] = {'id': parent_id}\n        if parent_id and item.get('parent_id') is None:\n            item['parent_id'] = parent_id\n\n    class Meta:\n        type_ = 'items'\n"
  },
  {
    "path": "portia_server/portia_api/resources/projects.py",
    "content": "from collections import OrderedDict\n\nfrom django.conf import settings\nfrom django.utils.functional import cached_property\nfrom dulwich.objects import Commit\nfrom rest_framework.decorators import detail_route\nfrom rest_framework.response import Response\nfrom rest_framework.status import HTTP_200_OK, HTTP_201_CREATED\nfrom six import iteritems\nfrom scrapy.utils.misc import load_object\n\nfrom portia_orm.models import Project\nfrom storage import get_storage_class\nfrom storage.backends import InvalidFilename\nfrom .route import (JsonApiRoute, JsonApiModelRoute, CreateModelMixin,\n                    ListModelMixin, RetrieveModelMixin)\nfrom .response import FileResponse\nfrom ..jsonapi.exceptions import (JsonApiFeatureNotAvailableError,\n                                  JsonApiBadRequestError,\n                                  JsonApiNotFoundError,\n                                  JsonApiConflictError)\nfrom ..utils.download import ProjectArchiver, CodeProjectArchiver\nfrom ..utils.copy import ModelCopier, MissingModelException\nDeployer = load_object(settings.PROJECT_DEPLOYER)\n\n\nclass ProjectDownloadMixin(object):\n    @detail_route(methods=['get'])\n    def download(self, *args, **kwargs):\n        fmt = self.query.get('format', 'spec')\n        version = self.query.get('version', None)\n        branch = self.query.get('branch', None)\n        selector = self.query.get('selector') or 'css'\n        spider_id = self.kwargs.get('spider_id', None)\n        spiders = [spider_id] if spider_id is not None else None\n        try:\n            self.project\n        except InvalidFilename as e:\n            raise JsonApiNotFoundError(str(e))\n        if hasattr(self.storage, 'checkout') and (version or branch):\n            try:\n                if version and len(version) < 40:\n                    version = self.commit_from_short_sha(version).id\n                self.storage.checkout(version, branch)\n            except IOError:\n                pass\n            except ValueError as e:\n                raise JsonApiNotFoundError(str(e))\n        archiver = CodeProjectArchiver if fmt == u'code' else ProjectArchiver\n        try:\n            content = archiver(self.storage).archive(\n                spiders, selector=selector)\n        except IOError as e:\n            raise JsonApiNotFoundError(str(e))\n        try:\n            name = u'{}.zip'.format(self.project.name)\n        except UnicodeEncodeError:\n            name = str(self.project.id)\n        return FileResponse(name, content, status=HTTP_200_OK)\n\n    def commit_from_short_sha(self, version):\n        for oid in self.storage.repo._repo.object_store:\n            if oid.startswith(version):\n                obj = self.storage.repo._repo.get_object(oid)\n                if isinstance(obj, Commit):\n                    return obj\n        raise JsonApiNotFoundError(\n            'Could not find commit for `{}`'.format(version)\n        )\n\n\nclass BaseProjectRoute(JsonApiRoute):\n    @cached_property\n    def projects(self):\n        storage_class = get_storage_class()\n        return storage_class.get_projects(self.request.user)\n\n    @cached_property\n    def project(self):\n        project_id = self.kwargs.get('project_id')\n        try:\n            name = self.projects[project_id]\n            return Project(self.storage, id=project_id, name=name)\n        except KeyError:\n            raise JsonApiNotFoundError()\n\n\nclass BaseProjectModelRoute(BaseProjectRoute, JsonApiModelRoute):\n    pass\n\n\nclass ProjectRoute(ProjectDownloadMixin, BaseProjectRoute,\n                   ListModelMixin, RetrieveModelMixin, CreateModelMixin):\n    lookup_url_kwarg = 'project_id'\n    default_model = Project\n\n    class FakeStorage(object):\n        def exists(self, *args, **kwargs):\n            return False\n\n        def listdir(self, *args, **kwargs):\n            return [], []\n\n    def create(self, request):\n        \"\"\"Create a new project from the provided attributes\"\"\"\n        try:\n            name = self.data['data']['attributes']['name']\n        except KeyError:\n            raise JsonApiBadRequestError('No `name` provided')\n        self.kwargs['project_id'] = name\n\n        projects = self.projects\n        if not self.storage.is_valid_filename(name) or '.' in name:\n            raise JsonApiBadRequestError(\n                '\"{}\" is not a valid project name,\\nProject names may only '\n                'contain letters and numbers'.format(name))\n        if name in projects:\n            raise JsonApiBadRequestError(\n                'A project with the name \"{}\" already exists'.format(name))\n\n        # Bootstrap project\n        storage = self.storage\n        storage.commit()\n\n        project = Project(storage, id=name, name=name)\n        serializer = self.get_serializer(project, storage=storage)\n        data = serializer.data\n        headers = self.get_success_headers(data)\n        return Response(data, status=HTTP_201_CREATED, headers=headers)\n\n    # def update(self):\n    #     \"\"\"Update an exiting project with the provided attributes\"\"\"\n\n    # def destroy(self):\n    #     \"\"\"Delete the requested project\"\"\"\n\n    @detail_route(methods=['get'])\n    def status(self, *args, **kwargs):\n        response = self.retrieve()\n        data = OrderedDict()\n        data.update({\n            'meta': {\n                'changes': self.get_project_changes()\n            }\n        })\n        data.update(response.data)\n        return Response(data, status=HTTP_200_OK)\n\n    @detail_route(methods=['put', 'patch', 'post'])\n    def publish(self, *args, **kwargs):\n        if not self.storage.version_control and hasattr(self.storage, 'repo'):\n            raise JsonApiFeatureNotAvailableError()\n\n        if not self.get_project_changes():\n            raise JsonApiBadRequestError('You have no changes to publish')\n\n        force = self.query.get('force', False)\n        branch = self.storage.branch\n        published = self.storage.repo.publish_branch(branch, force=force)\n        if not published:\n            raise JsonApiConflictError(\n                'A conflict occurred when publishing your changes.'\n                'You must resolve the conflict before the project can be '\n                'published.')\n        self.deploy()\n        self.storage.repo.delete_branch(branch)\n        response = self.retrieve()\n        return Response(response.data, status=HTTP_200_OK)\n\n    @detail_route(methods=['POST'])\n    def deploy(self, *args, **kwargs):\n        data = self._deploy()\n        return Response(data, HTTP_200_OK)\n\n    @detail_route(methods=['put', 'patch', 'post'])\n    def reset(self, *args, **kwargs):\n        if not self.storage.version_control and hasattr(self.storage, 'repo'):\n            raise JsonApiFeatureNotAvailableError()\n        branch = self.storage.branch\n        master = self.storage.repo.refs['refs/heads/master']\n        self.storage.repo.refs['refs/heads/%s' % branch] = master\n        return self.retrieve()\n\n    @detail_route(methods=['post'])\n    def copy(self, *args, **kwargs):\n        from_project_id = self.query.get('from') or self.data.get('from')\n        if not from_project_id:\n            raise JsonApiBadRequestError('`from` parameter must be provided.')\n        try:\n            self.projects[from_project_id]\n        except KeyError:\n            raise JsonApiNotFoundError(\n                'No project exists with the id \"{}\"'.format(from_project_id))\n        models = self.data.get('data', [])\n        if not models:\n            raise JsonApiBadRequestError('No models provided to copy.')\n\n        try:\n            copier = ModelCopier(self.project, self.storage, from_project_id)\n            copier.copy(models)\n        except MissingModelException as e:\n            raise JsonApiBadRequestError(\n                'Could not find the following ids \"{}\" in the project.'.format(\n                    '\", \"'.join(e.args[0])))\n        response = self.retrieve()\n        return Response(response.data, status=HTTP_201_CREATED)\n\n    @detail_route(methods=['post'])\n    def rollback(self, *args, **kwargs):\n        if not self.storage.version_control and hasattr(self.storage, 'repo'):\n            raise JsonApiFeatureNotAvailableError()\n        version = self.query.get('version')\n        branch = self.query.get('branch')\n        if not (branch or version):\n            raise JsonApiBadRequestError(\n                'Need either `branch` or `version` arguments to rollback to')\n\n        if branch:\n            commit = self.storage.repo.refs['refs/heads/{}'.format(branch)]\n        else:\n            commit = self.commit_from_short_sha(version).id\n        self.storage.repo.refs['refs/heads/master'] = commit\n        self.storage.commit()\n        self.deploy()\n        return self.retrieve()\n\n    def get_instance(self):\n        return self.project\n\n    def get_collection(self):\n        storage = self.FakeStorage()\n        return Project.collection(\n            Project(storage, id=project_id, name=name)\n            for project_id, name in iteritems(self.projects))\n\n    def get_detail_kwargs(self):\n        return {\n            'include_data': [\n                'spiders',\n                'schemas',\n            ],\n            'fields_map': {\n                'spiders': [\n                    'project',\n                ],\n                'schemas': [\n                    'name',\n                    'default',\n                    'project',\n                ],\n            },\n            'exclude_map': {\n                'projects': [\n                    'extractors',\n                ],\n            }\n        }\n\n    def get_list_kwargs(self):\n        return {\n            'fields_map': {\n                'projects': [\n                    'name',\n                ],\n            }\n        }\n\n    def get_project_changes(self):\n        storage = self.storage\n        if not storage.version_control:\n            raise JsonApiFeatureNotAvailableError()\n        return [{'type': type_, 'path': path, 'old_path': old_path}\n                for type_, path, old_path\n                in storage.changed_files()]\n\n    def _deploy(self):\n        if settings.CAPABILITIES.get('deploy_projects'):\n            return Deployer(self.project).deploy()\n"
  },
  {
    "path": "portia_server/portia_api/resources/response.py",
    "content": "import json\n\nfrom django.http.response import HttpResponse\nfrom wsgiref.util import FileWrapper\n\nfrom six.moves import map\nfrom twisted.python.compat import intToBytes\n\n\nclass BaseApiResource(object):\n    def render(self, request):\n        raise NotImplementedError\n\n    def render_async(self, request):\n        body = self.render(request)\n        if body is not NOT_DONE_YET:\n            if body is not None:\n                request.setHeader(b'content-length', intToBytes(len(body)))\n                request.write(body)\n            request.finish()\n\n\nclass JsonApiResource(BaseApiResource):\n    def __init__(self, status, data=None):\n        self.status = status\n        self.data = data\n\n    def render(self, request):\n        request.setResponseCode(self.status)\n\n        data = self.data\n        if data is not None:\n            content_type = b\"application/vnd.api+json\"\n            profiles = data.get('links', {}).get('profile', [])\n            if profiles:\n                content_type += b'; profile=\"{}\"'.format(\n                    b' '.join(map(bytes, profiles)))\n            request.setHeader(b'content-type', content_type)\n\n            return json.dumps(data, indent=2)\n\n\nclass FileResponse(HttpResponse):\n    def __init__(self, name, content, *args, **kwargs):\n        content = FileWrapper(content)\n        super(FileResponse, self).__init__(\n            content=content, content_type='application/zip')\n        self['Content-Disposition'] = 'attachment; filename=\"%s\"' % name\n"
  },
  {
    "path": "portia_server/portia_api/resources/route.py",
    "content": "from collections import Sequence\nfrom operator import attrgetter\n\nfrom django.db import transaction\nfrom django.http.response import Http404\nfrom django.utils.functional import cached_property\nfrom marshmallow import ValidationError\nfrom marshmallow_jsonapi.exceptions import IncorrectTypeError\nfrom rest_framework.permissions import IsAuthenticated\nfrom rest_framework.response import Response\nfrom rest_framework.status import (HTTP_200_OK, HTTP_201_CREATED,\n                                   HTTP_204_NO_CONTENT)\nfrom rest_framework.viewsets import ViewSet\n\nfrom portia_orm.collection import ModelCollection\nfrom portia_orm.exceptions import ProtectedError\nfrom portia_orm.relationships import BelongsTo, HasMany\nfrom storage import create_project_storage\nfrom ..jsonapi.exceptions import (JsonApiBadRequestError,\n                                  JsonApiConflictError,\n                                  JsonApiValidationError,\n                                  render_exception)\nfrom ..jsonapi.parsers import JSONApiParser, JSONParser\nfrom ..jsonapi.registry import get_schema\nfrom ..jsonapi.renderers import JSONApiRenderer, JSONRenderer\nfrom ..jsonapi.serializers import JsonApiPolymorphicSerializer\nfrom ..jsonapi.utils import type_from_model_name\n\n\nclass JsonApiRoute(ViewSet):\n    default_model = None\n    polymorphic = None\n    permission_classes = (IsAuthenticated,)\n    parser_classes = (JSONApiParser, JSONParser)\n    renderer_classes = (JSONApiRenderer, JSONRenderer)\n\n    def __str__(self):\n        return '{} {}'.format(self.method.upper(), self.path)\n\n    def __repr__(self):\n        return 'Route(%s)' % str(self)\n\n    @cached_property\n    def method(self):\n        return self.request.method.lower()\n\n    @cached_property\n    def path(self):\n        return self.request.path\n\n    @cached_property\n    def query(self):\n        return self.request.query_params or {}\n\n    @cached_property\n    def data(self):\n        return self.request.data or {}\n\n    @cached_property\n    def user(self):\n        return self.request.user\n\n    @cached_property\n    def storage(self):\n        if 'project_id' in self.kwargs:\n            return create_project_storage(\n                self.kwargs['project_id'], author=self.user)\n        return None\n\n    @transaction.atomic\n    def dispatch(self, request, *args, **kwargs):\n        return super(JsonApiRoute, self).dispatch(request, *args, **kwargs)\n\n    def handle_exception(self, exc):\n        response = super(JsonApiRoute, self).handle_exception(exc)\n        if isinstance(exc, Http404):\n            response.data['detail'] = \"Resource '%s' not found.\" % self.path\n        status_code = response.status_code\n        if (isinstance(response.data, dict) and len(response.data) == 1 and\n                'detail' in response.data):\n            response.data = render_exception(status_code,\n                                             response.data['detail'])\n        return response\n\n    def get_instance(self):\n        raise NotImplementedError\n\n    def get_collection(self):\n        raise NotImplementedError\n\n    def filter_collection(self, collection):\n        if 'filter[id]' in self.query:\n            if not isinstance(collection, ModelCollection):\n                raise JsonApiBadRequestError(u\"Cannot filter this collection.\")\n\n            ids = []\n            for id_list in self.query.getlist('filter[id]'):\n                ids.extend(id_list.split(','))\n\n            collection = collection.__class__((collection[id_] for id_ in ids))\n\n        for key in self.query.keys():\n            if (key != 'filter[id]' and key.startswith('filter[') and\n                    key[-1] == ']'):\n                field_name = key[7:-1]\n                field_values = set()\n                for field_list in self.query.getlist(key):\n                    field_values.update(field_list.split(','))\n\n                filtered = []\n                for obj in collection:\n                    try:\n                        field = obj._fields[field_name]\n                        if isinstance(field, BelongsTo):\n                            related = getattr(obj, field_name)\n                            filter_values = {related.pk if related else 'null'}\n                        elif isinstance(field, HasMany):\n                            filter_values = {attrgetter('pk')(f)\n                                             for f in getattr(obj, field_name)}\n                        else:\n                            value = getattr(obj, field_name)\n                            if isinstance(value, Sequence):\n                                filter_values = set(value)\n                            else:\n                                filter_values = {value}\n                        if filter_values.intersection(field_values):\n                            filtered.append(obj)\n\n                    except (AttributeError, KeyError, TypeError):\n                        # skip objects which don't have a field\n                        pass\n                collection = collection.__class__(filtered)\n\n        return collection\n\n    def get_serializer(self, instance=None, data=None, many=False, **kwargs):\n        params = {}\n        if self.method == 'get':\n            params.update({\n                'current_url': self.path,\n            })\n        if many:\n            params.update(self.get_list_kwargs())\n        else:\n            params.update(self.get_detail_kwargs())\n        params.update(self.get_request_kwargs())\n        params.update(kwargs)\n\n        if self.polymorphic:\n            return JsonApiPolymorphicSerializer(\n                base=self.polymorphic, default_model=self.default_model,\n                instance=instance, data=data, many=many, **params)\n\n        type_ = type_from_model_name(self.default_model.__name__)\n        return get_schema(type_)(\n            instance=instance, data=data, many=many, **params)\n\n    def get_detail_kwargs(self):\n        return {}\n\n    def get_list_kwargs(self):\n        return self.get_detail_kwargs()\n\n    def get_request_kwargs(self):\n        kwargs = {}\n\n        if 'include' in self.query:\n            include = []\n            for include_list in self.query.getlist('include'):\n                include.extend(include_list.split(','))\n            kwargs['include_data'] = include\n\n        fields = {}\n        for key in self.query.keys():\n            if key.startswith('fields[') and key[-1] == ']':\n                field = key[7:-1]\n                for field_list in self.query.getlist(key):\n                    if field in fields:\n                        fields[field].extend(field_list.split(','))\n                    else:\n                        fields[field] = field_list.split(',')\n                    kwargs['fields_map'] = fields\n\n        if 'sort' in self.query:\n            sort_ = []\n            for sort_list in self.query.getlist('sort'):\n                sort_.extend(sort_list.split(','))\n            kwargs['ordering'] = sort_\n\n        return kwargs\n\n\nclass CreateModelMixin(object):\n    def create(self, *args, **kwargs):\n        serializer = self.get_serializer(data=self.data, storage=self.storage,\n                                         partial={'id'})\n\n        try:\n            self.perform_create(serializer)\n        except ValidationError as err:\n            raise JsonApiValidationError(err.messages)\n\n        data = serializer.data\n        self.storage.commit()\n        headers = self.get_success_headers(data)\n        return Response(data, status=HTTP_201_CREATED, headers=headers)\n\n    def perform_create(self, serializer):\n        serializer.save()\n\n    def get_success_headers(self, data):\n        try:\n            return {\n                'Location': data['data']['links']['self']\n            }\n        except (TypeError, KeyError):\n            return {}\n\n\nclass ListModelMixin(object):\n    def list(self, *args, **kwargs):\n        try:\n            collection = self.filter_collection(self.get_collection())\n        except (TypeError, IndexError, KeyError):\n            raise Http404\n\n        serializer = self.get_serializer(collection, many=True)\n        return Response(serializer.data, status=HTTP_200_OK)\n\n\nclass RetrieveModelMixin(object):\n    def retrieve(self, *args, **kwargs):\n        try:\n            instance = self.get_instance()\n        except (TypeError, IndexError, KeyError):\n            raise Http404\n\n        serializer = self.get_serializer(instance)\n        return Response(serializer.data, status=HTTP_200_OK)\n\n\nclass UpdateModelMixin(object):\n    def update(self, *args, **kwargs):\n        try:\n            instance = self.get_instance()\n        except (TypeError, IndexError, KeyError):\n            raise Http404\n\n        if kwargs.pop('partial', False):\n            partial = set(instance.__class__._ordered_fields) - {'id'}\n        else:\n            partial = False\n\n        serializer = self.get_serializer(\n            instance, data=self.data, partial=partial)\n\n        try:\n            self.perform_update(serializer)\n        except (ValidationError, IncorrectTypeError) as err:\n            raise JsonApiValidationError(err.messages)\n\n        data = serializer.data\n        self.storage.commit()\n        return Response(data, status=HTTP_200_OK)\n\n    def partial_update(self, request, *args, **kwargs):\n        kwargs['partial'] = True\n        return self.update(request, *args, **kwargs)\n\n    def perform_update(self, serializer):\n        serializer.save()\n\n\nclass DestroyModelMixin(object):\n    def destroy(self, *args, **kwargs):\n        try:\n            instance = self.get_instance()\n        except (TypeError, IndexError, KeyError):\n            raise Http404\n\n        serializer = self.get_serializer(instance, data=self.data)\n\n        try:\n            self.perform_destroy(serializer)\n        except (ValidationError, IncorrectTypeError) as err:\n            raise JsonApiValidationError(err.messages)\n        except ProtectedError:\n            raise JsonApiConflictError(u\"You cannot delete this resource.\")\n\n        data = serializer.data\n        self.storage.commit()\n        if data:\n            return Response(data, status=HTTP_200_OK)\n        return Response(status=HTTP_204_NO_CONTENT)\n\n    def perform_destroy(self, serializer):\n        return serializer.delete()\n\n\nclass JsonApiModelRoute(JsonApiRoute, ListModelMixin, RetrieveModelMixin,\n                        CreateModelMixin, UpdateModelMixin, DestroyModelMixin):\n    pass\n"
  },
  {
    "path": "portia_server/portia_api/resources/samples.py",
    "content": "from .projects import BaseProjectModelRoute\nfrom .serializers import SampleSerializer\nfrom portia_orm.models import Sample\n\n\nclass SampleRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'sample_id'\n    default_model = Sample\n\n    def perform_create(self, serializer):\n        self.project.spiders  # preload spiders\n        super(SampleRoute, self).perform_create(serializer)\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('sample_id')]\n\n    def get_collection(self):\n        project = self.project\n        project.schemas  # preload schemas and fields\n        project.extractors  # preload extractors\n        spider = project.spiders[self.kwargs.get('spider_id')]\n        for sample in spider.samples:\n            sample = sample.load(sample.storage, sample)\n            sample.url\n            spider.samples.add(sample)\n        return spider.samples\n\n    def get_detail_kwargs(self):\n        return {\n            'include_data': [\n                'items',\n            ],\n            'include_data_map': {\n                'items': [\n                    'schema.fields',\n                    'annotations',\n                ],\n                'annotations': [\n                    'field.schema.fields',\n                    'extractors',\n                ],\n            },\n        }\n\n    def get_list_kwargs(self):\n        excludes = (SampleSerializer.opts\n                                    .default_kwargs['exclude_map']['samples'])\n        return {\n            'exclude_map': {\n                'samples': excludes + [\n                    'items',\n                ]\n            }\n        }\n"
  },
  {
    "path": "portia_server/portia_api/resources/schemas.py",
    "content": "from portia_orm.models import Schema\n\nfrom .projects import BaseProjectModelRoute\nfrom ..jsonapi.exceptions import JsonApiBadRequestError, JsonApiNotFoundError\n\n\nclass SchemaRoute(BaseProjectModelRoute):\n    lookup_url_kwarg = 'schema_id'\n    default_model = Schema\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('schema_id')]\n\n    def get_collection(self):\n        return self.project.schemas\n\n    def get_list_kwargs(self):\n        return {\n            'fields_map': {\n                'schemas': [\n                    'name',\n                    'default',\n                    'project',\n                ],\n            }\n        }\n\n    def update(self, *args, **kwargs):\n        # Reset default schema if current schema will be default\n        if self.data.get('data', {}).get('attributes', {}).get('default'):\n            for schema in self.get_collection():\n                if schema.default:\n                    schema.default = False\n                schema.save()\n        return super(SchemaRoute, self).update(*args, **kwargs)\n\n    def destroy(self, *args, **kwargs):\n        try:\n            schema = self.get_instance()\n        except KeyError:\n            raise JsonApiNotFoundError('Unable to find the requested schema')\n        for spider in self.project.spiders:\n            for sample in spider.samples:\n                for item in sample.items:\n                    if self._item_uses_schema(item):\n                        raise JsonApiBadRequestError(\n                            'Unable to delete the data format \"%s\" as it is used '\n                            \"by a spider's sample.\" % schema.name)\n\n        return super(SchemaRoute, self).destroy(*args, **kwargs)\n\n    def _item_uses_schema(self, item):\n        schema = self.get_instance()\n        if item.schema.id == schema.id:\n            return True\n        for item in item.annotations:\n            if hasattr(item, 'schema') and self._item_uses_schema(item):\n                return True\n        return False\n"
  },
  {
    "path": "portia_server/portia_api/resources/serializers.py",
    "content": "from operator import attrgetter\n\nfrom six.moves import map\n\nfrom portia_api.jsonapi.serializers import JsonApiSerializer\nfrom portia_orm.base import AUTO_PK\nfrom portia_orm.exceptions import ProtectedError\nfrom portia_orm.models import (Project, Schema, Field, Extractor, Spider,\n                               Sample, Item, Annotation, RenderedBody,\n                               OriginalBody)\nfrom portia_api.utils.projects import unique_name\nfrom portia_api.utils.annotations import choose_field_type\n\n\ndef clear_auto_created(instance):\n    if instance.auto_created:\n        instance.auto_created = False\n        instance.save(only=('auto_created',))\n\n\nclass SpiderListSerializer(JsonApiSerializer):\n    class Meta:\n        model = Spider\n        url = '/api/projects/{self.project.id}/spiders/{self.id}'\n        links = {\n            'project': {\n                'related': '/api/projects/{self.project.id}',\n            },\n        }\n\n\nclass ProjectSerializer(JsonApiSerializer):\n    class Meta:\n        model = Project\n        url = '/api/projects/{self.id}'\n        links = {\n            'spiders': {\n                'related': '/api/projects/{self.id}/spiders',\n                'serializer': SpiderListSerializer,\n            },\n            'schemas': {\n                'related': '/api/projects/{self.id}/schemas',\n            },\n            'extractors': {\n                'related': '/api/projects/{self.id}/extractors',\n            },\n        }\n\n\nclass SchemaSerializer(JsonApiSerializer):\n    class Meta:\n        model = Schema\n        url = '/api/projects/{self.project.id}/schemas/{self.id}'\n        links = {\n            'project': {\n                'related': '/api/projects/{self.project.id}',\n            },\n            'fields': {\n                'related': '/api/projects/{self.project.id}/schemas'\n                           '/{self.id}/fields',\n            },\n        }\n        default_kwargs = {\n            'include_data': [\n                'fields',\n            ],\n            'exclude_map': {\n                'schemas': [\n                    'auto-created',\n                    'items',\n                ]\n            }\n        }\n\n    def update(self, instance, validated_data):\n        instance = super(SchemaSerializer, self).update(\n            instance, validated_data)\n        clear_auto_created(instance)\n        return instance\n\n\nclass FieldSerializer(JsonApiSerializer):\n    class Meta:\n        model = Field\n        url = ('/api/projects/{self.schema.project.id}/schemas'\n               '/{self.schema.id}/fields/{self.id}')\n        links = {\n            'schema': {\n                'related': '/api/projects/{self.schema.project.id}/schemas'\n                           '/{self.schema.id}',\n            },\n        }\n        default_kwargs = {\n            'exclude_map': {\n                'fields': [\n                    'auto-created',\n                    'annotations',\n                ]\n            }\n        }\n\n    def create(self, validated_data):\n        field = super(FieldSerializer, self).create(validated_data)\n        clear_auto_created(field.schema)\n        return field\n\n    def update(self, instance, validated_data):\n        instance = super(FieldSerializer, self).update(instance, validated_data)\n        clear_auto_created(instance)\n        clear_auto_created(instance.schema)\n        return instance\n\n    def delete(self):\n        clear_auto_created(self.instance.schema)\n        super(FieldSerializer, self).delete()\n\n\nclass ExtractorSerializer(JsonApiSerializer):\n    class Meta:\n        model = Extractor\n        url = '/api/projects/{self.project.id}/extractors/{self.id}'\n        links = {\n            'project': {\n                'related': '/api/projects/{self.project.id}',\n            },\n        }\n        default_kwargs = {\n            'exclude_map': {\n                'extractors': [\n                    'annotations',\n                ]\n            }\n        }\n\n\nclass SpiderSerializer(JsonApiSerializer):\n    class Meta:\n        model = Spider\n        url = '/api/projects/{self.project.id}/spiders/{self.id}'\n        links = {\n            'project': {\n                'related': '/api/projects/{self.project.id}',\n            },\n            'samples': {\n                'related': '/api/projects/{self.project.id}/spiders/{self.id}'\n                           '/samples',\n            },\n        }\n        default_kwargs = {\n            'exclude_map': {\n                'spiders': [\n                    'samples',\n                ]\n            }\n        }\n\n    def delete(self):\n        project = self.instance.project\n        project.schemas  # preload schemas and fields\n        super(SpiderSerializer, self).delete()\n\n\nclass SampleSerializer(JsonApiSerializer):\n    class Meta:\n        model = Sample\n        url = ('/api/projects/{self.spider.project.id}/spiders'\n               '/{self.spider.id}/samples/{self.id}')\n        links = {\n            'spider': {\n                'related': '/api/projects/{self.spider.project.id}/spiders'\n                           '/{self.spider.id}',\n            },\n            'items': {\n                'related': '/api/projects/{self.spider.project.id}/spiders'\n                           '/{self.spider.id}/samples/{self.id}/items'\n                           '?filter[parent]=null',\n            },\n        }\n        default_kwargs = {\n            'exclude_map': {\n                'samples': [\n                    'page-id',\n                    'page-type',\n                    'original-body',\n                    'annotated-body',\n                ]\n            }\n        }\n\n    def create(self, validated_data):\n        sample = super(SampleSerializer, self).create(validated_data)\n\n        project = sample.spider.project\n        schemas = project.schemas\n        schema = next((s for s in schemas if s.default), None)\n        if schema is None:\n            schema_names = map(attrgetter('name'), schemas)\n            schema_name = unique_name(sample.name, schema_names)\n            schema = Schema(self.storage, id=AUTO_PK, name=schema_name,\n                            project=project, auto_created=True)\n            schema.save()\n\n        item = Item(self.storage, id=AUTO_PK, sample=sample, schema=schema)\n        item.save()\n\n        return sample\n\n    def update(self, instance, validated_data):\n        sample = super(SampleSerializer, self).update(instance, validated_data)\n        for schema in sample.spider.project.schemas:\n            schema.save()\n        return sample\n\n\nclass ItemSerializer(JsonApiSerializer):\n    class Meta:\n        model = Item\n        url = ('/api/projects/{self.owner_sample.spider.project.id}/spiders'\n               '/{self.owner_sample.spider.id}/samples/{self.owner_sample.id}'\n               '/items/{self.id}')\n        links = {\n            'sample': {\n                'related': '/api/projects/{self.sample.spider.project.id}'\n                           '/spiders/{self.sample.spider.id}/samples'\n                           '/{self.sample.id}',\n            },\n            'parent': {\n                'related': '/api/projects/{self.owner_sample.spider.project.id}'\n                           '/spiders/{self.owner_sample.spider.id}/samples'\n                           '/{self.owner_sample.id}/items/{self.parent.id}',\n            },\n            'schema': {\n                'related': '/api/projects/{self.owner_sample.spider.project.id}'\n                           '/schemas/{self.schema.id}',\n            },\n            'annotations': {\n                'related': '/api/projects/{self.owner_sample.spider.project.id}'\n                           '/spiders/{self.owner_sample.spider.id}/samples'\n                           '/{self.owner_sample.id}/annotations'\n                           '?filter[parent]={self.id}',\n            },\n        }\n\n    def create(self, validated_data):\n        item = super(ItemSerializer, self).create(validated_data)\n\n        if item.schema is None:\n            sample = item.owner_sample\n            project = sample.spider.project\n            schema_names = map(attrgetter('name'), project.schemas)\n            schema_name = unique_name(sample.name, schema_names,\n                                      initial_suffix=1)\n            schema = Schema(self.storage, id=AUTO_PK, name=schema_name,\n                            project=project, auto_created=True)\n            schema.items.add(item)\n            schema.save()\n\n        if item.parent and item.name is None:\n            sample = item.owner_sample\n            item_names = map(attrgetter('name'), sample.ordered_items)\n            item.name = unique_name('subitem', item_names, initial_suffix=1)\n            item.save(only=('name',))\n\n        return item\n\n    def update(self, instance, validated_data):\n        current_schema = instance.schema\n\n        instance = super(ItemSerializer, self).update(instance, validated_data)\n\n        new_schema = instance.schema\n        if new_schema != current_schema:\n            field_map = {field.name: field for field in new_schema.fields}\n            for annotation in instance.annotations:\n                current_field = annotation.field\n                if current_field.name in field_map:\n                    new_field = field_map[current_field.name]\n                    clear_auto_created(new_field)\n                else:\n                    new_field = Field(self.storage, id=AUTO_PK,\n                                      name=current_field.name,\n                                      type=current_field.type,\n                                      schema=new_schema,\n                                      auto_created=True)\n                    field_map[new_field.name] = new_field\n                    new_field.save()\n                annotation.field = new_field\n                annotation.save(only=('field',))\n                if current_field.auto_created:\n                    self.deleted.extend(current_field.delete())\n            if current_schema.auto_created:\n                self.deleted.extend(current_schema.delete())\n            clear_auto_created(new_schema)\n\n        return instance\n\n    def delete(self):\n        instance = self.instance\n        sample = instance.owner_sample\n        items = sample.items\n        if len(items) == 1 and items[0] == instance:\n            raise ProtectedError(\n                u\"Cannot delete item {} because it is the only item in the \"\n                u\"sample {}\".format(instance, sample))\n        super(ItemSerializer, self).delete()\n\n\nclass AnnotationSerializer(JsonApiSerializer):\n    class Meta:\n        model = Annotation\n        url = ('/api/projects/{self.owner_sample.spider.project.id}/spiders'\n               '/{self.owner_sample.spider.id}/samples/{self.owner_sample.id}'\n               '/annotations/{self.id}')\n        links = {\n            'parent': {\n                'related': '/api/projects'\n                           '/{self.owner_sample.spider.project.id}/spiders'\n                           '/{self.owner_sample.spider.id}/samples'\n                           '/{self.owner_sample.id}/items/{self.parent.id}',\n            },\n            'field': {\n                'related': '/api/projects'\n                           '/{self.owner_sample.spider.project.id}/schemas'\n                           '/{self.parent.schema.id}/fields/{self.field.id}',\n            },\n        }\n\n    def create(self, validated_data):\n        annotation = super(AnnotationSerializer, self).create(validated_data)\n\n        if annotation.field is None:\n            project = annotation.owner_sample.spider.project\n            project.schemas  # preload schemas and fields\n            item = annotation.parent\n            schema = item.schema\n            field_names = map(attrgetter('name'), schema.fields)\n            field_name = unique_name('field', field_names, initial_suffix=1)\n            field = Field(self.storage, id=AUTO_PK, name=field_name,\n                          type=choose_field_type(annotation), schema=schema,\n                          auto_created=True)\n            field.annotations.add(annotation)\n            field.save()\n\n        return annotation\n\n    def update(self, instance, validated_data):\n        current_field = instance.field\n\n        instance = super(AnnotationSerializer, self).update(\n            instance, validated_data)\n\n        new_field = instance.field\n        if new_field != current_field:\n            if current_field.auto_created:\n                self.deleted.extend(current_field.delete())\n            clear_auto_created(new_field)\n\n        return instance\n\n\nclass RenderedBodySerializer(JsonApiSerializer):\n    class Meta:\n        model = RenderedBody\n        url = ('/api/projects/{self.sample.spider.project.id}/'\n               'spiders/{self.sample.spider.id}/samples/'\n               '{self.sample.id}/rendered_body')\n        links = {\n            'sample': {\n                'related': ('/api/projects/{self.sample.spider.project.id}/'\n                            'spiders/{self.sample.spider.id}/samples/'\n                            '{self.sample.id}'),\n            },\n        }\n\n\nclass OriginalBodySerializer(JsonApiSerializer):\n    class Meta:\n        model = OriginalBody\n        url = ('/api/projects/{self.sample.spider.project.id}/'\n               'spiders/{self.sample.spider.id}/samples/'\n               '{self.sample.id}/original_body')\n        links = {\n            'sample': {\n                'related': ('/api/projects/{self.sample.spider.project.id}/'\n                            'spiders/{self.sample.spider.id}/samples/'\n                            '{self.sample.id}'),\n            },\n        }\n"
  },
  {
    "path": "portia_server/portia_api/resources/spiders.py",
    "content": "from django.http.response import Http404\n\nfrom rest_framework.decorators import detail_route\nfrom rest_framework.response import Response\nfrom rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST\n\nfrom django.conf import settings\nfrom scrapy.utils.misc import load_object\n\nfrom .projects import BaseProjectModelRoute, ProjectDownloadMixin\nfrom ..jsonapi.exceptions import JsonApiGeneralException\nfrom ..utils.extract import Pages, FetchError\nfrom ..utils.spiders import load_spider\nfrom portia_orm.models import Spider\nDeployer = load_object(settings.PROJECT_DEPLOYER)\n\n\nclass SpiderRoute(ProjectDownloadMixin, BaseProjectModelRoute):\n    lookup_url_kwarg = 'spider_id'\n    lookup_value_regex = '[^/]+'\n    default_model = Spider\n\n    def get_instance(self):\n        return self.get_collection()[self.kwargs.get('spider_id')]\n\n    def get_collection(self):\n        return self.project.spiders\n\n    @detail_route(methods=['post'])\n    def extract(self, *args, **kwargs):\n        try:\n            instance = self.get_instance()\n        except KeyError:\n            raise JsonApiGeneralException(\n                'No spider found with the name \"%s\"' % kwargs.get('spider_id'),\n                404)\n        try:\n            spider = load_spider(instance)\n        except (ValueError, KeyError, IndexError):\n            raise JsonApiGeneralException(\n                'Failed to load spider, \"%s\" correctly' % instance.id, 500)\n        pages = self._build_pages(spider)\n        try:\n            data = pages.extract_items()\n        except FetchError as e:\n            raise JsonApiGeneralException(e.message, e.status)\n        return Response(data, status=HTTP_200_OK)\n\n    def _build_pages(self, spider):\n        return Pages(self.data, spider)\n\n    @detail_route(methods=['post'])\n    def rename(self, *args, **kwargs):\n        try:\n            spider = self.get_instance()\n            name = self.data['name']\n            self.project.spiders\n            possible_spider = Spider(self.storage, id=name)\n            if possible_spider in self.project.spiders and name != spider.id:\n                raise JsonApiGeneralException(\n                    'Spider already exists in this project with the name, '\n                    '\"%s\"' % name, HTTP_400_BAD_REQUEST)\n            path = 'spiders/{}/{}'.format\n            for sample in spider.samples:\n                # Load sample and move html pages\n                sample.url\n                self.storage.move(path(spider.id, sample.id),\n                                  path(name, sample.id))\n            spider.id = name\n            spider.save()\n            self.storage.commit()\n        except (TypeError, IndexError, KeyError):\n            raise Http404\n        data = self.get_serializer(spider).data\n        return Response(data, status=HTTP_200_OK)\n\n    @detail_route(methods=['post'])\n    def schedule(self, *args, **kwargs):\n        spider_id = self.data['data']['id']\n        data = Deployer(self.project).schedule(spider_id)\n        return Response(data, status=HTTP_200_OK)\n"
  },
  {
    "path": "portia_server/portia_api/routers.py",
    "content": "from rest_framework_nested.routers import SimpleRouter, NestedSimpleRouter\n\n__all__ = [\n    'Router',\n    'NestedRouter',\n]\n\n\nclass Router(SimpleRouter):\n    def __init__(self, trailing_slash=False):\n        super(Router, self).__init__(trailing_slash)\n\n    def get_lookup_regex(self, viewset, lookup_prefix=''):\n        return super(Router, self).get_lookup_regex(viewset, '')\n\n\nclass NestedRouter(NestedSimpleRouter, Router):\n    def __init__(self, parent_router, parent_prefix, trailing_slash=False,\n                 *args, **kwargs):\n        super(NestedRouter, self).__init__(\n            parent_router, parent_prefix, trailing_slash, *args, **kwargs)\n"
  },
  {
    "path": "portia_server/portia_api/tests/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_api/tests/test_routes.py",
    "content": "import unittest\n\nfrom rest_framework.test import APIRequestFactory\n\nfrom portia_api.resources.route import JsonApiRoute\n\n\nclass TestRoute(unittest.TestCase):\n    def test_route_representation(self):\n        factory = APIRequestFactory()\n        request = factory.get('/projects/')\n        route = JsonApiRoute(request=request)\n        self.assertEqual(str(route), 'GET /projects/')\n        self.assertEqual(repr(route), 'Route(GET /projects/)')\n"
  },
  {
    "path": "portia_server/portia_api/urls.py",
    "content": "from django.conf.urls import url, include\n\nfrom .routers import Router, NestedRouter\nfrom .resources.annotations import AnnotationRoute\nfrom .resources.extractors import ExtractorRoute\nfrom .resources.fields import FieldRoute\nfrom .resources.items import ItemRoute\nfrom .resources.projects import ProjectRoute\nfrom .resources.samples import SampleRoute\nfrom .resources.schemas import SchemaRoute\nfrom .resources.spiders import SpiderRoute\n\nrouter = Router()\nrouter.register(r'projects', ProjectRoute, base_name='projects')\n\nproject_router = NestedRouter(router, r'projects')\nproject_router.register(r'schemas', SchemaRoute, base_name='schemas')\nproject_router.register(r'spiders', SpiderRoute, base_name='spiders')\nproject_router.register(r'extractors', ExtractorRoute, base_name='extractors')\n\nschema_router = NestedRouter(project_router, r'schemas')\nschema_router.register(r'fields', FieldRoute, base_name='fields')\n\nspider_router = NestedRouter(project_router, r'spiders')\nspider_router.register(r'samples', SampleRoute, base_name='samples')\n\nsample_router = NestedRouter(spider_router, r'samples')\nsample_router.register(r'items', ItemRoute, base_name='items')\nsample_router.register(r'annotations', AnnotationRoute, base_name='annotations')\n\nurlpatterns = [\n    url(r'^', include(router.urls)),\n    url(r'^', include(project_router.urls)),\n    url(r'^', include(schema_router.urls)),\n    url(r'^', include(spider_router.urls)),\n    url(r'^', include(sample_router.urls)),\n]\n"
  },
  {
    "path": "portia_server/portia_api/utils/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_api/utils/annotations.py",
    "content": "\nDEFAULTS = {\n    'accept': 'url',\n    'align': 'number',\n    'code': 'url',\n    'codebase': 'url',\n    'coords': 'geopoint',\n    'data': 'url',\n    'datetime': 'date',\n    'download': 'url',\n    'high': 'number',\n    'href': 'url',\n    'icon': 'image',\n    'low': 'number',\n    'max': 'number',\n    'media': 'href',\n    'min': 'number',\n    'optimum': 'number',\n    'rel': 'href',\n    'rows': 'number',\n    'src': 'image',\n    'target': 'url',\n}\n\n\ndef choose_field_type(annotation):\n    attribute = annotation.attribute\n    if attribute == 'content':\n        return 'text'\n    return DEFAULTS.get(attribute, 'text')\n"
  },
  {
    "path": "portia_server/portia_api/utils/copy.py",
    "content": "import re\nfrom collections import defaultdict\n\nfrom portia_orm.models import Project\nfrom portia_orm.utils import short_guid\n\n\nclass MissingModelException(Exception):\n    \"\"\"Error thrown when model for id is not present in project.\"\"\"\n\n\nclass ModelCopier(object):\n    SPIDER_NAME = r'(.*_)([0-9]+)$'\n\n    def __init__(self, project, storage, from_project_id):\n        self.project, self.storage = project, storage\n        self.from_storage = storage.__class__(from_project_id,\n                                              author=storage.author)\n        self.from_project = Project(self.from_storage, id=from_project_id,\n                                    name=from_project_id)\n        # Populating projects to avoid overwrites\n        self.project.schemas\n        self.project.extractors\n        self.from_project.schemas\n        self.from_project.extractors\n        self.spider_ids = set(spider.id for spider in self.project.spiders)\n\n        self.copied_fields = {}\n        self.copied_schemas = {}\n        self.copied_extractors = {}\n\n    def copy(self, models):\n        grouped = self.group(models)\n\n        for spider in grouped.get('spiders', []):\n            copied_spider = self.copy_spider(spider)\n            for sample in spider.samples:\n                copied_sample = self.copy_sample(sample, copied_spider)\n\n                for item in sample.items:\n                    copied_item = self.copy_item(\n                        item, self.copy_schema(item.schema), copied_sample)\n                    for annotation in item.annotations:\n                        copied_ann = self.copy_annotation(\n                            annotation, copied_item, annotation.field)\n                        copied_ann.extractors = self.copy_extractors(\n                            annotation.extractors)\n                        copied_ann.save()\n        for schema in grouped.get('schemas', []):\n            self.copy_schema(schema)\n        self.storage.commit()\n\n    def copy_spider(self, spider):\n        copied_spider = spider.copy(self._unique_id(spider.id),\n                                    storage=self.storage)\n        copied_spider.project = self.project\n        copied_spider.save()\n        return copied_spider\n\n    def copy_sample(self, sample, spider):\n        copied_sample = sample.copy(short_guid(), storage=self.storage)\n\n        copied_sample.spider = spider\n        copied_sample.original_body = self._copy_body(\n            sample.original_body, sample)\n        try:\n            copied_sample.rendered_body = self._copy_body(\n                sample.rendered_body, sample)\n        except AttributeError:\n            # Ignore missing rendered body.\n            # It will be added when the sample is modified\n            pass\n\n        copied_sample.save()\n        return copied_sample\n\n    def copy_item(self, item, schema, sample):\n        copied_item = item.copy(storage=self.storage)\n        copied_item.schema = schema\n        copied_item.sample = sample\n\n        copied_item.save()\n        return copied_item\n\n    def copy_schema(self, schema):\n        schema_id = schema.id\n        if schema_id in self.copied_schemas:\n            return self.copied_schemas[schema_id]\n\n        copied_schema = schema.copy(storage=self.storage)\n        copied_schema.project = self.project\n        copied_schema.save()\n\n        for field in schema.fields:\n            self._copy_field(field, copied_schema)\n\n        self.copied_schemas[schema_id] = copied_schema\n        return copied_schema\n\n    def copy_annotation(self, annotation, item, field):\n        copied_ann = annotation.copy(\n            '{}|{}'.format(short_guid(), short_guid()),\n            storage=self.storage)\n        copied_ann.field = self.copied_fields[field.id]\n        item.annotations.add(copied_ann)\n\n        copied_ann.save()\n        return copied_ann\n\n    def copy_extractors(self, extractors):\n        copied = []\n        for extractor in extractors:\n            # TODO: Skip missing extractors in ORM\n            try:\n                self.from_project.extractors[extractor]\n            except KeyError:\n                continue\n            copied_extractor = self._copy_extractor(extractor)\n            copied.append(copied_extractor)\n        return copied\n\n    def group(self, models):\n        instances = defaultdict(list)\n        errors = []\n        for model_meta in models:\n            _id, model_type = model_meta['id'], model_meta['type']\n            collection = getattr(self.from_project, model_type, {})\n            try:\n                instance = collection[_id]\n                instances[model_type].append(instance)\n            except (KeyError, TypeError):\n                errors.append(_id)\n        if errors:\n            raise MissingModelException(errors)\n        return instances\n\n    def _copy_field(self, field, schema):\n        copied_field = field.copy(storage=self.storage)\n        copied_field.schema = schema\n        copied_field.save()\n        self.copied_fields[field.id] = copied_field\n\n    def _copy_extractor(self, extractor):\n        extractor_id = extractor.id\n        if extractor_id in self.copied_extractors:\n            return self.copied_extractors[extractor_id]\n\n        copied_extractor = extractor.copy(short_guid(), storage=self.storage)\n        copied_extractor.project = self.project\n\n        copied_extractor.save()\n        self.copied_extractors[extractor_id] = copied_extractor\n        return copied_extractor\n\n    def _copy_body(self, body, sample):\n        body_id = '{}_{}'.format(sample.id, body.Meta.name)\n        copied_body = body.copy(body_id, storage=self.storage)\n        copied_body.sample = sample\n\n        copied_body.save()\n        return copied_body\n\n    def _unique_id(self, spider_id):\n        unique_id = spider_id\n        while unique_id in self.spider_ids:\n            match = re.match(self.SPIDER_NAME, unique_id)\n            if match:\n                unique_id = match.group(1) + str(int(match.group(2)) + 1)\n            else:\n                unique_id += '_1'\n        return unique_id\n"
  },
  {
    "path": "portia_server/portia_api/utils/deploy/base.py",
    "content": "from portia_api.utils.download import ProjectArchiver\n\n\nclass BaseDeploy(object):\n    def __init__(self, project):\n        self.project = project\n        self.storage = project.storage\n        self.config = self._get_config()\n        self.config.version = self.project.version\n\n    def build_archive(self):\n        return ProjectArchiver(self.storage, project=self.project).archive(\n            egg_info=True)\n\n    def _get_config(self):\n        raise NotImplementedError\n\n    def deploy(self, target=None):\n        raise NotImplementedError\n\n    def schedule(self, spider, args=None, settings=None, target=None):\n        raise NotImplementedError\n"
  },
  {
    "path": "portia_server/portia_api/utils/deploy/package.py",
    "content": "import os\nimport textwrap\nimport zipfile\n\nfrom datetime import datetime\nfrom distutils.dist import DistributionMetadata\nfrom io import StringIO\n\n\nclass EggInfo(object):\n    def __init__(self, project, archive):\n        self.project = project\n        self.archive = archive\n        self.tstamp = datetime.now().timetuple()[:6]\n\n    def write(self):\n        self._write_file('PKG-INFO', self.build_pkg_info())\n        self._write_file('SOURCES.txt', self.build_sources())\n        self._write_file('dependency_links.txt', self.build_dependency())\n        self._write_file('entry_points.txt', self.build_entry_points())\n        self._write_file('top_level.txt', self.build_top_level())\n        self._write_file('zip-safe', self.build_zip_safe())\n\n    def _write_file(self, filename, contents):\n        filepath = os.path.join('EGG-INFO', filename)\n        fileinfo = zipfile.ZipInfo(filepath, self.tstamp)\n        fileinfo.external_attr = 0o666 << 16\n        self.archive.writestr(fileinfo, contents, zipfile.ZIP_DEFLATED)\n\n    def build_pkg_info(self):\n        meta = DistributionMetadata()\n        meta.name = self.project.name\n        meta.version = self.project.version\n        file = StringIO()\n        meta.write_pkg_file(file)\n        file.seek(0)\n        return file.read()\n\n    def build_sources(self):\n        return '\\n'.join(sorted(f.filename for f in self.archive.filelist))\n\n    def build_top_level(self):\n        return '\\n'.join(sorted({\n            fn.split('/', 1)[0] for fn in (\n                fn for fn in (\n                    f.filename for f in self.archive.filelist))\n            if fn.endswith('.py')\n        }))\n\n    def build_dependency(self):\n        return '\\n'\n\n    def build_entry_points(self):\n        return textwrap.dedent(\"\"\"\\\n            [scrapy]\n            settings = spiders.settings\n        \"\"\")\n\n    def build_zip_safe(self):\n        return ''\n"
  },
  {
    "path": "portia_server/portia_api/utils/deploy/scrapinghub.py",
    "content": "import json\nimport os\n\nfrom six import StringIO\nfrom urllib.parse import urljoin\n\nfrom django.conf import settings as app_settings\nfrom rest_framework import status\nfrom shub import exceptions\nfrom shub.config import ShubConfig\nfrom shub.schedule import schedule_spider\nfrom shub.utils import make_deploy_request\nfrom portia_api.jsonapi.exceptions import JsonApiGeneralException\nfrom storage.projecttemplates import templates\n\nfrom .base import BaseDeploy\n\n\nclass ScrapinghubDeploy(BaseDeploy):\n    SHUB_DOCS_URL = 'https://shub.readthedocs.io/en/stable/configuration.html'\n    EXCEPTIONS = (\n        exceptions.InvalidAuthException,  # EX_NOPERM\n        exceptions.RemoteErrorException,  # EX_PROTOCOL\n    )\n    STATUS_CODES = {\n        os.EX_UNAVAILABLE: status.HTTP_404_NOT_FOUND,\n        os.EX_PROTOCOL: status.HTTP_503_SERVICE_UNAVAILABLE,\n    }\n\n    def _get_config(self):\n        conf = ShubConfig()\n        conf.load(StringIO(json.dumps(self._default_config())))\n        if 'SHUB_APIKEY' in os.environ:\n            conf.apikeys['default'] = os.environ['SHUB_APIKEY']\n        try:\n            conf.load(self.storage.open('scrapinghub.yml'))\n        except OSError:\n            raise ('Need a `scrapinghub.yml` file to identify which project '\n                   'to deploy to. Find more information at: {}'.format(\n                    self.SHUB_DOCS_URL\n                   ))\n        return conf\n\n    def _default_config(self):\n        config = {\n            'stack': 'scrapy:1.5-py-latest',\n        }\n        if getattr(app_settings, 'SCRAPINGHUB_APIKEY', None):\n            config['apikeys'] = {\n                'default': app_settings.SCRAPINGHUB_APIKEY,\n            }\n        return config\n\n    def deploy(self, target='default'):\n        try:\n            conf = self.config.get_target_conf(target)\n            archive = self.build_archive()\n            data = {\n                'project': conf.project_id,\n                'version': self.project.version,\n                'stack': conf.stack\n            }\n            files = [('egg', archive)]\n            if conf.requirements_file:\n                try:\n                    file = self.storage.open(conf.requirements_file)\n                except OSError:\n                    file = StringIO(templates['REQUIREMENTS'])\n                files.append(('requirements', file))\n            make_deploy_request(\n                urljoin(conf.endpoint, 'scrapyd/addversion.json'),\n                data, files, (conf.apikey, ''), False, False)\n        except self.EXCEPTIONS as e:\n            raise JsonApiGeneralException(\n                e.format_message(),\n                self.STATUS_CODES.get(getattr(e, 'exit_code', None), 500),\n            )\n        return {\n            'message': 'Your deploy completed successfully',\n        }\n\n    def schedule(self, spider, args=None, settings=None, target='default'):\n        try:\n            conf = self.config.get_target_conf(target)\n            schedule_spider(\n                conf.project_id, conf.endpoint, conf.apikey, spider,\n                arguments=args or (), settings=settings or ())\n        except self.EXCEPTIONS as e:\n            raise JsonApiGeneralException(\n                e.format_message(),\n                self.STATUS_CODES.get(getattr(e, 'exit_code', None), 500),\n            )\n"
  },
  {
    "path": "portia_server/portia_api/utils/deploy/scrapyd.py",
    "content": "import requests\n\nfrom configparser import ConfigParser\nfrom urllib.parse import urljoin\n\nfrom django.conf import settings as app_settings\nfrom portia_api.jsonapi.exceptions import JsonApiGeneralException\n\nfrom .base import BaseDeploy\n\n\nclass ScrapydDeploy(BaseDeploy):\n    def _get_config(self):\n        conf = ConfigParser()\n        conf.read_dict(self._get_config_defaults())\n        if getattr(app_settings, 'SCRAPYD_CFG_DEFAULT', None):\n            conf.read(app_settings.SCRAPYD_CFG_DEFAULT)\n        try:\n            scrapy_cfg = self.storage.open('scrapy.cfg').read().decode('utf-8')\n            conf.read_string(scrapy_cfg)\n        except OSError:\n            pass\n        return conf\n\n    def _get_config_defaults(self):\n        deploy_settings = [\n            ('username', 'SCRAPYD_USERNAME'),\n            ('password', 'SCRAPYD_PASSWORD'),\n            ('url', 'SCRAPYD_URL'),\n        ]\n        deploy_defaults = {}\n        for default, setting in deploy_settings:\n            setting = getattr(app_settings, setting, None)\n            if setting is not None:\n                deploy_defaults[default] = setting\n        defaults = {\n            'deploy': deploy_defaults,\n            'deploy:default': {\n                'project': self.project.name,\n                'version': self.project.version,\n            },\n        }\n        return defaults\n\n    def deploy(self, target='default'):\n        cfg = dict(self.config.items('deploy'))\n        cfg.update(self.config.items('deploy:default'))\n        if target and self.config.has_section('deploy:{}'.format(target)):\n            cfg.update(self.config.items('deploy:{}'.format(target)))\n        data = {\n            'project': cfg['project'],\n            'version': cfg['version'],\n        }\n        files = {\n            'egg': ('project.egg', self.build_archive())\n        }\n        url = urljoin(cfg['url'], '/addversion.json')\n        user = cfg.get('username')\n        if user:\n            auth = (user, cfg.get('password', ''))\n        else:\n            auth = None\n        requests.post(url, data=data, files=files, auth=auth)\n        return {\n            'message': 'Your deploy completed successfully',\n        }\n\n    def schedule(self, spider, args=None, settings=None, target=None):\n        schedule_data = self._schedule_data(\n            spider, self._schedule_data(spider, args))\n        request = requests.post(\n            urljoin(app_settings.SCRAPYD_URL, 'schedule.json'),\n            data=schedule_data)\n        if request.status_code != 200:\n            raise JsonApiGeneralException(\n                request.status_code, request.content)\n        data = {}\n        data.setdefault('meta', {})['scheduled'] = True\n        return data\n\n    def _schedule_data(self, spider_id, args):\n        data = {\n            'project': self.project.id,\n            'spider': spider_id\n        }\n        if self.storage.version_control:\n            branch = self.query.get('branch', None)\n            commit = self.query.get('commit_id', None)\n            if not branch and self.storage.repo.has_branch(self.user.username):\n                branch = self.user.username\n            self.storage.checkout(commit, branch)\n            commit_id = self.storage._commit.id\n            data['version'] = commit_id\n        return data\n"
  },
  {
    "path": "portia_server/portia_api/utils/download.py",
    "content": "from __future__ import absolute_import\nimport itertools\nimport json\nimport os\nimport six\nimport zipfile\n\nfrom collections import defaultdict\nfrom os.path import join\nfrom six import BytesIO\nfrom datetime import datetime\n\nfrom slybot.utils import decode\nfrom portia2code.porter import load_project_data, port_project\n\nfrom storage.projecttemplates import templates\nfrom portia_api.utils.deploy.package import EggInfo\n\nREQUIRED_FILES = {'setup.py', 'scrapy.cfg', 'extractors.json', 'items.json',\n                  'project.json', 'spiders/__init__.py', 'spiders/settings.py',\n                  'requirements.txt', 'MANIFEST.in'}\nFILE_TEMPLATES = {\n    'extractors.json': '{}',\n    'items.json': '{}',\n    'project.json': templates['PROJECT'],\n    'scrapy.cfg': templates['SCRAPY'],\n    'setup.py': templates['SETUP'],\n    'MANIFEST.in': templates['MANIFEST'],\n    'requirements.txt': templates['REQUIREMENTS'],\n    'spiders/__init__.py': '',\n    'spiders/settings.py': templates['SETTINGS']\n}\n\n\ndef walk(storage, dirname=''):\n    dirs, files = storage.listdir(dirname)\n    for dname in dirs:\n        files.extend([join(dname, fname)\n                      for fname in walk(storage, join(dirname, dname))])\n    return set(files)\n\n\nclass ProjectArchiver(object):\n\n    required_files = frozenset(REQUIRED_FILES)\n    file_templates = FILE_TEMPLATES\n\n    def __init__(self, storage, required_files=None, *, project=None):\n        self.separator = os.path.sep\n        self.storage = storage\n        self.name = storage.name\n        self.project = project\n        if required_files is not None:\n            self.required_files = required_files\n\n    def archive(self, spiders=None, **kwargs):\n        \"\"\"\n        Zip the contents or a subset of the contents in this project together\n        \"\"\"\n        zbuff = BytesIO()\n        self._archive = zipfile.ZipFile(zbuff, \"w\", zipfile.ZIP_DEFLATED)\n        self._add_files(spiders)\n        if kwargs.get('egg_info'):\n            self.add_egg_info()\n        self._archive.close()\n        zbuff.seek(0)\n        return zbuff\n\n    def _add_files(self, spiders):\n        \"\"\"\n        Add all selected spiders and other files to the project\n        \"\"\"\n        now = datetime.now().timetuple()[:6]\n        extractors = self.read_file('extractors.json', deserialize=True) or {}\n        files, all_files, spider_templates = self._paths(spiders)\n        seen_files = set()\n        for file_path in files:\n            if file_path in seen_files:\n                continue\n            if (file_path.startswith('spiders/') and\n                    file_path.endswith('.json')):\n                path, contents, added = self._add_spider(file_path,\n                                                         spider_templates,\n                                                         extractors)\n                if contents is not None:\n                    self._add_file(file_path, contents, now)\n            else:\n                self._add_file(file_path, self.read_file(file_path), now)\n        file_list = set(f.filename for f in self._archive.filelist)\n        for file_path in self.required_files:\n            if file_path in file_list:\n                continue\n            self._add_file(file_path, self.file_templates[file_path], now)\n\n    def _add_file(self, filename, contents, tstamp):\n        \"\"\"\n        Add a file to the zip archive.\n        \"\"\"\n        if filename is None or contents in (None, 'null'):\n            return\n        fileinfo = zipfile.ZipInfo(filename, tstamp)\n        fileinfo.external_attr = 0o666 << 16\n        self._archive.writestr(fileinfo, contents, zipfile.ZIP_DEFLATED)\n\n    def _add_spider(self, file_path, templates, extractors):\n        \"\"\"\n        Add a spider or template to the archive.\n        \"\"\"\n        data = self.read_file(file_path, deserialize=True)\n        added = {file_path}\n        if data is not None and data.get('deleted'):\n            return self._deleted_spider(file_path, data, templates)\n\n        spider_content = json.dumps(data, sort_keys=True, indent=4)\n        return file_path, spider_content.encode('utf-8'), added\n\n    def _deleted_spider(self, file_path, spider_data, templates):\n        \"\"\"\n        Add information about a deleted spider.\n        \"\"\"\n        spider = self._spider_name(file_path)\n        file_path = self._spider_path(file_path)\n        added = {file_path}\n        added.update(set(templates.get(spider, [])))\n        if self.ignore_deleted:\n            return None, None, added\n        spider_content = json.dumps(spider_data, sort_keys=True, indent=4)\n        return file_path, spider_content.encode('utf-8'), added\n\n    def _spider_templates(self, spider_templates, extractors):\n        \"\"\"\n        Find all templates for a legacy spider and combine them into a single\n        list.\n        \"\"\"\n        templates, added = [], set()\n        for template_path in spider_templates:\n            added.add(template_path)\n            existing = {}\n            template = self.read_file(template_path, deserialize=True)\n            if template is None:\n                continue\n            template_extractors = template.get('extractors', {})\n            if not isinstance(template_extractors, dict):\n                template_extractors = {e.get('field'): e.get('id')\n                                       for e in template_extractors\n                                       if 'field' in e and e['field']}\n            for field, eids in template_extractors.items():\n                existing[field] = [eid for eid in eids\n                                   if eid in extractors]\n            template['extractors'] = existing\n            templates.append(template)\n        return templates, added\n\n    def add_egg_info(self):\n        EggInfo(self.project, self._archive).write()\n\n    def _spider_name(self, file_path):\n        \"\"\"\n        Get the name of a spider for a template or spider path.\n        \"\"\"\n        split = file_path.split(self.separator)\n        if len(split) > 2:\n            return split[1]\n        return split[1][:-5]\n\n    def _name(self, file_path):\n        \"\"\"\n        Get the name for the current json path\n        \"\"\"\n        split = file_path.split(self.separator)\n        if split[-1].endswith('.json'):\n            return split[-1][:-5]\n        return ''\n\n    def _spider_path(self, file_path):\n        if len(file_path.split(self.separator)) > 2:\n            return 'spiders/{}.json'.format(self._spider_name(file_path))\n        return file_path\n\n    def _paths(self, spiders):\n        \"\"\"\n        Build a collection of paths needed to build the archive.\n        \"\"\"\n        if spiders is None:\n            all_files = self.list_files()\n            return all_files, all_files, self._template_paths(None, all_files)\n        if isinstance(spiders, six.string_types):\n            spiders = [spiders]\n        spider_paths = set('spiders/{}.json'.format(spider)\n                           for spider in spiders)\n        all_files = self.list_files()\n        template_paths = self._template_paths(spiders, all_files)\n        templates = set(itertools.chain(*template_paths.values()))\n        spider_paths = spider_paths | templates\n        files = list(set(spider_paths) | self.required_files)\n        return files, all_files, template_paths\n\n    def _template_paths(self, spiders, files):\n        \"\"\"\n        Map all template paths to the corresponding spider.\n        \"\"\"\n        spider_templates = defaultdict(list)\n        for file_path in files:\n            split_file_path = file_path.split('/')\n            if len(split_file_path) > 2 and (spiders is None or\n                                             split_file_path[1] in spiders):\n                spider_templates[split_file_path[1]].append(file_path)\n        return spider_templates\n\n    def list_files(self):\n        return walk(self.storage)\n\n    def read_file(self, filename, deserialize=False):\n        try:\n            contents = self.storage.open(filename, 'rb').read()\n        except IOError as e:\n            if filename in ('items.json', 'extractors.json'):\n                return {} if deserialize else b'{}'\n            elif filename in FILE_TEMPLATES:\n                return FILE_TEMPLATES[filename].encode('utf-8')\n            raise e\n        if deserialize and contents is not None:\n            return json.loads(contents.decode('utf-8'))\n        return contents\n\n\nclass CodeProjectArchiver(ProjectArchiver):\n    def archive(self, spiders=None, **kwargs):\n\n        class ArchivingStorage(object):\n            def __init__(self, storage):\n                self.storage = storage\n\n            def isdir(self, *args, **kwargs):\n                return self.storage.isdir(self.rel_path(*args))\n\n            def listdir(self, *args, **kwargs):\n                if spiders and args == ['spiders']:\n                    return ['{}.json'.format(s) for s in spiders]\n                path = self.rel_path(*args)\n                return itertools.chain(*self.storage.listdir(path))\n\n            def rel_path(self, *args):\n                return '/'.join(args)\n\n            def open(self, *args, **kwargs):\n                raw = kwargs.get('raw')\n                path = self.rel_path(*args)\n                if raw:\n                    fp = self.storage.open(path)\n                else:\n                    fp = self.storage.open_with_default(path, {})\n                return decode(fp.read()) if raw else json.loads(fp.read())\n\n        storage = ArchivingStorage(self.storage)\n        schemas, extractors, spiders = load_project_data(storage)\n        name = self._process_name()\n        selector = kwargs.get('selector') or 'css'\n        return port_project(name, schemas, spiders, extractors,\n                            selector=selector)\n\n    def _process_name(self):\n        try:\n            int(self.name)\n        except ValueError:\n            return self.name\n        # Scrapy will not allow the use of a number as a project name\n        return 'A{}'.format(self.name)\n"
  },
  {
    "path": "portia_server/portia_api/utils/extract.py",
    "content": "import logging\n\nfrom twisted.internet import defer\nfrom twisted.web.client import getPage\n\nfrom scrapy import Request\nfrom scrapy.http import HtmlResponse\nfrom scrapy.utils.misc import arg_to_iter\n\nfrom crochet import setup, wait_for, TimeoutError\nsetup()\n\n\nclass FetchError(Exception):\n    status = 400\n\n    def __init__(self, errors):\n        for error in errors:\n            print(vars(error))\n        self.errors = errors\n        self.message = str(self)\n\n    def __str__(self):\n        return '\\n'.join(e.getErrorMessage() for e in self.errors)\n\n\ndef get_page(times, url):\n    errors = []\n    deferred = defer.Deferred()\n\n    def run():\n        d = getPage(url)\n        d.addCallbacks(lambda html: deferred.callback((url, html)), error)\n\n    def error(error):\n        errors.append(error)\n        retry = True if len(errors) < times else False\n        logging.warn('Failed to get %s %d times, %s', url, len(errors),\n                     'retrying' if retry else 'stop')\n        run() if retry else deferred.errback((url, errors))\n    run()\n    return deferred\n\n\ndef _load_urls(urls):\n    deferreds = []\n    for url in urls:\n        deferreds.append(get_page(3, url.encode('utf-8')))\n    return defer.DeferredList(deferreds)\n\n\n@wait_for(timeout=50)\ndef load_urls(urls):\n    return _load_urls(urls)\n\n\nclass Pages(object):\n    def __init__(self, urls, spider):\n        if hasattr(urls, 'get'):\n            urls = urls.get('urls', [])\n        if isinstance(urls, dict):\n            self.urls = urls.items()\n        else:\n            self.urls = urls\n        self.spider = spider\n\n    def fetch(self):\n        try:\n            responses = load_urls(self.urls)\n        except TimeoutError:\n            raise FetchError(['Requests timed out, try loading fewer urls'])\n        results, errors = [], []\n        for success, result in responses:\n            if not success:\n                errors.append(result.value[1][-1])\n            else:\n                results.extend(arg_to_iter(self.process(*result)))\n        if errors and not results:\n            raise FetchError(errors)\n        return results\n\n    def process(self, url, page):\n        return HtmlResponse(url, body=page, request=Request(url))\n\n    def extract_items(self):\n        responses = self.fetch()\n        items = []\n        for response in responses:\n            page_key = response.meta.get('page_key') or response.url\n            item = {'key': page_key, 'items': None, 'templates': None}\n            extracted_items = [dict(i) for i in self.spider.parse(response)\n                               if not isinstance(i, Request)]\n            if extracted_items:\n                item['items'] = extracted_items\n                item['templates'] = [i['_template'] for i in extracted_items\n                                     if i.get('_template')]\n                items.append(item)\n        return items\n"
  },
  {
    "path": "portia_server/portia_api/utils/projects.py",
    "content": "def unique_name(base_name, disallow=(), initial_suffix=''):\n    disallow = set(disallow)\n    suffix = initial_suffix\n    while True:\n        name = u'{}{}'.format(base_name, suffix)\n        if name not in disallow:\n            break\n        try:\n            suffix += 1\n        except TypeError:\n            suffix = 1\n    return name\n"
  },
  {
    "path": "portia_server/portia_api/utils/spiders.py",
    "content": "import json\n\nfrom scrapy.settings import Settings\nfrom slybot.spider import IblSpider\n\n\ndef load_spider_data(model):\n    storage = model.storage\n    items = json.load(storage.open_with_default('items.json', {}))\n    extractors = json.load(storage.open_with_default('extractors.json', {}))\n    spider = json.loads(model.dumps())\n    spider['templates'] = []\n    samples = []\n    for sample in model.samples:\n        json_sample = json.loads(sample.dumps())\n        default = u'<html></html>'\n        for key in ('original_body', 'rendered_body'):\n            try:\n                html = getattr(sample, key).html\n                assert html\n                json_sample[key] = html\n            except (IOError, AttributeError, AssertionError):\n                json_sample[key] = default\n            else:\n                default = json_sample[key]\n        samples.append(json_sample)\n    spider['templates'] = samples\n    return model.id, spider, items, extractors\n\n\ndef load_spider(model):\n    name, spider, items, extractors = load_spider_data(model)\n    return IblSpider(name, spider, items, extractors, Settings())\n"
  },
  {
    "path": "portia_server/portia_orm/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_orm/apps.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.apps import AppConfig\n\n\nclass PortiaOrmConfig(AppConfig):\n    name = 'portia_orm'\n"
  },
  {
    "path": "portia_server/portia_orm/base.py",
    "content": "from collections import OrderedDict\nfrom itertools import chain\nimport errno\nimport json\nimport re\n\nfrom toposort import toposort_flatten\n\nfrom storage.backends import ContentFile\nfrom .collection import ModelCollection\nfrom .datastore import shared_data\nfrom .deletion import Collector\nfrom .exceptions import (ImproperlyConfigured, PathResolutionError,\n                         ValidationError)\nfrom .fields import Field\nfrom .registry import models, get_polymorphic_model\nfrom .relationships import BaseRelationship\nfrom .serializers import FileSerializer\nfrom .snapshots import ModelSnapshots\nfrom .utils import (cached_property, class_property, short_guid, unspecified,\n                    AttributeDict)\n\n__all__ = [\n    'Model',\n]\n\n\nAUTO_PK = object()\n\n\nclass ModelOpts(object):\n    \"\"\"Meta options for Models.\"\"\"\n    def __init__(self, meta, model):\n        self.path = getattr(meta, 'path', None)\n        if self.path is not None and not isinstance(self.path, str):\n            raise ValueError(\"'path' option must be a string or None.\")\n        self.owner = getattr(meta, 'owner', False)\n        if self.owner is not False and not isinstance(self.owner, str):\n            raise ValueError(\"'owner' option must be a string or False.\")\n        if self.owner and not isinstance(model._fields.get(self.owner),\n                                         BaseRelationship):\n            raise ValueError(\"'owner' option must be a relationship name.\")\n        self.polymorphic = getattr(meta, 'polymorphic', False)\n        if not isinstance(self.polymorphic, (bool, str)):\n            raise ValueError(\n                \"'polymorphic' option must be a string or boolean.\")\n        self.initialize_boolean('raw', meta)\n        self.initialize_boolean('single', meta)\n        self.initialize_boolean('ignore_if_missing', meta)\n\n    def initialize_boolean(self, key, meta):\n        value = getattr(meta, key, False)\n        if not isinstance(value, bool):\n            raise ValueError(\"'{}' option must be a boolean\".format(key))\n        setattr(self, key, value)\n\n\nclass ModelMeta(type):\n    \"\"\"Meta class for models\"\"\"\n    def __new__(mcs, name, bases, attrs):\n        parents = [b for b in bases if isinstance(b, ModelMeta)]\n        if not parents:\n            return super(ModelMeta, mcs).__new__(mcs, name, bases, attrs)\n\n        # check if a model with the same name exists in the registry\n        if name in models:\n            raise ImproperlyConfigured(\n                u\"A Model named '{}' already exists\".format(name))\n\n        meta = attrs.pop('Meta', None)\n        meta_bases = tuple(parent.Meta for parent in parents) + (object,)\n        if meta:\n            meta_bases = (meta,) + meta_bases\n        meta = type('Meta', meta_bases, {})\n\n        primary_key = None\n        fields = {}\n        basic_attrs = {\n            'Meta': meta,\n        }\n        file_schema_attrs = {}\n\n        for attrs in chain([attrs], (getattr(parent, '_class_attrs', {})\n                                     for parent in parents)):\n            for attrname, value in attrs.items():\n                if isinstance(value, BaseRelationship):\n                    fields[attrname] = value\n                elif isinstance(value, Field):\n                    if value.primary_key:\n                        if primary_key:\n                            raise ImproperlyConfigured(\n                                u\"Model '{}' declared with more than one primary \"\n                                u\"key\".format(name))\n                        primary_key = attrname\n                    fields[attrname] = value\n                # move decorated marshmallow methods to the file schema\n                elif hasattr(value, '__marshmallow_tags__'):\n                    file_schema_attrs[attrname] = value\n                else:\n                    basic_attrs[attrname] = value\n\n        if fields and not primary_key:\n            raise ImproperlyConfigured(\n                u\"Model '{}' declared with no primary key\".format(name))\n\n        class_attrs = {}\n        class_attrs.update(fields)\n        class_attrs.update(file_schema_attrs)\n        class_attrs.update(basic_attrs)\n        cls = super(ModelMeta, mcs).__new__(mcs, name, bases, basic_attrs)\n\n        cls._class_attrs = class_attrs\n        cls._pk_field = primary_key\n        cls._fields = fields\n        cls._file_fields = file_fields = {k for k, f in fields.items()\n                                          if not f.ignore_in_file}\n        cls._field_names = sorted(k for k, f in fields.items()\n                                  if isinstance(f, Field))\n        cls._relationship_names = sorted(k for k, f in fields.items()\n                                         if isinstance(f, BaseRelationship))\n        cls.opts = ModelOpts(meta, cls)\n        cls.collection = type(name + 'Collection', (ModelCollection,), {\n            'model': cls\n        })\n\n        for attrname, field in fields.items():\n            if attrname in file_fields:\n                file_schema_attrs[attrname] = field\n            field.contribute_to_class(cls, attrname)\n\n        # compute an safe order for setting fields during construction\n        try:\n            cls._ordered_fields = toposort_flatten({\n                attrname: field.get_dependencies(cls)\n                for attrname, field in fields.items()\n            })\n        except ValueError as e:\n            raise ImproperlyConfigured(e.message)\n\n        # build a marshmallow schema for the filesystem format\n        file_schema_attrs['Meta'] = type('Meta', (meta,), {\n            'model': cls\n        })\n        cls.file_schema = type(cls.__name__ + 'FileSerializer',\n                               (FileSerializer,), file_schema_attrs)\n\n        # add new model to registry by name\n        models[name] = cls\n        return cls\n\n\nclass Model(object, metaclass=ModelMeta):\n    _own_attributes = {'data_key', 'storage', 'snapshots', '_initializing'}\n\n    # set by metaclass\n    _fields = None\n    _field_names = None\n    _relationship_names = None\n    _ordered_fields = None\n    _file_fields = None\n    _pk_field = None\n    collection = None\n    file_schema = None\n    opts = None\n\n    snapshot_class = ModelSnapshots\n\n    class Meta:\n        pass\n\n    def __init__(self, storage=None, snapshots=None, _data_key=unspecified,\n                 **kwargs):\n        if _data_key is unspecified:\n            if (self._pk_field not in kwargs or\n                    (kwargs[self._pk_field] is AUTO_PK and storage is None)):\n                raise TypeError(\n                    u\"Model '{}' must be initialized with a value for the '{}' \"\n                    u\"field\".format(self.__class__.__name__, self._pk_field))\n\n            pk = kwargs[self._pk_field]\n            if pk is AUTO_PK:\n                pk = kwargs[self._pk_field] = self.generate_pk(storage)\n\n            _data_key = self.__class__, pk\n\n        self.data_key = _data_key\n        self.storage = storage\n        self.snapshots = snapshots or ModelSnapshots.default_snapshots\n\n        for attrname in kwargs.keys():\n            if attrname not in self._fields:\n                raise TypeError(\n                    u\"'{}' is not a field of model '{}'\".format(\n                        attrname, self.__class__.__name__))\n\n        errors = {}\n        self._initializing = set(kwargs.keys())\n        for attrname in self._ordered_fields:\n            if attrname in kwargs:\n                try:\n                    setattr(self, attrname, kwargs[attrname])\n                except ValidationError as err:\n                    errors[attrname] = err.messages\n        self._initializing.clear()\n\n        if errors:\n            raise ValidationError(errors)\n\n    def __eq__(self, other):\n        if isinstance(other, Model):\n            return other.data_key == self.data_key\n        if isinstance(other, tuple):\n            self_class, self_pk = self.data_key\n            other_class, other_pk = other\n            return self_pk == other_pk and (\n                issubclass(self_class, other_class) or\n                issubclass(other_class, self_class))\n        return False\n\n    def __hash__(self):\n        return hash(self.data_key)\n\n    def __ne__(self, other):\n        return not self.__eq__(other)\n\n    def __repr__(self, *field_names):\n        if field_names:\n            if self._pk_field not in field_names:\n                field_names = (self._pk_field,) + field_names\n        else:\n            field_names = [k for k, v in self._fields.items()\n                           if k != self._pk_field and isinstance(v, Field)]\n            field_names.sort()\n            field_names.insert(0, self._pk_field)\n\n        data_store = self.data_store\n        fields = OrderedDict()\n        for field_name in field_names:\n            try:\n                fields[field_name] = data_store.get(field_name)\n            except KeyError:\n                pass\n        return u'{}<{}>({})'.format(\n            self.__class__.__name__,\n            self.snapshots[0],\n            u', '.join(u'{}={!r}'.format(k, v) for k, v in fields.items()))\n\n    def __setattr__(self, key, value):\n        if key not in self._own_attributes and key not in self._fields:\n            raise TypeError(\n                u\"'{}' is not a field of model '{}'\".format(\n                    key, self.__class__.__name__))\n        super(Model, self).__setattr__(key, value)\n\n    def with_snapshots(self, snapshots=None):\n        if self.snapshots == (snapshots or ModelSnapshots.default_snapshots):\n            return self\n        copy = self.__class__(self.storage, snapshots, _data_key=self.data_key)\n        if copy.data_store is not self.data_store:\n            copy.data_store.copy_from(self.data_store)\n        return copy\n\n    # share data between instances of the same model, to simplify relationships\n    @class_property\n    def shared_data_store(cls):\n        return shared_data.data_store\n\n    # keeps track of files that are loading\n    @class_property\n    def loaded(cls):\n        return shared_data.loaded\n\n    @class_property\n    def _file_model(cls):\n        \"\"\"Find the top-level model stored in this model's path.\"\"\"\n        model = getattr(cls, '_cached_file_model', unspecified)\n        if model is not unspecified:\n            return model\n\n        path = cls.opts.path\n        model = cls\n        while True:\n            if model.opts.owner:\n                try:\n                    owner = model._fields[model.opts.owner].model\n                    path = re.sub(r'{{self.{}(\\.|}})'.format(model.opts.owner),\n                                  '{self\\\\1', path)\n                    if owner is not model and owner.opts.path == path:\n                        model = owner\n                        continue\n                except KeyError:\n                    pass\n            cls._cached_file_model = model\n            return model\n\n    @classmethod\n    def generate_pk(cls, storage):\n        data_stores = cls.shared_data_store.get(storage, {})\n        pk = short_guid()\n        while (cls, pk) in data_stores:\n            pk = short_guid()\n        return pk\n\n    @property\n    def pk(self):\n        return getattr(self, self._pk_field)\n\n    @cached_property\n    def data_store(self):\n        if self.storage:\n            return self.shared_data_store.setdefault(\n                self.storage, {}).setdefault(\n                self.data_key, self.snapshot_class())\n        return self.shared_data_store.setdefault(self, self.snapshot_class())\n\n    def has_data(self, key):\n        try:\n            self.get_data(key)\n        except AttributeError:\n            return False\n        return True\n\n    def get_data(self, key, default=unspecified):\n        self.resolve_attributes(key)\n        try:\n            return self.data_store.get(key, snapshots=self.snapshots)\n        except KeyError:\n            pass\n        if default is not unspecified:\n            return default\n        raise AttributeError(\n            u\"'{}' object has no attribute '{}'\".format(\n                self.__class__.__name__, key))\n\n    def set_data(self, key, value):\n        self.data_store.set(key, value, snapshot=self.snapshots[0])\n\n    def dump(self, state='working'):\n        try:\n            index = ModelSnapshots.default_snapshots.index(state)\n        except ValueError:\n            raise ValueError(u\"'{}' is not a valid state\".format(state))\n\n        context = {\n            'snapshots': ModelSnapshots.default_snapshots[index:]\n        }\n        return self.file_schema(context=context).dump(self).data\n\n    def dumps(self, state='working'):\n        return json.dumps(self.dump(state=state), sort_keys=False, indent=4,\n                          separators=(', ', ': '))\n\n    def rollback(self):\n        self.data_store.clear_snapshot('working')\n\n    def save(self, only=None):\n        if self.storage is None:\n            return\n\n        # make sure all attributes have been loaded before saving, we need them\n        # to correctly detect path changes and to prevent data loss\n        self.resolve_attributes(snapshots=('committed',))\n        # stage changes to the selected fields in the model and across\n        # relationships\n        self._stage_changes(only)\n        # now that all changes are staged we can save from the staged and\n        # committed snapshots to get a consistent save of the selected fields\n        self._commit_changes()\n\n    def _stage_changes(self, only=None):\n        store = self.data_store\n        dirty = store.dirty_fields('working', ('committed',))\n        if only is not None:\n            dirty = dirty.intersection(only)\n        if dirty:\n            store.update_snapshot('staged', ('working',), fields=dirty)\n        for model, field in self._staged_model_references():\n            related_store = model.data_store\n            related_field = model._fields[field]\n            if related_field.only is None:\n                related_dirty = dirty\n            elif isinstance(related_field.only, str):\n                related_dirty = dirty.intersection((related_field.only,))\n            else:\n                related_dirty = dirty.intersection(related_field.only)\n            if related_dirty or field in related_store.dirty_fields(\n                    'working', ('committed',)):\n                related_store.update_snapshot(\n                    'staged', ('working', 'committed'), fields=[field])\n\n    def _commit_changes(self, saved_paths=None, deleted_paths=None):\n        if saved_paths is None:\n            saved_paths = set()\n        if deleted_paths is None:\n            deleted_paths = set()\n\n        for model in chain([self], (model for model, _\n                                    in self._staged_model_references())):\n            store = model.data_store\n            dirty = (\n                model._file_fields.intersection(store['staged'].keys()) or\n                'project' in store.dirty_fields('working', ('committed',))\n            )\n            path = model.storage_path(model, snapshots=('staged', 'committed'))\n            old_path = model.storage_path(model,\n                                          snapshots=('committed', 'staged'))\n            if dirty or old_path != path:\n                if path not in saved_paths and path not in deleted_paths:\n                    to_save = self._get_object_to_dump(\n                        model, parent_snapshots=('staged', 'committed'))\n                    model.storage.save(path, ContentFile(\n                        to_save.dumps(state='staged'), path))\n                    saved_paths.add(path)\n                if old_path != path and old_path not in deleted_paths:\n                    try:\n                        model.storage.delete(old_path)\n                    except IOError as ex:\n                        # Assume missing files are already deleted\n                        if ex.errno != errno.ENOENT:\n                            raise\n                    deleted_paths.add(old_path)\n        for model in chain([self], (model for model, _\n                                    in self._staged_model_references())):\n            store = model.data_store\n            dirty = set(store['staged'].keys())\n            if dirty:\n                store.update_snapshot('committed', ('staged',), fields=dirty)\n                store.clear_snapshot('staged')\n                store.clear_snapshot('working', fields=dirty.intersection(\n                    store['working'].keys()))\n\n    def _get_object_to_dump(self, model, parent_snapshots):\n        child = model\n        while child.opts.owner:\n            parent = child._get_parent_object(parent_snapshots)\n            if isinstance(parent, ModelCollection):\n                parent = next(iter(parent))\n            if parent is None:\n                return\n            to_save = getattr(\n                parent.with_snapshots(('staged', 'committed')),\n                child._fields[child.opts.owner].related_name)\n            child = parent\n        if child.__class__ is model._file_model:\n            to_save = child\n        return to_save\n\n    def _get_parent_object(self, parent_snapshots):\n        parent_field = self.opts.owner\n        return getattr(self.with_snapshots(parent_snapshots), parent_field)\n\n    def _staged_model_references(self, load_relationships=False):\n        for name, field in self._fields.items():\n            if isinstance(field, BaseRelationship):\n                try:\n                    if load_relationships:\n                        value = getattr(self, name)\n                    else:\n                        value = self.data_store.get(\n                            name, ('staged', 'committed'))\n                except (AttributeError, KeyError, PathResolutionError):\n                    continue\n                if value is None:\n                    continue\n                if not isinstance(value, ModelCollection):\n                    value = [value]\n                for related in value:\n                    related_name = field.related_name\n                    yield related, related_name\n\n    def delete(self):\n        if self.storage is None:\n            return\n\n        self.resolve_attributes(snapshots=('committed',))\n        collector = Collector()\n        self._stage_delete(collector=collector)\n        self._commit_delete(collector=collector)\n        return collector.delete\n\n    def _stage_delete(self, collector):\n        if self in collector:\n            return\n        collector.add(self)\n        collector.delete_instance(self)\n\n        for model, field in self._staged_model_references(\n                load_relationships=True):\n            if model is None:\n                continue\n            related_field = model._fields[field]\n            related_field.on_delete(\n                collector, model.with_snapshots(('staged', 'committed')),\n                field, self)\n\n    def _commit_delete(self, collector, saved_paths=None, deleted_paths=None):\n        if saved_paths is None:\n            saved_paths = set()\n        if deleted_paths is None:\n            deleted_paths = set()\n\n        for model, fields in collector.save.items():\n            model.resolve_attributes(snapshots=('committed',))\n            model._stage_changes(fields)\n\n        for model in collector.delete:\n            path = model.storage_path(model, snapshots=('committed', 'staged',\n                                                        'working'))\n            if model.opts.owner:\n                if path and path not in saved_paths and path not in deleted_paths:\n                    to_save = self._get_object_to_dump(\n                        model, parent_snapshots=('committed',))\n                    model.storage.save(path, ContentFile(\n                        to_save.dumps(state='staged'), path))\n                    saved_paths.add(path)\n            else:\n                if path not in deleted_paths:\n                    try:\n                        model.storage.delete(path)\n                    except IOError as ex:\n                        # Assume missing files are already deleted\n                        if ex.errno != errno.ENOENT:\n                            raise\n                    deleted_paths.add(path)\n\n        for model, fields in collector.save.items():\n            model._commit_changes(saved_paths, deleted_paths)\n\n        for model in collector.delete:\n            store = model.data_store\n            store.update_snapshot('working', ('working', 'staged', 'committed'))\n            store.clear_snapshot('staged')\n            store.clear_snapshot('committed')\n\n    @classmethod\n    def load(cls, storage, instance=None, **kwargs):\n        if storage is None:\n            return\n\n        path = cls.storage_path(instance or kwargs,\n                                snapshots=('committed', 'working'))\n        if not path:\n            return\n\n        many = bool(cls.opts.owner) and not cls.opts.single\n        if instance and many:\n            try:\n                instance.data_store.get(instance._pk_field)\n            except KeyError:\n                return\n\n        if path in cls.loaded.setdefault(storage, set()):\n            return\n        cls.loaded[storage].add(path)\n\n        if not storage.exists(path):\n            if many:\n                return cls.collection()\n            return instance  # may be None\n\n        file_data = storage.open(path).read()\n        if not cls.opts.raw:\n            try:\n                file_data = file_data.decode('utf-8')\n            except AttributeError:\n                pass\n            file_data = json.loads(file_data,\n                                   object_pairs_hook=OrderedDict)\n\n        if cls.opts.polymorphic:\n            if not many:\n                file_data = [file_data]\n            collection_type = cls.__bases__[0]\n            result = collection_type.collection()\n            for polymorphic_data in file_data:\n                polymorphic_type = get_polymorphic_model(polymorphic_data)\n                polymorphic_schema = polymorphic_type._file_model.file_schema\n                result.append(\n                    polymorphic_schema(\n                        context={'storage': storage}).load(\n                            polymorphic_data).data)\n            if len(result) == 1 and not many:\n                result = result[0]\n            return result\n\n        file_schema = cls._file_model.file_schema\n        result = file_schema(\n            context={'storage': storage, 'path': path}).load(\n                file_data, many=many).data\n        return result\n\n    @classmethod\n    def storage_path(cls, data, snapshots=None):\n        if isinstance(data, cls):\n            data = data.data_store.accessor(snapshots)\n        else:\n            data = AttributeDict(data)\n        try:\n            path = (cls.opts.path or u'').format(self=data)\n        except AttributeError as e:\n            if cls.opts.ignore_if_missing:\n                return\n            raise PathResolutionError(\n                u\"Could not resolve file path for model '{}':\\n\"\n                u\"    {}\".format(cls.__name__, e))\n        return path or None\n\n    def resolve_attributes(self, *attributes, **kwargs):\n        if not self.storage:\n            return\n\n        file_fields = self._file_fields\n        if not attributes:\n            attributes = file_fields\n\n        snapshots = kwargs.get('snapshots')\n        if snapshots is None:\n            snapshots = self.snapshots\n        data = self.data_store.accessor(snapshots)\n        try:\n            for attribute in attributes:\n                if (attribute in file_fields and\n                        attribute not in self._initializing and\n                        not hasattr(data, attribute)):\n                    self.load(self.storage, instance=self)\n                    break\n        except PathResolutionError:\n            pass\n\n    def copy(self, new_id=None, storage=None):\n        if new_id is None:\n            new_id = short_guid()\n        field_names = {field: getattr(self, field)\n                       for field in self._field_names if field != 'id'}\n        field_names.update({\n            'id': new_id,\n            'storage': storage,\n        })\n        return self.__class__(**field_names)\n"
  },
  {
    "path": "portia_server/portia_orm/collection.py",
    "content": "import json\n\nfrom collections import Sequence\n\nfrom .exceptions import ImproperlyConfigured, ValidationError\nfrom .snapshots import ModelSnapshots\nfrom .utils import (\n    cached_property, unspecified, validate_type, OrderedIndexedTransformDict\n)\n\n\n__all__ = [\n    'set_related',\n    'clear_related',\n    'FieldCollection',\n    'ModelCollection',\n]\n\n\ndef set_related(model, relationship_name, related):\n    current_related_value = getattr(model, relationship_name, None)\n    if isinstance(current_related_value, ModelCollection):\n        current_related_value.add(related)\n    else:\n        setattr(model, relationship_name, related)\n\n\ndef clear_related(model, relationship_name, related):\n    current_related_value = getattr(model, relationship_name, None)\n    if isinstance(current_related_value, ModelCollection):\n        current_related_value.discard(related)\n    elif current_related_value == related:\n        setattr(model, relationship_name, None)\n\n\nclass OwnedList(list):\n    def __init__(self, iterable=None, owner=None, attrname=None,\n                 snapshots=None):\n        super(OwnedList, self).__init__()\n\n        def get_key(model):\n            try:\n                assert len(model) == 2\n                return tuple(model)\n            except (AssertionError, TypeError):\n                pass\n            try:\n                return model.data_key\n            except AttributeError:\n                pass\n            if isinstance(model, int):\n                model = next((m for m, v in self.cache._data.items()\n                              if v == model), None)\n                if model is not None:\n                    return get_key(model)\n            elif isinstance(model, str):\n                return (self.__class__, model)\n            try:\n                return ('start-url', (model['type'], model['url']))\n            except (TypeError, KeyError):\n                pass\n            raise TypeError('invalid key: {!r}'.format(model))\n        self.cache = OrderedIndexedTransformDict(get_key)\n        self.owner = owner and owner.with_snapshots()\n        self.attrname = attrname\n        self.snapshots = snapshots or ModelSnapshots.default_snapshots\n        if (owner is None) != (attrname is None):\n            raise ImproperlyConfigured(\n                u\"To create a {} connected to an instance both 'instance' and \"\n                u\"'attrname' must be provided\".format(\n                    self.__class__.__name__))\n        if iterable:\n            self.extend(iterable)\n\n    @cached_property\n    def field(self):\n        return self.owner._fields[self.attrname]\n\n    def with_snapshots(self, snapshots=None):\n        if self.snapshots == (snapshots or ModelSnapshots.default_snapshots):\n            return self\n        copy = self.__class__(owner=self.owner, attrname=self.attrname,\n                              snapshots=snapshots)\n        super(OwnedList, copy).extend(self)\n        return copy\n\n    def __setitem__(self, index, value):\n        is_slice = isinstance(index, slice)\n        cache = self.cache\n        if is_slice:\n            try:\n                value = list(value)\n            except TypeError:\n                TypeError(u\"can only assign an iterable\")\n            for v in value:\n                self._validate(v)\n                if v in cache:\n                    raise ValueError(\n                        u\"Collection already contains object {}\".format(v))\n        else:\n            self._validate(value)\n        try:\n            current = self[index]\n            changed = value == current\n        except IndexError:\n            current = None\n            changed = True\n        super(OwnedList, self).__setitem__(index, value)\n        if is_slice:\n            self._populate_cache()\n        else:\n            if current is not None:\n                key = current\n            else:\n                key = next((k for k, v in cache.items() if v == index), None)\n            if key is not None:\n                cache.replace(key, value)\n\n        if changed:\n            self._update_owner_data()\n\n    def __delitem__(self, index):\n        super(OwnedList, self).__delitem__(index)\n        del self.cache[index]\n        self._update_owner_data()\n\n    def __getslice__(self, i, j):\n        return self.__getitem__(slice(i, j))\n\n    def __setslice__(self, i, j, value):\n        self.__setitem__(slice(i, j), value)\n\n    def __delslice__(self, i, j):\n        self.__delitem__(slice(i, j))\n\n    def __contains__(self, key):\n        if key in self.cache:\n            return True\n        if len(self.cache) != len(self):\n            try:\n                if self.index(key) > -1:\n                    return True\n            except ValueError:\n                pass\n        return False\n\n    def append(self, value):\n        self._validate(value)\n        super(OwnedList, self).append(value)\n        self.cache[value] = len(self.cache) + 1\n        self._update_owner_data()\n\n    def extend(self, iterable):\n        for value in iterable:\n            self.append(value)\n\n    def insert(self, index, value):\n        self._validate(value)\n        super(OwnedList, self).insert(index, value)\n        self.cache.insert(index, value)\n        self._update_owner_data()\n\n    def remove(self, value):\n        self._validate(value)\n        super(OwnedList, self).remove(value)\n        self.cache.pop(value, None)\n        self._update_owner_data()\n\n    def pop(self, index=-1):\n        value = super(OwnedList, self).pop(index)\n        self.cache.pop(value)\n        self._update_owner_data()\n        return value\n\n    def index(self, value, start=None, stop=None):\n        try:\n            return self.cache[value]\n        except (ValueError, KeyError):\n            if len(self.cache) != len(self):\n                self._populate_cache()\n                if len(self) == len(self.cache):\n                    return self.index(value)\n            try:\n                # Try to find matches by checking eq instead of by key\n                return super().index(value)\n            except ValueError:\n                raise ValueError('{!r} is not in {}'.format(\n                    value, self.__class__.__name__))\n\n    def clear(self):\n        del self[:]\n        self.cache.clear()\n\n    def _validate(self, value):\n        raise NotImplementedError\n\n    def _update_owner_data(self):\n        if self.owner:\n            owner = self.owner.with_snapshots(self.snapshots)\n            owner.set_data(self.attrname, self)\n\n    def _populate_cache(self):\n        self.cache.clear()\n        self.cache.update((k, i) for i, k in enumerate(self))\n\n\nclass FieldCollection(OwnedList):\n    def _validate(self, value):\n        try:\n            self.field.deserialize(value, attr=self.attrname, data=self.owner)\n        except ValidationError:\n            return False\n        return True\n\n\nclass ModelCollection(OwnedList):\n    \"\"\"\n    A collection of models\n\n    This is an mutable ordered set that can be indexed by the model's primary\n    key.\n    \"\"\"\n    model = None\n\n    @cached_property\n    def related_name(self):\n        if self.owner is None:\n            return None\n        return self.owner._fields[self.attrname].related_name\n\n    def __getitem__(self, key):\n        try:\n            return super(ModelCollection, self).__getitem__(key)\n        except TypeError:\n            pass\n        index = self._key_to_index(key)\n        try:\n            return super(ModelCollection, self).__getitem__(index)\n        except TypeError:\n            if not isinstance(key, (int, slice)):\n                raise KeyError(key)\n            raise\n\n    def __setitem__(self, key, value):\n        index = self._key_to_index(key)\n        current_value = self._get_index(index)\n        if isinstance(index, slice):\n            super(ModelCollection, self).__setitem__(\n                index, (item.with_snapshots() for item in value))\n        else:\n            super(ModelCollection, self).__setitem__(\n                index, value.with_snapshots())\n        if current_value != value:\n            self._clear_related(current_value)\n            self._set_related(value)\n\n    def __delitem__(self, key):\n        index = self._key_to_index(key)\n        current_value = self._get_index(index)\n        super(ModelCollection, self).__delitem__(index)\n        self._clear_related(current_value)\n\n    def __repr__(self):\n        content_repr = super(ModelCollection, self).__repr__()\n        if self.owner:\n            return u'{}<{}>(owner={!r}){}'.format(\n                self.__class__.__name__,\n                self.snapshots[0],\n                self.owner,\n                content_repr)\n        return u'{}<{}>{}'.format(\n            self.__class__.__name__,\n            self.snapshots[0],\n            content_repr)\n\n    def append(self, obj):\n        if obj in self:\n            raise ValueError(\n                u\"Collection already contains object {}\".format(obj))\n        super(ModelCollection, self).append(obj.with_snapshots())\n        self._set_related(obj)\n\n    def add(self, obj):\n        try:\n            self.append(obj)\n        except ValueError:\n            self[obj] = obj\n\n    def extend(self, iterable):\n        for obj in iterable:\n            self.append(obj)\n\n    def update(self, iterable):\n        for obj in iterable:\n            self.add(obj)\n\n    def insert(self, index, obj):\n        if obj in self:\n            raise ValueError(\n                u\"Collection already contains object {}\".format(obj))\n        super(ModelCollection, self).insert(index, obj.with_snapshots())\n        self._set_related(obj)\n\n    def remove(self, obj):\n        super(ModelCollection, self).remove(obj)\n        self._clear_related(obj)\n\n    def discard(self, obj):\n        # May still raise a ValidationError for an invalid obj\n        try:\n            self.remove(obj)\n        except ValueError:\n            pass\n\n    def pop(self, key=unspecified):\n        index = self._key_to_index(key)\n        if index is unspecified:\n            index = -1\n        try:\n            value = super(ModelCollection, self).pop(index)\n        except IndexError:\n            raise IndexError(u\"index not in collection\")\n        except TypeError:\n            if not isinstance(key, (int, slice)):\n                raise KeyError(key)\n            raise\n        self._clear_related(value)\n        return value\n\n    def get(self, key, default=None):\n        index = self._key_to_index(key)\n        return self._get_index(index, default)\n\n    def keys(self):\n        for model in self:\n            yield model.pk\n\n    def dump(self, state='working'):\n        try:\n            index = ModelSnapshots.default_snapshots.index(state)\n        except ValueError:\n            raise ValueError(u\"'{}' is not a valid state\".format(state))\n\n        context = {\n            'snapshots': ModelSnapshots.default_snapshots[index:]\n        }\n        if self.model.opts.polymorphic:\n            return [instance.__class__.file_schema(\n                        context=context).dump(instance).data\n                    for instance in self]\n        return self.model.file_schema(\n            many=True, context=context).dump(self).data\n\n    def dumps(self, state='working'):\n        return json.dumps(self.dump(state=state), sort_keys=False, indent=4,\n                          separators=(', ', ': '))\n\n    def _validate(self, value):\n        validate_type(value, self.model)\n\n    def _get_index(self, index, default=None):\n        try:\n            return super(ModelCollection, self).__getitem__(index)\n        except (IndexError, TypeError):\n            return default\n\n    def _key_to_index(self, key):\n        \"\"\"\n        Try to find the index at which the key resides.\n        We're using index here instead of a mapping, trading efficiency for\n        avoiding the added complexity of managing changes to the primary_key.\n\n        May return an invalid index.\n        \"\"\"\n        if not isinstance(key, slice):\n            try:\n                if not isinstance(key, self.model):\n                    return self.index((self.model, key))\n                return self.index(key)\n            except ValueError:\n                pass\n        return key\n\n    def _set_related(self, related):\n        if related and self.owner:\n            if not isinstance(related, list):\n                related = [related]\n            for r in (r.with_snapshots(self.snapshots) for r in related):\n                set_related(r, self.related_name, self.owner)\n\n    def _clear_related(self, related):\n        if related and self.owner:\n            if not isinstance(related, list):\n                related = [related]\n            for r in (r.with_snapshots(self.snapshots) for r in related):\n                clear_related(r, self.related_name, self.owner)\n\n\nclass ListDescriptor(object):\n    def __init__(self, attrname):\n        self.attrname = attrname\n\n    def __get__(self, instance, instance_type=None):\n        if instance is None:\n            return self\n        try:\n            collection = instance.get_data(self.attrname)\n        except AttributeError:\n            collection = self.new_collection(instance)\n            instance.data_store.set(self.attrname, collection, 'committed')\n        return collection.with_snapshots(instance.snapshots)\n\n    def __set__(self, instance, values):\n        if not isinstance(values, Sequence):\n            raise ValueError(\n                \"You can only assign sequences to '{}'\".format(self.attrname))\n        collection = self.__get__(instance)\n        for value in values:\n            collection._validate(value)\n        if collection != values:\n            self.replace_collection(collection, values)\n\n    def new_collection(self, instance):\n        return FieldCollection(owner=instance, attrname=self.attrname,\n                               snapshots=('committed',))\n\n    def replace_collection(self, collection, values):\n        del collection[:]\n        collection.extend(values)\n"
  },
  {
    "path": "portia_server/portia_orm/datastore.py",
    "content": "from contextlib import contextmanager\nfrom threading import local\nfrom weakref import WeakKeyDictionary\n\n\nclass DataStoreHandler(local):\n    @property\n    def data_store(self):\n        try:\n            return self._data_store\n        except AttributeError:\n            raise RuntimeError(\n                \"No data store available, you may need to wrap your code in \"\n                \"the portia_orm.datastore.data_store_context context manager.\")\n\n    @data_store.setter\n    def data_store(self, value):\n        self._data_store = value\n\n    @data_store.deleter\n    def data_store(self):\n        delattr(self, '_data_store')\n\n    @property\n    def loaded(self):\n        try:\n            return self._loaded\n        except AttributeError:\n            raise RuntimeError(\n                \"No data store available, you may need to wrap your code in \"\n                \"the portia_orm.datastore.data_store_context context manager.\")\n\n    @loaded.setter\n    def loaded(self, value):\n        self._loaded = value\n\n    @loaded.deleter\n    def loaded(self):\n        delattr(self, '_loaded')\n\n\n@contextmanager\ndef data_store_context():\n    shared_data.data_store = WeakKeyDictionary()\n    shared_data.loaded = WeakKeyDictionary()\n    yield\n    del shared_data.data_store\n    del shared_data.loaded\n\n\nshared_data = DataStoreHandler()\n"
  },
  {
    "path": "portia_server/portia_orm/decorators.py",
    "content": "from marshmallow.decorators import (validates, validates_schema,\n                                    pre_dump, post_dump, pre_load, post_load)\n\n__all__ = [\n    'validates',\n    'validates_schema',\n    'pre_dump',\n    'post_dump',\n    'pre_load',\n    'post_load',\n]\n"
  },
  {
    "path": "portia_server/portia_orm/deletion.py",
    "content": "from collections import OrderedDict\n\nfrom .exceptions import ProtectedError\nfrom .relationships import HasMany\n\n__all__ = [\n    'Collector',\n    'CASCADE',\n    'CLEAR',\n    'PROTECT'\n]\n\n\nclass Collector(set):\n    def __init__(self):\n        super(Collector, self).__init__()\n        self.save = OrderedDict()\n        self.delete = []\n\n    def save_instance(self, instance, *fields):\n        if instance in self.delete:\n            return\n        elif instance in self.save:\n            self.save[instance].update(fields)\n        else:\n            self.save[instance] = set(fields)\n\n    def delete_instance(self, instance):\n        if instance in self.delete:\n            return\n        if instance in self.save:\n            del self.save[instance]\n        self.delete.append(instance)\n\n\ndef CASCADE(collector, instance, field_name, related_instance):\n    field = instance._fields[field_name]\n    if isinstance(field, HasMany):\n        getattr(instance, field_name).discard(related_instance)\n    else:\n        setattr(instance, field_name, None)\n    instance._stage_delete(collector)\n\n\ndef CLEAR(collector, instance, field_name, related_instance):\n    field = instance._fields[field_name]\n    if isinstance(field, HasMany):\n        getattr(instance, field_name).discard(related_instance)\n    else:\n        setattr(instance, field_name, None)\n    if not field.ignore_in_file:\n        collector.save_instance(instance, field_name)\n\n\ndef PROTECT(collector, instance, field_name, related_instance):\n    raise ProtectedError(\n        u\"Cannot delete model {} because it is referenced through a \"\n        u\"protected relationship '{}' of model {}\".format(\n            related_instance, field_name, instance))\n"
  },
  {
    "path": "portia_server/portia_orm/exceptions.py",
    "content": "from marshmallow.exceptions import ValidationError\n\n__all__ = [\n    'ImproperlyConfigured',\n    'ValidationError',\n]\n\n\nclass ImproperlyConfigured(Exception):\n    pass\n\n\nclass PathResolutionError(Exception):\n    pass\n\n\nclass ProtectedError(Exception):\n    pass\n"
  },
  {
    "path": "portia_server/portia_orm/fields.py",
    "content": "import re\n\nfrom marshmallow import fields, Schema, validate\nfrom marshmallow.utils import get_value, missing\nfrom six import iteritems, itervalues\n\nfrom .collection import ListDescriptor\nfrom .deletion import CASCADE, CLEAR, PROTECT\nfrom .exceptions import ImproperlyConfigured, ValidationError\nfrom .relationships import BelongsTo, HasMany, HasOne\nfrom .validators import OneOf\n\n__all__ = [\n    'Boolean',\n    'Domain',\n    'Field',\n    'List',\n    'Integer',\n    'Regexp',\n    'String',\n    'Url',\n    'BelongsTo',\n    'HasMany',\n    'HasOne',\n    'StartUrl',\n    'CASCADE',\n    'CLEAR',\n    'PROTECT',\n]\n\n\nclass FieldDescriptor(object):\n    \"\"\"Descriptor for interacting with model fields\"\"\"\n    def __init__(self, attrname, field):\n        self.attrname = attrname\n        self.field = field\n\n    @property\n    def default(self):\n        # may raise an AttributeError\n        if callable(self.field.default):\n            return self.field.default()\n        else:\n            return self.field.default\n\n    def __get__(self, instance, instance_type=None):\n        if instance is None:\n            return self\n        if instance.has_data(self.attrname):\n            return instance.get_data(self.attrname)\n        default = self.default\n        if default is not missing:\n            # if using default set it on the instance, since it may be\n            # mutable\n            instance.set_data(self.attrname, default)\n            return default\n\n        raise AttributeError(\n            u\"'{}' object has no attribute '{}'\".format(\n                instance_type.__name__, self.attrname))\n\n    def __set__(self, instance, value):\n        # validate the value against the field\n        self.field.deserialize(value, attr=self.attrname, data=instance)\n        instance.set_data(self.attrname, value)\n\n\nclass Field(fields.Field):\n    def __init__(self, **kwargs):\n        ignore_in_file = kwargs.pop('ignore_in_file', False)\n        primary_key = kwargs.pop('primary_key', False)\n        if primary_key:\n            kwargs['required'] = True\n        super(Field, self).__init__(**kwargs)\n        self.primary_key = primary_key\n        self.ignore_in_file = ignore_in_file\n\n    def contribute_to_class(self, cls, attrname):\n        setattr(cls, attrname, FieldDescriptor(attrname, self))\n\n    def get_dependencies(self, cls):\n        if self.primary_key:\n            return set()\n        return {cls._pk_field}\n\n    def serialize(self, attr, obj, accessor=None):\n        if self._CHECK_ATTRIBUTE:\n            value = self.get_value(attr, obj, accessor=accessor)\n            self._validate_missing(value)\n            self._validate(value)\n        return super(Field, self).serialize(attr, obj, accessor)\n\n\nclass ValidatedField(fields.ValidatedField, Field):\n    default_error_messages = {\n        'invalid': u\"Invalid value.\",\n    }\n\n    class Validator(validate.Validator):\n        default_message = u\"Invalid value.\"\n\n        def __init__(self, error=None):\n            self.error = error or self.default_message\n\n        def _format_error(self, value):\n            return self.error.format(input=value)\n\n        def fail(self, value):\n            raise ValidationError(self._format_error(value))\n\n        def __call__(self, value):\n            raise NotImplementedError\n\n    validator = Validator\n\n    def __init__(self, *args, **kwargs):\n        super(ValidatedField, self).__init__(*args, **kwargs)\n        self.validators.insert(0, self.validator())\n\n    def _validated(self, value):\n        self._validate(value)\n        return value\n\n\nclass String(fields.String, Field):\n    pass\n\n\nclass Boolean(fields.Boolean, Field):\n    pass\n\n\nclass Integer(fields.Integer, Field):\n    pass\n\n\nclass Url(fields.Url, Field):\n    pass\n\n\nclass Domain(ValidatedField, String):\n    default_error_messages = {\n        'invalid': u\"Not a valid domain.\",\n    }\n\n    class ValidDomain(ValidatedField.Validator):\n        # based on marshmallow's Url validator\n        DOMAIN_REGEX = re.compile(\n            r'^'\n            r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\.)+'\n            r'(?:[A-Z]{2,6}\\.?|[A-Z0-9-]{2,}\\.?)|'  # domain...\n            r'localhost|'  # localhost...\n            r'\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|'  # ...or ipv4\n            r'\\[?[A-F0-9]*:[A-F0-9:]+\\]?)'  # ...or ipv6\n            r'(?::\\d+)?'  # optional port\n            r'$', re.IGNORECASE)\n\n        default_message = u\"Not a valid domain.\"\n\n        def __call__(self, value):\n            if value and self.DOMAIN_REGEX.search(value):\n                return value\n\n            self.fail(value)\n\n    validator = ValidDomain\n\n\nclass Regexp(ValidatedField, String):\n    default_error_messages = {\n        'invalid': u\"Not a valid regular expression.\",\n    }\n\n    class ValidRegexp(ValidatedField.Validator):\n        default_message = u\"Not a valid regular expression.\"\n\n        def __call__(self, value):\n            try:\n                re.compile(value)\n            except re.error:\n                self.fail(value)\n            return value\n\n    validator = ValidRegexp\n\n\nclass DependantField(Field):\n    default_error_messages = {\n        'unknown_condition': u\"Value '{value}' for field '{field}' is not \"\n                             u\"supported\",\n    }\n\n    def __init__(self, when, then, **kwargs):\n        for key, field in iteritems(then):\n            if not isinstance(field, Field):\n                raise ImproperlyConfigured(\n                    u\"Invalid field for the value {!r}\".format(key))\n        super(DependantField, self).__init__(**kwargs)\n        self.when = when\n        self.then = then\n\n    def get_dependencies(self, cls):\n        return super(DependantField, self).get_dependencies(cls) | {self.when}\n\n    def serialize(self, attr, obj, accessor=None):\n        field = self._field_for_data(obj)\n        return field.serialize(attr, obj, accessor)\n\n    def deserialize(self, value, attr=None, data=None):\n        field = self._field_for_data(data)\n        return field.deserialize(value, attr, data)\n\n    def _add_to_schema(self, field_name, schema):\n        super(DependantField, self)._add_to_schema(field_name, schema)\n        for field in itervalues(self.then):\n            field._add_to_schema(field_name, schema)\n\n    def _field_for_data(self, data):\n        condition = get_value(self.when, data)\n        try:\n            return self.then[condition]\n        except KeyError:\n            self.fail('unknown_condition', value=condition, field=self.when)\n\n\nclass List(fields.List, Field):\n    def contribute_to_class(self, cls, attrname):\n        setattr(cls, attrname, ListDescriptor(attrname=attrname))\n\n\nclass Fragment(ValidatedField, Field):\n    class ValidType(ValidatedField.Validator):\n        default_message = u'The fragment type is not list, range or fixed'\n\n        def __call__(self, value):\n            if value['type'] in ['list', 'range', 'fixed']:\n                return value\n\n            self.fail(value)\n\n    class ValidValue(ValidatedField.Validator):\n        default_message = u\"Invalid value for the given fragment type\"\n        ALL_LETTERS = r'^[a-zA-Z]+-[a-zA-Z]+$'\n        ALL_NUMBERS = r'^\\d+-\\d+$'\n\n        def invalid_range(self, value):\n            all_letters = re.match(self.ALL_LETTERS, value['value'])\n            all_numbers = re.match(self.ALL_NUMBERS, value['value'])\n\n            return value['type'] == 'range' and not (all_letters or all_numbers)\n\n        def __call__(self, value):\n            if self.invalid_range(value):\n                self.fail(value)\n            return value\n\n    def __init__(self, *args, **kwargs):\n        super(Fragment, self).__init__(*args, **kwargs)\n        self.validators = [self.ValidType(), self.ValidValue()]\n\n\nclass StartUrl(Schema):\n    fragments = List(Fragment)\n    type = String(validate=OneOf(['url', 'generated', 'feed']), required=True)\n    url = String(default='', required=True)\n"
  },
  {
    "path": "portia_server/portia_orm/middleware.py",
    "content": "from .datastore import data_store_context\n\n\nclass ORMDataStoreMiddleware(object):\n    def __init__(self, get_response=None):\n        self.get_response = get_response\n\n    def __call__(self, request):\n        with data_store_context():\n            return self.get_response(request)\n"
  },
  {
    "path": "portia_server/portia_orm/models.py",
    "content": "from __future__ import unicode_literals\nimport json\nimport re\nimport six\n\nfrom collections import deque, OrderedDict\nfrom datetime import datetime\n\nfrom django.conf import settings\nfrom marshmallow.fields import Nested\nfrom marshmallow.validate import Length\nfrom six import iteritems, iterkeys, itervalues\n\nfrom scrapy.utils.misc import load_object\nfrom slybot import __version__ as SLYBOT_VERSION\nfrom slybot.fieldtypes import FieldTypeManager\nfrom slybot.plugins.scrapely_annotations.migration import port_sample\nfrom slybot.starturls import StartUrlCollection\nfrom slybot.utils import encode\n\nfrom storage.backends import ContentFile\n\nfrom .base import Model\nfrom .decorators import pre_load, post_dump\nfrom .exceptions import PathResolutionError\nfrom .fields import (\n    Boolean, Domain, Integer, List, Regexp, String, Url, DependantField,\n    BelongsTo, HasMany, HasOne, CASCADE, CLEAR, PROTECT, StartUrl)\nfrom .snapshots import ModelSnapshots\nfrom .utils import unwrap_envelopes, short_guid, wrap_envelopes, strip_json\nfrom .validators import OneOf\n\n_CLEAN_ANNOTATED_HTML = re.compile('( data-scrapy-[a-z]+=\"[^\"]+\")|'\n                                   '( data-tagid=\"\\d+\")')\n_ID_RE = re.compile('-'.join(['[a-f0-9]{4}'] * 3), re.I)\nFIELD_TYPES = FieldTypeManager().available_type_names()\n\n\nclass Project(Model):\n    # TODO: override storage for hosted version, return generated project.json\n    id = String(primary_key=True, validate=Length(min=1, max=248))\n    name = String()\n    schemas = HasMany('Schema', related_name='project', on_delete=CLEAR,\n                      ignore_in_file=True)\n    extractors = HasMany('Extractor', related_name='project', on_delete=CLEAR,\n                         ignore_in_file=True)\n    spiders = HasMany('Spider', related_name='project', on_delete=CLEAR,\n                      ignore_in_file=True)\n\n    @property\n    def version(self):\n        if self.storage.version_control:\n            return self.storage.commit._id[:7]\n        elif getattr(settings, 'DEPLOY_VERSION', None):\n            return load_object(settings.DEPLOY_VERSION)(self.project)\n        else:\n            return '{:%Y%m%d-%H%M%S}'.format(datetime.now())\n\n    class Meta:\n        path = u'project.json'\n\n\ndef CASCADE_AUTO_OR_CLEAR(collector, instance, field_name, related_instance):\n    if instance.auto_created:\n        CASCADE(collector, instance, field_name, related_instance)\n    else:\n        CLEAR(collector, instance, field_name, related_instance)\n\n\nclass Schema(Model):\n    id = String(primary_key=True)\n    name = String(required=True)\n    auto_created = Boolean(default=False)\n    default = Boolean(default=False)\n    project = BelongsTo(Project, related_name='schemas', on_delete=CASCADE,\n                        ignore_in_file=True)\n    items = HasMany('Item', related_name='schema',\n                    on_delete=CASCADE_AUTO_OR_CLEAR, ignore_in_file=True)\n    fields = HasMany('Field', related_name='schema', on_delete=CLEAR)\n\n    class Meta:\n        path = u'items.json'\n        owner = 'project'\n\n    @pre_load(pass_many=True)\n    def unwrap_envelopes(self, data, many):\n        return unwrap_envelopes(data, many, 'id', True)\n\n    @pre_load\n    def name_from_id(self, data):\n        if 'name' not in data:\n            data['name'] = data['id']\n        return data\n\n    @pre_load\n    def add_fake_items(self, data):\n        data['items'] = []\n        return data\n\n    @post_dump\n    def remove_fake_items(self, data):\n        data.pop('items', None)\n        return data\n\n    @post_dump\n    def remove_auto_created_false(self, data):\n        if 'auto_created' in data and not data['auto_created']:\n            del data['auto_created']\n        if 'default' in data and not data['default']:\n            del data['default']\n        return data\n\n    @post_dump(pass_many=True)\n    def wrap_envelopes(self, data, many):\n        return wrap_envelopes(data, many, 'id', True)\n\n\nclass Field(Model):\n    id = String(primary_key=True)\n    name = String(required=True)\n    type = String(required=True, default='text', validate=OneOf(FIELD_TYPES))\n    required = Boolean(default=False)\n    vary = Boolean(default=False)\n    auto_created = Boolean(default=False)\n    schema = BelongsTo(Schema, related_name='fields', on_delete=CASCADE,\n                       ignore_in_file=True)\n    annotations = HasMany('Annotation', related_name='field',\n                          on_delete=CASCADE_AUTO_OR_CLEAR, ignore_in_file=True)\n\n    class Meta:\n        path = u'items.json'\n        owner = 'schema'\n\n    def __repr__(self):\n        return super(Field, self).__repr__('name', 'type')\n\n    @pre_load(pass_many=True)\n    def unwrap_envelopes(self, data, many):\n        return unwrap_envelopes(data, many, 'id', False)\n\n    @pre_load\n    def name_from_id(self, data):\n        if 'name' not in data:\n            data['name'] = data['id']\n        return data\n\n    @pre_load\n    def add_fake_annotations(self, data):\n        data['annotations'] = []\n        return data\n\n    @post_dump\n    def remove_fake_annotations(self, data):\n        data.pop('annotations', None)\n        return data\n\n    @post_dump\n    def remove_auto_created_false(self, data):\n        if 'auto_created' in data and not data['auto_created']:\n            del data['auto_created']\n        return data\n\n    @post_dump(pass_many=True)\n    def wrap_envelopes(self, data, many):\n        return wrap_envelopes(data, many, 'id', False)\n\n\nclass Extractor(Model):\n    id = String(primary_key=True)\n    type = String(required=True, validate=OneOf(['type', 'regex']))\n    value = DependantField(when='type', then={\n        'type': String(required=True, validate=OneOf(FIELD_TYPES)),\n        'regex': Regexp(required=True),\n    })\n    project = BelongsTo(Project, related_name='extractors', on_delete=CASCADE,\n                        ignore_in_file=True)\n    annotations = HasMany('Annotation', related_name='extractors',\n                          on_delete=CLEAR, ignore_in_file=True)\n\n    class Meta:\n        path = u'extractors.json'\n        owner = 'project'\n\n    @pre_load(pass_many=True)\n    def unwrap_envelopes(self, data, many):\n        return unwrap_envelopes(data, many, 'id', False)\n\n    @pre_load\n    def to_type_and_value(self, data):\n        type_extractor = data.pop('type_extractor', None)\n        regular_expression = data.pop('regular_expression', None)\n        if type_extractor:\n            data['type'] = 'type'\n            data['value'] = type_extractor\n        elif regular_expression:\n            data['type'] = 'regex'\n            data['value'] = regular_expression\n        else:\n            data['type'] = 'type'\n            data['value'] = 'text'\n        return data\n\n    @post_dump\n    def from_type_and_value(self, data):\n        # may be missing if serializing only id\n        if 'type' in data and 'value' in data:\n            type_ = data.pop('type')\n            value = data.pop('value')\n            if type_ == 'type':\n                data['type_extractor'] = value\n            else:  # type_ == 'regex'\n                data['regular_expression'] = value\n        return data\n\n    @post_dump(pass_many=True)\n    def wrap_envelopes(self, data, many):\n        return wrap_envelopes(data, many, 'id', False)\n\n\nclass Spider(Model):\n    # TODO: validate id against allowed file name\n    id = String(primary_key=True, validate=Length(min=1, max=243))\n    start_urls = List(Nested(StartUrl))\n    links_to_follow = String(default='all', validate=OneOf(\n        ['none', 'patterns', 'all', 'auto']))\n    allowed_domains = List(Domain)\n    respect_nofollow = Boolean(default=True)\n    follow_patterns = List(Regexp)\n    exclude_patterns = List(Regexp)\n    js_enabled = Boolean(default=False)\n    js_enable_patterns = List(Regexp)\n    js_disable_patterns = List(Regexp)\n    perform_login = Boolean(default=False)\n    login_url = String(default='', allow_none=True)\n    login_user = String(default='', allow_none=True)\n    login_password = String(default='', allow_none=True)\n    project = BelongsTo(Project, related_name='spiders', on_delete=CASCADE,\n                        ignore_in_file=True)\n    samples = HasMany('Sample', related_name='spider', on_delete=CLEAR,\n                      only='id')\n\n    class Meta:\n        path = u'spiders/{self.id}.json'\n\n    def __repr__(self):\n        return super(Spider, self).__repr__('id')\n\n    @classmethod\n    def load(cls, storage, instance=None, project=None, **kwargs):\n        if instance is None and project:\n            # Load Spiders collection from file listing\n            directories, files = storage.listdir('spiders')\n            return cls.collection(\n                cls(storage, snapshots=('committed',),\n                    id=strip_json(filename)).with_snapshots()\n                for filename in files\n                if filename.endswith('.json'))\n\n        return super(Spider, cls).load(\n            storage, instance, project=project, **kwargs)\n\n    @pre_load\n    def populate_id(self, data):\n        spider_id = data.get('id')\n        if spider_id and not _ID_RE.match(spider_id):\n            return data\n        path = self.context['path']\n        data['id'] = strip_json(path.split('/')[-1])\n        return data\n\n    @pre_load\n    def dump_templates(self, data):\n        if not data.get('templates'):\n            path = '/'.join(strip_json(self.context['path']).split('/')[:2])\n            storage = self.context['storage']\n            try:\n                names = OrderedDict((strip_json(fname), 1)\n                                    for fname in storage.listdir(path)[1])\n                data['samples'] = list(names)\n                return data\n            except OSError:\n                # Directory does not exist\n                data['samples'] = []\n                return data\n        templates = []\n        for template in data['templates']:\n            # Only migrate item templates\n            if template.get('page_type') != 'item':\n                continue\n            template['id'] = template.get('page_id') or template.get('name')\n            templates.append(template['id'])\n            path = self.context['path']\n            path = '/'.join((strip_json(path).strip('/'),\n                            '{}.json'.format(template['id'])))\n            sample = json.dumps(template, sort_keys=True, indent=4)\n            self.context['storage'].save(path, ContentFile(sample, path))\n        data['samples'] = templates\n        path, storage = self.context['path'], self.context['storage']\n        spider = json.dumps(data, indent=4, sort_keys=True)\n        storage.save(path, ContentFile(spider, path))\n        return data\n\n    @pre_load\n    def normalize_start_urls(self, data):\n        if 'start_urls' in data or 'generated_urls' in data:\n            start_urls = (data.get('start_urls', []) +\n                          data.get('generated_urls', []))\n            data['start_urls'] = StartUrlCollection(start_urls).normalize()\n        return data\n\n    @pre_load\n    def get_init_requests(self, data):\n        init_requests = data.pop('init_requests', [])\n        if init_requests:\n            login_request = init_requests[0]\n            if isinstance(login_request, dict):\n                data['login_url'] = login_request.get('loginurl', '')\n                data['login_user'] = login_request.get('username', '')\n                data['login_password'] = login_request.get('password', '')\n        data['perform_login'] = self._is_perform_login(data)\n        return data\n\n    @post_dump\n    def set_init_requests(self, data):\n        if data.pop('perform_login', None) and self._is_perform_login(data):\n            data['init_requests'] = [OrderedDict([\n                ('type', 'login'),\n                ('loginurl', data['login_url']),\n                ('username', data['login_user']),\n                ('password', data['login_password']),\n            ])]\n        data.pop('login_url', None)\n        data.pop('login_user', None)\n        data.pop('login_password', None)\n        data.pop('samples', None)\n        return OrderedDict(sorted(iteritems(data)))\n\n    @staticmethod\n    def _is_perform_login(data):\n        return all(data.get(field)\n                   for field in ('login_url', 'login_user', 'login_password'))\n\n\nclass OrderedAnnotationsMixin(object):\n    @property\n    def ordered_children(self):\n        children = BaseAnnotation.collection()\n        for annotation in self.annotations:\n            children.append(annotation)\n            if isinstance(annotation, Item):\n                children.extend(annotation.ordered_children)\n        return children\n\n    @property\n    def ordered_annotations(self):\n        annotations = Annotation.collection()\n        for annotation in self.annotations:\n            if isinstance(annotation, Item):\n                annotations.extend(annotation.ordered_annotations)\n            else:\n                annotations.append(annotation)\n        return annotations\n\n    @property\n    def ordered_items(self):\n        items = Item.collection()\n        for annotation in self.annotations:\n            if isinstance(annotation, Item):\n                items.append(annotation)\n                items.extend(annotation.ordered_items)\n        return items\n\n\nclass Sample(Model, OrderedAnnotationsMixin):\n    id = String(primary_key=True)\n    name = String(required=True)\n    url = Url(required=True)\n    page_id = String(default='')\n    page_type = String(default='item', validate=OneOf(['item']))\n    items = HasMany('Item', related_name='sample', on_delete=CLEAR)\n    rendered_body = HasOne('RenderedBody', related_name='sample',\n                           on_delete=CLEAR, ignore_in_file=True)\n    original_body = HasOne('OriginalBody', related_name='sample',\n                           on_delete=CLEAR, ignore_in_file=True)\n    spider = BelongsTo(Spider, related_name='samples', on_delete=CASCADE,\n                       only='id')\n\n    class Meta:\n        path = u'spiders/{self.spider.id}/{self.id}.json'\n\n    def __repr__(self):\n        return super(Sample, self).__repr__('name', 'url')\n\n    @property\n    def annotations(self):\n        return self.items\n\n    @classmethod\n    def load(cls, storage, instance=None, spider=None, **kwargs):\n        if instance is None and spider:\n            # Samples are stored in separate files, but they are listed in the\n            # Spider file. If this gets called, it means that file didn't exist\n            # so return an empty collection\n            return cls.collection()\n\n        return super(Sample, cls).load(\n            storage, instance, spider=spider, **kwargs)\n\n    @pre_load\n    def chain_load(self, data):\n        if set(data) == {'id'}:\n            return data\n        methods = (self.migrate_sample, self.get_items)\n        for method in methods:\n            data = method(self, data)\n        return data\n\n    @staticmethod\n    def migrate_sample(self, data):\n        if not data.get('name'):\n            data['name'] = (data.get('id', data.get('page_id', u'')[:20]) or\n                            strip_json(self.context['path'].split('/')[-1]))\n        version = data.get('version', '')\n        if version == '0.13.0' or version >= '0.13.1':\n            return data\n        if any(body in data for body in ('original_body', 'rendered_body')):\n            self._migrate_html(self, data)\n        schemas = json.load(self.context['storage'].open('items.json'))\n        if version >= '0.13.0':\n            return data\n        if 'id' not in data:\n            data['id'] = data['name']\n        annotations = (data.pop('plugins', {}).get('annotations-plugin', {})\n                           .get('extracts', []))\n        items = [a for a in annotations if a.get('item_container')]\n        if items:\n            return data\n\n        extractors = json.load(self.context['storage'].open_with_default(\n            'extractors.json', {}))\n        sample, new_schemas = port_sample(data, schemas, extractors)\n        self._add_schemas(self, new_schemas)\n        self.save_raw(self, sample)\n        return sample\n\n    @staticmethod\n    def get_items(self, data):\n        annotations = (data.pop('plugins', {}).get('annotations-plugin', {})\n                           .get('extracts', []))\n\n        containers = OrderedDict()\n        items = []\n        for annotation in annotations:\n            id_ = annotation['id']\n            if annotation.get('item_container', False):\n                containers[id_] = annotation\n                annotation.update({\n                    'repeated_selector': None,\n                    'children': [],\n                    'type': 'Item',\n                })\n                items.append(annotation)\n            else:\n                # split annotations with multiple keys in data\n                for data_id, annotation_data in iteritems(\n                        annotation.get('data', {})):\n                    items.append(dict(annotation, **{\n                        'data': {\n                            data_id: annotation_data,\n                        },\n                        'type': 'Annotation',\n                    }))\n\n        for item in items:\n            container_id = item.get('container_id')\n            if item.get('repeated') and item.get('item_container'):\n                del item['repeated']\n                parent = containers.pop(container_id)\n                container_id = item['container_id'] = parent['container_id']\n                item['repeated_selector'] = item['selector']\n                item['selector'] = parent['selector']\n                try:\n                    item['siblings'] = parent['siblings'] or item['siblings']\n                except KeyError:\n                    item['siblings'] = 0\n                item['schema_id'] = parent['schema_id'] or item['schema_id']\n                if container_id:\n                    try:\n                        containers[container_id]['children'].remove(parent)\n                    except ValueError:\n                        pass\n            if container_id:\n                containers[container_id]['children'].append(item)\n        data['items'] = [container\n                         for container in itervalues(containers)\n                         if container.get('container_id') is None]\n        return data\n\n    @staticmethod\n    def _add_schemas(serializer, schemas):\n        storage = serializer.context['storage']\n        project = Project(storage, id=str(storage.name))\n        schema_collection = project.schemas\n        for schema_id, schema in iteritems(schemas):\n            model = Schema(storage, id=schema_id, project=project,\n                           name=schema.get('name', schema_id))\n            for field_id, field in iteritems(schema['fields']):\n                field.pop('id', None)\n                model.fields.add(Field(storage, id=field_id, schema=model,\n                                       **field))\n            schema_collection.add(model)\n        project.schemas = schema_collection\n\n    @staticmethod\n    def _populate_schema_id(data, schema_id):\n        try:\n            annotations = data['plugins']['annotations-plugin']['extracts']\n        except KeyError:\n            annotations = []\n        for anno in annotations:\n            if (anno.get('item_container') and\n                    anno.get('container_id') is None and\n                    anno.get('schema_id') is None):\n                anno['schema_id'] = schema_id\n\n    @staticmethod\n    def _migrate_html(self, sample):\n        base_path = strip_json(self.context['path']).strip('/')\n        # Clean and use annotated body if there is no original body present\n        if 'annotation_body' in sample and not sample.get('original_body'):\n            sample['original_body'] = self._clean(sample['annotated_body'])\n        storage = self.context['storage']\n        for key, value in sample.items():\n            if (not value or not key.endswith('_body') or\n                    key == 'annotated_body'):\n                continue\n            path = '/'.join((base_path, '{}.html'.format(key)))\n            html = value.encode('utf-8')\n            if hasattr(html, 'encode') and isinstance(html, six.text_type):\n                html = encode(html).decode('utf-8')\n            if not storage.exists(path):\n                storage.save(path, ContentFile(html, path))\n        return sample\n\n    @post_dump\n    def add_fields(self, data):\n        items = data.pop('items', [])\n        queue = deque(items)\n        output_annotations = []\n        while queue:\n            annotation = queue.popleft()\n            if annotation.get('item_container'):\n                children = annotation.pop('children', [])\n                repeated_selector = annotation.pop('repeated_selector', None)\n                if repeated_selector:\n                    parent_id = '{}#parent'.format(annotation['id'])\n                    output_annotations.append(OrderedDict(annotation, **{\n                        'id': parent_id,\n                        'repeated': False,\n                    }))\n                    output_annotations.append(OrderedDict(annotation, **{\n                        'container_id': parent_id,\n                        'repeated': True,\n                        'selector': repeated_selector,\n                    }))\n                else:\n                    output_annotations.append(annotation)\n                queue.extendleft(reversed(children))\n            else:\n                output_annotations.append(annotation)\n\n        scrapes = None\n        for annotation in output_annotations:\n            scrapes = annotation.get('schema_id')\n            if scrapes:\n                break\n        data.update({\n            'extractors': data.get('extractors', {}),\n            'plugins': {\n                'annotations-plugin': {\n                    'extracts': output_annotations,\n                },\n            },\n            'scrapes': scrapes,\n            'version': SLYBOT_VERSION,\n        })\n\n        return OrderedDict(sorted(iteritems(data)))\n\n    @staticmethod\n    def save_raw(serializer, data):\n        context = serializer.context\n        path, storage = context['path'], context['storage']\n        data = {k: v for k, v in data.items() if not k.endswith('_body')}\n        sample = json.dumps(data, indent=4, sort_keys=True)\n        storage.save(path, ContentFile(sample, path))\n\n    def clean(self, data):\n        return _CLEAN_ANNOTATED_HTML.sub('', data)\n\n\nclass BaseAnnotation(Model):\n    id = String(primary_key=True)\n    parent = BelongsTo('Item', related_name='annotations', on_delete=CASCADE,\n                       only='id')\n\n    class Meta:\n        polymorphic = True\n\n\nclass Item(BaseAnnotation, OrderedAnnotationsMixin):\n    name = String(allow_none=True, load_from='field', dump_to='field')\n    selector = String(allow_none=True, default=None)\n    repeated_selector = String(allow_none=True, default=None)\n    siblings = Integer(default=0)\n    sample = BelongsTo(Sample, related_name='items', on_delete=CASCADE,\n                       ignore_in_file=True)\n    annotations = HasMany(BaseAnnotation, related_name='parent',\n                          polymorphic=True, on_delete=CLEAR,\n                          load_from='children', dump_to='children')\n    schema = BelongsTo(Schema, related_name='items', on_delete=PROTECT,\n                       load_from='schema_id', dump_to='schema_id',\n                       only=('id',))\n\n    class Meta:\n        path = u'spiders/{self.sample.spider.id}/{self.sample.id}.json'\n        owner = 'sample'\n\n    def __repr__(self):\n        return super(Item, self).__repr__('name', 'selector',\n                                          'repeated_selector')\n\n    @property\n    def owner_sample(self):\n        if self.sample:\n            return self.sample\n        if self.parent:\n            return self.parent.owner_sample\n        return None\n\n    @classmethod\n    def storage_path(cls, data, snapshots=None):\n        # in the nested item case try to get the path from parent\n        try:\n            return super(Item, cls).storage_path(data, snapshots)\n        except PathResolutionError as e:\n            if isinstance(data, cls):\n                try:\n                    parent = data.data_store.get('parent', snapshots=snapshots)\n                except KeyError:\n                    raise e\n                return cls.storage_path(parent, snapshots)\n            raise e\n\n    def _get_parent_object(self, parent_snapshots):\n        return self.with_snapshots(parent_snapshots).owner_sample\n\n    @pre_load\n    def wrap_schema_envelopes(self, data):\n        if 'schema_id' in data:\n            data['schema_id'] = {\n                data['schema_id']: {}\n            }\n        return data\n\n    @pre_load\n    def remove_attributes(self, data):\n        # remove the unused annotations attribute since it will conflict with\n        # the annotations field which reads from/writes to the children\n        # attribute\n        data.pop('annotations', None)\n        return data\n\n    @pre_load\n    def add_field(self, data):\n        data.setdefault('field', None)\n        return data\n\n    @post_dump\n    def add_attributes(self, data):\n        if data.get('field') is None:\n            data.pop('field', None)\n        data.update({\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'container_id': data.pop('parent', None),\n            'item_container': True,\n            'repeated': bool(data.get('repeated_selector')),\n            'required': [],\n            'tagid': None,\n            'text-content': '#portia-content'\n        })\n        return OrderedDict(sorted(iteritems(data)))\n\n    @post_dump\n    def remove_type(self, data):\n        data.pop('type')\n        return data\n\n    @post_dump\n    def unwrap_schema_envelopes(self, data):\n        if 'schema_id' in data:\n            data['schema_id'] = (data['schema_id'] and\n                                 next(iterkeys(data['schema_id'])))\n        return data\n\n\nclass Annotation(BaseAnnotation):\n    attribute = String(default='content')\n    text_content = String(default='content')\n    required = Boolean(default=False)\n    selection_mode = String(default='auto', validate=OneOf(\n        ['auto', 'css', 'xpath']))\n    selector = String(allow_none=True, default=None)\n    xpath = String(allow_none=True, default=None)\n    accept_selectors = List(String)\n    reject_selectors = List(String)\n    repeated = Boolean(default=False)\n    pre_text = String(allow_none=True, default=None)\n    post_text = String(allow_none=True, default=None)\n    field = BelongsTo(Field, related_name='annotations', on_delete=PROTECT,\n                      only=('id',))\n    extractors = HasMany(Extractor, related_name='annotations',\n                         on_delete=PROTECT, only=('id',))\n\n    class Meta:\n        path = (u'spiders/{self.parent.sample.spider.id}'\n                u'/{self.parent.sample.id}.json')\n        owner = 'parent'\n\n    def __repr__(self):\n        return super(Annotation, self).__repr__('attribute', 'selector')\n\n    @property\n    def owner_sample(self):\n        return self.parent.owner_sample\n\n    @classmethod\n    def storage_path(cls, data, snapshots=None):\n        # in the nested item case try to get the path from parent\n        try:\n            return super(Annotation, cls).storage_path(data, snapshots)\n        except PathResolutionError as e:\n            if isinstance(data, cls):\n                try:\n                    parent = data.data_store.get('parent', snapshots=snapshots)\n                except KeyError:\n                    raise e\n                return Item.storage_path(parent, snapshots)\n            raise e\n\n    @classmethod\n    def generate_pk(cls, storage):\n        data_stores = cls.shared_data_store.get(storage, {})\n        pk = '{}|{}'.format(short_guid(), short_guid())\n        while (cls, pk) in data_stores:\n            pk = '{}|{}'.format(short_guid(), short_guid())\n        return pk\n\n    @pre_load\n    def get_annotation_data(self, data):\n        # there should only be one key in data['data'], annotations with\n        # multiple data keys are split in the Sample's pre_load\n        data_id, annotation_data = next(iteritems(data['data']))\n\n        field = annotation_data['field'] or None\n        if field:\n            field = {\n                field: {\n                    'id': field\n                }\n            }\n\n        extractors = OrderedDict(\n            (ex, {'id': ex}) for ex in annotation_data['extractors'] or [])\n\n        data = {\n            'id': '{}|{}'.format(data['id'], data_id),\n            'container_id': data['container_id'],\n            'attribute': annotation_data['attribute'] or 'content',\n            'text_content': data.get('text-content', 'content'),\n            'required': annotation_data['required'] or False,\n            'repeated': data.get('repeated', False),\n            'selection_mode': data.get('selection_mode') or 'auto',\n            'selector': data['selector'] or None,\n            'xpath': data.get('xpath') or None,\n            'accept_selectors': data['accept_selectors'] or [],\n            'reject_selectors': data['reject_selectors'] or [],\n            'pre_text': data.get('pre_text') or None,\n            'post_text': data.get('post_text') or None,\n            'field': field,\n        }\n\n        if extractors:\n            data.update({'extractors': extractors})\n        return data\n\n    @post_dump\n    def set_annotation_data(self, data):\n        annotation_id, data_id = data['id'].split('|')\n        return OrderedDict([\n            ('accept_selectors', data['accept_selectors']),\n            ('container_id', data['parent']),\n            ('data', {\n                data_id: OrderedDict([\n                    ('attribute', data['attribute']),\n                    ('extractors', list(iterkeys(data['extractors'])) or {}),\n                    ('field', data['field'] and next(iterkeys(data['field']))),\n                    ('required', data['required']),\n                ]),\n            }),\n            ('id', annotation_id),\n            ('text-content', data['text_content']),\n            ('post_text', data['post_text']),\n            ('pre_text', data['pre_text']),\n            ('reject_selectors', data['reject_selectors']),\n            ('required', []),\n            ('repeated', data['repeated']),\n            ('selection_mode', data['selection_mode']),\n            ('selector', data['selector']),\n            ('tagid', None),\n            ('xpath', data['xpath']),\n        ])\n\n\nclass OriginalBody(Model):\n    id = String(primary_key=True)\n    html = String(default='')\n    sample = BelongsTo(Sample, related_name='original_body', on_delete=CASCADE,\n                       ignore_in_file=True)\n\n    @classmethod\n    def load(cls, storage, instance=None, sample=None, **kwargs):\n        if sample:\n            sample.spider\n        html = super(OriginalBody, cls).load(\n            storage, instance, sample=sample, **kwargs)\n        if (html and not html.sample) and sample:\n            html.sample = sample\n        return html\n\n    @pre_load\n    def populate_item(self, data):\n        split_path = self.context['path'].split('/')\n        sample_id = split_path[2]\n        if len(split_path) == 3 and sample_id.endswith('.json'):\n            sample_id = strip_json(sample_id)\n        name = self.Meta.name\n        return {\n            'id': '{}_{}'.format(sample_id, name),\n            'html': data,\n        }\n\n    @post_dump\n    def return_html(self, data):\n        return data['html']\n\n    def dump(self, state='working'):\n        try:\n            index = ModelSnapshots.default_snapshots.index(state)\n        except ValueError:\n            raise ValueError(u\"'{}' is not a valid state\".format(state))\n\n        context = {\n            'snapshots': ModelSnapshots.default_snapshots[index:]\n        }\n        return self.file_schema(context=context).dump(self).data\n\n    def dumps(self, state='working'):\n        return self.dump(state=state)\n\n    class Meta:\n        raw = True\n        single = True\n        path = (u'spiders/{self.sample.spider.id}/{self.sample.id}/'\n                u'original_body.html')\n        name = 'original_body'\n\n\nclass RenderedBody(Model):\n    id = String(primary_key=True)\n    html = String(default='')\n    sample = BelongsTo(Sample, related_name='rendered_body', on_delete=CASCADE,\n                       ignore_in_file=True)\n\n    @classmethod\n    def load(cls, storage, instance=None, sample=None, **kwargs):\n        html = super(RenderedBody, cls).load(\n            storage, instance, sample=sample, **kwargs)\n        if (html and not html.sample) and sample:\n            html.sample = sample\n        return html\n\n    @pre_load\n    def populate_item(self, data):\n        split_path = self.context['path'].split('/')\n        sample_id = split_path[2]\n        if len(split_path) == 3 and sample_id.endswith('.json'):\n            sample_id = strip_json(sample_id)\n        name = self.Meta.name\n        return {\n            'id': '{}_{}'.format(sample_id, name),\n            'html': data,\n        }\n\n    @post_dump\n    def return_html(self, data):\n        return data['html']\n\n    def dump(self, state='working'):\n        try:\n            index = ModelSnapshots.default_snapshots.index(state)\n        except ValueError:\n            raise ValueError(u\"'{}' is not a valid state\".format(state))\n\n        context = {\n            'snapshots': ModelSnapshots.default_snapshots[index:]\n        }\n        return self.file_schema(context=context).dump(self).data\n\n    def dumps(self, state='working'):\n        return self.dump(state=state)\n\n    class Meta:\n        raw = True\n        single = True\n        ignore_if_missing = True\n        path = (u'spiders/{self.sample.spider.id}/{self.sample.id}/'\n                u'rendered_body.html')\n        name = 'rendered_body'\n"
  },
  {
    "path": "portia_server/portia_orm/registry.py",
    "content": "from six import itervalues\n\nfrom .exceptions import ImproperlyConfigured\n\n\n__all__ = [\n    'get_model',\n    'get_polymorphic_model',\n]\n\nmodels = {}\n\n\ndef get_model(model_name):\n    try:\n        return models[model_name]\n    except KeyError:\n        raise ImproperlyConfigured(\n            u\"No model named '{}' exists\".format(model_name))\n\n\ndef get_polymorphic_model(data):\n    for model in itervalues(models):\n        polymorphic = model.opts.polymorphic\n        if polymorphic:\n            polymorphic_key = polymorphic\n            if isinstance(polymorphic_key, bool):\n                polymorphic_key = 'type'\n            if data.get(polymorphic_key) == model.__name__:\n                return model\n    raise ImproperlyConfigured(\n        u\"No model found for data: {!r}\".format(data))\n"
  },
  {
    "path": "portia_server/portia_orm/relationships.py",
    "content": "from collections import Mapping\n\nfrom marshmallow import fields, utils\nfrom six import string_types\n\nfrom .collection import set_related, clear_related, ListDescriptor\nfrom .exceptions import ImproperlyConfigured, ValidationError\nfrom .registry import get_model, get_polymorphic_model\nfrom .utils import cached_property, cached_property_ignore_set, validate_type\n\n__all__ = [\n    'BelongsTo',\n    'HasMany',\n    'HasOne'\n]\n\n\nclass BaseRelationshipDescriptor(object):\n    \"\"\"Descriptor for interacting with model relationships\"\"\"\n    def __init__(self, model, attrname, related_name):\n        self._model = model\n        self.attrname = attrname\n        self.related_name = related_name\n\n    def __get__(self, instance, instance_type=None):\n        raise NotImplementedError\n\n    def __set__(self, instance, value):\n        raise AttributeError\n\n    def __repr__(self):\n        return '{}({}, attrname={!r}, related_name={!r})'.format(\n            self.__class__.__name__, self.model.__name__,\n            self.attrname, self.related_name)\n\n    @cached_property\n    def model(self):\n        if isinstance(self._model, string_types):\n            self._model = get_model(self._model)\n        return self._model\n\n    def _validate(self, value):\n        if value is not None:\n            validate_type(value, self.model)\n\n\nclass BelongsToDescriptor(BaseRelationshipDescriptor):\n    def __get__(self, instance, instance_type=None):\n        if instance is None:\n            return self\n        return instance.get_data(self.attrname, None)\n\n    def __set__(self, instance, value):\n        self._validate(value)\n        current_value = self.__get__(instance)\n\n        if value != current_value:\n            instance.set_data(self.attrname, value and value.with_snapshots())\n            if current_value:\n                current_value = current_value.with_snapshots(instance.snapshots)\n                clear_related(current_value, self.related_name, instance)\n            if value:\n                value = value.with_snapshots(instance.snapshots)\n                set_related(value, self.related_name, instance)\n\n\nclass HasManyDescriptor(ListDescriptor, BaseRelationshipDescriptor):\n    def __init__(self, *args, **kwargs):\n        BaseRelationshipDescriptor.__init__(self, *args, **kwargs)\n\n    def new_collection(self, instance):\n        # if we got here then the collection could not be loaded from instance's\n        # file, so we load it through the related model\n        model = self.model\n        collection = model.collection(\n            owner=instance,\n            attrname=self.attrname,\n            snapshots=('committed',))\n        if (self.attrname not in instance._initializing and\n                model.opts.owner in {self.related_name, False}):\n            items = model.load(instance.storage, **{\n                self.related_name: instance\n            })\n            if isinstance(items, model.collection) and items:\n                collection.extend(items)\n        return collection\n\n    def replace_collection(self, collection, values):\n        del collection[:]\n        collection.update(values)\n\n\nclass HasOneDescriptor(BelongsToDescriptor):\n    def __get__(self, instance, instance_type=None):\n        try:\n            field = super(HasOneDescriptor, self).__get__(instance,\n                                                          instance_type)\n            assert field is not None\n        except (AttributeError, AssertionError):\n            field = self.model.load(instance.storage, **{\n                self.related_name: instance\n            })\n            if field and not getattr(field, self.related_name, None):\n                setattr(field, self.related_name, instance)\n            instance.data_store.set(self.attrname, field, 'committed')\n        return field\n\n\nclass BaseRelationship(fields.Nested):\n    descriptor_class = None\n\n    def __init__(self, model, related_name, on_delete, ignore_in_file=False,\n                 polymorphic=False, **kwargs):\n        self._model = model\n        self.related_name = related_name\n\n        if not callable(on_delete):\n            raise ImproperlyConfigured(\n                u\"The on_delete property of a relationship must be a callable\")\n        self.on_delete = on_delete\n\n        self.ignore_in_file = ignore_in_file\n        self.polymorphic = polymorphic\n        super(BaseRelationship, self).__init__(None, **kwargs)\n        if polymorphic and isinstance(self.only, string_types):\n            self.only = (self.only,)\n\n    @cached_property\n    def model(self):\n        if isinstance(self._model, string_types):\n            self._model = get_model(self._model)\n        return self._model\n\n    @cached_property_ignore_set\n    def nested(self):\n        return self.model.file_schema\n\n    @cached_property\n    def schema(self):\n        return super(BaseRelationship, self).schema\n\n    def _serialize(self, nested_obj, attr, obj):\n        if self.polymorphic:\n            objects = nested_obj\n            if not self.many:\n                objects = [nested_obj]\n            result = []\n            for polymorphic_object in objects:\n                polymorphic_relationship = self._get_field_for_polymorphic(\n                    polymorphic_object.__class__)\n                result.append(\n                    polymorphic_relationship._serialize(\n                        polymorphic_object, attr, obj))\n            if len(result) == 1 and not self.many:\n                result = result[0]\n            return result\n\n        return super(BaseRelationship, self)._serialize(nested_obj, attr, obj)\n\n    def _deserialize(self, value, attr, data):\n        if self.polymorphic:\n            serialized = value\n            if not self.many:\n                serialized = [value]\n            result = []\n            for polymorphic_serialized in serialized:\n                polymorphic_type = get_polymorphic_model(polymorphic_serialized)\n                polymorphic_relationship = self._get_field_for_polymorphic(\n                    polymorphic_type)\n                result.append(\n                    polymorphic_relationship._deserialize(\n                        polymorphic_serialized, attr, data))\n            if len(result) == 1 and not self.many:\n                result = result[0]\n            return result\n\n        if self.many and not self._is_collection(value):\n            self.fail('type', input=value, type=value.__class__.__name__)\n        data, errors = self.schema.load(value)\n        if errors:\n            raise ValidationError(errors, data=data)\n        return data\n\n    def _get_field_for_polymorphic(self, model):\n        relationship_copy = object.__new__(self.__class__)\n        relationship_copy.__dict__ = dict(self.__dict__)\n        relationship_copy.__dict__.pop('model', None)\n        relationship_copy.__dict__.pop('nested', None)\n        relationship_copy.__dict__.pop('schema', None)\n        relationship_copy.model = model\n        relationship_copy.many = False\n        relationship_copy.polymorphic = False\n        return relationship_copy\n\n    def _is_collection(self, value):\n        return isinstance(value, Mapping) or utils.is_collection(value)\n\n    def contribute_to_class(self, cls, attrname):\n        if (not self.ignore_in_file and\n                not isinstance(self._model, string_types)):\n            if self.related_name not in self._model._fields:\n                raise ImproperlyConfigured(\n                    u\"Model '{}' has not declared field '{}'\".format(\n                        self._model.__name__, self.related_name))\n            related_field = self._model._fields[self.related_name]\n            if related_field.related_name != attrname:\n                raise ImproperlyConfigured(\n                    u\"Related name of Model '{}' field '{}' is not '{}'\".format(\n                        self._model.__name__, self.related_name, attrname))\n            class_includes_relationships = \\\n                self._includes_relationships(self, self._model)\n            related_includes_relationships = \\\n                (not related_field.ignore_in_file and\n                 self._includes_relationships(related_field, cls))\n            if class_includes_relationships and related_includes_relationships:\n                raise ImproperlyConfigured(\n                    u\"Related fields '{}' of model '{}' and \"\n                    u\"'{}' of model '{}' cannot both include relationships. \"\n                    u\"Use ignore_in_file or only to limit the fields on one \"\n                    u\"side of the relationship.\".format(\n                        attrname, cls.__name__,\n                        self.related_name, self._model.__name__))\n\n        descriptor = self.descriptor_class(\n            self._model, attrname=attrname, related_name=self.related_name)\n        setattr(cls, attrname, descriptor)\n\n    def get_dependencies(self, cls):\n        return {cls._pk_field}\n\n    @staticmethod\n    def _includes_relationships(field, model):\n        includes_relationships = True\n        if field.only:\n            includes_relationships = False\n            for field in ([field.only]\n                          if isinstance(field.only, string_types)\n                          else field.only):\n                if isinstance(model._fields[field], BaseRelationship):\n                    includes_relationships = True\n        return includes_relationships\n\n\nclass BelongsTo(BaseRelationship):\n    descriptor_class = BelongsToDescriptor\n\n\nclass HasMany(BaseRelationship):\n    descriptor_class = HasManyDescriptor\n\n    def __init__(self, *args, **kwargs):\n        kwargs['many'] = True\n        super(HasMany, self).__init__(*args, **kwargs)\n\n\nclass HasOne(BaseRelationship):\n    descriptor_class = HasOneDescriptor\n"
  },
  {
    "path": "portia_server/portia_orm/serializers.py",
    "content": "from collections import OrderedDict, Sequence\n\nfrom marshmallow import schema\nfrom six import iteritems, string_types\n\nfrom .decorators import pre_dump, post_dump, post_load\n\n__all__ = [\n    'FileSerializer',\n]\n\n\nclass FileSerializerOpts(schema.SchemaOpts):\n    def __init__(self, meta):\n        super(FileSerializerOpts, self).__init__(meta)\n        if meta is schema.BaseSchema.Meta:\n            return\n\n        self.strict = True\n        # make marshmallow use OrderedDicts, so that collections of enveloped\n        # objects maintain their order when loaded\n        self.ordered = True\n        # the model from which the Schema was created, required\n        self.model = getattr(meta, 'model')\n        self.polymorphic = getattr(meta, 'polymorphic', False)\n        # whether to include the model name in the serialized output, if a\n        # string use that as the output attribute, otherwise uses 'type'\n        if not isinstance(self.polymorphic, (bool, string_types)):\n            raise ValueError(\n                \"'polymorphic' option must be a string or boolean.\")\n\n\nclass FileSerializer(schema.Schema):\n    OPTIONS_CLASS = FileSerializerOpts\n\n    def __init__(self, *args, **kwargs):\n        super(FileSerializer, self).__init__(*args, **kwargs)\n        if self.opts.polymorphic:\n            self.extra = self.extra or {}\n            polymorphic_key = self.opts.polymorphic\n            if isinstance(polymorphic_key, bool):\n                polymorphic_key = 'type'\n            self.extra[polymorphic_key] = self.opts.model.__name__\n\n    def __getattr__(self, item):\n        # try to resolve missing attributes from the model\n        return getattr(self.opts.model, item)\n\n    def get_attribute(self, attr, obj, default):\n        return super(FileSerializer, self).get_attribute(attr, obj, default)\n\n    @post_load\n    def create_object(self, data):\n        storage = self.context.get('storage', None)\n        model = self.opts.model(storage, snapshots=('committed',), **data)\n        return model.with_snapshots()\n\n    @pre_dump\n    def select_snapshots(self, instance):\n        snapshots = self.context.get('snapshots', None)\n        if snapshots is not None:\n            instance = instance.with_snapshots(snapshots)\n        return instance\n\n    @post_dump\n    def order_keys(self, data):\n        \"\"\"\n        Create ordered dictionaries sorted by key. We do this here instead of\n        using the sort_keys parameter of json.dumps, so that object keys are\n        sorted, while collections can maintain their insertion order\n        \"\"\"\n        return OrderedDict((item for item in sorted(iteritems(data))))\n\n    def _do_load(self, data, many=None, *args, **kwargs):\n        # support the case where we have only a single field to load and we get\n        # it directly rather than wrapped in a dict. this happens when loading\n        # a relationship with a single field in 'only'\n        many = self.many if many is None else bool(many)\n        if not many:\n            data = self._wrap_only(data)\n        elif isinstance(data, Sequence):\n            data = [self._wrap_only(value) for value in data]\n\n        result, errors = super(FileSerializer, self)._do_load(\n            data, many, *args, **kwargs)\n\n        # we need to wrap the result of a many load in a ModelCollection, but\n        # post_load(pass_many=True) processors are called before the Model\n        # instances are created in the post_load(pass_many=False) processor\n        if many:\n            result = self.opts.model.collection(result)\n        return result, errors\n\n    def _wrap_only(self, data):\n        if self.only and len(self.only) == 1 and not isinstance(data, dict):\n            data = {\n                # only can be an OrderedSet which doesn't support indexing\n                next(iter(self.only)): data\n            }\n        return data\n"
  },
  {
    "path": "portia_server/portia_orm/snapshots.py",
    "content": "from collections import defaultdict\n\n__all__ = [\n    'ModelSnapshots',\n]\n\n\nclass ModelSnapshots(defaultdict):\n    default_snapshots = ('working', 'staged', 'committed')\n\n    class ModelSnapshotsAccessor(object):\n        __slots__ = ['instance', 'snapshots']\n\n        def __init__(self, instance, snapshots=None):\n            self.instance = instance\n            self.snapshots = snapshots or ModelSnapshots.default_snapshots\n\n        def __getattr__(self, name):\n            try:\n                snapshots = self.snapshots\n                value = self.instance.get(name, snapshots)\n                try:\n                    value = value.data_store.accessor(snapshots)\n                except AttributeError:\n                    pass\n                return value\n            except KeyError:\n                raise AttributeError(\n                    u\"'{}' object has no attribute '{}'\".format(\n                        self.__class__.__name__, name))\n\n        def __setattr__(self, name, value):\n            if name in self.__slots__:\n                super().__setattr__(name, value)\n                return\n            self.instance.set(name, value, self.snapshots[0])\n\n    def __init__(self):\n        super().__init__(dict)\n\n    def get(self, key, snapshots=None):\n        if not snapshots:\n            snapshots = self.default_snapshots\n        for snapshot in snapshots:\n            try:\n                return self[snapshot][key]\n            except KeyError:\n                pass\n        raise KeyError(repr(key))\n\n    def set(self, key, value, snapshot=None):\n        if not snapshot:\n            snapshot = self.default_snapshots[0]\n        self[snapshot][key] = value\n\n    def copy_from(self, other):\n        assert isinstance(other, ModelSnapshots)\n        for key, snapshot in other.items():\n            self[key].update(snapshot)\n\n    def dirty_fields(self, changed, original):\n        dirty = set()\n        for field, value in self[changed].items():\n            try:\n                if self.get(field, snapshots=original) == value:\n                    continue\n            except KeyError:\n                pass\n            dirty.add(field)\n        return dirty\n\n    def update_snapshot(self, destination, snapshots, fields=None):\n        if fields is None:\n            fields = set()\n            for snapshot in snapshots:\n                fields.update(self[snapshot].keys())\n        self[destination].update({k: self.get(k, snapshots) for k in fields})\n\n    def clear_snapshot(self, snapshot, fields=None):\n        if fields is not None:\n            data = self[snapshot]\n            for field in fields:\n                del data[field]\n        else:\n            del self[snapshot]\n\n    def accessor(self, snapshots=None):\n        return self.ModelSnapshotsAccessor(self, snapshots)\n"
  },
  {
    "path": "portia_server/portia_orm/tests/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_orm/tests/models.py",
    "content": "from .. import fields\nfrom ..base import Model\n\n\nclass ExampleModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Boolean()\n\n\nclass RequiredFieldModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field(required=True)\n\n\nclass SingleFileModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n\n    class Meta:\n        path = u'single.json'\n\n\nclass ManyFileModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    owner = fields.BelongsTo('ManyFileModel', related_name='owner',\n                             on_delete=fields.CLEAR, ignore_in_file=True)\n\n    class Meta:\n        path = u'many.json'\n        owner = 'owner'\n\n\nclass ParamFileModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    param = fields.String()\n\n    class Meta:\n        path = u'param-{self.param}.json'\n\n\nclass OneToOneModel1(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    m2 = fields.BelongsTo('OneToOneModel2', related_name='m1',\n                          on_delete=fields.CLEAR, only='id')\n\n    class Meta:\n        path = u'o2o-model-1.json'\n\n\nclass OneToOneModel2(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    m1 = fields.BelongsTo(OneToOneModel1, related_name='m2',\n                          on_delete=fields.CLEAR)\n\n    class Meta:\n        path = u'o2o-model-2.json'\n\n\nclass ChildModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    parent = fields.BelongsTo('ParentModel', related_name='children',\n                              on_delete=fields.CLEAR, only='id')\n\n    class Meta:\n        path = u'{self.parent.id}/children.json'\n        owner = 'parent'\n\n\nclass ParentModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    children = fields.HasMany(ChildModel, related_name='parent',\n                              on_delete=fields.CLEAR)\n\n    class Meta:\n        path = u'parents.json'\n\n\nclass ManyToManyModel1(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    m2 = fields.HasMany('ManyToManyModel2', related_name='m1',\n                        on_delete=fields.CLEAR, only='id')\n\n    class Meta:\n        path = u'm2m-model-1.json'\n\n\nclass ManyToManyModel2(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    m1 = fields.HasMany(ManyToManyModel1, related_name='m2',\n                        on_delete=fields.CLEAR)\n\n    class Meta:\n        path = u'm2m-model-2.json'\n        owner = 'm1'\n\n\nclass PolymorphicParentModel(Model):\n    id = fields.String(primary_key=True)\n    field = fields.Field()\n    children = fields.HasMany('PolymorphicChildBase', related_name='parent',\n                              polymorphic=True, on_delete=fields.CASCADE,\n                              only='id')\n\n    class Meta:\n        path = u'parents.json'\n\n\nclass PolymorphicChildBase(Model):\n    id = fields.String(primary_key=True)\n    parent = fields.BelongsTo(PolymorphicParentModel, related_name='children',\n                              on_delete=fields.CLEAR, only='id')\n\n    class Meta:\n        path = u'children.json'\n        owner = 'parent'\n        polymorphic = True\n\n\nclass PolymorphicChildModel1(PolymorphicChildBase):\n    field1 = fields.Field()\n\n\nclass PolymorphicChildModel2(PolymorphicChildBase):\n    field2 = fields.Field()\n\n    class Meta:\n        polymorphic = '_type_'\n"
  },
  {
    "path": "portia_server/portia_orm/tests/test_basic.py",
    "content": "from unittest import mock\n\nfrom .models import (ExampleModel, RequiredFieldModel, SingleFileModel,\n                     ManyFileModel, ParamFileModel, PolymorphicChildModel1)\nfrom .utils import DataStoreTestCase, mock_storage\nfrom ..exceptions import PathResolutionError, ValidationError\n\n\nclass BasicModelTests(DataStoreTestCase):\n    def setUp(self):\n        super(BasicModelTests, self).setUp()\n        self.storage = mock_storage({\n            'single.json':\n                '{'\n                '    \"id\": \"model-1\",'\n                '    \"field\": true'\n                '}',\n            'many.json':\n                '['\n                '    {'\n                '        \"id\": \"model-1\",'\n                '        \"field\": true'\n                '    },'\n                '    {'\n                '        \"id\": \"model-2\",'\n                '        \"field\": false'\n                '    }'\n                ']',\n            'param-test.json':\n                '{'\n                '    \"id\": \"model-1\",'\n                '    \"field\": false,'\n                '    \"param\": \"test\"'\n                '}',\n        })\n\n    def test_validation(self):\n        model = ExampleModel(id='model-1')\n        with self.assertRaises(AttributeError):\n            model.field\n        try:\n            model.field = True\n        except ValidationError:\n            self.fail(\"Assigning to the field attribute failed validation\")\n        try:\n            model.field\n        except AttributeError:\n            self.fail(\"Reading the field attribute failed\")\n        with self.assertRaises(ValidationError):\n            model.id = 1\n\n    def test_dump(self):\n        model = ExampleModel(id='model-2', field=False)\n\n        self.assertEqual(model.dump(), {\n            'id': 'model-2',\n            'field': False,\n        })\n\n    def test_dumps(self):\n        model = ExampleModel(id='model-2', field=False)\n\n        # Object keys should be sorted\n        self.assertEqual(\n            model.dumps(),\n            '{\\n'\n            '    \"field\": false, \\n'\n            '    \"id\": \"model-2\"\\n'\n            '}')\n\n    def test_required(self):\n        model = RequiredFieldModel(id='model-1')\n\n        with self.assertRaises(ValidationError):\n            model.dump()\n\n        model.field = True\n        try:\n            model.dump()\n        except ValidationError:\n            self.fail(\"Dump failed validation\")\n\n    def test_load_single(self):\n        model = SingleFileModel.load(self.storage)\n\n        self.storage.open.assert_called_once_with('single.json')\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': True,\n        })\n\n    def test_load_single_on_access(self):\n        model = SingleFileModel(self.storage, id='model-1')\n\n        self.storage.open.assert_not_called()\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': True,\n        })\n        self.storage.open.assert_called_once_with('single.json')\n\n    def test_partial_load_single(self):\n        model = SingleFileModel(self.storage, id='model-1')\n\n        self.assertEqual(model.id, 'model-1')\n        self.storage.open.assert_not_called()\n        self.assertEqual(model.field, True)\n        self.storage.open.assert_called_once_with('single.json')\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': True,\n        })\n        self.storage.open.assert_called_once_with('single.json')\n\n    def test_load_many(self):\n        models = ManyFileModel.load(self.storage)\n\n        self.storage.open.assert_called_once_with('many.json')\n        self.assertEqual(models.dump(), [\n            {\n                'id': 'model-1',\n                'field': True,\n            },\n            {\n                'id': 'model-2',\n                'field': False,\n            },\n        ])\n\n    def test_load_one_from_many(self):\n        model = ManyFileModel(self.storage, id='model-1')\n\n        self.assertEqual(model.id, 'model-1')\n        self.storage.open.assert_not_called()\n        self.assertEqual(model.field, True)\n        self.storage.open.assert_called_once_with('many.json')\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': True,\n        })\n        self.storage.open.assert_called_once_with('many.json')\n\n    def test_load_param(self):\n        model = ParamFileModel(self.storage, id='model-1', param='test')\n\n        self.assertEqual(model.id, 'model-1')\n        self.storage.open.assert_not_called()\n        self.assertEqual(model.field, False)\n        self.storage.open.assert_called_once_with('param-test.json')\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': False,\n            'param': 'test',\n        })\n        self.storage.open.assert_called_once_with('param-test.json')\n\n    def test_load_param_skipped_if_param_missing(self):\n        model = ParamFileModel(self.storage, id='model-1')\n\n        with self.assertRaises(AttributeError):\n            model.field\n        self.storage.open.assert_not_called()\n\n    def test_save_single(self):\n        model = SingleFileModel.load(self.storage)\n        model.id = 'changed-id'\n        model.field = False\n        model.save()\n\n        self.storage.save.assert_called_once_with('single.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['single.json'],\n            '{\\n'\n            '    \"field\": false, \\n'\n            '    \"id\": \"changed-id\"\\n'\n            '}')\n\n    def test_save_single_does_not_save_if_nothing_changed(self):\n        model = SingleFileModel.load(self.storage)\n        model.field = True\n        model.save()\n\n        self.storage.save.assert_not_called()\n\n    def test_partial_save_single(self):\n        model = SingleFileModel(self.storage, id='model-1')\n        model.id = 'changed-id'\n\n        self.storage.open.assert_not_called()\n\n        model.save()\n\n        self.storage.open.assert_called_once_with('single.json')\n        self.storage.save.assert_called_once_with('single.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['single.json'],\n            '{\\n'\n            '    \"field\": true, \\n'\n            '    \"id\": \"changed-id\"\\n'\n            '}')\n\n    def test_save_param(self):\n        model = ParamFileModel(self.storage, id='model-1', param='test')\n        model.field = True\n        model.save()\n\n        self.storage.save.assert_called_once_with('param-test.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['param-test.json'],\n            '{\\n'\n            '    \"field\": true, \\n'\n            '    \"id\": \"model-1\", \\n'\n            '    \"param\": \"test\"\\n'\n            '}')\n\n    def test_save_param_raises_error_if_params_missing(self):\n        model = ParamFileModel(self.storage, id='model-1')\n        model.field = True\n\n        with self.assertRaises(PathResolutionError):\n            model.save()\n        self.storage.save.assert_not_called()\n\n    def test_save_selected_fields(self):\n        model = SingleFileModel.load(self.storage)\n        model.id = 'changed-id'\n        model.field = False\n        model.save(only=['field'])\n\n        self.storage.save.assert_called_once_with('single.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['single.json'],\n            '{\\n'\n            '    \"field\": false, \\n'\n            '    \"id\": \"model-1\"\\n'\n            '}')\n\n    def test_copy(self):\n        model = SingleFileModel.load(self.storage)\n        copied_model = model.copy('new_id')\n\n        self.assertEqual(model.field, copied_model.field)\n        self.assertNotEqual(model.id, copied_model.id)\n\n\nclass PolymorphicModelTests(DataStoreTestCase):\n    def setUp(self):\n        super(PolymorphicModelTests, self).setUp()\n        self.storage = mock_storage({\n            'children.json':\n                '['\n                '    {'\n                '        \"type\": \"PolymorphicChildModel1\",'\n                '        \"id\": \"child-1\",'\n                '        \"field1\": \"child-1\",'\n                '        \"parent\": \"parent-1\"'\n                '    },'\n                '    {'\n                '        \"_type_\": \"PolymorphicChildModel2\",'\n                '        \"id\": \"child-2\",'\n                '        \"field2\": \"child-2\",'\n                '        \"parent\": \"parent-1\"'\n                '    }'\n                ']',\n        })\n\n    def test_load_many(self):\n        models = PolymorphicChildModel1.load(self.storage)\n\n        self.storage.open.assert_called_once_with('children.json')\n        self.assertEqual(models.dump(), [\n            {\n                'type': 'PolymorphicChildModel1',\n                'id': 'child-1',\n                'field1': 'child-1',\n                'parent': 'parent-1',\n            },\n            {\n                '_type_': 'PolymorphicChildModel2',\n                'id': 'child-2',\n                'field2': 'child-2',\n                'parent': 'parent-1',\n            },\n        ])\n\n    def test_load_one_from_many(self):\n        model = PolymorphicChildModel1(self.storage, id='child-1')\n\n        self.assertEqual(model.id, 'child-1')\n        self.storage.open.assert_not_called()\n        self.assertEqual(model.field1, 'child-1')\n        self.storage.open.assert_called_once_with('children.json')\n        self.assertEqual(model.dump(), {\n            'type': 'PolymorphicChildModel1',\n            'id': 'child-1',\n            'field1': 'child-1',\n            'parent': 'parent-1',\n        })\n        self.storage.open.assert_called_once_with('children.json')\n\n    def test_save_many(self):\n        model = PolymorphicChildModel1(self.storage, id='child-1')\n        model.field1 = 'test'\n        model.save()\n\n        self.storage.save.assert_called_once_with('children.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field1\": \"test\", \\n'\n            '        \"id\": \"child-1\", \\n'\n            '        \"parent\": \"parent-1\", \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '        \"field2\": \"child-2\", \\n'\n            '        \"id\": \"child-2\", \\n'\n            '        \"parent\": \"parent-1\"\\n'\n            '    }\\n'\n            ']')\n"
  },
  {
    "path": "portia_server/portia_orm/tests/test_collection.py",
    "content": "from .models import (ExampleModel, ChildModel, PolymorphicChildBase,\n                     PolymorphicChildModel1, PolymorphicChildModel2)\nfrom .utils import DataStoreTestCase\nfrom ..exceptions import ValidationError\n\n\nclass ModelCollectionTests(DataStoreTestCase):\n    def test_create_(self):\n        collection = ExampleModel.collection()\n\n        self.assertEqual(len(collection), 0)\n        self.assertListEqual(collection, [])\n\n    def test_create_with_model(self):\n        model = ExampleModel(id='model-1', field=False)\n        collection = ExampleModel.collection([model])\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model])\n\n    def test_getitem(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1])\n\n        self.assertEqual(collection[0], model1)\n        self.assertEqual(collection['model-1'], model1)\n        self.assertEqual(collection[model1], model1)\n        self.assertEqual(collection[model1b], model1)\n        with self.assertRaises(IndexError):\n            collection[1]\n        with self.assertRaises(KeyError):\n            collection['model-2']\n        with self.assertRaises(KeyError):\n            collection[model2]\n\n    def test_setitem_index(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1])\n\n        collection[0] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection[0] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_setitem_key(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1])\n\n        collection['model-1'] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection['model-1'] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_setitem_object(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1])\n\n        collection[model1] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection[model1] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_delitem_index(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        collection = ExampleModel.collection([model1, model2, model3])\n\n        del collection[1]\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_delitem_key(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        collection = ExampleModel.collection([model1, model2, model3])\n\n        del collection['model-2']\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_delitem_object(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        collection = ExampleModel.collection([model1, model2, model3])\n\n        del collection[model2]\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_append(self):\n        collection = ExampleModel.collection()\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.append(model1)\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model1])\n\n        collection.append(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        with self.assertRaises(ValueError):\n            collection.append(model1b)\n\n    def test_add(self):\n        collection = ExampleModel.collection()\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.add(model1)\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model1])\n\n        collection.add(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        collection.add(model1b)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1b, model2])\n\n    def test_extend(self):\n        collection = ExampleModel.collection()\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.extend([model1, model2])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        with self.assertRaises(ValueError):\n            collection.extend([model1b])\n\n        collection = ExampleModel.collection()\n        with self.assertRaises(ValueError):\n            collection.extend([model1, model2, model1b])\n\n    def test_update(self):\n        collection = ExampleModel.collection()\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.update([model1, model2])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        collection.update([model2, model1b])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1b, model2])\n\n    def test_insert(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        model4 = ExampleModel(id='model-4', field=False)\n        model5 = ExampleModel(id='model-5', field=False)\n        collection = ExampleModel.collection([model1, model2])\n\n        collection.insert(1, model3)\n\n        self.assertEqual(len(collection), 3)\n        self.assertListEqual(collection, [model1, model3, model2])\n\n        collection.insert(0, model4)\n\n        self.assertEqual(len(collection), 4)\n        self.assertListEqual(collection, [model4, model1, model3, model2])\n\n        with self.assertRaises(TypeError):\n            collection.insert('model-2', model5)\n\n        collection.insert(1000, model5)\n\n        self.assertEqual(len(collection), 5)\n        self.assertListEqual(\n            collection, [model4, model1, model3, model2, model5])\n\n        # items in collection must be unique\n        with self.assertRaises(ValueError):\n            collection.insert(0, model2)\n\n    def test_remove(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        model4 = ExampleModel(id='model-4', field=False)\n        collection = ExampleModel.collection([model1, model2, model3])\n\n        collection.remove(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        with self.assertRaises(ValueError):\n            collection.remove(model4)\n        with self.assertRaises(ValidationError):\n            collection.remove('model-2')\n\n    def test_discard(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        model4 = ExampleModel(id='model-4', field=False)\n        collection = ExampleModel.collection([model1, model2, model3])\n\n        collection.discard(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        collection.discard(model4)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        with self.assertRaises(ValidationError):\n            collection.discard('model-2')\n\n    def test_pop(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        model3 = ExampleModel(id='model-3', field=False)\n        model4 = ExampleModel(id='model-4', field=False)\n        model5 = ExampleModel(id='model-5', field=False)\n        collection = ExampleModel.collection(\n            [model1, model2, model3, model4, model5])\n\n        self.assertEqual(collection.pop(), model5)\n        self.assertEqual(len(collection), 4)\n        self.assertListEqual(collection, [model1, model2, model3, model4])\n\n        self.assertEqual(collection.pop(2), model3)\n        self.assertEqual(len(collection), 3)\n        self.assertListEqual(collection, [model1, model2, model4])\n\n        with self.assertRaises(IndexError):\n            collection.pop(1000)\n\n        self.assertEqual(collection.pop('model-1'), model1)\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model2, model4])\n\n        with self.assertRaises(KeyError):\n            collection.pop('model-1')\n\n        self.assertEqual(collection.pop(model4), model4)\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model2])\n\n        with self.assertRaises(KeyError):\n            collection.pop(model4)\n\n    def test_get(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model1b = ExampleModel(id='model-1', field=True)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1])\n\n        default = object()\n        self.assertEqual(collection.get(0, default), model1)\n        self.assertEqual(collection.get('model-1', default), model1)\n        self.assertEqual(collection.get(model1, default), model1)\n        self.assertEqual(collection.get(model1b, default), model1)\n        self.assertIs(collection.get(1, default), default)\n        self.assertIs(collection.get('model-2', default), default)\n        self.assertIs(collection.get(model2, default), default)\n\n    def test_clear(self):\n        model1 = ExampleModel(id='model-1', field=False)\n        model2 = ExampleModel(id='model-2', field=False)\n        collection = ExampleModel.collection([model1, model2])\n\n        collection.clear()\n\n        self.assertEqual(len(collection), 0)\n        self.assertListEqual(collection, [])\n\n    def test_validation(self):\n        collection = ExampleModel.collection()\n\n        with self.assertRaises(ValidationError):\n            collection.append(ChildModel(id='model-1'))\n        with self.assertRaises(ValidationError):\n            collection.add(ChildModel(id='model-2'))\n\n    def test_dump(self):\n        collection = ExampleModel.collection([\n            ExampleModel(id='model-1', field=False),\n            ExampleModel(id='model-2', field=True)\n        ])\n\n        self.assertEqual(collection.dump(), [\n            {\n                'id': 'model-1',\n                'field': False,\n            },\n            {\n                'id': 'model-2',\n                'field': True,\n            },\n        ])\n\n    def test_dumps(self):\n        collection = ExampleModel.collection([\n            ExampleModel(id='model-1', field=False),\n            ExampleModel(id='model-3', field=False),\n            ExampleModel(id='model-2', field=True)\n        ])\n\n        # Object keys should be sorted, collection should maintain order\n        self.assertEqual(\n            collection.dumps(),\n            '[\\n'\n            '    {\\n'\n            '        \"field\": false, \\n'\n            '        \"id\": \"model-1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"field\": false, \\n'\n            '        \"id\": \"model-3\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"field\": true, \\n'\n            '        \"id\": \"model-2\"\\n'\n            '    }\\n'\n            ']')\n\n\nclass PolymorphicCollectionTests(DataStoreTestCase):\n    def test_create_(self):\n        collection = PolymorphicChildBase.collection()\n\n        self.assertEqual(len(collection), 0)\n        self.assertListEqual(collection, [])\n\n    def test_create_with_model(self):\n        model = PolymorphicChildModel1(id='model-1', field1=False)\n        collection = PolymorphicChildBase.collection([model])\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model])\n\n    def test_getitem(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model2b = PolymorphicChildModel2(id='model-2', field2=True)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        collection = PolymorphicChildBase.collection([model1, model2])\n\n        self.assertEqual(collection[0], model1)\n        self.assertEqual(collection[1], model2)\n        self.assertEqual(collection['model-1'], model1)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model1], model1)\n        self.assertEqual(collection[model1b], model1)\n        self.assertEqual(collection[model2], model2)\n        self.assertEqual(collection[model2b], model2)\n        with self.assertRaises(IndexError):\n            collection[2]\n        with self.assertRaises(KeyError):\n            collection['model-3']\n        with self.assertRaises(KeyError):\n            collection[model3]\n\n    def test_setitem_index(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        collection = PolymorphicChildBase.collection([model1])\n\n        collection[0] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection[0] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_setitem_key(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        collection = PolymorphicChildBase.collection([model1])\n\n        collection['model-1'] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection['model-1'] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_setitem_object(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        collection = PolymorphicChildBase.collection([model1])\n\n        collection[model1] = model1b\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model1b)\n        self.assertEqual(collection['model-1'], model1b)\n        self.assertEqual(collection[model1], model1b)\n        self.assertEqual(collection[model1b], model1b)\n\n        collection[model1] = model2\n\n        self.assertEqual(len(collection), 1)\n        self.assertEqual(collection[0], model2)\n        self.assertEqual(collection['model-2'], model2)\n        self.assertEqual(collection[model2], model2)\n        with self.assertRaises(KeyError):\n            collection['model-1']\n        with self.assertRaises(KeyError):\n            collection[model1]\n        with self.assertRaises(KeyError):\n            collection[model1b]\n\n    def test_delitem_index(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        collection = PolymorphicChildBase.collection([model1, model2, model3])\n\n        del collection[1]\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_delitem_key(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        collection = PolymorphicChildBase.collection([model1, model2, model3])\n\n        del collection['model-2']\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_delitem_object(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        collection = PolymorphicChildBase.collection([model1, model2, model3])\n\n        del collection[model2]\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n    def test_append(self):\n        collection = PolymorphicChildBase.collection()\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.append(model1)\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model1])\n\n        collection.append(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        with self.assertRaises(ValueError):\n            collection.append(model1b)\n\n    def test_add(self):\n        collection = PolymorphicChildBase.collection()\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.add(model1)\n\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model1])\n\n        collection.add(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        collection.add(model1b)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1b, model2])\n\n    def test_extend(self):\n        collection = PolymorphicChildBase.collection()\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.extend([model1, model2])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        with self.assertRaises(ValueError):\n            collection.extend([model1b])\n\n        collection = PolymorphicChildBase.collection()\n        with self.assertRaises(ValueError):\n            collection.extend([model1, model2, model1b])\n\n    def test_update(self):\n        collection = PolymorphicChildBase.collection()\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n\n        self.assertEqual(len(collection), 0)\n\n        collection.update([model1, model2])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model2])\n\n        collection.update([model2, model1b])\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1b, model2])\n\n    def test_insert(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        model4 = PolymorphicChildModel2(id='model-4', field2=False)\n        model5 = PolymorphicChildModel1(id='model-5', field1=False)\n        collection = PolymorphicChildBase.collection([model1, model2])\n\n        collection.insert(1, model3)\n\n        self.assertEqual(len(collection), 3)\n        self.assertListEqual(collection, [model1, model3, model2])\n\n        collection.insert(0, model4)\n\n        self.assertEqual(len(collection), 4)\n        self.assertListEqual(collection, [model4, model1, model3, model2])\n\n        with self.assertRaises(TypeError):\n            collection.insert('model-2', model5)\n\n        collection.insert(1000, model5)\n\n        self.assertEqual(len(collection), 5)\n        self.assertListEqual(\n            collection, [model4, model1, model3, model2, model5])\n\n        # items in collection must be unique\n        with self.assertRaises(ValueError):\n            collection.insert(0, model2)\n\n    def test_remove(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        model4 = PolymorphicChildModel2(id='model-4', field2=False)\n        collection = PolymorphicChildBase.collection([model1, model2, model3])\n\n        collection.remove(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        with self.assertRaises(ValueError):\n            collection.remove(model4)\n        with self.assertRaises(ValidationError):\n            collection.remove('model-2')\n\n    def test_discard(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        model4 = PolymorphicChildModel2(id='model-4', field2=False)\n        collection = PolymorphicChildBase.collection([model1, model2, model3])\n\n        collection.discard(model2)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        collection.discard(model4)\n\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model1, model3])\n\n        with self.assertRaises(ValidationError):\n            collection.discard('model-2')\n\n    def test_pop(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        model3 = PolymorphicChildModel1(id='model-3', field1=False)\n        model4 = PolymorphicChildModel2(id='model-4', field2=False)\n        model5 = PolymorphicChildModel1(id='model-5', field1=False)\n        collection = PolymorphicChildBase.collection(\n            [model1, model2, model3, model4, model5])\n\n        self.assertEqual(collection.pop(), model5)\n        self.assertEqual(len(collection), 4)\n        self.assertListEqual(collection, [model1, model2, model3, model4])\n\n        self.assertEqual(collection.pop(2), model3)\n        self.assertEqual(len(collection), 3)\n        self.assertListEqual(collection, [model1, model2, model4])\n\n        with self.assertRaises(IndexError):\n            collection.pop(1000)\n\n        self.assertEqual(collection.pop('model-1'), model1)\n        self.assertEqual(len(collection), 2)\n        self.assertListEqual(collection, [model2, model4])\n\n        with self.assertRaises(KeyError):\n            collection.pop('model-1')\n\n        self.assertEqual(collection.pop(model4), model4)\n        self.assertEqual(len(collection), 1)\n        self.assertListEqual(collection, [model2])\n\n        with self.assertRaises(KeyError):\n            collection.pop(model4)\n\n    def test_get(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model1b = PolymorphicChildModel1(id='model-1', field1=True)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        collection = PolymorphicChildBase.collection([model1])\n\n        default = object()\n        self.assertEqual(collection.get(0, default), model1)\n        self.assertEqual(collection.get('model-1', default), model1)\n        self.assertEqual(collection.get(model1, default), model1)\n        self.assertEqual(collection.get(model1b, default), model1)\n        self.assertIs(collection.get(1, default), default)\n        self.assertIs(collection.get('model-2', default), default)\n        self.assertIs(collection.get(model2, default), default)\n\n    def test_clear(self):\n        model1 = PolymorphicChildModel1(id='model-1', field1=False)\n        model2 = PolymorphicChildModel2(id='model-2', field2=False)\n        collection = PolymorphicChildBase.collection([model1, model2])\n\n        collection.clear()\n\n        self.assertEqual(len(collection), 0)\n        self.assertListEqual(collection, [])\n\n    def test_validation(self):\n        collection = PolymorphicChildBase.collection()\n\n        with self.assertRaises(ValidationError):\n            collection.append(ChildModel(id='model-1'))\n        with self.assertRaises(ValidationError):\n            collection.add(ChildModel(id='model-2'))\n\n    def test_dump(self):\n        collection = PolymorphicChildBase.collection([\n            PolymorphicChildModel1(id='model-1', field1=False),\n            PolymorphicChildModel2(id='model-2', field2=True),\n        ])\n\n        self.assertEqual(collection.dump(), [\n            {\n                'type': 'PolymorphicChildModel1',\n                'id': 'model-1',\n                'field1': False,\n                'parent': None,\n            },\n            {\n                '_type_': 'PolymorphicChildModel2',\n                'id': 'model-2',\n                'field2': True,\n                'parent': None,\n            },\n        ])\n\n    def test_dumps(self):\n        collection = PolymorphicChildBase.collection([\n            PolymorphicChildModel1(id='model-1', field1=False),\n            PolymorphicChildModel2(id='model-3', field2=False),\n            PolymorphicChildModel1(id='model-2', field1=True),\n        ])\n\n        # Object keys should be sorted, collection should maintain order\n        self.assertEqual(\n            collection.dumps(),\n            '[\\n'\n            '    {\\n'\n            '        \"field1\": false, \\n'\n            '        \"id\": \"model-1\", \\n'\n            '        \"parent\": null, \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '        \"field2\": false, \\n'\n            '        \"id\": \"model-3\", \\n'\n            '        \"parent\": null\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"field1\": true, \\n'\n            '        \"id\": \"model-2\", \\n'\n            '        \"parent\": null, \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }\\n'\n            ']')\n"
  },
  {
    "path": "portia_server/portia_orm/tests/test_model.py",
    "content": "from unittest import mock\n\nfrom .utils import DataStoreTestCase, mock_storage\nfrom ..exceptions import ValidationError\nfrom ..models import (\n    Project, Schema, Field, Extractor, Spider, Sample, BaseAnnotation, Item,\n    Annotation, SLYBOT_VERSION)\n\n\nclass ProjectTestCase(DataStoreTestCase):\n    def setUp(self):\n        super(ProjectTestCase, self).setUp()\n        self.storage = mock_storage(self.get_storage_files())\n\n    def get_storage_files(self):\n        return {\n            'project.json':\n                '{'\n                '    \"id\": \"example\",'\n                '    \"name\": \"example\"'\n                '}',\n            'items.json':\n                '{'\n                '    \"1664-4f20-b657\": {'\n                '        \"auto_created\": true,'\n                '        \"fields\": {'\n                '            \"fbec-4a42-a4b0\": {'\n                '                \"auto_created\": true,'\n                '                \"id\": \"fbec-4a42-a4b0\",'\n                '                \"name\": \"title\",'\n                '                \"required\": true,'\n                '                \"type\": \"text\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"cca5-490c-b604\": {'\n                '                \"id\": \"cca5-490c-b604\",'\n                '                \"name\": \"price\",'\n                '                \"required\": true,'\n                '                \"type\": \"price\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"34bc-406f-80bc\": {'\n                '                \"id\": \"34bc-406f-80bc\",'\n                '                \"name\": \"image\",'\n                '                \"required\": false,'\n                '                \"type\": \"image\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"ecfc-4dbe-b488\": {'\n                '                \"id\": \"ecfc-4dbe-b488\",'\n                '                \"name\": \"details\",'\n                '                \"required\": false,'\n                '                \"type\": \"text\",'\n                '                \"vary\": false'\n                '            }'\n                '        },'\n                '        \"name\": \"product\"'\n                '    },'\n                '    \"fa87-4791-8642\": {'\n                '        \"fields\": {},'\n                '        \"name\": \"other\"'\n                '    }'\n                '}',\n            'extractors.json':\n                '{'\n                '    \"e6fc-4758-9e6b\": {'\n                '        \"id\": \"e6fc-4758-9e6b\",'\n                '        \"regular_expression\": \"\\\\\\\\$(\\\\\\\\d+(?:\\\\\\\\.\\\\\\\\d{2}))\"'\n                '    },'\n                '    \"154f-45ce-bfbd\": {'\n                '        \"id\": \"154f-45ce-bfbd\",'\n                '        \"type_extractor\": \"number\"'\n                '    }'\n                '}',\n            'spiders/shop-crawler.json':\n                '{'\n                '    \"allowed_domains\": [],'\n                '    \"exclude_patterns\": [],'\n                '    \"follow_patterns\": [],'\n                '    \"id\": \"shop-crawler\",'\n                '    \"init_requests\": ['\n                '        {'\n                '            \"type\": \"login\",'\n                '            \"loginurl\": \"http://shop.example.com/login\",'\n                '            \"username\": \"user\",'\n                '            \"password\": \"pass\"'\n                '        }'\n                '    ],'\n                '    \"js_disable_patterns\": [],'\n                '    \"js_enable_patterns\": [],'\n                '    \"js_enabled\": false,'\n                '    \"links_to_follow\": \"all\",'\n                '    \"name\": \"shop-crawler\",'\n                '    \"project\": \"example\",'\n                '    \"respect_nofollow\": true,'\n                '    \"start_urls\": [\\n'\n                '        {\\n'\n                '            \"type\": \"url\", \\n'\n                '            \"url\": \"http://example.com/\"\\n'\n                '        }\\n'\n                '    ], \\n'\n                '    \"template_names\": ['\n                '        \"1ddc-4043-ac4d\"'\n                '    ]'\n                '}',\n            'spiders/shop-crawler/1ddc-4043-ac4d.json':\n                '{'\n                '    \"id\": \"1ddc-4043-ac4d\",'\n                '    \"name\": \"example\",'\n                '    \"url\": \"http://example.com\",'\n                '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\",'\n                '    \"page_type\": \"item\",'\n                '    \"spider\": \"shop-crawler\",'\n                '    \"scrapes\": \"1664-4f20-b657\",'\n                '    \"plugins\": {'\n                '        \"annotations-plugin\": {'\n                '            \"extracts\": ['\n                '                {'\n                '                    \"id\": \"1e47-4833-a4d4\",'\n                '                    \"container_id\": \"1e47-4833-a4d4#parent\",'\n                '                    \"schema_id\": \"1664-4f20-b657\",'\n                '                    \"item_container\": true,'\n                '                    \"selector\": \".main\",'\n                '                    \"repeated\": true,'\n                '                    \"siblings\": 0,'\n                '                    \"required\": [],'\n                '                    \"tagid\": 18,'\n                '                    \"text-content\": \"#portia-content\",'\n                '                    \"annotations\": {'\n                '                        \"#portia-content\": \"#dummy\"'\n                '                    }'\n                '                },'\n                '                {'\n                '                    \"id\": \"1e47-4833-a4d4#parent\",'\n                '                    \"container_id\": null,'\n                '                    \"schema_id\": \"1664-4f20-b657\",'\n                '                    \"item_container\": true,'\n                '                    \"selector\": \"body\",'\n                '                    \"repeated\": false,'\n                '                    \"siblings\": 0,'\n                '                    \"required\": [],'\n                '                    \"tagid\": 18,'\n                '                    \"text-content\": \"#portia-content\",'\n                '                    \"annotations\": {'\n                '                        \"#portia-content\": \"#dummy\"'\n                '                    }'\n                '                },'\n                '                {'\n                '                    \"id\": \"3606-4d68-a6a0\",'\n                '                    \"container_id\": \"1e47-4833-a4d4\",'\n                '                    \"selection_mode\": \"auto\",'\n                '                    \"selector\": \".main > h1\",'\n                '                    \"accept_selectors\": ['\n                '                        \".main:nth-child(1) > h1\",'\n                '                        \".main:nth-child(2) > h1\"'\n                '                    ],'\n                '                    \"reject_selectors\": [],'\n                '                    \"data\": {'\n                '                        \"d1e2-4673-a72a\": {'\n                '                            \"field\": \"fbec-4a42-a4b0\",'\n                '                            \"attribute\": \"content\",'\n                '                            \"required\": false,'\n                '                            \"extractors\": {}'\n                '                        }'\n                '                    },'\n                '                    \"pre_text\": null,'\n                '                    \"post_text\": null,'\n                '                    \"tagid\": null,'\n                '                    \"required\": []'\n                '                },'\n                '                {'\n                '                    \"id\": \"5c18-40cf-8809\",'\n                '                    \"container_id\": \"1e47-4833-a4d4\",'\n                '                    \"selection_mode\": \"auto\",'\n                '                    \"selector\": \".main > img\",'\n                '                    \"accept_selectors\": ['\n                '                        \".main:nth-child(1) > img\"'\n                '                    ],'\n                '                    \"reject_selectors\": [],'\n                '                    \"data\": {'\n                '                        \"de35-49b5-b90b\": {'\n                '                            \"field\": \"34bc-406f-80bc\",'\n                '                            \"attribute\": \"content\",'\n                '                            \"required\": false,'\n                '                            \"extractors\": ['\n                '                                \"e6fc-4758-9e6b\",'\n                '                                \"154f-45ce-bfbd\"'\n                '                            ]'\n                '                        }'\n                '                    },'\n                '                    \"pre_text\": null,'\n                '                    \"post_text\": null,'\n                '                    \"tagid\": null,'\n                '                    \"required\": []'\n                '                }'\n                '            ]'\n                '        }'\n                '    },'\n                '    \"version\": \"' + SLYBOT_VERSION + '\"'\n                '}',\n            'spiders/shop-crawler/1ddc-4043-ac4d/original_body.html': (\n                '<html></html>'),\n            'spiders/shop-crawler/1ddc-4043-ac4d/rendered_body.html': (\n                '<html></html>'),\n        }\n\n\nclass ProjectTests(ProjectTestCase):\n    def test_project(self):\n        project = Project(id='project-1')\n        self.assertEqual(project.dump(), {\n            'id': 'project-1',\n        })\n\n    def test_load(self):\n        project = Project(self.storage, id='example', name='example')\n        self.assertEqual(project.dump(), {\n            'id': 'example',\n            'name': 'example',\n        })\n        self.storage.open.assert_not_called()\n\n    def test_save(self):\n        project = Project(self.storage, id='example')\n        project.save()\n\n        self.storage.open.assert_called_once_with('project.json')\n        self.storage.save.assert_not_called()\n\n        project.name = 'test'\n        project.save()\n\n        self.storage.open.assert_called_once_with('project.json')\n        self.storage.save.assert_called_once_with('project.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['project.json'],\n            '{\\n'\n            '    \"id\": \"example\", \\n'\n            '    \"name\": \"test\"\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        project.delete()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('extractors.json', mock.ANY)], any_order=True)\n        self.assertEqual(self.storage.delete.call_count, 3)\n        self.storage.delete.assert_has_calls([\n            mock.call('project.json'),\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n\nclass SchemaTests(ProjectTestCase):\n    def test_no_fields(self):\n        schema = Schema(id='schema-1', name='default', auto_created=True)\n\n        self.assertEqual(len(schema.fields), 0)\n        self.assertEqual(schema.dump(), {\n            'schema-1': {\n                'name': 'default',\n                'fields': {},\n                'auto_created': True,\n            },\n        })\n\n    def test_fields(self):\n        schema = Schema(id='schema-1', name='default')\n        Field(id='field-1', name='name', schema=schema)\n        Field(id='field-2', name='url', type='url', schema=schema)\n\n        self.assertEqual(schema.dump(), {\n            'schema-1': {\n                'name': 'default',\n                'fields': {\n                    'field-1': {\n                        'id': 'field-1',\n                        'name': 'name',\n                        'type': 'text',\n                        'required': False,\n                        'vary': False,\n                    },\n                    'field-2': {\n                        'id': 'field-2',\n                        'name': 'url',\n                        'type': 'url',\n                        'required': False,\n                        'vary': False,\n                    },\n                },\n            },\n        })\n\n    def test_collection(self):\n        schemas = Schema.collection([\n            Schema(id='schema-1', name='default', fields=[\n                Field(id='field-1', name='name'),\n            ]),\n            Schema(id='schema-2', name='other', fields=[\n                Field(id='field-2', name='xxx'),\n            ]),\n        ])\n\n        self.assertEqual(schemas.dump(), {\n            'schema-1': {\n                'name': 'default',\n                'fields': {\n                    'field-1': {\n                        'id': 'field-1',\n                        'name': 'name',\n                        'type': 'text',\n                        'required': False,\n                        'vary': False,\n                    },\n                },\n            },\n            'schema-2': {\n                'name': 'other',\n                'fields': {\n                    'field-2': {\n                        'id': 'field-2',\n                        'name': 'xxx',\n                        'type': 'text',\n                        'required': False,\n                        'vary': False,\n                    },\n                },\n            },\n        })\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        schemas = project.schemas\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertIsInstance(schemas, Schema.collection)\n        self.assertEqual(schemas.dump(), {\n            '1664-4f20-b657': {\n                'name': 'product',\n                'auto_created': True,\n                'fields': {\n                    'fbec-4a42-a4b0': {\n                        'auto_created': True,\n                        'id': 'fbec-4a42-a4b0',\n                        'name': 'title',\n                        'type': 'text',\n                        'required': True,\n                        'vary': False,\n                    },\n                    \"cca5-490c-b604\": {\n                        \"id\": \"cca5-490c-b604\",\n                        \"name\": \"price\",\n                        \"required\": True,\n                        \"type\": \"price\",\n                        \"vary\": False\n                    },\n                    \"34bc-406f-80bc\": {\n                        \"id\": \"34bc-406f-80bc\",\n                        \"name\": \"image\",\n                        \"required\": False,\n                        \"type\": \"image\",\n                        \"vary\": False\n                    },\n                    \"ecfc-4dbe-b488\": {\n                        \"id\": \"ecfc-4dbe-b488\",\n                        \"name\": \"details\",\n                        \"required\": False,\n                        \"type\": \"text\",\n                        \"vary\": False\n                    }\n                },\n            },\n            'fa87-4791-8642': {\n                'name': 'other',\n                'fields': {},\n            },\n        })\n        self.assertListEqual(list(schemas.keys()),\n                             ['1664-4f20-b657', 'fa87-4791-8642'])\n\n    def test_load_through_partial(self):\n        schema = Schema(self.storage, id='1664-4f20-b657')\n        self.storage.open.assert_not_called()\n        self.assertEqual(schema.dump(), {\n            '1664-4f20-b657': {\n                'name': 'product',\n                'auto_created': True,\n                'fields': {\n                    'fbec-4a42-a4b0': {\n                        'auto_created': True,\n                        'id': 'fbec-4a42-a4b0',\n                        'name': 'title',\n                        'type': 'text',\n                        'required': True,\n                        'vary': False,\n                    },\n                    \"cca5-490c-b604\": {\n                        \"id\": \"cca5-490c-b604\",\n                        \"name\": \"price\",\n                        \"required\": True,\n                        \"type\": \"price\",\n                        \"vary\": False\n                    },\n                    \"34bc-406f-80bc\": {\n                        \"id\": \"34bc-406f-80bc\",\n                        \"name\": \"image\",\n                        \"required\": False,\n                        \"type\": \"image\",\n                        \"vary\": False\n                    },\n                    \"ecfc-4dbe-b488\": {\n                        \"id\": \"ecfc-4dbe-b488\",\n                        \"name\": \"details\",\n                        \"required\": False,\n                        \"type\": \"text\",\n                        \"vary\": False\n                    }\n                },\n            },\n        })\n        self.storage.open.assert_called_once_with('items.json')\n\n    def test_save_edit(self):\n        schema = Project(self.storage, id='example').schemas['1664-4f20-b657']\n        schema.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_not_called()\n\n        schema.name = 'test'\n        schema.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"test\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n        schema.id = 'xxxx-xxxx-xxxx'\n        schema.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"test\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_save_new(self):\n        project = Project(self.storage, id='example')\n        schema = Schema(self.storage, id='xxxx-xxxx-xxxx', name='test1',\n                        project=project)\n        schema.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }, \\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"test1\"\\n'\n            '    }\\n'\n            '}')\n\n        project.schemas.insert(\n            0, Schema(self.storage, id='yyyy-yyyy-yyyy', name='test2'))\n        project.schemas[0].save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"yyyy-yyyy-yyyy\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"test2\"\\n'\n            '    }, \\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }, \\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"test1\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        schema = project.schemas['1664-4f20-b657']\n        schema.delete()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n        self.storage.delete.assert_not_called()\n        self.assertListEqual(list(project.schemas.keys()), ['fa87-4791-8642'])\n\n\nclass FieldTests(ProjectTestCase):\n    def test_minimal_field(self):\n        field = Field(id='field-1', name='url')\n\n        self.assertEqual(field.dump(), {\n            'field-1': {\n                'id': 'field-1',\n                'name': 'url',\n                'type': 'text',\n                'required': False,\n                'vary': False,\n            },\n        })\n\n    def test_full_field(self):\n        field = Field(id='field-1', name='url', type='url',\n                      required=True, vary=True, auto_created=True)\n\n        self.assertEqual(field.dump(), {\n            'field-1': {\n                'id': 'field-1',\n                'name': 'url',\n                'type': 'url',\n                'required': True,\n                'vary': True,\n                'auto_created': True,\n            },\n        })\n\n    def test_field_types(self):\n        field = Field(id='field-1', name='url')\n\n        try:\n            field.type = 'image'\n            field.type = 'number'\n            field.type = 'url'\n        except ValidationError:\n            self.fail(\n                \"Assigning to type attribute failed validation\")\n\n        with self.assertRaises(ValidationError):\n            field.type = 'xxx'\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        fields = project.schemas['1664-4f20-b657'].fields\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertIsInstance(fields, Field.collection)\n        self.assertEqual(fields.dump(), {\n            'fbec-4a42-a4b0': {\n                'auto_created': True,\n                'id': 'fbec-4a42-a4b0',\n                'name': 'title',\n                'type': 'text',\n                'required': True,\n                'vary': False,\n            },\n            \"cca5-490c-b604\": {\n                \"id\": \"cca5-490c-b604\",\n                \"name\": \"price\",\n                \"required\": True,\n                \"type\": \"price\",\n                \"vary\": False\n            },\n            \"34bc-406f-80bc\": {\n                \"id\": \"34bc-406f-80bc\",\n                \"name\": \"image\",\n                \"required\": False,\n                \"type\": \"image\",\n                \"vary\": False\n            },\n            \"ecfc-4dbe-b488\": {\n                \"id\": \"ecfc-4dbe-b488\",\n                \"name\": \"details\",\n                \"required\": False,\n                \"type\": \"text\",\n                \"vary\": False\n            },\n        })\n        self.assertListEqual(list(fields.keys()),\n                             ['fbec-4a42-a4b0', \"cca5-490c-b604\",\n                              \"34bc-406f-80bc\", \"ecfc-4dbe-b488\"])\n\n    def test_load_through_partial(self):\n        field = Field(self.storage, id='ecfc-4dbe-b488')\n        self.assertEqual(field.dump(), {\n            \"ecfc-4dbe-b488\": {\n                \"id\": \"ecfc-4dbe-b488\",\n                \"name\": \"details\",\n                \"required\": False,\n                \"type\": \"text\",\n                \"vary\": False\n            },\n        })\n        self.storage.open.assert_called_once_with('items.json')\n\n    def test_save_edit(self):\n        schemas = Project(self.storage, id='example').schemas\n        field = schemas['1664-4f20-b657'].fields['fbec-4a42-a4b0']\n        field.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_not_called()\n\n        field.name = 'test'\n        field.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"test\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n        field.id = 'xxxx-xxxx-xxxx'\n        field.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"xxxx-xxxx-xxxx\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '                \"name\": \"test\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_save_new(self):\n        schema = Project(self.storage, id='example').schemas['1664-4f20-b657']\n        field = Field(self.storage, id='xxxx-xxxx-xxxx', name='test1',\n                      schema=schema)\n        field.save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"xxxx-xxxx-xxxx\": {\\n'\n            '                \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '                \"name\": \"test1\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n        schema.fields.insert(\n            0, Field(self.storage, id='yyyy-yyyy-yyyy', name='test2'))\n        schema.fields[0].save()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"yyyy-yyyy-yyyy\": {\\n'\n            '                \"id\": \"yyyy-yyyy-yyyy\", \\n'\n            '                \"name\": \"test2\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"fbec-4a42-a4b0\": {\\n'\n            '                \"auto_created\": true, \\n'\n            '                \"id\": \"fbec-4a42-a4b0\", \\n'\n            '                \"name\": \"title\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"xxxx-xxxx-xxxx\": {\\n'\n            '                \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '                \"name\": \"test1\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_delete(self):\n        schema = Project(self.storage, id='example').schemas['1664-4f20-b657']\n        field = schema.fields['fbec-4a42-a4b0']\n        field.delete()\n\n        self.storage.open.assert_called_once_with('items.json')\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n        self.storage.delete.assert_not_called()\n        self.assertListEqual(list(schema.fields.keys()),\n                             ['cca5-490c-b604', '34bc-406f-80bc',\n                              'ecfc-4dbe-b488'])\n\n\nclass ExtractorTests(ProjectTestCase):\n    def test_type_extractor(self):\n        extractor = Extractor(id='extractor-1', type='type', value='url')\n\n        self.assertEqual(extractor.dump(), {\n            'extractor-1': {\n                'id': 'extractor-1',\n                'type_extractor': 'url',\n            },\n        })\n\n        try:\n            extractor.value = 'image'\n            extractor.value = 'number'\n            extractor.value = 'text'\n        except ValidationError:\n            self.fail(\n                \"Assigning to value attribute failed validation\")\n\n        with self.assertRaises(ValidationError):\n            extractor.value = 'xxx'\n\n    def test_regexp_extractor(self):\n        extractor = Extractor(id='extractor-1', type='regex', value='(.+)')\n\n        self.assertEqual(extractor.dump(), {\n            'extractor-1': {\n                'id': 'extractor-1',\n                'regular_expression': '(.+)',\n            },\n        })\n\n        try:\n            extractor.value = '[xy]'\n        except ValidationError:\n            self.fail(\n                \"Assigning to value attribute failed validation\")\n\n        with self.assertRaises(ValidationError):\n            extractor.value = '[xy'\n\n        self.assertEqual(extractor.dump(), {\n            'extractor-1': {\n                'id': 'extractor-1',\n                'regular_expression': '[xy]',\n            },\n        })\n\n    def test_extractor_type(self):\n        extractor = Extractor(id='extractor-1', type='type', value='text')\n        try:\n            extractor.type = 'regex'\n            extractor.type = 'type'\n        except ValidationError:\n            self.fail(\n                \"Assigning to type attribute failed validation\")\n\n        with self.assertRaises(ValidationError):\n            extractor.type = 'xxx'\n\n    def test_collection(self):\n        extractors = Extractor.collection([\n            Extractor(id='extractor-1', type='type', value='url'),\n            Extractor(id='extractor-2', type='regex', value='(.+)'),\n        ])\n\n        self.assertEqual(extractors.dump(), {\n            'extractor-1': {\n                'id': 'extractor-1',\n                'type_extractor': 'url',\n            },\n            'extractor-2': {\n                'id': 'extractor-2',\n                'regular_expression': '(.+)',\n            },\n        })\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        extractors = project.extractors\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.assertIsInstance(extractors, Extractor.collection)\n        self.assertEqual(extractors.dump(), {\n            \"e6fc-4758-9e6b\": {\n                \"id\": \"e6fc-4758-9e6b\",\n                \"regular_expression\": \"\\\\$(\\\\d+(?:\\\\.\\\\d{2}))\",\n            },\n            \"154f-45ce-bfbd\": {\n                \"id\": \"154f-45ce-bfbd\",\n                \"type_extractor\": \"number\",\n            },\n        })\n        self.assertListEqual(list(extractors.keys()),\n                             ['e6fc-4758-9e6b', \"154f-45ce-bfbd\"])\n\n    def test_load_through_partial(self):\n        extractor = Extractor(self.storage, id='e6fc-4758-9e6b')\n        self.assertEqual(extractor.dump(), {\n            \"e6fc-4758-9e6b\": {\n                \"id\": \"e6fc-4758-9e6b\",\n                \"regular_expression\": \"\\\\$(\\\\d+(?:\\\\.\\\\d{2}))\",\n            },\n        })\n        self.storage.open.assert_called_once_with('extractors.json')\n\n    def test_save_edit(self):\n        extractor = Project(\n            self.storage, id='example').extractors['e6fc-4758-9e6b']\n        extractor.save()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.storage.save.assert_not_called()\n\n        extractor.value = 'test'\n        extractor.save()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.storage.save.assert_called_once_with('extractors.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['extractors.json'],\n            '{\\n'\n            '    \"e6fc-4758-9e6b\": {\\n'\n            '        \"id\": \"e6fc-4758-9e6b\", \\n'\n            '        \"regular_expression\": \"test\"\\n'\n            '    }, \\n'\n            '    \"154f-45ce-bfbd\": {\\n'\n            '        \"id\": \"154f-45ce-bfbd\", \\n'\n            '        \"type_extractor\": \"number\"\\n'\n            '    }\\n'\n            '}')\n\n        extractor.id = 'xxxx-xxxx-xxxx'\n        extractor.save()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('extractors.json', mock.ANY),\n            mock.call('extractors.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['extractors.json'],\n            '{\\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '        \"regular_expression\": \"test\"\\n'\n            '    }, \\n'\n            '    \"154f-45ce-bfbd\": {\\n'\n            '        \"id\": \"154f-45ce-bfbd\", \\n'\n            '        \"type_extractor\": \"number\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_save_new(self):\n        project = Project(self.storage, id='example')\n        extractor = Extractor(self.storage, id='xxxx-xxxx-xxxx',\n                              type='regex', value='test1',\n                              project=project)\n        extractor.save()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.storage.save.assert_called_once_with('extractors.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['extractors.json'],\n            '{\\n'\n            '    \"e6fc-4758-9e6b\": {\\n'\n            '        \"id\": \"e6fc-4758-9e6b\", \\n'\n            '        \"regular_expression\": \"\\\\\\\\$(\\\\\\\\d+(?:\\\\\\\\.\\\\\\\\d{2}))\"\\n'\n            '    }, \\n'\n            '    \"154f-45ce-bfbd\": {\\n'\n            '        \"id\": \"154f-45ce-bfbd\", \\n'\n            '        \"type_extractor\": \"number\"\\n'\n            '    }, \\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '        \"regular_expression\": \"test1\"\\n'\n            '    }\\n'\n            '}')\n\n        project.extractors.insert(\n            0, Extractor(self.storage, id='yyyy-yyyy-yyyy',\n                         type='regex', value='test2'))\n        project.extractors[0].save()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('extractors.json', mock.ANY),\n            mock.call('extractors.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['extractors.json'],\n            '{\\n'\n            '    \"yyyy-yyyy-yyyy\": {\\n'\n            '        \"id\": \"yyyy-yyyy-yyyy\", \\n'\n            '        \"regular_expression\": \"test2\"\\n'\n            '    }, \\n'\n            '    \"e6fc-4758-9e6b\": {\\n'\n            '        \"id\": \"e6fc-4758-9e6b\", \\n'\n            '        \"regular_expression\": \"\\\\\\\\$(\\\\\\\\d+(?:\\\\\\\\.\\\\\\\\d{2}))\"\\n'\n            '    }, \\n'\n            '    \"154f-45ce-bfbd\": {\\n'\n            '        \"id\": \"154f-45ce-bfbd\", \\n'\n            '        \"type_extractor\": \"number\"\\n'\n            '    }, \\n'\n            '    \"xxxx-xxxx-xxxx\": {\\n'\n            '        \"id\": \"xxxx-xxxx-xxxx\", \\n'\n            '        \"regular_expression\": \"test1\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        extractor = project.extractors['e6fc-4758-9e6b']\n        extractor.delete()\n\n        self.storage.open.assert_called_once_with('extractors.json')\n        self.storage.save.assert_called_once_with('extractors.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['extractors.json'],\n            '{\\n'\n            '    \"154f-45ce-bfbd\": {\\n'\n            '        \"id\": \"154f-45ce-bfbd\", \\n'\n            '        \"type_extractor\": \"number\"\\n'\n            '    }\\n'\n            '}')\n        self.storage.delete.assert_not_called()\n        self.assertListEqual(list(project.extractors.keys()),\n                             ['154f-45ce-bfbd'])\n\n\nclass SpiderTests(ProjectTestCase):\n    def test_minimal_spider(self):\n        spider = Spider(id='spider-1')\n        spider.start_urls.append({'type': 'url', 'url': 'http://example.com'})\n\n        self.assertEqual(spider.dump(), {\n            'id': 'spider-1',\n            'start_urls': [{\n                'type': 'url',\n                'url': 'http://example.com',\n            }],\n            'links_to_follow': \"all\",\n            'allowed_domains': [],\n            'respect_nofollow': True,\n            'follow_patterns': [],\n            'exclude_patterns': [],\n            'js_enabled': False,\n            'js_enable_patterns': [],\n            'js_disable_patterns': [],\n        })\n\n    def test_full_spider(self):\n        spider = Spider(\n            id='spider-1',\n            start_urls=[{'type': 'url', 'url': 'http://example.com'}],\n            links_to_follow=\"none\",\n            allowed_domains=['example.com'],\n            respect_nofollow=False,\n            follow_patterns=['.*'],\n            exclude_patterns=['.*ignore.*'],\n            js_enabled=True,\n            js_enable_patterns=['.*'],\n            js_disable_patterns=['.*ignore.*'],\n            perform_login=True,\n            login_url='http://shop.example.com/login',\n            login_user='user',\n            login_password='pass',\n            samples=[\n                Sample(id='sample-1'),\n            ],\n        )\n\n        self.assertEqual(spider.dump(), {\n            'id': 'spider-1',\n            'start_urls': [{\n                'type': 'url',\n                'url': 'http://example.com'\n            }],\n            'links_to_follow': \"none\",\n            'allowed_domains': [\n                'example.com',\n            ],\n            'respect_nofollow': False,\n            'follow_patterns': [\n                '.*',\n            ],\n            'exclude_patterns': [\n                '.*ignore.*',\n            ],\n            'js_enabled': True,\n            'js_enable_patterns': [\n                '.*',\n            ],\n            'js_disable_patterns': [\n                '.*ignore.*',\n            ],\n            'init_requests': [\n                {\n                    'type': 'login',\n                    'loginurl': 'http://shop.example.com/login',\n                    'username': 'user',\n                    'password': 'pass'\n                }\n            ],\n        })\n\n    def test_links_to_follow(self):\n        spider = Spider(id='spider-1')\n\n        try:\n            spider.links_to_follow = 'patterns'\n            spider.links_to_follow = 'auto'\n            spider.links_to_follow = 'none'\n            spider.links_to_follow = 'all'\n        except ValidationError:\n            self.fail(\n                \"Assigning to type attribute failed validation\")\n\n        with self.assertRaises(ValidationError):\n            spider.links_to_follow = 'xxx'\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        spiders = project.spiders\n        self.assertListEqual(list(spiders.keys()), ['shop-crawler'])\n        self.assertIsInstance(spiders, Spider.collection)\n        self.storage.open.assert_not_called()\n        self.storage.listdir.assert_called_once_with('spiders')\n        self.assertEqual(spiders.dump(), [\n            {\n                \"id\": \"shop-crawler\",\n                # \"name\": \"shop-crawler\",\n                \"start_urls\": [{\n                    \"type\": \"url\",\n                    \"url\": \"http://example.com/\"\n                }],\n                \"links_to_follow\": \"all\",\n                \"allowed_domains\": [],\n                \"respect_nofollow\": True,\n                \"follow_patterns\": [],\n                \"exclude_patterns\": [],\n                \"js_enabled\": False,\n                \"js_enable_patterns\": [],\n                \"js_disable_patterns\": [],\n                \"init_requests\": [\n                    {\n                        \"type\": \"login\",\n                        \"loginurl\": \"http://shop.example.com/login\",\n                        \"username\": \"user\",\n                        \"password\": \"pass\"\n                    }\n                ],\n            },\n        ])\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n\n    def test_load_through_partial(self):\n        spider = Spider(self.storage, id='shop-crawler')\n        self.assertEqual(spider.dump(), {\n            \"id\": \"shop-crawler\",\n            # \"name\": \"shop-crawler\",\n            \"start_urls\": [{\n                \"type\": \"url\",\n                \"url\": \"http://example.com/\"\n            }],\n            \"links_to_follow\": \"all\",\n            \"allowed_domains\": [],\n            \"respect_nofollow\": True,\n            \"follow_patterns\": [],\n            \"exclude_patterns\": [],\n            \"js_enabled\": False,\n            \"js_enable_patterns\": [],\n            \"js_disable_patterns\": [],\n            \"init_requests\": [\n                {\n                    \"type\": \"login\",\n                    \"loginurl\": \"http://shop.example.com/login\",\n                    \"username\": \"user\",\n                    \"password\": \"pass\"\n                }\n            ],\n        })\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n\n    def test_save_edit(self):\n        spider = Project(self.storage, id='example').spiders['shop-crawler']\n        spider.save()\n\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n        self.storage.save.assert_not_called()\n\n        spider.follow_patterns.append('test')\n        spider.save()\n\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [\\n'\n            '        \"test\"\\n'\n            '    ], \\n'\n            '    \"id\": \"shop-crawler\", \\n'\n            '    \"init_requests\": [\\n'\n            '        {\\n'\n            '            \"type\": \"login\", \\n'\n            '            \"loginurl\": \"http://shop.example.com/login\", \\n'\n            '            \"username\": \"user\", \\n'\n            '            \"password\": \"pass\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": [\\n'\n            '        {\\n'\n            '            \"type\": \"url\", \\n'\n            '            \"url\": \"http://example.com/\"\\n'\n            '        }\\n'\n            '    ]\\n'\n            '}')\n\n        spider.id = 'test-id'\n        spider.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 3)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler.json', mock.ANY),\n            mock.call('spiders/test-id.json', mock.ANY),\n            mock.call('spiders/test-id/1ddc-4043-ac4d.json', mock.ANY)])\n        self.assertEqual(self.storage.delete.call_count, 2)\n        self.storage.delete.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(\n            self.storage.files['spiders/test-id.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [\\n'\n            '        \"test\"\\n'\n            '    ], \\n'\n            '    \"id\": \"test-id\", \\n'\n            '    \"init_requests\": [\\n'\n            '        {\\n'\n            '            \"type\": \"login\", \\n'\n            '            \"loginurl\": \"http://shop.example.com/login\", \\n'\n            '            \"username\": \"user\", \\n'\n            '            \"password\": \"pass\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": [\\n'\n            '        {\\n'\n            '            \"type\": \"url\", \\n'\n            '            \"url\": \"http://example.com/\"\\n'\n            '        }\\n'\n            '    ]\\n'\n            '}')\n\n    def test_save_new(self):\n        project = Project(self.storage, id='example')\n        spider = Spider(self.storage, id='test1', project=project)\n        spider.save()\n\n        self.storage.open.assert_not_called()\n        self.storage.save.assert_called_once_with(\n            'spiders/test1.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/test1.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [], \\n'\n            '    \"id\": \"test1\", \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": []\\n'\n            '}')\n\n        project.spiders.insert(0, Spider(self.storage, id='test2'))\n        project.spiders[0].save()\n\n        self.storage.open.assert_not_called()\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/test1.json', mock.ANY),\n            mock.call('spiders/test2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/test2.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [], \\n'\n            '    \"id\": \"test2\", \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": []\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        project.schemas  # preload schemas\n        spider = project.spiders['shop-crawler']\n        spider.delete()\n\n        self.assertEqual(self.storage.open.call_count, 3)\n        self.storage.open.assert_has_calls([\n            mock.call('items.json'),\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_called_once_with('items.json', mock.ANY)\n        self.assertEqual(self.storage.delete.call_count, 2)\n        self.storage.delete.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertListEqual(list(project.spiders.keys()), [])\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n\nclass SampleTests(ProjectTestCase):\n    def test_minimal_sample(self):\n        sample = Sample(\n            id='sample-1',\n            name='example',\n            url='http://example.com')\n\n        self.assertEqual(sample.dump(), {\n            'id': 'sample-1',\n            'name': 'example',\n            'url': 'http://example.com',\n            'page_id': '',\n            'page_type': 'item',\n            'spider': None,\n            'scrapes': None,\n            'plugins': {\n                'annotations-plugin': {\n                    'extracts': [],\n                },\n            },\n            'extractors': {},\n            'version': SLYBOT_VERSION,\n        })\n\n    def test_full_sample(self):\n        sample = Sample(\n            id='sample-1',\n            name='example',\n            url='http://example.com',\n            page_id='test-id',\n            spider=Spider(id='spider-1'))\n\n        self.assertEqual(sample.dump(), {\n            'id': 'sample-1',\n            'name': 'example',\n            'url': 'http://example.com',\n            'page_id': 'test-id',\n            'page_type': 'item',\n            'spider': 'spider-1',\n            'scrapes': None,\n            'plugins': {\n                'annotations-plugin': {\n                    'extracts': [],\n                },\n            },\n            'extractors': {},\n            'version': SLYBOT_VERSION,\n        })\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        samples = project.spiders['shop-crawler'].samples\n        self.assertListEqual(list(samples.keys()), ['1ddc-4043-ac4d'])\n        self.assertIsInstance(samples, Sample.collection)\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n        self.assertEqual(samples.dump(), [\n            {\n                'id': '1ddc-4043-ac4d',\n                'name': 'example',\n                'url': 'http://example.com',\n                'page_id': 'ab5bbf650b32ca41af6f8e9976fc3c85eee87f67',\n                'page_type': 'item',\n                'spider': 'shop-crawler',\n                'scrapes': '1664-4f20-b657',\n                'plugins': {\n                    'annotations-plugin': {\n                        'extracts': [\n                            {\n                                'annotations': {\n                                    '#portia-content': '#dummy',\n                                },\n                                'container_id': None,\n                                'id': '1e47-4833-a4d4#parent',\n                                'item_container': True,\n                                'repeated': False,\n                                'required': [],\n                                'schema_id': '1664-4f20-b657',\n                                'selector': 'body',\n                                'siblings': 0,\n                                'tagid': None,\n                                'text-content': '#portia-content',\n                            },\n                            {\n                                'annotations': {\n                                    '#portia-content': '#dummy',\n                                },\n                                'container_id': '1e47-4833-a4d4#parent',\n                                'id': '1e47-4833-a4d4',\n                                'item_container': True,\n                                'repeated': True,\n                                'required': [],\n                                'schema_id': '1664-4f20-b657',\n                                'selector': '.main',\n                                'siblings': 0,\n                                'tagid': None,\n                                'text-content': '#portia-content',\n                            },\n                            {\n                                'accept_selectors': [\n                                    '.main:nth-child(1) > h1',\n                                    '.main:nth-child(2) > h1',\n                                ],\n                                'container_id': '1e47-4833-a4d4',\n                                'data': {\n                                    'd1e2-4673-a72a': {\n                                        'attribute': 'content',\n                                        'extractors': {},\n                                        'field': 'fbec-4a42-a4b0',\n                                        'required': False,\n                                    },\n                                },\n                                'id': '3606-4d68-a6a0',\n                                'text-content': 'content',\n                                'post_text': None,\n                                'pre_text': None,\n                                'reject_selectors': [],\n                                'repeated': False,\n                                'required': [],\n                                'selection_mode': 'auto',\n                                'selector': '.main > h1',\n                                'tagid': None,\n                                'xpath': None,\n                            },\n                            {\n                                'accept_selectors': [\n                                    '.main:nth-child(1) > img',\n                                ],\n                                'container_id': '1e47-4833-a4d4',\n                                'data': {\n                                    'de35-49b5-b90b': {\n                                        'attribute': 'content',\n                                        'extractors': [\n                                            'e6fc-4758-9e6b',\n                                            '154f-45ce-bfbd',\n                                        ],\n                                        'field': '34bc-406f-80bc',\n                                        'required': False,\n                                    },\n                                },\n                                'id': '5c18-40cf-8809',\n                                'text-content': 'content',\n                                'post_text': None,\n                                'pre_text': None,\n                                'reject_selectors': [],\n                                'repeated': False,\n                                'required': [],\n                                'selection_mode': 'auto',\n                                'selector': '.main > img',\n                                'tagid': None,\n                                'xpath': None,\n                            },\n                        ],\n                    },\n                },\n                'extractors': {},\n                'version': SLYBOT_VERSION,\n            },\n        ])\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_load_through_partial(self):\n        sample = Sample(self.storage, id='1ddc-4043-ac4d',\n                        spider=Spider(self.storage, id='shop-crawler'))\n        self.assertEqual(sample.dump(), {\n            'id': '1ddc-4043-ac4d',\n            'name': 'example',\n            'url': 'http://example.com',\n            'page_id': 'ab5bbf650b32ca41af6f8e9976fc3c85eee87f67',\n            'page_type': 'item',\n            'spider': 'shop-crawler',\n            'scrapes': '1664-4f20-b657',\n            'plugins': {\n                'annotations-plugin': {\n                    'extracts': [\n                        {\n                            'annotations': {\n                                '#portia-content': '#dummy',\n                            },\n                            'container_id': None,\n                            'id': '1e47-4833-a4d4#parent',\n                            'item_container': True,\n                            'repeated': False,\n                            'required': [],\n                            'schema_id': '1664-4f20-b657',\n                            'selector': 'body',\n                            'siblings': 0,\n                            'tagid': None,\n                            'text-content': '#portia-content',\n                        },\n                        {\n                            'annotations': {\n                                '#portia-content': '#dummy',\n                            },\n                            'container_id': '1e47-4833-a4d4#parent',\n                            'id': '1e47-4833-a4d4',\n                            'item_container': True,\n                            'repeated': True,\n                            'required': [],\n                            'schema_id': '1664-4f20-b657',\n                            'selector': '.main',\n                            'siblings': 0,\n                            'tagid': None,\n                            'text-content': '#portia-content',\n                        },\n                        {\n                            'accept_selectors': [\n                                '.main:nth-child(1) > h1',\n                                '.main:nth-child(2) > h1',\n                            ],\n                            'container_id': '1e47-4833-a4d4',\n                            'data': {\n                                'd1e2-4673-a72a': {\n                                    'attribute': 'content',\n                                    'extractors': {},\n                                    'field': 'fbec-4a42-a4b0',\n                                    'required': False,\n                                },\n                            },\n                            'id': '3606-4d68-a6a0',\n                            'text-content': 'content',\n                            'post_text': None,\n                            'pre_text': None,\n                            'reject_selectors': [],\n                            'required': [],\n                            'repeated': False,\n                            'selection_mode': 'auto',\n                            'selector': '.main > h1',\n                            'tagid': None,\n                            'xpath': None,\n                        },\n                        {\n                            'accept_selectors': [\n                                '.main:nth-child(1) > img',\n                            ],\n                            'container_id': '1e47-4833-a4d4',\n                            'data': {\n                                'de35-49b5-b90b': {\n                                    'attribute': 'content',\n                                    'extractors': [\n                                        'e6fc-4758-9e6b',\n                                        '154f-45ce-bfbd',\n                                    ],\n                                    'field': '34bc-406f-80bc',\n                                    'required': False,\n                                },\n                            },\n                            'id': '5c18-40cf-8809',\n                            'text-content': 'content',\n                            'post_text': None,\n                            'pre_text': None,\n                            'reject_selectors': [],\n                            'required': [],\n                            'repeated': False,\n                            'selection_mode': 'auto',\n                            'selector': '.main > img',\n                            'tagid': None,\n                            'xpath': None,\n                        },\n                    ],\n                },\n            },\n            'extractors': {},\n            'version': SLYBOT_VERSION,\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_save_edit(self):\n        sample = Sample(self.storage, id='1ddc-4043-ac4d',\n                        spider=Spider(self.storage, id='shop-crawler'))\n        sample.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_not_called()\n\n        sample.original_body.html = '<html id=\"#test\"></html>'\n        sample.original_body.save()\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler/1ddc-4043-ac4d/original_body.html', mock.ANY)\n        sample.page_id = sample.id\n        sample.save()\n\n        self.assertEqual(self.storage.open.call_count, 3)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        sample.id = 'test-id'\n        sample.save()\n\n        self.assertEqual(self.storage.open.call_count, 3)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 5)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d/original_body.html',\n                      mock.ANY),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('spiders/shop-crawler/test-id.json', mock.ANY),\n            mock.call('spiders/shop-crawler/test-id/original_body.html',\n                      mock.ANY),\n            mock.call('spiders/shop-crawler.json', mock.ANY),\n        ])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/test-id.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"test-id\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [], \\n'\n            '    \"id\": \"shop-crawler\", \\n'\n            '    \"init_requests\": [\\n'\n            '        {\\n'\n            '            \"type\": \"login\", \\n'\n            '            \"loginurl\": \"http://shop.example.com/login\", \\n'\n            '            \"username\": \"user\", \\n'\n            '            \"password\": \"pass\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": [\\n'\n            '        {\\n'\n            '            \"type\": \"url\", \\n'\n            '            \"url\": \"http://example.com/\"\\n'\n            '        }\\n'\n            '    ]\\n'\n            '}')\n\n    def test_save_new(self):\n        spider = Spider(self.storage, id='shop-crawler',\n                        project=Project(self.storage, id='example'))\n        sample = Sample(self.storage, id='test1', name='test sample 1',\n                        url='http://example.com/test1', spider=spider)\n        sample.save()\n\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/test1.json', mock.ANY),\n            mock.call('spiders/shop-crawler.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/test1.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"test1\", \\n'\n            '    \"name\": \"test sample 1\", \\n'\n            '    \"page_id\": \"\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": []\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": null, \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com/test1\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        spider.samples.insert(0, Sample(self.storage, id='test2',\n                                        name='test sample 2',\n                                        url='http://example.com/test2'))\n        spider.samples[0].save()\n\n        self.storage.open.assert_called_once_with('spiders/shop-crawler.json')\n        self.assertEqual(self.storage.save.call_count, 4)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/test1.json', mock.ANY),\n            mock.call('spiders/shop-crawler.json', mock.ANY),\n            mock.call('spiders/shop-crawler/test2.json', mock.ANY),\n            mock.call('spiders/shop-crawler.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/test2.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"test2\", \\n'\n            '    \"name\": \"test sample 2\", \\n'\n            '    \"page_id\": \"\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": []\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": null, \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com/test2\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        project.schemas  # preload schemas\n        spider = Spider(self.storage, id='shop-crawler', project=project)\n        sample = spider.samples['1ddc-4043-ac4d']\n        sample.delete()\n\n        self.assertEqual(self.storage.open.call_count, 5)\n        self.storage.open.assert_has_calls([\n            mock.call('items.json'),\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json'),\n            mock.call(\n                'spiders/shop-crawler/1ddc-4043-ac4d/rendered_body.html'),\n            mock.call(\n                'spiders/shop-crawler/1ddc-4043-ac4d/original_body.html'),\n        ])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('items.json', mock.ANY),\n            mock.call('spiders/shop-crawler.json', mock.ANY)])\n        self.assertEqual(self.storage.delete.call_count, 3)\n        self.storage.delete.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d/rendered_body.html'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d/original_body.html')\n        ])\n        self.assertListEqual(list(spider.samples.keys()), [])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler.json'],\n            '{\\n'\n            '    \"allowed_domains\": [], \\n'\n            '    \"exclude_patterns\": [], \\n'\n            '    \"follow_patterns\": [], \\n'\n            '    \"id\": \"shop-crawler\", \\n'\n            '    \"init_requests\": [\\n'\n            '        {\\n'\n            '            \"type\": \"login\", \\n'\n            '            \"loginurl\": \"http://shop.example.com/login\", \\n'\n            '            \"username\": \"user\", \\n'\n            '            \"password\": \"pass\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"js_disable_patterns\": [], \\n'\n            '    \"js_enable_patterns\": [], \\n'\n            '    \"js_enabled\": false, \\n'\n            '    \"links_to_follow\": \"all\", \\n'\n            '    \"respect_nofollow\": true, \\n'\n            '    \"start_urls\": [\\n'\n            '        {\\n'\n            '            \"type\": \"url\", \\n'\n            '            \"url\": \"http://example.com/\"\\n'\n            '        }\\n'\n            '    ]\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n\nclass ItemTests(ProjectTestCase):\n    def get_storage_files(self):\n        return dict(super(ItemTests, self).get_storage_files(), **{\n            'items.json':\n                '{'\n                '    \"1664-4f20-b657\": {'\n                '        \"fields\": {'\n                '            \"fbec-4a42-a4b0\": {'\n                '                \"auto_created\": true,'\n                '                \"id\": \"fbec-4a42-a4b0\",'\n                '                \"name\": \"title\",'\n                '                \"required\": true,'\n                '                \"type\": \"text\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"cca5-490c-b604\": {'\n                '                \"id\": \"cca5-490c-b604\",'\n                '                \"name\": \"price\",'\n                '                \"required\": true,'\n                '                \"type\": \"price\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"34bc-406f-80bc\": {'\n                '                \"id\": \"34bc-406f-80bc\",'\n                '                \"name\": \"image\",'\n                '                \"required\": false,'\n                '                \"type\": \"image\",'\n                '                \"vary\": false'\n                '            },'\n                '            \"ecfc-4dbe-b488\": {'\n                '                \"id\": \"ecfc-4dbe-b488\",'\n                '                \"name\": \"details\",'\n                '                \"required\": false,'\n                '                \"type\": \"text\",'\n                '                \"vary\": false'\n                '            }'\n                '        },'\n                '        \"name\": \"product\"'\n                '    },'\n                '    \"fa87-4791-8642\": {'\n                '        \"fields\": {},'\n                '        \"name\": \"other\"'\n                '    }'\n                '}',\n            'spiders/shop-crawler/1ddc-4043-ac4d.json':\n                '{'\n                '    \"id\": \"1ddc-4043-ac4d\",'\n                '    \"name\": \"example\",'\n                '    \"url\": \"http://example.com\",'\n                '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\",'\n                '    \"page_type\": \"item\",'\n                '    \"spider\": \"shop-crawler\",'\n                '    \"scrapes\": \"1664-4f20-b657\",'\n                '    \"plugins\": {'\n                '        \"annotations-plugin\": {'\n                '            \"extracts\": ['\n                '                {'\n                '                    \"id\": \"1e47-4833-a4d4\",'\n                '                    \"container_id\": \"1e47-4833-a4d4#parent\",'\n                '                    \"schema_id\": \"1664-4f20-b657\",'\n                '                    \"item_container\": true,'\n                '                    \"selector\": \".main\",'\n                '                    \"repeated\": true,'\n                '                    \"siblings\": 0,'\n                '                    \"required\": [],'\n                '                    \"tagid\": 18,'\n                '                    \"text-content\": \"#portia-content\",'\n                '                    \"annotations\": {'\n                '                        \"#portia-content\": \"#dummy\"'\n                '                    }'\n                '                },'\n                '                {'\n                '                    \"id\": \"1e47-4833-a4d4#parent\",'\n                '                    \"container_id\": null,'\n                '                    \"schema_id\": \"1664-4f20-b657\",'\n                '                    \"item_container\": true,'\n                '                    \"selector\": \"body\",'\n                '                    \"repeated\": false,'\n                '                    \"siblings\": 0,'\n                '                    \"required\": [],'\n                '                    \"tagid\": 18,'\n                '                    \"text-content\": \"#portia-content\",'\n                '                    \"annotations\": {'\n                '                        \"#portia-content\": \"#dummy\"'\n                '                    }'\n                '                },'\n                '                {'\n                '                    \"id\": \"3606-4d68-a6a0\",'\n                '                    \"container_id\": \"1e47-4833-a4d4\",'\n                '                    \"selection_mode\": \"auto\",'\n                '                    \"selector\": \".main > h1\",'\n                '                    \"accept_selectors\": ['\n                '                        \".main:nth-child(1) > h1\",'\n                '                        \".main:nth-child(2) > h1\"'\n                '                    ],'\n                '                    \"reject_selectors\": [],'\n                '                    \"data\": {'\n                '                        \"d1e2-4673-a72a\": {'\n                '                            \"field\": \"fbec-4a42-a4b0\",'\n                '                            \"attribute\": \"content\",'\n                '                            \"required\": false,'\n                '                            \"extractors\": {}'\n                '                        }'\n                '                    },'\n                '                    \"pre_text\": null,'\n                '                    \"post_text\": null,'\n                '                    \"tagid\": null,'\n                '                    \"required\": []'\n                '                },'\n                '                {'\n                '                    \"id\": \"b161-47b1-b064\",'\n                '                    \"container_id\": \"1e47-4833-a4d4\",'\n                '                    \"schema_id\": \"1664-4f20-b657\",'\n                '                    \"item_container\": true,'\n                '                    \"selector\": \".main > div\",'\n                '                    \"repeated\": false,'\n                '                    \"siblings\": 0,'\n                '                    \"required\": [],'\n                '                    \"tagid\": 18,'\n                '                    \"text-content\": \"#portia-content\",'\n                '                    \"annotations\": {'\n                '                        \"#portia-content\": \"#dummy\"'\n                '                    }'\n                '                },'\n                '                {'\n                '                    \"id\": \"5c18-40cf-8809\",'\n                '                    \"container_id\": \"1e47-4833-a4d4\",'\n                '                    \"selection_mode\": \"auto\",'\n                '                    \"selector\": \".main > img\",'\n                '                    \"accept_selectors\": ['\n                '                        \".main:nth-child(1) > img\"'\n                '                    ],'\n                '                    \"reject_selectors\": [],'\n                '                    \"data\": {'\n                '                        \"de35-49b5-b90b\": {'\n                '                            \"field\": \"34bc-406f-80bc\",'\n                '                            \"attribute\": \"content\",'\n                '                            \"required\": false,'\n                '                            \"extractors\": ['\n                '                                \"e6fc-4758-9e6b\",'\n                '                                \"154f-45ce-bfbd\"'\n                '                            ]'\n                '                        }'\n                '                    },'\n                '                    \"pre_text\": null,'\n                '                    \"post_text\": null,'\n                '                    \"tagid\": null,'\n                '                    \"required\": []'\n                '                },'\n                '                {'\n                '                    \"id\": \"7fd9-4ba9-83b8\",'\n                '                    \"container_id\": \"b161-47b1-b064\",'\n                '                    \"selection_mode\": \"auto\",'\n                '                    \"selector\": \".main > div > span\",'\n                '                    \"accept_selectors\": ['\n                '                        \".main:nth-child(1) > div > span\"'\n                '                    ],'\n                '                    \"reject_selectors\": [],'\n                '                    \"data\": {'\n                '                        \"6535-4215-b774\": {'\n                '                            \"field\": \"cca5-490c-b604\",'\n                '                            \"attribute\": \"content\",'\n                '                            \"required\": false,'\n                '                            \"extractors\": {}'\n                '                        }'\n                '                    },'\n                '                    \"pre_text\": null,'\n                '                    \"post_text\": null,'\n                '                    \"tagid\": null,'\n                '                    \"required\": []'\n                '                }'\n                '            ]'\n                '        }'\n                '    },'\n                '    \"version\": \"' + SLYBOT_VERSION + '\"'\n                '}',\n            'spiders/shop-crawler/1ddc-4043-ac4d/original_body.html': (\n                '<html></html>')\n        })\n\n    def test_minimal_item(self):\n        item = Item(id='item-1')\n\n        self.assertEqual(item.dump(), {\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'children': [],\n            'container_id': None,\n            'id': 'item-1',\n            'item_container': True,\n            'repeated': False,\n            'repeated_selector': None,\n            'required': [],\n            'schema_id': None,\n            'selector': None,\n            'siblings': 0,\n            'tagid': None,\n            'text-content': '#portia-content',\n        })\n\n    def test_full_item(self):\n        item = Item(\n            id='item-1',\n            name='test',\n            selector='body',\n            repeated_selector='.item',\n            siblings=2,\n            schema=Schema(id='schema-1'),\n            annotations=[])\n\n        self.assertEqual(item.dump(), {\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'children': [],\n            'container_id': None,\n            'field': 'test',\n            'id': 'item-1',\n            'item_container': True,\n            'repeated': True,\n            'repeated_selector': '.item',\n            'required': [],\n            'schema_id': 'schema-1',\n            'selector': 'body',\n            'siblings': 2,\n            'tagid': None,\n            'text-content': '#portia-content',\n        })\n\n    def test_with_annotation(self):\n        item = Item(id='item-1')\n        item.annotations.append(Annotation(id='annotation-1|data-1'))\n\n        self.assertEqual(item.dump(), {\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'children': [\n                {\n                    \"accept_selectors\": [],\n                    \"container_id\": \"item-1\",\n                    \"data\": {\n                        \"data-1\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": None,\n                            \"required\": False,\n                        },\n                    },\n                    \"id\": \"annotation-1\",\n                    'text-content': 'content',\n                    \"post_text\": None,\n                    \"pre_text\": None,\n                    \"reject_selectors\": [],\n                    \"repeated\": False,\n                    \"required\": [],\n                    \"selection_mode\": \"auto\",\n                    \"selector\": None,\n                    \"tagid\": None,\n                    \"xpath\": None,\n                },\n            ],\n            'container_id': None,\n            'id': 'item-1',\n            'item_container': True,\n            'repeated': False,\n            'repeated_selector': None,\n            'required': [],\n            'schema_id': None,\n            'selector': None,\n            'siblings': 0,\n            'tagid': None,\n            'text-content': '#portia-content',\n        })\n\n    def test_with_nested_item(self):\n        item = Item(id='item-1')\n        item.annotations.append(Item(id='item-2'))\n\n        self.assertEqual(item.dump(), {\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'children': [\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\",\n                    },\n                    \"children\": [],\n                    \"container_id\": \"item-1\",\n                    \"id\": \"item-2\",\n                    \"item_container\": True,\n                    \"repeated\": False,\n                    \"repeated_selector\": None,\n                    \"required\": [],\n                    \"schema_id\": None,\n                    \"selector\": None,\n                    \"siblings\": 0,\n                    \"tagid\": None,\n                    \"text-content\": \"#portia-content\",\n                },\n            ],\n            'container_id': None,\n            'id': 'item-1',\n            'item_container': True,\n            'repeated': False,\n            'repeated_selector': None,\n            'required': [],\n            'schema_id': None,\n            'selector': None,\n            'siblings': 0,\n            'tagid': None,\n            'text-content': '#portia-content',\n        })\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        items = project.spiders['shop-crawler'].samples['1ddc-4043-ac4d'].items\n        self.assertListEqual(list(items.keys()), ['1e47-4833-a4d4'])\n        self.assertIsInstance(items, Item.collection)\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(items.dump(), [\n            {\n                'annotations': {\n                    '#portia-content': '#dummy',\n                },\n                'children': [\n                    {\n                        'accept_selectors': [\n                            '.main:nth-child(1) > h1',\n                            '.main:nth-child(2) > h1',\n                        ],\n                        'container_id': '1e47-4833-a4d4',\n                        'data': {\n                            'd1e2-4673-a72a': {\n                                'attribute': 'content',\n                                'extractors': {},\n                                'field': 'fbec-4a42-a4b0',\n                                'required': False,\n                            },\n                        },\n                        'id': '3606-4d68-a6a0',\n                        'text-content': 'content',\n                        'post_text': None,\n                        'pre_text': None,\n                        'reject_selectors': [],\n                        'required': [],\n                        'repeated': False,\n                        'selection_mode': 'auto',\n                        'selector': '.main > h1',\n                        'tagid': None,\n                        'xpath': None,\n                    },\n                    {\n                        'annotations': {\n                            '#portia-content': '#dummy',\n                        },\n                        'children': [\n                            {\n                                'accept_selectors': [\n                                    '.main:nth-child(1) > div > span',\n                                ],\n                                'container_id': 'b161-47b1-b064',\n                                'data': {\n                                    '6535-4215-b774': {\n                                        'attribute': 'content',\n                                        'extractors': {},\n                                        'field': 'cca5-490c-b604',\n                                        'required': False,\n                                    },\n                                },\n                                'id': '7fd9-4ba9-83b8',\n                                'text-content': 'content',\n                                'post_text': None,\n                                'pre_text': None,\n                                'reject_selectors': [],\n                                'repeated': False,\n                                'required': [],\n                                'selection_mode': 'auto',\n                                'selector': '.main > div > span',\n                                'tagid': None,\n                                'xpath': None,\n                            },\n                        ],\n                        'container_id': '1e47-4833-a4d4',\n                        'id': 'b161-47b1-b064',\n                        'item_container': True,\n                        'repeated': False,\n                        'repeated_selector': None,\n                        'required': [],\n                        'schema_id': '1664-4f20-b657',\n                        'selector': '.main > div',\n                        'siblings': 0,\n                        'tagid': None,\n                        'text-content': '#portia-content',\n                    },\n                    {\n                        'accept_selectors': [\n                            '.main:nth-child(1) > img',\n                        ],\n                        'container_id': '1e47-4833-a4d4',\n                        'data': {\n                            'de35-49b5-b90b': {\n                                'attribute': 'content',\n                                'extractors': [\n                                    'e6fc-4758-9e6b',\n                                    '154f-45ce-bfbd',\n                                ],\n                                'field': '34bc-406f-80bc',\n                                'required': False,\n                            },\n                        },\n                        'id': '5c18-40cf-8809',\n                        'text-content': 'content',\n                        'post_text': None,\n                        'pre_text': None,\n                        'reject_selectors': [],\n                        'required': [],\n                        'repeated': False,\n                        'selection_mode': 'auto',\n                        'selector': '.main > img',\n                        'tagid': None,\n                        'xpath': None,\n                    },\n                ],\n                'container_id': None,\n                'id': '1e47-4833-a4d4',\n                'item_container': True,\n                'repeated': True,\n                'repeated_selector': '.main',\n                'required': [],\n                'schema_id': '1664-4f20-b657',\n                'selector': 'body',\n                'siblings': 0,\n                'tagid': None,\n                'text-content': '#portia-content',\n            },\n        ])\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_load_through_partial(self):\n        item = Item(\n            self.storage, id='1e47-4833-a4d4',\n            sample=Sample(\n                self.storage, id='1ddc-4043-ac4d',\n                spider=Spider(self.storage, id='shop-crawler')))\n        self.assertEqual(item.dump(), {\n            'annotations': {\n                '#portia-content': '#dummy',\n            },\n            'children': [\n                {\n                    'accept_selectors': [\n                        '.main:nth-child(1) > h1',\n                        '.main:nth-child(2) > h1',\n                    ],\n                    'container_id': '1e47-4833-a4d4',\n                    'data': {\n                        'd1e2-4673-a72a': {\n                            'attribute': 'content',\n                            'extractors': {},\n                            'field': 'fbec-4a42-a4b0',\n                            'required': False,\n                        },\n                    },\n                    'id': '3606-4d68-a6a0',\n                    'text-content': 'content',\n                    'post_text': None,\n                    'pre_text': None,\n                    'reject_selectors': [],\n                    'required': [],\n                    'repeated': False,\n                    'selection_mode': 'auto',\n                    'selector': '.main > h1',\n                    'tagid': None,\n                    'xpath': None,\n                },\n                {\n                    'annotations': {\n                        '#portia-content': '#dummy',\n                    },\n                    'children': [\n                        {\n                            'accept_selectors': [\n                                '.main:nth-child(1) > div > span',\n                            ],\n                            'container_id': 'b161-47b1-b064',\n                            'data': {\n                                '6535-4215-b774': {\n                                    'attribute': 'content',\n                                    'extractors': {},\n                                    'field': 'cca5-490c-b604',\n                                    'required': False,\n                                },\n                            },\n                            'id': '7fd9-4ba9-83b8',\n                            'text-content': 'content',\n                            'post_text': None,\n                            'pre_text': None,\n                            'reject_selectors': [],\n                            'repeated': False,\n                            'required': [],\n                            'selection_mode': 'auto',\n                            'selector': '.main > div > span',\n                            'tagid': None,\n                            'xpath': None,\n                        },\n                    ],\n                    'container_id': '1e47-4833-a4d4',\n                    'id': 'b161-47b1-b064',\n                    'item_container': True,\n                    'repeated': False,\n                    'repeated_selector': None,\n                    'required': [],\n                    'schema_id': '1664-4f20-b657',\n                    'selector': '.main > div',\n                    'siblings': 0,\n                    'tagid': None,\n                    'text-content': '#portia-content',\n                },\n                {\n                    'accept_selectors': [\n                        '.main:nth-child(1) > img',\n                    ],\n                    'container_id': '1e47-4833-a4d4',\n                    'data': {\n                        'de35-49b5-b90b': {\n                            'attribute': 'content',\n                            'extractors': [\n                                'e6fc-4758-9e6b',\n                                '154f-45ce-bfbd',\n                            ],\n                            'field': '34bc-406f-80bc',\n                            'required': False,\n                        },\n                    },\n                    'id': '5c18-40cf-8809',\n                    'text-content': 'content',\n                    'post_text': None,\n                    'pre_text': None,\n                    'reject_selectors': [],\n                    'required': [],\n                    'repeated': False,\n                    'selection_mode': 'auto',\n                    'selector': '.main > img',\n                    'tagid': None,\n                    'xpath': None,\n                },\n            ],\n            'container_id': None,\n            'id': '1e47-4833-a4d4',\n            'item_container': True,\n            'repeated': True,\n            'repeated_selector': '.main',\n            'required': [],\n            'schema_id': '1664-4f20-b657',\n            'selector': 'body',\n            'siblings': 0,\n            'tagid': None,\n            'text-content': '#portia-content',\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_save_edit(self):\n        item = Item(\n            self.storage, id='1e47-4833-a4d4',\n            sample=Sample(\n                self.storage, id='1ddc-4043-ac4d',\n                spider=Spider(self.storage, id='shop-crawler')))\n        item.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_not_called()\n\n        item.selector = '#test'\n        item.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"#test\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"id\": \"b161-47b1-b064\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main > div\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > div > span\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"b161-47b1-b064\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"6535-4215-b774\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"cca5-490c-b604\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"7fd9-4ba9-83b8\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > div > span\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        item.id = 'test-id'\n        item.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"test-id#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"#test\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"test-id#parent\", \\n'\n            '                    \"id\": \"test-id\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"test-id\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"test-id\", \\n'\n            '                    \"id\": \"b161-47b1-b064\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main > div\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > div > span\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"b161-47b1-b064\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"6535-4215-b774\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"cca5-490c-b604\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"7fd9-4ba9-83b8\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > div > span\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"test-id\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n    def test_save_new(self):\n        sample = Sample(self.storage, id='1ddc-4043-ac4d',\n                        spider=Spider(self.storage, id='shop-crawler',\n                                      project=Project(self.storage,\n                                                      id='example')))\n        item = Item(self.storage, id='test1', sample=sample)\n        item.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"id\": \"b161-47b1-b064\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main > div\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > div > span\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"b161-47b1-b064\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"6535-4215-b774\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"cca5-490c-b604\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"7fd9-4ba9-83b8\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > div > span\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"test1\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": null, \\n'\n            '                    \"selector\": null, \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        sample.items.insert(0, Item(self.storage, id='test2',\n                                    selector='#xxx',\n                                    repeated_selector='.yyy'))\n        sample.items[0].save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"test2#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": null, \\n'\n            '                    \"selector\": \"#xxx\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"test2#parent\", \\n'\n            '                    \"id\": \"test2\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": null, \\n'\n            '                    \"selector\": \".yyy\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"id\": \"b161-47b1-b064\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main > div\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > div > span\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"b161-47b1-b064\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"6535-4215-b774\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"cca5-490c-b604\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"7fd9-4ba9-83b8\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > div > span\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"test1\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": null, \\n'\n            '                    \"selector\": null, \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        project.schemas  # preload schemas\n        sample = Sample(self.storage, id='1ddc-4043-ac4d',\n                        spider=Spider(self.storage, id='shop-crawler',\n                                      project=project))\n\n        item = sample.items['1e47-4833-a4d4']\n        item.delete()\n\n        self.assertEqual(self.storage.open.call_count, 3)\n        self.storage.open.assert_has_calls([\n            mock.call('items.json'),\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.storage.delete.assert_not_called()\n        self.assertListEqual(list(sample.items.keys()), [])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": []\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": null, \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"fields\": {\\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n\nclass AnnotationTests(ProjectTestCase):\n    def test_minimal_item(self):\n        annotation = Annotation(id='annotation-1|data-1')\n\n        self.assertEqual(annotation.dump(), {\n            'accept_selectors': [],\n            'container_id': None,\n            'data': {\n                'data-1': {\n                    'attribute': 'content',\n                    'extractors': {},\n                    'field': None,\n                    'required': False,\n                },\n            },\n            'id': 'annotation-1',\n            'text-content': 'content',\n            'post_text': None,\n            'pre_text': None,\n            'reject_selectors': [],\n            'repeated': False,\n            'required': [],\n            'selection_mode': 'auto',\n            'selector': None,\n            'tagid': None,\n            'xpath': None,\n        })\n\n    def test_full_item(self):\n        annotation = Annotation(\n            id='annotation-1|data-1',\n            attribute='src',\n            required=True,\n            selection_mode='css',\n            selector='img',\n            accept_selectors=['img'],\n            reject_selectors=['video'],\n            pre_text='pre ',\n            post_text=' post',\n            parent=Item(id='item-1'),\n            field=Field(id='field-1'))\n\n        self.assertEqual(annotation.dump(), {\n            'accept_selectors': [\n                'img',\n            ],\n            'container_id': 'item-1',\n            'data': {\n                'data-1': {\n                    'attribute': 'src',\n                    'extractors': {},\n                    'field': 'field-1',\n                    'required': True,\n                },\n            },\n            'id': 'annotation-1',\n            'text-content': 'content',\n            'post_text': ' post',\n            'pre_text': 'pre ',\n            'reject_selectors': [\n                'video',\n            ],\n            'repeated': False,\n            'required': [],\n            'selection_mode': 'css',\n            'selector': 'img',\n            'tagid': None,\n            'xpath': None,\n        })\n\n    def test_load_through_project(self):\n        project = Project(self.storage, id='example')\n        annotations = (project.spiders['shop-crawler'].samples['1ddc-4043-ac4d']\n                              .items['1e47-4833-a4d4'].annotations)\n        self.assertListEqual(list(annotations.keys()),\n                             ['3606-4d68-a6a0|d1e2-4673-a72a',\n                              '5c18-40cf-8809|de35-49b5-b90b'])\n        self.assertIsInstance(annotations, BaseAnnotation.collection)\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(annotations.dump(), [\n            {\n                'accept_selectors': [\n                    '.main:nth-child(1) > h1',\n                    '.main:nth-child(2) > h1',\n                ],\n                'container_id': '1e47-4833-a4d4',\n                'data': {\n                    'd1e2-4673-a72a': {\n                        'attribute': 'content',\n                        'extractors': {},\n                        'field': 'fbec-4a42-a4b0',\n                        'required': False,\n                    },\n                },\n                'id': '3606-4d68-a6a0',\n                'text-content': 'content',\n                'post_text': None,\n                'pre_text': None,\n                'reject_selectors': [],\n                'repeated': False,\n                'required': [],\n                'selection_mode': 'auto',\n                'selector': '.main > h1',\n                'tagid': None,\n                'xpath': None,\n            },\n            {\n                'accept_selectors': [\n                    '.main:nth-child(1) > img',\n                ],\n                'container_id': '1e47-4833-a4d4',\n                'data': {\n                    'de35-49b5-b90b': {\n                        'attribute': 'content',\n                        'extractors': [\n                            'e6fc-4758-9e6b',\n                            '154f-45ce-bfbd',\n                        ],\n                        'field': '34bc-406f-80bc',\n                        'required': False,\n                    },\n                },\n                'id': '5c18-40cf-8809',\n                'text-content': 'content',\n                'post_text': None,\n                'pre_text': None,\n                'reject_selectors': [],\n                'repeated': False,\n                'required': [],\n                'selection_mode': 'auto',\n                'selector': '.main > img',\n                'tagid': None,\n                'xpath': None,\n            },\n        ])\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_load_through_partial(self):\n        annotation = Annotation(\n            self.storage, id='5c18-40cf-8809|de35-49b5-b90b',\n            parent=Item(\n                self.storage, id='1e47-4833-a4d4',\n                sample=Sample(\n                    self.storage, id='1ddc-4043-ac4d',\n                    spider=Spider(self.storage, id='shop-crawler'))))\n        self.assertEqual(annotation.dump(), {\n            'accept_selectors': [\n                '.main:nth-child(1) > img',\n            ],\n            'container_id': '1e47-4833-a4d4',\n            'data': {\n                'de35-49b5-b90b': {\n                    'attribute': 'content',\n                    'extractors': [\n                        'e6fc-4758-9e6b',\n                        '154f-45ce-bfbd',\n                    ],\n                    'field': '34bc-406f-80bc',\n                    'required': False,\n                },\n            },\n            'id': '5c18-40cf-8809',\n            'text-content': 'content',\n            'post_text': None,\n            'pre_text': None,\n            'reject_selectors': [],\n            'repeated': False,\n            'required': [],\n            'selection_mode': 'auto',\n            'selector': '.main > img',\n            'tagid': None,\n            'xpath': None,\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n\n    def test_save_edit(self):\n        annotation = Annotation(\n            self.storage, id='3606-4d68-a6a0|d1e2-4673-a72a',\n            parent=Item(\n                self.storage, id='1e47-4833-a4d4',\n                sample=Sample(\n                    self.storage, id='1ddc-4043-ac4d',\n                    spider=Spider(self.storage, id='shop-crawler'))))\n        annotation.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_not_called()\n\n        annotation.selector = '.test'\n        annotation.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".test\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        annotation.id = 'test-id|data-id'\n        annotation.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"data-id\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"test-id\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".test\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n    def test_save_new(self):\n        item = Item(\n            self.storage, id='1e47-4833-a4d4',\n            sample=Sample(\n                self.storage, id='1ddc-4043-ac4d',\n                spider=Spider(self.storage, id='shop-crawler')))\n        annotation = Annotation(self.storage, id='test1|data1', parent=item)\n        annotation.save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.storage.save.assert_called_once_with(\n            'spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"data1\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": null, \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"test1\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": null, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n        item.annotations.insert(0, Annotation(self.storage, id='test2|data2'))\n        item.annotations[0].save()\n\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"data2\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": null, \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"test2\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": null, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > h1\", \\n'\n            '                        \".main:nth-child(2) > h1\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"d1e2-4673-a72a\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": \"fbec-4a42-a4b0\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"3606-4d68-a6a0\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > h1\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"data1\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": {}, \\n'\n            '                            \"field\": null, \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"test1\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": null, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n\n    def test_delete(self):\n        project = Project(self.storage, id='example')\n        project.schemas  # preload schemas\n        item = Item(\n            self.storage, id='1e47-4833-a4d4',\n            sample=Sample(\n                self.storage, id='1ddc-4043-ac4d',\n                spider=Spider(self.storage, id='shop-crawler',\n                              project=project)))\n        annotation = item.annotations['3606-4d68-a6a0|d1e2-4673-a72a']\n        annotation.delete()\n\n        self.assertEqual(self.storage.open.call_count, 3)\n        self.storage.open.assert_has_calls([\n            mock.call('items.json'),\n            mock.call('spiders/shop-crawler.json'),\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json')])\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('spiders/shop-crawler/1ddc-4043-ac4d.json', mock.ANY),\n            mock.call('items.json', mock.ANY)])\n        self.storage.delete.assert_not_called()\n        self.assertListEqual(list(item.annotations.keys()),\n                             ['5c18-40cf-8809|de35-49b5-b90b'])\n        self.assertEqual(\n            self.storage.files['spiders/shop-crawler/1ddc-4043-ac4d.json'],\n            '{\\n'\n            '    \"extractors\": {}, \\n'\n            '    \"id\": \"1ddc-4043-ac4d\", \\n'\n            '    \"name\": \"example\", \\n'\n            '    \"page_id\": \"ab5bbf650b32ca41af6f8e9976fc3c85eee87f67\", \\n'\n            '    \"page_type\": \"item\", \\n'\n            '    \"plugins\": {\\n'\n            '        \"annotations-plugin\": {\\n'\n            '            \"extracts\": [\\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": null, \\n'\n            '                    \"id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \"body\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"annotations\": {\\n'\n            '                        \"#portia-content\": \"#dummy\"\\n'\n            '                    }, \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4#parent\", \\n'\n            '                    \"id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"item_container\": true, \\n'\n            '                    \"repeated\": true, \\n'\n            '                    \"required\": [], \\n'\n            '                    \"schema_id\": \"1664-4f20-b657\", \\n'\n            '                    \"selector\": \".main\", \\n'\n            '                    \"siblings\": 0, \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"text-content\": \"#portia-content\"\\n'\n            '                }, \\n'\n            '                {\\n'\n            '                    \"accept_selectors\": [\\n'\n            '                        \".main:nth-child(1) > img\"\\n'\n            '                    ], \\n'\n            '                    \"container_id\": \"1e47-4833-a4d4\", \\n'\n            '                    \"data\": {\\n'\n            '                        \"de35-49b5-b90b\": {\\n'\n            '                            \"attribute\": \"content\", \\n'\n            '                            \"extractors\": [\\n'\n            '                                \"e6fc-4758-9e6b\", \\n'\n            '                                \"154f-45ce-bfbd\"\\n'\n            '                            ], \\n'\n            '                            \"field\": \"34bc-406f-80bc\", \\n'\n            '                            \"required\": false\\n'\n            '                        }\\n'\n            '                    }, \\n'\n            '                    \"id\": \"5c18-40cf-8809\", \\n'\n            '                    \"text-content\": \"content\", \\n'\n            '                    \"post_text\": null, \\n'\n            '                    \"pre_text\": null, \\n'\n            '                    \"reject_selectors\": [], \\n'\n            '                    \"required\": [], \\n'\n            '                    \"repeated\": false, \\n'\n            '                    \"selection_mode\": \"auto\", \\n'\n            '                    \"selector\": \".main > img\", \\n'\n            '                    \"tagid\": null, \\n'\n            '                    \"xpath\": null\\n'\n            '                }\\n'\n            '            ]\\n'\n            '        }\\n'\n            '    }, \\n'\n            '    \"scrapes\": \"1664-4f20-b657\", \\n'\n            '    \"spider\": \"shop-crawler\", \\n'\n            '    \"url\": \"http://example.com\", \\n'\n            '    \"version\": \"' + SLYBOT_VERSION + '\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['items.json'],\n            '{\\n'\n            '    \"1664-4f20-b657\": {\\n'\n            '        \"auto_created\": true, \\n'\n            '        \"fields\": {\\n'\n            '            \"cca5-490c-b604\": {\\n'\n            '                \"id\": \"cca5-490c-b604\", \\n'\n            '                \"name\": \"price\", \\n'\n            '                \"required\": true, \\n'\n            '                \"type\": \"price\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"34bc-406f-80bc\": {\\n'\n            '                \"id\": \"34bc-406f-80bc\", \\n'\n            '                \"name\": \"image\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"image\", \\n'\n            '                \"vary\": false\\n'\n            '            }, \\n'\n            '            \"ecfc-4dbe-b488\": {\\n'\n            '                \"id\": \"ecfc-4dbe-b488\", \\n'\n            '                \"name\": \"details\", \\n'\n            '                \"required\": false, \\n'\n            '                \"type\": \"text\", \\n'\n            '                \"vary\": false\\n'\n            '            }\\n'\n            '        }, \\n'\n            '        \"name\": \"product\"\\n'\n            '    }, \\n'\n            '    \"fa87-4791-8642\": {\\n'\n            '        \"fields\": {}, \\n'\n            '        \"name\": \"other\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_invalid_project_name(self):\n        self.assertRaises(ValidationError, Project, self.storage, id='')\n        self.assertRaises(ValidationError, Project, self.storage, id='e' * 249)\n\n    def test_invalid_spider_name(self):\n        self.assertRaises(ValidationError, Spider, self.storage, id='')\n        self.assertRaises(ValidationError, Spider, self.storage, id='e' * 244)\n"
  },
  {
    "path": "portia_server/portia_orm/tests/test_relationship.py",
    "content": "import json\nfrom unittest import mock\n\nfrom .models import (OneToOneModel1, OneToOneModel2, ParentModel, ChildModel,\n                     ManyToManyModel1, ManyToManyModel2, PolymorphicParentModel,\n                     PolymorphicChildModel1, PolymorphicChildModel2)\nfrom .utils import DataStoreTestCase, mock_storage\n\n\nclass OneToOneRelationshipTests(DataStoreTestCase):\n    def setUp(self):\n        super(OneToOneRelationshipTests, self).setUp()\n        self.storage = mock_storage({\n            'o2o-model-1.json':\n                '{'\n                '    \"id\": \"model-1\",'\n                '    \"field\": \"model-1\",'\n                '    \"m2\": \"model-2\"'\n                '}',\n            'o2o-model-2.json':\n                '{'\n                '    \"id\": \"model-2\",'\n                '    \"field\": \"model-2\",'\n                '    \"m1\": {'\n                '        \"id\": \"model-1\",'\n                '        \"field\": \"model-1\",'\n                '        \"m2\": \"model-2\"'\n                '    }'\n                '}',\n        })\n\n    def test_no_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2')\n\n        self.assertEqual(model1.m2, None)\n        self.assertEqual(model2.m1, None)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': None,\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': None,\n        })\n\n    def test_set_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2')\n        model2.m1 = model1\n\n        self.assertEqual(model1.m2, model2)\n        self.assertEqual(model2.m1, model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': 'model-2',\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-1',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_set_reverse_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2')\n        model1.m2 = model2\n\n        self.assertEqual(model1.m2, model2)\n        self.assertEqual(model2.m1, model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': 'model-2',\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-1',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_create_with_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2', m1=model1)\n\n        self.assertEqual(model1.m2, model2)\n        self.assertEqual(model2.m1, model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': 'model-2',\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-1',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_create_with_reverse_relation(self):\n        model2 = OneToOneModel2(id='model-2')\n        model1 = OneToOneModel1(id='model-1', m2=model2)\n\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': 'model-2',\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-1',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_change_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2', m1=model1)\n        model3 = OneToOneModel1(id='model-3')\n\n        self.assertEqual(model1.m2, model2)\n        self.assertEqual(model2.m1, model1)\n        self.assertEqual(model3.m2, None)\n\n        model2.m1 = model3\n\n        self.assertEqual(model1.m2, None)\n        self.assertEqual(model2.m1, model3)\n        self.assertEqual(model3.m2, model2)\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-3',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_change_reverse_relation(self):\n        model1 = OneToOneModel1(id='model-1')\n        model2 = OneToOneModel2(id='model-2', m1=model1)\n        model3 = OneToOneModel1(id='model-3')\n\n        self.assertEqual(model1.m2, model2)\n        self.assertEqual(model2.m1, model1)\n        self.assertEqual(model3.m2, None)\n\n        model3.m2 = model2\n\n        self.assertEqual(model1.m2, None)\n        self.assertEqual(model2.m1, model3)\n        self.assertEqual(model3.m2, model2)\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': {\n                'id': 'model-3',\n                'm2': 'model-2',\n            },\n        })\n\n    def test_load_full(self):\n        model = OneToOneModel2(self.storage, id='model-2')\n\n        self.assertEqual(model.dump(), {\n            'id': 'model-2',\n            'field': 'model-2',\n            'm1': {\n                'id': 'model-1',\n                'field': 'model-1',\n                'm2': 'model-2',\n            },\n        })\n        self.storage.open.assert_called_once_with('o2o-model-2.json')\n\n    def test_load_partial(self):\n        model = OneToOneModel1(self.storage, id='model-1')\n\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': 'model-1',\n            'm2': 'model-2',\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('o2o-model-1.json'),\n            mock.call('o2o-model-2.json')])\n\n    def test_save_field(self):\n        model1 = OneToOneModel1(self.storage, id='model-1')\n        model2 = model1.m2\n        model1.field = 'changed-field-1'\n        model2.field = 'changed-field-2'\n        model2.save()\n\n        self.assertEqual(self.storage.save.call_count, 1)\n        self.storage.save.assert_has_calls([\n            mock.call('o2o-model-2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['o2o-model-2.json'],\n            '{\\n'\n            '    \"field\": \"changed-field-2\", \\n'\n            '    \"id\": \"model-2\", \\n'\n            '    \"m1\": {\\n'\n            '        \"field\": \"model-1\", \\n'\n            '        \"id\": \"model-1\", \\n'\n            '        \"m2\": \"model-2\"\\n'\n            '    }\\n'\n            '}')\n\n        model1.save()\n\n        self.assertEqual(self.storage.save.call_count, 3)\n        self.storage.save.assert_has_calls([\n            mock.call('o2o-model-2.json', mock.ANY),\n            mock.call('o2o-model-1.json', mock.ANY),\n            mock.call('o2o-model-2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['o2o-model-1.json'],\n            '{\\n'\n            '    \"field\": \"changed-field-1\", \\n'\n            '    \"id\": \"model-1\", \\n'\n            '    \"m2\": \"model-2\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['o2o-model-2.json'],\n            '{\\n'\n            '    \"field\": \"changed-field-2\", \\n'\n            '    \"id\": \"model-2\", \\n'\n            '    \"m1\": {\\n'\n            '        \"field\": \"changed-field-1\", \\n'\n            '        \"id\": \"model-1\", \\n'\n            '        \"m2\": \"model-2\"\\n'\n            '    }\\n'\n            '}')\n\n    def test_save_id(self):\n        model1 = OneToOneModel1(self.storage, id='model-1')\n        model2 = model1.m2\n        model1.id = 'changed-id-1'\n        model2.id = 'changed-id-2'\n        model2.save()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('o2o-model-2.json', mock.ANY),\n            mock.call('o2o-model-1.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['o2o-model-1.json'],\n            '{\\n'\n            '    \"field\": \"model-1\", \\n'\n            '    \"id\": \"model-1\", \\n'\n            '    \"m2\": \"changed-id-2\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['o2o-model-2.json'],\n            '{\\n'\n            '    \"field\": \"model-2\", \\n'\n            '    \"id\": \"changed-id-2\", \\n'\n            '    \"m1\": {\\n'\n            '        \"field\": \"model-1\", \\n'\n            '        \"id\": \"model-1\", \\n'\n            '        \"m2\": \"changed-id-2\"\\n'\n            '    }\\n'\n            '}')\n\n        model1.save()\n\n        self.assertEqual(self.storage.save.call_count, 4)\n        self.storage.save.assert_has_calls([\n            mock.call('o2o-model-2.json', mock.ANY),\n            mock.call('o2o-model-1.json', mock.ANY),\n            mock.call('o2o-model-1.json', mock.ANY),\n            mock.call('o2o-model-2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['o2o-model-1.json'],\n            '{\\n'\n            '    \"field\": \"model-1\", \\n'\n            '    \"id\": \"changed-id-1\", \\n'\n            '    \"m2\": \"changed-id-2\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['o2o-model-2.json'],\n            '{\\n'\n            '    \"field\": \"model-2\", \\n'\n            '    \"id\": \"changed-id-2\", \\n'\n            '    \"m1\": {\\n'\n            '        \"field\": \"model-1\", \\n'\n            '        \"id\": \"changed-id-1\", \\n'\n            '        \"m2\": \"changed-id-2\"\\n'\n            '    }\\n'\n            '}')\n\n\nclass OneToManyRelationshipTests(DataStoreTestCase):\n    def setUp(self):\n        super(OneToManyRelationshipTests, self).setUp()\n        self.storage = mock_storage({\n            'parents.json':\n                '{'\n                '    \"id\": \"parent-1\",'\n                '    \"field\": \"parent-1\",'\n                '    \"children\": ['\n                '        {'\n                '            \"id\": \"child-1\",'\n                '            \"parent\": \"parent-1\"'\n                '        }'\n                '    ]'\n                '}',\n            'parent-1/children.json':\n                '['\n                '    {'\n                '        \"id\": \"child-1\",'\n                '        \"field\": \"child-1\",'\n                '        \"parent\": \"parent-1\"'\n                '    }'\n                ']',\n        })\n\n    def test_no_children(self):\n        parent = ParentModel(id='parent-1')\n\n        self.assertEqual(len(parent.children), 0)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [],\n        })\n\n    def test_set_children(self):\n        parent = ParentModel(id='parent-1')\n        child = ChildModel(id='child-1')\n        parent.children = [child]\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(parent.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_add_to_children(self):\n        parent = ParentModel(id='parent-1')\n        child = ChildModel(id='child-1')\n        parent.children.add(child)\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(parent.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_set_parent(self):\n        parent = ParentModel(id='parent-1')\n        child = ChildModel(id='child-1')\n        child.parent = parent\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(parent.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_create_with_children(self):\n        child = ChildModel(id='child-1')\n        parent = ParentModel(id='parent-1', children=[child])\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(parent.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_create_with_parent(self):\n        parent = ParentModel(id='parent-1')\n        child = ChildModel(id='child-1', parent=parent)\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(parent.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_change_parent(self):\n        parent = ParentModel(id='parent-1')\n        parent2 = ParentModel(id='parent-2')\n        child = ChildModel(id='child-1', parent=parent)\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(len(parent.children), 1)\n        self.assertEqual(len(parent2.children), 0)\n\n        child.parent = parent2\n\n        self.assertEqual(child.parent, parent2)\n        self.assertEqual(len(parent.children), 0)\n        self.assertEqual(len(parent2.children), 1)\n        self.assertEqual(parent2.children[0], child)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [],\n        })\n        self.assertEqual(parent2.dump(), {\n            'id': 'parent-2',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-2',\n                },\n            ],\n        })\n\n    def test_change_children(self):\n        parent = ParentModel(id='parent-1')\n        child = ChildModel(id='child-1', parent=parent)\n        child2 = ChildModel(id='child-2')\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(child2.parent, None)\n        self.assertEqual(len(parent.children), 1)\n\n        parent.children = [child, child2]\n\n        self.assertEqual(child.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'parent': 'parent-1',\n                },\n                {\n                    'id': 'child-2',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_getitem(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        self.assertIs(parent.children[0], child1)\n        self.assertIs(parent.children['child-1'], child1)\n        self.assertIs(parent.children[child1], child1)\n        with self.assertRaises(IndexError):\n            parent.children[1000]\n        with self.assertRaises(KeyError):\n            parent.children['child-4']\n        self.assertEqual(parent.children[1:], [child2, child3])\n\n    def test_get(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        self.assertIs(parent.children.get(0), child1)\n        self.assertIs(parent.children.get('child-1'), child1)\n        self.assertIs(parent.children.get(child1), child1)\n        self.assertIs(parent.children.get('child-4'), None)\n        sentinel = object()\n        self.assertIs(parent.children.get('child-4', default=sentinel), sentinel)\n\n    def test_setitem(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n        child1b = ChildModel(id='child-1')\n        child1c = ChildModel(id='child-1')\n        child1d = ChildModel(id='child-1')\n        child4 = ChildModel(id='child-4')\n        child5 = ChildModel(id='child-5')\n        child6 = ChildModel(id='child-6')\n        child7 = ChildModel(id='child-7')\n\n        parent.children[0] = child1b\n        self.assertIs(parent.children[0], child1b)\n\n        parent.children['child-1'] = child1c\n        self.assertIs(parent.children[0], child1c)\n\n        parent.children[child1] = child1d\n        self.assertIs(parent.children[0], child1d)\n        self.assertListEqual(parent.children, [child1d, child2, child3])\n\n        parent.children[1:1] = [child4, child5]\n        self.assertIs(child4.parent, parent)\n        self.assertIs(child5.parent, parent)\n        self.assertListEqual(parent.children,\n                             [child1d, child4, child5, child2, child3])\n\n        parent.children[:2] = [child6, child7]\n        self.assertIs(child6.parent, parent)\n        self.assertIs(child7.parent, parent)\n        self.assertIs(child1d.parent, None)\n        self.assertIs(child4.parent, None)\n        self.assertListEqual(parent.children,\n                             [child6, child7, child5, child2, child3])\n\n        with self.assertRaises(ValueError):\n            parent.children[0:0] = [child2]\n\n    def test_delitem(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        child4 = ChildModel(id='child-4')\n        child5 = ChildModel(id='child-5')\n        parent = ParentModel(id='parent-1', children=[\n            child1, child2, child3, child4, child5])\n\n        del parent.children[0]\n        del parent.children['child-3']\n        del parent.children[child4]\n\n        self.assertListEqual(parent.children, [child2, child5])\n        self.assertIs(child1.parent, None)\n        self.assertIs(child3.parent, None)\n        self.assertIs(child4.parent, None)\n\n    def test_append(self):\n        child1 = ChildModel(id='child-1')\n        child1b = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2])\n\n        parent.children.append(child3)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child3.parent, parent)\n\n        with self.assertRaises(ValueError):\n            parent.children.append(child1b)\n\n    def test_add(self):\n        child1 = ChildModel(id='child-1')\n        child1b = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2])\n\n        parent.children.add(child3)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child3.parent, parent)\n\n        parent.children.add(child1b)\n        self.assertListEqual(parent.children, [child1, child2, child3])\n\n    def test_insert(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child2, child3])\n\n        parent.children.insert(0, child1)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child1.parent, parent)\n\n    def test_remove(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        parent.children.remove(child1)\n\n        self.assertListEqual(parent.children, [child2, child3])\n        self.assertIs(child1.parent, None)\n\n        with self.assertRaises(ValueError):\n            parent.children.remove(child1)\n\n    def test_discard(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        parent.children.discard(child1)\n\n        self.assertListEqual(parent.children, [child2, child3])\n        self.assertIs(child1.parent, None)\n\n        parent.children.discard(child1)\n        self.assertListEqual(parent.children, [child2, child3])\n\n    def test_pop(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        pop1 = parent.children.pop()\n\n        self.assertIs(pop1, child3)\n        self.assertListEqual(parent.children, [child1, child2])\n        self.assertIs(child3.parent, None)\n\n        pop2 = parent.children.pop('child-1')\n\n        self.assertIs(pop2, child1)\n        self.assertListEqual(parent.children, [child2])\n        self.assertIs(child1.parent, None)\n\n    def test_clear(self):\n        child1 = ChildModel(id='child-1')\n        child2 = ChildModel(id='child-2')\n        child3 = ChildModel(id='child-3')\n        parent = ParentModel(id='parent-1', children=[child1, child2, child3])\n\n        parent.children.clear()\n\n        self.assertListEqual(parent.children, [])\n        self.assertIs(child1.parent, None)\n        self.assertIs(child2.parent, None)\n        self.assertIs(child3.parent, None)\n\n    def test_load_full(self):\n        model = ParentModel(self.storage, id='parent-1')\n\n        self.assertEqual(model.dump(), {\n            'id': 'parent-1',\n            'field': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'field': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('parents.json'),\n            mock.call('parent-1/children.json')])\n\n    def test_load_partial(self):\n        model = ChildModel(self.storage, id='child-1',\n                           parent=ParentModel(self.storage, id='parent-1'))\n\n        self.assertEqual(model.dump(), {\n            'id': 'child-1',\n            'field': 'child-1',\n            'parent': 'parent-1',\n        })\n        self.assertEqual(model, model.parent.children[0])\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('parents.json'),\n            mock.call('parent-1/children.json')])\n        self.assertEqual(model.parent.dump(), {\n            'id': 'parent-1',\n            'field': 'parent-1',\n            'children': [\n                {\n                    'id': 'child-1',\n                    'field': 'child-1',\n                    'parent': 'parent-1',\n                },\n            ],\n        })\n\n    def test_save_field(self):\n        parent = ParentModel(self.storage, id='parent-1')\n        child = parent.children[0]\n\n        child.field = 'changed-id-1'\n        parent.field = 'changed-id-2'\n        parent.save()\n\n        self.assertEqual(self.storage.save.call_count, 1)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"field\": \"child-1\", \\n'\n            '            \"id\": \"child-1\", \\n'\n            '            \"parent\": \"parent-1\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"changed-id-2\", \\n'\n            '    \"id\": \"parent-1\"\\n'\n            '}')\n\n        child.save()\n\n        self.assertEqual(self.storage.save.call_count, 3)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('parent-1/children.json', mock.ANY),\n            mock.call('parents.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['parent-1/children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"changed-id-1\", \\n'\n            '        \"id\": \"child-1\", \\n'\n            '        \"parent\": \"parent-1\"\\n'\n            '    }\\n'\n            ']')\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"field\": \"changed-id-1\", \\n'\n            '            \"id\": \"child-1\", \\n'\n            '            \"parent\": \"parent-1\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"changed-id-2\", \\n'\n            '    \"id\": \"parent-1\"\\n'\n            '}')\n\n    def test_save_id(self):\n        parent = ParentModel(self.storage, id='parent-1')\n        child = parent.children[0]\n\n        child.id = 'changed-id-1'\n        parent.id = 'changed-id-2'\n        parent.save()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('changed-id-2/children.json', mock.ANY)])\n        self.storage.delete.assert_called_once_with('parent-1/children.json')\n        self.assertEqual(\n            self.storage.files['changed-id-2/children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"child-1\", \\n'\n            '        \"id\": \"child-1\", \\n'\n            '        \"parent\": \"changed-id-2\"\\n'\n            '    }\\n'\n            ']')\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"field\": \"child-1\", \\n'\n            '            \"id\": \"child-1\", \\n'\n            '            \"parent\": \"changed-id-2\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"parent-1\", \\n'\n            '    \"id\": \"changed-id-2\"\\n'\n            '}')\n\n        child.save()\n\n        self.assertEqual(self.storage.save.call_count, 4)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('changed-id-2/children.json', mock.ANY),\n            mock.call('changed-id-2/children.json', mock.ANY),\n            mock.call('parents.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['changed-id-2/children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"child-1\", \\n'\n            '        \"id\": \"changed-id-1\", \\n'\n            '        \"parent\": \"changed-id-2\"\\n'\n            '    }\\n'\n            ']')\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"field\": \"child-1\", \\n'\n            '            \"id\": \"changed-id-1\", \\n'\n            '            \"parent\": \"changed-id-2\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"parent-1\", \\n'\n            '    \"id\": \"changed-id-2\"\\n'\n            '}')\n\n\nclass ManyToManyRelationshipTests(DataStoreTestCase):\n    def setUp(self):\n        super(ManyToManyRelationshipTests, self).setUp()\n        self.storage = mock_storage({\n            'm2m-model-1.json':\n                '{'\n                '    \"id\": \"model-1\",'\n                '    \"field\": \"model-1\",'\n                '    \"m2\": ['\n                '        \"model-2\"'\n                '    ]'\n                '}',\n            'm2m-model-2.json':\n                '['\n                '    {'\n                '        \"id\": \"model-2\",'\n                '        \"field\": \"model-2\",'\n                '        \"m1\": ['\n                '            {'\n                '                \"id\": \"model-1\",'\n                '                \"field\": \"model-1\",'\n                '                \"m2\": ['\n                '                    \"model-2\"'\n                '                ]'\n                '            }'\n                '        ]'\n                '    }'\n                ']',\n        })\n\n    def test_no_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2')\n\n        self.assertEqual(len(model1.m2), 0)\n        self.assertEqual(len(model2.m1), 0)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [],\n        })\n\n    def test_set_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2')\n        model2.m1.append(model1)\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n\n    def test_set_reverse_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2')\n        model1.m2.append(model2)\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n\n    def test_create_with_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2', m1=[model1])\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n\n    def test_create_with_reverse_relation(self):\n        model2 = ManyToManyModel2(id='model-2')\n        model1 = ManyToManyModel1(id='model-1', m2=[model2])\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n\n    def test_change_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2', m1=[model1])\n        model3 = ManyToManyModel1(id='model-3')\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(len(model3.m2), 0)\n\n        model2.m1.append(model3)\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 2)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model2.m1[1], model3)\n        self.assertEqual(len(model3.m2), 1)\n        self.assertEqual(model3.m2[0], model2)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n                {\n                    'id': 'model-3',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n        self.assertEqual(model3.dump(), {\n            'id': 'model-3',\n            'm2': [\n                'model-2',\n            ],\n        })\n\n        model2.m1.remove(model1)\n\n        self.assertEqual(len(model1.m2), 0)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model3)\n        self.assertEqual(len(model3.m2), 1)\n        self.assertEqual(model3.m2[0], model2)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-3',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n        self.assertEqual(model3.dump(), {\n            'id': 'model-3',\n            'm2': [\n                'model-2',\n            ],\n        })\n\n    def test_change_reverse_relation(self):\n        model1 = ManyToManyModel1(id='model-1')\n        model2 = ManyToManyModel2(id='model-2', m1=[model1])\n        model3 = ManyToManyModel1(id='model-3')\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(len(model3.m2), 0)\n\n        model3.m2.append(model2)\n\n        self.assertEqual(len(model1.m2), 1)\n        self.assertEqual(model1.m2[0], model2)\n        self.assertEqual(len(model2.m1), 2)\n        self.assertEqual(model2.m1[0], model1)\n        self.assertEqual(model2.m1[1], model3)\n        self.assertEqual(len(model3.m2), 1)\n        self.assertEqual(model3.m2[0], model2)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n                {\n                    'id': 'model-3',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n        self.assertEqual(model3.dump(), {\n            'id': 'model-3',\n            'm2': [\n                'model-2',\n            ],\n        })\n\n        model1.m2.clear()\n\n        self.assertEqual(len(model1.m2), 0)\n        self.assertEqual(len(model2.m1), 1)\n        self.assertEqual(model2.m1[0], model3)\n        self.assertEqual(len(model3.m2), 1)\n        self.assertEqual(model3.m2[0], model2)\n        self.assertEqual(model1.dump(), {\n            'id': 'model-1',\n            'm2': [],\n        })\n        self.assertEqual(model2.dump(), {\n            'id': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-3',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n        self.assertEqual(model3.dump(), {\n            'id': 'model-3',\n            'm2': [\n                'model-2',\n            ],\n        })\n\n    def test_load_full(self):\n        model = ManyToManyModel2(self.storage, id='model-2')\n\n        self.assertEqual(model.dump(), {\n            'id': 'model-2',\n            'field': 'model-2',\n            'm1': [\n                {\n                    'id': 'model-1',\n                    'field': 'model-1',\n                    'm2': [\n                        'model-2',\n                    ],\n                },\n            ],\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('m2m-model-2.json'),\n            mock.call('m2m-model-1.json')])\n\n    def test_load_partial(self):\n        model = ManyToManyModel1(self.storage, id='model-1')\n\n        self.assertEqual(model.dump(), {\n            'id': 'model-1',\n            'field': 'model-1',\n            'm2': [\n                'model-2',\n            ],\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('m2m-model-1.json'),\n            mock.call('m2m-model-2.json')])\n\n    def test_save_field(self):\n        model1 = ManyToManyModel1(self.storage, id='model-1')\n        model2 = model1.m2[0]\n        model1.field = 'changed-field-1'\n        model2.field = 'changed-field-2'\n        model2.save()\n\n        self.storage.save.assert_called_once_with('m2m-model-2.json', mock.ANY)\n        self.assertEqual(\n            self.storage.files['m2m-model-2.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"changed-field-2\", \\n'\n            '        \"id\": \"model-2\", \\n'\n            '        \"m1\": [\\n'\n            '            {\\n'\n            '                \"field\": \"model-1\", \\n'\n            '                \"id\": \"model-1\", \\n'\n            '                \"m2\": [\\n'\n            '                    \"model-2\"\\n'\n            '                ]\\n'\n            '            }\\n'\n            '        ]\\n'\n            '    }\\n'\n            ']')\n\n        model1.save()\n\n        self.assertEqual(self.storage.save.call_count, 3)\n        self.storage.save.assert_has_calls([\n            mock.call('m2m-model-2.json', mock.ANY),\n            mock.call('m2m-model-1.json', mock.ANY),\n            mock.call('m2m-model-2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['m2m-model-1.json'],\n            '{\\n'\n            '    \"field\": \"changed-field-1\", \\n'\n            '    \"id\": \"model-1\", \\n'\n            '    \"m2\": [\\n'\n            '        \"model-2\"\\n'\n            '    ]\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['m2m-model-2.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"changed-field-2\", \\n'\n            '        \"id\": \"model-2\", \\n'\n            '        \"m1\": [\\n'\n            '            {\\n'\n            '                \"field\": \"changed-field-1\", \\n'\n            '                \"id\": \"model-1\", \\n'\n            '                \"m2\": [\\n'\n            '                    \"model-2\"\\n'\n            '                ]\\n'\n            '            }\\n'\n            '        ]\\n'\n            '    }\\n'\n            ']')\n\n    def test_save_id(self):\n        model1 = ManyToManyModel1(self.storage, id='model-1')\n        model2 = model1.m2[0]\n        model1.id = 'changed-id-1'\n        model2.id = 'changed-id-2'\n        model2.save()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('m2m-model-2.json', mock.ANY),\n            mock.call('m2m-model-1.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['m2m-model-1.json'],\n            '{\\n'\n            '    \"field\": \"model-1\", \\n'\n            '    \"id\": \"model-1\", \\n'\n            '    \"m2\": [\\n'\n            '        \"changed-id-2\"\\n'\n            '    ]\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['m2m-model-2.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"model-2\", \\n'\n            '        \"id\": \"changed-id-2\", \\n'\n            '        \"m1\": [\\n'\n            '            {\\n'\n            '                \"field\": \"model-1\", \\n'\n            '                \"id\": \"model-1\", \\n'\n            '                \"m2\": [\\n'\n            '                    \"changed-id-2\"\\n'\n            '                ]\\n'\n            '            }\\n'\n            '        ]\\n'\n            '    }\\n'\n            ']')\n\n        model1.save()\n\n        self.assertEqual(self.storage.save.call_count, 4)\n        self.storage.save.assert_has_calls([\n            mock.call('m2m-model-2.json', mock.ANY),\n            mock.call('m2m-model-1.json', mock.ANY),\n            mock.call('m2m-model-1.json', mock.ANY),\n            mock.call('m2m-model-2.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['m2m-model-1.json'],\n            '{\\n'\n            '    \"field\": \"model-1\", \\n'\n            '    \"id\": \"changed-id-1\", \\n'\n            '    \"m2\": [\\n'\n            '        \"changed-id-2\"\\n'\n            '    ]\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['m2m-model-2.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field\": \"model-2\", \\n'\n            '        \"id\": \"changed-id-2\", \\n'\n            '        \"m1\": [\\n'\n            '            {\\n'\n            '                \"field\": \"model-1\", \\n'\n            '                \"id\": \"changed-id-1\", \\n'\n            '                \"m2\": [\\n'\n            '                    \"changed-id-2\"\\n'\n            '                ]\\n'\n            '            }\\n'\n            '        ]\\n'\n            '    }\\n'\n            ']')\n\n\nclass PolymorphicRelationshipTests(DataStoreTestCase):\n    def setUp(self):\n        super(PolymorphicRelationshipTests, self).setUp()\n        self.storage = mock_storage({\n            'parents.json':\n                '{'\n                '    \"id\": \"parent-1\",'\n                '    \"field\": \"parent-1\",'\n                '    \"children\": ['\n                '        {'\n                '            \"type\": \"PolymorphicChildModel1\",'\n                '            \"id\": \"child-1\"'\n                '        },'\n                '        {'\n                '            \"_type_\": \"PolymorphicChildModel2\",'\n                '            \"id\": \"child-2\"'\n                '        }'\n                '    ]'\n                '}',\n            'children.json':\n                '['\n                '    {'\n                '        \"type\": \"PolymorphicChildModel1\",'\n                '        \"id\": \"child-1\",'\n                '        \"field1\": \"child-1\",'\n                '        \"parent\": \"parent-1\"'\n                '    },'\n                '    {'\n                '        \"_type_\": \"PolymorphicChildModel2\",'\n                '        \"id\": \"child-2\",'\n                '        \"field2\": \"child-2\",'\n                '        \"parent\": \"parent-1\"'\n                '    }'\n                ']',\n        })\n\n    def test_no_children(self):\n        parent = PolymorphicParentModel(id='parent-1')\n\n        self.assertEqual(len(parent.children), 0)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [],\n        })\n\n    def test_set_children(self):\n        parent = PolymorphicParentModel(id='parent-1')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1')\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2')\n        parent.children = [child1, child2]\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.children[0], child1)\n        self.assertEqual(parent.children[1], child2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n    def test_add_to_children(self):\n        parent = PolymorphicParentModel(id='parent-1')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1')\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2')\n        parent.children.add(child2)\n        parent.children.add(child1)\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.children[0], child2)\n        self.assertEqual(parent.children[1], child1)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n            ],\n        })\n\n    def test_set_parent(self):\n        parent = PolymorphicParentModel(id='parent-1')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1')\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2')\n        child1.parent = parent\n        child2.parent = parent\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.children[0], child1)\n        self.assertEqual(parent.children[1], child2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n    def test_create_with_children(self):\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1')\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2')\n        parent = PolymorphicParentModel(id='parent-1',\n                                        children=[child1, child2])\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.children[0], child1)\n        self.assertEqual(parent.children[1], child2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n    def test_create_with_parent(self):\n        parent = PolymorphicParentModel(id='parent-1')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1',\n                                        parent=parent)\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2',\n                                        parent=parent)\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.children[0], child1)\n        self.assertEqual(parent.children[1], child2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n    def test_change_parent(self):\n        parent1 = PolymorphicParentModel(id='parent-1')\n        parent2 = PolymorphicParentModel(id='parent-2')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1',\n                                        parent=parent1)\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2',\n                                        parent=parent1)\n\n        self.assertEqual(child1.parent, parent1)\n        self.assertEqual(child2.parent, parent1)\n        self.assertEqual(len(parent1.children), 2)\n        self.assertEqual(len(parent2.children), 0)\n\n        child2.parent = parent2\n\n        self.assertEqual(child1.parent, parent1)\n        self.assertEqual(child2.parent, parent2)\n        self.assertEqual(len(parent1.children), 1)\n        self.assertEqual(len(parent2.children), 1)\n        self.assertEqual(parent1.children[0], child1)\n        self.assertEqual(parent2.children[0], child2)\n        self.assertEqual(parent1.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n            ],\n        })\n        self.assertEqual(parent2.dump(), {\n            'id': 'parent-2',\n            'children': [\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n        child1.parent = parent2\n\n        self.assertEqual(child1.parent, parent2)\n        self.assertEqual(child2.parent, parent2)\n        self.assertEqual(len(parent1.children), 0)\n        self.assertEqual(len(parent2.children), 2)\n        self.assertEqual(parent2.children[0], child2)\n        self.assertEqual(parent2.children[1], child1)\n        self.assertEqual(parent1.dump(), {\n            'id': 'parent-1',\n            'children': [],\n        })\n        self.assertEqual(parent2.dump(), {\n            'id': 'parent-2',\n            'children': [\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n            ],\n        })\n\n    def test_change_children(self):\n        parent = PolymorphicParentModel(id='parent-1')\n        child1 = PolymorphicChildModel1(id='child-1', field1='field-1',\n                                        parent=parent)\n        child2 = PolymorphicChildModel2(id='child-2', field2='field-2')\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, None)\n        self.assertEqual(len(parent.children), 1)\n\n        parent.children = [child1, child2]\n\n        self.assertEqual(child1.parent, parent)\n        self.assertEqual(child2.parent, parent)\n        self.assertEqual(len(parent.children), 2)\n        self.assertEqual(parent.dump(), {\n            'id': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n\n    def test_getitem(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel2(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        self.assertIs(parent.children[0], child1)\n        self.assertIs(parent.children['child-1'], child1)\n        self.assertIs(parent.children[child1], child1)\n        self.assertIs(parent.children[1], child2)\n        self.assertIs(parent.children['child-2'], child2)\n        self.assertIs(parent.children[child2], child2)\n        with self.assertRaises(IndexError):\n            parent.children[1000]\n        with self.assertRaises(KeyError):\n            parent.children['child-4']\n        self.assertEqual(parent.children[2:], [child3])\n\n    def test_get(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel2(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        self.assertIs(parent.children.get(0), child1)\n        self.assertIs(parent.children.get('child-1'), child1)\n        self.assertIs(parent.children.get(child1), child1)\n        self.assertIs(parent.children.get(1), child2)\n        self.assertIs(parent.children.get('child-2'), child2)\n        self.assertIs(parent.children.get(child2), child2)\n        self.assertIs(parent.children.get('child-4'), None)\n        sentinel = object()\n        self.assertIs(parent.children.get('child-4', default=sentinel), sentinel)\n\n    def test_setitem(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel2(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n        child1b = PolymorphicChildModel1(id='child-1')\n        child1c = PolymorphicChildModel1(id='child-1')\n        child1d = PolymorphicChildModel1(id='child-1')\n        child4 = PolymorphicChildModel2(id='child-4')\n        child5 = PolymorphicChildModel1(id='child-5')\n        child6 = PolymorphicChildModel2(id='child-6')\n        child7 = PolymorphicChildModel1(id='child-7')\n\n        parent.children[0] = child1b\n        self.assertIs(parent.children[0], child1b)\n\n        parent.children['child-1'] = child1c\n        self.assertIs(parent.children[0], child1c)\n\n        parent.children[child1] = child1d\n        self.assertIs(parent.children[0], child1d)\n        self.assertListEqual(parent.children, [child1d, child2, child3])\n\n        parent.children[1:1] = [child4, child5]\n        self.assertIs(child4.parent, parent)\n        self.assertIs(child5.parent, parent)\n        self.assertListEqual(parent.children,\n                             [child1d, child4, child5, child2, child3])\n\n        parent.children[:2] = [child6, child7]\n        self.assertIs(child6.parent, parent)\n        self.assertIs(child7.parent, parent)\n        self.assertIs(child1d.parent, None)\n        self.assertIs(child4.parent, None)\n        self.assertListEqual(parent.children,\n                             [child6, child7, child5, child2, child3])\n\n        with self.assertRaises(ValueError):\n            parent.children[0:0] = [child2]\n\n    def test_delitem(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel2(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        child4 = PolymorphicChildModel2(id='child-4')\n        child5 = PolymorphicChildModel1(id='child-5')\n        parent = PolymorphicParentModel(id='parent-1', children=[\n            child1, child2, child3, child4, child5])\n\n        del parent.children[0]\n        del parent.children['child-3']\n        del parent.children[child4]\n\n        self.assertListEqual(parent.children, [child2, child5])\n        self.assertIs(child1.parent, None)\n        self.assertIs(child3.parent, None)\n        self.assertIs(child4.parent, None)\n\n    def test_append(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child1b = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel2(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2])\n\n        parent.children.append(child3)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child3.parent, parent)\n\n        with self.assertRaises(ValueError):\n            parent.children.append(child1b)\n\n    def test_add(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child1b = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel2(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2])\n\n        parent.children.add(child3)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child3.parent, parent)\n\n        parent.children.add(child1b)\n        self.assertListEqual(parent.children, [child1, child2, child3])\n\n    def test_insert(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child2, child3])\n\n        parent.children.insert(0, child1)\n\n        self.assertListEqual(parent.children, [child1, child2, child3])\n        self.assertIs(child1.parent, parent)\n\n    def test_remove(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        parent.children.remove(child1)\n\n        self.assertListEqual(parent.children, [child2, child3])\n        self.assertIs(child1.parent, None)\n\n        with self.assertRaises(ValueError):\n            parent.children.remove(child1)\n\n    def test_discard(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        parent.children.discard(child1)\n\n        self.assertListEqual(parent.children, [child2, child3])\n        self.assertIs(child1.parent, None)\n\n        parent.children.discard(child1)\n        self.assertListEqual(parent.children, [child2, child3])\n\n    def test_pop(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        pop1 = parent.children.pop()\n\n        self.assertIs(pop1, child3)\n        self.assertListEqual(parent.children, [child1, child2])\n        self.assertIs(child3.parent, None)\n\n        pop2 = parent.children.pop('child-1')\n\n        self.assertIs(pop2, child1)\n        self.assertListEqual(parent.children, [child2])\n        self.assertIs(child1.parent, None)\n\n    def test_clear(self):\n        child1 = PolymorphicChildModel1(id='child-1')\n        child2 = PolymorphicChildModel1(id='child-2')\n        child3 = PolymorphicChildModel1(id='child-3')\n        parent = PolymorphicParentModel(\n            id='parent-1', children=[child1, child2, child3])\n\n        parent.children.clear()\n\n        self.assertListEqual(parent.children, [])\n        self.assertIs(child1.parent, None)\n        self.assertIs(child2.parent, None)\n        self.assertIs(child3.parent, None)\n\n    def test_load_full(self):\n        model = PolymorphicParentModel(self.storage, id='parent-1')\n\n        self.assertEqual(model.dump(), {\n            'id': 'parent-1',\n            'field': 'parent-1',\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n        })\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('parents.json'),\n            mock.call('children.json')])\n\n    def test_load_partial(self):\n        model = PolymorphicChildModel1(\n            self.storage, id='child-1', parent=PolymorphicParentModel(\n                self.storage, id='parent-1'))\n\n        self.assertEqual(model.dump(), {\n            'type': 'PolymorphicChildModel1',\n            'id': 'child-1',\n            'field1': 'child-1',\n            'parent': 'parent-1',\n        })\n        self.assertEqual(model, model.parent.children[0])\n        self.assertEqual(self.storage.open.call_count, 2)\n        self.storage.open.assert_has_calls([\n            mock.call('parents.json'),\n            mock.call('children.json')])\n        self.assertEqual(model.parent.dump(), {\n            'children': [\n                {\n                    'type': 'PolymorphicChildModel1',\n                    'id': 'child-1',\n                },\n                {\n                    '_type_': 'PolymorphicChildModel2',\n                    'id': 'child-2',\n                },\n            ],\n            'field': 'parent-1',\n            'id': 'parent-1',\n        })\n\n    def test_save_field(self):\n        parent = PolymorphicParentModel(self.storage, id='parent-1')\n        child = parent.children[0]\n\n        child.field1 = 'changed-id-1'\n        parent.field = 'changed-id-2'\n        parent.save()\n\n        self.assertEqual(self.storage.save.call_count, 1)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"id\": \"child-1\", \\n'\n            '            \"type\": \"PolymorphicChildModel1\"\\n'\n            '        }, \\n'\n            '        {\\n'\n            '            \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '            \"id\": \"child-2\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"changed-id-2\", \\n'\n            '    \"id\": \"parent-1\"\\n'\n            '}')\n\n        child.save()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('children.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field1\": \"changed-id-1\", \\n'\n            '        \"id\": \"child-1\", \\n'\n            '        \"parent\": \"parent-1\", \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '        \"field2\": \"child-2\", \\n'\n            '        \"id\": \"child-2\", \\n'\n            '        \"parent\": \"parent-1\"\\n'\n            '    }\\n'\n            ']')\n\n    def test_save_id(self):\n        parent = PolymorphicParentModel(self.storage, id='parent-1')\n        child = parent.children[0]\n\n        child.id = 'changed-id-1'\n        parent.id = 'changed-id-2'\n        parent.save()\n\n        self.assertEqual(self.storage.save.call_count, 2)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('children.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"id\": \"child-1\", \\n'\n            '            \"type\": \"PolymorphicChildModel1\"\\n'\n            '        }, \\n'\n            '        {\\n'\n            '            \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '            \"id\": \"child-2\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"parent-1\", \\n'\n            '    \"id\": \"changed-id-2\"\\n'\n            '}')\n        self.assertEqual(\n            self.storage.files['children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field1\": \"child-1\", \\n'\n            '        \"id\": \"child-1\", \\n'\n            '        \"parent\": \"changed-id-2\", \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '        \"field2\": \"child-2\", \\n'\n            '        \"id\": \"child-2\", \\n'\n            '        \"parent\": \"changed-id-2\"\\n'\n            '    }\\n'\n            ']')\n\n        child.save()\n\n        self.assertEqual(self.storage.save.call_count, 4)\n        self.storage.save.assert_has_calls([\n            mock.call('parents.json', mock.ANY),\n            mock.call('children.json', mock.ANY),\n            mock.call('children.json', mock.ANY),\n            mock.call('parents.json', mock.ANY)])\n        self.assertEqual(\n            self.storage.files['children.json'],\n            '[\\n'\n            '    {\\n'\n            '        \"field1\": \"child-1\", \\n'\n            '        \"id\": \"changed-id-1\", \\n'\n            '        \"parent\": \"changed-id-2\", \\n'\n            '        \"type\": \"PolymorphicChildModel1\"\\n'\n            '    }, \\n'\n            '    {\\n'\n            '        \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '        \"field2\": \"child-2\", \\n'\n            '        \"id\": \"child-2\", \\n'\n            '        \"parent\": \"changed-id-2\"\\n'\n            '    }\\n'\n            ']')\n        self.assertEqual(\n            self.storage.files['parents.json'],\n            '{\\n'\n            '    \"children\": [\\n'\n            '        {\\n'\n            '            \"id\": \"changed-id-1\", \\n'\n            '            \"type\": \"PolymorphicChildModel1\"\\n'\n            '        }, \\n'\n            '        {\\n'\n            '            \"_type_\": \"PolymorphicChildModel2\", \\n'\n            '            \"id\": \"child-2\"\\n'\n            '        }\\n'\n            '    ], \\n'\n            '    \"field\": \"parent-1\", \\n'\n            '    \"id\": \"changed-id-2\"\\n'\n            '}')\n"
  },
  {
    "path": "portia_server/portia_orm/tests/utils.py",
    "content": "import errno\nimport unittest\n\nfrom unittest import mock\n\nfrom storage.backends import ContentFile\nfrom ..datastore import data_store_context\n\n\nclass DataStoreTestCase(unittest.TestCase):\n    def setUp(self):\n        context_manager = data_store_context()\n        self.addCleanup(context_manager.__exit__, None, None, None)\n        context_manager.__enter__()\n\n\ndef mock_storage(files):\n    def exists(name):\n        return name in files\n\n    def open_(name, *args, **kwargs):\n        try:\n            data = files[name]\n        except KeyError:\n            raise IOError(2, 'No file or directory', name)\n        return ContentFile(data, name)\n\n    def open_with_default(name, default=None, *args, **kwargs):\n        try:\n            return open_(name, *args, **kwargs)\n        except IOError as error:\n            if error.errno == errno.ENOENT:\n                return ContentFile(json.dumps(default), name)\n            raise error\n\n    def save(name, content):\n        files[name] = content.read()\n\n    def delete(name):\n        try:\n            del files[name]\n        except KeyError:\n            raise IOError(2, 'No file or directory', name)\n\n    def listdir(path):\n        path = path.rstrip('/') + '/'\n        dir_set, file_set = set(), set()\n        for p in files.keys():\n            if not p.startswith(path):\n                continue\n            parts = p[len(path):].split('/')\n            if len(parts) == 1:\n                file_set.add(parts[0])\n            else:\n                dir_set.add(parts[0])\n        return sorted(dir_set), sorted(file_set)\n\n    storage = mock.MagicMock()\n    storage.name = 'example'\n    storage.files = files\n    storage.exists.side_effect = exists\n    storage.open.side_effect = open_\n    storage.open_with_default.side_effect = open_with_default\n    storage.save.side_effect = save\n    storage.delete.side_effect = delete\n    storage.listdir.side_effect = listdir\n    return storage\n"
  },
  {
    "path": "portia_server/portia_orm/utils.py",
    "content": "from collections import OrderedDict\nfrom itertools import islice\nfrom uuid import uuid4\n\nfrom django.utils.functional import cached_property\nfrom six import iteritems\n\nfrom .exceptions import ValidationError\n\n__all__ = [\n    'cached_property',\n    'cached_property_ignore_set',\n    'class_property',\n    'short_guid',\n    'unspecified',\n    'uuid4',\n    'validate_type',\n    'AttributeDict',\n    'OrderedIndexedTransformDict',\n]\nJSON_LEN = len('.json')\n_SENTINEL = object()\n\n\nclass cached_property_ignore_set(cached_property):\n    def __set__(self, instance, value):\n        pass\n\n\nclass class_property(object):\n    \"\"\"A read-only descriptor that works on the class too\"\"\"\n    def __init__(self, fget=None):\n        if fget is not None and not isinstance(fget, classmethod):\n            fget = classmethod(fget)\n        self.fget = fget\n\n    def __get__(self, instance, instance_type=None):\n        return self.fget.__get__(instance, instance_type)()\n\n\ndef short_guid():\n    return '-'.join(str(uuid4()).split('-')[1:4])\n\n\nunspecified = object()\n\n\ndef validate_type(value, model):\n    if not isinstance(value, model):\n        raise ValidationError(\n            \"'{!r}' is not an instance of type '{}'\".format(\n                value, model.__name__))\n\n\ndef unwrap_envelopes(data, many, pk_field, remove_key):\n    unwrapped = []\n    for pk, obj in iteritems(data):\n        if not remove_key:\n            try:\n                if obj[pk_field] != pk:\n                    raise ValidationError(\n                        u\"Envelope id does not match value of primary key \"\n                        u\"field\")\n            except KeyError:\n                pass\n        obj[pk_field] = pk\n        unwrapped.append(obj)\n    if not many and len(unwrapped) == 1:\n        return unwrapped[0]\n    return unwrapped\n\n\ndef wrap_envelopes(data, many, pk_field, remove_key):\n    if not many:\n        data = [data]\n    wrapped = OrderedDict()\n    for obj in data:\n        pk = obj[pk_field]\n        if remove_key:\n            del obj[pk_field]\n        wrapped[pk] = obj\n    return wrapped\n\n\nclass AttributeDict(dict):\n    def __getattr__(self, name):\n        try:\n            return self[name]\n        except KeyError:\n            raise AttributeError(\n                u\"'{}' object has no attribute '{}'\".format(\n                    self.__class__.__name__, name))\n\n\ndef strip_json(fname):\n    if fname.endswith('.json'):\n        return fname[:-JSON_LEN]\n    return fname\n\n\nclass OrderedIndexedTransformDict(object):\n    __slots__ = ('_transform', '_data')\n\n    def __init__(self, transform, init_dict=None, **kwargs):\n        if not callable(transform):\n            raise TypeError('expected callable, got %r' % transform.__class__)\n        self._transform = transform\n        self._data = OrderedDict()\n        if init_dict:\n            self.update(init_dict)\n        if kwargs:\n            self.update(kwargs)\n\n    def getitem(self, key):\n        transformed = self._transform(key)\n        value = self._data[transformed]\n        return transformed, value\n\n    def __len__(self):\n        return len(self._data)\n\n    def __iter__(self):\n        return iter(self._data.keys())\n\n    def __getitem__(self, key):\n        try:\n            return self._data[key]\n        except KeyError:\n            return self._data[self._transform(key)]\n\n    def __setitem__(self, key, value=None):\n        transformed = self._transform(key)\n        self._data[transformed] = len(self._data)\n\n    def __delitem__(self, key):\n        if hasattr(key, 'indices'):\n            data_len = len(self._data)\n            indices = key.indices(len(self))\n            if data_len <= len(range(*indices)):\n                self._data = OrderedDict()\n                return\n            keys_to_remove = list(islice(self._data.keys(), *indices))\n            for key in keys_to_remove:\n                del self._data[key]\n            self._data = OrderedDict((k, i) for i, k in enumerate(self._data))\n        else:\n            transformed = self._transform(key)\n            self._remove(transformed)\n            del self._data[transformed]\n\n    def clear(self):\n        self._data.clear()\n\n    def __contains__(self, key):\n        return self._transform(key) in self._data\n\n    def get(self, key, default=None):\n        return self._data.get(self._transform(key), default)\n\n    def pop(self, key, default=_SENTINEL):\n        transformed = self._transform(key)\n        self._remove(transformed)\n        if default is _SENTINEL:\n            return self._data.pop(transformed)\n        else:\n            return self._data.pop(transformed, default)\n\n    def items(self):\n        return self._data.items()\n\n    def update(self, value, **kws):\n        self._data.update(value, **kws)\n\n    def insert(self, index, value):\n        data = self._data\n        for k, v in data.items():\n            if v >= index:\n                data[k] += 1\n        data[value] = index\n\n    def replace(self, key, value):\n        key = self._transform(key)\n        value = self._transform(value)\n        if key == value:\n            return\n        self._data = OrderedDict((value if k == key else k, i)\n                                 for k, i in self._data.items())\n\n    def _remove(self, key):\n        data = self._data\n        if key not in data:\n            return\n        index = data[key]\n        for key, value in data.items():\n            if value > index:\n                data[key] = value - 1\n\n    def popitem(self):\n        transformed, value = self._data.popitem()\n        return transformed, value\n\n    def copy(self):\n        other = self.__class__(self._transform)\n        other._data = self._data.copy()\n        return other\n\n    __copy__ = copy\n\n    def __getstate__(self):\n        return self._transform, self._data\n\n    def __setstate__(self, state):\n        self._transform, self._data = state\n\n    def __repr__(self):\n        try:\n            equiv = dict(self)\n        except TypeError:\n            # Some keys are unhashable, fall back on .items()\n            equiv = list(self.items())\n        return '{}({!r}, {})'.format(self.__class__.__name__,\n                                     self._transform, equiv)\n"
  },
  {
    "path": "portia_server/portia_orm/validators.py",
    "content": "from marshmallow.validate import (ContainsOnly, Range, Regexp, Predicate,\n                                  NoneOf, OneOf)\n\n__all__ = [\n    'ContainsOnly',\n    'Range',\n    'Regexp',\n    'Predicate',\n    'NoneOf',\n    'OneOf'\n]\n"
  },
  {
    "path": "portia_server/portia_server/__init__.py",
    "content": ""
  },
  {
    "path": "portia_server/portia_server/backends.py",
    "content": "from .models import LocalUser\n\n\nclass LocalAuthentication(object):\n    def authenticate(self, request, **kwargs):\n        return LocalUser(**kwargs), None\n\n    def get_user(self, user_id):\n        # fall through and let the middleware add the user again\n        return None\n"
  },
  {
    "path": "portia_server/portia_server/models.py",
    "content": "from __future__ import unicode_literals\n\nimport getpass\nimport socket\n\nfrom django.db.models.fields import CharField\nfrom django.contrib.auth.models import AnonymousUser\nfrom django.utils.encoding import python_2_unicode_compatible\n\n\n@python_2_unicode_compatible\nclass LocalUser(AnonymousUser):\n    is_active = True\n    default_username = getpass.getuser()\n\n    # add this so that the methods in django.contrib.auth that expect a user\n    # model with a pk field work correctly\n    class _meta:\n        pk = CharField()\n        pk.set_attributes_from_name('pk')\n\n    def __init__(self, **kwargs):\n        super(LocalUser, self).__init__()\n        self.username = kwargs.get('username', self.default_username)\n        try:\n            self.id\n        except AttributeError:\n            self.id = None\n\n    @property\n    def pk(self):\n        return self.id\n\n    def __str__(self):\n        return 'LocalUser({})'.format(self.username)\n\n    def __eq__(self, other):\n        return isinstance(other, self.__class__) and other.id == self.id\n\n    def __hash__(self):\n        hash(self.id)\n\n    def is_anonymous(self):\n        return False\n\n    def is_authenticated(self):\n        return True\n\n    def save(self, *args, **kwargs):\n        pass\n"
  },
  {
    "path": "portia_server/portia_server/settings.py",
    "content": "\"\"\"\nDjango settings for portia_server project.\n\nGenerated by 'django-admin startproject' using Django 1.9.7.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.9/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/1.9/ref/settings/\n\"\"\"\n\nimport os\n\n# Build paths inside the project like this: os.path.join(BASE_DIR, ...)\nBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\nSTATIC_ROOT = os.path.realpath(os.path.join(BASE_DIR, '../portiaui/dist'))\nSTATIC_URL = '/'\nSTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'\nMEDIA_ROOT = os.path.abspath(os.path.join(BASE_DIR, '../data/projects'))\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = 'x8#v=v_yen3pvul&2*-x3=td2eqvw%5!*qaf^g8vzu#gcyo+%n'\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\n    '*'\n]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n    'db_repo.apps.DbRepoConfig',\n    'storage.apps.StorageConfig',\n    'portia_orm.apps.PortiaOrmConfig',\n    'portia_api.apps.PortiaApiConfig',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'whitenoise.runserver_nostatic',\n    'django.contrib.staticfiles',\n]\n\nMIDDLEWARE = [\n    'django.middleware.security.SecurityMiddleware',\n    'whitenoise.middleware.WhiteNoiseMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n    'portia_orm.middleware.ORMDataStoreMiddleware',\n]\n\nROOT_URLCONF = 'portia_server.urls'\n\nWSGI_APPLICATION = 'portia_server.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/1.9/ref/settings/#databases\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),\n    }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/1.9/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_L10N = True\n\nUSE_TZ = True\n\nPORTIA_STORAGE_BACKEND = os.environ.get('PORTIA_STORAGE_BACKEND',\n                                        'storage.backends.FsStorage')\n\nREST_FRAMEWORK = {\n    'DEFAULT_AUTHENTICATION_CLASSES': (\n        'portia_server.backends.LocalAuthentication',\n    ),\n    'EXCEPTION_HANDLER': 'portia_api.jsonapi.exceptions.jsonapi_exception_handler',\n    'URL_FORMAT_OVERRIDE': None\n}\n\nCUSTOM = {}\n\nCAPABILITIES = {\n    'version_control': False,\n    'create_projects': True,\n    'delete_projects': True,\n    'rename_projects': True,\n    'deploy_projects': True,\n    'rename_spiders': True,\n    'rename_templates': True,\n}\n\n# domains that portia will not load\nBLACKLIST_URLS = set()\n\n# Schedule and deploy settings\nPROJECT_DEPLOYER = os.environ.get(\n    'PROJECT_DEPLOYER',\n    'portia_api.utils.deploy.scrapyd.ScrapydDeploy')\n# Function or object to generate version for deploy\nDEPLOY_VERSION = None\n\n\n# Scrapyd Deploy settings\n\n# Path to default scrapyd cfg file\nSCRAPYD_CFG_DEFAULT = os.environ.get('SCRAPYD_CFG_DEFAULT', None)\n# Base API url for scrapyd instance\nSCRAPYD_URL = os.environ.get('SCRAPYD_URL', 'http://localhost:6800/')\nSCRAPYD_USERNAME = os.environ.get('SCRAPYD_USERNAME')\nSCRAPYD_PASSWORD = os.environ.get('SCRAPYD_PASSWORD')\n\n\n# Scrapinghub Deploy settings\nSCRAPINGHUB_APIKEY = (os.environ.get('SCRAPINGHUB_APIKEY') or\n                      os.environ.get('SHUB_APIKEY'))\n"
  },
  {
    "path": "portia_server/portia_server/urls.py",
    "content": "from django.conf.urls import url, include\n\nfrom . import views\nfrom portia_api import urls\n\nurlpatterns = [\n    url(r'^api/', include((urls, 'api'), namespace='api')),\n    url(r'^server_capabilities$', views.capabilities),\n]\n"
  },
  {
    "path": "portia_server/portia_server/views.py",
    "content": "from django.conf import settings\nfrom portia_api.jsonapi import JSONResponse\n\n\ndef capabilities(request):\n    capabilities = {\n        'custom': settings.CUSTOM,\n        'username': request.user.username,\n        'capabilities': settings.CAPABILITIES,\n    }\n    return JSONResponse(capabilities)\n"
  },
  {
    "path": "portia_server/portia_server/wsgi.py",
    "content": "\"\"\"\nWSGI config for portia_server project.\n\nIt exposes the WSGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/\n\"\"\"\n\nimport os\n\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"portia_server.settings\")\n\napplication = get_wsgi_application()\n"
  },
  {
    "path": "portia_server/requirements.txt",
    "content": "crochet==1.9.0\ndjango>=1.11.21\ndjango-cache-machine==1.0.0\ndjangorestframework==3.7.7\ndj-database-url==0.5.0\ndrf-nested-routers==0.11.1\ndulwich==0.18.6\nmarshmallow==2.8.0\nmarshmallow_jsonapi==0.10.0\nmysqlclient==1.3.12\nrequests>=2.20.0\ntoposort==1.5\nwhitenoise==3.3.1\nportia2code==0.0.17\nshub==2.7.0\n"
  },
  {
    "path": "portia_server/storage/__init__.py",
    "content": "from django.conf import settings\nfrom django.utils.module_loading import import_string\n\n__all__ = [\n    'get_storage_class',\n    'create_project_storage',\n]\n\nstorage_class = None\n\n\ndef get_storage_class():\n    global storage_class\n    if storage_class is None and settings.PORTIA_STORAGE_BACKEND:\n        storage_class = import_string(settings.PORTIA_STORAGE_BACKEND)\n        storage_class.setup()\n    return storage_class\n\n\ndef create_project_storage(project_id, author=None, branch=None):\n    storage_class = get_storage_class()\n    return storage_class(project_id, author=author)\n"
  },
  {
    "path": "portia_server/storage/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass StorageConfig(AppConfig):\n    name = 'storage'\n"
  },
  {
    "path": "portia_server/storage/backends.py",
    "content": "import errno\nimport json\nimport logging\nimport os\nimport os.path\nimport re\nimport shutil\nimport six\nimport sys\n\nfrom collections import OrderedDict\n\nfrom django.conf import settings\nfrom django.core.files.base import ContentFile\nfrom django.core.files.move import file_move_safe\nfrom django.core.files.storage import FileSystemStorage, Storage\ntry:\n    from dulwich.diff_tree import tree_changes\n    from dulwich.objects import Blob, Tree\n    from dulwich.errors import ObjectMissing\nexcept ImportError:\n    pass  # Dulwich not required when using FS backend\nfrom six import iteritems, text_type, string_types\n\nfrom .projecttemplates import templates\ntry:\n    from .repoman import Repoman, DEFAULT_USER, FILE_MODE\nexcept ImportError:\n    pass  # Repoman not required when using FS backend\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass InvalidFilename(Exception):\n    pass\n\n\nclass CommittingStorage(object):\n    version_control = False\n    create_projects = True\n    delete_projects = True\n    rename_projects = True\n    deploy_projects = False\n    rename_spiders = True\n    rename_samples = True\n\n    default_files = {\n        'project.json': 'PROJECT',\n        'scrapy.cfg': 'SCRAPY',\n        'setup.py': 'SETUP',\n        'items.json': 'ITEMS',\n        'extractors.json': 'EXTRACTORS',\n        os.path.join('spiders', '__init__.py'): None,\n        os.path.join('spiders', 'settings.py'): 'SETTINGS',\n    }\n\n    def init_project(self):\n        self.validate_filename(self.name)\n\n        for filename, templatename in iteritems(self.default_files):\n            if not self.exists(filename):\n                template = templates.get(templatename, '') % {\n                    'name': self.name,\n                }\n                self.save(filename, ContentFile(template, filename))\n\n    @classmethod\n    def get_projects(cls, user):\n        # return an OrderedDict of id => name pairs\n        try:\n            dirs, _ = cls('').listdir('')\n            return OrderedDict((project, project) for project in dirs)\n        except OSError as ex:\n            if ex.errno != errno.ENOENT:\n                six.reraise(*sys.exc_info())\n\n    @classmethod\n    def setup(cls):\n        pass\n\n    def get_available_name(self, name, max_length=None):\n        return name\n\n    def commit(self, message='Saving multiple files'):\n        pass\n\n    def changed_files(self):\n        return []\n\n\nclass BasePortiaStorage(CommittingStorage, Storage):\n    def __init__(self, name, author=None):\n        self.name = text_type(name)\n\n    @staticmethod\n    def is_valid_filename(s):\n        # based on Django's Storage.get_valid_filename\n        if s.strip() != s:\n            return False\n        if re.sub(r'(?u)[^- \\w.]', '', s) != s:\n            return False\n        return True\n\n    @classmethod\n    def validate_filename(cls, s):\n        s = text_type(s)\n        if not cls.is_valid_filename(s):\n            raise InvalidFilename(\n                u\"The string '{}' is not a valid filename.\".format(s))\n        return s\n\n    def open_with_default(self, name, default=None):\n        try:\n            return self.open(name, mode='r')\n        except IOError as error:\n            if error.errno == errno.ENOENT:\n                return ContentFile(json.dumps(default), name)\n            raise error\n\n\nclass FsStorage(BasePortiaStorage, FileSystemStorage):\n    base_dir = settings.MEDIA_ROOT\n\n    def __init__(self, name, author=None, *args, **kwargs):\n        self.author = author\n        super(FsStorage, self).__init__(name, *args, **kwargs)\n        FileSystemStorage.__init__(self, os.path.join(\n            self.base_dir, self.name))\n        if name:\n            self.init_project()\n\n    def isdir(self, name):\n        return os.path.isdir(self.path(name))\n\n    def isfile(self, name):\n        return os.path.isfile(self.path(name))\n\n    def move(self, old_file_name, new_file_name, allow_overwrite=False):\n        if self.isdir(old_file_name):\n            shutil.move(self.path(old_file_name), self.path(new_file_name))\n        else:\n            file_move_safe(self.path(old_file_name), self.path(new_file_name),\n                           allow_overwrite=True)\n\n    def rmtree(self, name):\n        shutil.rmtree(self.path(name))\n\n    def _save(self, name, content):\n        # Taken from django.core.files.storage.FileSystemStorage._save\n        # Need to allow overwrite\n        full_path = self.path(name)\n        directory = os.path.dirname(full_path)\n        if not os.path.exists(directory):\n            try:\n                if self.directory_permissions_mode is not None:\n                    # os.makedirs applies the global umask, so we reset it,\n                    # for consistency with file_permissions_mode behavior.\n                    old_umask = os.umask(0)\n                    try:\n                        os.makedirs(directory, self.directory_permissions_mode)\n                    finally:\n                        os.umask(old_umask)\n                else:\n                    os.makedirs(directory)\n            except OSError as e:\n                if e.errno != errno.EEXIST:\n                    six.reraise(*sys.exc_info())\n\n        if not os.path.isdir(directory):\n            raise IOError(\"%s exists and is not a directory.\" % directory)\n\n        try:\n            _file = None\n            for chunk in content.chunks():\n                if _file is None:\n                    mode = 'wb' if isinstance(chunk, bytes) else 'wt'\n                    _file = open(full_path, mode)\n                _file.write(chunk)\n        finally:\n            if _file is not None:\n                _file.close()\n\n        if self.file_permissions_mode is not None:\n            os.chmod(full_path, self.file_permissions_mode)\n\n        return name\n\n    def delete(self, name):\n        super(FsStorage, self).delete(name)\n        name = self.path(name)\n        if name.endswith('.json'):\n            dir_path = name[:-len('.json')]\n            if self.isdir(dir_path):\n                self.rmtree(dir_path)\n\n\nclass GitStorage(BasePortiaStorage):\n    version_control = True\n\n    def __init__(self, name, author=None):\n        super(GitStorage, self).__init__(name)\n        if not name:\n            return\n        self._tree, self._working_tree = None, None\n        self.author = author\n        repo = Repoman.open_repo(name, author)\n        self.repo = repo\n        self.branch = branch = (author and author.username) or DEFAULT_USER\n        self.checkout(branch=branch)\n        self.init_project()\n\n    def checkout(self, commit=None, branch=None, retry=True):\n        if commit is not None and isinstance(commit, string_types):\n            commit = self.repo._repo.get_object(commit)\n        if not commit:\n            branches = OrderedDict((('refs/heads/%s' % branch or 'master', 1),\n                                    ('refs/heads/master', 1)))\n            for ref in branches:\n                try:\n                    _commit_id = self.repo._repo.refs[ref]\n                except KeyError:\n                    pass\n                else:\n                    try:\n                        commit = self.repo._repo.get_object(_commit_id)\n                    except ObjectMissing:\n                        if ref != 'refs/heads/master':\n                            del self.repo._repo.refs[ref]\n                        else:\n                            six.reraise(*sys.exc_info())\n                    else:\n                        break\n        if commit is not None and isinstance(commit, string_types):\n            commit = self.repo._repo.get_object(commit)\n        self._commit = commit\n        if commit is None:\n            tree = Tree()\n        else:\n            try:\n                tree = self.repo._repo.get_object(commit.tree)\n            except ObjectMissing:\n                if retry and branch is not None:\n                    if branch != 'master':\n                        del self.repo._repo.refs['refs/heads/%s' % branch]\n                        return self.checkout(branch='master', retry=False)\n                    else:\n                        six.reraise(*sys.exc_info())\n        self._tree = tree\n        self._working_tree = tree.copy()\n        self._blobs = {}\n        # TODO: Fail if there are changes in working tree\n\n    @classmethod\n    def setup(cls):\n        Repoman.setup(getattr(settings, 'GITSTORAGE_REPO_BACKEND',\n                              'dulwich.repo.Repo'))\n\n    def _open(self, name, mode='rb'):\n        name = self.path(name)\n        logger.debug('Dulwich open: {}'.format(name))\n        if self.isfile(name):\n            _, sha = self._working_tree[name]\n            if sha in self._blobs:\n                blob = self._blobs[sha]\n            else:\n                blob = self.repo._repo.get_object(sha)\n                self._blobs[sha] = blob\n            return ContentFile(blob.data, name)\n        raise IOError(2, 'No file or directory', name)\n\n    def _save(self, name, content):\n        name = self.path(name)\n        blob = Blob.from_string(content.read())\n        self._blobs[blob.id] = blob\n        self._working_tree.add(name, FILE_MODE, blob.id)\n        return name\n\n    def delete(self, name):\n        name = self.path(name)\n        if self.isfile(name):\n            del self._working_tree[name]\n        else:\n            raise IOError(2, 'No file or directory', name)\n        if name.endswith('.json'):\n            dir_path = name[:-len('.json')]\n            if self.isdir(dir_path):\n                self.rmtree(dir_path)\n\n    def exists(self, name):\n        name = self.path(name)\n        if self.isfile(name) or self.isdir(name):\n            return True\n        return False\n\n    def listdir(self, path):\n        path = '{}/'.format(self.path(path))\n        # All paths should be relative to the project directory\n        path_parts = len(path.strip('/').split('/'))\n        if path == '/':\n            path = ''\n        if path:\n            path_parts += 1\n        dirs, files = set(), set()\n        for p in self._working_tree:\n            if not p.startswith(path):\n                continue\n            split = p.split('/')\n            try:\n                section = split[path_parts - 1]\n            except IndexError:\n                # File in parent directory with similar name to directory\n                continue\n            if len(split) == path_parts:\n                files.add(section)\n            else:\n                dirs.add(section)\n        return sorted(dirs), sorted(files)\n\n    def isdir(self, name):\n        name = self.path(name)\n        dir_name = name + '/'\n        if any(path.startswith(dir_name) for path in self._working_tree):\n            return True\n        return False\n\n    def isfile(self, name):\n        name = self.path(name)\n        if name in self._working_tree:\n            return True\n        return False\n\n    def move(self, old_name, new_name, allow_overwrite=False):\n        old_name = self.path(old_name)\n        if not self.exists(old_name):\n            raise IOError(2, 'No file or directory', old_name)\n        new_name = self.path(new_name)\n        if old_name == new_name:\n            return\n        if self.isfile(old_name):\n            self._working_tree[new_name] = self._working_tree[old_name]\n            del self._working_tree[old_name]\n        elif self.isdir(old_name):\n            dir_name = old_name + '/'\n            for path in self._working_tree:\n                if path.startswith(dir_name):\n                    new_path = self.path(\n                        '{}/{}'.format(new_name, path[len(old_name):]))\n                    self._working_tree[new_path] = self._working_tree[path]\n                    del self._working_tree[path]\n\n    def rmtree(self, name):\n        name = self.path(name)\n        if not self.isdir(name):\n            raise IOError(2, 'No file or directory', name)\n        dir_name = name + '/'\n        for path, _, _ in self._working_tree.items():\n            if path.startswith(dir_name):\n                del self._working_tree[path]\n\n    def path(self, path):\n        path = path.lstrip('.').strip('/')\n        if path:\n            path = os.path.relpath(path)\n            # Handle paths for mysql repo where there is no project name\n            if path.startswith(getattr(self.repo._repo, '_name', '\\0')):\n                path = os.path.join(*(path.split('/')[1:]))\n        try:\n            return path.encode('utf-8')\n        except AttributeError:\n            return path\n\n    def commit(self, message='Saving multiple files'):\n        working_tree = self._working_tree\n        if working_tree == self._tree:\n            return\n\n        if self._commit is None:\n            self.repo = repo = Repoman.create_repo(self.name, self.author)\n            self._commit = repo.last_commit\n\n        fake_store = {\n            self._tree.id: self._tree,\n            working_tree.id: working_tree,\n        }\n\n        blobs = []\n        for change in tree_changes(fake_store, self._tree.id, working_tree.id):\n            if change.new.sha in self._blobs:\n                blobs.append(self._blobs[change.new.sha])\n\n        commit = self.repo._create_commit()\n        commit.parents = [self._commit.id]\n        commit.tree = working_tree.id\n        commit.message = message\n        self.repo._update_store(commit, working_tree, *blobs)\n        self.repo._advance_branch(self.branch, commit)\n\n        self._commit = commit\n        self._tree = working_tree\n        self._working_tree = working_tree.copy()\n\n    def changed_files(self):\n        if self.branch == 'master':\n            return []\n        try:\n            changes = self.repo.get_branch_changed_entries(self.branch)\n        except KeyError:\n            return []\n        return [\n            (entry.type, entry.new.path, entry.old.path) for entry in changes\n        ]\n"
  },
  {
    "path": "portia_server/storage/jsondiff.py",
    "content": "import difflib\n\nfrom collections import namedtuple\nfrom six.moves import zip_longest\n\n_BLANK = object()\n\n\nclass Conflict(object):\n    def __init__(self, mine, other, base):\n        self.mine = [mine] if mine is not _BLANK else None\n        self.other = [other] if other is not _BLANK else None\n        self.base = [base] if base is not _BLANK else None\n\n    @classmethod\n    def from_prepared(cls, mine, other, base):\n        m = mine[0] if mine else _BLANK\n        o = other[0] if other else _BLANK\n        b = base[0] if base else _BLANK\n        conflict = cls(m, o, b)\n        for m, o, b in zip_longest(mine[1:], other[1:], base[1:],\n                                   fillvalue=_BLANK):\n            conflict.update(m, o, b)\n        return conflict\n\n    @classmethod\n    def resolve_sub_conflict(cls, mine, other):\n        c = cls.from_prepared(mine, other, [])\n        return c.resolve_conflict() or []\n\n    def update(self, m, o, b):\n        if m is not _BLANK:\n            self.mine.append(m)\n        if o is not _BLANK:\n            self.other.append(o)\n        if b is not _BLANK:\n            self.base.append(b)\n\n    def resolve_conflict(self):\n        if self.mine is None and self.other is not None:\n            return self.other\n        if self.other is None and self.mine is not None:\n            return self.mine\n        if self.other == self.mine:\n            return self.mine\n        combined = set(self.mine or []) | set(self.other or [])\n        if (self.base is not None and\n                not any(i in combined for i in self.base)):\n            return [self]\n        mine = self.mine if self.mine else []\n        other = self.other if self.other else []\n        i_mine, i_other = iter(mine), iter(other)\n        result, new_mine, new_other = [], [], []\n        for diff in difflib.Differ().compare([str(i) for i in other],\n                                             [str(i) for i in mine]):\n            if ((diff.startswith('+') and (new_other or result)) or\n                    (diff.startswith('-') and (new_mine or result)) or\n                    (result and (new_other or new_mine))):\n                if new_mine or new_other:\n                    result.insert(0, Conflict.from_prepared(new_mine,\n                                                            new_other,\n                                                            []))\n                result.extend(Conflict.resolve_sub_conflict(\n                              [i for i in i_mine],\n                              [i for i in i_other]))\n                break\n            elif diff.startswith('-'):\n                new_other.append(next(i_other))\n            elif diff.startswith('+'):\n                new_mine.append(next(i_mine))\n            elif diff.startswith(' '):\n                next(i_other)\n                result.append(next(i_mine))\n        return result\n\n    def _asdict(self):\n        return {\n            'my_op': 'CHANGED',\n            'my_val': self.mine,\n            'other_op': 'CHANGED',\n            'other_val': self.other,\n            'base_val': self.base\n        }\n\n    def __eq__(self, other):\n        return (self.mine == other.mine and self.other == other.other and\n                self.base == other.base)\n\n    def __str__(self):\n        return 'Conflict{}'.format(str((self.mine, self.other, self.base)))\n\n    def __repr__(self):\n        return str(self)\n\n\ndef merge_lists(base, mine, other):\n    if mine == other:\n        return mine\n    if other == base:\n        return mine\n    if mine == base:\n        return other\n    result = []\n    last_conflict = False\n    for i, (m, o, b) in enumerate(zip_longest(mine, other, base,\n                                              fillvalue=_BLANK)):\n        if (m == o and _BLANK not in (m, o) or\n                isinstance(m, dict) and isinstance(o, dict)):\n            result.append(m)\n        else:  # Conflict\n            if last_conflict:\n                c = result[-1]\n                c.update(m, o, b)\n            else:\n                c = Conflict(m, o, b)\n                result.append(c)\n            last_conflict = True\n            continue\n        last_conflict = False\n    offset = 0\n    for i, r in enumerate(result[:]):\n        if isinstance(r, Conflict):\n            c = r.resolve_conflict() or []\n            result = result[:i + offset] + c + result[i + offset + 1:]\n            offset += len(c) - 1\n    return result\n\n\nclass JsonDiff(object):\n    \"\"\"\n    Compares two json objects and stores the differences.\n    Only the outermost objects are considered, the comparison does not recurse\n    into nested objects.\n    \"\"\"\n    def __init__(self, old, new):\n        set_new, set_old = set(new), set(old)\n        common = set_new & set_old\n        self.added = list(set_new - common)\n        self.removed = list(set_old - common)\n        self.changed = [k for k in common if new[k] != old[k]]\n        self.unchanged = [k for k in common if new[k] == old[k]]\n\n    def op_for_field(self, field_name):\n        for operation in ('ADDED', 'UNCHANGED', 'CHANGED', 'REMOVED'):\n            if field_name in getattr(self, operation.lower()):\n                return operation\n        return None\n\n\nFieldDiff = namedtuple(\n    'DiffOp', ['my_op', 'my_val', 'other_op', 'other_val', 'base_val'])\n\n\ndef merge_jsons(base, mine, other):\n    \"\"\"\n    Performs a 3-way merge of mine and other using base as the common ancestor.\n\n    Some conflicts are automatically resolved, e.g. mine and other both delete\n    the same field.\n    Conflicts that can't be automatically resolved (e.g. mine and other assign\n    different values to the same field) are serialized into the merged json in\n    a way that can be used for a later manual resolve:\n\n        field: { __CONFLICT:\n                    base_val: X,  # the original value of the field\n                    my_val: Y,    # the value assigned by mine json\n                    my_op: Z,     # the operation performed by mine json\n                    other_val: U, # the value assigned by other json\n                    other_op: W,  # the operation performed by other json\n                }\n\n        my_op and other_op can take any of this values: 'ADDED', 'REMOVED',\n        'CHANGED', 'UNCHAGED'. If my_op == 'DELETED' then my_value == None\n        (the same applies to other_op and other_val respectively).\n\n    The merge recurses into dictionaries but considers lists as atomic values.\n    Returns a tuple of the form (merged, had_conflict).\n    \"\"\"\n    def build_merge_dict(base, mine, other):\n        my_diff = JsonDiff(base, mine)\n        other_diff = JsonDiff(base, other)\n        base, mine, other = (j if isinstance(j, dict) else {}\n                             for j in (base, mine, other))\n        all_fields = set(base.keys()).union(mine.keys()).union(other.keys())\n        merge_dict = {}\n        for k in all_fields:\n            base_val, my_val, other_val = (\n                base.get(k, {}), mine.get(k), other.get(k))\n            if isinstance(my_val, dict) and isinstance(other_val, dict):\n                merge_dict[k] = build_merge_dict(base_val, my_val, other_val)\n            if isinstance(my_val, list) and isinstance(other_val, list):\n                merge_dict[k] = merge_lists(base_val, my_val, other_val)\n            else:\n                merge_dict[k] = FieldDiff(base_val=base.get(k),\n                                          my_val=my_val,\n                                          my_op=my_diff.op_for_field(k),\n                                          other_val=other_val,\n                                          other_op=other_diff.op_for_field(k))\n        return merge_dict\n\n    def eq_vals(diff):\n        return diff.other_val == diff.my_val\n\n    def conflict(diff):\n        return {'__CONFLICT': diff._asdict()}\n\n    def resolve_json(merge_dict):\n        out_json = {}\n        had_conflict = False\n        for key, diff in merge_dict.items():\n            if isinstance(diff, dict):\n                out_json[key], rconflict = resolve_json(diff)\n                had_conflict = had_conflict or rconflict\n            if isinstance(diff, list):\n                for i, item in enumerate(diff):\n                    if isinstance(item, Conflict):\n                        if (item.mine and isinstance(item.mine[0], dict) and\n                                '__CONFLICT' in item.mine[0]):\n                            diff[i] = item.mine[0]\n                        else:\n                            diff[i] = conflict(item)\n                        had_conflict = True\n                out_json[key] = diff\n            elif diff.my_op in ('UNCHANGED', None):\n                if diff.other_op != 'REMOVED':\n                    out_json[key] = diff.other_val\n            elif diff.my_op == 'ADDED':\n                if diff.other_op != 'ADDED' or eq_vals(diff):\n                    out_json[key] = diff.my_val\n                else:\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n            elif diff.my_op == 'REMOVED':\n                if diff.other_op == 'CHANGED':\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n            elif diff.my_op == 'CHANGED':\n                if diff.other_op == 'UNCHANGED' or eq_vals(diff):\n                    out_json[key] = diff.my_val\n                else:\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n        return out_json, had_conflict\n\n    return resolve_json(build_merge_dict(base, mine, other))\n"
  },
  {
    "path": "portia_server/storage/projecttemplates.py",
    "content": "from slybot import __version__ as slybot_version\n\n_PROJECT_TEMPLATE = \"\"\"\\\n{}\\\n\"\"\"\n\n\n_SETTINGS_TEMPLATE = \"\"\"\\\n# Automatically created by: portia\nimport os\n\nSPIDER_MANAGER_CLASS = 'slybot.spidermanager.SlybotSpiderManager'\nEXTENSIONS = {\n    'slybot.closespider.SlybotCloseSpider': 1\n}\nITEM_PIPELINES = {\n    'slybot.dupefilter.DupeFilterPipeline': 1,\n    'slybot.meta.DropMetaPipeline': 2\n}\nSPIDER_MIDDLEWARES = {\n    # as close as possible to spider output\n    'slybot.spiderlets.SpiderletsMiddleware': 999\n}\nDOWNLOADER_MIDDLEWARES = {\n    'slybot.pageactions.PageActionsMiddleware': 700,\n    'scrapy_splash.middleware.SplashCookiesMiddleware': 723,\n    'slybot.splash.SlybotJsMiddleware': 725\n}\nPLUGINS = [\n    'slybot.plugins.scrapely_annotations.Annotations',\n    'slybot.plugins.selectors.Selectors'\n]\nSLYDUPEFILTER_ENABLED = True\nSLYDROPMETA_ENABLED = False\nDUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'\nFEED_EXPORTERS = {\n    'csv': 'slybot.exporter.SlybotCSVItemExporter',\n}\nCSV_EXPORT_FIELDS = None\n\nPROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))\n\ntry:\n    from local_slybot_settings import *\nexcept ImportError:\n    pass\ntry:\n    from slybot_settings import *\nexcept ImportError:\n    pass\n\"\"\"\n\n\n_SETUP_PY_TEMPLATE = \"\"\"\\\n# Automatically created by: portia\n\nfrom setuptools import setup, find_packages\n\nsetup(\n    name='%(name)s',\n    version='1.0',\n    packages=find_packages(),\n    data_files = [\n        ('', ['project.json', 'items.json', 'extractors.json']),\n    ],\n    entry_points={\n        'scrapy': [\n            'settings = spiders.settings'\n        ]\n    },\n    zip_safe=True,\n    include_package_data=True,\n)\n\n\"\"\"\n\n\n_SCRAPY_TEMPLATE = \"\"\"\\\n# Automatically created by: portia\n\n[settings]\ndefault = spiders.settings\n\"\"\"\n\n_MANIFEST_TEMPLATE = \"\"\"\\\ninclude project.json\ninclude extractors.json\ninclude items.json\nrecursive-include spiders **.json\nrecursive-include spiders **.html\n\"\"\"\n\n_ITEMS_TEMPLATE = \"\"\"\\\n{}\n\"\"\"\n\n_EXTRACTORS_TEMPLATE = \"\"\"\\\n{}\n\"\"\"\n\n_REQUIREMENTS = \"\"\"\\\n# Automatically created by: portia\n\nslybot=={}\ndateparser==0.7.0\nloginform>=1.2.0\npage_finder\nscrapylib\nscrapy-splash\nscrapy-crawlera\nscrapy-deltafetch\nscrapy-dotpersistence\nscrapy-pagestorage\n\"\"\".format(slybot_version)\n\n\ntemplates = {\n    'PROJECT': _PROJECT_TEMPLATE,\n    'SETTINGS': _SETTINGS_TEMPLATE,\n    'SETUP': _SETUP_PY_TEMPLATE,\n    'SCRAPY': _SCRAPY_TEMPLATE,\n    'ITEMS': _ITEMS_TEMPLATE,\n    'EXTRACTORS': _EXTRACTORS_TEMPLATE,\n    'MANIFEST': _MANIFEST_TEMPLATE,\n    'REQUIREMENTS': _REQUIREMENTS,\n}\n"
  },
  {
    "path": "portia_server/storage/repoman.py",
    "content": "from __future__ import absolute_import\nfrom time import time\nfrom collections import defaultdict\nfrom json import dumps, loads\nfrom itertools import chain\n\nfrom scrapy.utils.misc import load_object\n\nfrom dulwich.errors import ObjectMissing\nfrom dulwich.objects import Blob, Tree, Commit, Tag, parse_timezone\nfrom dulwich.diff_tree import tree_changes, RenameDetector\n\nfrom .jsondiff import merge_jsons\n\n\nCHANGE_MODIFY = 'modify'\nCHANGE_DELETE = 'delete'\nCHANGE_RENAME = 'rename'\n\nDEFAULT_USER = 'defaultuser'\nFILE_MODE = 0o100644\n\nsentinel = object()\n\n\nclass Repoman(object):\n    \"\"\"An interface to interact with Git repositories.\n\n    Only json files are allowed into the repository as a custom merge algorithm\n    is used to resolve conflicts. Changes must be recorded into the repo file\n    by file using the save_file and delete_file methods.\n\n    The expected work-flow for concurrent usage of a repo is:\n\n    * User A branches the repo to make his edits.\n    * User B branches the repo to make his edits.\n    * User A changes some files using save_file and delete_file.\n    * User B changes some files using save_file and delete_file.\n    * User A publishes his changes using publish_branch.\n    * User A deletes his edit branch.\n    * User B tries to publish using publish_branch. If the automatic merge\n    is not able to resolve all conflicts, the publish is unsuccessful but\n    intermediate merge files are be created containing meta-data to help\n    resolve the pending conflicts.\n        * User B resolves the pending conflicts.\n        * User B publishes his changes using publish_branch.\n        * User B deletes his edit branch.\n    \"\"\"\n    def __init__(self, author):\n        \"\"\"Do not instantiate directly, use create_repo or open_repo.\"\"\"\n        self._author = (author and author.username) or DEFAULT_USER\n        self._encoding = 'UTF-8'\n        self._time_zone = parse_timezone('+0000')[0]\n        self.commit = sentinel\n        self.last_commit = None\n        self.tree = sentinel\n        self.last_tree = None\n\n    @classmethod\n    def setup(cls, storage_backend):\n        cls.storage = load_object(storage_backend)\n\n    @classmethod\n    def create_repo(cls, repo_name, author=None):\n        \"\"\"Create a new repository named repo_name.\"\"\"\n        if cls.storage.repo_exists(repo_name):\n            raise NameError()\n        repoman = cls(author)\n        repoman._repo = cls.storage.init_bare(repo_name)\n        tree = Tree()\n        commit = repoman._create_commit()\n        commit.tree = tree.id\n        commit.message = 'Initialization commit'\n        repoman.advance_branch(commit, tree, 'master')\n        return repoman\n\n    @classmethod\n    def open_repo(cls, repo_name, author=None):\n        \"\"\"Open an existing repository.\"\"\"\n        repoman = cls(author)\n        repoman._repo = cls.storage.open(repo_name)\n        repoman.name = repo_name\n        return repoman\n\n    @classmethod\n    def repo_exists(cls, repo_name):\n        \"\"\"Return true if a repository named repo_name can be opened.\"\"\"\n        return cls.storage.repo_exists(repo_name)\n\n    @classmethod\n    def list_repos(cls):\n        return cls.storage.list_repos()\n\n    @classmethod\n    def delete_repo(cls, repo_name):\n        \"\"\"Delete an existing repo.\"\"\"\n        cls.storage.delete_repo(repo_name)\n\n    @property\n    def refs(self):\n        return self._repo.refs\n\n    def create_branch(self, branch_name, at_revision=None):\n        \"\"\"Create a new branch.\n\n        If no revision is specified, the branch is created from the latest\n        commit in master.\n        \"\"\"\n        at_revision = at_revision or self._get_head()\n        self.refs['refs/heads/%s' % branch_name] = at_revision\n\n    def delete_branch(self, branch_name):\n        \"\"\"Delete an existing branch.\n\n        Only the reference to the branch is deleted, all commits trees and\n        blobs are left untouched.\n        \"\"\"\n        del self.refs['refs/heads/%s' % branch_name]\n\n    def has_branch(self, branch_name):\n        \"\"\"Return true if the specified branch exists in this repo.\"\"\"\n        return 'refs/heads/%s' % branch_name in self.refs\n\n    def get_branch(self, branch_name):\n        \"\"\"Return the branch with name branch_name.\"\"\"\n        return self.refs['refs/heads/%s' % branch_name]\n\n    def save_file(self, file_path, contents, branch_name, commit_message=None):\n        \"\"\"Save a file into the repo and advances the specified branch head.\n\n        If the branch does not exist yet, it will be created.\n        \"\"\"\n        self._perform_file_operation(\n            branch_name, self._save_file, file_path, contents, commit_message)\n\n    def save_files(self, files, branch_name, commit_message=None):\n        \"\"\"Save a multiple files and advances the specified branch head.\n\n        If the branch does not exist yet, it will be created.\n        \"\"\"\n        files_info = {}\n        for path, data in files.items():\n            if not isinstance(data, (list, tuple)):\n                data = (data, CHANGE_MODIFY)\n            files_info[path] = data\n        self._perform_file_operation(\n            branch_name, self._save_files, files_info, commit_message)\n\n    def blob_for_branch(self, file_path, branch_name):\n        \"\"\"Return the blob with the contents of file_path.\n\n        The returned version of the blob is the one at the branch's head.\n        \"\"\"\n        return self.blob(file_path, self.get_branch(branch_name))\n\n    def blob(self, file_path, revision):\n        \"\"\"Return the blob with the contents of file_path @revision.\"\"\"\n        tree = self._get_tree(revision)\n        _, sha = tree[file_path]\n        return self._repo.get_object(sha)\n\n    def file_contents_for_branch(self, file_path, branch_name):\n        \"\"\"Return the the contents of file_path for the given branch.\"\"\"\n        try:\n            return self.blob_for_branch(file_path, branch_name).as_raw_string()\n        except KeyError:\n            return None\n\n    def list_files_for_branch(self, branch_name):\n        \"\"\"Return a list containing all file names for the given branch.\"\"\"\n        try:\n            revision = self.get_branch(branch_name)\n        except KeyError:\n            return []\n        return self.list_files(revision)\n\n    def list_files(self, revision):\n        \"\"\"Return a list containing all file names for the given revision.\"\"\"\n        repo = self._repo\n        items = repo.get_object(repo.get_object(revision).tree).items()\n        return [i.path for i in items]\n\n    def publish_branch(self, branch_name, force=False, message=None,\n                       dry_run=False):\n        \"\"\"Merge a branch into master.\n\n        If master@head is an ancestor of the given branch (or force=True), all\n        branch commits are squashed into one and then master@head is advanced\n        accordingly.\n\n        If not (probably because other user published his changes), a three way\n        merge is performed. If no unresolved merge conflicts arise, then a\n        publish commit is created and then master@head is advanced accordingly.\n        If there are unresolved conflicts, a resolve conflicts commit is\n        created containing metadata intended to help to manually resolve\n        pending conflicts, and then branch@head is advanced.\n\n        Returns True if master@head was advanced and False if there are pending\n        conflicts.\n        \"\"\"\n        conflicts = self._publish_branch(branch_name, force, message)\n        if dry_run:\n            if conflicts:\n                return conflicts\n            return True\n\n        if conflicts:\n            self.advance_branch(self.commit, branch=branch_name)\n            return False\n        else:\n            self.advance_branch(self.commit, self.tree)\n            return True\n\n    def _publish_branch(self, branch_name, force=False, message=None):\n        branch = self.get_branch(branch_name)\n        head = self._get_head()\n        if self._is_ancestor_commit(branch, head):\n            # Squash all the branch commits and move the master head.\n            tree = self._get_tree(branch)\n            commit = self._create_commit()\n            commit.parents = [head]\n            commit.tree = tree.id\n            commit.message = message or 'Publishing changes'\n            self.commit = commit\n            return False\n        else:\n            # We need to merge and maybe deal with conflicts.\n            common_ancestor = self.get_branch_checkpoints(branch_name)[-1]\n            merge_tree, conflicts = self._merge_branches(\n                common_ancestor, branch, head, take_mine=force)\n            commit = self._create_commit()\n            commit.tree = merge_tree.id\n            if conflicts:\n                commit.parents = [branch]\n                commit.message = 'Resolve merge conflicts'\n            else:\n                commit.parents = [head]\n                commit.message = 'Publishing changes'\n            self.commit = commit\n            return conflicts\n\n    def advance_branch(self, commit, tree=sentinel, branch='master'):\n        \"\"\"Set head of branch to supplied commit.\"\"\"\n        if commit is not sentinel:\n            self._update_store(commit, tree)\n            self._advance_branch(branch, commit)\n            self.last_commit = commit\n            self.last_tree = tree\n            if commit is self.commit:\n                self.commit = sentinel\n            if tree is self.tree:\n                self.tree = sentinel\n        else:\n            raise ValueError('Can\\'t advance branch without commit')\n\n    def get_published_revisions(self):\n        \"\"\"Return all commit ids that correspond to a successful publishes.\"\"\"\n        walker = self._repo.get_walker()\n        # TODO: find a better way of marking publish commits...\n        # maybe use tags?\n        return [entry.commit.id for entry in walker\n                if entry.commit.message.startswith('Publishing')]\n\n    def get_branch_checkpoints(self, branch_name):\n        \"\"\"Return all commit ids for changes made within the branch.\"\"\"\n        branch = self.get_branch(branch_name)\n        publish_revisions = self.get_published_revisions()\n        walker = self._repo.get_walker(include=branch)\n        branch_checkpoints = []\n        for entry in walker:\n            commit_id = entry.commit.id\n            branch_checkpoints.append(commit_id)\n            if commit_id in publish_revisions:\n                break\n        return branch_checkpoints\n\n    def get_branch_changed_entries(self, branch_name):\n        \"\"\"Return the name of all changed files within the branch.\"\"\"\n        master_tree = self._get_tree(self.get_branch('master'))\n        branch_tree = self._get_tree(self.get_branch(branch_name))\n        return tree_changes(\n            self._repo.object_store, branch_tree.id, master_tree.id)\n\n    def get_branch_changed_files(self, branch_name):\n        \"\"\"Return the name of all changed files within the branch.\"\"\"\n        changes = self.get_branch_changed_entries(branch_name)\n        return [entry.new.path or entry.old.path for entry in changes]\n\n    def add_tag(self, tag_name):\n        commit = self._repo['refs/heads/master']\n        tag = Tag()\n        tag.name = tag_name\n        tag.message = 'Tagged %s as %s' % (commit.id, tag_name)\n        tag.tagger = self._author\n        tag.object = (Commit, commit.id)\n        tag.tag_time = int(time())\n        tag.tag_timezone = self._time_zone\n        self._update_store(tag)\n        self.refs['refs/tags/%s' % tag_name] = tag.id\n\n    def checkout_tag(self, tag_name, remove=False):\n        if ('refs/tags/%s' % tag_name) not in self.refs:\n            raise ValueError('No tag \"{}\" found'.format(tag_name))\n        tag_ref = self.refs['refs/tags/%s' % tag_name]\n        tag = self._repo[tag_ref]\n        self._advance_branch(\n            'master', self._repo.object_store.get_object(tag.object[1]))\n        if remove:\n            del self.refs['refs/tags/%s' % tag_name]\n\n    def _merge_branches(self, base, mine, other, take_mine=False):\n\n        def load_raw(path, branch):\n            try:\n                blob = self.blob(path, branch)\n            except (KeyError, TypeError):\n                return '{}'\n            else:\n                return blob.as_raw_string()\n\n        def load_json(path, branch):\n            return loads(load_raw(path, branch))\n\n        merge_tree = Tree()\n        base_tree, my_tree, other_tree = (self._get_tree(x)\n                                          for x in (base, mine, other))\n        ren_detector = RenameDetector(self._repo.object_store)\n        conflicts = {}\n\n        my_changes, other_changes = (\n            tree_changes(\n                self._repo.object_store,\n                base_tree.id,\n                x.id,\n                want_unchanged=True,\n                rename_detector=ren_detector)\n            for x in (my_tree, other_tree))\n\n        changes_by_path = defaultdict(list)\n        for change in chain(my_changes, other_changes):\n            if change.type == CHANGE_DELETE or change.type == CHANGE_RENAME:\n                path = change.old.path\n            else:\n                path = change.new.path\n            changes_by_path[path].append(change)\n        had_conflict = False\n\n        for path, changes in changes_by_path.items():\n            if len(changes) == 2:\n                my_changes, other_changes = changes\n                if my_changes.type == CHANGE_DELETE:\n                    if other_changes.type in (CHANGE_RENAME, CHANGE_MODIFY):\n                        merge_tree.add(other_changes.new.path,\n                                       FILE_MODE, other_changes.new.sha)\n                    else:\n                        continue\n                elif other_changes.type == CHANGE_DELETE:\n                    if my_changes.type in (CHANGE_RENAME, CHANGE_MODIFY):\n                        merge_tree.add(my_changes.new.path,\n                                       FILE_MODE, my_changes.new.sha)\n                    else:\n                        continue\n                else:\n                    try:\n                        jsons = [load_json(path, x)\n                                 for x in (base, mine, other)]\n                    except ValueError:  # Handle non json data\n                        blob = Blob.from_string(load_raw(path, mine))\n                        self._update_store(blob)\n                        merge_tree.add(path, FILE_MODE, blob.id)\n                        continue\n                    base_json, my_json, other_json = jsons\n                    # When dealing with renames, file contents are under the\n                    # 'new' path. Note that the file will be finally stored\n                    # under the name given by the last rename.\n                    if other_changes.type == CHANGE_RENAME:\n                        other_json = load_json(other_changes.new.path, other)\n                        path = other_changes.new.path\n                    if my_changes.type == CHANGE_RENAME:\n                        my_json = load_json(my_changes.new.path, mine)\n                        path = my_changes.new.path\n                    if take_mine:\n                        merged_json = my_json or other_json or base_json\n                    else:\n                        merged_json, merge_conflict = merge_jsons(*jsons)\n                        if merge_conflict:\n                            conflicts[path] = merged_json\n                        had_conflict = had_conflict or merge_conflict\n                    merged_blob = Blob.from_string(\n                        dumps(merged_json, sort_keys=True, indent=4))\n                    self._update_store(merged_blob)\n                    merge_tree.add(path, FILE_MODE, merged_blob.id)\n            else:\n                try:\n                    data = (load_json(path, mine) or load_json(path, other) or\n                            load_json(path, base))\n                except ValueError:  # Loading a non json file\n                    blob = Blob.from_string(load_raw(path, mine))\n                else:\n                    blob = Blob.from_string(dumps(data, sort_keys=True,\n                                            indent=4))\n                self._update_store(blob)\n                merge_tree.add(path, FILE_MODE, blob.id)\n        self._update_store(merge_tree)\n        return merge_tree, conflicts\n\n    def _perform_file_operation(self, branch_name, operation, *args):\n        if not self.has_branch(branch_name):\n            self.create_branch(branch_name)\n        parent_commit = self.get_branch(branch_name)\n        commit = operation(parent_commit, *args)\n        self._advance_branch(branch_name, commit)\n\n    def _save_file(self, parent_commit, file_path, contents, commit_message):\n        commit_message = commit_message or 'Saving %s' % file_path\n        return self._save_files(\n            parent_commit, {file_path: (contents, CHANGE_MODIFY)},\n            commit_message)\n\n    def _save_files(self, parent_commit, files, commit_message):\n        tree = self._get_tree(parent_commit)\n        blobs = []\n        for file_path, (contents, change) in files.items():\n            if change == CHANGE_DELETE:\n                try:\n                    del tree[file_path]\n                except KeyError:\n                    pass\n            else:\n                blob = Blob.from_string(contents)\n                tree.add(file_path, FILE_MODE, blob.id)\n                blobs.append(blob)\n        commit = self._create_commit()\n        commit.parents = [parent_commit]\n        commit.tree = tree.id\n        commit.message = commit_message or 'Saving multiple files'\n        self._update_store(commit, tree, *blobs)\n        return commit\n\n    def _update_store(self, *args):\n        objects = [(obj, None) for obj in args if obj not in (None, sentinel)]\n        self._repo.object_store.add_objects(objects)\n\n    def _advance_branch(self, branch_name, commit):\n        self.refs['refs/heads/%s' % branch_name] = commit.id\n\n    def _get_tree(self, revision):\n        repo = self._repo\n        return repo.get_object(repo.get_object(revision).tree)\n\n    def _create_commit(self):\n        commit = Commit()\n        commit.author = commit.committer = self._author\n        commit.commit_time = commit.author_time = int(time())\n        commit.commit_timezone = commit.author_timezone = self._time_zone\n        commit.encoding = self._encoding\n        return commit\n\n    def _get_head(self):\n        try:\n            return self._repo.head()\n        except KeyError:\n            return None\n\n    def _is_ancestor_commit(self, descendant, ancestor):\n        walker = self._repo.get_walker(include=descendant)\n        try:\n            for entry in walker:\n                if entry.commit.id == ancestor:\n                    return True\n        except ObjectMissing:\n            return True\n        return False\n"
  },
  {
    "path": "portiaui/.bowerrc",
    "content": "{\n  \"directory\": \"bower_components\",\n  \"analytics\": false\n}\n"
  },
  {
    "path": "portiaui/.editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\n\n[*.js]\nindent_style = space\nindent_size = 4\n\n[*.hbs]\nindent_style = space\nindent_size = 4\n\n[*.css]\nindent_style = space\nindent_size = 4\n\n[*.html]\nindent_style = space\nindent_size = 4\n\n[*.{diff,md}]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "portiaui/.ember-cli",
    "content": "{\n  \"disableAnalytics\": true\n}\n"
  },
  {
    "path": "portiaui/.gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\n/dist\n/tmp\n\n# dependencies\n/node_modules\n/bower_components\n\n# misc\n/.sass-cache\n/connect.lock\n/coverage/*\n/libpeerconnection.log\nnpm-debug.log\ntestem.log\n"
  },
  {
    "path": "portiaui/.jshintrc",
    "content": "{\n  \"predef\": [\n    \"document\",\n    \"window\",\n    \"$\",\n    \"cookie\",\n    \"moment\",\n    \"URI\",\n    \"TreeMirror\",\n    \"-Promise\",\n    \"Raven\",\n    \"Modernizr\"\n  ],\n  \"browser\": true,\n  \"boss\": true,\n  \"curly\": true,\n  \"debug\": false,\n  \"devel\": true,\n  \"eqeqeq\": true,\n  \"evil\": true,\n  \"forin\": false,\n  \"immed\": false,\n  \"indent\": 4,\n  \"laxbreak\": false,\n  \"maxlen\": 100,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"noempty\": false,\n  \"nonew\": false,\n  \"nomen\": false,\n  \"onevar\": false,\n  \"plusplus\": false,\n  \"regexp\": false,\n  \"undef\": true,\n  \"sub\": true,\n  \"strict\": false,\n  \"white\": false,\n  \"eqnull\": true,\n  \"esnext\": true,\n  \"unused\": true\n}\n"
  },
  {
    "path": "portiaui/.watchmanconfig",
    "content": "{\n  \"ignore_dirs\": [\"tmp\", \"dist\"]\n}\n"
  },
  {
    "path": "portiaui/app/adapters/application.js",
    "content": "import Ember from \"ember\";\nimport DS from \"ember-data\";\nimport UrlTemplates from \"ember-data-url-templates\";\nconst { inject: { service } } = Ember;\n\nconst DELETED_EXTENSION = 'https://portia.scrapinghub.com/jsonapi/extensions/deleted';\nconst UPDATES_EXTENSION = 'https://portia.scrapinghub.com/jsonapi/extensions/updates';\n\nfunction filter_update_errors(errors, pointer) {\n    return errors.filter(data =>\n        !data.source || !data.source.pointer ||\n        data.source.pointer.startsWith(pointer)\n    ).map(data => {\n        if (!data.source || !data.source.pointer) {\n            return data;\n        }\n        return Ember.assign({}, data, {\n            source: {\n                pointer: data.source.pointer.slice(pointer.length - 1)\n            }\n        });\n    });\n}\n\nexport default DS.JSONAPIAdapter.extend(UrlTemplates, {\n    changes: service(),\n    savingNotification: service(),\n    loadingSlider: service(),\n    uiState: service(),\n\n    findRecordUrlTemplate: '{+host}{+selfLink}',\n    createRecordUrlTemplate: '{+host}{+relatedLink}',\n    updateRecordUrlTemplate: '{+host}{+selfLink}',\n    deleteRecordUrlTemplate: '{+host}{+selfLink}',\n\n    urlSegments: {\n        selfLink(type, id, snapshot /*, query */) {\n            // return the self link returned by a previous response, when the\n            // record was included in a relationship request or a json api\n            // compound document.\n            return snapshot._internalModel._links.self;\n        },\n\n        relatedLink(type, id, snapshot /*, query */) {\n            // find a one to many relationship to the record and use it's\n            // related link.\n            const relationships = [];\n            snapshot.eachRelationship((name, relationship) => {\n                relationships.push([name, relationship]);\n            });\n            for (let [name, relationship] of relationships) {\n                if (relationship.kind !== 'belongsTo') {\n                    continue;\n                }\n                const relatedSnapshot = snapshot.belongsTo(name);\n                if (!relatedSnapshot) {\n                    continue;\n                }\n                const relatedRecord = relatedSnapshot._internalModel;\n                const inverseRelationship = snapshot.record.inverseFor(name);\n                if (inverseRelationship.kind !== 'hasMany') {\n                    continue;\n                }\n                const inverseName = inverseRelationship.name;\n                const manyRelationship = relatedRecord._relationships.get(inverseName);\n                if (manyRelationship.link) {\n                    return manyRelationship.link.split('?', 1)[0];\n                }\n            }\n        }\n    },\n\n    createRecord(store, type, snapshot) {\n        // TODO: remove when ds-improved-ajax feature is enabled\n        const request = this._requestFor({\n            store, type, snapshot,\n            requestType: 'createRecord'\n        });\n        return this._makeRequest(request);\n    },\n\n    updateRecord(store, type, snapshot) {\n        // TODO: remove when ds-improved-ajax feature is enabled\n        const request = this._requestFor({\n            store, type, snapshot,\n            requestType: 'updateRecord'\n        });\n        return this._makeRequest(request);\n    },\n\n    deleteRecord(store, type, snapshot) {\n        // TODO: remove when ds-improved-ajax feature is enabled\n        const request = this._requestFor({\n            store, type, snapshot,\n            requestType: 'deleteRecord'\n        });\n        return this._makeRequest(request);\n    },\n\n    dataForRequest(params) {\n        // TODO: use _super when ds-improved-ajax feature is enabled\n        let {store, type, snapshot, requestType} = params;\n        type = type || (snapshot && snapshot.type);\n        const serializer = store.serializerFor(type.modelName);\n        let data = {};\n\n        switch (requestType) {\n            case 'createRecord':\n                serializer.serializeIntoHash(data, type, snapshot, {\n                    includeId: true\n                });\n                break;\n\n            case 'updateRecord':\n                // allow partial updates by specifying adapterOptions.partial\n                serializer.serializeIntoHash(data, type, snapshot, {\n                    includeId: true,\n                    partial: snapshot.adapterOptions && snapshot.adapterOptions.partial\n                });\n                break;\n\n            case 'deleteRecord':\n                data = undefined;\n                break;\n\n            default:\n                data = this._super(...arguments);\n                break;\n        }\n\n        // merge data from sub-requests for updates extension\n        if (requestType === 'createRecord' || requestType === 'updateRecord' ||\n                requestType === 'deleteRecord') {\n            const coalesce = snapshot.adapterOptions && snapshot.adapterOptions.coalesce;\n            if (coalesce && coalesce.type === 'main') {\n                const coalesced = [];\n                if (coalesce.updates) {\n                    for (let {data} of coalesce.updates) {\n                        coalesced.push(data.data);\n                    }\n                }\n\n                data = Ember.assign(data || {}, {\n                    links: {\n                        profile: [UPDATES_EXTENSION]\n                    },\n                    aliases: {\n                        updates: UPDATES_EXTENSION\n                    },\n                    meta: {\n                        updates: coalesced\n                    }\n                });\n            }\n        }\n\n        return data;\n    },\n\n    methodForRequest(params) {\n        // TODO: remove when ds-improved-ajax feature is enabled\n        switch (params.requestType) {\n            case 'createRecord': return 'POST';\n            case 'updateRecord': return 'PATCH';\n            case 'deleteRecord': return 'DELETE';\n        }\n        return 'GET';\n    },\n\n    urlForRequest(params) {\n        // TODO: remove when ds-improved-ajax feature is enabled\n        let {type, id, snapshot, requestType} = params;\n        type = type || (snapshot && snapshot.type);\n        id = id || (snapshot && snapshot.id);\n        if (requestType === 'createRecord' || requestType === 'updateRecord' ||\n                requestType === 'deleteRecord') {\n            return this.buildURL(type.modelName, id, snapshot, requestType);\n        }\n        return this._super(...arguments);\n    },\n\n    headersForRequest(params) {\n        const headers = this.get('headers') || {};\n        const profiles = [];\n        const acceptProfiles = [DELETED_EXTENSION];\n        if (params.snapshot.adapterOptions && params.snapshot.adapterOptions.coalesce) {\n            profiles.push(UPDATES_EXTENSION);\n            acceptProfiles.push(UPDATES_EXTENSION);\n        }\n        if (profiles.length) {\n            headers['Content-Type'] = `application/vnd.api+json; profile=\"${profiles.join(' ')}\"`;\n        } else {\n            headers['Content-Type'] = 'application/vnd.api+json';\n        }\n        if (acceptProfiles.length) {\n            headers['Accept'] = `application/vnd.api+json; profile=\"${acceptProfiles.join(' ')}\"`;\n        } else {\n            headers['Accept'] = 'application/vnd.api+json';\n        }\n        return headers;\n    },\n\n    _requestFor(params) {\n        // TODO: use _super when ds-improved-ajax feature is enabled\n        const method = this.methodForRequest(params);\n        const url = this.urlForRequest(params);\n        const headers = this.headersForRequest(params);\n        const data = this.dataForRequest(params);\n        const request = { method, url, headers, data };\n\n        return Ember.assign(request, {\n            store: params.store,\n            type: params.type,\n            snapshot: params.snapshot,\n            requestType: params.requestType\n        });\n    },\n\n    _makeRequest(request) {\n        // TODO: use _super instead of this.ajax when ds-improved-ajax feature is enabled\n        const {requestType} = request;\n        if (requestType === 'createRecord' || requestType === 'updateRecord' ||\n                requestType === 'deleteRecord') {\n            const {method, url, data, store, type, snapshot} = request;\n            let promise;\n\n            const coalesce = snapshot.adapterOptions && snapshot.adapterOptions.coalesce;\n            if (coalesce) {\n                const {type: coalesceType, updates} = coalesce;\n\n                if (coalesceType === 'main') {\n                    // the main request of the bulk operation, resolve the promises\n                    // for the included models when this promise resolves\n                    promise = this.ajax(url, method, request);\n                    promise.then(response => {\n                        const serializer = store.serializerFor(type.modelName);\n                        const requests = {};\n                        const responses = {};\n\n                        for (let {type, snapshot} of updates) {\n                            const modelName = type.modelName;\n                            const id = snapshot.id;\n                            const type_requests = requests[modelName] || (\n                                requests[modelName] = {});\n                            type_requests[id] = true;\n                        }\n\n                        let aliases = this._getExtentionAliases(response, UPDATES_EXTENSION);\n                        if (aliases.length && response.meta) {\n                            for (let alias of aliases) {\n                                for (let update of response.meta[alias]) {\n                                    const normalized = serializer._normalizeResourceHelper(update);\n                                    const {type, id} = normalized;\n                                    if (!requests[type] || !requests[type][id]) {\n                                        const error = new DS.AdapterError([{\n                                            title: \"Unexpected update confirmation\",\n                                            detail: `${response}`\n                                        }], \"JSON API updates response contained \" +\n                                            \"confirmations for resources that were not \" +\n                                            \"requested.\");\n                                        for (let {resolver} of updates) {\n                                            resolver.reject(error);\n                                        }\n                                        throw error;\n                                    }\n                                    const type_responses = responses[type] || (\n                                        responses[type] = {});\n                                    type_responses[id] = update;\n                                }\n                            }\n                        }\n\n                        // treat deleted as update confirmations\n                        aliases = this._getExtentionAliases(response, DELETED_EXTENSION);\n                        if (aliases.length && response.meta) {\n                            for (let alias of aliases) {\n                                for (let deleted of response.meta[alias]) {\n                                    const normalized = serializer._normalizeResourceHelper(deleted);\n                                    const {type, id} = normalized;\n                                    if (requests[type] && requests[type][id]) {\n                                        const type_responses = responses[type] || (\n                                            responses[type] = {});\n                                        type_responses[id] = deleted;\n                                    }\n                                }\n                            }\n                        }\n\n                        if (response.included) {\n                            const filtered_included = [];\n                            for (let included of response.included) {\n                                const normalized =\n                                    serializer._normalizeResourceHelper(included);\n                                const {type, id} = normalized;\n                                if (responses[type]) {\n                                    if (responses[type][id]) {\n                                        responses[type][id] = included;\n                                    }\n                                } else {\n                                    filtered_included.push(included);\n                                }\n                            }\n                            response.included = filtered_included;\n                        }\n\n                        for (let {type, snapshot, resolver} of updates) {\n                            const modelName = type.modelName;\n                            const id = snapshot.id;\n                            if (responses[modelName] && responses[modelName][id]) {\n                                resolver.resolve({\n                                    data: responses[modelName][id]\n                                });\n                                continue;\n                            }\n                            resolver.reject(new DS.AdapterError([{\n                                title: \"Missing update confirmation\",\n                                detail: `${response}`\n                            }], \"JSON API updates response was missing confirmation for \" +\n                                \"an updated resource\"));\n                        }\n\n                        return response;\n                    }, error => {\n                        for (let i = 0; i < updates.length; i++) {\n                            const {resolver} = updates[i];\n                            const pointer = `/meta/updates/${i}/`;\n                            const modelError = new error.constructor(\n                                filter_update_errors(error.errors, pointer),\n                                error.message);\n                            resolver.reject(modelError);\n                        }\n                    });\n                } else {\n                    // a sub-request of the bulk operation, return a promise that\n                    // will be resolved when the main request completes.\n                    const resolver = Ember.RSVP.defer();\n                    updates.push({\n                        type,\n                        snapshot,\n                        data,\n                        resolver\n                    });\n                    return resolver.promise;\n                }\n            } else {\n                promise = this.ajax(url, method, request);\n            }\n\n            // handle our custom json api extension for listing records that were\n            // deleted in the backend and should be unloaded.\n            promise.then(response => {\n                const aliases = this._getExtentionAliases(response, DELETED_EXTENSION);\n                if (aliases.length && response.meta) {\n                    const serializer = store.serializerFor(type.modelName);\n                    for (let alias of aliases) {\n                        for (let deleted of response.meta[alias]) {\n                            const normalized = serializer._normalizeResourceHelper(deleted);\n                            if (!normalized) {\n                                continue;\n                            }\n                            const record = store.peekRecord(normalized.type, normalized.id);\n                            if (record) {\n                                if (record.get('isSaving')) {\n                                    record.one('didCommit', record.unloadRecord);\n                                } else {\n                                    record.unloadRecord();\n                                }\n                            }\n                        }\n                    }\n                }\n                return response;\n            });\n\n            // update saving status\n            this.get('savingNotification').start();\n            this.get('loadingSlider').startLoading();\n            promise.finally(() => {\n                const project = this.get('uiState.models.project');\n                if (project) {\n                    this.set('changes.hasChanges', true);\n                }\n                this.get('savingNotification').end();\n                this.get('loadingSlider').endLoading();\n            });\n\n            return promise;\n        }\n\n        return this.ajax(request.url, request.method, request);\n    },\n\n    _getExtentionAliases(response, extention) {\n        const aliases = [];\n        if (response && response.links && response.links.profile &&\n            response.links.profile.includes(extention)) {\n            for (let alias of Object.keys(response.aliases)) {\n                if (response.aliases[alias] === extention) {\n                    aliases.push(alias);\n                }\n            }\n        }\n        return aliases;\n    },\n\n    ajaxOptions(url, method, request = {}) {\n        // TODO: move to _requestToJQueryAjaxHash when ds-improved-ajax feature is enabled\n        const {headers} = request;\n        const options = Ember.assign({}, request);\n        delete options.method;\n        delete options.url;\n        delete options.headers;\n\n        const hash = this._super(url, method, options);\n\n        if (headers) {\n            hash.contentType = headers['Content-Type'];\n            delete headers['Content-Type'];\n\n            hash.beforeSend = function(xhr) {\n                Object.keys(headers).forEach((key) =>  xhr.setRequestHeader(key, headers[key]));\n            };\n        }\n        return hash;\n    }\n});\n"
  },
  {
    "path": "portiaui/app/adapters/project.js",
    "content": "import ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    urlTemplate: '{+host}/api/projects{/id}',\n    findRecordUrlTemplate: '{+host}/api/projects{/id}',\n    createRecordUrlTemplate: '{+host}/api/projects',\n    shouldReloadRecord() { return true; }\n});\n"
  },
  {
    "path": "portiaui/app/app.js",
    "content": "import Ember from 'ember';\nimport Resolver from './resolver';\nimport loadInitializers from 'ember-load-initializers';\nimport config from './config/environment';\n\nlet App;\n\nEmber.MODEL_FACTORY_INJECTIONS = true;\n\nApp = Ember.Application.extend({\n    modulePrefix: config.modulePrefix,\n    podModulePrefix: config.podModulePrefix,\n    Resolver,\n\n    customEvents: {\n        transitionend: 'transitionEnd'\n    }\n});\n\nloadInitializers(App, config.modulePrefix);\n\nexport default App;\n"
  },
  {
    "path": "portiaui/app/components/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/components/add-start-url-button.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    browser: service(),\n    dispatcher: service(),\n\n    url: computed.readOnly('browser.url'),\n    emptyUrl: computed.not('url'),\n    disableStartUrl: computed.or('emptyUrl', 'browser.invalidUrl'),\n\n    newStartUrl: computed('url', 'spider.startUrls.[]', function() {\n        const url = this.get('url');\n        const startUrls = this.get('spider.startUrls').mapBy('url');\n        return url && !startUrls.includes(url);\n    }),\n\n    actions: {\n        toggleStartUrl() {\n            if (this.get('emptyUrl')) {\n                return;\n            }\n            this._toggleStartUrl();\n        }\n    },\n\n    _toggleStartUrl() {\n        if (this.get('newStartUrl')) {\n            this.get('dispatcher').addStartUrl(this.get('spider'),\n                                               this.get('url'));\n        } else {\n            this.get('dispatcher').removeStartUrl(this.get('spider'),\n                                                  this.get('_startUrl'));\n        }\n    },\n    _startUrl: computed('spider.startUrls.[]', 'url', function() {\n        return this.get('spider.startUrls')\n                   .findBy('url', this.get('url'));\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/animation-container.js",
    "content": "import Ember from 'ember';\nimport { attrValue } from '../utils/attrs';\n\nexport default Ember.Component.extend({\n    positionMonitor: Ember.inject.service(),\n\n    classNames: ['animation-container'],\n    classNameBindings: ['fade', 'hidden'],\n\n    fade: false,\n    hidden: false,\n    setHeight: true,\n    setWidth: true,\n\n    didReceiveAttrs({oldAttrs, newAttrs}) {\n        if (attrValue(newAttrs.hide)) {\n            if (!oldAttrs) {\n                this.setProperties({\n                    fade: true,\n                    hidden: true\n                });\n            } else if (!attrValue(oldAttrs.hide)) {\n                // if hide is toggled quickly enough, and the opacity hasn't yet changed, then the\n                // transitionend event will not fire to set hidden = true.\n                if ((+this.$().css('opacity') === 0)) {\n                    this.setProperties({\n                        fade: true,\n                        hidden: true\n                    });\n                } else {\n                    this.set('fade', true);\n                }\n            }\n        } else {\n            if (!oldAttrs) {\n                this.setProperties({\n                    fade: true,\n                    hidden: true\n                });\n                Ember.run.later(() => {\n                    this.set('hidden', false);\n                    Ember.run.later(this, this.set, 'fade', false, 50);\n                }, 50);\n            } else if (attrValue(oldAttrs.hide)) {\n                this.set('hidden', false);\n                Ember.run.later(this, this.set, 'fade', false, 50);\n            }\n        }\n    },\n\n    didInsertElement() {\n        const positionMonitor = this.get('positionMonitor');\n\n        Ember.run.schedule('afterRender', () => {\n            this.content = this.element.children[0];\n            positionMonitor.registerElement(\n                this.element, this, this.readPosition, this.updatePosition);\n            positionMonitor.registerElement(\n                this.content, this, null, this.updateSize);\n            Ember.run.scheduleOnce('afterRender', positionMonitor, positionMonitor.update);\n        });\n    },\n\n    willDestroyElement() {\n        const positionMonitor = this.get('positionMonitor');\n\n        positionMonitor.unRegisterElement(\n            this.element, this, this.readPosition, this.updatePosition);\n        positionMonitor.unRegisterElement(\n            this.content, this, null, this.updateSize);\n    },\n\n    readPosition(rects, boundingRect, element) {\n        this.containerPosition = Ember.$(element).position();\n    },\n\n    updatePosition(rects, boundingRect) {\n        const content = this.content;\n        let style = '';\n        if (boundingRect.top || boundingRect.bottom || boundingRect.left || boundingRect.right) {\n            const left = Math.round(this.containerPosition.left);\n            const top = Math.round(this.containerPosition.top);\n            style = `transform: translate(${left}px, ${top}px);`;\n        }\n        content.setAttribute('style', style);\n    },\n\n    updateSize(rects, boundingRect) {\n        const width = Math.round(boundingRect.width);\n        const height = Math.round(boundingRect.height);\n        let style = '';\n        if (this.get('setWidth')) {\n            style += `width: ${width}px;`;\n        }\n        if (this.get('setHeight')) {\n            style += `height: ${height}px;`;\n        }\n        this.element.setAttribute('style', style);\n    },\n\n    transitionEnd($event) {\n        if ($event.originalEvent.propertyName === 'opacity' &&\n                $event.originalEvent.target === this.element) {\n            if (this.get('fade')) {\n                this.set('hidden', true);\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/annotation-options.js",
    "content": "import Ember from 'ember';\nimport { getAttributeList, hasContentAttribute } from './inspector-panel';\n\nexport default Ember.Component.extend({\n    uiState: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    annotation: null,\n    invalidSelector: false,\n\n    selectionModeOptions: [\n        {\n            value: 'auto',\n            label: 'Automatic'\n        },\n        {\n            value: 'css',\n            label: 'CSS selector'\n        },\n        {\n            value: 'xpath',\n            label: 'XPath selector'\n        }\n    ],\n\n    attribute: Ember.computed('annotation.attribute', 'attributes.[]', {\n        get() {\n            return this.get('attributes').findBy('attribute', this.get('annotation.attribute'));\n        },\n\n        set(key, value) {\n            this.set('annotation.attribute', value.attribute);\n            return value;\n        }\n    }),\n    text_content: Ember.computed('uiState.viewPort.selectedElement', function() {\n        let hasContent = hasContentAttribute(this.get('uiState.viewPort.selectedElement'));\n        return hasContent ? 'text-content' : 'content';\n    }),\n    attributes: Ember.computed('uiState.viewPort.selectedElement', function() {\n        return getAttributeList(this.get('uiState.viewPort.selectedElement'));\n    }),\n    selectionMode: Ember.computed('annotation.selectionMode', {\n        get() {\n            return this.selectionModeOptions.findBy('value', this.get('annotation.selectionMode'));\n        },\n\n        set(key, value) {\n            this.set('annotation.selectionMode', value.value);\n            return value;\n        }\n    }),\n    cssSelector: Ember.computed({\n        get() {\n            return this.get('annotation.selector');\n        },\n\n        set(key, value) {\n            if (this.get('invalidSelector')) {\n                return this.get('cssSelector');\n            } else {\n                const annotation = this.get('annotation');\n                this.setAnnotationSelector(annotation, value);\n                return value;\n            }\n        }\n    }),\n    editedCssSelector: Ember.computed({\n        get() {\n            return null;\n        },\n\n        set(key, value) {\n            const annotation = this.get('annotation');\n            if (value === null) {\n                this.set('invalidSelector', false);\n                this.setAnnotationSelector(annotation, this.get('cssSelector'));\n            } else {\n                let invalidSelector = false;\n\n                try {\n                    document.querySelectorAll(value);\n                } catch (e) {\n                    invalidSelector = true;\n                }\n\n                this.set('invalidSelector', invalidSelector);\n                if (!invalidSelector) {\n                    this.setAnnotationSelector(annotation, value);\n                }\n            }\n            return value;\n        }\n    }),\n\n    updateCssSelector: Ember.observer('annotation.selector', function() {\n        if (this.get('editedCssSelector') === null) {\n            this.set('cssSelector', this.get('annotation.selector'));\n        }\n    }),\n\n    setAnnotationSelector(annotation, selector) {\n        return annotation.get('parent.sample').then(sample => {\n            annotation.setSelector(selector);\n            return this.updateSelector(sample);\n        });\n    },\n\n    updateSelector(sample) {\n        if (!this._updateSelectorPromise) {\n            this._updateSelectorPromise = this._updateSelector(sample);\n        } else if (!this._updateSelectorPromise.pending) {\n            this._updateSelectorPromise.pending = true;\n            this._updateSelectorPromise.then(() => {\n                return (this._updateSelectorPromise = this._updateSelector(sample));\n            });\n        }\n\n        return this._updateSelectorPromise;\n    },\n\n    _updateSelector(sample) {\n        const dispatcher = this.get('dispatcher');\n        const promise = dispatcher.updateSampleSelectors(sample).then(() => {\n            if (this._updateSelectorPromise === promise) {\n                delete this._updateSelectorPromise;\n            }\n        });\n        return promise;\n    },\n\n    actions: {\n        save() {\n            this.set('annotation.text_content', this.get('text_content'));\n            const promise = this.get('annotation').save();\n            return this._updateSelectorPromise ?\n                this._updateSelectorPromise.then(() => promise) :\n                promise;\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/browser-iframe.js",
    "content": "import Ember from 'ember';\nimport { storageFor } from 'ember-local-storage';\nimport { cleanUrl, shortGuid } from '../utils/utils';\nimport interactionEvent from '../utils/interaction-event';\nimport treeMirrorDelegate from '../utils/tree-mirror-delegate';\nimport { NAVIGATION_MODE } from '../services/browser';\n\n\nfunction hashString(string) {\n    let hash = 5381;\n    for (let c of string) {\n        hash = ((hash << 5) + hash) + c.charCodeAt(0);\n    }\n    if (hash < 0) {\n        hash += 0xFFFFFFFF + 1;\n    }\n    return hash.toString(16);\n}\n\n\nconst BrowserIFrame = Ember.Component.extend({\n    browser: Ember.inject.service(),\n    overlays: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n    cookiesStore: storageFor('cookies'),\n    pageLoadStore: storageFor('page-loads'),\n    extractedItems: Ember.inject.service(),\n\n    tagName: 'iframe',\n    classNames: ['browser-iframe'],\n    classNameBindings: ['overlays.hasOverlays:has-overlays'],\n\n    splashUrl: null,\n\n    disabled: Ember.computed.alias('browser.disabled'),\n    document: Ember.computed.alias('browser.document'),\n    loading: Ember.computed.alias('browser.loading'),\n    url: Ember.computed.readOnly('browser.url'),\n    baseurl: Ember.computed.readOnly('browser.baseurl'),\n    spider: Ember.computed.readOnly('uiState.models.spider.id'),\n    project: Ember.computed.readOnly('uiState.models.project.id'),\n\n    init() {\n        this._super();\n        this.loadCookies();\n        this.frameEventListeners = [];\n    },\n\n    click() {\n        if (this.attrs.clickHandler) {\n            /*\n                For some reason, when using Ember.run, if the handler initiates\n                a route transition and the page in the iframe has a <base> tag,\n                the url is changed to the route uri concatenated to the iframe's\n                <base> url.\n                Using Ember.run.next fixes this.\n             */\n            Ember.run.next(this, this.attrs.clickHandler, ...arguments);\n        }\n    },\n\n    willInsertElement() {\n        if (BrowserIFrame.instances) {\n            throw new Error('The can be only one browser-iframe instance!');\n        }\n        BrowserIFrame.instances++;\n        const ws = this.get('webSocket');\n        ws.connect();\n        ws.addCommand('loadStarted', this, this.msgLoadStarted);\n        ws.addCommand('loadFinished', this, this.msgLoadFinished);\n        ws.addCommand('metadata', this, this.msgMetadata);\n        ws.addCommand('load', this, this.msgLoad);\n        ws.addCommand('cookies', this, this.msgCookies);\n        ws.addCommand('mutation', this, this.msgMutation);\n        ws.addCommand('save_html', this, this.noop);\n    },\n\n    didInsertElement() {\n        Ember.run.schedule('afterRender', () => {\n            this.setProperties({\n                disabled: false,\n                document: null\n            });\n            this.loadUrl();\n        });\n    },\n\n    willDestroyElement() {\n        const ws = this.get('webSocket');\n        ws.removeCommand('loadStarted', this, this.msgLoadStarted);\n        ws.removeCommand('loadFinished', this, this.msgLoadFinished);\n        ws.removeCommand('metadata', this, this.msgMetadata);\n        ws.removeCommand('load', this, this.msgLoad);\n        ws.removeCommand('cookies', this, this.msgCookies);\n        ws.removeCommand('mutation', this, this.msgMutation);\n        ws.removeCommand('save_html', this, this.noop);\n        ws.close();\n\n        this.setProperties({\n            disabled: true,\n            document: null\n        });\n        BrowserIFrame.instances--;\n    },\n\n    documentLoaded() {\n        this.set('document', this.element.contentDocument);\n    },\n\n    /**\n     * Loads and displays a url interactively\n     * Can only be called in \"browse\" mode.\n     */\n    loadUrl: Ember.observer('url', 'baseurl', 'webSocket.closed', function() {\n        Ember.run.scheduleOnce('sync', this, this._loadUrl);\n    }),\n\n    _loadUrl() {\n        const url = this.get('url');\n        let baseurl = this.get('baseurl');\n\n        if (!url || !url.includes('://') || !cleanUrl(url)) {\n            return;\n        }\n        if (this.get('webSocket.closed')) {\n            this.splashUrl = null;\n            if (this.get('lastLoadPromise')) {\n                this.set('lastLoadData', null);\n                Ember.run.cancel(this.get('lastLoadPromise'));\n                this.failedLoad(navigator.onLine ? 'server_disconnect' : 'user_disconnect');\n            }\n            return;\n        }\n        if (this.splashUrl === url) {\n            return;\n        }\n\n        let failures = this.get(`pageLoadStore.${hashString(url)}`);\n        if (failures && ((new Date() - new Date(failures.dt))/(1000*3600) < 1)) {\n            let failed = failures.failed;\n            if (failed > 3 && window.navigator.onLine) {\n                // Tell user that page is not working with Portia\n                this.set('webSocket.reconnectComponent', 'browser-url-blocked');\n                this.set('loading', false);\n                throw new Error(`URL Blocked: ${url} in ${this.get('uiState.project.id')}`,\n                                'websocket-browser-load');\n            } else if (failed > 2) {\n                if (!this.get('webSocket.reconnectComponent')) { // Allow reload through\n                    // Allow user to manually reload page after 2 failures\n                    this.set('webSocket.reconnectComponent', 'browser-url-failing');\n                    this.set('loading', false);\n                    throw new Error(`URL Failing: ${url} in ${this.get('uiState.project.id')}`,\n                                    'websocket-browser-load');\n                }\n            }\n            // Allow auto reload to happen two times\n        }\n        this.set('webSocket.reconnectComponent', null);\n\n        this.visit(url, baseurl);\n    },\n\n    visit(url, baseurl) {\n        this.set('loading', true);\n        this.get('webSocket').send({\n            _meta: {\n                viewport: this.iframeSize(),\n                user_agent: navigator.userAgent,\n                cookies: this.loadCookies(),\n                project: this.get('project'),\n                spider: this.get('spider'),\n            },\n            _command: 'load',\n            url: url,\n            baseurl: baseurl,\n        });\n    },\n\n    msgLoadStarted(data) {\n        this.set('loading', true);\n        if (data.id) {\n            this.set('lastLoadData', {\n                id: data.id,\n                url: data.url,\n            });\n            this.set('lastLoadPromise', Ember.run.later(this, this.failedLoad, 60000));\n        }\n    },\n\n    failedLoad(reason) {\n        let url = this.get('url');\n        if (!url) {\n            return;\n        }\n        let hash = hashString(url);\n        let now = new Date();\n        let data = this.get(`pageLoadStore.${hash}`);\n        if (data && (now - new Date(data.dt))/(1000*3600) < 1) {\n            data.failed = data.failed + 1;\n        } else {\n            data = {\n                failed: 0,\n                reason: []\n            };\n        }\n        data.dt = now.toISOString();\n        data.url = url;\n        data.reason.push(reason || 'slow');\n        this.set(`pageLoadStore.${hash}`, data);\n    },\n\n    msgLoadFinished(data) {\n        Ember.run.cancel(this.get('lastLoadPromise'));\n        this.set('lastLoadData', null);\n        let hash = hashString(this.get('url'));\n        let failures = this.get(`pageLoadStore.${hash}`);\n        if (failures) {\n            this.set(`pageLoadStore.${hash}`, null);\n        }\n\n        this.msgMetadata(data);\n    },\n\n    msgLoad(data) {\n        this.msgMetadata(data);\n    },\n\n    msgMetadata(data) {\n        if (data.loaded) {\n            this.set('loading', false);\n        }\n        if (data.url) {\n            this.splashUrl = data.url;\n            this.set('browser.url', data.url);\n        }\n        if (data.error) {\n            this.handleMetadataError();\n        }\n    },\n\n    handleMetadataError() {\n        this.set('loading', false);\n        this.set('splashUrl', null);\n        this.get('extractedItems').failExtraction('Failed Loading Page');\n        this.get('browser').invalidateUrl();\n        this.get('webSocket').send({\n            _meta: {\n                spider: this.get('spider'),\n                project: this.get('project')\n            },\n            _command: 'interact'\n        });\n    },\n\n    msgMutation(data) {\n        var [action, ...args] = data._data;\n        if(action === 'initialize') {\n            this.iframePromise = this.clearIframe().then(() => {\n                var doc = this.element.contentDocument;\n                this.treeMirror = new TreeMirror(doc, treeMirrorDelegate(this));\n            });\n        }\n        this.iframePromise.then(() => {\n            const browser = this.get('browser');\n            this.treeMirror.delegate.cssEnabled = browser.get('cssEnabled');\n            this.treeMirror[action].apply(this.treeMirror, args);\n            browser.trigger('contentChanged');\n        });\n    },\n\n    cookieId: Ember.computed('spider', 'project', function() {\n        if (this.get('project') && this.get('spider')) {\n            return `cookies:${this.get('project')}/${this.get('spider')}`.replace(/\\./g, '_');\n        }\n    }),\n\n    msgCookies(data) {\n        let cookies = data.cookies,\n            cookieId = this.get('cookieId');\n        if (cookies && cookies.length) {\n            this.set(`cookiesStore.${cookieId}`, cookies);\n        }\n    },\n\n    noop() {\n        return null;\n    },\n\n    loadCookies(){\n        let cookieId = this.get('cookieId');\n        if(cookieId){\n            let cookies = this.get(`cookiesStore.${cookieId}`);\n            if (cookies) {\n                return cookies;\n            }\n        }\n        return {};\n    },\n\n    unbindEventHandlers() {\n        $(this.element.contentDocument).off('.portia-iframe');\n        this.frameEventListeners.forEach(([target, event, fn, useCapture]) => {\n            target.removeEventListener(event, fn, useCapture);\n        });\n        this.frameEventListeners = [];\n    },\n\n    addFrameEventListener(event, fn, useCapture=false) {\n        let frameDoc = this.element.contentDocument;\n        frameDoc.addEventListener(event, fn, useCapture);\n        this.frameEventListeners.push([frameDoc, event, fn, useCapture]);\n    },\n\n    bindEventHandlers() {\n        this.unbindEventHandlers();\n        var $iframe = $(this.element.contentDocument);\n        $iframe.on(\n            ['keyup', 'keydown', 'keypress', 'input', 'mousedown', 'mouseup'].map(\n                eventName => `${eventName}.portia.portia-iframe`).join(' '),\n            e => {\n                if (this.get('browser.mode') === NAVIGATION_MODE) {\n                    this.postEvent(e);\n                }\n            });\n        $iframe.on('click.portia.portia-iframe', e => {\n            if (this.get('browser.mode') === NAVIGATION_MODE) {\n                this.clickHandlerBrowse(e);\n            } else {\n                this.click();\n                return false;\n            }\n        });\n        this.addFrameEventListener('focus', this.postEvent.bind(this), true);\n        this.addFrameEventListener('blur', this.postEvent.bind(this), true);\n        this.addFrameEventListener('change', this.postEvent.bind(this), true);\n        this.addFrameEventListener('scroll', e =>\n            Ember.run.throttle(this, this.postEvent, e, 200), true);\n    },\n\n    clickHandlerBrowse(evt) {\n        if (evt.which <= 1 && !evt.ctrlKey) { // Ignore right/middle click or Ctrl+click\n            if(evt.target.tagName !== 'INPUT') {\n                evt.preventDefault();\n            }\n            this.postEvent(evt);\n        }\n    },\n\n    postEvent(evt) {\n        this.get('webSocket').send({\n            _meta: {\n                spider: this.get('spider'),\n                project: this.get('project')\n            },\n            _command: 'interact',\n            interaction: interactionEvent(evt)\n        });\n    },\n\n    clearIframe() {\n        let defer = new Ember.RSVP.defer();\n        let iframe = this.element;\n        let id = shortGuid();\n        let that = this;\n        // Using a empty static page because using srcdoc or an data:uri gives\n        // permission problems and/or broken baseURI behaviour in different browsers.\n        iframe.setAttribute('src', '/static/empty-frame.html?' + id);\n        iframe.removeAttribute('srcdoc');\n        // Using a message to workaround onload bug on some browsers (cough IE cough).\n        let $win = $(window).bind('message', function onMessage(e){\n            if(e.originalEvent.data.frameReady === id){\n                that.bindEventHandlers();\n                Ember.run(that, that.documentLoaded);\n                $win.unbind('message', onMessage);\n                defer.resolve();\n            }\n        });\n        return defer.promise;\n    },\n\n    iframeSize() {\n        const iframe = Ember.$(this.element);\n        const height = Math.max(iframe.innerHeight(), 10);\n\n        if (iframe) {\n            return iframe.innerWidth() + 'x' + height;\n        }\n        return null;\n    }\n});\n\nBrowserIFrame.reopenClass({\n    instances: 0\n});\n\nexport default BrowserIFrame;\n"
  },
  {
    "path": "portiaui/app/components/browser-url-blocked.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: 'span',\n});\n"
  },
  {
    "path": "portiaui/app/components/browser-url-failing.js",
    "content": "import Ember from 'ember';\nconst { inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: 'span',\n    browser: service(),\n\n    actions: {\n        reloadPage() {\n            this.get('browser').reload();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/browser-view-port.js",
    "content": "import Ember from 'ember';\nimport {getAttributeList} from './inspector-panel';\n\nexport default Ember.Component.extend({\n    browser: Ember.inject.service(),\n    selectorMatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n\n    classNames: ['browser-view-port', 'panel', 'panel-default'],\n\n    hoverSelector: ':hover:not(html):not(body):not(head)',\n\n    willInsertElement() {\n        this.get('selectorMatcher').register(this.hoverSelector, this, this.updateHoveredElement);\n    },\n\n    willDestroyElement() {\n        this.get('selectorMatcher').unRegister(this.hoverSelector, this, this.updateHoveredElement);\n    },\n\n    updateHoveredElement(elements) {\n        const element = elements.get('lastObject');\n        this.set('uiState.viewPort.hoveredElement',\n            getAttributeList(element).length ? element : null);\n    },\n\n    actions: {\n        viewPortClick() {\n            if (this.attrs.clickHandler) {\n                this.attrs.clickHandler(...arguments);\n            }\n        },\n\n        reconnectWebsocket() {\n            this.get('webSocket').connect();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/buffered-input.js",
    "content": "import Ember from 'ember';\nimport { ensurePromise } from '../utils/promises';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    autofocus: false,\n    autoSelect: false,\n    focused: false,\n    spellcheck: true,\n    type: 'text',\n    value: null,\n    viewValue: null,\n\n    didInsertElement() {\n        if (this.get('focused')) {\n            Ember.run.schedule('afterRender', () => {\n                this.send('startEditing');\n            });\n            Ember.run.next(this, this.setInputFocus);\n        }\n        // Prevent default / bubbling of keypress event when pressing enter\n        Ember.$('#' + this.get('inputId'))\n             .keypress((e) => e.which !== 13);\n    },\n\n    inputId: Ember.computed('elementId', function() {\n        return this.get('elementId') + '-input';\n    }),\n\n    displayedValue: Ember.computed('value', 'viewValue', 'focused', {\n        get() {\n            if (this.get('focused')) {\n                return this.get('viewValue');\n            } else {\n                return this.get('value');\n            }\n        },\n\n        set(key, value, cachedValue) {\n            if (this.get('focused')) {\n                this.set('viewValue', value);\n                return value;\n            } else {\n                return cachedValue;\n            }\n        }\n    }),\n\n    updateInputFocus: Ember.observer('focused', function() {\n        Ember.run.scheduleOnce('afterRender', this, this.setInputFocus);\n    }),\n\n    setInputFocus() {\n        const inputElement = Ember.$('#' + this.get('inputId')).get(0);\n        if (inputElement && this.get('focused')) {\n            inputElement.focus();\n            if (this.get('autoSelect')) {\n                inputElement.select();\n            }\n        } else {\n            if (!this.get('isDestroying')) {\n                inputElement.blur();\n            }\n        }\n    },\n\n    validateName(name) {\n        return typeof this.attrs.validate !== 'function' || this.attrs.validate(name);\n    },\n\n    actions: {\n        startEditing() {\n            this.setProperties({\n                focused: true,\n                viewValue: this.get('value')\n            });\n        },\n\n        cancelEditing() {\n            this.setProperties({\n                focused: false,\n                viewValue: null\n            });\n        },\n\n        endEditing(reason) {\n            const value = this.get('viewValue');\n            ensurePromise(this.validateName(value)).then(isValid => {\n                if (!isValid) {\n                    Ember.run.next(this, this.setInputFocus);\n                } else {\n                    this.setProperties({\n                        focused: false,\n                        value: value,\n                        viewValue: null\n                    });\n                    if (reason === 'enter' && this.attrs.onEnterPress &&\n                            this.attrs.onEnterPress.call) {\n                        this.attrs.onEnterPress(value);\n                    }\n                    if (this.attrs.onChange && this.attrs.onChange.call) {\n                        this.attrs.onChange(value);\n                    }\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/colored-badge.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    color: null,\n    value: 0,\n\n    badgeStyle: Ember.computed('color.main', function() {\n        var color = this.get('color.main');\n        return Ember.String.htmlSafe(color ? `background-color: ${color};` : '');\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/colored-span.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: 'span',\n    attributeBindings: ['colorStyle:style'],\n    colorStyle: computed('color.main', function() {\n        var color = this.get('color.main');\n        return Ember.String.htmlSafe(color ? `color: ${color};` : '');\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/combo-box.js",
    "content": "import Ember from 'ember';\nimport SelectBox from './select-box';\n\nexport default SelectBox.extend({\n    autoSelect: false,\n    inputClass: null,\n    spellcheck: true,\n\n    query: Ember.computed('open', 'viewValue', 'valueAttribute', {\n        get() {\n            return this.getValueAttribute(this.get('viewValue'));\n        },\n\n        set(key, value) {\n            Ember.run.scheduleOnce('afterRender', this, this.updateViewValue);\n            return value;\n        }\n    }),\n\n    setInputFocus(ignoreAutoSelect = false) {\n        const inputElement = Ember.$('#' + this.get('inputId')).get(0);\n        if (inputElement && this.get('open')) {\n            inputElement.focus();\n            if (!ignoreAutoSelect && this.get('autoSelect')) {\n                inputElement.select();\n            }\n        } else if (!this.get('isDestroying')) {\n            inputElement.blur();\n        }\n    },\n\n    getValueAttribute(value) {\n        const valueAttribute = this.get('valueAttribute');\n        if (value && valueAttribute) {\n            value = value.get ? value.get(valueAttribute) : value[valueAttribute];\n        }\n        return value;\n    },\n\n    updateViewValue() {\n        const query = this.get('query');\n        let items = [];\n        this.trigger('getMenuItems', items);\n\n        if (this.orderItemsForSearch) {\n            items = this.orderItemsForSearch(items);\n        }\n\n        const currentValue = this.getValueAttribute(this.get('viewValue'));\n        if (currentValue !== query) {\n            let item = items.find(item => {\n                return this.getValueAttribute(item.get('value')) === query;\n            });\n            if (!item && !currentValue.startsWith(query)) {\n                item = items.find(item => {\n                    return this.getValueAttribute(item.get('value')).startsWith(query);\n                });\n            }\n            if (item) {\n                this.set('viewValue', item.get('value'));\n            }\n        }\n    },\n\n    actions: {\n        restoreFocus() {\n            if (this.get('open')) {\n                Ember.run.next(this, this.setInputFocus, /* ignoreAutoSelect = */true);\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/create-project-button.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    dispatcher: service(),\n    capabilities: service(),\n    tagName: '',\n\n    canCreateProjects: computed.readOnly('capabilities.capabilities.create_projects'),\n    projectName: null,\n\n    actions: {\n        addProject() {\n            this.get('dispatcher').addProject(this.get('projectName'), /* redirect = */true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/create-spider-button.js",
    "content": "import Ember from 'ember';\nimport {computedCanAddSpider} from '../services/dispatcher';\n\nexport default Ember.Component.extend({\n    browser: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    project: null,\n\n    canAddSpider: computedCanAddSpider(),\n\n    actions: {\n        addSpider() {\n            this.get('dispatcher').addSpider(this.get('project'), /* redirect = */true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/data-structure-annotations.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n\n    tagName: '',\n\n    item: null,\n    sample: null,\n    annotationColors: [],\n\n    actions: {\n        enterAnnotation(annotation) {\n            this.set('uiState.viewPort.hoveredModels', [annotation]);\n        },\n\n        leaveAnnotation() {\n            this.set('uiState.viewPort.hoveredModels', []);\n        },\n\n        enterItem(item) {\n            this.set('uiState.viewPort.hoveredModels', item.get('orderedAnnotations'));\n        },\n\n        leaveItem() {\n            this.set('uiState.viewPort.hoveredModels', []);\n        },\n\n        removeAnnotation(annotation) {\n            this.get('dispatcher').removeAnnotation(annotation);\n        },\n\n        removeItem(item) {\n            this.get('dispatcher').removeItem(item);\n        },\n\n        saveItem(item) {\n            item.save();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/data-structure-listing.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    annotationColors: [],\n\n    actions: {\n        addItem(sample) {\n            this.get('dispatcher').addItem(sample, /* redirect = */true);\n        },\n\n        removeItem(item) {\n            this.get('dispatcher').removeItem(item);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-delete.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: 'li',\n    classNames: ['dropdown-delete'],\n    classNameBindings: ['isConfirmed'],\n    isConfirmed: false,\n\n    notConfirmed: computed.not('isConfirmed'),\n\n    actions: {\n        onDelete() {\n            if (this.get('notConfirmed')) {\n                this.set('isConfirmed', true);\n            } else {\n                this.get('onDelete')();\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-divider.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: 'li',\n    classNames: ['divider'],\n    attributeBindings: ['role'],\n    role: 'separator'\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-header.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: 'li',\n    classNames: ['dropdown-header']\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-item.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: 'li',\n    classNames: ['dropdown-item'],\n    classNameBindings: ['active', 'focused', 'disabled'],\n\n    disabled: false,\n    menu: null,\n    value: null,\n\n    active: Ember.computed('menu.activeItem', function() {\n        return this.get('menu.activeItem') === this;\n    }),\n    focused: Ember.computed('menu.focusedItem', function() {\n        return this.get('menu.focusedItem') === this;\n    }),\n\n    didInsertElement() {\n        const menu = this.get('menu');\n        if (menu) {\n            menu.registerItem(this);\n        }\n    },\n\n    willDestroyElement() {\n        const menu = this.get('menu');\n        if (menu) {\n            menu.unRegisterItem(this);\n        }\n    },\n\n    actions: {\n        performAction(value) {\n            if (this.attrs.action && !this.get('disabled')) {\n                this.attrs.action(value);\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-menu.js",
    "content": "import Ember from 'ember';\n\nfunction computedItem(propertyName) {\n    const cachePropertyName = `_${propertyName}ItemCache`;\n\n    return Ember.computed(propertyName, 'items', {\n        get() {\n            let cachedItem = this[cachePropertyName];\n            const value = this.get(propertyName);\n            let items = this.get('items');\n            if (!cachedItem || !items.includes(cachedItem) ||\n                    cachedItem.get('value') !== value) {\n                if (this.orderItemsForSearch) {\n                    items = this.orderItemsForSearch(items);\n                }\n                const equalityFn = this.valuesEqual || Ember.isEqual;\n                this[cachePropertyName] = cachedItem =\n                    items.find(item => equalityFn(item.get('value'), value));\n            }\n            return cachedItem;\n        },\n\n        set(key, item) {\n            this[cachePropertyName] = item;\n            this.set(propertyName, item.get('value'));\n            return item;\n        }\n    });\n}\n\nexport default Ember.Component.extend({\n    tagName: 'ul',\n    attributeBindings: ['tabindex'],\n    classNames: ['dropdown-menu'],\n\n    active: null,\n    focused: null,\n    keyNavigate: 'active',\n    tabindex: -1,\n\n    items: Ember.computed(function() {\n        if (!this.element) {\n            return [];\n        }\n        const items = [];\n        for (let child of this.element.children) {\n            const item = this.itemsMap.get(child.id);\n            if (item) {\n                items.push(item);\n            }\n        }\n        return items;\n    }).volatile(),\n\n    activeItem: computedItem('active'),\n    focusedItem: computedItem('focused'),\n\n    init() {\n        this._super();\n        this.itemsMap = new Map();\n        this.getWithDefault('events', this)\n            .on('menuKeyDown', this, this.keyDown)\n            .on('getMenuItems', result => {\n                result.push(...this.get('items'));\n            });\n    },\n\n\n    next(type) {\n        type = this.validateType(type);\n        const items = this.get('items');\n        let item = this.get(`${type}Item`);\n        const startIndex = items.indexOf(item);\n        let index = startIndex;\n        do {\n            if (!~index) {\n                index = 0;\n            } else {\n                index++;\n            }\n            index = (index + items.length) % items.length;\n            item = items[index];\n        } while (item.get('disabled') && index !== startIndex);\n        if (index !== startIndex) {\n            this.set(`${type}Item`, item);\n        }\n    },\n\n    previous(type) {\n        type = this.validateType(type);\n        const items = this.get('items');\n        let item = this.get(`${type}Item`);\n        const startIndex = items.indexOf(item);\n        let index = startIndex;\n        do {\n            if (!~index) {\n                index = -1;\n            } else {\n                index--;\n            }\n            index = (index + items.length) % items.length;\n            item = items[index];\n        } while (item.get('disabled') && index !== startIndex);\n        if (index !== startIndex) {\n            this.set(`${type}Item`, item);\n        }\n    },\n\n    triggerAction(type) {\n        type = this.validateType(type);\n        const currentItem = this.get(`${type}Item`);\n        if (currentItem) {\n            currentItem.send('performAction');\n        }\n        return !!currentItem;\n    },\n\n    validateType(type, fallback) {\n        if (!fallback) {\n            fallback = this.validateType(this.get('keyNavigate'), 'active');\n        }\n        return (type === 'active' || type === 'focused') ? type : fallback;\n    },\n\n    focusIn() {\n        if (this.attrs.onFocusIn) {\n            this.attrs.onFocusIn(...arguments);\n        }\n    },\n\n    focusOut() {\n        if (this.attrs.onFocusOut) {\n            this.attrs.onFocusOut(...arguments);\n        }\n    },\n\n    keyDown() {\n        this.send('keyDown', ...arguments);\n    },\n\n    registerItem(item) {\n        this.itemsMap.set(item.get('elementId'), item);\n        Ember.run.scheduleOnce('afterRender', this, this.updateItems);\n    },\n\n    unRegisterItem(item) {\n        this.itemsMap.delete(item.get('elementId'));\n        Ember.run.scheduleOnce('afterRender', this, this.updateItems);\n    },\n\n    updateItems() {\n        if (!this.get('isDestroying')) {\n            this.notifyPropertyChange('items');\n        }\n    },\n\n    orderItemsForSearch(items) {\n        return items;\n    },\n\n    valuesEqual(a, b) {\n        return Ember.isEqual(a, b);\n    },\n\n    actions: {\n        keyDown($event) {\n            const keyNavigate = this.get('keyNavigate');\n            switch ($event.keyCode) {\n                case 13:  // ENTER\n                    if (!this.triggerAction(keyNavigate)) {\n                        return;\n                    }\n                    break;\n                case 38:  // UP\n                    this.previous(keyNavigate);\n                    break;\n                case 40:  // DOWN\n                    this.next(keyNavigate);\n                    break;\n                default:\n                    return;\n            }\n\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/dropdown-widget.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    positionMonitor: Ember.inject.service(),\n\n    classNames: ['dropdown'],\n    classNameBindings: ['open'],\n\n    active: null,\n    events: null,\n    focused: null,\n    focusMenu: false,\n    keyNavigate: 'active',\n    menuAlign: 'left',\n    menuClass: null,\n    menuContainer: null,\n    open: false,\n    isDisabled: false,\n\n    alignRight: Ember.computed.equal('menuAlign', 'right'),\n    menuClasses: Ember.computed('menuClass', 'menuContainer', 'open', 'alignRight', function() {\n        const classes = [this.get('menuClass')];\n        if (this.get('menuContainer')) {\n            classes.push('dropdown-menu-floating');\n            if (this.get('open')) {\n                classes.push('open');\n            }\n        }\n        if (this.get('alignRight')) {\n            classes.push('pull-right');\n        }\n        return classes.join(' ');\n    }),\n\n    init() {\n        this._super();\n        if (!this.get('events')) {\n            this.set('events', this);\n        }\n        this.$menu = null;\n        this.elementFocused = false;\n        this.menuWidth = null;\n        this.menuHeight = null;\n        this.windowHeight = null;\n    },\n\n    didInsertElement() {\n        const container = this.get('menuContainer');\n        if (container) {\n            const positionMonitor = this.get('positionMonitor');\n            const $menu = this.$menu = this.$('.dropdown-menu');\n            Ember.run.schedule('afterRender', () => {\n                Ember.$(container).append($menu);\n                positionMonitor.registerElement(\n                    this.element, this, this.updateMenuSize, this.updatePosition);\n                Ember.run.scheduleOnce('afterRender', positionMonitor, positionMonitor.update);\n            });\n        }\n    },\n\n    willDestroyElement() {\n        const $menu = this.$menu;\n        if ($menu) {\n            const element = this.element;\n            Ember.run.schedule('render', () => {\n                this.get('positionMonitor').unRegisterElement(\n                    element, this, this.updateMenuSize, this.updatePosition);\n                $menu.remove();\n            });\n        }\n    },\n\n    focusIn() {\n        this.send('focusIn', ...arguments);\n    },\n\n    focusOut() {\n        this.send('focusOut', ...arguments);\n    },\n\n    keyDown() {\n        this.send('keyDown', ...arguments);\n    },\n\n    updateMenuSize() {\n        const $menu = this.$menu;\n        this.menuWidth = $menu.outerWidth();\n        this.menuHeight = $menu.outerHeight(true);\n        this.windowHeight = window.innerHeight;\n    },\n\n    updatePosition(rects, boundingRect) {\n        let positionLeft;\n        let positionTop;\n        if (this.get('alignRight')) {\n            positionLeft = Math.round(boundingRect.right - this.menuWidth);\n        } else {\n            positionLeft = Math.round(boundingRect.left);\n        }\n        if (boundingRect.bottom + this.menuHeight > this.windowHeight) {\n            // If it overflows under the screen, align top\n            positionTop = Math.round(boundingRect.top - this.menuHeight);\n        } else {\n            positionTop = Math.round(boundingRect.bottom);\n        }\n        this.$menu.css({\n            top: `${positionTop}px`,\n            left: `${positionLeft}px`,\n            right: `auto`\n        });\n    },\n\n    click() {\n        const action = this.get('onClick');\n        if (action) {\n            action();\n        }\n    },\n\n    actions: {\n        openMenu() {\n            if (!this.get('isDisabled')) {\n                this.set('open', true);\n            }\n        },\n\n        closeMenu(closeReason) {\n            if (this.attrs.onClose) {\n                this.attrs.onClose(closeReason || 'close');\n            }\n            this.set('open', false);\n        },\n\n        toggleMenu(closeReason) {\n            if (this.get('open')) {\n                this.send('closeMenu', closeReason || 'toggle');\n            } else {\n                this.send('openMenu');\n            }\n        },\n\n        focusIn() {\n            this.elementFocused = true;\n        },\n\n        focusOut() {\n            this.elementFocused = null;\n\n            Ember.run.next(() => {\n                if (!this.isDestroyed && !this.elementFocused) {\n                    this.send('closeMenu', 'focus-out');\n                }\n            });\n        },\n\n        keyDown(event) {\n            if (this.get('open')){\n                if (event.keyCode === 27) {  // ESCAPE\n                    this.send('closeMenu', 'escape');\n                }\n                this.get('events').trigger('menuKeyDown', ...arguments);\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/edit-sample-button.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport {\n    computedCanAddSample,\n    computedEditableSample\n} from '../services/dispatcher';\n\nexport default Ember.Component.extend({\n    browser: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    spider: null,\n\n    canAddSample: computedCanAddSample('spider'),\n    disableSample: computed('canAddSample', 'browser.invalidUrl', function() {\n        return !this.get('canAddSample') || this.get('browser.invalidUrl');\n    }),\n    editableSample: computedEditableSample('spider'),\n    startUrlDomains: Ember.computed('spider.startUrls', function() {\n        let startUrlDomains = new Set();\n        for (let uri of this.get('spider.startUrls')) {\n            let domains = this.getUrlDomain(uri);\n            for (let d of domains) {\n                startUrlDomains.add(d);\n            }\n        }\n        return startUrlDomains;\n    }),\n    sameDomain: Ember.computed('browser.url', 'spider.startUrls', function() {\n        const urlDomain = this.getUrlDomain(this.get('browser.url'));\n        if (!urlDomain) {\n            return true;\n        }\n        const startUrlDomains = this.get('startUrlDomains');\n        for (let d of urlDomain) {\n            if (startUrlDomains.has(d)) {\n                return true;\n            }\n        }\n        return false;\n    }),\n\n    getUrlDomain(uri) {\n        let a =  document.createElement('a');\n        a.href = uri;\n        let hostname = [a.hostname],\n            splitHostname = hostname[0].split('.');\n        if (splitHostname[0].length === 1 || splitHostname[0] === 'www') {\n            hostname.push(hostname[0].split('.').splice(1).join('.'));\n        }\n        return hostname;\n    },\n\n    actions: {\n        addSample() {\n            this.get('dispatcher').addSample(this.get('spider'), /* redirect = */true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/element-overlay.js",
    "content": "import Ember from 'ember';\nimport {attrChanged, attrValue} from '../utils/attrs';\n\nexport default Ember.Component.extend({\n    overlays: Ember.inject.service(),\n    positionMonitor: Ember.inject.service(),\n\n    tagName: '',\n\n    positionMode: 'size',  // or 'edges'\n\n    init() {\n        this._super(...arguments);\n        this.set('rects', []);\n    },\n\n    didInsertElement() {\n        Ember.run.scheduleOnce('afterRender', this, this.notifyAddOverlay);\n    },\n\n    willDestroyElement() {\n        Ember.run.scheduleOnce('afterRender', this, this.notifyRemoveOverlay);\n    },\n\n    notifyAddOverlay() {\n        this.get('overlays').add();\n    },\n\n    notifyRemoveOverlay() {\n        this.get('overlays').remove();\n    },\n\n    didReceiveAttrs({oldAttrs, newAttrs}) {\n        if (attrChanged(oldAttrs, newAttrs, 'viewPortElement')) {\n            const oldElement = oldAttrs && attrValue(oldAttrs.viewPortElement);\n            const newElement = attrValue(newAttrs.viewPortElement);\n            const positionMonitor = this.get('positionMonitor');\n            if (oldElement) {\n                positionMonitor.unRegisterElement(\n                    oldElement, this, this.readContainerSize, this.updatePosition);\n            }\n            if (newElement) {\n                Ember.run.schedule('afterRender', () => {\n                    positionMonitor.registerElement(\n                        newElement, this, this.readContainerSize, this.updatePosition);\n                });\n            }\n        }\n    },\n\n    on(name, ...params) {\n        this._super(...arguments);\n        Ember.run.scheduleOnce('afterRender', ...params, this.get('rects'));\n    },\n\n    readContainerSize(rects, boundingRect, element) {\n        const view = element.ownerDocument.defaultView;\n        if (view) {\n            this.containerSize = {\n                width:  view.innerWidth,\n                height: view.innerHeight\n            };\n        }\n    },\n\n    updatePosition(rects) {\n        const overlayRects = [];\n        let prevRect = null;\n        let length = this.get('rects').length;\n\n        for (let rect of Array.from(rects)) {\n            const left = Math.round(Math.min(this.containerSize.width, Math.max(0, rect.left)));\n            const right = Math.round(Math.min(this.containerSize.width, Math.max(0, rect.right)));\n            const top = Math.round(Math.min(this.containerSize.height, Math.max(0, rect.top)));\n            const bottom = Math.round(Math.min(this.containerSize.height,\n                                               Math.max(0, rect.bottom)));\n            const width = right - left;\n            const height = bottom - top;\n\n            if (prevRect && top === prevRect.top && bottom === prevRect.bottom &&\n                    (left === prevRect.right || right === prevRect.left)) {\n                // merge neighbouring rects to minimize amount of rendered/animated elements\n                prevRect.left = Math.min(left, prevRect.left);\n                prevRect.right = Math.max(right, prevRect.right);\n                prevRect.width += width;\n            } else {\n                prevRect = {\n                    left,\n                    right,\n                    top,\n                    bottom,\n                    width,\n                    height\n                };\n                overlayRects.push(prevRect);\n            }\n        }\n\n        // never shrink the number of elements, so that they can be animated out and are available\n        // if needed again.\n        length = Math.max(length, overlayRects.length);\n        for (let i = overlayRects.length; i < length; i++) {\n            overlayRects.push({});\n        }\n\n        Ember.run.next(Ember.run.scheduleOnce, 'sync', () => {\n            if (!this.isDestroying) {\n                this.set('rects', overlayRects);\n            }\n        });\n        this.trigger('element-moved', overlayRects);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/element-rect-overlay.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['overlay'],\n\n    index: null,\n    positionMode: 'size',\n\n    backgroundStyle: Ember.computed('color.main', function() {\n        const color = this.get('color.main');\n        return Ember.String.htmlSafe(color ? `background-color: ${color};` : '');\n    }),\n    shadowStyle: Ember.computed('color.shadow', function() {\n        const color = this.get('color.shadow');\n        return Ember.String.htmlSafe(color ? `box-shadow: 0 1px 3px -2px ${color};` : '');\n    }),\n    textShadowStyle: Ember.computed('color.shadow', function() {\n        const color = this.get('color.shadow');\n        return Ember.String.htmlSafe(color ? `text-shadow: 0 1px 1px ${color};` : '');\n    }),\n\n    didInsertElement() {\n        this.new = true;\n        this.get('overlay').on('element-moved', this, this.updatePosition);\n    },\n\n    willDestroyElement() {\n        this.get('overlay').off('element-moved', this, this.updatePosition);\n    },\n\n    updatePosition(rects) {\n        if (!this.element) {\n            return;\n        }\n\n        let index = this.get('index');\n        const rect = rects[index];\n        if (!rect) {\n            return;\n        }\n\n        let { left, top, width, height } = rect;\n        let hide = false;\n        if (this.new || (!left && !top && !width && !height)) {\n            hide = true;\n\n            for (;index--;) {\n                const lRect = rects[index];\n                const { left: lLeft, right: lRight, top: lTop, bottom: lBottom } = lRect;\n                if (lLeft || lRight || lTop || lBottom) {\n                    left = lLeft;\n                    top = lBottom;\n                    height = 0;\n                    width = 0;\n                    break;\n                }\n            }\n\n            if (this.new) {\n                delete this.new;\n                Ember.run.next(\n                    Ember.run.scheduleOnce, 'afterRender',\n                    this, this.updatePosition, rects);\n            }\n        }\n\n        if (!left && !top && !width && !height) {\n            return;\n        }\n\n        let style = '';\n\n        switch (this.get('positionMode')) {\n            case 'size':\n                style = `transform: translate(${left}px, ${top}px);\n                         width: ${width}px; height: ${height}px;`;\n                break;\n\n            case 'edges':\n                // container is positioned in top left, and has zero width and height\n                const right = -left + -width;\n                const bottom = -top + -height;\n                style = `left: ${left}px; right: ${right}px; top: ${top}px; bottom: ${bottom}px;`;\n                break;\n        }\n\n        if (hide) {\n            style = `opacity: 0; ${style}`;\n        }\n        this.element.setAttribute('style', style);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-item-table.js",
    "content": "import Ember from 'ember';\n\n\nexport default Ember.Component.extend({\n    tagName: 'table',\n    classNames: ['extracted-item-table']\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-group.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: ''\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-json-panel.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    extractedItems: Ember.inject.service(),\n\n    tagName: ''\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-json-value.js",
    "content": "import Ember from 'ember';\nimport { toType } from '../utils/types';\n\nexport default Ember.Component.extend({\n    tagName: 'span',\n    classNames: ['json-value'],\n    attributeBindings: ['style'],\n    depth: 0,\n\n    isString: Ember.computed('value', function () {\n        return toType(this.get('value')) === 'string';\n    }),\n\n    escapedValue: Ember.computed('value', function () {\n        return JSON.stringify(this.get('value'));\n    }),\n\n    depthSpaces: Ember.computed('depth', function () {\n        return '  '.repeat(this.get('depth'));\n    }),\n\n    fromArray: Ember.computed('from', function () {\n        return this.get('from') === 'array';\n    }),\n\n    comma: Ember.computed('position', function () {\n        return this.get('position') < this.get('maxPosition') - 1 ? ',' : '';\n    }),\n\n    style: Ember.computed('value', 'depth', 'key', 'from', function () {\n        var textIndent = '', margin = '', width = '',\n            characterTest = Ember.$('.json-character-size'),\n            textWidth = characterTest.width(),\n            extractedBox = Ember.$('.extracted-items-json'),\n            extractedBoxWidth = extractedBox.width(),\n            key = this.get('key') || '',\n            value = this.get('escapedValue'),\n            depth = this.get('depth');\n        if (this.get('isString') &&\n            ((depth + 1) * 2 + key.length + value.length + 4) * textWidth > extractedBoxWidth) {\n            var indent = key.length;\n            if (this.get('fromArray')) {\n                indent = 2 * (depth + 1);\n                textIndent = `text-indent: -${indent}ch;`;\n                margin = `margin: 0 0 0 ${indent}ch;`;\n                width = extractedBoxWidth;\n            } else {\n                textIndent = 'text-indent: -1ch;';\n                margin = 'margin: 0 0 0 1ch;';\n                width = extractedBoxWidth - (key.length + 4 + (depth + 1) * 2) * textWidth;\n                width = `width: ${width}px`;\n            }\n        }\n        return Ember.String.htmlSafe(`${textIndent}${margin}${width}`);\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-json.js",
    "content": "import Ember from 'ember';\nimport { toType } from '../utils/types';\n\nexport default Ember.Component.extend({\n    tagName: '',\n    position: 0,\n    depth: -1,\n\n    setDepth: function () {\n        this.set('depth', this.getWithDefault('depth', -1) + 1);\n    }.on('init'),\n\n    isObject: Ember.computed('json', function () {\n        return this._isObject(this.get('json'));\n    }),\n\n    isArray: Ember.computed('json', function () {\n        return this._isArray(this.get('json'));\n    }),\n\n    isObjectOrArray: Ember.computed('isArray', 'isObject', function () {\n        return this.get('isObject') || this.get('isArray');\n    }),\n\n    fromKey: Ember.computed('from', function () {\n        return this.get('from') === 'key';\n    }),\n\n    comma: Ember.computed('position', 'parent', function () {\n        return this.get('position') < this.get('maxPosition') - 1 ? ',' : '';\n    }),\n\n    depthSpaces: Ember.computed('depth', 'isObjectOrArray', 'length', function () {\n        if (this.get('isObjectOrArray') && !this.get('length')) {\n            return '';\n        }\n        return '  '.repeat(this.get('depth'));\n    }),\n\n    depthPlus1Spaces: Ember.computed('depth', function () {\n        return '  '.repeat(this.get('depth') + 1);\n    }),\n\n    openingCharacter: Ember.computed('isObjectOrArray', function () {\n        if (this.get('isArray')) {\n            return '[';\n        } else if (this.get('isObject')) {\n            return '{';\n        }\n    }),\n\n    closingCharacter: Ember.computed('isObjectOrArray', function () {\n        if (this.get('isArray')) {\n            return ']';\n        } else if (this.get('isObject')) {\n            return '}';\n        }\n    }),\n\n    maxPosition: Ember.computed('json', function () {\n        var parent = this.get('parent');\n        if (parent) {\n            return this._objLength(parent);\n        }\n        return -1;\n    }),\n\n    length: Ember.computed('json', function () {\n        return this._objLength(this.get('json'));\n    }),\n\n    openChild: Ember.computed('json', function () {\n        var child,\n            json = this.get('json');\n        if (this.get('isObject')) {\n            child = json[Object.keys(json)[0]];\n        } else if (this.get('isArray')) {\n            child = json.get(0);\n        }\n        if (child) {\n            return this._openNext(child);\n        }\n    }),\n\n    openSibling: Ember.computed('json', 'parent', 'position', function () {\n        var sibling,\n            parent = this.get('parent'),\n            position = this.get('position');\n        if (parent && position < parent.length - 1) {\n            if (this._isObject(parent)) {\n                sibling = parent[Object.keys(parent)[position + 1]];\n            } else if (this._isArray(parent)) {\n                sibling = parent.get(position + 1);\n            }\n            if (sibling) {\n                return this._openNext(sibling);\n            }\n        }\n    }),\n\n    showOpen: Ember.computed('json', function () {\n        if ((this.get('isObject') && this.get('from') !== 'array') ||\n            (this.get('isArray') && this.get('from') !== 'object')) {\n            return true;\n        }\n        return false;\n    }),\n\n    _openNext: function (next) {\n        if (this._isObject(next)) {\n            return '{';\n        } else if (this._isArray(next)) {\n            return '[';\n        }\n    },\n\n    _isObject: function (obj) {\n        return toType(obj) === 'object';\n    },\n\n    _isArray: function (obj) {\n        return Array.isArray(obj);\n    },\n\n    _objLength: function (obj) {\n        if (this._isObject(obj)) {\n            return Object.keys(obj).length;\n        } else if (this._isArray(obj)) {\n            return obj.length;\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-panel.js",
    "content": "import Ember from 'ember';\nconst { inject: { service }, computed } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    extractedItems: service(),\n\n    isExtracting: computed.readOnly('extractedItems.isExtracting'),\n    failedMsg: computed.readOnly('extractedItems.failedExtractionMsg'),\n    failedExtraction: computed.readOnly('extractedItems.failedExtraction')\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-status.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: '',\n    extractedItems: service(),\n    store: service(),\n\n    type: computed.readOnly('extractedItems.type'),\n    spider: computed.readOnly('extractedItems.spider'),\n    changes: computed('extractedItems.changes', function() {\n        return (this.get('extractedItems.changes') || []);\n    }),\n    changed: computed('extractedItems.changed', function() {\n        return (this.get('extractedItems.changed') || []);\n    }),\n\n    hasWarning: computed('type', 'changes.[]', function() {\n        let hasChanges = this.get('changes').length > 0;\n        if (this.get('type') === 'js') {\n            if (hasChanges && this.get('changes')[0] === 'no_items') {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return hasChanges;\n    }),\n\n    change: computed('hasWarning', function() {\n        let change = this.get('changes')[0];\n        return change ? change : 'js_not_required';\n    }),\n\n    changeInfo: computed('change', function() {\n        let change = this.get('change'),\n            changes = this.get('changed'),\n            type = this.get('type');\n        if (change === 'missing_items' || change === 'missing_fields') {\n            // TODO: Properly handle these conditions\n            change = type === 'js' ? 'no_items' : 'js_not_required';\n        }\n        let CHANGES = {\n            js_not_required: {\n                text: `Javascript is enabled for this sample and may not be needed. \\\n                       Your spider may run faster if Javascript is not run on pages like this`,\n                path: 'projects.project.spider.options',\n            },\n            no_items: {\n                text: `Javascript is not enabled for this sample. It may extract more accurate \\\n                       data if it is enabled`,\n                path: 'projects.project.spider.options',\n            },\n            missing_required_field: {\n                path: 'projects.project.schema.field.options',\n            }\n        };\n        let opts = CHANGES[change];\n        if (!opts) {\n            return {};\n        }\n        if (change === 'missing_required_field') {\n            let field = this.get('store').peekRecord('field', changes[1][0]),\n                text = `The field \"${field.get('name')}\" is marked as required but there is no \\\n                        annotation for that field`;\n            opts.text = text;\n            opts.model = field;\n            return opts;\n        }\n        opts.model = this.get('spider');\n        return opts;\n    }),\n\n    icon: computed('hasWarning', function() {\n        return this.get('hasWarning') ? 'warning-triangle' : 'ok';\n    }),\n});\n"
  },
  {
    "path": "portiaui/app/components/extracted-items-tab.js",
    "content": "import Ember from 'ember';\nconst { inject: { service }, computed } = Ember;\n\nexport default Ember.Component.extend({\n    extractedItems: service(),\n\n    numItems: computed.readOnly('extractedItems.items.length'),\n    isExtracting: computed.alias('extractedItems.isExtracting')\n});\n"
  },
  {
    "path": "portiaui/app/components/extractor-options.js",
    "content": "import Ember from 'ember';\nimport { FIELD_TYPES } from '../models/field';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    annotation: null,\n    types: FIELD_TYPES,\n\n    project: Ember.computed.readOnly('annotation.parent.sample.spider.project'),\n    regexExtractors: Ember.computed.filterBy('project.extractors', 'type', 'regex'),\n\n    actions: {\n        save() {\n            this.get('annotation').save();\n        },\n\n        addTypeExtractor(type) {\n            const annotation = this.get('annotation');\n            this.get('dispatcher').addAnnotationTypeExtractor(annotation, type);\n        },\n\n        addRegexExtractor(extractor) {\n            const annotation = this.get('annotation');\n            this.get('dispatcher').addAnnotationRegexExtractor(annotation, extractor);\n        },\n\n        addNewRegexExtractor() {\n            const annotation = this.get('annotation');\n            this.get('dispatcher').addNewAnnotationRegexExtractor(annotation);\n        },\n\n        removeExtractor(extractor) {\n            const annotation = this.get('annotation');\n            this.get('dispatcher').removeAnnotationExtractor(annotation, extractor);\n        },\n\n        saveExtractor(extractor) {\n            extractor.save().then(null, () => {\n                extractor.rollbackAttributes();\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/feed-url-options.js",
    "content": "import Ember from 'ember';\nimport { cleanUrl } from '../utils/utils';\n\nexport default Ember.Component.extend({\n    feedLink: 'http://files.scrapinghub.com/portia/urls.txt',\n\n    didRender() {\n        this._super(...arguments);\n        this.$('.focus-control').focus();\n    },\n\n    actions: {\n        saveFeedUrl() {\n            const url = cleanUrl(this.get('startUrl.url'));\n            this.set('startUrl.url', url);\n            this.get('saveSpider').perform();\n        }\n    }\n\n});\n"
  },
  {
    "path": "portiaui/app/components/field-options.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    field: null,\n\n    actions: {\n        save() {\n            this.get('field').save();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/fragment-options.js",
    "content": "import Ember from 'ember';\nconst { computed, run } = Ember;\n\nimport { task, timeout } from 'ember-concurrency';\nimport Changeset from 'ember-changeset';\nimport lookupValidator from 'ember-changeset-validations';\n\nimport { multiplicityFragment } from '../utils/start-urls';\nimport FixedFragmentValidations from '../validations/fixed-fragment';\nimport RangeFragmentValidations from '../validations/range-fragment';\nimport ListFragmentValidations  from '../validations/list-fragment';\n\nconst TOOLTIP_DEBOUNCE = 1000;\nconst TOOLTIP_DELAY = 2000;\n\nconst VALIDATIONS = {\n    'fixed': FixedFragmentValidations,\n    'range': RangeFragmentValidations,\n    'list': ListFragmentValidations\n};\n\n\nexport default Ember.Component.extend({\n    tagName: 'form',\n    classNames: ['fragment-form', 'form-inline'],\n\n    toggleTooltip: false,\n    fragmentTypes: [\n        { value: 'fixed', label: 'Fixed' },\n        { value: 'range', label: 'Range' },\n        { value: 'list',  label: 'List' }\n    ],\n\n    fragmentType: computed('fragment.type', {\n        get() {\n            return this.get('fragmentTypes').findBy('value', this.get('fragment.type'));\n        },\n        set(key, value) {\n            this.changeFragmentType(value);\n            this.focusFragment();\n\n            return value;\n        }\n    }),\n\n    changeset: computed('fragment.type', function() {\n        const validations = VALIDATIONS[this.get('fragment.type')];\n        return new Changeset(\n           this.get('fragment'),\n           lookupValidator(validations),\n           validations\n        );\n    }),\n\n    isList: computed.equal('fragment.type', 'list'),\n    isRange: computed.equal('fragment.type', 'range'),\n\n    listPlaceholder: computed('isList', function() {\n        return this.get('isList') ? 'val1 val2 val3' : '';\n    }),\n\n    multiplicity: computed('fragmentType', 'fragment.value', function() {\n        return multiplicityFragment(this.get('fragment'));\n    }),\n\n    limits() {\n        const limits = this.get('changeset.value').split('-');\n        return limits.length !== 2 ? ['', ''] : limits;\n    },\n    lower: computed('isRange', 'changeset.value', {\n        get() {\n            return this.limits()[0];\n        },\n        set(key, value) {\n            this.updateLimit(value, 0);\n            return value;\n        }\n    }),\n    higher: computed('isRange', 'changeset.value', {\n        get() {\n            return this.limits()[1];\n        },\n        set(key, value) {\n            this.updateLimit(value, 1);\n            return value;\n        }\n    }),\n\n    // helpers\n    updateFragment() {\n        this.saveChangeset();\n        this.set('toggleTooltip', false);\n        this.get('flashTooltip').perform();\n        this.set('fragment.valid', this.get('changeset.isValid'));\n    },\n\n    updateLimit(value, index) {\n        let limits = this.limits();\n        limits[index] = value;\n\n        const changeset = this.get('changeset');\n        changeset.set('value', limits.join('-'));\n\n        this.updateFragment();\n    },\n\n    changeFragmentType(value) {\n        this.set('fragment.value', '');\n        this.set('fragment.valid', true);\n        this.set('fragment.type', value.value);\n    },\n\n    focusFragment() {\n        run.scheduleOnce('afterRender', this.context, () => {\n            this.$('.focus-control').focus();\n        });\n    },\n\n    saveChangeset() {\n        const changeset = this.get('changeset');\n\n        if (changeset.get('value') === '') {\n            changeset.set('value', '');\n        }\n\n        if (changeset.get('isValid')) {\n            changeset.save();\n        }\n    },\n\n    flashTooltip: task(function * () {\n        yield timeout(TOOLTIP_DEBOUNCE);\n\n        if (this.get('changeset.isInvalid')) {\n            this.set('toggleTooltip', true);\n            yield timeout(TOOLTIP_DELAY);\n            this.set('toggleTooltip', false);\n        }\n    }).restartable(),\n\n    actions: {\n        saveFragment() {\n            this.updateFragment();\n\n            if (this.get('changeset.isValid') && this.get('allValidFragments')) {\n                this.get('saveSpider').perform();\n            }\n        },\n\n        updateValue() {\n            this.updateFragment();\n        },\n\n        changeFragmentType() {\n            this.get('saveSpider').cancelAll();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/generated-url-options.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { getColors } from '../utils/colors';\nimport { multiplicityFragment } from '../utils/start-urls';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    rawColors: computed.mapBy('fragmentColors', 'main'),\n    fragments: computed.alias('startUrl.fragments'),\n\n    allValidFragments: computed('fragments.@each.valid', function() {\n      return this.get('fragments').reduce((a, b) => {\n        return (a.valid === undefined || a.valid) &&\n               (b.valid === undefined || b.valid);\n      });\n    }),\n    generatedUrlLists: computed('fragments.@each.type', 'fragments.@each.value', function() {\n        return this.get('startUrl').generateList();\n    }),\n\n    fragmentColors: computed('fragments.[]', function() {\n        return getColors(this.get('fragments.length'));\n    }),\n    isComplete: computed('generatedUrlLists', '_fragmentCount', function() {\n        return this.get('generatedUrlLists.length') === this.get('_fragmentCount');\n    }),\n\n    actions: {\n        addFragment() {\n            this.get('dispatcher').addFragment(this.get('startUrl'));\n            this.get('saveSpider').perform();\n        },\n\n        removeFragment(fragment) {\n            this.get('dispatcher').removeFragment(this.get('startUrl'), fragment);\n            this.get('saveSpider').perform();\n        }\n    },\n\n    _fragmentCount: computed('fragments.@each.type',\n                             'fragments.@each.value', function() {\n        return this.get('fragments')\n                   .map(multiplicityFragment)\n                   .reduce((a,b) => a * b);\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/help-icon.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    tooltipClasses: null,\n    tooltipContainer: 'body',\n    placement: 'right',\n    icon: 'help',\n    classes: 'help-icon',\n});\n"
  },
  {
    "path": "portiaui/app/components/icon-button.js",
    "content": "import Ember from 'ember';\n\nexport const ICON_CLASSES = {\n    add: 'structure-list-add fa fa-plus-circle',\n    'add-dropdown': 'structure-list-add fa fa-play-circle fa-rotate-90',\n    close: 'fa fa-times',\n    code: 'fa fa-code',\n    copy: 'fa fa-copy',\n    'data-annotation': 'fa fa-hand-pointer-o',\n    date: 'fa fa-calendar',\n    'default-add': 'fa fa-check-circle structure-list-publish',\n    'default-remove': 'fa fa-times-circle structure-list-discard',\n    download: 'fa fa-download',\n    publish: 'structure-list-publish fa fa-cloud-upload',\n    edit: 'fa fa-pencil',\n    error: 'structure-list-error fa fa-exclamation-circle',\n    'error-triangle': 'structure-list-error fa fa-exclamation-triangle',\n    file: 'fa fa-file',\n    geopoint: 'fa fa-map-marker',\n    help: 'icon-button-help fa fa-question-circle',\n    image: 'fa fa-picture-o',\n    link: 'fa fa-link',\n    list: 'fa fa-list',\n    navigation: 'fa fa-eye',\n    number: 'portia-icon portia-icon-number',\n    options: 'structure-list-details fa fa-cog',\n    ok: 'structure-list-publish fa fa-check-circle',\n    play: 'structure-list-play fa fa-play-circle',\n    price: 'fa fa-dollar',\n    project: 'fa fa-folder',\n    'raw html': 'fa fa-code',\n    'regular expression': 'portia-icon portia-icon-regex',\n    remove: 'structure-list-remove fa fa-minus-circle',\n    rollback: 'structure-list-discard fa fa-history',\n    'safe html': 'portia-icon portia-icon-safe-html',\n    sample: 'fa fa-file',\n    schema: 'fa fa-database',\n    spider: 'portia-icon portia-icon-spider',\n    structure: 'fa fa-sitemap',\n    text: 'portia-icon portia-icon-text',\n    'tool-css': 'fa fa-file-code-o',\n    'tool-magic': 'fa fa-magic fa-flip-horizontal',\n    'tool-select': 'fa fa-mouse-pointer',\n    'tool-add': 'fa fa-plus',\n    'tool-remove': 'fa fa-minus',\n    'tool-multiple': 'fa fa-th-large',\n    url: 'fa fa-globe',\n    'url-generated': 'portia-icon portia-icon-generated-url',\n    'url-feed': 'portia-icon portia-icon-feed-url',\n    'vertical-ellipsis': 'fa fa-ellipsis-v',\n    'warning-triangle': 'structure-list-warning fa fa-exclamation-triangle'\n};\n\nexport default Ember.Component.extend({\n    attributeBindings: ['tabindex'],\n    classNames: ['icon-button'],\n    classNameBindings: ['iconClasses', 'disabled', 'hasAction', 'modifyClasses'],\n    tagName: 'i',\n\n    bubbles: true,\n    disabled: false,\n    modifyClasses: '',\n\n    hasAction: Ember.computed.bool('action'),\n\n    beforeClick() {},\n\n    click() {\n        this.beforeClick();\n        if (this.attrs.action && !this.get('disabled')) {\n            this.attrs.action();\n            if (!this.get('bubbles')) {\n                return false;\n            }\n        }\n    },\n\n    iconClasses: Ember.computed('icon', function() {\n        var icon = this.get('icon');\n        return ICON_CLASSES[icon] || 'fa';\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/indentation-spacer.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n  classNames: ['indentation-spacer'],\n  classNameBindings: ['isSmall'],\n  isSmall: false\n});\n"
  },
  {
    "path": "portiaui/app/components/input-with-clear.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['input-group', 'input-with-clear'],\n\n    type: 'text',\n    value: '',\n\n    actions: {\n        clear() {\n            this.set('value', '');\n            this.get('clear')();\n        },\n\n        keyUp() {\n            this.update(this.get('value'));\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/inspector-panel.js",
    "content": "import Ember from 'ember';\nimport { pathSelector } from '../utils/selectors';\n\nexport const IGNORED_ATTRIBUTES = new Set([\n    'id', 'class', 'target', 'width', 'style', 'height', 'cellpadding',\n    'cellspacing', 'border', 'bgcolor', 'color', 'colspan',\n    'data-scrapy-annotate', 'data-tagid', 'data-genid', 'data-parentid'\n]);\n\nexport function hasContentAttribute(element) {\n    return Ember.$(element).attr('content') ? true : false;\n}\n\nexport function getAttributeList(element) {\n    if (!element) {\n        return [];\n    }\n    var attributeList = [];\n    var $element = Ember.$(element);\n    var textContent = $element.text().trim();\n    if (textContent) {\n        let hasContent = hasContentAttribute(element);\n        attributeList.push({\n            name: hasContent ? 'text content' : 'content',\n            attribute: hasContent ? 'text-content' : 'content',\n            value: textContent\n        });\n    }\n    var mappedAttributes = {};\n    for (var i = 0; i < element.attributes.length; i++) {\n        var attrib = element.attributes[i];\n        if (attrib.name.startsWith('data-portia-')) {\n            var originalName = attrib.name.slice('data-portia-'.length);\n            if (!mappedAttributes[originalName]) {\n                mappedAttributes[originalName] = attrib.value;\n            }\n        }\n    }\n    Array.prototype.slice.call(element.attributes).forEach(function(attribute) {\n        if (!attribute.nodeName.startsWith('data-portia-') &&\n                !IGNORED_ATTRIBUTES.has(attribute.nodeName) &&\n                attribute.value) {\n            attributeList.push({\n                name: attribute.nodeName,\n                attribute: attribute.nodeName,\n                value: mappedAttributes[attribute.nodeName] || attribute.value\n            });\n        }\n    });\n    return attributeList;\n}\n\nexport function getDefaultAttribute(element) {\n    // TODO: Remove attributes that have been already annotated\n    const attrList = getAttributeList(element);\n\n    if (attrList.length === 1 && attrList[0].attribute) {\n        // Only one possible attribute\n        return attrList[0].attribute;\n    }\n\n    if (attrList.findBy('attribute', 'src')) {\n        return 'src';\n    } else if (attrList.findBy('attribute', 'href')) {\n        return 'href';\n    } else if (attrList.findBy('attribute', 'datetime')) {\n        return 'datetime';\n    } else if (attrList.findBy('attribute', 'content')) {\n        return 'content';\n    } else if (attrList.length) {\n        return attrList[0].attribute;\n    }\n\n    return null;\n}\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n\n    tagName: '',\n\n    attributes: Ember.computed('inspectedElement', function() {\n        return getAttributeList(this.get('inspectedElement'));\n    }),\n\n    elementPath: Ember.computed('inspectedElement', function() {\n        const element = this.get('inspectedElement');\n        if (!element) {\n            return '';\n        }\n        return pathSelector(element);\n    }),\n\n    elementParents: Ember.computed('originalSelectedElement', 'selectedElement', function() {\n        const inspected = this.get('originalSelectedElement');\n        const selected = this.get('selectedElement');\n        if (!inspected) {\n            return [];\n        }\n        return $(inspected).add($(inspected).parents()).toArray().map(element => ({\n            element: element,\n            tagName: element.tagName.toLowerCase(),\n            selected: element === selected,\n            isLast: element === inspected,\n        }));\n    }),\n\n    elementChilds: Ember.computed('selectedElement', function() {\n        const selected = this.get('selectedElement');\n        return $(selected).children().toArray().map(element => ({\n            element: element,\n            tagName: element.tagName.toLowerCase()\n        }));\n    }),\n    inspectedElement: Ember.computed.or(\n        'uiState.viewPort.hoveredElement', 'uiState.viewPort.selectedElement'),\n    originalSelectedElement: Ember.computed.alias('uiState.viewPort.originalSelectedElement'),\n    selectedElement: Ember.computed.alias('uiState.viewPort.selectedElement'),\n    isHovered: Ember.computed.bool('uiState.viewPort.hoveredElement'),\n\n    actions: {\n        addAnnotation(attribute) {\n            this.get('dispatcher').addAnnotation(\n                /* auto item */null, this.get('inspectedElement'), attribute, /* redirect = */true);\n        },\n\n        changeAnnotationSource(attribute) {\n            const annotation = this.get('uiState.models.annotation');\n            this.get('dispatcher').changeAnnotationSource(annotation, attribute);\n        },\n\n        selectParent(element) {\n            this.set('selectedElement', element);\n        },\n\n        selectChild(element) {\n            this.set('selectedElement', element);\n            // Selecting sideways resets the originalSelectedElement\n            this.set('uiState.viewPort.originalSelectedElement', element);\n        },\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/link-crawling-options.js",
    "content": "import Ember from 'ember';\nimport SaveSpiderMixin from '../mixins/save-spider-mixin';\n\nexport default Ember.Component.extend(SaveSpiderMixin,{\n    tagName: '',\n\n    spider: null,\n\n    actions: {\n        save() {\n            this.saveSpider();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-add-annotation-menu.js",
    "content": "import Ember from 'ember';\nimport config from '../config/environment';\n\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    item: null,\n\n    allowNesting: config.APP.allow_nesting,\n\n    actions: {\n        addAnnotation() {\n            const item = this.get('item');\n            this.get('dispatcher').addAnnotation(item, undefined, undefined, /* redirect = */true);\n        },\n\n        addNestedItem() {\n            const item = this.get('item');\n            this.get('dispatcher').addNestedItem(item, /* redirect = */true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-annotation-field.js",
    "content": "import Ember from 'ember';\nimport {validateFieldName} from './schema-structure-listing';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n    notificationManager: Ember.inject.service(),\n\n    tagName: '',\n\n    annotation: null,\n    selecting: false,\n\n    actions: {\n        validateFieldName(name) {\n            return Ember.RSVP.all([\n                this.get('annotation.field'),\n                this.get('annotation.parent.schema.fields')\n            ]).then(([currentField, fields]) => {\n                if (!fields) {\n                    return true;\n                }\n                fields = fields.reject(f => f === currentField);\n                const error = validateFieldName(name, fields);\n                if (error) {\n                    this.get('notificationManager').showWarningNotification(error);\n                }\n                return !error;\n            });\n        },\n\n        addField(name) {\n            const annotation = this.get('annotation');\n            const schema = annotation.get('field.schema');\n            const currentType = annotation.get('type');\n            const dispatcher = this.get('dispatcher');\n\n            dispatcher.addNamedField(schema, name, currentType, /* redirect = */false).then(\n                field => {\n                    annotation.set('field', field);\n                    annotation.save();\n                });\n        },\n\n        changeField() {\n            const annotation = this.get('annotation');\n            annotation.get('field').then(() => {\n                annotation.set('field', annotation.get('field')); // Used to trigger updates\n                annotation.save();\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-badge.js",
    "content": "import ColoredBadge from './colored-badge';\n\nexport default ColoredBadge.extend({\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-combo.js",
    "content": "import ListItemSelectable from './list-item-selectable';\n\nexport default ListItemSelectable.extend({\n    classNames: ['list-item-combo'],\n\n    autoSelect: false\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-editable.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['list-item-editable'],\n    classNameBindings: ['editing'],\n\n    editing: false,\n    onChange: null,\n    validate: null,\n    spellcheck: true,\n    value: null,\n\n    click() {\n        if (this.get('editing')) {\n            return false;\n        }\n    },\n\n    actions: {\n        startEditing() {\n            this.set('editing', true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-field-type.js",
    "content": "import Ember from 'ember';\nimport { FIELD_TYPES } from '../models/field';\nimport ensurePromise from '../utils/ensure-promise';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    field: null,\n\n    types: FIELD_TYPES,\n\n    actions: {\n        saveField() {\n            const field = this.get('field');\n            ensurePromise(field).then(field => {\n                if (!!field) {\n                    field.save();\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-icon-menu.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    icon: null,\n\n    actions: {\n        clickIcon() {\n            const action = this.get('onClick');\n            if (action) { action(); }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-icon.js",
    "content": "import IconButton from './icon-button';\n\nexport default IconButton.extend({\n  classNames: ['list-item-icon'],\n\n  beforeClick() {\n      const action = this.get('onClick');\n      if (action) { action(); }\n  }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-item-schema.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    item: null,\n    selecting: false,\n\n    actions: {\n        addSchema(name) {\n            const item = this.get('item');\n            const project = item.get('schema.project');\n            this.get('dispatcher').addNamedSchema(\n                project, name, /* redirect = */false).then((schema) => {\n                item.set('schema', schema);\n                item.save();\n            });\n        },\n\n        changeSchema() {\n            const item = this.get('item');\n            item.get('schema').then(() => {\n                item.set('schema', item.get('schema')); // Used to trigger updates\n                item.save();\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-link-crawling.js",
    "content": "import Ember from 'ember';\nimport SaveSpiderMixin from '../mixins/save-spider-mixin';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend(SaveSpiderMixin, {\n    routing: service('-routing'),\n    tagName: '',\n\n    spider: null,\n\n    followPatternOptions: [\n        {\n            value: 'auto',\n            label: 'Follow links automatically',\n            description: `Use start urls and sample urls to teach the spider the \\\n                          best links to follow`\n        },\n        {\n            value: 'all',\n            label: 'Follow all in-domain links',\n            description: `Follow all links which have a domain or sub domain that match \\\n                          the start or sample urls`\n        },\n        {\n            value: 'none',\n            label: \"Don't follow links\",\n            description: `Only attempt to extract data from start urls. Can be combined \\\n                          to great effect with feed and generated urls`\n        },\n        {\n            value: 'patterns',\n            label: 'Configure url patterns',\n            description: `Create patterns for the spider to follow or not and direct your \\\n                          spider with pin point accuracy`\n        },\n    ],\n\n    linksToFollow: computed('spider.linksToFollow', {\n        get() {\n            return this.followPatternOptions.findBy('value', this.get('spider.linksToFollow'));\n        },\n\n        set(key, value) {\n            this.set('spider.linksToFollow', value.value);\n            return value;\n        }\n    }),\n\n    actions: {\n        saveSpider() {\n            this.saveSpider().then(() => {\n                if (this.get('linksToFollow.value') === 'patterns') {\n                    this.get('routing').transitionTo('projects.project.spider.link-options');\n                } else if (this.get('linksToFollow.value') === 'none' &&\n                        this.get('routing.currentRouteName').endsWith('link-options')) {\n                    this.get('routing').transitionTo('projects.project.spider');\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-relation-manager.js",
    "content": "import Ember from 'ember';\nimport { ensurePromise } from '../utils/promises';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    onChange: null,\n    choices: [],\n    selecting: false,\n    value: null,\n\n    choicesOrdering: ['name'],\n    sortedChoices: Ember.computed.sort('choices', 'choicesOrdering'),\n\n    orderItemsForSearch(items) {\n        function sortPriority(item) {\n            switch (item.get('value.special')) {\n                case 'rename':\n                    return 1;\n                case 'add':\n                    return 2;\n                default:\n                    return 0;\n            }\n        }\n\n        return items.sort((a, b) => sortPriority(a) - sortPriority(b));\n    },\n\n    valuesEqual(a, b) {\n        const aValue = a && (a.get ? a.get('name') : a.name);\n        const bValue = b && (b.get ? b.get('name') : b.name);\n        return aValue === bValue;\n    },\n\n    validateName(name) {\n        return typeof this.attrs.validate !== 'function' || this.attrs.validate(name);\n    },\n\n    actions: {\n        add(name) {\n            ensurePromise(this.validateName(name)).then(isValid => {\n                if (isValid) {\n                    if (this.attrs.create) {\n                        this.attrs.create(name);\n                    }\n                }\n            });\n        },\n\n        rename(name) {\n            ensurePromise(this.validateName(name)).then(isValid => {\n                if (isValid) {\n                    const model = this.get('value');\n                    ensurePromise(model).then(item => {\n                        if (!item) {\n                            return; // Model is null\n                        }\n                        item.set('name', name);\n                        item.save();\n                    });\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-selectable.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['list-item-selectable'],\n    classNameBindings: ['selecting'],\n\n    change: null,\n    choices: [],\n    buttonClass: null,\n    menuAlign: 'left',\n    menuClass: null,\n    menuContainer: null,\n\n    selecting: false,\n    value: null,\n\n    actions: {\n        startSelecting() {\n            this.set('selecting', true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/list-item-text.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: 'span',\n    classNames: ['list-item-text']\n});\n"
  },
  {
    "path": "portiaui/app/components/notification-container.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    notificationManager: Ember.inject.service(),\n\n    classNames: ['notifications'],\n\n    _banners: [],\n    _notifications: [],\n\n    banners: Ember.computed('_banners.[]', 'notificationManager.banners.[]', function() {\n        const lastBanners = this.get('_banners');\n        const banners = this.get('notificationManager.banners');\n        for (let banner of lastBanners) {\n            Ember.set(banner, 'fading', true);\n        }\n        for (let banner of banners) {\n            Ember.set(banner, 'fading', undefined);\n        }\n        lastBanners.addObjects(banners);\n        return lastBanners;\n    }),\n    notifications: Ember.computed('_notifications.[]', 'notificationManager.notifications.[]',\n        function() {\n            const lastNotifications = this.get('_notifications');\n            const notifications = this.get('notificationManager.notifications');\n            for (let notification of lastNotifications) {\n                Ember.set(notification, 'fading', true);\n            }\n            for (let notification of notifications) {\n                Ember.set(notification, 'fading', undefined);\n            }\n            lastNotifications.addObjects(notifications);\n            return lastNotifications;\n        }),\n\n    displayNotifications: Ember.computed('banners.length', 'notifications.[]', function() {\n        const numBanners = this.get('banners.length');\n        const notifications = this.get('notifications');\n        return notifications.slice(0, Math.max(0, 4 - numBanners));\n    }),\n\n    actions: {\n        dismissNotification(notification) {\n            this.get('notificationManager.notifications').removeObject(notification);\n        },\n\n        fadeBanner(banner) {\n            this.get('_banners').removeObject(banner);\n        },\n\n        fadeNotification(notification) {\n            this.get('_notifications').removeObject(notification);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/notification-message.js",
    "content": "import Ember from 'ember';\nimport { attrChangedTo } from '../utils/attrs';\n\nexport default Ember.Component.extend({\n    classNames: ['alert', 'notification', 'fade'],\n    classNameBindings: ['alertType', 'show:in'],\n\n    notification: null,\n    closeAction: null,\n    dismissable: false,\n    show: false,\n    showTime: 4000,  // 4s\n\n    message: Ember.computed.readOnly('notification.message'),\n    title: Ember.computed.readOnly('notification.title'),\n    type: Ember.computed.readOnly('notification.type'),\n\n    alertType: Ember.computed('type', function() {\n        const type = this.getWithDefault('type', 'info');\n        return `alert-${type}`;\n    }),\n\n    init() {\n        this._super();\n        this.set('show', false);\n    },\n\n    didReceiveAttrs({newAttrs, oldAttrs}) {\n        if (attrChangedTo(oldAttrs, newAttrs, 'fade', true)) {\n            this.fadeOut();\n        }\n    },\n\n    didInsertElement() {\n        Ember.run.next(this, 'fadeIn');\n        if (this.attrs.closeAction) {\n            Ember.run.later(() => {\n                this.attrs.closeAction();\n            }, this.showTime);\n        }\n    },\n\n    fadeIn() {\n        if (!this.isDestroying) {\n            this.set('show', true);\n        }\n    },\n\n    fadeOut() {\n        this.set('show', false);\n    },\n\n    transitionEnd() {\n        if (!this.get('show')) {\n            if (this.attrs.fadeAction) {\n                this.attrs.fadeAction();\n            }\n        }\n    },\n\n    actions: {\n        close: function() {\n            if (this.attrs.closeAction) {\n                this.attrs.closeAction();\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/page-actions-editor.js",
    "content": "import Ember from 'ember';\n\nconst TYPES = ['click', 'set', 'wait'];\n\nexport default Ember.Component.extend({\n    actionTypes: TYPES,\n    pageActions: null,\n    editing: null,\n    addingNew: false,\n\n    actions: {\n        reorderPageAction: function(originalIndex, newIndex){\n            var pageActions = this.get('pageActions');\n            var action = pageActions[originalIndex];\n            pageActions.removeAt(originalIndex);\n            pageActions.insertAt(newIndex, action);\n        },\n        deletePageAction: function(index){\n            var pageActions = this.get('pageActions');\n            pageActions.removeAt(index);\n        },\n        editPageAction: function(pageAction) {\n            pageAction._edited = true;\n            this.set('editing', pageAction);\n        },\n        back: function() {\n            this.set('editing', null);\n        },\n        addContinue: function(){\n            this.set('addingNew', false);\n        },\n        addNew: function() {\n            var pa = Ember.Object.create({\n                type: \"wait\",\n                _edited: true\n            });\n            this.set('addingNew', true);\n            this.set('editing', pa);\n            this.get('pageActions').pushObject(pa);\n        }\n    },\n});\n\n"
  },
  {
    "path": "portiaui/app/components/project-list.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\n\nexport default Ember.Component.extend({\n    store: Ember.inject.service(),\n\n    classNames: ['project-list', 'list-group'],\n    classNameBindings: [\n        'showSearch',\n        'filteredProjects.length::empty',\n        'withinDropdown:project-within-dropdown',\n        'showSearch::not-searchable'\n    ],\n\n    withinDropdown: false,\n    minSearchableProjects: 8,\n    projects: [],\n    searchTerm: '',\n\n    isSelecting: computed.bool('selectProject'),\n    emptySearchTerm: computed.equal('searchTerm', ''),\n    showSearch: computed('projects', function() {\n        return this.get('projects.length') > this.get('minSearchableProjects');\n    }),\n\n    filteredProjects: computed('projects', 'searchTerm', function() {\n            let term = this.get('searchTerm');\n            if (term.length === 0) {\n                return this.get('projects');\n            }\n            return this.get('store').peekAll('project').filter(function(item) {\n                return item.get('name').toLowerCase().indexOf(term) > -1;\n            });\n    }),\n\n    actions: {\n        search(value) {\n            this.set('searchTerm', value.toLowerCase().trim());\n        },\n        clear() {\n            const action = this.get('onClear');\n            if (action && this.get('emptySearchTerm')) {\n                action();\n            }\n\n            this.set('searchTerm', '');\n        },\n        selectProject(project) {\n            const action = this.get('selectProject');\n            if (action) { action(project); }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/project-listing.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    capabilities: service(),\n    changes: service(),\n    notificationManager: service(),\n\n    tagName: '',\n    project: null,\n    isNoticed: false,\n\n    deployable: computed.readOnly('capabilities.capabilities.deploy_projects'),\n    versionControlled: computed.readOnly('capabilities.capabilities.version_control'),\n    notVersionControlled: computed.not('versionControlled'),\n    hasChanges: computed.readOnly('changes.hasChanges'),\n    hasNoChanges: computed.not('hasChanges'),\n    notPublished: computed.or('hasNoChanges', 'notVersionControlled'),\n    isPublished: computed.not('notPublished'),\n    notNoticed: computed.not('isNoticed'),\n    isPulsing: computed.and('hasChanges', 'notNoticed'),\n\n    downloadUrl: computed('project', function() {\n        const link = this.get('project._internalModel._links.self');\n        return `${link}/download`;\n    }),\n    downloadCodeUrl: computed('downloadUrl', function() {\n        return `${this.get('downloadUrl')}?format=code`;\n    }),\n\n    actions: {\n        deploy() {\n            this.get('project').deploy().then(data => {\n                // Show user message and allow them to schedule spider\n                this.get('notificationManager').showNotification(\n                    data.meta.title);\n            }, data => {\n                let error = data.errors[0];\n                if (error.status > 499) {\n                    throw data;\n                }\n                this.get('notificationManager').showNotification(error.title, error.detail);\n                if (error.status === 409) {\n                    this.sendAction('conflict');\n                }\n            });\n        },\n\n        publish() {\n            this.get('project').publish().then(data => {\n                // Show user message and allow them to schedule spider\n                this.get('notificationManager').showNotification(\n                    data.meta.title);\n            }, data => {\n                let error = data.errors[0];\n                if (error.status > 499) {\n                    throw data;\n                }\n                this.get('notificationManager').showNotification(error.title, error.detail);\n                if (error.status === 409) {\n                    this.sendAction('conflict');\n                }\n            });\n        },\n\n        discard() {\n            this.get('project').reset().then(() => {\n                this.sendAction('reload');\n            }, data => {\n                let error = data.errors[0];\n                if (error.status > 499) {\n                    throw data;\n                }\n                this.get('notificationManager').showNotification(error.title, error.detail);\n            });\n\n        },\n\n        clickProjectOptions() {\n            this.set('isNoticed', true);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/project-structure-listing.js",
    "content": "import Ember from 'ember';\nconst { computed, observer } = Ember;\nimport {computedCanAddSpider} from '../services/dispatcher';\nimport { task, timeout } from 'ember-concurrency';\n\nconst LIMIT = 15;\nconst FILTER_DEBOUNCE = 800;\nconst TURN_PAGE_DEBOUNCE = 200;\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n\n    tagName:      '',\n    spiderSearch: '',\n    isFiltering:  false,\n\n    didReceiveAttrs() {\n        const spiders = this.get('sortedSpiders').slice(0, LIMIT);\n        this._addCurrentSpider(spiders);\n        this.set('spiders', spiders);\n        this.set('filteredSpiders', this.get('sortedSpiders'));\n    },\n\n    // Pagination\n    currentPage: 0,\n    hasPreviousPage: computed.gte('currentPage', 1),\n    hasNextPage: computed('currentPage', 'filteredSpiders.length', function() {\n        const max = (this.get('currentPage') + 1) * LIMIT;\n        return max < this.get('filteredSpiders.length');\n    }),\n    pagination: computed('currentSpider', 'currentPage', 'spiders.[]',\n                         function() {\n        if (this.get('currentSpider')) { return ''; }\n        if (this.get('filteredSpiders.length') <= LIMIT) {\n            return '';\n        }\n        const numSpiders = this.get('spiders.length');\n        const currentPage = this.get('currentPage');\n        const start = (currentPage * LIMIT) + 1;\n        const end   = Math.min((currentPage + 1) * LIMIT, start + numSpiders - 1);\n        return `( ${start}-${end} )`;\n    }),\n    currentSpiderChanged: observer('currentSpider', function() {\n        Ember.run.next(() => {\n            this._addCurrentSpider(this.get('spiders'));\n            this._addCurrentSpider(this.get('filteredSpiders'));\n        });\n    }),\n    turnPage: task(function * (offset) {\n        this.set('isFiltering', true);\n\n        yield timeout(TURN_PAGE_DEBOUNCE);\n\n        this.set('isFiltering', false);\n        const nextPage = this.get('currentPage') + offset;\n        const start = nextPage * LIMIT;\n        this.set('spiders',\n                 this.get('filteredSpiders').slice(start, start + LIMIT));\n        this.set('currentPage', nextPage);\n    }).drop(),\n\n\n    numSpiders: computed.readOnly('project.spiders.length'),\n    canAddSpider: computedCanAddSpider(),\n    currentSpider: computed.readOnly('uiState.models.spider'),\n    noCurrentSpider: computed.not('currentSpider'),\n    currentSchema: computed.readOnly('uiState.models.schema'),\n    isLarge: computed.gt('project.spiders.length', LIMIT),\n\n    sortedSpiders: computed.sort('project.spiders', function(spider, other_spider) {\n        const [a, b] = [spider, other_spider].map((spider) => {\n            return spider.get('id').toLowerCase();\n        });\n\n        if (a < b) {\n            return -1;\n        } else if (a > b) {\n            return 1;\n        }\n        return 0;\n    }),\n\n    sawNewOrDeletedSpider: observer('project.spiders.length', function() {\n        Ember.run.once(() => {\n            let term = this.get('searchTerm') || '';\n            this.get('filterSpiders').perform(this.get('sortedSpiders'), term);\n        });\n    }),\n\n    filterSpiders: task(function * (spiders, term) {\n        this.set('isFiltering', true);\n        yield timeout(FILTER_DEBOUNCE);\n        this._updateFilter(this._fuzzyFilter(spiders, term), term);\n    }).restartable(),\n\n    addSpiderTooltipText: computed('canAddSpider', {\n        get() {\n            if (this.get('canAddSpider')) {\n                return 'Create a new Spider';\n            } else {\n                return 'You must visit a website before you can create a Spider';\n            }\n        }\n    }),\n\n    actions: {\n        addSchema() {\n            this.get('dispatcher').addSchema(this.get('project'), /* redirect = */true);\n        },\n\n        removeSchema(schema) {\n            this.get('dispatcher').removeSchema(schema);\n        },\n\n        setSchemaDefault(schema) {\n            this.get('project.schemas').filterBy('default').forEach((s) => s.set('default', false));\n            schema.set('default', true);\n            schema.save();\n        },\n\n        removeSchemaDefault(schema) {\n            schema.set('default', false);\n            schema.save();\n        },\n\n        saveSchema(schema) {\n            schema.save();\n        },\n\n        addSpider() {\n            this.get('dispatcher').addSpider(this.get('project'), /* redirect = */true);\n        }\n    },\n\n    _fuzzyFilter(items, term) {\n        if (term === '') { return this.get('sortedSpiders'); }\n\n        const fuzzy = new RegExp(term.split('').join('.*'), 'i');\n        return items.filter((item) => {\n            return fuzzy.exec(item.get('id'));\n        });\n    },\n\n    _addCurrentSpider(spiders) {\n        const currentSpider = this.get('currentSpider');\n        if (currentSpider && !spiders.includes(currentSpider)) {\n            spiders.pushObject(currentSpider);\n        }\n    },\n\n    _updateFilter(spiders, term = '') {\n        this.set('spiderSearch', term);\n        this.set('currentPage',  0);\n        this.set('isFiltering',  false);\n\n        this.set('spiders',         spiders.slice(0, LIMIT));\n        this.set('filteredSpiders', spiders);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/project-structure-spider-feed-url.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { cleanUrl } from '../utils/utils';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    url: computed.alias('startUrl.url'),\n    isEditing: computed.equal('url', ''),\n\n    viewUrl: computed('url', {\n        get() {\n            return this.get('url');\n        },\n        set(key, value) {\n            this.saveStartUrl(value);\n        }\n    }),\n\n    saveStartUrl(url) {\n        this.set('startUrl.url', cleanUrl(url));\n        this.get('spider').save();\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/project-structure-spider-generated-url.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    fragments: computed.alias('startUrl.fragments'),\n    url: computed('startUrl.url', 'fragments.@each.type', 'fragments.@each.value', function() {\n        return this.get('startUrl').show();\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/project-structure-spider-url.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { cleanUrl } from '../utils/utils';\n\nexport default Ember.Component.extend({\n    dispatcher: Ember.inject.service(),\n    tagName: '',\n\n    fragments: computed.alias('startUrl.fragments'),\n    url: computed('startUrl.url', 'fragments.@each.type', 'fragments.@each.value', function() {\n        return this.get('startUrl').show();\n    }),\n\n    viewUrl: Ember.computed('url', {\n        get() {\n            return this.get('url');\n        },\n\n        set(key, value, oldValue) {\n            this.send('saveStartUrl', oldValue, value);\n            return value;\n        }\n    }),\n\n    handleNewUrl(oldUrl, newUrl) {\n        const spider = this.get('spider');\n        const cleanNewUrl= cleanUrl(newUrl);\n\n        if (!oldUrl) {\n            this.get('dispatcher').addStartUrl(spider, cleanNewUrl);\n        } else {\n            this.get('dispatcher').replaceStartUrl(spider, oldUrl, cleanNewUrl);\n        }\n    },\n\n    removeStartUrl() {\n        this.get('dispatcher').removeStartUrl(this.get('spider'),\n                                              this.get('startUrl'));\n    },\n\n    actions: {\n        saveStartUrl(oldUrl, newUrl) {\n            if (oldUrl !== newUrl) {\n                if (newUrl) {\n                    this.handleNewUrl(oldUrl, newUrl);\n                } else {\n                    this.removeStartUrl();\n                }\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/regex-pattern-list.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['regex-pattern-list'],\n\n    list: [],\n    newPattern: '',\n    newPatternCorrect: Ember.computed('newPattern', function() {\n        const pattern = this.get('newPattern');\n        try {\n            new RegExp(pattern);\n        } catch (e) {\n            return false;\n        }\n        return true;\n    }),\n\n    triggerChange() {\n        if (this.attrs.onChange) {\n            this.attrs.onChange();\n        }\n    },\n\n    actions: {\n        addPattern(pattern) {\n            if (this.get('newPattern') && this.get('newPatternCorrect')) {\n                this.set('newPattern', '');\n                this.get('list').addObject(pattern);\n                this.triggerChange();\n            }\n        },\n\n        clearPattern() {\n            this.set('newPattern', '');\n        },\n\n        changePattern(index, value) {\n            const list = this.get('list');\n            const current = list.objectAt(index);\n            if (value !== current) {\n                list.removeObject(value);\n                list.replace(list.indexOf(current), 1, [value]);\n                this.triggerChange();\n            }\n        },\n\n        removePattern(index) {\n            this.get('list').removeAt(index);\n            this.triggerChange();\n        },\n\n        stopPropagation($event) {\n            $event.stopPropagation();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/reorder-handler.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n        attributeBindings: ['draggable', 'style'],\n        draggable: true,\n        tagName: 'i',\n        classNames: 'fa fa-icon fa-arrows reorder-handler',\n        dragStart: function(event) {\n            var dataTransfer = event.originalEvent.dataTransfer;\n            dataTransfer.effectAllowed = \"move\";\n            dataTransfer.setData('text/plain', \"\");\n            var dragElement = this.$().parentsUntil('.reorderable-list').eq(-1);\n            dataTransfer.addElement(dragElement[0]);\n            dragElement.addClass('dragging').one(\"dragend\", function(){\n                dragElement.removeClass('dragging');\n            });\n        },\n});\n\n"
  },
  {
    "path": "portiaui/app/components/save-status.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    clock: Ember.inject.service(),\n    savingNotification: Ember.inject.service(),\n\n    tagName: 'p',\n    classNames: ['save-status', 'text-center'],\n\n    minSavingTime: 1000,  // 1s\n    minSuccessTime: 5000,  // 5s\n\n    init() {\n        this._super(...arguments);\n        this.wasSaving = false;\n    },\n\n    isSaving: Ember.computed('savingNotification.isSaving', {\n        get() {\n            const isSaving = this.get('savingNotification.isSaving');\n            if (isSaving) {\n                this.startTime = +new Date();\n                Ember.run.cancel(this.savingSchedule);\n                return true;\n            } else {\n                const timeLeft =\n                    Math.max(0, this.minSavingTime - (+new Date() - this.startTime));\n                if (timeLeft) {\n                    this.savingSchedule = Ember.run.later(() => {\n                        this.set('isSaving', this.get('savingNotification.isSaving'));\n                    }, timeLeft);\n                    return true;\n                }\n                return false;\n            }\n        },\n\n        set(key, value) {\n            return value;\n        }\n    }),\n    timeSinceLastSave: Ember.computed('clock.time', 'savingNotification.lastSaved', function() {\n        const current = this.get('clock.time');\n        const last = this.get('savingNotification.lastSaved');\n        if (!current || !last) {\n            return null;\n        }\n        return moment(last).fromNow();\n    }),\n    labelColorClass: Ember.computed('isSaving', {\n        get() {\n            const isSaving = this.get('isSaving');\n            if (isSaving) {\n                this.wasSaving = true;\n                Ember.run.cancel(this.colorSchedule);\n            } else if (this.wasSaving) {\n                this.wasSaving = false;\n                this.colorSchedule = Ember.run.later(() => {\n                    this.set('labelColorClass', this.get('isSaving') ? 'info' : 'default');\n                }, this.minSuccessTime);\n                return 'success';\n            }\n            return isSaving ? 'info' : 'default';\n        },\n\n        set(key, value) {\n            return value;\n        }\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/schema-structure-listing.js",
    "content": "import Ember from 'ember';\nimport ensurePromise from '../utils/ensure-promise';\n\nexport function validateFieldName(name, fields) {\n    // Ensuring that field names don't start with underscores prevents\n    // overwriting _item, _template and any future \"protected\" property\n    // we might add to extracted items.\n    if (/^_/.test(name)) {\n        return \"Invalid field name: field can't start with underscores\";\n    } else if (name === 'url') {\n        return ('Invalid field name: naming a field \"url\" is not allowed as' +\n                'there is already a field with this name');\n    } else if (fields.findBy('name', name)) {\n        return 'Invalid field name: There is already a field with that name';\n    }\n    return null; // No error\n}\n\nexport default Ember.Component.extend({\n    notificationManager: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n\n    tagName: '',\n\n    actions: {\n        addField() {\n            this.get('dispatcher').addField(this.get('schema'), undefined, /* redirect = */true);\n        },\n\n        removeField(field) {\n            this.get('dispatcher').removeField(field);\n        },\n\n        validateFieldName(field, name) {\n            return this.get('schema.fields').then(fields => {\n                fields = fields.reject(f => f === field);\n                const error = validateFieldName(name, fields);\n                if (error) {\n                    this.get('notificationManager').showWarningNotification(error);\n                }\n                return !error;\n            });\n        },\n\n        saveField(field) {\n            ensurePromise(field).then(field => {\n                if (!!field) {\n                    field.save();\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/scrapinghub-links.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n});\n"
  },
  {
    "path": "portiaui/app/components/select-box.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    choices: [],\n    buttonClass: null,\n    menuAlign: 'left',\n    menuClass: null,\n    menuContainer: null,\n    name: null,\n    open: false,\n    value: null,\n    valueAttribute: null,\n    isDisabled: false,\n\n    viewValue: Ember.computed('value', {\n        get() {\n            return this.get('value');\n        },\n\n        set(key, value) {\n            return value;\n        }\n    }),\n\n    didInsertElement() {\n        if (this.get('open')) {\n            Ember.run.next(this, this.setInputFocus);\n        }\n    },\n\n    inputId: Ember.computed('elementId', function() {\n        return this.get('elementId') + '-input';\n    }),\n\n    updateInputFocus: Ember.observer('open', function() {\n        Ember.run.scheduleOnce('afterRender', this, this.setInputFocus);\n    }),\n\n    setInputFocus() {\n        const inputElement = Ember.$('#' + this.get('inputId')).get(0);\n        if (inputElement && this.get('open')) {\n            inputElement.focus();\n        } else if (!this.get('isDestroying')) {\n            inputElement.blur();\n        }\n    },\n\n    actions: {\n        setViewValue(value) {\n            this.set('viewValue', value);\n        },\n\n        setValue(value) {\n            this.setProperties({\n                value,\n                viewValue: value\n            });\n        },\n\n        setValueAndClose(value) {\n            this.setProperties({\n                open: false,\n                value\n            });\n            if (this.attrs.onChange) {\n                this.attrs.onChange();\n            }\n        },\n\n        menuClicked() {\n            const action = this.get('onClick');\n\n            if (action) {\n                action();\n            }\n        },\n\n        menuClosed(reason) {\n            if (this.get('open')) {\n                if (reason === 'escape') {\n                    this.setProperties({\n                        open: false,\n                        viewValue: this.get('value')\n                    });\n                } else {\n                    const viewValue = this.get('viewValue');\n                    if (viewValue && viewValue.onMenuClosed && viewValue.onMenuClosed.call) {\n                        viewValue.onMenuClosed();\n                    } else {\n                        this.setProperties({\n                            open: false,\n                            value: viewValue\n                        });\n                    }\n                    if (this.attrs.onChange) {\n                        this.attrs.onChange();\n                    }\n                }\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/show-links-button.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    browser: service(),\n\n    disableLinks: computed.readOnly('browser.invalidUrl'),\n    spider: null,\n\n    actions: {\n        toggleShowLinks() {\n            const spider = this.get('spider');\n            spider.toggleProperty('showLinks');\n            spider.save();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/show-links-legend.js",
    "content": "import Ember from 'ember';\nimport { NAMED_COLORS } from '../utils/colors';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    colors: NAMED_COLORS,\n    followedLinks: 0,\n    jsLinks: 0,\n    ignoredLinks: 0\n});\n"
  },
  {
    "path": "portiaui/app/components/sliding-main.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    uiState: Ember.inject.service(),\n\n    tagName: 'main',\n    classNameBindings: ['slideRight'],\n\n    slideRight: Ember.computed.bool('uiState.slideMain')\n});\n"
  },
  {
    "path": "portiaui/app/components/spider-indentation.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({ tagName: '' });\n"
  },
  {
    "path": "portiaui/app/components/spider-message.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\n\nexport default Ember.Component.extend({\n    api: Ember.inject.service(),\n    notificationManager: Ember.inject.service(),\n    hasSpider: computed.bool('currentSpider'),\n\n    actions: {\n        runSpider(spider) {\n            this.get('api').post('schedule', {\n                model: spider,\n                jsonData: {data: {type: 'spiders', id: spider.id}}\n            }).then(() => {\n                this.get('notificationManager').showNotification(\n                    'Your spider has been scheduled successfully');\n            }, data => {\n                let error = data.errors[0];\n                if (error.status > 499) {\n                    throw data;\n                }\n                this.get('notificationManager').showNotification(error.title, error.detail);\n            });\n        }\n    }\n});"
  },
  {
    "path": "portiaui/app/components/spider-options.js",
    "content": "import Ember from 'ember';\nimport SaveSpiderMixin from '../mixins/save-spider-mixin';\n\nexport default Ember.Component.extend(SaveSpiderMixin, {\n    tagName: '',\n\n    spider: null,\n\n    actions: {\n        save() {\n            this.saveSpider();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/spider-row.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    store: service(),\n    uiState: service(),\n    dispatcher: service(),\n    savingNotification: service(),\n    notificationManager: service(),\n\n    projects: [],\n    isCopyingSpider: false,\n\n    init() {\n        this._super(...arguments);\n        const projectId = this.get('project.id');\n        this.set('projects',\n                 this.get('store').peekAll('project').rejectBy('id', projectId));\n    },\n\n    currentSpider: computed.readOnly('uiState.models.spider'),\n\n    downloadUrl: computed('spider', function() {\n        const link = this.get('spider._internalModel._links.self');\n        return `${link}/download`;\n    }),\n    downloadCodeUrl: computed('downloadUrl', function() {\n        return `${this.get('downloadUrl')}?format=code`;\n    }),\n\n    notifyError(spider) {\n        const msg = `Renaming the spider '${spider.get('id')}' failed.`;\n        this.get('notificationManager').showErrorNotification(msg);\n        spider.set('name', spider.get('id'));\n    },\n\n    actions: {\n        validateSpiderName(spider, name) {\n            const nm = this.get('notificationManager');\n            if(!/^[a-zA-Z0-9][a-zA-Z0-9_\\.-]*$/.test(name)) {\n                nm.showWarningNotification(`Invalid spider name.\n                    Only letters, numbers, underscores, dashes and dots are allowed.`);\n                return false;\n            }\n            if (spider.get('id') === name) {\n                return true;\n            }\n            const spiders = this.get('project.spiders').mapBy('id');\n            if(spiders.indexOf(name) >= 0) {\n                nm.showWarningNotification(`Invalid spider name.\n                    A spider already exists with the name \"${name}\"`);\n                return false;\n            }\n            return true;\n        },\n        removeSpider(spider) {\n            this.get('dispatcher').removeSpider(spider);\n        },\n        saveSpiderName(spider) {\n            const dispatcher = this.get('dispatcher');\n            const saving = this.get('savingNotification');\n\n            saving.start();\n\n            dispatcher.changeSpiderName(spider)\n                .then((data) => dispatcher.changeId(spider, data))\n                .catch(() => this.notifyError(spider))\n                .finally(() => saving.end());\n        },\n        closeSpiderOptions() {\n            this.set('isCopyingSpider', false);\n        },\n        copySpider() {\n            this.set('isCopyingSpider', true);\n        },\n        copyToProject(options, project) {\n            project.copy({\n                from: this.get('project.id'),\n                data: [\n                  { id: this.get('spider.id'), type: 'spiders' }\n                ]\n            }).then(this._copyProjectSuccess(project))\n              .catch(this._copyProjectError.bind(this))\n              .finally(this._afterCopyProject(options));\n        }\n    },\n\n    _copyProjectSuccess(project) {\n        return () => {\n            const msg = `Spider ${this.get('spider.id')} copied\n                        successfully to project ${project.get('name')}.`;\n            this.get('notificationManager').showNotification(msg);\n        };\n    },\n    _copyProjectError(data) {\n        const error = data.errors[0];\n        if (error.status > 499) {\n            throw data;\n        }\n        this.get('notificationManager').showErrorNotification(error.title, error.detail);\n    },\n    _afterCopyProject(options) {\n        return () => {\n            options.closeMenu();\n            this.set('isCopyingSpider', false);\n        };\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/spider-structure-listing.js",
    "content": "import Ember from 'ember';\nimport {computedCanAddSample} from '../services/dispatcher';\n\nexport default Ember.Component.extend({\n    browser: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n\n    tagName: '',\n\n    project: null,\n    spider: null,\n    newStartUrl: null,\n\n    canAddSample: computedCanAddSample('spider'),\n    currentSample: Ember.computed.readOnly('uiState.models.sample'),\n\n    init() {\n        this._super();\n        this.set('newUrl', false);\n    },\n\n    getNewStartUrl(newUrl) {\n        let newStartUrl = '';\n        if (newUrl) {\n            const spider = this.get('spider');\n            newStartUrl = this.get('dispatcher').addStartUrl(spider, newUrl);\n        }\n        return newStartUrl;\n    },\n\n    getNewUrl() {\n        let newUrl = this.get('browser.url') || '';\n        const urls = this.get('spider.startUrls').mapBy('url');\n        if (newUrl && urls.includes(newUrl)) {\n            newUrl = '';\n        }\n        return newUrl;\n    },\n\n    actions: {\n        addStartUrl() {\n            this.get('closeOptions')();\n\n            const newUrl = this.getNewUrl();\n\n            this.setProperties({\n                newUrl: true,\n                urlValue: newUrl,\n                newStartUrl: this.getNewStartUrl(newUrl)\n            });\n        },\n\n        addGenerationUrl() {\n            const spider = this.get('spider');\n            let newUrl = this.get('browser.url') || '';\n            let newStartUrl = this.get('dispatcher').addGeneratedUrl(spider, newUrl);\n            this.get('transitionToFragments')(spider.get('startUrls').indexOf(newStartUrl));\n        },\n\n        addFeedUrl() {\n            const spider = this.get('spider');\n            let newStartUrl = this.get('dispatcher').addFeedUrl(spider, '');\n            this.get('transitionToFragments')(spider.get('startUrls').indexOf(newStartUrl));\n        },\n\n        removeStartUrl(startUrl) {\n            this.get('dispatcher').removeStartUrl(this.get('spider'), startUrl);\n            this.get('closeOptions')();\n        },\n\n        addSample() {\n            this.get('dispatcher').addSample(this.get('spider'), /* redirect = */true);\n        },\n\n        removeSample(sample) {\n            this.get('dispatcher').removeSample(sample);\n        },\n\n        saveSample(sample) {\n            sample.save();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/start-url-options.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { task, timeout } from 'ember-concurrency';\n\nconst SPIDER_DEBOUNCE = 1000;\n\nexport default Ember.Component.extend({\n  startUrl: computed('spider.startUrls.[]', 'startUrlId', function() {\n      return this.get('spider').get('startUrls').objectAt(this.get('startUrlId'));\n  }),\n\n  title: computed.alias('startUrl.optionsTitle'),\n\n  saveSpider: task(function * () {\n      yield timeout(SPIDER_DEBOUNCE);\n      this.get('spider').save();\n  }).restartable()\n});\n"
  },
  {
    "path": "portiaui/app/components/tool-group.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    uiState: Ember.inject.service(),\n\n    classNames: ['tool-group'],\n    classNameBindings: ['collapsed'],\n\n    onClose: false,\n    collapsible: true,\n    collapsed: false,\n    selected: null,\n\n    init() {\n        this._super();\n        const id = this.get('elementId');\n        Ember.mixin(this, {\n            selected: Ember.computed.alias('uiState.selectedTools.' + id),\n            collapsed: Ember.computed.alias('uiState.collapsedPanels.' + id)\n        });\n    },\n\n    actions: {\n        close() {\n            if (this.attrs.onClose) {\n                this.attrs.onClose();\n            }\n        },\n        selectTab(toolId) {\n            this.setProperties({\n                selected: toolId,\n                collapsed: false\n            });\n        },\n        toggleCollapsed() {\n            this.toggleProperty('collapsed');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/tool-panel.js",
    "content": "import Ember from 'ember';\nimport {computedPropertiesEqual} from '../utils/computed';\n\nexport default Ember.Component.extend({\n    classNames: ['tool-panel'],\n    classNameBindings: ['active::hide'],\n\n    active: computedPropertiesEqual('toolId', 'group.selected')\n});\n"
  },
  {
    "path": "portiaui/app/components/tool-tab.js",
    "content": "import Ember from 'ember';\nimport {computedPropertiesEqual} from '../utils/computed';\n\nexport default Ember.Component.extend({\n    tagName: 'li',\n    classNameBindings: ['active'],\n\n    active: computedPropertiesEqual('toolId', 'group.selected'),\n\n    didInsertElement() {\n        if (!this.$().prev().length) {\n            Ember.run.schedule('afterRender', () => {\n                if (!this.get('group.selected')) {\n                    this.send('selectTab');\n                }\n            });\n        }\n    },\n\n    actions: {\n        selectTab() {\n            this.get('group').send('selectTab', this.get('toolId'));\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/tooltip-container.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    delay: {\n        show: 500,\n        hide: 0\n    },\n    placement: 'top',\n    text: false,\n    tooltipClasses: null,\n    tooltipContainer: false,\n    tooltipFor: false,\n    triggerEvents: 'hover',\n    viewport: {\n        selector: 'body',\n        padding: 0\n    },\n\n    init() {\n        this._super();\n        this.$tooltipElement = null;\n    },\n\n    didInsertElement() {\n        Ember.run.next(this, this.createTooltip);\n    },\n\n    willDestroyElement() {\n        Ember.run.next(this, this.destroyTooltip);\n    },\n\n    createTooltip() {\n        const selector = this.get('tooltipFor');\n        const $tooltipElement = this.$tooltipElement = Ember.$(`#${selector}`);\n        $tooltipElement.tooltip({\n            /*\n                We pass in an existing element as the template. Bootstrap's\n                tooltip code will happily swallow this and insert it into the\n                DOM. Ember will keep this element updated as data changes.\n             */\n            template: Ember.$(`[data-tooltip-id=\"${this.elementId}\"]`).detach(),\n            // title is checked for truthiness by bootstrap\n            title: true,\n            container: this.get('tooltipContainer'),\n            delay: this.get('delay'),\n            placement: this.get('placement'),\n            trigger: this.get('triggerEvents'),\n            viewport: this.get('viewport')\n        });\n    },\n\n    destroyTooltip() {\n        this.$tooltipElement.tooltip('destroy');\n        this.$tooltipElement = null;\n    },\n\n    toggleChanged: Ember.observer('toggleTooltip', function() {\n        const e = this.$tooltipElement;\n        if (e) {\n            const action = this.get('toggleTooltip') ? 'show' : 'hide';\n            e.tooltip(action);\n        }\n    })\n});\n"
  },
  {
    "path": "portiaui/app/components/tooltip-icon.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    tagName: '',\n\n    actions: {\n        onClick() {\n            const action = this.get('onClick');\n            if (action) {\n                action();\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/tree-list-item-row.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Component.extend({\n    classNames: ['tree-list-item-row'],\n\n    mouseEnter() {\n        if (this.attrs.onMouseEnter && this.attrs.onMouseEnter.call) {\n            this.attrs.onMouseEnter(...arguments);\n        }\n    },\n\n    mouseLeave() {\n        if (this.attrs.onMouseLeave && this.attrs.onMouseLeave.call) {\n            this.attrs.onMouseLeave(...arguments);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/components/tree-list-item.js",
    "content": "import AnimationContainer from './animation-container';\n\nexport default AnimationContainer.extend({\n    tagName: 'li',\n    classNames: ['tree-list-item'],\n\n    setWidth:    false,\n    isCentered:  false,\n    hasChildren: false\n});\n"
  },
  {
    "path": "portiaui/app/components/tree-list.js",
    "content": "import Ember from 'ember';\nimport AnimationContainer from './animation-container';\n\nexport default AnimationContainer.extend({\n    tagName: 'div',\n    classNames: ['tree-list'],\n    reorderable: false,\n    classNameBindings: ['reorderable:reorderable-list'],\n\n    setWidth: false,\n\n    drop: function(event) {\n        if(this.get('reorderable')){\n            event.preventDefault();\n            this.$('.drop-helper').remove();\n            var $moved = this.$('.dragging');\n            var [target, after] = this.getDropTarget(event.originalEvent);\n\n            // All this are no-ops\n            if(after && (target === $moved.prev()[0]) ||\n               !after && (target === $moved.next()[0]) ||\n               target === $moved[0]) {\n                return;\n            }\n            var originalIndex = $moved.prevAll().length;\n            var newIndex = Ember.$(target).prevAll().length + (after?1:0);\n            if(Ember.$(target).prevAll().filter($moved).length) {\n                // If dropping after the original position, remove one to\n                // compensate for the removed element\n                newIndex -= 1;\n            }\n            this.sendAction('reorder', originalIndex, newIndex);\n        }\n    },\n\n    dragLeave: function(event) {\n        if(this.get('reorderable')) {\n            event.preventDefault();\n            this.$('.drop-helper').remove();\n        }\n    },\n\n    getDropTarget: function(event){\n        var container = this.$()[0];\n        if(event.target === container){ return [null, null]; }\n\n        var lastParent = Ember.$(event.target).parentsUntil(this.$()).get(-1);\n        var overTarget = event.target.parentNode === container ? event.target: lastParent;\n\n        var clientRect = overTarget.getBoundingClientRect();\n        var targetY = event.clientY - clientRect.top;\n        var after = targetY > clientRect.height/2;\n        return [overTarget, after];\n    },\n\n    dragOver: function(event) {\n        if(this.get('reorderable')) {\n            this.$('.drop-helper').remove();\n            var [target, after] = this.getDropTarget(event.originalEvent);\n            if(target){\n                event.preventDefault();\n                var helper = Ember.$('<div/>').addClass('drop-helper');\n                helper[after?'insertAfter':'insertBefore'](target);\n            }\n        }\n    },\n\n});\n"
  },
  {
    "path": "portiaui/app/components/url-bar.js",
    "content": "import Ember from 'ember';\n\n\nexport default Ember.Component.extend({\n    browser: Ember.inject.service(),\n\n    tagName: 'form',\n\n    autofocus: false,\n\n    backDisabled: Ember.computed.or('disabled', 'noBackUrl'),\n    disabled: Ember.computed.readOnly('browser.disabled'),\n    forwardDisabled: Ember.computed.or('disabled', 'noForwardUrl'),\n    loading: Ember.computed.readOnly('browser.loading'),\n    mode: Ember.computed.readOnly('browser.mode'),\n    noBackUrl: Ember.computed.equal('browser.backBuffer.length', 0),\n    noForwardUrl: Ember.computed.equal('browser.forwardBuffer.length', 0),\n    url: Ember.computed.reads('browser.url'),\n    updateUrl: Ember.observer('browser.url', function() {\n        this.set('url', this.get('browser.url'));\n    }),\n\n    submit($event) {\n        // ignore form's submit event;\n        $event.stopPropagation();\n        $event.preventDefault();\n    },\n\n    actions: {\n        back() {\n            if (!this.get('disabled')) {\n                this.get('browser').back();\n            }\n        },\n\n        forward() {\n            if (!this.get('disabled')) {\n                this.get('browser').forward();\n            }\n        },\n\n        submit(url) {\n            if (!this.get('disabled')) {\n                this.setProperties({\n                    'browser.url': url,\n                    'browser.baseurl': null\n                });\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/controllers/projects/project/conflicts/conflict.js",
    "content": "import Ember from 'ember';\nimport { isObject, isArray } from '../../../../utils/types';\n\nfunction isConflict(obj) {\n    return isObject(obj) && '__CONFLICT' in obj;\n}\n\n/**\n * Sort keys so that indexes in the same array are in descending order.\n * This is the correct order in that patches can be unambiguously applied\n * sortKeys([['a', '1'], ['a', '10'], ['a', '2']]) => [['a', '10'], ['a', '2'], ['a', '1']]\n */\nfunction sortKeys(keys){\n    return keys.sort(function(a,b){\n        if(a.length === b.length) {\n            for (var i = 0, len = a.length; i < len; i++) {\n                if(a[i] !== b[i]) {\n                    if(/^\\d+$/.test(a[i] + b[i])) {\n                        return parseInt(b[i]) - parseInt(a[i]);\n                    } else {\n                        return a[i] > b[i] ? -1 : 1;\n                    }\n                }\n            }\n        } else {\n            return a.length > b.length ? -1 : 1;\n        }\n    });\n}\n\n/**\n * Apply a set of patches in the format {'object.path': new_value}\n */\nfunction applyPatches(obj, values) {\n    var keys = sortKeys(Object.keys(values).map(key => key.split('.')));\n    for(var key of keys) {\n        patch(obj, key, values[key.join('.')]);\n    }\n    return obj;\n}\n\n/**\n * Set object's specified path to value\n */\nfunction patch(obj, path, value) {\n    if(isArray(obj)) {\n        var idx = parseInt(path[0]) + 1;\n        for (var i = 0, len = obj.length; i < len; i++) {\n            if(isConflict(obj[i])) {\n                idx--;\n                if(idx === 0) {\n                    obj.splice(i, 1, ...value);\n                    return;\n                }\n            }\n        }\n    } else if (isObject(obj)) {\n        if(path.length === 1) {\n            obj[path] = value;\n        } else {\n            patch(obj[path[0]], path.slice(1), value);\n        }\n        return;\n    }\n    throw new Error(\"Could not patch object\");\n}\n\nexport default Ember.Controller.extend({\n    projectController: Ember.inject.controller('projects.project'),\n\n    init: function(){\n        this.set('pendingPaths', []);\n        this.set('resolvedValues', {}); // This is saved in flat format {'a.b.c.0': value}\n        this._super();\n    },\n\n    getResolvedTree: function(){\n        var content = this.get('model.contents');\n        // JSON parse + stringify to deep copy because neither\n        // Ember.copy or $.extend({}, true) worked\n        content = JSON.parse(JSON.stringify(content));\n        applyPatches(content, this.get('resolvedValues'));\n        return content;\n    },\n\n    haveConflicts: Ember.computed('pendingPaths.[]', function(){\n        return this.get('pendingPaths').length > 0;\n    }),\n\n    actions: {\n        updateConflict: function(path, resolved, value) {\n            if(resolved) {\n                this.get('pendingPaths').removeObject(path);\n                this.get('resolvedValues')[path] = value;\n            } else if (!this.get('pendingPaths').contains(path)) {\n                this.get('pendingPaths').pushObject(path);\n            }\n        },\n\n        saveFile: function(){\n            var project = this.get('projectController.model.id');\n            var fileName = this.get('model.file');\n            var content = this.getResolvedTree();\n            var url = '/projects/' + project + '/spec/' + fileName.replace(/\\.json$/, '');\n            $.post(url, JSON.stringify(content)).then(() => {\n                this.transitionTo('projects.project.conflicts');\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/conflicts.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    projectController: Ember.inject.controller('projects.project'),\n    currentFileName: null,\n\n    conflictedKeyPaths: {},\n\n    conflictedFiles: Ember.computed('model', function() {\n        return Object.keys(this.get('model')).sort().map((name) => ({\n            name: name,\n            encodedName: btoa(name),\n        }));\n    }),\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/schema/field/options.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    actions: {\n        closeOptions() {\n            this.send('close');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/spider/link-options.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    actions: {\n        closeOptions() {\n            this.send('close');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/spider/options.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    actions: {\n        closeOptions() {\n            this.send('close');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/spider/sample/data/annotation/options.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    actions: {\n        closeOptions() {\n            this.send('close');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/spider/sample/data.js",
    "content": "import Ember from 'ember';\nimport { task, timeout } from 'ember-concurrency';\nimport {getColors} from '../../../../../utils/colors';\nimport {BaseSelectorGenerator, elementPath} from '../../../../../utils/selectors';\n\nexport default Ember.Controller.extend({\n    browser: Ember.inject.service(),\n    dispatcher: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n\n    selectionModeIcons: {\n        select: 'tool-select',\n        add: 'tool-add',\n        remove: 'tool-remove',\n        edit: 'tool-multiple'\n    },\n    selectionModeText: {\n        select: 'Select an existing annotation',\n        add: 'Add a new annotation',\n        remove: 'Remove an annotation',\n        edit: 'Add/remove extra elements from an existing annotation'\n    },\n    selectionModeIds: {\n        select: 'tool-select-button',\n        add: 'tool-add-button',\n        remove: 'tool-remove-button',\n        edit: 'tool-multiple-button'\n    },\n\n    cssEnabled: Ember.computed.readOnly('browser.cssEnabled'),\n    magicToolActive: Ember.computed.alias('uiState.selectedTools.magicToolActive'),\n    hoveredElement: Ember.computed.readOnly('uiState.viewPort.hoveredElement'),\n    originalSelectedElement: Ember.computed.alias('uiState.viewPort.originalSelectedElement'),\n    sample: Ember.computed.readOnly('model'),\n    selectedModel: Ember.computed.alias('uiState.viewPort.selectedModel'),\n    selectionMode: Ember.computed.alias('uiState.selectedTools.selectionMode'),\n\n    hoveredModels: Ember.computed(\n        'uiState.viewPort.hoveredModels', 'hoveredElement', 'sample.dataStructure.annotations', {\n            get(key) {\n                const hoveredModels = this.get('uiState.viewPort.hoveredModels');\n                if (hoveredModels !== this._hoveredModels) {\n                    return this.set(key, hoveredModels);\n                }\n                const hoveredElement = this.get('hoveredElement');\n                let models;\n                if (hoveredElement) {\n                    const annotations = this.get('sample.dataStructure.annotations');\n                    models = annotations && annotations.get(Ember.guidFor(hoveredElement));\n                }\n                models = (models || []).filterBy('constructor.modelName', 'annotation');\n                return this.set(key, models);\n            },\n\n            set(key, value) {\n                this._hoveredModels = value;\n                return this.set('uiState.viewPort.hoveredModels', value);\n            }\n        }),\n\n    selectedModelElements: Ember.computed('selectedModel.elements', function() {\n        return this.get('selectedModel.elements') || [];\n    }),\n\n    selectedElement: Ember.computed(\n        'uiState.viewPort.selectedElement', 'selectedModelElements.[]', {\n            get() {\n                const selectedElement = this.get('uiState.viewPort.selectedElement');\n                const selectedModelElements = this.get('selectedModelElements');\n                if (selectedElement && selectedModelElements.includes(selectedElement)) {\n                    return selectedElement;\n                }\n                return this.set('selectedElement', selectedModelElements[0]);\n            },\n\n            set(key, value) {\n                return this.set('uiState.viewPort.selectedElement', value);\n            }\n        }),\n\n    activeSelectionMode: Ember.computed(\n        'selectionMode', 'magicToolActive',\n        'hoveredElement', 'hoveredModels.[]', 'selectedElement', 'selectedModel',\n        'selectedModelElements.length',\n        'generalizableModel', function() {\n            const selectedMode = this.get('selectionMode');\n            const magicToolActive = this.get('magicToolActive');\n\n            if (selectedMode) {\n                return selectedMode;\n            } else if (magicToolActive) {\n                const hoveredElement = this.get('hoveredElement');\n                const hoveredModels = this.getWithDefault('hoveredModels', []);\n                const selectedModel = this.get('selectedModel');\n                if (hoveredModels.length) {\n                    if (hoveredModels.includes(selectedModel)) {\n                        if (this.get('selectedModelElements.length') === 1) {\n                            return 'remove';\n                        }\n                        return 'edit';\n                    } else {\n                        return 'select';\n                    }\n                } else if (hoveredElement) {\n                    if (this.get('generalizableModel') ||\n                        (selectedModel && this.get('selectedModelElements.length') === 0)) {\n                        return 'edit';\n                    }\n                    return 'add';\n                }\n                return 'select';\n            }\n        }),\n    annotationColors: Ember.computed(\n        'sample.orderedAnnotations.length', 'activeSelectionMode', 'hoveredElement', function() {\n            const annotations = this.getWithDefault('sample.orderedAnnotations.length', 0);\n            if (this.get('activeSelectionMode') === 'add' && this.get('hoveredElement')) {\n                return getColors(annotations + 1);\n            }\n            if (annotations) {\n                return getColors(annotations);\n            }\n            return [];\n        }),\n    generalizableModel: Ember.computed(\n        'selectionMode', 'selectedModel', 'hoveredElement',\n        'sample.orderedChildren.@each.elements', function() {\n            const isEditMode = this.get('selectionMode') === 'edit';\n            const selectedModel = this.get('selectedModel');\n            const hoveredElement = this.get('hoveredElement');\n            if (!hoveredElement) {\n                return;\n            }\n\n            // if user has manually chosen the edit tool, and selected an annotation, use that ...\n            if (selectedModel && isEditMode) {\n                return selectedModel;\n            }\n\n            // ... otherwise find best match\n            const annotations = this.get('sample.orderedAnnotations');\n            if (annotations.length) {\n                const annotationsToMatch = annotations.slice();\n                // if an annotation is selected prefer it\n                // add it to the start of the list, sorting preserves order\n                if (selectedModel) {\n                    annotationsToMatch.removeObject(selectedModel);\n                    annotationsToMatch.unshift(selectedModel);\n                }\n                const hoveredElementPath = elementPath(hoveredElement);\n                const possibilities = annotationsToMatch.map(annotation => {\n                    const selectorGenerator = BaseSelectorGenerator.create({\n                        elements: annotation.get('elements')\n                    });\n                    let distance = selectorGenerator.generalizationDistance(hoveredElement);\n                    if (distance < Infinity && !isEditMode) {\n                        // reject annotations with elements that share a container with the\n                        // hovered element\n                        const annotationPaths = annotation.get('elements').map(elementPath);\n                        const containerElements = annotation.get('parent.elements');\n                        container: for (let containerElement of containerElements) {\n                            const containerPath = elementPath(containerElement);\n                            const depth = containerPath.length - 1;\n                            for (let annotationPath of annotationPaths) {\n                                if (containerElement === annotationPath[depth] &&\n                                        containerElement === hoveredElementPath[depth]) {\n                                    distance = Infinity;\n                                    break container;\n                                }\n                            }\n                        }\n                    }\n                    return {\n                        annotation,\n                        distance\n                    };\n                }).sortBy('distance');\n                const {annotation, distance} = possibilities[0];\n\n                // if user has manually chosen the edit tool return the best match, otherwise use\n                // a distance cutoff\n                if (isEditMode || distance < (selectedModel ? 4 : 2)) {\n                    return annotation;\n                }\n            }\n        }),\n    hoverOverlayColor: Ember.computed(\n        'showHoverOverlay', 'annotationColors.length', 'hoveredModels.firstObject.orderedIndex',\n        'generalizableModel.orderedIndex', 'selectedModel.orderedIndex', 'activeSelectionMode',\n        function() {\n            if (this.get('showHoverOverlay')) {\n                const colors = this.getWithDefault('annotationColors', []);\n                const activeSelectionMode = this.get('activeSelectionMode');\n                if (activeSelectionMode === 'add') {\n                    return colors.get('lastObject');\n                } else if (activeSelectionMode === 'select' || activeSelectionMode === 'remove') {\n                    return colors[this.get('hoveredModels.firstObject.orderedIndex')];\n                } else if (activeSelectionMode === 'edit') {\n                    return colors[this.get('generalizableModel.orderedIndex')] ||\n                        colors[this.get('selectedModel.orderedIndex')];\n                }\n            }\n        }),\n    showHoverOverlay: Ember.computed(\n        'hoveredElement', 'hoveredModels.[]', 'generalizableModel', 'selectedModel',\n        'activeSelectionMode', function() {\n            const activeSelectionMode = this.get('activeSelectionMode');\n            const hoveredElement = this.get('hoveredElement');\n            const hoveredModels = this.get('hoveredModels');\n\n            if (hoveredElement) {\n                if (activeSelectionMode === 'add') {\n                    return true;\n                } else if ((activeSelectionMode === 'select' || activeSelectionMode === 'remove') &&\n                        hoveredModels.length) {\n                    return true;\n                } else if (activeSelectionMode === 'edit' &&\n                        (this.get('generalizableModel') || this.get('selectedModel'))) {\n                    return true;\n                }\n            }\n            return false;\n        }),\n\n    _selectElement: task(function * () {\n        yield timeout(1000);\n\n        const dispatcher = this.get('dispatcher');\n        const magicToolActive = this.get('magicToolActive');\n        const selectionMode = this.get('activeSelectionMode');\n        const hoveredElement = this.get('hoveredElement');\n        const hoveredModels = this.get('hoveredModels');\n        const selectedModel = this.get('selectedModel');\n\n        switch (selectionMode) {\n            case 'select':\n                if (hoveredModels.length) {\n                    const model = hoveredModels[0];\n                    dispatcher.selectAnnotationElement(\n                        model, hoveredElement, /* redirect = */true);\n                } else {\n                    dispatcher.clearSelection();\n                }\n                break;\n\n            case 'add':\n                if (hoveredElement) {\n                    dispatcher.addAnnotation(\n                        /* auto item */null, hoveredElement, undefined, /* redirect = */true);\n                } else {\n                    dispatcher.clearSelection();\n                }\n                break;\n\n            case 'remove':\n                const annotation = this.get('uiState.models.annotation');\n                const field = annotation.get('field.content');\n                annotation.set('field', field);\n                annotation.save().then(() => {\n                    if (selectedModel) {\n                        dispatcher.removeAnnotation(selectedModel);\n                    } else if (hoveredModels.length) {\n                        dispatcher.removeAnnotation(hoveredModels[0]);\n                    } else {\n                        dispatcher.clearSelection();\n                    }\n                });\n                break;\n\n            case 'edit':\n                const matchingModel = this.get('generalizableModel') || selectedModel;\n                if (!hoveredElement) {\n                    dispatcher.clearSelection();\n                } else if (matchingModel && !hoveredModels.includes(matchingModel)) {\n                    dispatcher.addElementToAnnotation(matchingModel, hoveredElement);\n                } else if (hoveredModels.length) {\n                    let model;\n                    if (selectedModel) {\n                        model = selectedModel;\n                    } else {\n                        model = hoveredModels.find(model =>\n                                (model.get('elements') || []).length > 1) ||\n                            hoveredModels[0];\n                    }\n                    dispatcher.removeElementFromAnnotation(model, hoveredElement);\n                }\n                break;\n        }\n\n        if (magicToolActive) {\n            this.set('selectionMode', null);\n        }\n    }).drop(),\n\n    actions: {\n        toggleCSS() {\n            const browser = this.get('browser');\n            if (this.get('cssEnabled')) {\n                browser.disableCSS();\n            } else {\n                browser.enableCSS();\n            }\n        },\n\n        toggleMagicTool() {\n            const magicToolActive = this.get('magicToolActive');\n            const selectionMode = this.get('selectionMode');\n            if (magicToolActive) {\n                this.set('magicToolActive', false);\n                if (!selectionMode) {\n                    this.set('selectionMode', 'add');\n                }\n            } else {\n                this.setProperties({\n                    magicToolActive: true,\n                    selectionMode: null\n                });\n            }\n        },\n\n        selectElement() {\n            this.get('_selectElement').perform();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project/spider.js",
    "content": "import Ember from 'ember';\nimport { NAMED_COLORS } from '../../../utils/colors';\n\nfunction filterLinkElements(filterFn) {\n    return Ember.computed('allLinkElements', 'extractedItems.links', function() {\n        const linkElements = this.get('allLinkElements');\n        const followed = this.getWithDefault('extractedItems.links', {});\n        const filteredElements = [];\n        for (let element of linkElements) {\n            const url = URI(element.href).fragment('').toString();\n            if (filterFn(url, followed)) {\n                filteredElements.push(element);\n            }\n        }\n        return filteredElements;\n    });\n}\n\nfunction mapOverlayElements(elementsProperty, color) {\n    return Ember.computed.map(elementsProperty, element => ({\n        guid: Ember.guidFor(element),\n        element,\n        color\n    }));\n}\n\nexport default Ember.Controller.extend({\n    extractedItems: Ember.inject.service(),\n    selectorMatcher: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n\n    // only a tags with a non-empty href attribute\n    linkSelector: 'a[href]:not([href=\"\"]):not([href^=\"javascript:\"])',\n    allLinkElements: [],\n\n    showExtractedItems: Ember.computed.bool('extractedItems.items.length'),\n\n    followedLinkElements: filterLinkElements(function(url, followed) {\n        return followed[url] === 'raw';\n    }),\n    jsLinkElements: filterLinkElements(function(url, followed) {\n        return followed[url] === 'js';\n    }),\n    ignoredLinkElements: filterLinkElements(function(url, followed) {\n        return !followed[url];\n    }),\n    followedLinkOverlayElements: mapOverlayElements('followedLinkElements', NAMED_COLORS.green),\n    jsLinkOverlayElements: mapOverlayElements('jsLinkElements', NAMED_COLORS.blue),\n    ignoredLinkOverlayElements: mapOverlayElements('ignoredLinkElements', NAMED_COLORS.red),\n    linkOverlayElements: Ember.computed(\n        'followedLinkOverlayElements', 'jsLinkOverlayElements', 'ignoredLinkOverlayElements',\n        function() {\n            const followed = this.get('followedLinkOverlayElements');\n            const js = this.get('jsLinkOverlayElements');\n            const ignored = this.get('ignoredLinkOverlayElements');\n            return [].concat(followed).concat(js).concat(ignored);\n        }),\n\n    init() {\n        let ws = this.get('webSocket');\n        ws.addCommand('metadata', this, this.msgMetadata);\n        ws.addCommand('update_spider', this, this.msgMetadata);\n    },\n\n    activate() {\n        this.get('selectorMatcher').register(this.linkSelector, this, this.updateLinkElements);\n    },\n\n    deactivate() {\n        this.get('selectorMatcher').unRegister(this.linkSelector, this, this.updateLinkElements);\n    },\n\n    updateLinkElements(elements) {\n        this.set('allLinkElements', elements);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/controllers/projects/project.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Controller.extend({\n    browser: Ember.inject.service(),\n\n    queryParams: ['url', 'baseurl'],\n\n    url: Ember.computed.alias('browser.url'),\n    baseurl: Ember.computed.alias('browser.baseurl'),\n    clickHandler: null,\n\n    setClickHandler(fn) {\n        this.clickHandler = fn;\n    },\n\n    clearClickHandler() {\n        this.clickHandler = null;\n    },\n\n    actions: {\n        viewPortClick() {\n            if (this.clickHandler) {\n                this.clickHandler(...arguments);\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/helpers/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/helpers/array-get.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Helper.extend({\n    compute(params/*, hash*/) {\n        this.setProperties({\n            obj: params[0],\n            index: params[1]\n        });\n\n        return this.get('content');\n    },\n\n    obj: null,\n    index: null,\n    content: Ember.computed('obj.[]', 'index', function() {\n        return this.get('obj').get(this.get('index'));\n    }),\n\n    contentDidChange: Ember.observer('content', function () {\n        this.recompute();\n    })\n});\n"
  },
  {
    "path": "portiaui/app/helpers/attribute-annotation.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Helper.extend({\n    compute([annotations, attribute]) {\n        this.setProperties({\n            annotations,\n            attribute\n        });\n\n        return this.get('content');\n    },\n\n    annotations: null,\n    attribute: null,\n    content: Ember.computed('annotations.[]', 'attribute', function() {\n        const attribute = this.get('attribute');\n        return this.getWithDefault('annotations', []).find(annotation =>\n            annotation.getWithDefault('attribute', null) === attribute) || {};\n    }),\n\n    contentDidChange: Ember.observer('content', function () {\n        this.recompute();\n    })\n});\n"
  },
  {
    "path": "portiaui/app/helpers/chain-actions.js",
    "content": "import Ember from 'ember';\n\nexport function chainActions(params/*, hash*/) {\n    return function() {\n        for (let action of params) {\n            if (action.call) {\n                action();\n            }\n        }\n    };\n}\n\nexport default Ember.Helper.helper(chainActions);\n"
  },
  {
    "path": "portiaui/app/helpers/guid.js",
    "content": "import Ember from 'ember';\n\nexport function guid([obj]/*, hash*/) {\n    return Ember.guidFor(obj);\n}\n\nexport default Ember.Helper.helper(guid);\n"
  },
  {
    "path": "portiaui/app/helpers/includes.js",
    "content": "import Ember from 'ember';\n\nexport function includes([list, value]) {\n    return list && list.includes && list.includes(value);\n}\n\nexport default Ember.Helper.helper(includes);\n"
  },
  {
    "path": "portiaui/app/helpers/indexed-object.js",
    "content": "import Ember from 'ember';\n\nexport function indexedObject([ param ] /*, hash*/) {\n    let indexed = {}, i = 0;\n    for (let key of Object.keys(param)) {\n        indexed[key] = {\n            index: i,\n            value: param[key]\n        };\n        i += 1;\n    }\n    return indexed;\n}\n\nexport default Ember.Helper.helper(indexedObject);\n"
  },
  {
    "path": "portiaui/app/helpers/is-empty-object.js",
    "content": "import Ember from 'ember';\nimport {isObject} from './is-object';\n\nexport function isEmptyObject(params) {\n    return isObject(params) && !Object.keys(...params).length;\n}\n\nexport default Ember.Helper.helper(isEmptyObject);\n"
  },
  {
    "path": "portiaui/app/helpers/is-object-or-array.js",
    "content": "import Ember from 'ember';\nimport { isArrayHelper } from 'ember-truth-helpers/helpers/is-array';\nimport { isObject } from './is-object';\n\nexport function isObjectOrArray(params) {\n    return isObject(params) || isArrayHelper(params);\n}\n\nexport default Ember.Helper.helper(isObjectOrArray);\n"
  },
  {
    "path": "portiaui/app/helpers/is-object.js",
    "content": "import Ember from 'ember';\nimport { toType } from '../utils/types';\n\nexport function isObject([object]) {\n    return toType(object) === 'object';\n}\n\nexport default Ember.Helper.helper(isObject);\n"
  },
  {
    "path": "portiaui/app/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>Portia</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    {{content-for \"head\"}}\n\n    <link rel=\"stylesheet\" href=\"assets/vendor.css\">\n    <link rel=\"stylesheet\" href=\"assets/portia-ui.css\">\n\n    {{content-for \"head-footer\"}}\n  </head>\n  <body>\n    {{content-for \"body\"}}\n\n    <script integrity=\"\" src=\"assets/vendor.js\"></script>\n    <script src=\"assets/portia-ui.js\"></script>\n\n    {{content-for \"body-footer\"}}\n  </body>\n</html>\n"
  },
  {
    "path": "portiaui/app/initializers/ui-state.js",
    "content": "export function initialize(application) {\n    application.inject('service:ui-state', 'router', 'router:main');\n    application.inject('service:ui-state',\n        'projectRoute', 'route:projects/project');\n    application.inject('service:ui-state',\n        'spiderRoute', 'route:projects/project/spider');\n    application.inject('service:ui-state',\n        'sampleRoute', 'route:projects/project/spider/sample');\n    application.inject('service:ui-state',\n        'dataRoute', 'route:projects/project/spider/sample/data');\n    application.inject('service:ui-state',\n        'itemRoute', 'route:projects/project/spider/sample/data/item');\n    application.inject('service:ui-state',\n        'annotationRoute', 'route:projects/project/spider/sample/data/annotation');\n    application.inject('service:ui-state',\n        'schemaRoute', 'route:projects/project/schema');\n    application.inject('service:ui-state',\n        'fieldRoute', 'route:projects/project/schema/field');\n}\n\nexport default {\n    name: 'ui-state',\n    initialize: initialize\n};\n"
  },
  {
    "path": "portiaui/app/instance-initializers/error-handler.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\n\nfunction logErrorStack(e, level) {\n    let text = e.toString();\n    let stack = e.stack;\n    if (stack) {\n        if (!stack.startsWith(text)) {\n            stack = `${text}\\n${stack}`;\n        }\n        text = stack;\n    }\n    if (!level){\n        Ember.Logger.warn(text);\n    } else {\n        level(text);\n    }\n}\n\nexport function initialize(applicationInstance) {\n    const notificationManager = applicationInstance.lookup('service:notification-manager');\n    var loggedErrors = new Set();\n\n    function notifyError(err) {\n        let logged = false;\n        if (window.NREUM) {\n            window.NREUM.noticeError(err);\n            logged = true;\n        }\n        if (window.Raven) {\n            window.Raven.captureException(err);\n            logged = true;\n        }\n\n        const instructions = logged ?\n            \"Our developers have already been notified.\" :\n            \"Please notify the developers. Details have been logged to the console.\";\n        let isDeleted = err => (\n            err.message &&\n            (/event `(didSetProperty|deleteRecord)`.*in state root\\./.test(err.message) ||\n             /calling set on destroyed object/.test(err.message))\n        );\n\n        if (err instanceof DS.AdapterError) {\n            for (let error of err.errors) {\n                if (error.id && loggedErrors.has(error.id)) {\n                    continue;\n                }\n                Ember.Logger.warn(`AdapterError: ${error.title}\\n${error.detail}`);\n                notificationManager.add({\n                    title: error.title || 'Server error',\n                    message: 'An error occurred while communicating with the server. ' +\n                        error.status >= 500 ? instructions : error.detail,\n                    type: +error.status >= 500 ? 'danger' : 'warning'\n                });\n                if (error.id) {\n                    loggedErrors.add(error.id);\n                }\n            }\n        } else if (isDeleted(err)) {\n            // Skip errors when operating on deleted\n            Ember.Logger.debug(`Model Error: ${err.message}`);\n            logErrorStack(err, Ember.Logger.debug);\n        } else if (err.fileName === 'websocket-browser-load') {\n            logErrorStack(err, Ember.Logger.debug);\n        } else {\n            logErrorStack(err);\n            notificationManager.add({\n                title: err.title || 'Unexpected error',\n                message: 'An unexpected error has occurred. ' + instructions,\n                type: 'danger'\n            });\n        }\n    }\n\n    Ember.onerror = notifyError;\n}\n\nexport default {\n    name: 'error-handler',\n    initialize: initialize\n};\n"
  },
  {
    "path": "portiaui/app/mixins/options-route.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Mixin.create({\n    uiState: Ember.inject.service(),\n\n    activate() {\n        this.set('uiState.slideMain', true);\n    },\n\n    deactivate() {\n        this.set('uiState.slideMain', false);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/mixins/save-spider-mixin.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Mixin.create({\n    webSocket: Ember.inject.service(),\n\n    saveSpider() {\n        let savePromise = this.get('spider').save();\n        savePromise.then(() =>\n            this.get('webSocket').send({\n                'spider': this.get('spider.id'),\n                'project': this.get('spider.project.id'),\n                '_command': 'update_spider'\n            })\n        );\n        return savePromise;\n    }\n});\n"
  },
  {
    "path": "portiaui/app/models/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/models/annotation.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport BaseAnnotation from './base-annotation';\nimport {\n    elementPath,\n    smartSelector\n} from '../utils/selectors';\n\nexport default BaseAnnotation.extend({\n    attribute: DS.attr('string', {\n        defaultValue: 'content'\n    }),\n    text_content: DS.attr('string', {\n        defaultValue: 'content'\n    }),\n    required: DS.attr('boolean', {\n        defaultValue: false\n    }),\n    repeated: DS.attr('boolean', {\n        defaultValue: false\n    }),\n    selectionMode: DS.attr('string', {\n        defaultValue: 'auto'\n    }),\n    selector: DS.attr('string'),\n    xpath: DS.attr('string'),\n    acceptSelectors: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    rejectSelectors: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    preText: DS.attr('string'),\n    postText: DS.attr('string'),\n\n    field: DS.belongsTo(),\n    extractors: DS.hasMany(),\n\n    name: Ember.computed.readOnly('field.name'),\n    type: Ember.computed.readOnly('field.type'),\n    ownerSample: Ember.computed.readOnly('parent.ownerSample'),\n\n    orderedIndex: Ember.computed('ownerSample.orderedAnnotations', function() {\n        return (this.get('ownerSample.orderedAnnotations') || []).indexOf(this);\n    }),\n\n    addElement(element) {\n        this.moveElement(element, 'acceptSelectors', 'rejectSelectors');\n    },\n\n    removeElement(element) {\n        this.moveElement(element, 'rejectSelectors', 'acceptSelectors');\n    },\n\n    moveElement(element, toProperty, fromProperty) {\n        const toSelectors = this.get(toProperty);\n        const fromSelectors = this.get(fromProperty);\n\n        const path = elementPath(element);\n        const root = path[0];\n        const selector = smartSelector(element);\n\n        const addSelectors = [];\n        const removeSelectors = [];\n\n        // a selector may match more than one element, we only want to remove the single element\n        for (let fromSelector of fromSelectors) {\n            const elements = Array.from(root.querySelectorAll(fromSelector));\n            if (elements.includes(element)) {\n                removeSelectors.addObject(fromSelector);\n                elements.removeObject(element);\n                for (let addElement of elements) {\n                    addSelectors.addObject(smartSelector(addElement));\n                }\n            }\n        }\n\n        fromSelectors.removeObjects(removeSelectors);\n        fromSelectors.addObjects(addSelectors);\n        toSelectors.addObject(selector);\n    },\n\n    setSelector(selector) {\n        this.setProperties({\n            acceptSelectors: selector ? [selector] : [],\n            rejectSelectors: []\n        });\n    }\n});\n"
  },
  {
    "path": "portiaui/app/models/base-annotation.js",
    "content": "import { belongsTo } from 'ember-data/relationships';\nimport BaseModel from './base';\n\nexport default BaseModel.extend({\n    parent: belongsTo('item', {\n        inverse: 'annotations'\n    })\n});\n"
  },
  {
    "path": "portiaui/app/models/base.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport EmptyObject from \"ember-data/-private/system/empty-object\";\nconst { get } = Ember;\n\nlet currentActionModel = null;\nconst modelActionQueue = [];\n\nfunction runActions() {\n    if (currentActionModel && currentActionModel.get('isSaving')) {\n        // current action has not finished\n        return;\n    }\n    currentActionModel = null;\n    while (modelActionQueue.length) {\n        const nextModel = modelActionQueue.shift();\n        if (nextModel.get('isSaving')) {\n            // model has started saving again, wait for the next didCommit event\n            return;\n        }\n        if (nextModel.get('isDeleted') && !nextModel.get('hasDirtyAttributes')) {\n            // model has been deleted\n            continue;\n        }\n        if (nextModel.get('pendingDelete')) {\n            nextModel.deleteRecord();\n            nextModel.set('pendingDelete', false);\n        }\n        const pendingSave = nextModel.get('pendingSave');\n        if (pendingSave) {\n            nextModel.set('pendingSave', null);\n            const {resolver, options} = pendingSave;\n            // apply the save and resolve the promise, then wait for the next didCommit event\n            nextModel.save(options).then(resolver.resolve, resolver.reject);\n            return;\n        }\n    }\n}\n\nfunction mergeSaveOptions(dst, src) {\n    if (!dst) { return src; }\n    src = src || {};\n\n    if (src.coalesce) {\n        if (dst.coalesce) {\n            for (let coalesce of src.coalesce) {\n                const {model, options} = coalesce;\n                const matchingCoalesce = dst.coalesce.findBy('model', model);\n                if (matchingCoalesce) {\n                    matchingCoalesce.options = mergeSaveOptions(matchingCoalesce.options, options);\n                } else {\n                    dst.coalesce.push(coalesce);\n                }\n            }\n        } else {\n            dst.coalesce = src.coalesce;\n        }\n    }\n\n    if (src.partial) {\n        if (dst.partial) {\n            for (let field of src.partial) {\n                if (!dst.partial.includes(field)) {\n                    dst.partial.push(field);\n                }\n            }\n        }\n        // else dst is a full save, keep it that way\n    } else if (dst.partial) {\n        delete dst.partial;\n    }\n\n    return dst;\n}\n\nexport default DS.Model.extend({\n    pendingDelete: false,\n    pendingSave: null,\n\n    isDeleted: Ember.computed('currentState', 'pendingDelete', function() {\n        return get(this._internalModel.currentState, 'isDeleted') || this.get('pendingDelete');\n    }).readOnly(),\n\n    save(options) {\n        const isSaving = currentActionModel && currentActionModel.get('isSaving');\n        const isExtra = options && options.adapterOptions &&\n                        options.adapterOptions.coalesce &&\n                        options.adapterOptions.coalesce.type === 'extra';\n        if (isSaving && !isExtra) {\n            // allow coalesced requests through since we're inside the main save call\n            let pendingSave = this.get('pendingSave');\n            if (pendingSave) {\n                pendingSave.options = mergeSaveOptions(pendingSave.options, options);\n            } else {\n                pendingSave = {\n                    resolver: Ember.RSVP.defer(),\n                    options: options\n                };\n                this.set('pendingSave', pendingSave);\n                modelActionQueue.push(this);\n            }\n            return pendingSave.resolver.promise;\n        }\n\n        currentActionModel = this;\n\n        /*\n            bulk saving helper using the coalesce option. this will generate the\n            correct adapterOptions for the adapter to coalesce the requests:\n\n                model.save({\n                    coalesce: [{\n                        model: otherModel1,\n                        options: {\n                            partial: ['name']\n                        }\n                    }, {\n                        model: otherModel2\n                    }]\n                });\n        */\n\n        const coalescePromises = [];\n        if (options && options.coalesce) {\n            // a shared list for the adapter to track coalesced updates.\n            const sharedUpdates = [];\n\n            if (!options.adapterOptions) {\n                options.adapterOptions = {};\n            }\n            options.adapterOptions.coalesce = {\n                type: 'main',\n                updates: sharedUpdates\n            };\n\n            for (let {model, options: modelOptions} of options.coalesce) {\n                const record = model._internalModel;\n\n                if (get(record, 'currentState.stateName') === 'root.deleted.saved' ||\n                        record.isDeleted()) {\n                    throw new Ember.Error(\n                        \"You can not pass deleted models in the coalesce options to the \" +\n                        \"save method.\");\n                } else if (record.isNew()) {\n                    throw new Ember.Error(\n                        \"You can not pass unsaved models in the coalesce options to the \" +\n                        \"save method.\");\n                }\n\n                // create a new request for each updated model. the adapter will\n                // coalesce requests with the same value of coalesce.updates.\n                // the request with a coalesce.type of 'main' MUST come after\n                // those type 'extra'.\n                const modelPromise = model.save(Ember.assign({}, modelOptions, {\n                    // settings adapterOptions directly so we don't trigger\n                    // this code path again.\n                    adapterOptions: {\n                        coalesce: {\n                            type: 'extra',\n                            updates: sharedUpdates\n                        }\n                    }\n                }));\n                coalescePromises.push(modelPromise);\n            }\n        }\n\n        /*\n            partial updates using the partial option. this will pass the partial\n            option to the serializer through adapterOptions, so only the\n            selected fields will be serialized and sent in the request. we also\n            need to track the internalModel._inFlightAttributes correctly.\n\n                model.save({\n                    partial: ['name', 'age']\n                });\n        */\n\n        const internalModel = this._internalModel;\n        let originalAttributes = internalModel._attributes;\n        if (options && options.partial) {\n            if (!options.adapterOptions) {\n                options.adapterOptions = {};\n            }\n            options.adapterOptions.partial = options.partial;\n\n            // prepare _attributes for flushChangedAttributes call in\n            // store.scheduleSave, so that only the attributes selected for\n            // partial save are marked as inFlight.\n            internalModel._attributes = new EmptyObject();\n            for (let key of options.partial) {\n                if (key in originalAttributes) {\n                    internalModel._attributes[key] = originalAttributes[key];\n                    delete originalAttributes[key];\n                }\n            }\n        }\n\n        const mainPromise = this._super(options);\n\n        if (options && options.partial) {\n            internalModel._attributes = originalAttributes;\n        }\n\n        coalescePromises.unshift(mainPromise);\n        // resolve the .save() promise when all coalesced have been resolved\n        return Ember.RSVP.allSettled(coalescePromises).then(() => mainPromise);\n    },\n\n    deleteRecord() {\n        if (this.get('isSaving')) {\n            this.set('pendingDelete', true);\n        }\n        return this._super(...arguments);\n    },\n\n    reload() {\n        if (this.get('isSaving')) {\n            // record is inFlight, so wait for the request to finish and return\n            // this instance\n            return DS.PromiseObject.create({\n                promise: Ember.RSVP.Promise((resolve, reject) => {\n                    this.one('didCommit', () => {\n                        resolve(this);\n                        resolve = reject = Ember.K;\n                    });\n                    this.one('becameInvalid', () => {\n                        resolve(this);\n                        resolve = reject = Ember.K;\n                    });\n                    this.one('becameError', Ember.run.next, () => {\n                        reject(this.get('adapterError'));\n                        resolve = reject = Ember.K;\n                    });\n                })\n            });\n        }\n        return this._super(...arguments);\n    },\n\n    set(key) {\n        this._clearPendingDelete(key);\n        this._super(...arguments);\n    },\n\n    setProperties(hash) {\n        this._clearPendingDelete(...Object.keys(hash));\n        this._super(...arguments);\n    },\n\n    runActions: Ember.on('didCommit', function() {\n        // run in the next run loop so that any other events that may modify\n        // the state of the instance have a chance to run first.\n        if (currentActionModel === this) {\n            currentActionModel = null;\n            Ember.run.next(Ember.run.once, runActions);\n        }\n    }),\n\n    clearPendingAndRunActions: Ember.on('becameError', 'becameInvalid', function() {\n        this.setProperties({\n            pendingDelete: false,\n            pendingSave: null,\n        });\n        this.runActions();\n    }),\n\n    _clearPendingDelete(...keys) {\n        if (this.get('pendingDelete')) {\n            for (let key of keys) {\n                if (!['pendingDelete', 'pendingSave'].includes(key)) {\n                    // just to be safe cancel the delete so we don't lose data\n                    this.set('pendingDelete', false);\n                    break;\n                }\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/models/extractor.js",
    "content": "import DS from 'ember-data';\nimport BaseModel from './base';\n\nexport default BaseModel.extend({\n    type: DS.attr('string'),\n    value: DS.attr('string'),\n    project: DS.belongsTo(),\n    annotations: DS.hasMany()\n});\n"
  },
  {
    "path": "portiaui/app/models/field.js",
    "content": "import DS from 'ember-data';\nimport BaseModel from './base';\n\nexport const FIELD_TYPES = [\n    'date', 'geopoint', 'image', 'number', 'price', 'raw html', 'safe html', 'text', 'url'];\n\nexport default BaseModel.extend({\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    required: DS.attr('boolean'),\n    vary: DS.attr('boolean'),\n    schema: DS.belongsTo({\n        async: true\n    }),\n    annotations: DS.hasMany({\n        async: true\n    })\n});\n"
  },
  {
    "path": "portiaui/app/models/item.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport BaseAnnotation from './base-annotation';\n\nexport default BaseAnnotation.extend({\n    name: DS.attr('string'),\n    selector: DS.attr('string'),\n    repeatedSelector: DS.attr('string'),\n    siblings: DS.attr('number', {\n        defaultValue: 0\n    }),\n\n    sample: DS.belongsTo(),\n    schema: DS.belongsTo(),\n    annotations: DS.hasMany('base-annotation', {\n        inverse: 'parent',\n        polymorphic: true\n    }),\n\n    ownerSample: Ember.computed(function() {\n        return DS.PromiseObject.create({\n            promise: this.get('sample').then(sample => sample || this.get('parent.ownerSample'))\n        });\n    }),\n\n    orderedAnnotations: Ember.computed(\n        'annotations', 'annotations.@each.orderedAnnotations', function() {\n            return [].concat(...this.get('annotations').map(annotation => (\n                annotation.constructor.modelName === 'item' ?\n                    annotation.getWithDefault('orderedAnnotations', []) :\n                    [annotation]\n            )));\n        }),\n    orderedChildren: Ember.computed(\n        'annotations.[]', 'annotations.@each.orderedChildren', function() {\n            return [].concat(...this.get('annotations').map(annotation => (\n                [annotation].concat(\n                    annotation.constructor.modelName === 'item' ?\n                        annotation.getWithDefault('orderedChildren', []) :\n                        []\n                )\n            )));\n        }),\n\n    depth: Ember.computed('parent.depth', function() {\n        let parentDepth = this.get('parent.depth');\n        return (parentDepth || 0) + 1;\n    })\n});\n"
  },
  {
    "path": "portiaui/app/models/project.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport BaseModel from './base';\nimport { memberAction } from 'ember-api-actions';\nconst { inject: { service } } = Ember;\n\nfunction memberActionAndMarkClean(options) {\n    const method = memberAction(options);\n\n    return function(payload) {\n        return method.call(this, payload).then(result => {\n            this.markClean();\n            return result;\n        });\n    };\n}\n\nconst Project =  BaseModel.extend({\n    changes: service(),\n\n    name: DS.attr('string'),\n    spiders: DS.hasMany(),\n    schemas: DS.hasMany(),\n    extractors: DS.hasMany(),\n\n    status: memberAction({path: 'status', type: 'GET'}),\n    deploy: memberAction({path: 'deploy', type: 'POST'}),\n    publish: memberActionAndMarkClean({path: 'publish'}),\n    copy: memberActionAndMarkClean({path: 'copy', type: 'POST'}),\n    reset:  memberActionAndMarkClean({path: 'reset'}),\n\n    markClean() {\n        this.set('changes.hasChanges', false);\n    }\n});\n\nexport default Project;\n"
  },
  {
    "path": "portiaui/app/models/sample.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport BaseModel from './base';\n\nconst Sample = BaseModel.extend({\n    name: DS.attr('string'),\n    url: DS.attr('string'),\n    spider: DS.belongsTo(),\n    items: DS.hasMany(),\n    body: DS.attr('string', {\n        default: 'original_body'\n    }),\n\n    orderedAnnotations: Ember.computed('items.content.@each.orderedAnnotations', function() {\n        return [].concat(...this.get('items').mapBy('orderedAnnotations'));\n    }),\n    orderedChildren: Ember.computed('items.content.@each.orderedChildren', function() {\n        return [].concat(...this.get('items').map(item => [item].concat(\n            item.getWithDefault('orderedChildren', []))));\n    })\n});\n\nSample.reopenClass({\n    normalizeTitle(title) {\n        return title\n            .trim()\n            .replace(/[^a-z\\s_-]/ig, '')\n            .substring(0, 48)\n            .trim()\n            .replace(/\\s+/g, ' ');\n    }\n});\n\nexport default Sample;\n"
  },
  {
    "path": "portiaui/app/models/schema.js",
    "content": "import DS from 'ember-data';\nimport BaseModel from './base';\n\nexport default BaseModel.extend({\n    name: DS.attr('string'),\n    default: DS.attr('boolean'),\n    project: DS.belongsTo(),\n    fields: DS.hasMany(),\n    items: DS.hasMany()\n});\n"
  },
  {
    "path": "portiaui/app/models/spider.js",
    "content": "import Ember from 'ember';\nimport DS from 'ember-data';\nimport BaseModel from './base';\n\nexport default BaseModel.extend({\n    name: DS.attr('string'),\n    nameAlias: Ember.computed('id', 'name', {\n        get() {\n            return this.get('name') || this.get('id');\n        },\n        set(key, value) {\n            this.set('name', value);\n            return value;\n        }\n    }),\n\n    startUrls: DS.attr('startUrl', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    respectNofollow: DS.attr('boolean'),\n    pageActions: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    project: DS.belongsTo(),\n\n    // login\n    performLogin: DS.attr('boolean'),\n    loginUrl: DS.attr('string'),\n    loginUser: DS.attr('string'),\n    loginPassword: DS.attr('string'),\n\n    // links\n    linksToFollow: DS.attr('string', {\n        defaultValue: 'all'\n    }),\n    followPatterns: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    excludePatterns: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    // move to ui state?\n    showLinks: DS.attr('boolean'),\n    respectNoFollow: DS.attr('boolean', {\n        defaultValue: true\n    }),\n\n    // JS\n    jsEnabled: DS.attr('boolean'),\n    jsEnablePatterns: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n    jsDisablePatterns: DS.attr('array', {\n        defaultValue() {\n            return [];\n        }\n    }),\n\n    samples: DS.hasMany({\n        async: true\n    }),\n\n    firstUrl: Ember.computed('startUrls.firstObject', function() {\n        const urls = this.get('startUrls').filterBy('type', 'url');\n        return (urls.length !== 0) ? urls[0].url : undefined;\n    })\n});\n"
  },
  {
    "path": "portiaui/app/models/start-url.js",
    "content": "import Ember from 'ember';\nimport { flatten } from '../utils/utils';\nimport { augmentFragmentList, fragmentToString } from '../utils/start-urls';\n\nconst StartUrl = Ember.Object.extend({\n    type: 'url',\n    isGenerated: false,\n    optionsTitle: '',\n    componentName: 'project-structure-spider-url',\n\n    show() {\n        return this.get('url');\n    },\n\n    serialize() {\n        const serialized = {\n            'url': this.show(),\n            'type': this.get('type')\n        };\n        return this.addSerialized(serialized);\n    },\n    addSerialized(serialized) { return serialized; },\n\n    save(spider) {\n        spider.get('startUrls').pushObject(this);\n        spider.save();\n        return this;\n    }\n});\n\nconst GeneratedUrl = StartUrl.extend({\n    type: 'generated',\n    isGenerated: true,\n    optionsTitle: 'URL Generation',\n    componentName: 'project-structure-spider-generated-url',\n    optionsComponentName: 'generated-url-options',\n\n    init() {\n        const defaultFragments = [\n            {\n                type: 'fixed',\n                value: this.get('url')\n            }\n        ];\n        const fragments = this.get('fragments') || defaultFragments;\n        this.set('fragments', fragments);\n    },\n\n    show() {\n        return this.get('fragments').map(fragmentToString).join('');\n    },\n\n    addSerialized(serialized) {\n        serialized['fragments'] = this.get('fragments');\n        return serialized;\n    },\n\n    generateList() {\n        // This algorithm is very inefficient due to concatenation and flattening.\n        const fragments = Ember.copy(this.get('fragments'));\n        let firstFragment = fragments.shiftObject();\n        let urlList = [[firstFragment.value]];\n\n        fragments.forEach((fragment) => {\n            let augmentedList = urlList.map((fragmentList) => {\n                return augmentFragmentList(fragmentList, fragment);\n            });\n            urlList = flatten(augmentedList);\n        });\n        return urlList;\n    }\n});\n\n\nconst FeedUrl = StartUrl.extend({\n    type: 'feed',\n    optionsTitle: 'Feed',\n    componentName: 'project-structure-spider-feed-url',\n    optionsComponentName: 'feed-url-options',\n\n    show() {\n        return this._raw_url();\n    },\n\n    _raw_url() {\n        const url = this.get('url');\n        const notRaw = !url.includes('raw');\n\n        if (url.includes('gist.github') && notRaw) {\n            const trailingSlash = (url.slice(-1) === '/') ? '' : '/';\n            return url + trailingSlash + 'raw';\n        }\n\n        if (url.includes('dropbox.com') && notRaw) {\n            return url + '&raw=1';\n        }\n\n        if (url.includes('docs.google.com') && !url.includes('export')) {\n            return url.split('/')\n                      .slice(0, -1)\n                      .concat('export?format=txt')\n                      .join('/');\n        }\n\n        return url;\n    }\n});\n\nexport default function buildStartUrl(startUrl) {\n    const urls = {\n        'url': StartUrl,\n        'feed': FeedUrl,\n        'generated': GeneratedUrl\n    };\n    const urlType = startUrl.type || 'url';\n    return urls[urlType].create(startUrl);\n}\n"
  },
  {
    "path": "portiaui/app/resolver.js",
    "content": "import Resolver from 'ember-resolver';\n\nexport default Resolver;\n"
  },
  {
    "path": "portiaui/app/router.js",
    "content": "import Ember from 'ember';\nimport config from './config/environment';\n\nconst Router = Ember.Router.extend({\n    location: config.locationType\n});\n\nRouter.map(function() {\n    this.route('projects', function() {\n        this.route('project', {path: \":project_id\"}, function() {\n            this.route('spider', {path: \"spiders/:spider_id\"}, function() {\n                this.route('sample', {path: \"samples/:sample_id\"}, function() {\n                    this.route('data', function() {\n                        this.route('annotation', {path: \"annotations/:annotation_id\"}, function() {\n                            this.route('options');\n                        });\n                        this.route('item', {path: \"items/:item_id\"});\n                    });\n                });\n                this.route('options');\n                this.route('link-options');\n                this.route('start-url', {path: \"start-urls/:start_url_id\"}, function() {\n                    this.route('options');\n                });\n            });\n            this.route('schema', {path: \"schemas/:schema_id\"}, function() {\n                this.route('field', {path: \"fields/:field_id\"}, function() {\n                    this.route('options');\n                });\n                this.route('options');\n            });\n            this.route(\"conflicts\", function(){\n                this.route(\"conflict\", {path: ':file_path'});\n            });\n            this.route('compatibility', {path: \"*path\"});\n        });\n    });\n    this.route('browsers');\n});\n\nexport default Router;\n"
  },
  {
    "path": "portiaui/app/routes/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/routes/application.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n});\n"
  },
  {
    "path": "portiaui/app/routes/browsers.js",
    "content": "import Ember from 'ember';\n\nlet browsers = [\n    {\n        name: 'Chrome',\n        alt: 'Chrome logo',\n        src: '/assets/images/chrome-logo.jpg',\n        href: 'https://www.google.com/chrome/browser/desktop/'\n    },\n    {\n        name: 'Firefox',\n        alt: 'Firefox logo',\n        src: '/assets/images/firefox-logo.png',\n        href: 'https://www.mozilla.org/en-US/firefox/new/'\n    }\n];\n\nexport default Ember.Route.extend({\n    model() {\n        return browsers;\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/index.js",
    "content": "import Ember from 'ember';\nimport hasBrowserFeatures from '../utils/browser-features';\n\nfunction identity(x) { return x; }\n\nexport default Ember.Route.extend({\n    model() {\n        return hasBrowserFeatures();\n    },\n\n    redirect(model) {\n        let hasFeatures = model.every(identity);\n        let nextRoute = hasFeatures ? 'projects' : 'browsers';\n        this.replaceWith(nextRoute);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/compatibility.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        return params;\n    },\n\n    redirect({path}, {queryParams}) {\n        // conflicts route has the same path\n        if (path === 'items') {\n            this.transitionTo('projects.project', {\n                queryParams: queryParams\n            });\n            return;\n        }\n        const fragments = path.split('/');\n        if (fragments.length === 1) {\n            this.transitionTo('projects.project.spider', fragments[0], {\n                queryParams: queryParams\n            });\n        } else  {\n            this.transitionTo('projects.project.spider.sample', fragments[0], fragments[1], {\n                queryParams: queryParams\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/conflicts/conflict.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        var allConflicts = this.modelFor(\"projects.project.conflicts\");\n        var file = atob(params.file_path);\n        return {\n            file: file,\n            contents: allConflicts[file],\n        };\n    },\n\n    renderTemplate() {\n        this.render('projects/project/conflicts/topbar', {\n            into: 'application',\n            outlet: 'top-bar',\n        });\n\n        this.render('projects/project/conflicts/resolver', {\n            into: 'application',\n            outlet: 'main',\n        });\n    },\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/conflicts.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model() {\n        return $.post('/projects', JSON.stringify({\n            cmd: 'conflicts',\n            args: [this.modelFor(\"projects.project\").id]\n        }));\n    },\n\n    renderTemplate() {\n        this.render('projects/project/conflicts/file-selector', {\n            into: 'application',\n            outlet: 'side-bar',\n        });\n\n        this.render('projects/project/conflicts/help', {\n            into: 'application',\n            outlet: 'main',\n        });\n    },\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/schema/field/options.js",
    "content": "import Ember from 'ember';\nimport OptionsRoute from '../../../../../mixins/options-route';\n\nexport default Ember.Route.extend(OptionsRoute, {\n    model() {\n        return this.modelFor('projects.project.schema.field');\n    },\n\n    renderTemplate() {\n        this.render('projects/project/schema/field/options', {\n            into: 'options-panels',\n            outlet: 'options-panels'\n        });\n    },\n\n    actions: {\n        close() {\n            this.transitionTo('projects.project.schema.field');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/schema/field.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        return this.store.peekRecord('field', params.field_id);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/schema.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        return this.store.peekRecord('schema', params.schema_id);\n    },\n\n    afterModel(model) {\n        return model.reload();\n    },\n\n    renderTemplate() {\n        this.render('projects/project/schema/structure', {\n            into: 'projects/project/structure',\n            outlet: 'project-structure'\n        });\n    },\n\n    actions: {\n        error: function() {\n            this.transitionTo('projects.project',\n                this.modelFor('projects.project'));\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/link-options.js",
    "content": "import Ember from 'ember';\nimport OptionsRoute from '../../../../mixins/options-route';\n\nexport default Ember.Route.extend(OptionsRoute, {\n    model() {\n        return this.modelFor('projects.project.spider');\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/link-options', {\n            into: 'options-panels',\n            outlet: 'options-panels'\n        });\n\n    },\n\n    actions: {\n        close() {\n            this.transitionTo('projects.project.spider');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/options.js",
    "content": "import Ember from 'ember';\nimport OptionsRoute from '../../../../mixins/options-route';\n\nexport default Ember.Route.extend(OptionsRoute, {\n    model() {\n        return this.modelFor('projects.project.spider');\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/options', {\n            into: 'options-panels',\n            outlet: 'options-panels'\n        });\n\n    },\n\n    actions: {\n        close() {\n            this.transitionTo('projects.project.spider');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample/data/annotation/options.js",
    "content": "import Ember from 'ember';\nimport OptionsRoute from '../../../../../../../mixins/options-route';\n\nexport default Ember.Route.extend(OptionsRoute, {\n    model() {\n        return this.modelFor('projects.project.spider.sample.data.annotation');\n    },\n\n    afterModel() {\n        let extractorsPromise = this.modelFor('projects.project').get('extractors');\n        if (!extractorsPromise.get('isPending')) {\n            extractorsPromise = extractorsPromise.reload();\n        }\n        return extractorsPromise;\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/sample/data/annotation/options', {\n            into: 'options-panels',\n            outlet: 'options-panels'\n        });\n    },\n\n    actions: {\n        close() {\n            this.transitionTo('projects.project.spider.sample.data.annotation');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample/data/annotation.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    uiState: Ember.inject.service(),\n    selectedElement: Ember.computed.alias('uiState.viewPort.selectedElement'),\n    selectedModel: Ember.computed.alias('uiState.viewPort.selectedModel'),\n\n    model(params) {\n        return this.store.peekRecord('annotation', params.annotation_id);\n    },\n\n    afterModel(model) {\n        if (this.get('selectedModel') !== model) {\n            this.setProperties({\n                selectedElement: null,\n                selectedModel: model\n            });\n        }\n    },\n\n    deactivate() {\n        this.setProperties({\n            selectedElement: null,\n            selectedModel: null\n        });\n    },\n\n    actions: {\n        error() {\n            this.transitionTo('projects.project.spider.sample.data');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample/data/item.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        return this.store.peekRecord('item', params.item_id);\n    },\n\n    actions: {\n        error() {\n            this.transitionTo('projects.project.spider.sample.data');\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample/data.js",
    "content": "import Ember from 'ember';\nconst { inject: { service }, run } = Ember;\n\nexport default Ember.Route.extend({\n    annotationStructure: service(),\n    extractedItems: service(),\n    browser: service(),\n\n    init() {\n        this._super(...arguments);\n        this.scheduledRenderOverlays = null;\n    },\n\n    model() {\n        return this.modelFor('projects.project.spider.sample');\n    },\n\n    afterModel(model) {\n        this.updateDataStructure(model);\n        this.get('extractedItems').update();\n    },\n\n    activate() {\n        this.get('browser').setAnnotationMode();\n        this.controllerFor('projects.project').setClickHandler(this.viewPortClick.bind(this));\n    },\n\n    deactivate() {\n        this.updateDataStructure(null);\n\n        if (this.scheduledRenderOverlays) {\n            run.cancel(this.scheduledRenderOverlays);\n        }\n\n        this.get('browser').clearAnnotationMode();\n        this.controllerFor('projects.project').clearClickHandler();\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/sample/data/structure', {\n            into: 'projects/project/spider/sample/structure',\n            outlet: 'sample-structure'\n        });\n\n        this.render('projects/project/spider/sample/data/tools', {\n            into: 'tool-panels',\n            outlet: 'tool-panels'\n        });\n\n        this.render('projects/project/spider/sample/data/toolbar', {\n            into: 'projects/project/spider/sample/toolbar',\n            outlet: 'browser-toolbar'\n        });\n\n        this.scheduledRenderOverlays = run.next(this, this.renderOverlayTemplate);\n    },\n\n    renderOverlayTemplate() {\n        this.scheduledRenderOverlays = null;\n        this.render('projects/project/spider/sample/data/overlays', {\n            into: 'projects/project',\n            outlet: 'browser-overlays'\n        });\n    },\n\n    updateDataStructure(model) {\n        const annotationStructure = this.get('annotationStructure');\n        const currentModel = this._dataStructureModel;\n\n        if (currentModel !== model) {\n            annotationStructure.removeDataStructure(currentModel);\n            annotationStructure.addDataStructure(model);\n            this._dataStructureModel = model;\n        }\n    },\n\n    viewPortClick() {\n        this.get('controller').send('selectElement', ...arguments);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample/index.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    redirect(model, {queryParams}) {\n        this.transitionTo('projects.project.spider.sample.data', {\n            /* The queryParams in the transition object have been processed and keys with empty\n               values have been removed. If we use the same object for the new transition the\n               unspecified values will keep their current values. This means we can't automatically\n               pass through query parameters that have intentionally been emptied. */\n            queryParams: Ember.assign({\n                url: null,\n                baseurl: null\n            }, queryParams)\n        });\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/sample.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    browser: Ember.inject.service(),\n\n    model(params) {\n        return this.store.peekRecord('sample', params.sample_id);\n    },\n\n    afterModel(model) {\n        return model.reload().then(model => {\n            return model;\n        });\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/sample/structure', {\n            into: 'projects/project/spider/structure',\n            outlet: 'spider-structure'\n        });\n\n        this.render('projects/project/spider/sample/toolbar', {\n            into: 'projects/project',\n            outlet: 'browser-toolbar'\n        });\n    },\n\n    actions: {\n        error() {\n            this.transitionTo('projects.project.spider',\n                this.modelFor('projects.project.spider'));\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/start-url/options.js",
    "content": "import Ember from 'ember';\nimport OptionsRoute from '../../../../../mixins/options-route';\n\nexport default Ember.Route.extend(OptionsRoute, {\n    model() {\n        const startUrl = this.modelFor('projects.project.spider.start-url');\n\n        return {\n            spider: this.getSpider(),\n            startUrlId: this.getSpider().get('startUrls').indexOf(startUrl)\n        };\n    },\n\n    afterModel(model) {\n        if (!model) {\n            this.transitionToSpider();\n        }\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/start-url/options', {\n            into: 'options-panels',\n            outlet: 'options-panels'\n        });\n    },\n\n    getSpider() {\n        return this.modelFor('projects.project.spider');\n    },\n\n    transitionToSpider() {\n        this.transitionTo('projects.project.spider', this.getSpider());\n    },\n\n    actions: {\n        closeOptions() {\n            this.transitionToSpider();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider/start-url.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model(params) {\n        const spider = this.modelFor('projects.project.spider');\n        return spider.get('startUrls').objectAt(params.start_url_id);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project/spider.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    browser: Ember.inject.service(),\n\n    model(params) {\n        return this.store.peekRecord('spider', params.spider_id);\n    },\n\n    afterModel(model) {\n        return model.reload().then(() => model.get('samples'));\n    },\n\n    redirect(model, {queryParams}) {\n        /* The route may be loaded from a partial model without all data from\n           the backed, and an undefined firstUrl. This is fired after afterModel\n           so the model will have been reloaded from the backend. */\n        if (queryParams.url === undefined && queryParams.baseurl === undefined) {\n            const url = model.get('firstUrl');\n            if (url === undefined) {\n                return;\n            }\n            /* Transition in the next frame to prevent an issue where sometimes\n               the route fails to render. */\n            Ember.run.next(() => {\n                this.transitionTo('projects.project.spider', {\n                    queryParams: {\n                        url,\n                        baseurl: null\n                    }\n                });\n            });\n        }\n    },\n\n    setupController(controller) {\n        this._super(...arguments);\n        Ember.run.next(function () {\n            controller.activate();\n        });\n    },\n\n    resetController(controller, isExiting) {\n        Ember.run.next(function () {\n            controller.deactivate();\n            if (!isExiting) {\n                controller.activate();\n            }\n        });\n    },\n\n    renderTemplate() {\n        this.render('projects/project/spider/structure', {\n            into: 'projects/project/structure',\n            outlet: 'project-structure'\n        });\n\n        this.render('projects/project/spider/overlays', {\n            into: 'projects/project',\n            outlet: 'browser-overlays'\n        });\n\n        this.render('projects/project/spider/tools', {\n            into: 'tool-panels',\n            outlet: 'tool-panels'\n        });\n\n        this.render('projects/project/spider/toolbar', {\n            into: 'projects/project',\n            outlet: 'browser-toolbar'\n        });\n    },\n\n    actions: {\n        error() {\n            this.transitionTo('projects.project',\n                this.modelFor('projects.project'));\n        },\n\n        transitionToFragments(start_url_id) {\n            this.transitionTo('projects.project.spider.start-url.options', start_url_id);\n        },\n\n        closeOptions() {\n            let spider = this.modelFor('projects.project.spider');\n            this.transitionTo('projects.project.spider', spider);\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects/project.js",
    "content": "import Ember from 'ember';\nconst { inject: { service } } = Ember;\n\nexport default Ember.Route.extend({\n    browser: service(),\n    changes: service(),\n    notificationManager: service(),\n    uiState: service(),\n\n    beforeModel() {\n        this.store.unloadAll('spider');\n        this.store.unloadAll('schema');\n        this.set('uiState.currentSpider', null);\n    },\n\n    model(params) {\n        this.set('projectId', params.project_id);\n        return this.store.findRecord('project', params.project_id);\n    },\n\n    setupController(controller, model) {\n        this._super(controller, model);\n        controller.set('projects', this.controllerFor('projects'));\n    },\n\n    deactivate() {\n        this.set('browser.url', null);\n    },\n\n    renderTemplate() {\n        this.render({\n            into: 'application',\n            outlet: 'main'\n        });\n\n        this.render('projects/project/structure', {\n            into: 'application',\n            outlet: 'side-bar'\n        });\n\n        this.render('options-panels', {\n            into: 'application',\n            outlet: 'options-panels'\n        });\n\n        this.render('tool-panels', {\n            into: 'application',\n            outlet: 'tool-panels'\n        });\n\n        this.render('projects/project/toolbar', {\n            into: 'projects/project',\n            outlet: 'browser-toolbar'\n        });\n    },\n\n    projectNotFound() {\n        const id = this.get('projectId');\n        const errorMsg = `Project with id '${id}' not found.`;\n        this.get('notificationManager').showErrorNotification(errorMsg);\n    },\n\n    actions: {\n        error: function() {\n            this.projectNotFound();\n            this.transitionTo('projects');\n        },\n\n        conflict() {\n            this.transitionTo('projects.project.conflicts');\n        },\n\n        reload() {\n            this.transitionTo('projects.project');\n            this.store.unloadAll('spider');\n            this.store.unloadAll('schema');\n            this.refresh();\n        }\n    }\n});\n"
  },
  {
    "path": "portiaui/app/routes/projects.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Route.extend({\n    model() {\n        return this.store.findAll('project');\n    }\n});\n"
  },
  {
    "path": "portiaui/app/serializers/application.js",
    "content": "import DS from \"ember-data\";\n\nexport default DS.JSONAPISerializer.extend({\n    normalize(modelClass, resourceHash) {\n        const resource = this._super(...arguments);\n        // add resource instance link to data, we use this to resolve the url\n        // for subsequent requests\n        if (resourceHash.links) {\n            resource.data.links = resourceHash.links;\n        }\n        return resource;\n    },\n\n    serialize(snapshot, options) {\n        const json = this._super(...arguments);\n\n        // partial serialization based on the partial option\n        if (options && options.partial) {\n            const data = json.data;\n\n            let keys = new Set();\n            for (let key of options.partial) {\n                let payloadKey = this._getMappedKey(key, snapshot.type);\n                if (payloadKey === key) {\n                    payloadKey = this.keyForAttribute(key, 'serialize');\n                }\n                keys.add(payloadKey);\n            }\n\n            for (let field of Object.keys(data.attributes)) {\n                if (!keys.has(field)) {\n                    delete data.attributes[field];\n                }\n            }\n            if (!Object.keys(data.attributes).length) {\n                delete data.attributes;\n            }\n\n            for (let field of Object.keys(data.relationships)) {\n                if (!keys.has(field)) {\n                    delete data.relationships[field];\n                }\n            }\n            if (!Object.keys(data.relationships).length) {\n                delete data.relationships;\n            }\n        }\n\n        return json;\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/annotation-structure.js",
    "content": "import Ember from 'ember';\nimport {\n    AnnotationSelectorGenerator,\n    ContainerSelectorGenerator,\n    createSelectorGenerators\n} from '../utils/selectors';\n\nconst ElementStructure = Ember.Object.extend({\n    definition: null,\n    selectorMatcher: null,\n\n    init() {\n        this._super(...arguments);\n        this.addObservers();\n    },\n\n    destroy() {\n        this.removeObservers();\n        this._super(...arguments);\n    },\n\n    updateDefinition: Ember.observer('definition', function() {\n        this.removeObservers();\n        this.addObservers();\n    }),\n\n    addObservers() {\n        const allElements = [];\n        this.set('annotations', Ember.Object.create());\n        this.set('elements', Ember.Object.create({\n            all: allElements\n        }));\n\n        const bindings = this.bindings = [];\n        const definition = this.get('definition');\n        const selectorMatcher = this.get('selectorMatcher');\n\n        const setup = element => {\n            const annotation = element.annotation;\n            const children = element.children;\n            const guid = Ember.guidFor(annotation);\n\n            const setElements = elements => {\n                (annotation.get('elements') || []).forEach(element => {\n                    allElements.removeObject(element);\n                    const guid = Ember.guidFor(element);\n                    const annotations = this.get(`annotations.${guid}`);\n                    if (annotations) {\n                        annotations.removeObject(annotation);\n                        if (!annotations.length) {\n                            this.set(`annotations.${guid}`, undefined);\n                        }\n                    }\n                });\n                elements.forEach(element => {\n                    allElements.addObject(element);\n                    const guid = Ember.guidFor(element);\n                    let annotations = this.get(`annotations.${guid}`);\n                    if (!annotations) {\n                        annotations = [];\n                        this.set(`annotations.${guid}`, annotations);\n                        this.notifyPropertyChange('annotations');\n                    }\n                    annotations.addObject(annotation);\n                });\n                if (!annotation.get('isDeleted')) {\n                    annotation.set('elements', elements);\n                }\n                this.set(`elements.${guid}`, elements);\n                this.notifyPropertyChange('elements');\n            };\n\n            if (children) {\n                children.forEach(setup);\n\n                let selector = null;\n                const observer = () => {\n                    if (selector) {\n                        selectorMatcher.unRegister(selector, setElements);\n                    }\n                    selector = annotation.get('repeatedSelector') || annotation.get('selector');\n                    if (selector) {\n                        selectorMatcher.register(selector, setElements);\n                        setElements(selectorMatcher.query(selector));\n                    }\n                };\n\n                let scheduledObserver = null;\n                bindings.push({\n                    annotation,\n                    setup() {},\n                    teardown() {\n                        Ember.run.cancel(scheduledObserver);\n                        if (selector) {\n                            selectorMatcher.unRegister(selector, setElements);\n                        }\n                        annotation.setProperties({\n                            elements: undefined\n                        });\n                    },\n                    observer() {\n                        // allow the bindings to sync first\n                        scheduledObserver = Ember.run.scheduleOnce('sync', observer);\n                    },\n                    observerPaths: ['selector', 'repeatedSelector']\n                });\n            } else {\n                let selector = null;\n                const observer = () => {\n                    if (selector) {\n                        selectorMatcher.unRegister(selector, setElements);\n                    }\n                    selector = annotation.get('selector');\n                    if (selector) {\n                        selectorMatcher.register(selector, setElements);\n                        setElements(selectorMatcher.query(selector));\n                    }\n                };\n\n                let scheduledObserver = null;\n                bindings.push({\n                    annotation,\n                    setup() {},\n                    teardown() {\n                        Ember.run.cancel(scheduledObserver);\n                        if (selector) {\n                            selectorMatcher.unRegister(selector, setElements);\n                        }\n                        annotation.setProperties({\n                            elements: undefined\n                        });\n                    },\n                    observer() {\n                        // allow the bindings to sync first\n                        scheduledObserver = Ember.run.scheduleOnce('sync', observer);\n                    },\n                    observerPaths: ['selector']\n                });\n            }\n        };\n\n        definition.forEach(setup);\n\n        for (let {setup} of bindings) {\n            if (setup) {\n                setup();\n            }\n        }\n        for (let {annotation, observer, observerPaths} of bindings) {\n            if (observer) {\n                for (let path of observerPaths) {\n                    Ember.addObserver(annotation, path, observer);\n                }\n                observer();\n            }\n        }\n    },\n\n    removeObservers() {\n        for (let {annotation, observer, observerPaths, teardown} of this.bindings) {\n            if (observer) {\n                for (let path of observerPaths) {\n                    Ember.removeObserver(annotation, path, observer);\n                }\n            }\n            if (teardown) {\n                teardown();\n            }\n        }\n        this.bindings = [];\n\n        for (let property of ['annotations', 'elements']) {\n            const object = this.get(property);\n            if (object) {\n                object.destroy();\n            }\n            this.set(property, null);\n        }\n    }\n});\n\nconst DataElementStructure = ElementStructure.extend({\n    model: null,  // a sample\n    definition: [],\n\n    setDefinition: Ember.on('init', Ember.observer('model.orderedAnnotations.[]', function() {\n        const sample = this.get('model');\n        if (!sample) {\n            this.set('definition', []);\n        }\n        const structurePromise = createStructure(sample);\n        this.currentPromise = structurePromise;\n        structurePromise.then(structure => {\n            if (structurePromise === this.currentPromise) {\n                delete this.currentPromise;\n                this.set('definition', structure);\n            }\n        });\n    }))\n});\n\nexport function createStructure(sample) {\n    return sample.get('items').then(items =>\n        Ember.RSVP.filter(items.toArray(), item =>\n            item && !item.get('isDeleted')\n        ).then(filteredItems =>\n            Ember.RSVP.map(filteredItems, item =>\n                Ember.RSVP.hash({\n                    annotation: item,\n                    children: item.get('annotations').then(function mapper(annotations) {\n                        if (!annotations) {\n                            return [];\n                        }\n                        return Ember.RSVP.filter(annotations.toArray(), annotation =>\n                            !annotation.get('isDeleted')\n                        ).then(filteredAnnotations =>\n                            Ember.RSVP.map(filteredAnnotations, annotation => {\n                                if (annotation.constructor.modelName === 'annotation') {\n                                    return {\n                                        annotation\n                                    };\n                                } else if (annotation.constructor.modelName === 'item') {\n                                    return Ember.RSVP.hash({\n                                        annotation,\n                                        children: annotation.get('annotations').then(mapper)\n                                    });\n                                }\n                            })\n                        );\n                    })\n                })\n            )\n        )\n    );\n}\n\nexport function updateStructureSelectors(structure, selectorMatcher) {\n    const selectorGenerators = createSelectorGenerators(structure, selectorMatcher);\n    for (let [annotation, selectorGenerator] of selectorGenerators) {\n        const selector = selectorGenerator.get('selector');\n        if (selectorGenerator instanceof AnnotationSelectorGenerator) {\n            annotation.setProperties({\n                selector,\n                xpath: selectorGenerator.get('xpath'),\n                repeated: selectorGenerator.get('repeatedAnnotation')\n            });\n            if (annotation.get('selectionMode') === 'css') {\n                annotation.setSelector(selector);\n            }\n        } else if (selectorGenerator instanceof ContainerSelectorGenerator) {\n            const containerSelector = selectorGenerator.get('containerSelector');\n            const siblings = selectorGenerator.get('siblings');\n            const element = selector ? selectorMatcher.query(selector) : [];\n            if (!element.length) {\n                annotation.setProperties({\n                    selector: null,\n                    repeatedSelector: null,\n                    siblings: 0\n                });\n            } else if (element.length > 1) {\n                annotation.setProperties({\n                    selector: containerSelector,\n                    repeatedSelector: selector,\n                    siblings\n                });\n            } else {\n                annotation.setProperties({\n                    selector,\n                    repeatedSelector: null,\n                    siblings\n                });\n            }\n        }\n        selectorGenerator.destroy();\n    }\n}\n\nexport default Ember.Service.extend({\n    selectorMatcher: Ember.inject.service(),\n\n    addStructure(model, attribute, Class) {\n        if (!model) {\n            return;\n        }\n\n        const selectorMatcher = this.get('selectorMatcher');\n        model.set(attribute, Class.create({\n            selectorMatcher,\n            model\n        }));\n    },\n\n    removeStructure(model, attribute) {\n        if (!model) {\n            return;\n        }\n\n        const structure = model.get(attribute);\n        if (structure) {\n            structure.destroy();\n            model.set(attribute, null);\n        }\n    },\n\n    addDataStructure(sample) {\n        this.addStructure(sample, 'dataStructure', DataElementStructure);\n    },\n\n    removeDataStructure(sample) {\n        this.removeStructure(sample, 'dataStructure');\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/browser.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { cleanUrl, renameAttr } from '../utils/utils';\n\nexport const NAVIGATION_MODE = 'navigation';\nexport const ANNOTATION_MODE = 'data-annotation';\nexport const INTERACTION_MODES = new Set([ANNOTATION_MODE]);\nexport const DEFAULT_MODE = NAVIGATION_MODE;\n\n/* jshint ignore:start */\nconst META_STYLE = `<style title=\"portia-show-meta\">\n    head {\n        display: block;\n        display: -webkit-flex;\n        display: flex;\n        -webkit-flex-direction: column;\n        flex-direction: column;\n    }\n    title, meta, link {\n        display: block;\n    }\n    title {\n        -webkit-order: 0;\n        order: 0;\n        font-weight: bold;\n    }\n    title::before {\n        content: 'Title: ';\n        font-weight: normal;\n    }\n    meta {\n        -webkit-order: 1;\n        order: 1;\n    }\n    meta[name][content]::after {\n        content: attr(name) ': \"' attr(content) '\"';\n    }\n    meta[property][content]::after {\n        content: attr(property) ': \"' attr(content) '\"';\n    }\n    meta[itemprop][content]::after {\n        content: attr(itemprop) ': \"' attr(content) '\"';\n    }\n    link {\n        -webkit-order: 2;\n        order: 2;\n    }\n    link[href][rel]::after {\n        content: 'Link: rel: \"' attr(rel) '\" href: \"' attr(data-portia-href) '\"';\n    }\n    link[href][rel][data-portia-hidden-media]::after {\n        content: 'Link: rel: \"' attr(rel) '\" href: \"' attr(data-portia-href) '\" media: \"' attr(data-portia-hidden-media) '\"';\n    }\n    link[href][rel][type]::after {\n        content: 'Link: rel: \"' attr(rel) '\" href: \"' attr(data-portia-href) '\" type: \"' attr(type) '\"';\n    }\n    link[href][rel][type][data-portia-hidden-media]::after {\n        content: 'Link: rel: \"' attr(rel) '\" href: \"' attr(data-portia-href) '\" type: \"' attr(type) '\" media: \"' attr(data-portia-hidden-media) '\"';\n    }\n</style>`;\n/* jshint ignore:end */\n\nexport default Ember.Service.extend(Ember.Evented, {\n    extractedItems: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n\n    backBuffer: [],\n    cssEnabled: true,\n    document: null,\n    forwardBuffer: [],\n    loading: false,\n    mode: DEFAULT_MODE,\n    _disabled: true,\n    _url: null,\n    baseurl: null,\n    validUrl: true,\n\n    invalidUrl: computed.not('validUrl'),\n\n    disabled: Ember.computed('_disabled', 'webSocket.closed', 'mode', {\n        get() {\n            return this.get('_disabled') || this.get('webSocket.closed') ||\n                this.get('mode') !== NAVIGATION_MODE;\n        },\n\n        set(key, value) {\n            this.set('_disabled', value);\n            return value || this.get('webSocket.closed') || this.get('mode') !== NAVIGATION_MODE;\n        }\n    }),\n    isInteractionMode: Ember.computed('mode', function() {\n        return INTERACTION_MODES.has(this.get('mode'));\n    }),\n    url: Ember.computed('_url', {\n        get() {\n            return this.get('_url');\n        },\n\n        set(key, value) {\n            return this.go(value);\n        }\n    }),\n    $document: Ember.computed('document', function() {\n        const document = this.get('document');\n        return document ? Ember.$(document) : null;\n    }),\n\n    init() {\n        this._super(...arguments);\n        this.on('contentChanged', () => {\n            Ember.run.next(() => {\n                Ember.run.scheduleOnce('sync', this, 'checkCSS');\n            });\n        });\n    },\n\n    resetUrl: Ember.observer('document', function() {\n        if (!this.get('document')) {\n            this.setProperties({\n                '_url': null,\n                'baseurl': null\n            });\n        }\n    }),\n\n    invalidateUrl() {\n        this.set('validUrl', false);\n    },\n\n    go(url) {\n        this.set('validUrl', true);\n        const currentUrl = this.get('_url');\n        url = cleanUrl(url);\n        if (url && url !== currentUrl) {\n            this._extract();\n\n            this.beginPropertyChanges();\n            if (currentUrl) {\n                this.get('backBuffer').pushObject(currentUrl);\n            }\n            this.set('_url', url);\n            this.set('forwardBuffer', []);\n            this.endPropertyChanges();\n        }\n        return url;\n    },\n\n    back() {\n        this._updateBuffers(this.get('backBuffer'),\n                            this.get('forwardBuffer'));\n    },\n\n    forward() {\n        this._updateBuffers(this.get('forwardBuffer'),\n                            this.get('backBuffer'));\n    },\n\n    reload() {\n        this.notifyPropertyChange('_url');\n    },\n\n    checkCSS() {\n        const $iframe = this.get('$document');\n        const $showMetaStyleElement = $iframe.find('style[title=\"portia-show-meta\"]');\n        const cssEnabled = !$showMetaStyleElement.length;\n        this.set('cssEnabled', cssEnabled);\n    },\n\n    disableCSS() {\n        if (![ANNOTATION_MODE].includes(this.get('mode'))) {\n            return;\n        }\n\n        const iframe = this.get('document');\n        if (this.get('cssEnabled') && iframe) {\n            const $iframe = this.get('$document');\n            const $styles = $iframe.find(\n                'style:not([title=\"portia-show-meta\"]), link[rel=\"stylesheet\"]');\n            renameAttr($styles, 'media', 'data-portia-hidden-media');\n            // disable stylesheets using an impossible media query\n            $styles.attr('media', '(width: -1px)');\n            renameAttr($iframe.find('[style]'), 'style', 'data-portia-hidden-style');\n            $iframe.find('body').append(META_STYLE); // jshint ignore:line\n            this.set('cssEnabled', false);\n        }\n    },\n\n    enableCSS() {\n        if (![ANNOTATION_MODE].includes(this.get('mode'))) {\n            return;\n        }\n\n        const iframe = this.get('document');\n        if (!this.get('cssEnabled') && iframe) {\n            const $iframe = this.get('$document');\n            $iframe.find('style[title=\"portia-show-meta\"]').remove();\n            const $styles = $iframe.find(\n                'style:not([title=\"portia-show-meta\"]), link[rel=\"stylesheet\"]');\n            $styles.attr('media', null);\n            renameAttr($styles, 'data-portia-hidden-media', 'media');\n            renameAttr($iframe.find('[data-portia-hidden-style]'),\n                                    'data-portia-hidden-style', 'style');\n            this.set('cssEnabled', true);\n        }\n    },\n\n    setAnnotationMode() {\n        this.set('mode', ANNOTATION_MODE);\n    },\n\n    clearAnnotationMode() {\n        if (this.get('mode') === ANNOTATION_MODE) {\n            this.set('mode', DEFAULT_MODE);\n            this.enableCSS();\n        }\n    },\n\n    _updateBuffers(currentBuffer, otherBuffer) {\n        if (currentBuffer.length) {\n            this.beginPropertyChanges();\n            otherBuffer.pushObject(this.get('_url'));\n            const url = currentBuffer.popObject();\n            this._extract();\n            this.setProperties({\n                '_url': url,\n                'baseurl': null\n            });\n            this.endPropertyChanges();\n        }\n    },\n\n    _extract() {\n        this.get('extractedItems').activateExtraction();\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/capabilities.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Service.extend({\n    ajax: Ember.inject.service(),\n\n    fetchCapabilities: Ember.on('init', function() {\n        this.get('ajax').request('/server_capabilities').then(capabilities => {\n            this.setProperties(capabilities);\n        }, () => {\n            Ember.run.later(this, this.fetchCapabilities, 5000);\n        });\n    })\n});\n"
  },
  {
    "path": "portiaui/app/services/changes.js",
    "content": "import Ember from 'ember';\nconst { observer, computed, inject: { service }, run: { next } } = Ember;\n\nexport default Ember.Service.extend({\n    uiState: service(),\n    capabilities: service(),\n    project: computed.readOnly('uiState.models.project'),\n    versionControlled: computed.readOnly('capabilities.capabilities.version_control'),\n\n    changes: null,\n    hasChanges: computed('changes', 'versionControlled', 'hasChanges', {\n        get() {\n            const changes = this.get('changes');\n            const project = this.get('project');\n            if (changes === null || (project && this.get('_project_id') !== project.get('id'))) {\n                this._checkProjectChanges();\n            } else {\n                return changes;\n            }\n        },\n        set(_, value) {\n            if (this.get('versionControlled') && value) {\n                this.set('changes', true);\n                return true;\n            } else {\n                this.set('changes', false);\n                return false;\n            }\n        }\n    }),\n    _project_id: null,\n\n    init() {\n        this._checkProjectChanges();\n    },\n\n    projectChanged: observer('project.id', function() {\n        if (this.get('project.id') !== this.get('_project_id')) {\n            this._checkProjectChanges();\n        }\n    }),\n\n    _checkProjectChanges() {\n        let project = this.get('project');\n        if (!(project && this.get('versionControlled'))) { return false; }\n\n        next(this, () => {\n            project.status().then(status => {\n                const hasChanges = !!(status && status.meta && status.meta.changes &&\n                                      status.meta.changes.length);\n                this.set('_project_id', this.get('project.id'));\n                this.set('changes', hasChanges);\n            });\n        });\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/clock.js",
    "content": "import Ember from 'ember';\n\n// based on an idea from https://www.rvdh.de/2014/11/14/time-based-triggers-in-ember-js/\nexport default Ember.Service.extend({\n    time: new Date(),\n\n    metronome: Ember.on('init', function() {\n        const now = new Date();\n        const interval = 1000 - (+now % 1000);\n        this.set('time', now);\n\n        Ember.run.later(this, this.metronome, interval);\n    })\n});\n"
  },
  {
    "path": "portiaui/app/services/dispatcher.js",
    "content": "import Ember from 'ember';\nimport Sample from '../models/sample';\nimport { includesUrl } from '../utils/start-urls';\nimport buildStartUrl from '../models/start-url';\nimport {createStructure} from './annotation-structure';\nimport {getDefaultAttribute, hasContentAttribute} from '../components/inspector-panel';\nimport {updateStructureSelectors} from '../services/annotation-structure';\nimport { task } from 'ember-concurrency';\n\nexport function computedCanAddSpider() {\n    return Ember.computed('browser.url', function() {\n        return this.get('browser.url');\n    });\n}\n\nexport function computedCanAddSample(spiderPropertyName) {\n    return Ember.computed('browser.url', 'browser.document', 'browser.loading',\n                          `${spiderPropertyName}.samples.@each.url`,\n                          'browser.loading', function() {\n        const url = this.get('browser.url');\n        const document = this.get('browser.document');\n        const loading = this.get('browser.loading');\n        return (url && document && !loading &&\n                !this.get(`${spiderPropertyName}.samples`).isAny('url', url));\n    });\n}\n\nexport function computedEditableSample(spiderPropertyName) {\n    return Ember.computed('browser.url', `${spiderPropertyName}.samples.@each.url`, function() {\n        const url = this.get('browser.url');\n        if (!url) {\n            return;\n        }\n        return this.get(`${spiderPropertyName}.samples`).findBy('url', url);\n    });\n}\n\nexport default Ember.Service.extend({\n    api: Ember.inject.service(),\n    browser: Ember.inject.service(),\n    routing: Ember.inject.service('-routing'),\n    selectorMatcher: Ember.inject.service(),\n    store: Ember.inject.service(),\n    uiState: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n\n    addProject(name, redirect = false) {\n        const store = this.get('store');\n        const project = store.createRecord('project', {\n            name,\n        });\n        return project.save().then(() => {\n            if (redirect) {\n                const routing = this.get('routing');\n                routing.transitionTo('projects.project', [project], {}, true);\n            }\n            return project;\n        });\n    },\n\n    addSchema(project, redirect = false) {\n        const name = `schema${project.get('schemas.length') + 1}`;\n        return this.addNamedSchema(project, name, redirect);\n    },\n\n    addNamedSchema(project, name, redirect = false) {\n        const store = this.get('store');\n        const schema = store.createRecord('schema', {\n            name,\n            project\n        });\n        return schema.save().then(() => {\n            if (redirect) {\n                schema.set('new', true);\n                const routing = this.get('routing');\n                routing.transitionTo('projects.project.schema', [schema], {}, true);\n            }\n            return schema;\n        });\n    },\n\n    addField(schema, type, redirect = false) {\n        const name = `field${schema.get('fields.length') + 1}`;\n        return this.addNamedField(schema, name, type, redirect);\n    },\n\n    addNamedField(schema, name, type, redirect = false) {\n        const store = this.get('store');\n        const field = store.createRecord('field', {\n            name,\n            type: type || 'text',\n            schema\n        });\n        return field.save().then((field) => {\n            if (redirect) {\n                field.set('new', true);\n                const routing = this.get('routing');\n                routing.transitionTo('projects.project.schema.field', [field], {}, true);\n            }\n            return field;\n        });\n    },\n\n    addSpider(project, redirect = false) {\n        const url = this.get('browser.url');\n        if (!url) {\n            return;\n        }\n        let name = url;\n        const matches = url.match('//([a-zA-Z0-9\\._-]*)');\n        const store = this.get('store');\n        if (matches && matches.length) {\n            name = matches.slice(-1)[0];\n        } else {\n            name = url.replace(/[^a-zA-Z0-9_\\.-]/g, '');\n        }\n        let baseName = name;\n        let counter = 1;\n        while (store.peekRecord('spider', name)) {\n            name = `${baseName}_${counter}`;\n            counter += 1;\n        }\n        const spider = store.createRecord('spider', {\n            id: name,\n            startUrls: [buildStartUrl({ url: url })],\n            project\n        });\n        spider.set('project', project);\n        spider.save().then(() => {\n            if (redirect) {\n                spider.set('new', true);\n                const routing = this.get('routing');\n                routing.transitionTo('projects.project.spider', [spider], {}, true);\n            }\n        });\n        return spider;\n    },\n\n    addStartUrl(spider, url) {\n        if (url && !includesUrl(spider, url)) {\n            return buildStartUrl({ url: url }).save(spider);\n        }\n    },\n\n    addGeneratedUrl(spider, url) {\n        let spec = { type: 'generated' };\n\n        if (!url || includesUrl(spider, url)) {\n            spec.url = 'http://';\n            return buildStartUrl(spec).save(spider);\n        }\n        if (!includesUrl(spider, url)) {\n            spec.url = url;\n            return buildStartUrl(spec).save(spider);\n        }\n    },\n\n    addFeedUrl(spider, url) {\n        return buildStartUrl({ url: url, type: 'feed' }).save(spider);\n    },\n\n    addSample(spider, redirect = false) {\n        const url = this.get('browser.url');\n        const document = this.get('browser.document');\n        const loading = this.get('browser.loading');\n        if (!url || !document || loading) {\n            return;\n        }\n\n        const store = this.get('store');\n        const name = Sample.normalizeTitle(this.get('browser.document').title);\n        const sample = store.createRecord('sample', {\n            name,\n            body: 'original_body',\n            url,\n            spider\n        });\n        sample.save().then(() => {\n            this.get('webSocket')._sendPromise({\n                _command: 'save_html',\n                project: spider.get('project.id'),\n                spider: spider.get('id'),\n                sample: sample.get('id')\n            }).then(() => {\n                if (redirect) {\n                    sample.set('new', true);\n                    const routing = this.get('routing');\n                    routing.transitionTo('projects.project.spider.sample', [sample], {}, true);\n                }\n            });\n        });\n        return sample;\n    },\n\n    addItem(sample, redirect = false) {\n        return this._addItem({\n            sample\n        }, redirect);\n    },\n\n    addNestedItem(parentItem, redirect = false) {\n        return this._addItem({\n            parent: parentItem\n        }, redirect);\n    },\n\n    _addItem(attributes, redirect = false) {\n        const store = this.get('store');\n        const item = store.createRecord('item', attributes);\n        this.saveAnnotationAndRelatedSelectors(item).then(() => {\n            if (redirect) {\n                item.set('new', true);\n                const routing = this.get('routing');\n                routing.transitionTo('projects.project.spider.sample.data.item', [item], {}, true);\n            }\n        });\n        return item;\n    },\n\n    addAnnotation(item, element, attribute, redirect = false) {\n        if (!item) {\n            let activeItem;\n            let activeAnnotation;\n            if (activeItem = this.get('uiState.models.item')) {\n                item = activeItem;\n            } else if (activeAnnotation = this.get('uiState.models.annotation')) {\n                item = activeAnnotation.get('parent');\n            } else {\n                item = this.get('uiState.models.sample.items.lastObject');\n            }\n        }\n        const store = this.get('store');\n        const annotation = store.createRecord('annotation', {\n            parent: item\n        });\n        if (element) {\n            annotation.addElement(element);\n            attribute = attribute || getDefaultAttribute(element);\n            if (hasContentAttribute(element)) {\n                annotation.set('text_content', 'text-content');\n            }\n        }\n\n        if (attribute !== undefined) {\n            annotation.set('attribute', attribute);\n        }\n        this.saveAnnotationAndRelatedSelectors(annotation).then(() => {\n            if (redirect) {\n                annotation.set('new', true);\n            }\n            if (element) {\n                this.selectAnnotationElement(annotation, element, redirect);\n            } else if (redirect) {\n                this.selectAnnotation(annotation);\n            }\n        });\n        return annotation;\n    },\n\n    saveAnnotationAndRelatedSelectors(annotation) {\n        if (!annotation.get('ownerSample')) {\n          return new Ember.RSVP.Promise.resolve();\n        }\n\n        return annotation.get('ownerSample').then(sample =>\n            this.updateSampleSelectors(sample).then(() => {\n                const coalesce = [];\n                for (let child of sample.get('orderedChildren')) {\n                    if (child === annotation) {\n                        continue;\n                    }\n                    if (child.constructor.modelName === 'item') {\n                        coalesce.push({\n                            model: child,\n                            options: {\n                                partial: ['selector', 'repeatedSelector', 'siblings']\n                            }\n                        });\n                    } else if (child.constructor.modelName === 'annotation') {\n                        coalesce.push({\n                            model: child,\n                            options: {\n                                partial: ['selectionMode', 'selector', 'xpath']\n                            }\n                        });\n                    }\n                }\n\n                return annotation.save(coalesce.length ? {\n                    coalesce\n                } : undefined);\n            }));\n    },\n\n    addAnnotationTypeExtractor(annotation, type) {\n        const store = this.get('store');\n        const project = annotation.get('ownerSample.spider.project');\n        return project.get('extractors').then(extractors => {\n            const existing = extractors.find(extractor => {\n                return extractor.get('type') === 'type' && extractor.get('value') === type;\n            });\n            let extractorPromise;\n            if (existing) {\n                extractorPromise = Ember.RSVP.resolve(existing);\n            } else {\n                const extractor = store.createRecord('extractor', {\n                    project,\n                    type: 'type',\n                    value: type\n                });\n                extractorPromise = extractor.save();\n            }\n            return extractorPromise.then(extractor => {\n                annotation.get('extractors').pushObject(extractor);\n                return annotation.save().then(() => extractor);\n            });\n        });\n    },\n\n    addAnnotationRegexExtractor(annotation, extractor) {\n        annotation.get('extractors').pushObject(extractor);\n        return annotation.save().then(() => extractor);\n    },\n\n    addNewAnnotationRegexExtractor(annotation) {\n        const store = this.get('store');\n        const project = annotation.get('ownerSample.spider.project');\n        const extractor = store.createRecord('extractor', {\n            project,\n            type: 'regex',\n            value: '(.*)'\n        });\n        return extractor.save().then(extractor => {\n            extractor.set('new', true);\n            annotation.get('extractors').pushObject(extractor);\n            return annotation.save().then(() => extractor);\n        });\n    },\n\n    addFragment(startUrl) {\n        let emptyFragment = { type: 'fixed', value: '' };\n        startUrl.fragments.addObject(emptyFragment);\n    },\n\n    changeId(model, json) {\n        // HACK: Ember data does not support changing a record's id\n        // This mechanism bypasses this contraint.\n\n        const store = this.get('store');\n\n        let internalModel = model._internalModel;\n        const newId = json.data.id;\n\n        // Update internal store with internal model\n        const recordMap = store.typeMapFor(internalModel.type).idToRecord;\n        delete recordMap[internalModel.id];\n        recordMap[newId] = internalModel;\n\n        // Allows changing ED model id\n        internalModel.id = newId;\n        // Allows adapters to infer the correct url\n        internalModel._links.self = json.data.links.self;\n\n        model.set('id', newId);\n    },\n\n    changeSpiderName(spider) {\n        if (!spider.get('name') || spider.get('name') === spider.get('id')) {\n            return new Ember.RSVP.Promise(resolve => resolve({\n                data: {\n                    links: {self: spider._internalModel._links.self},\n                    id: spider.get('id')\n            }}));\n        }\n        const data = { name: spider.get('name') };\n        return this.get('api').post('rename', {\n            model: spider,\n            jsonData: data\n        });\n    },\n\n    changeAnnotationSource(annotation, attribute) {\n        if (annotation) {\n            annotation.set('attribute', attribute);\n            annotation.save();\n        }\n    },\n\n    removeSchema(schema) {\n        const currentSchema = this.get('uiState.models.schema');\n        if (schema === currentSchema) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project', [], {}, true);\n        }\n        schema.get('fields').then(fields => {\n            for (let field of (fields.currentState || [])) {\n                field.unloadRecord();\n            }\n            schema.destroyRecord();\n        });\n    },\n\n    removeField(field) {\n        const currentField = this.get('uiState.models.field');\n        if (field === currentField) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project.schema', [], {}, true);\n        }\n        field.destroyRecord();\n    },\n\n    removeSpider(spider) {\n        const currentSpider = this.get('uiState.models.spider');\n        if (spider === currentSpider) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project', [], {}, true);\n        }\n        spider.destroyRecord();\n    },\n\n    removeStartUrl(spider, url) {\n        spider.get('startUrls').removeObject(url);\n        spider.save();\n    },\n\n    replaceStartUrl(spider, oldUrl, newUrl) {\n        const urls = spider.get('startUrls');\n\n        let oldStartUrl = urls.filterBy('url', oldUrl)[0];\n        urls.removeObject(oldStartUrl);\n\n        if (!includesUrl(spider, newUrl)) {\n            urls.addObject(buildStartUrl({url: newUrl, type: 'url'}));\n        }\n        spider.save();\n    },\n\n    removeSample(sample) {\n        const currentSample = this.get('uiState.models.sample');\n        if (sample === currentSample) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project.spider', [], {}, true);\n        }\n        sample.destroyRecord();\n    },\n\n    removeItem(item) {\n        const currentItem = this.get('uiState.models.item');\n        const currentAnnotation = this.get('uiState.models.annotation');\n        if (item === currentItem || item.get('orderedAnnotations').includes(currentAnnotation)) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project.spider.sample.data', [], {}, true);\n        }\n        item.deleteRecord();\n        this.saveAnnotationAndRelatedSelectors(item);\n    },\n\n    removeAnnotation(annotation) {\n        this.get('_removeAnnotationTask').perform(annotation);\n    },\n\n    _removeAnnotationTask: task(function * (annotation) {\n        const currentAnnotation = this.get('uiState.models.annotation');\n        if (annotation === currentAnnotation) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project.spider.sample.data', [], {}, true);\n        }\n        annotation.deleteRecord();\n        yield this.saveAnnotationAndRelatedSelectors(annotation);\n    }).drop(),\n\n    removeAnnotationExtractor(annotation, extractor) {\n        annotation.get('extractors').removeObject(extractor);\n        annotation.save();\n    },\n\n    removeFragment(startUrl, fragment) {\n        startUrl.fragments.removeObject(fragment);\n    },\n\n    selectAnnotation(annotation) {\n        if (this.get('uiState.models.annotation') !== annotation) {\n            const routing = this.get('routing');\n            routing.transitionTo('projects.project.spider.sample.data.annotation',\n                [annotation], {}, true);\n        }\n    },\n\n    selectAnnotationElement(annotation, element, redirect = false) {\n        this.set('uiState.viewPort.selectedElement', element);\n        this.set('uiState.viewPort.originalSelectedElement', element);\n        this.set('uiState.viewPort.selectedModel', annotation);\n        if (redirect) {\n            this.selectAnnotation(annotation);\n        }\n    },\n\n    clearSelection() {\n        this.set('uiState.viewPort.selectedElement', null);\n        this.set('uiState.viewPort.originalSelectedElement', null);\n        const routing = this.get('routing');\n        const currentRouteName = routing.get('router.currentRouteName');\n        let nextRouteName;\n        if (currentRouteName.startsWith('projects.project.spider.sample')) {\n            nextRouteName = currentRouteName.split('.').slice(0, 5).join('.');\n        } else {\n            nextRouteName = 'projects.project.spider.sample';\n        }\n        routing.transitionTo(nextRouteName, [], {}, true);\n    },\n\n    addElementToAnnotation(annotation, element) {\n        annotation.addElement(element);\n        this.saveAnnotationAndRelatedSelectors(annotation).then(() => {\n            this.selectAnnotationElement(annotation, element);\n        });\n    },\n\n    removeElementFromAnnotation(annotation, element) {\n        annotation.removeElement(element);\n        this.selectAnnotation(annotation);\n        this.saveAnnotationAndRelatedSelectors(annotation);\n    },\n\n    updateSampleSelectors(sample) {\n        const selectorMatcher = this.get('selectorMatcher');\n        return createStructure(sample).then(structure => {\n            updateStructureSelectors(structure, selectorMatcher);\n            return null;\n        });\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/extracted-items.js",
    "content": "import Ember from 'ember';\nconst { computed } = Ember;\nimport { task, timeout } from 'ember-concurrency';\n\nconst SECOND = 1000;\nconst INITIAL_TIMEOUT = 2 * SECOND;\nconst MAX_TIMEOUT = 30 * SECOND;\n\n\nexport default Ember.Service.extend({\n    uiState: Ember.inject.service(),\n    webSocket: Ember.inject.service(),\n\n    items: [],\n    links: {},\n\n    isExtracting: false,\n    failedExtraction: false,\n    extractionTimeout: 0,\n\n    spider: computed.readOnly('uiState.models.spider'),\n    sample: computed.readOnly('uiState.models.sample'),\n    noSamples: computed.equal('spider.samples.length', 0),\n\n    init() {\n        this._super();\n        let ws = this.get('webSocket');\n\n        ws.addCommand('metadata', this, this._setItems);\n        ws.addCommand('extract_items', this, this._setExtraction);\n    },\n\n    activateExtraction() {\n        this.set('items', []);\n        this.set('extractionTimeout', 0);\n        this.set('isExtracting', true);\n        this.set('failedExtraction', false);\n        this.get('_extract').cancelAll();\n    },\n\n    failExtraction(msg) {\n        this._finishExtraction();\n        this.set('failedExtraction', true);\n        this.set('failedExtractionMsg', msg);\n    },\n\n    update() {\n        Ember.run.throttle(this, this._getitems, 300, false);\n    },\n\n    _getitems() {\n        const spiderId = this.get('spider.id');\n        if (spiderId) {\n            this.get('webSocket').send({\n                _command: 'extract_items',\n                project: this.get('uiState.models.project.id'),\n                spider: spiderId,\n                sample: this.get('sample.id')\n            });\n        }\n    },\n\n    _setExtraction(data) {\n        if (this.get('noSamples')) {\n            this.failExtraction('Samples are needed for extracting data.');\n            return;\n        }\n\n        this._updateItems(data);\n        this._updateExtraction(data);\n        this._setItems(data);\n    },\n\n    _extract: task(function * () {\n        const t = this.get('extractionTimeout');\n        yield timeout(t);\n        this.update();\n        this.set('extractionTimeout', (t === 0) ? INITIAL_TIMEOUT : t * 2);\n    }).drop(),\n\n    _setItems(data) {\n        this._startExtraction(data);\n\n        this.setProperties({\n            'links': data.links,\n            'changes': data.changes,\n            'type': data.type,\n            'changed': data.changed\n        });\n    },\n\n    _startExtraction(data) {\n        if (data.loaded && this.get('isExtracting')) {\n            this.get('_extract').perform();\n        }\n    },\n\n    _updateItems(data) {\n        const items = data.items;\n        const newItems = items && items.length >= this.get('items.length');\n\n        if (newItems) {\n            this.set('items', items);\n        }\n    },\n\n    _updateExtraction(data) {\n        const receivedItems = data.items && data.items.length > 0;\n        // Ensures the wait time is 254 seconds ~ 4 minutes\n        const exceedWait = this.get('extractionTimeout') > MAX_TIMEOUT;\n\n        if (receivedItems || exceedWait) {\n            this._finishExtraction();\n        } else {\n            this.get('_extract').perform();\n        }\n    },\n\n    _finishExtraction() {\n        this.set('isExtracting', false);\n        this.get('_extract').cancelAll();\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/notification-manager.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Service.extend({\n    banners: [],\n    notifications: [],\n\n    add(options) {\n        /*\n            properties:\n                title (optional),\n                message,\n                type (optional): info (default), warning, success, danger\n        */\n        return this.get('notifications').pushObject(options);\n    },\n\n    addBanner(options) {\n        return this.get('banners').addObject(options);\n    },\n\n    removeBanner(options) {\n        return this.get('banners').removeObject(options);\n    },\n\n    showNotification(title, message, type) {\n        if (title && !message) {\n            message = title;\n            title = null;\n        }\n        if (message) {\n            this.add({\n                title,\n                message,\n                type: type || 'info'\n            });\n        }\n    },\n\n    showSuccessNotification(title, message) {\n        this.showNotification(title, message, 'success');\n    },\n\n    showWarningNotification(title, message) {\n        this.showNotification(title, message, 'warning');\n    },\n\n    showErrorNotification(title, message) {\n        this.showNotification(title, message, 'danger');\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/overlays.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Service.extend({\n    counter: 0,\n\n    hasOverlays: Ember.computed.bool('counter'),\n\n    add() {\n        this.incrementProperty('counter');\n    },\n\n    remove() {\n        this.decrementProperty('counter');\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/position-monitor.js",
    "content": "import Ember from 'ember';\n\nexport default Ember.Service.extend({\n    elements: [],\n    timerId: null,\n\n    registerElement(element, context, readCallback, writeCallback) {\n        const options = {\n            element,\n            context,\n            readCallback,\n            writeCallback,\n            rects: null,\n            boundingRect: null\n        };\n        this.elements.push(options);\n        if (this.timerId === null) {\n            this.updateRaf();\n        }\n    },\n\n    unRegisterElement(element, context, readCallback, writeCallback) {\n        const elements = this.elements;\n        const match = elements.find(options =>\n            options.element === element && options.context === context &&\n            options.readCallback === readCallback && options.writeCallback === writeCallback);\n        if (match) {\n            elements.removeObject(match);\n            if (!elements.length) {\n                cancelAnimationFrame(this.timerId);\n                this.timerId = null;\n            }\n        }\n    },\n\n    updateRaf() {\n        if (this.timerId !== null) {\n            cancelAnimationFrame(this.timerId);\n        }\n        this.update();\n        this.timerId = requestAnimationFrame(this.updateRaf.bind(this));\n    },\n\n    update(elements) {\n        elements = Array.isArray(elements) ? elements : this.elements;\n        const updates = [];\n        // for performance first do DOM reads ...\n        elements.forEach(options => {\n            const {element, rects} = options;\n            const newRects = element.getClientRects();\n            let changed = false;\n            if (!rects || rects.length !== newRects.length) {\n                changed = true;\n            } else {\n                for (let i = 0; i < rects.length; i++) {\n                    const rect = rects[i];\n                    const newRect = newRects[i];\n                    if (newRect.top !== rect.top || newRect.bottom !== rect.bottom ||\n                        newRect.left !== rect.left || newRect.right !== rect.right) {\n                        changed = true;\n                        break;\n                    }\n                }\n            }\n            if (changed) {\n                options.rects = newRects;\n                options.boundingRect = element.getBoundingClientRect();\n                updates.push(options);\n            }\n        });\n        // ... then run callbacks which will perform additional DOM reads ...\n        updates.forEach(({element, context, readCallback, rects, boundingRect}) => {\n            if (readCallback) {\n                readCallback.call(context, rects, boundingRect, element);\n            }\n        });\n        // ... then run callbacks which will perform DOM writes\n        updates.forEach(({element, context, writeCallback, rects, boundingRect}) => {\n            writeCallback.call(context, rects, boundingRect, element);\n        });\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/saving-notification.js",
    "content": "import Ember from 'ember';\nconst { computed, inject: { service } } = Ember;\n\nexport default Ember.Service.extend({\n    extractedItems: service(),\n\n    counter: 0,\n    lastSaved: null,\n\n    isSaving: computed.bool('counter'),\n\n    start() {\n        this.get('extractedItems').activateExtraction();\n        this.incrementProperty('counter');\n    },\n\n    end() {\n        this.decrementProperty('counter');\n        const counter = this.get('counter');\n        if (!counter) {\n            this.set('lastSaved', new Date());\n        }\n        this.get('extractedItems').update();\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/selector-matcher.js",
    "content": "import Ember from 'ember';\n\nfunction nodesEqual(nodesA, nodesB) {\n    if (nodesA.length !== nodesB.length) {\n        return false;\n    }\n    for (let i = nodesA.length; i--;) {\n        if (nodesA[i] !== nodesB[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nexport default Ember.Service.extend(Ember.Evented, {\n    browser: Ember.inject.service(),\n\n    selectors: new Map(),\n    timerId: null,\n    updateInterval: 100,\n\n    register(selector, target, method) {\n        const elements = this.selectors.get(selector);\n        if (elements) {\n            if (method) {\n                method.call(target, elements);\n            } else {\n                target(elements);\n            }\n        } else {\n            this.selectors.set(selector, []);\n        }\n        if (this.timerId === null) {\n            this.scheduleUpdate(1);\n        }\n        this.on(...arguments);\n    },\n\n    unRegister(selector) {\n        this.off(...arguments);\n        if (!this.has(selector)) {\n            this.selectors.delete(selector);\n            if (!this.selectors.size) {\n                Ember.run.cancel(this.timerId);\n                this.timerId = null;\n            }\n        }\n    },\n\n    watch(target, method) {\n        this.on('changed', target, method);\n    },\n\n    unWatch(target, method) {\n        this.off('changed', target, method);\n    },\n\n    query(selector) {\n        const $document = this.get('browser.$document');\n        if ($document) {\n            let elements = this.selectors.get(selector);\n            if (!elements) {\n                return $document.find(selector).toArray();\n            } else if (!elements.length) {\n                elements = $document.find(selector).toArray();\n                this.selectors.set(selector, elements);\n            }\n            return elements;\n        } else {\n            return [];\n        }\n    },\n\n    scheduleUpdate(delay) {\n        Ember.run.cancel(this.timerId);\n        this.timerId = Ember.run.later(this, this.update, delay);\n    },\n\n    update() {\n        const $document = this.get('browser.$document');\n        if ($document) {\n            const updates = [];\n            this.selectors.forEach((currentElements, selector) => {\n                const newElements = $document.find(selector).toArray();\n                if (!nodesEqual(currentElements, newElements)) {\n                    this.selectors.set(selector, newElements);\n                    updates.push([selector, newElements]);\n                }\n            });\n\n            if (updates.length) {\n                updates.forEach(([selector, elements]) => {\n                    this.trigger(selector, elements);\n                });\n                this.trigger('changed', updates);\n            }\n        }\n        this.scheduleUpdate(this.updateInterval);\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/store.js",
    "content": "import DS from 'ember-data';\n\nexport default DS.Store.extend({\n    didSaveRecord(internalModel, dataArg) {\n        // update record id if data has different id\n        // TODO: support rollback of id change\n        const recordMap = this.typeMapFor(internalModel.type).idToRecord;\n        if (internalModel.id !== null && !(internalModel.id in recordMap)) {\n            for (let id of Object.keys(recordMap)) {\n                if (recordMap[id] === internalModel) {\n                    delete recordMap[id];\n                    recordMap[internalModel.id] = internalModel;\n                }\n            }\n        }\n\n        if (dataArg && dataArg.data && dataArg.data.links) {\n            this.updateRecordLinks(internalModel, dataArg.data.links);\n        }\n\n        return this._super(...arguments);\n    },\n\n    _load(data) {\n        const internalModel = this._super(...arguments);\n        this.updateRecordLinks(internalModel, data.links);\n        return internalModel;\n    },\n\n    updateRecordLinks(internalModel, links) {\n        internalModel._links = links || internalModel._links || {};\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/ui-state.js",
    "content": "import Ember from 'ember';\nimport { storageFor } from 'ember-local-storage';\n\nfunction computedActiveRoutes(mapping) {\n    const properties = Object.keys(mapping);\n    return Ember.computed(\n        'router.currentState', ...properties.map(key => mapping[key]), function() {\n            const activeRoutes = {};\n            const currentRouteName = this.get('router.currentRouteName');\n            properties.forEach(property => {\n                const routeProperty = mapping[property];\n                const routeName = this.get(`${routeProperty}.routeName`);\n                activeRoutes[property] = currentRouteName.startsWith(routeName);\n            });\n            return activeRoutes;\n        });\n}\n\nfunction computedRouteModels(mapping) {\n    const properties = Object.keys(mapping);\n    return Ember.computed(\n        'router.currentState', ...properties.map(key => mapping[key]), function() {\n            const models = {};\n            const currentRouteName = this.get('router.currentRouteName');\n            properties.forEach(property => {\n                const routeProperty = mapping[property];\n                const routeName = this.get(`${routeProperty}.routeName`);\n                const startsWithRoute = currentRouteName && currentRouteName.startsWith(routeName);\n                models[property] = startsWithRoute ?\n                    this.get(routeProperty).modelFor(routeName) :\n                    null;\n            });\n            return models;\n        });\n}\n\nexport default Ember.Service.extend({\n    models: computedRouteModels({\n        project: 'projectRoute',\n        spider: 'spiderRoute',\n        sample: 'sampleRoute',\n        item: 'itemRoute',\n        annotation: 'annotationRoute',\n        schema: 'schemaRoute',\n        field: 'fieldRoute'\n    }),\n    routes: computedActiveRoutes({\n        project: 'projectRoute',\n        spider: 'spiderRoute',\n        sample: 'sampleRoute',\n        data: 'dataRoute',\n        item: 'itemRoute',\n        annotation: 'annotationRoute',\n        schema: 'schemaRoute',\n        field: 'fieldRoute'\n    }),\n    slideMain: false,\n    selectedTools: storageFor('uiStateSelectedTools'),\n    collapsedPanels: storageFor('uiStateCollapsedPanels'),\n    viewPort: {\n        hoveredElement: null,\n        hoveredModels: [],\n        // When the selected element is changed by clicking a parent in\n        // the inspector, this is the original element that was selected\n        originalSelectedElement: null,\n        selectedElement: null,\n        selectedModel: null,\n        hoverOverlayColor: null\n    }\n});\n"
  },
  {
    "path": "portiaui/app/services/web-socket.js",
    "content": "import Ember from 'ember';\nimport config from '../config/environment';\nimport { logError, shortGuid } from '../utils/utils';\nconst { computed, run, Evented, Logger, RSVP, Service} = Ember;\n\nconst APPLICATION_UNLOADING_CODE = 4001;\nconst DEFAULT_RECONNECT_TIMEOUT = 5000;\nconst DEFAULT_MAX_RECONNECT_TIMEOUT = 60000;\n\nvar defaultUrl = function() {\n    var uri = URI.parse(config.SLYD_URL || window.location.protocol + '//' + window.location.host);\n    if (!/wss?/.test(uri.protocol)) {\n        uri.protocol = uri.protocol === 'https' ? 'wss' : 'ws';\n    }\n    uri.path = '/ws';\n    return URI.build(uri);\n};\n\nexport default Service.extend(Evented, {\n\n    closed: true,\n    opened: computed.not('closed'),\n    connecting: false,\n    ws: null,\n    heartbeat: null,\n    nextConnect: null,\n    reconnectTimeout: DEFAULT_RECONNECT_TIMEOUT,\n    deferreds: {},\n    url: defaultUrl(),\n    secondsUntilReconnect: 0,\n    reconnectImminent: computed('reconnectMessage', 'secondsUntilReconnect', function() {\n        return this.get('secondsUntilReconnect') < 2 &&\n               this.get('reconnectMessage').length === 0;\n    }),\n    reconnectComponent: null,\n    reconnectMessage: '',\n    showBanner: computed.or('closed', 'reconnectComponent'),\n\n    init: function(options) {\n        if(options) { this.setProperties(options); }\n\n        window.addEventListener('beforeunload', () => {\n            if(this.get('opened')) {\n                this.close(APPLICATION_UNLOADING_CODE);\n            }\n        });\n    },\n\n    connect: function() {\n        if(this.get('closed')) {\n            return this._createWebsocket();\n        }\n    },\n\n    _updateCountdownTimer: function() {\n        if(this.secondsUntilReconnect === 0 && this.get('countdownTid')) {\n            clearInterval(this.get('countdownTid'));\n            this.set('countdownTid', null);\n        } else if (this.secondsUntilReconnect > 0 && !this.get('countdownTid')) {\n            this.set('countdownTid', setInterval(() => {\n                this.decrementProperty('secondsUntilReconnect');\n            }, 1000));\n        }\n    }.observes('secondsUntilReconnect'),\n\n    _onclose(e) {\n        if (this.heartbeat) {\n            clearInterval(this.heartbeat);\n        }\n        this.set('closed', true);\n        this.set('connecting', false);\n\n        Logger.log('<Closed Websocket>');\n        if(e.code !== APPLICATION_UNLOADING_CODE && e.code !== 1000) {\n            if (!window.navigator.onLine) {\n                this.set('reconnectMessage',\n                    'You are currently offline, you will be reconnected as soon as possible, or ');\n                window.addEventListener('online', this.connect, false);\n                return;\n            }\n            var timeout = this._connectTimeout();\n            this.set('secondsUntilReconnect', Math.round(timeout/1000));\n            var next = run.later(this, this.connect, timeout);\n            this.set('reconnectTid', next);\n        }\n    },\n\n    _onmessage({data}) {\n        try {\n            data = JSON.parse(data);\n        } catch (err) {\n            return logError('Error parsing data returned by server: ' + err + '\\n' + data);\n        }\n        var command = data._command;\n        if (!command) {\n            return logError('Received response with no command: ' + JSON.stringify(data));\n        }\n        var deferred = data.id;\n        if (deferred in this.get('deferreds')) {\n            deferred = this.get('deferreds.' + deferred);\n            delete this.get('deferreds')[data.id];\n            if (data.error) {\n                var err = new Error(data.reason);\n                err.reason = {jqXHR: {responseText: data.reason}};\n                deferred.reject(err);\n                throw err;\n            } else {\n                deferred.resolve(data);\n            }\n        }\n        if (this.has(command)) {\n            this.trigger(command, data);\n        } else {\n            return Logger.debug('Received unknown command: ' + command);\n        }\n    },\n\n    _onopen() {\n        Logger.log('<Opened Websocket>');\n        this.set('closed', false);\n        this.set('reconnectMessage', '');\n        this.set('connecting', false);\n        this.set('reconnectTimeout', DEFAULT_RECONNECT_TIMEOUT);\n        this.heartbeat = setInterval(function() {\n            this.send({_command: 'heartbeat'});\n        }.bind(this), 20000);\n        window.removeEventListener('online', this.connect, false);\n    },\n\n    _createWebsocket: function() {\n        if (this.get('reconnectTid')) {\n            run.cancel(this.get('reconnectTid'));\n            this.set('reconnectTid', null);\n        }\n        this.set('secondsUntilReconnect', 0);\n        this.set('connecting', true);\n        var ws;\n        try {\n            ws = new WebSocket(this.get('url'));\n        } catch (err) {\n            Logger.log('Error connecting to server: ' + err);\n            this.set('connecting', false);\n            return;\n        }\n        ws.onclose = this._onclose.bind(this);\n        ws.onmessage = this._onmessage.bind(this);\n        ws.onopen = this._onopen.bind(this);\n        this.set('ws', ws);\n    },\n\n    _connectTimeout: function() {\n        var timeout = Math.max(this.get('reconnectTimeout'), DEFAULT_RECONNECT_TIMEOUT);\n        this.set('reconnectTimeout', Math.min(timeout*2, DEFAULT_MAX_RECONNECT_TIMEOUT));\n        return this.get('reconnectTimeout');\n    },\n\n    addCommand: function(/*command, target, method*/) {\n        this.on(...arguments);\n    },\n\n    removeCommand: function(/*command, target, method*/) {\n        this.off(...arguments);\n    },\n\n    close:function(code, reason) {\n        code = code || 1000;\n        reason = reason || 'application called close';\n        return this.get('ws').close(code, reason);\n    },\n\n    send: function(data) {\n        if (!this.get('closed') && data) {\n            if (typeof data !== 'string') {\n                try {\n                    data = JSON.stringify(data);\n                } catch (err) {\n                    return logError('Error serializing data: ' +  err);\n                }\n            }\n            return this.get('ws').send(data);\n        }\n    },\n\n    _sendPromise: function(data) {\n        var deferred = new RSVP.defer();\n        if (!data._meta) {\n            data._meta = this._metadata(null);\n        } else if (!data._meta.id) {\n            data._meta.id = shortGuid();\n        }\n        if(this.get('opened')) {\n            this.set(`deferreds.${data._meta.id}`, deferred);\n            this.send(data);\n        } else {\n            deferred.reject('Websocket is closed');\n        }\n        return deferred.promise;\n    },\n\n    _metadata: function(type) {\n        return {\n            // TODO: send current spider and project?\n            type: type,\n            id: shortGuid()\n        };\n    }\n});\n"
  },
  {
    "path": "portiaui/app/storages/cookies.js",
    "content": "import StorageObject from 'ember-local-storage/local/object';\n\nexport default StorageObject.extend();\n"
  },
  {
    "path": "portiaui/app/storages/page-loads.js",
    "content": "import StorageObject from 'ember-local-storage/local/object';\n\nexport default StorageObject.extend();\n"
  },
  {
    "path": "portiaui/app/storages/ui-state-collapsed-panels.js",
    "content": "import StorageObject from 'ember-local-storage/local/object';\n\nexport default StorageObject.extend();\n"
  },
  {
    "path": "portiaui/app/storages/ui-state-selected-tools.js",
    "content": "import StorageObject from 'ember-local-storage/local/object';\n\nconst ToolStorage = StorageObject.extend({\n    init() {\n        this._super(...arguments);\n\n        // clear the next click selection mode if magic tool is active\n        if (this.get('magicToolActive')) {\n            this.set('selectionMode', null);\n        }\n    }\n});\n\nToolStorage.reopenClass({\n    initialState() {\n        return {\n            magicToolActive: true,\n            selectionMode: null\n        };\n    }\n});\n\nexport default ToolStorage;\n"
  },
  {
    "path": "portiaui/app/styles/_animations.scss",
    "content": "@keyframes fadeOut {\n    99% {\n        display: block;\n        opacity: 0;\n    }\n}\n\n@keyframes hideDelay {\n    from {\n        display: inherit;\n    }\n\n    99% {\n        display: inherit;\n    }\n\n    to {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/_bootstrap_overrides.scss",
    "content": "@mixin tab-focus() {\n  /*\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n  */\n  outline: 0;\n}\n\n@mixin button-variant($color, $background, $border) {\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n\n  /*\n  &:focus,\n  &.focus {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 25%);\n  }\n  */\n  &:hover {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    color: $color;\n    background-color: darken($background, 10%);\n        border-color: darken($border, 12%);\n\n    &:hover,\n    &:focus,\n    &.focus {\n      color: $color;\n      background-color: darken($background, 17%);\n          border-color: darken($border, 25%);\n    }\n  }\n  &:active,\n  &.active,\n  .open > &.dropdown-toggle {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    //&:hover,\n    //&:focus,\n    //&.focus {\n    &:hover {\n      background-color: $background;\n          border-color: $border;\n    }\n  }\n\n  .badge {\n    color: $background;\n    background-color: $color;\n  }\n}\n"
  },
  {
    "path": "portiaui/app/styles/_icons.scss",
    "content": ".portia-icon {\n    display: inline-block;\n    line-height: 1;\n    font-style: normal;\n    font-variant: normal;\n    font-weight: normal;\n    font-size: inherit; // can't have font-size inherit on line above, so need to override\n    text-rendering: auto;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n@function encode-leading-hash($string) {\n    @if str-slice($string, 1, 1) == '#' {\n        $string: '%23' + str-slice($string, 2);\n    }\n    @return $string;\n}\n\n@function portia-spider-icon($foreground-color, $background-color) {\n    $foreground-color: encode-leading-hash(unquote($foreground-color));\n    $background-color: encode-leading-hash(unquote($background-color));\n    @return 'data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 19 14\"><path fill=\"' + $foreground-color + '\" d=\"m18.64 8.57l-2.87-4.82c-0.08-0.13-0.23-0.21-0.38-0.21s-0.3 0.08-0.38 0.21l-0.91 1.69-0.27-0.47 0.85-2.24c0.06-0.15 0.2-0.53 0.3-0.86 0.05-0.12 0.08-0.24 0.08-0.38v-0.08-0.02c0-0.77-0.62-1.39-1.39-1.39-0.75 0-1.35 0.59-1.38 1.33-0.26-0.11-0.54-0.17-0.85-0.17-1.29 0-1.95 1.27-1.96 1.29 0-0.02-0.66-1.29-1.95-1.29-0.3 0-0.59 0.06-0.85 0.17-0.02-0.74-0.63-1.33-1.37-1.33-0.77 0-1.39 0.62-1.39 1.39v0.03 0.08c0.01 0.13 0.04 0.26 0.08 0.38 0.1 0.33 0.24 0.71 0.3 0.86l0.85 2.24-0.27 0.46-0.89-1.68c-0.08-0.13-0.22-0.21-0.38-0.21-0.15 0-0.3 0.08-0.38 0.21l-2.87 4.82c-0.08 0.13-0.09 0.3-0.01 0.44l1.2 2.26c-0.01 0.04-0.01 0.08-0.01 0.12 0 0.32 0.26 0.57 0.57 0.57s0.57-0.26 0.57-0.57c0-0.24-0.15-0.45-0.36-0.53l-1.09-2.04 2.31-3.78 0.68 1.54-1.41 2.46c-0.09 0.14-0.09 0.32 0 0.47l1.06 1.71c0 0.03-0.01 0.05-0.01 0.08 0 0.32 0.26 0.57 0.57 0.57 0.32 0 0.57-0.26 0.57-0.57 0-0.26-0.17-0.47-0.39-0.54l-0.92-1.48 1.89-3.02 0.09 0.39c0.39 1.4 0.98 1.93 1.75 1.93 0.45 0 1.15-0.47 1.21-1.41 0.09-1.3 1.58-1.3 1.67 0 0.06 0.93 0.76 1.41 1.21 1.41 0.77 0 1.36-0.54 1.75-1.93 0.04-0.13 0.06-0.26 0.09-0.39l1.89 3.02-0.92 1.48c-0.23 0.08-0.39 0.29-0.39 0.54 0 0.32 0.26 0.57 0.57 0.57 0.32 0 0.57-0.26 0.57-0.57 0-0.03 0-0.05-0.01-0.08l1.06-1.71c0.09-0.14 0.09-0.32 0-0.47l-1.39-2.46 0.68-1.54 2.31 3.78-1.09 2.04c-0.21 0.09-0.36 0.29-0.36 0.53 0 0.32 0.26 0.57 0.57 0.57 0.32 0 0.57-0.26 0.57-0.57 0-0.04 0-0.08-0.01-0.12l1.2-2.26c0.12-0.15 0.12-0.32 0.04-0.45z\"/><g fill=\"' + $background-color + '\"><g fill-opacity=\"0.5\"><circle cy=\"1.52\" cx=\"13.69\" r=\".93\"/><circle cy=\"1.52\" cx=\"5.31\" r=\".93\"/><circle cy=\"3.57\" cx=\"7.54\" r=\"1.86\"/><circle cy=\"3.57\" cx=\"11.46\" r=\"1.86\"/></g><ellipse cy=\"2.54\" cx=\"7.72\" rx=\".74\" ry=\".29\"/><ellipse cy=\"2.54\" cx=\"11.64\" rx=\".74\" ry=\".29\"/></g></svg>';\n}\n\n.portia-icon-spider {\n    &:before {\n        content: '';\n        display: inline-block;\n        height: 14px;\n        width: 19px;\n        text-align: center;\n        vertical-align: middle;\n        background: transparent url(portia-spider-icon('#777', ''+$sidebar-background-color)) no-repeat center;\n    }\n\n    .btn-primary & {\n        &:before {\n            background-image: url(portia-spider-icon(''+$btn-primary-color, ''+$btn-primary-bg));\n        }\n    }\n\n    #side-bar h2 > & {\n        &:before {\n            background-image: url(portia-spider-icon(''+$list-heading-color, ''+$sidebar-background-color));\n        }\n    }\n}\n\n.portia-icon-number,\n.portia-icon-regex,\n.portia-icon-text {\n    position: relative;\n\n    &:before {\n        display: inline-block;\n        font-weight: bold;\n        transform: scaleX(0.5);\n        position: absolute;\n        left: -1000%;\n        right: -1000%;\n        text-align: center;\n    }\n\n    &:after {\n        content: ' ';\n        white-space: pre;\n    }\n}\n\n.portia-icon-number {\n    width: 1.7ch;\n\n    &:before {\n        content: '123';\n    }\n}\n\n.portia-icon-regex {\n    width: 2.1ch;\n\n    &:before {\n        content: '\\\\d*';\n        transform: scaleX(0.8);\n    }\n}\n\n.portia-icon-text {\n    width: 2.1ch;\n\n    &:before {\n        content: 'ABC';\n    }\n}\n\n%combined-icon {\n    position: relative;\n\n    &:after {\n        display: inline-block;\n        position: absolute;\n        width: 100%;\n        text-align: center;\n        vertical-align: middle;\n    }\n}\n\n.portia-icon-safe-html {\n    @extend .#{$fa-css-prefix};\n    @extend %combined-icon;\n    @extend .#{$fa-css-prefix}-code;\n\n    &:before {\n        display: inline-block;\n        transform: scale(0.8);\n    }\n\n    &:after {\n        content: $fa-var-circle-thin;\n        left: 0;\n        transform: scale(1.2);\n    }\n}\n\n.portia-icon-selector {\n    @extend .#{$fa-css-prefix};\n    @extend %combined-icon;\n    @extend .#{$fa-css-prefix}-circle;\n\n    &:after {\n        content: $fa-var-mouse-pointer;\n        left: 1px;\n        top: -1px;\n        color: $fa-inverse;\n        transform: scale(0.6);\n    }\n}\n\n%subscript-icon {\n    @extend %combined-icon;\n\n    &:after {\n        right: -3px;\n        bottom: -3px;\n        transform: scale(0.7);\n        text-shadow: -1px -1px 1px $sidebar-background-color,\n                       1px 1px 1px $sidebar-background-color,\n                      -1px 1px 1px $sidebar-background-color,\n                      1px -1px 1px $sidebar-background-color;\n    }\n}\n\n.portia-icon-generated-url {\n    @extend .#{$fa-css-prefix};\n    @extend %subscript-icon;\n    @extend .#{$fa-css-prefix}-globe;\n\n    &:after {\n        content: $fa-var-tasks;\n    }\n}\n\n.portia-icon-feed-url {\n    @extend .#{$fa-css-prefix};\n    @extend %subscript-icon;\n    @extend .#{$fa-css-prefix}-globe;\n\n    &:after {\n        content: $fa-var-rss;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/_lib_config.scss",
    "content": "$animation-time: .15s;\n$animation-easing: ease-in-out;\n$animation-easing-in: ease-in;\n$animation-easing-out: ease-out;\n\n// font awesome settings\n$fa-font-path: 'fonts';\n"
  },
  {
    "path": "portiaui/app/styles/_variables.scss",
    "content": "// sidebar\n$sidebar-width: 331px;\n\n// tree list\n$tree-list-row-height: 30px !default;\n$tree-list-icon-width: $tree-list-row-height !default;\n\n// panels\n$sidebar-background-color: $navbar-default-bg;\n$panel-padding-y: 10px;\n$panel-content-min-height: $tree-list-row-height * 3;\n$panel-min-height: $panel-content-min-height + $panel-padding-y * 2;\n\n// typography\n$space-width: 0.285em;\n\n// icons\n$pip-size: 3px;\n$icon-fade-opacity: 0.25;\n\n// colors\n$list-heading-color: $brand-danger;\n$pip-color: $panel-default-border;\n$panel-bg: darken($navbar-default-bg, 1.5%);\n$light-gray: #999;\n"
  },
  {
    "path": "portiaui/app/styles/app.scss",
    "content": "@import \"lib_config\";\n\n// Bootstrap\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins\";\n\n@import \"bootstrap_overrides\";\n\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/normalize\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/print\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/glyphicons\";\n\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/scaffolding\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/type\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/code\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/grid\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/tables\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/forms\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/buttons\";\n\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/component-animations\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/dropdowns\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/button-groups\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/input-groups\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/navs\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/navbar\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/pagination\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/pager\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/labels\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/badges\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/jumbotron\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/thumbnails\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/alerts\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/progress-bars\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/media\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/list-group\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/panels\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/wells\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/close\";\n\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/modals\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/tooltip\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/popovers\";\n//@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/carousel\";\n\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/utilities\";\n@import \"bower_components/bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities\";\n\n@import \"bower_components/font-awesome/scss/font-awesome\";\n\n@import \"variables\";\n@import \"generic\";\n@import \"document\";\n\n@import \"animations\";\n@import \"icons\";\n@import \"droplet\";\n\n@import \"layout/clickable\";\n@import \"layout/forms\";\n@import \"layout/full-page-content\";\n\n@import \"templates/application\";\n@import \"templates/projects\";\n@import \"templates/browsers\";\n\n@import \"components/animation-container\";\n@import \"components/browser-iframe\";\n@import \"components/browser-view-port\";\n@import \"components/combo-box\";\n@import \"components/dropdown-menu\";\n@import \"components/dropdown-widget\";\n@import \"components/extracted-item-table\";\n@import \"components/extracted-items-json-panel\";\n@import \"components/extractor-options\";\n@import \"components/help-icon\";\n@import \"components/icon-button\";\n@import \"components/input-with-clear\";\n@import \"components/inspector-panel\";\n@import \"components/list-item-badge\";\n@import \"components/list-item-combo\";\n@import \"components/list-item-editable\";\n@import \"components/list-item-icon\";\n@import \"components/list-item-selectable\";\n@import \"components/list-item-text\";\n@import \"components/notifications\";\n@import \"components/regex-pattern-list\";\n@import \"components/save-status\";\n@import \"components/select-box\";\n@import \"components/side-bar\";\n@import \"components/sliding-main\";\n@import \"components/show-links-legend\";\n@import \"components/tool-group\";\n@import \"components/tool-panel\";\n@import \"components/tooltip-container\";\n@import \"components/top-bar\";\n@import \"components/tree-list\";\n@import \"components/url-bar\";\n@import \"components/page-actions\";\n@import \"components/conflicts\";\n@import \"components/start-url-options\";\n@import \"components/fragment-options\";\n@import \"components/project-structure-spider-generation-url\";\n@import \"components/indentation-spacer\";\n@import \"components/dropdown-delete\";\n"
  },
  {
    "path": "portiaui/app/styles/components/animation-container.scss",
    "content": ".animation-container {\n    opacity: 1;\n    overflow: visible;\n    transition: opacity $animation-time $animation-easing $animation-time;\n\n    &.inline {\n        display: inline-block;\n    }\n\n    &.fade {\n        opacity: 0;\n        transition-delay: 0s;\n        pointer-events: none;\n    }\n}\n\n.animation-content {\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    &[style^=\"transform\"] {\n        transition: transform $animation-time $animation-easing;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/browser-iframe.scss",
    "content": ".browser-iframe {\n    filter: none;\n    opacity: 1;\n    transition: filter ($animation-time * 2) $animation-easing, opacity ($animation-time * 2) $animation-easing;\n\n    &.has-overlays {\n        opacity: .5;\n\n        @supports (filter: grayscale(100%)) {\n            filter: grayscale(100%);\n            opacity: 1;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/browser-view-port.scss",
    "content": ".browser-view-port {\n    position: relative;\n    flex: 1 1 auto;\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n    align-items: stretch;\n    margin: $grid-gutter-width;\n}\n\n.browser-start-page {\n    @extend .full-page-content;\n    position: absolute;\n    top: -$grid-gutter-width;\n    bottom: -$grid-gutter-width;\n    left: -$grid-gutter-width;\n    right: -$grid-gutter-width;\n    opacity: 1;\n    background-color: #fff;\n    transition: opacity $animation-time $animation-easing-out;\n    z-index: 2;\n\n    &.hide {\n        display: flex !important;\n        pointer-events: none;\n        opacity: 0;\n    }\n\n    form {\n        width: 50%;\n        margin: 2em auto;\n    }\n\n    .btn {\n        display: none;\n    }\n}\n\n$panel-heading-vertical-padding: nth($panel-heading-padding, 1);\n$panel-heading-horizontal-padding: nth($panel-heading-padding, 2);\n.browser-navigation {\n    flex: 0 0 auto;\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: center;\n    padding: ($panel-heading-vertical-padding / 2) ($panel-heading-horizontal-padding / 2);\n    z-index: 1;\n\n    .btn {\n        line-height: $line-height-computed;\n    }\n\n    .navbar-form {\n        padding: 0;\n        flex: 1 1 auto;\n    }\n\n    .browser-toolbar {\n        flex: 0 1 auto;\n        display: flex;\n        flex-direction: row;\n        flex-wrap: wrap;\n        align-items: center;\n        justify-content: center;\n        margin: 0;\n    }\n}\n\n.browser-navigation,\n.browser-toolbar {\n    > * {\n        flex: 0 0 auto;\n        margin: ($panel-heading-vertical-padding / 2) ($panel-heading-horizontal-padding / 2);\n    }\n}\n\n.browser-banner {\n    $browser-banner-height: $line-height-computed + $alert-padding * 2;\n\n    @extend .alert;\n    @extend .alert-warning;\n    flex: 0 0 auto;\n    height: $browser-banner-height;\n    margin-bottom: 0;\n    border-radius: 0;\n    border-top: none;\n    border-left: none;\n    border-right: none;\n    margin-top: 0;\n    transition: margin-top $animation-time $animation-easing;\n\n    &.hide {\n        display: block !important;\n        margin-top: -$browser-banner-height;\n    }\n}\n\n.frame-container {\n    flex: 1 1 auto;\n    overflow: hidden;\n    display: flex;\n    position: relative;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-items: stretch;\n    padding: 0;\n    @include border-bottom-radius($panel-border-radius - 1);\n\n    iframe {\n        width: 100%;\n        border: none;\n        flex: 1 1 auto;\n        overflow: auto;\n    }\n}\n\n.overlay-container {\n    position: absolute;\n    top: 0;\n    left: 0;\n    pointer-events: none;\n}\n\n.overlay-box {\n    position: relative;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n    transition: box-shadow $animation-time $animation-easing;\n    z-index: 0;\n}\n\n.overlay-box-background {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    opacity: 0.15;\n    border-radius: 2px;\n    transition: opacity ($animation-time / 2) $animation-easing-in, background-color $animation-time $animation-easing;\n}\n\n.overlay-icon {\n    color: #fff;\n    opacity: 0.8;\n    z-index: 1;\n    transition: opacity ($animation-time / 2) $animation-easing-in ($animation-time / 2), text-shadow $animation-time $animation-easing;\n\n    &.hide {\n        display: inline;\n        opacity: 0;\n    }\n}\n\n.overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1;\n    transition: opacity ($animation-time / 2) $animation-easing-in;\n\n    &.group-hovered,\n    &.group-selected,\n    .none-hovered.none-selected:not(.group-hovered):not(.group-selected) & {\n        .overlay-box-background {\n            opacity: 0.45;\n        }\n    }\n\n    &.hovered,\n    &.selected,\n    .none-hovered &.group-hovered,\n    .none-selected &.group-selected {\n        .overlay-box-background {\n            opacity: 0.8;\n        }\n    }\n\n    &.hovered.mode-add {\n        .overlay-box-background {\n            opacity: 0.65;\n        }\n    }\n\n    .browser-view-port:not(.none-selected) & {\n        &.hovered.mode-edit {\n            .overlay-box-background {\n                opacity: 0.65;\n            }\n        }\n    }\n\n    &.hovered,\n    &.group-hovered {\n        z-index: 1;\n    }\n\n    &.selected,\n    &.group-selected {\n        z-index: 2;\n    }\n}\n\n.hover-overlay {\n    z-index: 3;\n    transition: opacity $animation-time $animation-easing,\n                top 100ms $animation-easing-out,\n                bottom 100ms $animation-easing-out,\n                left 100ms $animation-easing-out,\n                right 100ms $animation-easing-out;\n\n    &.hide {\n        display: block !important;\n        opacity: 0;\n\n        .overlay-icon {\n            display: none;\n        }\n    }\n\n    .overlay-box-background {\n        opacity: 0.65;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/combo-box.scss",
    "content": ".combo-box {\n    .combo-input {\n        display: inline-flex;\n        flex-direction: row;\n        flex-wrap: nowrap;\n        align-items: stretch;\n        justify-content: space-between;\n        text-align: left;\n        color: $input-color !important;\n\n        $caret-container-width: ($caret-width-base + $padding-base-horizontal) * 2 + 1px;\n\n        input {\n            padding-right: $caret-container-width - 1px;\n        }\n        \n        .caret-container {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            width: $caret-container-width;\n            margin-left: -$caret-container-width;\n            cursor: pointer;\n        }\n\n        .caret {\n            margin: 0;\n            margin-right: 1px;\n        }\n    }\n\n    &:not(.open) {\n        input {\n            cursor: pointer;\n        }\n\n        .caret-container {\n            pointer-events: none;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/conflicts.scss",
    "content": "\n.topbar-conflicts {\n    margin-top: 7px;\n}\n\n.conflicts-text {\n    padding: 100px;\n}\n\n"
  },
  {
    "path": "portiaui/app/styles/components/dropdown-delete.scss",
    "content": "li.dropdown-delete {\n    cursor: pointer;\n    a {\n        color: $brand-danger;\n        &:hover { color: $brand-danger; }\n    }\n\n    &.is-confirmed {\n        background-color: $brand-danger;\n        a {\n            color: white;\n            &:hover {\n              background-color: $brand-danger;\n              color: white;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/dropdown-menu.scss",
    "content": ".dropdown-menu {\n    outline: 0;\n    margin: 2px 0;\n    max-height: 200px;\n    overflow-y: scroll;\n\n    > .focused:not(.active)\n    > a {\n        &,\n        &:hover,\n        &:focus {\n            text-decoration: none;\n            color: $dropdown-link-hover-color;\n            background-color: $dropdown-link-hover-bg;\n        }\n    }\n\n    .icon {\n        display: inline-block;\n        width: $tree-list-icon-width;\n        height: $line-height-computed;\n        margin-left: -6px;\n        margin-right: 10px;\n        line-height: $line-height-computed;\n        text-align: center;\n        vertical-align: middle;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/dropdown-widget.scss",
    "content": ".dropdown-menu-floating {\n    display: none;\n\n    &.open {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/extracted-item-table.scss",
    "content": ".extracted-item-table {\n    user-select: text;\n    &,\n    table {\n        margin-bottom: $line-height-computed;\n\n        &:last-of-type {\n            margin-bottom: 0;\n        }\n\n        &:not(:last-of-type) > tr,\n        tr:not(:last-of-type) {\n            > td {\n                > table {\n                    &:last-of-type {\n                        margin-bottom: $line-height-computed;\n                    }\n                }\n            }\n        }\n    }\n\n    table {\n        margin-left: 20px;\n\n        &:first-of-type {\n            margin-top: $line-height-computed;\n        }\n\n        &:not(.extracted-item-table):not(:last-of-type) {\n            margin-bottom: 0;\n        }\n    }\n\n    td {\n        vertical-align: top;\n        color: $text-color;\n\n        &:not(:last-child) {\n            padding-right: ($grid-gutter-width / 2);\n            color: $text-muted;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/extracted-items-json-panel.scss",
    "content": ".extracted-items-json {\n    padding: (($line-height-computed - 1) / 2);\n    margin: 0;\n    font-family: $font-family-monospace;\n    font-size: ($font-size-base - 1); // 14px to 13px\n    line-height: $line-height-base;\n    color: $text-muted;\n    unicode-bidi: embed;\n    word-break: break-all;\n    word-wrap: break-word;\n    user-select: text;\n\n    b {\n        font-weight: normal;\n        display: inline-block;\n        white-space: pre;\n        float: left;\n        word-spacing: 0px;\n        &.open-container {\n            white-space: normal;\n        }\n        &.new-line {\n            width: 100%;\n        }\n    }\n}\n\n.json-value {\n    white-space: normal;\n    word-break: normal;\n    display: inline-block;\n    color: $text-color;\n    float: left;\n    text-indent: -1ch;\n    margin: 0 0 0 1ch;\n}\n\n.json-key {\n    white-space: pre;\n    display: inline-block;\n    float:left;\n}\n\n.json-array-spacing {\n    white-space: pre;\n}\n\n.json-character-size {\n    position: fixed;\n    top: -10000px;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/extractor-options.scss",
    "content": ".extractor-options {\n    &.tree-list {\n        > .tree-list-item {\n            > .tree-list-item-row {\n                margin-top: $line-height-computed;\n                margin-bottom: ($line-height-computed / 2);\n            }\n\n            > .tree-list {\n                padding-left: 0;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/fragment-options.scss",
    "content": "form.fragment-form {\n    margin-bottom: 10px;\n}\n\n.fragment-form {\n    .compact-control {\n        padding-left: 8px;\n        padding-right: 8px;\n    }\n\n    .fragment-input {\n        width: 125px;\n        margin-left: 8px;\n        margin-right: 10px;\n    }\n\n    .fragment-type {\n        width: 75px;\n        .value {\n            max-width: calc(100% - 10px);\n        }\n    }\n\n    .fragment-left-half {\n        width: 52px;\n        margin-left: 8px;\n        margin-right: 4px;\n    }\n\n    .fragment-right-half {\n        width: 52px;\n        margin-left: 4px;\n        margin-right: 8px;\n    }\n}\n\n.fragment-action-icon {\n    position: absolute;\n    right: -10px;\n    line-height: 35px;\n}\n\n.fragment-error {\n    margin: 0 4px 0 4px;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/help-icon.scss",
    "content": ".icon-button {\n    &.help-icon {\n        pointer-events: auto;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/icon-button.scss",
    "content": ".icon-button {\n    line-height: inherit;\n    text-align: center;\n    outline: 0;\n    pointer-events: none;\n    transition: opacity $animation-time $animation-easing, color $animation-time $animation-easing;\n\n    .dropdown-menu & {\n        transition: 0s;\n    }\n\n    &.has-action {\n        pointer-events: auto;\n        cursor: pointer;\n    }\n\n    &.disabled {\n        color: $navbar-default-color !important;\n        cursor: not-allowed;\n    }\n\n    .dropdown-menu .disabled & {\n        color: $dropdown-link-disabled-color !important;\n        cursor: not-allowed;\n    }\n}\n\n.structure-list-details {\n    opacity: $icon-fade-opacity;\n    pointer-events: inherit;\n\n    &:hover,\n    .active > & {\n        opacity: 1;\n    }\n}\n\n.structure-list-add,\n.structure-list-play,\n.structure-list-publish {\n    color: $brand-success !important;\n}\n\n.structure-list-discard,\n.structure-list-error,\n.structure-list-remove {\n    color: $brand-danger !important;\n}\n\n.structure-list-warning {\n    color: $brand-warning !important;\n}\n\n.icon-button-help {\n    color: $brand-info !important;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/indentation-spacer.scss",
    "content": ".indentation-spacer {\n    display: inline-block;\n    min-width: 20px;\n    &.is-small {\n        width: 10px;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/input-with-clear.scss",
    "content": ".input-with-clear {\n    input {\n        padding-right: 34px;\n    }\n}\n\n.clear-input {\n    position: absolute;\n    right: 11px;\n    top: 0;\n    bottom: 0;\n    height: 14px;\n    line-height: 14px;\n    margin: auto;\n    color: #ccc;\n    z-index: 3;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/inspector-panel.scss",
    "content": ".inspector {\n    $inspector-line-padding-y: ($tree-list-row-height - $line-height-computed) / 2;\n    overflow: hidden;\n\n    .path-item {\n        border-radius: 5px;\n        padding: 0 3px;\n        font-size: 0.9em;\n        font-family: monospace;\n    }\n\n    .path-selected {\n        background-color: #337AB7;\n        color: #fff;\n    }\n\n    table {\n        width: 100%;\n    }\n\n    tr {\n        cursor: pointer;\n    }\n\n    > div > div,\n    td {\n        padding: $inspector-line-padding-y 0;\n    }\n\n    td {\n        vertical-align: top;\n        color: $text-color;\n\n        &:first-child {\n            padding-right: ($grid-gutter-width / 2);\n            color: $text-muted;\n            white-space: nowrap;\n        }\n\n        &:last-child {\n            position: relative;\n            width: 100%;\n        }\n\n        > div {\n            display: flex;\n            flex-direction: row;\n            flex-wrap: nowrap;\n\n            > div {\n                &:first-child {\n                    flex: 1 1 auto;\n                    position: relative;\n                }\n\n                &:last-child {\n                    padding-left: $line-height-computed;\n                }\n            }\n        }\n\n        .value {\n            position: absolute;\n            left: 0;\n            right: 0;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n    }\n\n    .structure-list-add {\n        opacity: 1;\n        text-align: right;\n    }\n\n    .empty-notice {\n        height: $panel-content-min-height;\n        line-height: $panel-content-min-height;\n        margin: 0;\n        padding: 0;\n        text-align: center;\n        vertical-align: middle;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-badge.scss",
    "content": ".list-item-badge {\n    display: inline-block;\n    flex: 0 0 20px;\n    text-align: center;\n\n    .badge {\n        vertical-align: baseline;\n        max-width: 26px;\n        transition: background-color $animation-time $animation-easing;\n    }\n\n    .badge-centered {\n        display: inline-block;\n        margin: 0 -1000%;\n        white-space: nowrap;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-combo.scss",
    "content": ".list-item-combo {\n    flex: 1 1 auto;\n    min-width: 0;\n\n    .list-item-editable + &,\n    & + & {\n        flex-grow: 0;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-editable.scss",
    "content": ".list-item-editable {\n    display: inline-flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-items: center;\n    flex: 1 1 auto;\n    min-width: 90px;\n    margin-left: 5px;\n\n    > span {\n        flex: 0 1 auto;\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n    .fa-pencil {\n        flex: 0 0 $tree-list-icon-width;\n        color: $navbar-default-color;\n        cursor: pointer;\n        opacity: $icon-fade-opacity;\n        transition: opacity $animation-time $animation-easing;\n        text-align: center;\n    }\n\n    &:hover {\n        .fa-pencil {\n            opacity: 1;\n        }\n    }\n\n    input {\n        flex: 1 1 100%;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-icon.scss",
    "content": ".list-item-icon {\n    width: $tree-list-icon-width;\n    flex: 0 0 $tree-list-icon-width;\n\n    &.has-action {\n        opacity: $icon-fade-opacity;\n\n        &.active,\n        .dropdown.open &,\n        &:hover:not(.disabled) {\n            opacity: 1;\n        }\n    }\n\n    .tree-list-item-content & {\n        height: $tree-list-row-height;\n        line-height: $tree-list-row-height;\n    }\n\n    .tree-list-item-content a & {\n        color: $navbar-default-color;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-selectable.scss",
    "content": ".list-item-selectable {\n    display: inline-flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-items: center;\n    flex: 0 1 auto;\n\n    .list-item-icon + &,\n    .list-item-badge + & {\n        flex-grow: 1;\n    }\n\n    &:not(.selecting) {\n        > span {\n            flex: 0 1 auto;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        .caret {\n            flex: 0 0 auto;\n            margin: 0 (($tree-list-icon-width - 8px) / 2);\n            color: $navbar-default-color;\n            opacity: $icon-fade-opacity;\n        }\n\n        &:hover {\n            .caret {\n                opacity: 1;\n            }\n        }\n    }\n\n    .select-box {\n        min-width: 60px;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/list-item-text.scss",
    "content": ".list-item-text {\n    display: inline;\n    flex: 1 1 auto;\n    padding: 0;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n\n    &.title {\n        text-transform: uppercase;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/notifications.scss",
    "content": ".notifications {\n    $notification-top: $grid-gutter-width / 2;\n\n    position: absolute;\n    top: $notification-top;\n    width: 100%;\n    pointer-events: none;\n    z-index: 3;\n\n    .notification {\n        margin-left: auto;\n        margin-right: auto;\n        max-width: 800px;\n\n        &:first-of-type {\n            margin-top: -15px;\n            border-top: none;\n            border-top-left-radius: 0;\n            border-top-right-radius: 0;\n        }\n\n        > button {\n            pointer-events: auto;\n            outline: 0;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/page-actions.scss",
    "content": ""
  },
  {
    "path": "portiaui/app/styles/components/project-structure-spider-generation-url.scss",
    "content": ".generated-url {\n    color: $navbar-default-color;\n    margin-left: $space-width;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/regex-pattern-list.scss",
    "content": ".regex-pattern-list {\n    .new-pattern {\n        > div {\n            display: flex;\n            flex-direction: row;\n            flex-wrap: nowrap;\n            align-items: center;\n        }\n\n        i {\n            width: $tree-list-row-height;\n            flex: 0 0 $tree-list-row-height;\n            height: $tree-list-row-height;\n            line-height: $tree-list-row-height;\n            text-align: center;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/save-status.scss",
    "content": "@keyframes saving-blink {\n    0% {\n        opacity: .2;\n    }\n    50% {\n        opacity: 1;\n    }\n    100% {\n        opacity: .2;\n    }\n}\n\n.save-status {\n    .label {\n        display: inline-block;\n        min-width: 60%;\n        cursor: default;\n        transition: background-color ($animation-time * 2) $animation-easing;\n\n        span {\n            animation-name: saving-blink;\n            animation-duration: 1.4s;\n            animation-iteration-count: infinite;\n            animation-fill-mode: both;\n\n            &:nth-child(2) {\n                animation-delay: .2s;\n            }\n\n            &:nth-child(3) {\n                animation-delay: .4s;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/select-box.scss",
    "content": ".select-box {\n    .btn-default {\n        text-align: left;\n        color: $input-color !important;\n        background-color: $input-bg !important;\n\n        .value {\n            float: left;\n            max-width: calc(100% - 20px);\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        .caret {\n            float: right;\n            margin: (($line-height-computed - $caret-width-base) / 2) 0;\n        }\n    }\n\n    &.open {\n        .btn-default {\n            border-color: $input-border-focus !important;\n            $color-rgba: rgba(red($input-border-focus), green($input-border-focus), blue($input-border-focus), .6);\n            @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba !important);\n        }\n    }\n\n    &:not(.open) {\n        .btn-default {\n            &:focus {\n                @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/show-links-legend.scss",
    "content": "#show-links-legend {\n    .list-item-badge {\n        margin-right: $space-width;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/side-bar.scss",
    "content": "#side-bar {\n    width: $sidebar-width;\n    flex: 0 0 auto;\n    background-color: $sidebar-background-color;\n    border-right: 1px solid $navbar-default-border;\n    padding: $navbar-padding-horizontal $navbar-padding-horizontal ($navbar-padding-horizontal + 10px);\n    overflow-y: auto;\n    overflow-x: hidden;\n    z-index: 1;\n\n    > div {\n        position: relative;\n\n        > .tree-list {\n            margin-bottom: ($tree-list-row-height / 2);\n\n            &:last-child {\n                margin-bottom: 0;\n            }\n\n            > .animation-content {\n                > .tree-list-item {\n                    > .animation-content {\n                        > .tree-list {\n                            > .animation-content {\n                                width: 100%;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    .title {\n        display: flex;\n        line-height: $tree-list-row-height;\n\n        .help-icon {\n            margin-left: $space-width;\n        }\n\n        .animation-container {\n            &.inline {\n                vertical-align: bottom;\n            }\n        }\n    }\n\n    .icon {\n        &.animation-container {\n            flex: 0 0 auto;\n            width: $tree-list-icon-width;\n            height: $tree-list-row-height;\n        }\n\n        a {\n            display: inline-block;\n        }\n    }\n\n    .help {\n        .tree-list-item-row {\n            height: auto;\n        }\n\n        .alert {\n            @extend .small;\n            @extend .text-justify;\n\n            margin: 0;\n            width: 100%;\n        }\n    }\n\n    .project-listing {\n        justify-content: space-between;\n    }\n\n    .project-changes {\n        text-transform: none;\n    }\n}\n\n#options-panels,\n#tool-panels {\n    flex: 0 0 auto;\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n    align-items: stretch;\n    width: $sidebar-width - $grid-gutter-width;\n    transition: opacity $animation-time $animation-easing;\n\n    &:after {\n        content: '';\n        flex: 0.0000001 1 auto;\n        background-color: $panel-bg;\n    }\n}\n\n#tool-panels {\n    margin-right: $grid-gutter-width;\n\n    main & {\n        opacity: 1;\n        transition-delay: $animation-time;\n    }\n\n    main.slide-right & {\n        opacity: 0;\n        transition-delay: 0s;\n    }\n}\n\n#options-panels {\n    z-index: -1;\n    margin-left: $grid-gutter-width - $sidebar-width;\n\n    main & {\n        opacity: 0;\n        transition-delay: 0s;\n    }\n\n    main.slide-right & {\n        opacity: 1;\n        transition-delay: $animation-time;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/sliding-main.scss",
    "content": "#window {\n    overflow: hidden;\n}\n\nmain {\n    transition: transform $animation-time $animation-easing;\n    transform: none;\n\n    &.slide-right {\n        transform: translateX($sidebar-width);\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/start-url-options.scss",
    "content": ".start-url-list {\n    overflow-y: auto;\n    min-height: 200px;\n    margin-bottom: 5px;\n}\n\n.start-url-list-title {\n    margin-bottom: 0;\n}\n\n.start-url-generation-list {\n    p {\n        white-space: nowrap;\n        user-select: text;\n        position: relative;\n        margin: 0;\n    }\n}\n\n.fragments-title {\n    line-height: 30px;\n    margin-bottom: 10px;\n    display: inline-block;\n    color: $navbar-default-color;\n}\n\n#add-fragment-button {\n    position: absolute;\n    top: 0;\n    right: 0;\n    line-height: 30px;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/tool-group.scss",
    "content": ".tool-group {\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n    align-items: stretch;\n    flex: 0 1 auto;\n    overflow: auto;\n    width: 100%;\n    margin-top: $grid-gutter-width;\n    min-height: 0;\n    background-color: $navbar-default-bg;\n    border: 1px solid $navbar-default-border;\n    border-radius: $panel-border-radius;\n\n    &:last-child {\n        flex: 0.0001 0 auto;\n        margin-bottom: $grid-gutter-width;\n        max-height: none !important;\n    }\n\n    &.collapsed {\n        flex-grow: 0 !important;\n        flex-shrink: 0 !important;\n        min-height: 0 !important;\n        overflow: hidden;\n    }\n\n    .tool-group-close {\n        padding: 0 10px;\n    }\n}\n\n.tool-group-header {\n    background-color: $panel-bg;\n\n    > .nav-tabs {\n        i {\n            padding: 10px 3px;\n        }\n        border-color: $navbar-default-border;\n\n        > li {\n\n            > a {\n                margin-top: -1px;\n\n                &:hover {\n                    border-color: $navbar-default-border;\n                }\n            }\n\n            &.active {\n                > a {\n                    background-color: $navbar-default-bg;\n                    border-color: $navbar-default-border $navbar-default-border transparent $navbar-default-border;\n                }\n            }\n\n            &:not(.active) {\n                > a {\n                    cursor: pointer !important;\n                }\n            }\n\n            &:first-of-type {\n                > a {\n                    margin-left: -1px;\n                }\n            }\n        }\n\n        > .tool-group-icons {\n            > a {\n                display: inline-block;\n                margin-right: 0;\n                margin-left: 2px;\n\n                &,\n                &:hover,\n                &:focus {\n                    color: $nav-tabs-active-link-hover-color;\n                    border-color: $navbar-default-border transparent;\n                }\n            }\n        }\n    }\n\n    .collapsed & {\n        > .nav-tabs {\n            > li {\n                > a {\n                    cursor: pointer !important;\n                }\n            }\n        }\n    }\n}\n\n.tool-group-collapse {\n    .caret {\n        margin: 0 1px;\n        transition: transform $animation-time $animation-easing;\n    }\n}\n\n.tool-group-content {\n    flex: 1 1 100%;\n    overflow: auto;\n    //transition: opacity $animation-time $animation-easing $animation-time / 3, flex-basis $animation-time / 3 $animation-easing;\n    display: block;\n    min-height: $panel-min-height;\n    opacity: 1;\n}\n\n.tool-group {\n    &.collapsed {\n        .nav-tabs {\n            border-bottom-width: 0;\n\n            li {\n                margin-bottom: 0;\n\n                a {\n                    margin-bottom: -1px;\n                    border-radius: $border-radius-base;\n                }\n\n                &.active > a {\n                    border-color: $navbar-default-border;\n                }\n            }\n        }\n\n        .tool-group-collapse {\n            .caret {\n                transform: rotate(90deg);\n            }\n        }\n\n        .tool-group-content {\n            //transition: opacity $animation-time $animation-easing, flex-basis $animation-time / 3 $animation-easing $animation-time;\n            animation: fadeOut $animation-time $animation-easing;\n            display: none;\n            opacity: 0;\n            //flex-basis: 0%;\n            //animation: hideDelay $animation-time $animation-easing forwards;\n            //animation-direction: normal;\n        }\n    }\n}\n\n#actions-group,\n#inspector-group {\n    flex-shrink: 0;\n}\n\n#extracted-items-group {\n    flex-shrink: 10000;\n\n    .nav-tabs {\n        .badge {\n            vertical-align: baseline;\n        }\n    }\n}\n\n#options-panels {\n    .tool-group {\n        flex-shrink: 10000;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/tool-panel.scss",
    "content": ".tool-panel {\n    padding-top: $panel-padding-y;\n    padding-bottom: $panel-padding-y;\n\n    > div {\n        position: relative;\n    }\n\n    h3 {\n        display: inline-block;\n        margin-top: 0;\n        color: $navbar-default-color;\n        font-size: $font-size-base;\n        line-height: $tree-list-row-height;\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        text-transform: uppercase;\n    }\n\n    form {\n        margin-bottom: $line-height-computed;\n\n        label {\n            font-weight: normal;\n        }\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/tooltip-container.scss",
    "content": ".tooltip-content {\n    @extend .tooltip-inner;\n\n    > p {\n        margin: ($line-height-computed / 2) 0 0;\n        text-align: left;\n\n        &.first {\n            margin-top: 0;\n        }\n    }\n\n    em {\n        font-style: normal;\n        text-decoration: underline;\n    }\n\n    .tooltip-wide > & {\n        max-width: $tooltip-max-width * 1.5;\n    }\n}\n\n.tooltip-for {\n    pointer-events: auto;\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/top-bar.scss",
    "content": "#top-bar {\n    margin-bottom: 0;\n    z-index: 998;\n\n    &:before,\n    &:after {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/tree-list.scss",
    "content": ".tree-list {\n    display: block;\n    margin-bottom: 0;\n    z-index: 0;\n\n    > .animation-content {\n        padding-left: 0;\n        width: 100%;\n        left: auto;\n        right: 0;\n\n        & & {\n            width: calc(100% - #{$tree-list-icon-width / 2});\n        }\n    }\n}\n\n.tree-list-item {\n    display: block;\n\n    > .animation-content {\n        width: 100%;\n    }\n}\n\n.tree-list-item-row {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-items: center;\n    height: $tree-list-row-height;\n}\n\n.tree-list-item-content {\n    position: relative;\n    flex: 1 1 auto;\n    min-width: 0;\n    color: $navbar-default-color;\n\n    > a:first-child {\n        flex: 1 1 auto;\n        display: flex;\n        align-items: center;\n        outline: none;\n        overflow: hidden;\n\n        &:hover,\n        &:focus {\n            text-decoration: none;\n        }\n\n        &:before {\n            content: '';\n            display: block;\n            position: absolute;\n            top: 0;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            z-index: -1;\n            background-color: $navbar-default-link-active-bg;\n            border-radius: 4px;\n            opacity: 0;\n            transition: opacity $animation-time $animation-easing;\n        }\n\n        &.active,\n        &:hover {\n            &:before {\n                opacity: 1;\n            }\n\n        }\n    }\n}\n\n.tree-list-item-content {\n    &,\n    & > a:only-child {\n        display: flex;\n        flex-direction: row;\n        flex-wrap: nowrap;\n        align-items: center;\n        min-width: 0;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/components/url-bar.scss",
    "content": "#url-bar {\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n\n    input {\n        flex: 1 1 auto;\n        z-index: 1;\n\n        &:focus {\n            z-index: 3;\n        }\n    }\n\n    .btn {\n        line-height: $line-height-computed;\n\n        &:focus {\n            outline: none;\n        }\n    }\n\n\n    .btn-mode {\n        z-index: 2;\n        transition: background-color $animation-time $animation-easing, border-color $animation-time $animation-easing;\n        cursor: default;\n        @include box-shadow(none);\n\n        > i {\n            width: 1em;\n        }\n    }\n\n    .btn-mode-navigation {\n          color: $btn-primary-color;\n          background-color: $btn-primary-bg;\n          border-color: $btn-primary-border;\n    }\n\n    .btn-mode-data-annotation {\n          color: $btn-success-color;\n          background-color: $btn-success-bg;\n          border-color: $btn-success-border;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/document.scss",
    "content": "body {\n    user-select: none;\n}\n"
  },
  {
    "path": "portiaui/app/styles/droplet.scss",
    "content": ".droplet {\n  width: 30px;\n  height: 30px;\n  margin: 100px auto;\n  position: absolute;\n  top: -100px;\n  right: 0;\n  z-index: -1;\n  background-color: #333;\n\n  border-radius: 100%;\n  -webkit-animation: sk-scaleout 2s infinite ease-in-out;\n  animation: sk-scaleout 2s infinite ease-in-out;\n}\n\n@-webkit-keyframes sk-scaleout {\n  0% { -webkit-transform: scale(0) }\n  100% {\n    -webkit-transform: scale(1.0);\n    opacity: 0;\n  }\n}\n\n@keyframes sk-scaleout {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  } 100% {\n    -webkit-transform: scale(1.0);\n    transform: scale(1.0);\n    opacity: 0;\n  }\n}\n"
  },
  {
    "path": "portiaui/app/styles/generic.scss",
    "content": ".txt-describe {\n    color: $light-gray;\n}\n\n.spaced {\n    margin: 20px 0 20px 0;\n}\n\n.has-error {\n    border-color: #a94442;\n}\n\n.mid-align {\n    text-align: center;\n}\n\n.one-half-x {\n    font-size: 1.5em;\n}\n\n.twice-x {\n    font-size: 2em;\n}\n\n.full-width {\n    width: 100%;\n}\n\n.very-opaque {\n    opacity: 0.3;\n}\n\n.flex-center {\n    justify-content: center;\n}\n\n.with-cursor {\n  cursor: pointer;\n}\n"
  },
  {
    "path": "portiaui/app/styles/layout/_clickable.scss",
    "content": ".clickable,\n[data-ember-action] {\n    cursor: pointer;\n}\n\n.ignore-active {\n    &.active {\n       pointer-events: none;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/layout/_forms.scss",
    "content": ".input-list-item {\n    $tree-list-caret-padding-y: ($tree-list-row-height - $line-height-computed) / 2;\n    height: $tree-list-row-height - 4px;\n    padding: ($padding-base-vertical - $tree-list-caret-padding-y) $padding-xs-horizontal;\n}\n"
  },
  {
    "path": "portiaui/app/styles/layout/_full-page-content.scss",
    "content": ".full-page-content {\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n    justify-content: center;\n    align-items: center;\n    align-content: center;\n\n    img[alt=\"Portia logo\"] {\n        display: block;\n        flex: 0 0 auto;\n        width: 25%;\n        margin: 0 auto;\n    }\n\n    > h3 {\n        margin: 2em auto 0;\n    }\n\n    > p {\n        margin: 1em auto 0;\n    }\n\n    &:before,\n    &:after {\n        content: '';\n        display: block;\n    }\n\n    &:before {\n        flex: 1 1 auto;\n    }\n\n    &:after {\n        flex: 2 1 auto;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/templates/application.scss",
    "content": "#window {\n    height: 100vh;\n    display: flex;\n    flex-direction: column;\n    flex-wrap: nowrap;\n\n    > section {\n        position: relative;\n        flex: 1 1 auto;\n        display: flex;\n        flex-direction: row;\n        flex-wrap: nowrap;\n        overflow-x: hidden;\n        overflow-y: auto;\n    }\n}\n\nmain {\n    order: 0;\n    flex: 1 1 auto;\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    align-items: stretch;\n}\n"
  },
  {
    "path": "portiaui/app/styles/templates/browsers.scss",
    "content": ".browser-list-container {\n    @extend .full-page-content;\n\n    margin: 0 auto;\n    margin-top: 20px;\n    padding: 0 40px;\n    text-align: center;\n\n    h3 { margin-top: 0; }\n}\n\n.browser-p {\n    font-size: 1.3em;\n    color: #777;\n}\n\n.browser-mg {\n    margin: none;\n    margin-left: 20px;\n    margin-right: 20px;\n}\n\n.browser-logos {\n    display: flex;\n    margin-top: 26px;\n    max-height: 120px;\n}\n\n.browser-logo {\n    width: 120px;\n    height: 120px;\n    transition: 0.2s;\n    &:hover {\n        transform: translateY(-8px);\n    }\n}\n\n.no-decoration {\n    &:focus, &:hover {\n        text-decoration: none;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/styles/templates/projects.scss",
    "content": "$project-list-max-width: 300px;\n.project-list-container {\n    @extend .full-page-content;\n\n    width: calc(100% - #{$sidebar-width * 2});\n    margin: 0 auto;\n    text-align: center;\n    > * {\n        width: 100%;\n    }\n}\n\n.project-list {\n    $project-list-max-width: 300px;\n    $project-list-max-height: 200px;\n\n    margin: 3em auto 0;\n    max-width: $project-list-max-width;\n    min-height: 0;\n\n    input {\n        border-radius: 0;\n        border-color: $list-group-border;\n    }\n\n    .input-group {\n        > .form-control {\n            width: $project-list-max-width;\n        }\n    }\n\n    .list-group-item {\n        border: none;\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n    .project-list-items {\n        width: $project-list-max-width;\n        max-height: $project-list-max-height;\n        overflow: scroll;\n        border: 1px solid $list-group-border;\n        border-top: none;\n    }\n\n    &.project-within-dropdown {\n        $project-list-max-width: 180px;\n        $project-list-max-height: 100px;\n\n        margin: 5px auto;\n        max-width: $project-list-max-width;\n\n        .input-group > .form-control {\n            width: $project-list-max-width;\n        }\n\n        .project-list-items {\n            width: $project-list-max-width;\n            max-height: $project-list-max-height;\n        }\n\n        .list-group-item {\n            cursor: pointer;\n            &:hover {\n                color: #555;\n                background-color: #f5f5f5;\n            }\n        }\n    }\n}\n\n.project-create-input {\n    width: $project-list-max-width;\n}\n\n.project-list.not-searchable {\n    .list-group-item {\n        border: 1px solid $list-group-border;\n    }\n\n    .project-list-items {\n        border: none;\n    }\n}\n"
  },
  {
    "path": "portiaui/app/templates/application.hbs",
    "content": "<section id=\"window\">\n    {{loading-slider isLoading=loading duration=200}}\n    <nav id=\"top-bar\" class=\"navbar navbar-default navbar-static-top\">\n        <div class=\"navbar-header navbar-left\">\n            {{partial 'branding'}}\n        </div>\n        <ul class=\"nav navbar-nav navbar-left\">\n            {{scrapinghub-links}}\n        </ul>\n        <div class=\"navbar-right\">\n            {{outlet 'top-bar'}}\n        </div>\n    </nav>\n\n    <section>\n        {{notification-container}}\n        {{outlet 'side-bar'}}\n        {{#sliding-main}}\n            {{outlet 'options-panels'}}\n            {{outlet 'main'}}\n            {{outlet 'tool-panels'}}\n        {{/sliding-main}}\n    </section>\n</section>\n"
  },
  {
    "path": "portiaui/app/templates/branding.hbs",
    "content": "<span class=\"navbar-brand\">\n    Portia <span class=\"label label-danger\">beta</span>\n</span>\n"
  },
  {
    "path": "portiaui/app/templates/browsers.hbs",
    "content": "<div class='browser-list-container'>\n    <h3>Unfortunately your browser doesn't support some of the features required to give you a great experience with Portia.</h3>\n    <p class='browser-p'>Please try using an up-to-date version of one of these browsers, which are known to work well with Portia.</p>\n\n    {{browser-list browsers=model}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/app/templates/components/add-start-url-button.hbs",
    "content": "{{#tooltip-container tooltipFor=\"start-url-button\" tooltipContainer='body' as |options|}}\n    {{#if (eq options.section 'tooltip')}}\n        Toggle start page\n        {{#if newStartUrl}}\n            <p>\n                Add this page as a start page for your spider\n            </p>\n        {{else}}\n            <p>\n                Remove this page from your spider's start pages\n            </p>\n        {{/if}}\n    {{else}}\n        <button id=\"start-url-button\" type=\"button\" class=\"btn btn-default {{if (not newStartUrl) 'active'}}\" disabled={{disableStartUrl}} {{action \"toggleStartUrl\"}}>\n            {{icon-button icon='url'}} Start page\n        </button>\n    {{/if}}\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/components/animation-container.hbs",
    "content": "<div class=\"animation-content\">\n    {{yield}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/annotation-options.hbs",
    "content": "<h3>Annotation</h3>\n<form {{action \"save\" on=\"change\"}}>\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"required\" checked=(mut annotation.required)}} Required\n        </label>\n        {{#help-icon}}\n            Only extract items that have this annotation. Only this sample will be affected\n        {{/help-icon}}\n    </div>\n    <div class=\"form-group\">\n        <label for=\"selectionMode\">Selection mode</label>\n        {{select-box name=\"selectionMode\" value=(mut selectionMode) valueAttribute='label' choices=selectionModeOptions onChange=(action \"save\")}}\n    </div>\n    {{#if (not-eq annotation.selectionMode 'auto')}}\n        <div class=\"form-group{{if invalidSelector ' has-error'}}\">\n            <label for=\"selector\">Selector</label>\n            {{#if (eq annotation.selectionMode 'css')}}\n                {{buffered-input type=\"text\" name=\"selector\" class=\"form-control\" value=(mut cssSelector) viewValue=(mut editedCssSelector) onChange=(action 'save')}}\n                <span class=\"help-block{{if (not invalidSelector) ' hide'}}\">The input value is not a valid CSS selector.</span>\n            {{else}}\n                {{input type=\"text\" name=\"selector\" class=\"form-control\" value=(get annotation annotation.selectionMode) readonly=true}}\n            {{/if}}\n        </div>\n    {{/if}}\n    <div class=\"form-group\">\n        <label for=\"attribute\">Source</label>\n        {{select-box name=\"attribute\" value=(mut attribute) valueAttribute='name' choices=attributes onChange=(action \"save\")}}\n    </div>\n</form>\n"
  },
  {
    "path": "portiaui/app/templates/components/browser-iframe.hbs",
    "content": ""
  },
  {
    "path": "portiaui/app/templates/components/browser-list.hbs",
    "content": "<div class='browser-logos'>\n    {{#each browsers as |browser|}}\n        <a class='no-decoration' href='{{browser.href}}'>\n            <img class='browser-logo browser-mg' src={{browser.src}} alt={{browser.alt}}>\n            <p class='browser-p browser-mg'>{{browser.name}}</p>\n        </a>\n    {{/each}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/browser-url-blocked.hbs",
    "content": "Portia is having trouble loading this page at the moment. Try a different page or try again later.\n"
  },
  {
    "path": "portiaui/app/templates/components/browser-url-failing.hbs",
    "content": "Portia is currently having trouble loading this page would you like to <a class=\"alert-link\" {{action 'reloadPage'}}>try again</a>?\n"
  },
  {
    "path": "portiaui/app/templates/components/browser-view-port.hbs",
    "content": "<div class=\"browser-navigation panel-heading\">\n    {{url-bar class=\"navbar-form\" role=\"navigation\"}}\n    <div class=\"browser-toolbar\">\n        {{yield (hash section=\"toolbar\")}}\n    </div>\n</div>\n<div class=\"browser-banner{{unless webSocket.showBanner ' hide'}}\">\n    {{#if webSocket.connecting}}\n        Connecting ...\n    {{else if webSocket.closed}}\n        {{#if webSocket.secondsUntilReconnect }}\n            Reconnecting to Portia server in {{webSocket.secondsUntilReconnect}} seconds.\n        {{else if websocket.reconnectMessage}}\n            {{websocket.reconnectMessage}}\n        {{/if}}\n        {{#unless webSocket.reconnectImminent}}\n            <a class=\"alert-link\" {{action 'reconnectWebsocket'}}>Try Again</a>.\n        {{/unless}}\n    {{else if webSocket.reconnectComponent}}\n        {{component webSocket.reconnectComponent}}\n    {{/if}}\n</div>\n<div class=\"frame-container panel-body\">\n    <div class=\"overlay-container\">\n        {{yield (hash section=\"overlays\")}}\n    </div>\n    {{browser-iframe clickHandler=(action 'viewPortClick')}}\n</div>\n\n<div class=\"browser-start-page {{if browser.url 'hide'}}\">\n    <img src=\"/assets/images/portia-logo.svg\" alt=\"Portia logo\">\n    <h3>What would you like to scrape?</h3>\n    {{url-bar class=\"navbar-form\" role=\"navigation\" autofocus=true}}\n    {{#if uiState.models.project.spiders.length}}\n        <p>\n            You can also select one of your existing spiders from the sidebar.\n        </p>\n    {{/if}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/buffered-input.hbs",
    "content": "{{input id=inputId type=type class=(concat \"form-control \" (if focused \"focused \") class) value=(mut displayedValue) enter=(if focused (action 'endEditing' 'enter')) escape-press=(if focused (action 'cancelEditing')) focus-in=(action 'startEditing') bubbles=true focus-out=(if focused (action 'endEditing' 'focus-out')) placeholder=placeholder autofocus=autofocus disabled=disabled spellcheck=spellcheck}}\n"
  },
  {
    "path": "portiaui/app/templates/components/colored-badge.hbs",
    "content": "<span class=\"badge\" style={{badgeStyle}}>{{#if hasBlock}}{{yield}}{{else}}{{value}}{{/if}}</span>\n"
  },
  {
    "path": "portiaui/app/templates/components/colored-span.hbs",
    "content": "{{~ yield ~}}\n"
  },
  {
    "path": "portiaui/app/templates/components/combo-box.hbs",
    "content": "{{#dropdown-widget class=\"combo-box\" events=this open=(mut open) active=(mut viewValue) focused=value orderItemsForSearch=orderItemsForSearch valuesEqual=valuesEqual menuContainer=menuContainer menuClass=menuClass menuAlign=menuAlign onClose=(action 'menuClosed')  as |widget|}}\n    {{#if (eq widget.section 'widget')}}\n        <div class=\"combo-input\">\n            {{input id=inputId type=\"text\" class=(concat \"form-control dropdown-toggle \" inputClass) value=query escape-press=(action widget.closeMenu 'escape') focus-in=(chain-actions widget.openMenu widget.focusIn) bubbles=true focus-out=(chain-actions widget.focusOut (action 'restoreFocus')) spellcheck=spellcheck}}\n            <span class=\"caret-container\" {{action widget.toggleMenu 'button'}}>\n                <span class=\"caret\"></span>\n            </span>\n        </div>\n        {{currentValue}}\n    {{else if (eq widget.section 'menu')}}\n        {{#if hasBlock}}\n            {{yield (hash menu=widget.menu header=widget.header item=widget.item divider=widget.divider query=query setValue=(action 'setValue') setViewValue=(action 'setViewValue') setValueAndClose=(action 'setValueAndClose') closeMenu=widget.closeMenu)}}\n        {{else}}\n            {{#each choices as |choice|}}\n                {{#widget.item value=choice action=(action 'setValueAndClose' choice)}}\n                    {{#if valueAttribute}}\n                        {{get choice valueAttribute}}\n                    {{else}}\n                        {{choice}}\n                    {{/if}}\n                {{/widget.item}}\n            {{/each}}\n        {{/if}}\n    {{/if}}\n{{/dropdown-widget}}\n"
  },
  {
    "path": "portiaui/app/templates/components/create-project-button.hbs",
    "content": "{{#if canCreateProjects}}\n    <p></p>\n    <div class=\"input-group project-create-input\">\n        {{input type=\"text\" class=\"form-control\" value=(mut projectName) placeholder=\"Create a new project\"\n          enter=(action 'addProject')}}\n        <span class=\"input-group-btn\">\n            <button type=\"button\" class=\"btn btn-primary\" disabled={{not projectName}} {{action \"addProject\"}}>\n                {{icon-button icon='spider'}}\n            </button>\n        </span>\n    </div>\n    {{#if projects}}\n    <h5>OR</h5>\n    {{/if}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/create-spider-button.hbs",
    "content": "<button type=\"button\" class=\"btn btn-primary\" disabled={{not canAddSpider}} {{action \"addSpider\"}}>\n    {{icon-button icon='spider'}} New spider\n</button>\n"
  },
  {
    "path": "portiaui/app/templates/components/data-structure-annotations.hbs",
    "content": "{{#tree-list-item hasChildren=item.annotations.length onMouseEnter=(action 'enterItem' item) onMouseLeave=(action 'leaveItem' item) as |options|}}\n    {{#if (eq options.section \"item\")}}\n        {{yield}}\n    {{else if (eq options.section \"subtrees\")}}\n        {{#each item.annotations as |annotation|}}\n            {{#if (eq annotation.constructor.modelName \"annotation\")}}\n                {{#tree-list-item onMouseEnter=(action 'enterAnnotation' annotation) onMouseLeave=(action 'leaveAnnotation' item) as |options|}}\n                    {{#link-to 'projects.project.spider.sample.data.annotation' annotation}}\n                        {{indentation-spacer isSmall=true}}\n                        {{list-item-badge\n                          value=(or annotation.elements.length 0)\n                          color=(array-get annotationColors annotation.orderedIndex)\n                        }}\n                        {{list-item-icon icon=annotation.type}}\n                        {{list-item-annotation-field annotation=annotation selecting=(mut annotation.new)}}\n                        {{#list-item-field-type field=annotation.field}}\n                            Change type of selected field\n                        {{/list-item-field-type}}\n                        {{#link-to 'projects.project.spider.sample.data.annotation.options' annotation bubbles=false class=\"ignore-active\"}}\n                            {{list-item-icon icon='options'}}\n                        {{/link-to}}\n                        {{list-item-icon icon='remove' action=(action 'removeAnnotation' annotation) bubbles=false}}\n                    {{/link-to}}\n                {{/tree-list-item}}\n            {{else if (eq annotation.constructor.modelName \"item\")}}\n                {{#data-structure-annotations sample=sample item=annotation annotationColors=annotationColors}}\n                    {{#link-to 'projects.project.spider.sample.data.item' annotation}}\n                        {{list-item-icon icon='schema'}}\n                        {{list-item-badge value=(or annotation.elements.length 0)}}\n                        {{list-item-editable value=(mut annotation.name) editing=(mut annotation.new) onChange=(action 'saveItem' annotation)}}\n                        {{list-item-item-schema item=annotation}}\n                        {{list-item-add-annotation-menu item=annotation}}\n                        {{list-item-icon icon='remove' action=(action 'removeItem' annotation) bubbles=false}}\n                    {{/link-to}}\n                {{/data-structure-annotations}}\n            {{/if}}\n        {{/each}}\n    {{/if}}\n{{/tree-list-item}}\n"
  },
  {
    "path": "portiaui/app/templates/components/data-structure-listing.hbs",
    "content": "{{#tree-list}}\n    {{#tree-list-item hasChildren=sample.items.length as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Items\n            {{/list-item-text}}\n            {{list-item-icon icon='add' action=(action 'addItem' sample)}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#each sample.items as |item|}}\n                {{#unless item.parent}}\n                    {{#data-structure-annotations sample=sample item=item annotationColors=annotationColors}}\n                        {{#link-to 'projects.project.spider.sample.data.item' item}}\n                            {{list-item-badge value=(or item.elements.length 0)}}\n                            {{list-item-icon icon='schema'}}\n                            {{list-item-item-schema item=item selecting=(mut item.new)}}\n                            {{list-item-add-annotation-menu item=item}}\n                            {{list-item-icon icon='remove' action=(action 'removeItem' item) disabled=(lte sample.items.length 1) bubbles=false}}\n                        {{/link-to}}\n                    {{/data-structure-annotations}}\n                {{/unless}}\n            {{/each}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/dropdown-delete.hbs",
    "content": "<a {{action 'onDelete'}}>\n    {{list-item-icon class=\"icon\" icon=\"remove\"}}{{if isConfirmed 'Are you sure?' text}}\n</a>\n"
  },
  {
    "path": "portiaui/app/templates/components/dropdown-divider.hbs",
    "content": ""
  },
  {
    "path": "portiaui/app/templates/components/dropdown-header.hbs",
    "content": "{{yield}}\n"
  },
  {
    "path": "portiaui/app/templates/components/dropdown-item.hbs",
    "content": "<a {{action 'performAction' value}}>\n    {{#if hasBlock}}\n        {{yield value}}\n    {{else}}\n        {{value}}\n    {{/if}}\n</a>\n"
  },
  {
    "path": "portiaui/app/templates/components/dropdown-menu.hbs",
    "content": "{{yield (hash menu=this header=(component 'dropdown-header') item=(component 'dropdown-item' menu=this) divider=(component 'dropdown-divider'))}}\n"
  },
  {
    "path": "portiaui/app/templates/components/dropdown-widget.hbs",
    "content": "{{yield (hash section='widget' openMenu=(action 'openMenu') closeMenu=(action 'closeMenu') toggleMenu=(action 'toggleMenu') focusIn=(action 'focusIn') focusOut=(action 'focusOut') keyDown=(action 'keyDown'))}}\n{{#dropdown-menu class=menuClasses events=events keyNavigate=keyNavigate active=(mut active) focused=(mut focused) orderItemsForSearch=orderItemsForSearch valuesEqual=valuesEqual onFocusIn=(action 'focusIn') onFocusOut=(action 'focusOut') as |options|}}\n    {{#if open}}\n        {{yield (hash section='menu' menu=options.menu header=options.header item=options.item divider=options.divider openMenu=(action 'openMenu') closeMenu=(action 'closeMenu') toggleMenu=(action 'toggleMenu') focusIn=(action 'focusIn') focusOut=(action 'focusOut') keyDown=(action 'keyDown'))}}\n    {{/if}}\n{{/dropdown-menu}}\n"
  },
  {
    "path": "portiaui/app/templates/components/edit-sample-button.hbs",
    "content": "{{#if editableSample}}\n    {{#link-to 'projects.project.spider.sample' editableSample class=\"btn btn-primary\"}}\n        {{icon-button icon='sample'}} Edit sample\n    {{/link-to}}\n{{else}}\n    {{#tooltip-container tooltipFor=\"add-spider-browser-button\" tooltipContainer='body' as |options|}}\n        {{#if (eq options.section 'tooltip')}}\n            {{#unless editableSample}}\n                Create a new sample from the current page so you can start annotating the data you want to extract\n                {{#unless sameDomain}}\n                    <p>\n                        This spider is from a different domain to your spider. Maybe you would like to create a new spider for this sample?\n                    </p>\n                {{/unless}}\n            {{/unless}}\n        {{else}}\n            <button id=\"add-spider-browser-button\" type=\"button\" class=\"btn btn-primary\" disabled={{disableSample}} {{action \"addSample\"}}>\n                {{icon-button icon='sample'}} New sample\n            </button>\n        {{/if}}\n    {{/tooltip-container}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/element-overlay.hbs",
    "content": "{{#each rects key=\"@index\" as |rect index|}}\n    {{element-rect-overlay index=index icon=icon color=color positionMode=positionMode class=class overlay=this}}\n{{/each}}\n"
  },
  {
    "path": "portiaui/app/templates/components/element-rect-overlay.hbs",
    "content": "<div class=\"overlay-box\" style={{shadowStyle}}>\n    <span class=\"overlay-icon\" style={{textShadowStyle}}>\n        {{icon-button icon=icon}}\n    </span>\n    <div class=\"overlay-box-background\" style={{backgroundStyle}}></div>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-item-table.hbs",
    "content": "{{#each-in item as |key value|}}\n    {{#if (is-array value)}}\n        <tr>\n            <td>{{key}}</td>\n            <td></td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                {{#each value key='@index' as |item|}}\n                    {{#if (is-object item)}}\n                        {{extracted-item-table item=item}}\n                    {{else}}\n                        <table>\n                            <tr>\n                                <td>{{item}}</td>\n                            </tr>\n                        </table>\n                    {{/if}}\n                {{/each}}\n            </td>\n        </tr>\n    {{else if (is-object value)}}\n        <tr>\n            <td>{{key}}</td>\n            <td></td>\n        </tr>\n        {{#unless (is-empty-object value)}}\n            <tr>\n                <td colspan=\"2\">\n                    {{extracted-item-table item=value}}\n                </td>\n            </tr>\n        {{/unless}}\n    {{else}}\n        <tr>\n            <td>{{key}}</td>\n            <td>\n                {{value}}\n            </td>\n        </tr>\n    {{/if}}\n{{/each-in}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-group.hbs",
    "content": "{{#tool-group id=\"extracted-items-group\" as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"extracted-items\"}}\n            {{#extracted-items-tab}}\n                Extracted items\n            {{/extracted-items-tab}}\n        {{/group.tab}}\n        {{#group.tab toolId=\"extracted-items-json\"}}\n            JSON\n        {{/group.tab}}\n        {{extracted-items-status}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"extracted-items\" as |active|}}\n            {{extracted-items-panel selected=active}}\n        {{/group.panel}}\n        {{#group.panel class=\"extracted-items-json\" toolId=\"extracted-items-json\" as |active|}}\n            {{extracted-items-json-panel selected=active}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-json-panel.hbs",
    "content": "<span class=\"json-character-size\">a</span>\n{{#if selected ~}}\n    {{extracted-items-json json=extractedItems.items position=0}}\n{{~/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-json-value.hbs",
    "content": "{{#if fromArray}}<span class=\"json-array-spacing\">{{depthSpaces}}</span>{{/if}}\n{{escapedValue}}{{comma}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-json.hbs",
    "content": "{{#if (is-object-or-array json) ~}}\n    {{#if showOpen ~}}\n        {{#unless fromKey}}\n            <b>{{openingCharacter}}</b>\n        {{/unless}}\n        {{~#if openChild ~}}\n            <b class=\"new-line\">{{depthPlus1Spaces}}{{openChild}}</b>\n            {{~#if (is-object json)}}\n                <br>\n            {{/if~}}\n        {{/if}}\n    {{~/if}}\n    {{#if (is-array json) ~}}\n        {{#each json as |value index| ~}}\n            {{#if (and fromKey (not index))}}<b class=\"new-line\"></b>{{/if}}\n            {{extracted-items-json json=value position=index from='array' parent=json depth=depth ~}}\n        {{~/each}}\n    {{else if (is-object json) ~}}\n        {{#if (and fromKey (not index))}}<b class=\"new-line\"></b>{{/if}}\n        {{#each-in (indexed-object json) as |key v| ~}}\n            <span class=\"json-key\">{{depthPlus1Spaces}}\"{{key}}\": {{#if (is-array v.value)}}[{{/if}}{{#if (is-object v.value)}}{ {{/if}}</span>\n            {{~extracted-items-json json=v.value position=v.index from='key' parent=json depth=depth key=key ~}}\n        {{~/each-in}}\n    {{~/if}}\n    {{~#if openSibling ~}}\n        <b>{{depthSpaces}}{{closingCharacter}}{{comma}}</b>\n        <b>{{depthSpaces}}{{openSibling}}</b>\n        <b class=\"new-line\"></b>\n    {{else}}\n        <b class=\"new-line\">{{depthSpaces}}{{closingCharacter}}{{comma}}</b>\n    {{~/if ~}}\n{{else ~}}\n    {{extracted-items-json-value value=json depth=depth position=position maxPosition=maxPosition key=key from=from ~}}\n    <b class=\"new-line\"></b>\n{{~/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-panel.hbs",
    "content": "{{#if isExtracting}}\n    <div class=\"mid-align twice-x spaced\">\n      <span class=\"fa fa-spin fa-refresh\"></span>\n    </div>\n    <div class=\"mid-align one-half-x spaced\">Extracting data...</div>\n{{/if}}\n\n{{#if failedExtraction}}\n    <div class=\"mid-align twice-x spaced\">\n      <span class=\"fa fa-ban\"></span>\n    </div>\n    <div class=\"mid-align one-half-x spaced\">\n      {{failedMsg}}\n    </div>\n{{/if}}\n\n{{#if (and selected (not isExtracting))}}\n    {{#each extractedItems.items key='@index' as |item|}}\n        {{extracted-item-table item=item}}\n    {{/each}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-status.hbs",
    "content": "{{#link-to changeInfo.path changeInfo.model bubbles=false}}\n    {{#help-icon icon=icon placement='left'}}\n        {{#if hasWarning}}\n            {{changeInfo.text}}\n        {{else}}\n            Your sample is correctly configured for extraction\n        {{/if}}\n    {{/help-icon}}\n{{/link-to}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extracted-items-tab.hbs",
    "content": "{{yield}}\n\n{{#unless isExtracting}}\n    <span class=\"badge\">{{numItems}}</span>\n{{/unless}}\n"
  },
  {
    "path": "portiaui/app/templates/components/extractor-options.hbs",
    "content": "{{#tree-list class=\"extractor-options\"}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Extractors\n            {{/list-item-text}}\n            {{#list-item-icon-menu icon='add-dropdown' as |dropdown|}}\n                {{#dropdown.header}}Add field type extractor{{/dropdown.header}}\n                {{#each types as |type|}}\n                    {{#dropdown.item action=(chain-actions (action 'addTypeExtractor' type) dropdown.closeMenu) as |value|}}\n                        {{list-item-icon class=\"icon\" icon=type}}{{type}}\n                    {{/dropdown.item}}\n                {{/each}}\n                {{#dropdown.header}}Add regular expression extractor{{/dropdown.header}}\n                {{#each regexExtractors as |extractor|}}\n                    {{#dropdown.item action=(chain-actions (action 'addRegexExtractor' extractor) dropdown.closeMenu) as |value|}}\n                        {{list-item-icon class=\"icon\" icon=\"regular expression\"}}{{extractor.value}}\n                    {{/dropdown.item}}\n                {{/each}}\n                {{#dropdown.item action=(chain-actions (action 'addNewRegexExtractor') dropdown.closeMenu) as |value|}}\n                    {{list-item-icon class=\"icon\" icon=\"add\"}}New regular expression\n                {{/dropdown.item}}\n            {{/list-item-icon-menu}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#each annotation.extractors as |extractor|}}\n                {{#tree-list-item}}\n                    {{#if (eq extractor.type 'type')}}\n                        {{list-item-icon icon=extractor.value}}\n                        {{#list-item-text}}\n                            {{extractor.value}}\n                        {{/list-item-text}}\n                    {{else if (eq extractor.type 'regex')}}\n                        {{list-item-icon icon='regular expression'}}\n                        {{list-item-editable value=(mut extractor.value) editing=(mut extractor.new) onChange=(action 'saveExtractor' extractor)}}\n                    {{/if}}\n                    {{list-item-icon icon='remove' action=(action 'removeExtractor' extractor) bubbles=false}}\n                {{/tree-list-item}}\n            {{/each}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/feed-url-options.hbs",
    "content": "<div class=\"spaced\">\n    <p class=\"txt-describe\">\n        Enter a publicly available URL containing newline separated URLs\n        <a href={{feedLink}} target=\"_blank\">like this.</a>\n    </p>\n</div>\n\n<div class=\"spaced\">\n    <label for=\"feedUrl\">Feed URL</label>\n    {{input\n      type=\"text\"\n      id='feedUrl'\n      class=\"form-control focus-control\"\n      value=(mut startUrl.url)\n      focus-out=\"saveFeedUrl\"\n      placeholder='https://gist.github.com/user/gist_id'\n    }}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/field-options.hbs",
    "content": "<h3>Field</h3>\n<form {{action \"save\" on=\"change\"}}>\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"required\" checked=(mut field.required)}} Required\n        </label>\n        {{#help-icon}}\n            Only extract items that have this field. All samples using this data format will be affected\n        {{/help-icon}}\n    </div>\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"vary\" checked=(mut field.vary)}} Vary\n        </label>\n        {{#help-icon}}\n            The value of this field will be ignored when checking for duplicate items\n        {{/help-icon}}\n    </div>\n</form>\n"
  },
  {
    "path": "portiaui/app/templates/components/fragment-options.hbs",
    "content": "{{#if changeset.isValid}}\n    {{list-item-badge value=multiplicity color=fragmentColor}}\n{{else}}\n    {{#tooltip-container toggleTooltip=toggleTooltip tooltipContainer='body' tooltipFor=(concat 'error-icon-' elementId) placement='left' as |tooltip|}}\n        {{#if (eq tooltip.section 'tooltip')}}\n            {{changeset.error.value.validation}}\n        {{else}}\n            {{icon-button id=(concat 'error-icon-' elementId) icon='error-triangle' class='fragment-error tooltip-for'}}\n        {{/if}}\n    {{/tooltip-container}}\n{{/if}}\n\n<div class=\"form-group {{if changeset.isInvalid 'has-error'}}\">\n    {{#if isRange}}\n        {{input type=\"text\" class=\"form-control compact-control fragment-left-half focus-control\" value=(mut lower) placeholder=\"start\" focus-out=(action 'saveFragment')}}\n        <span>-</span>\n        {{input type=\"text\" class=\"form-control compact-control fragment-right-half\" value=(mut higher) placeholder=\"end\" focus-out=(action 'saveFragment')}}\n    {{else}}\n        {{input type=\"text\" class=\"form-control compact-control fragment-input focus-control\" value=(mut changeset.value) placeholder=listPlaceholder focus-out=(action 'saveFragment') key-up=(action 'updateValue')}}\n    {{/if}}\n</div>\n\n<div class=\"form-group\">\n    {{select-box\n      buttonClass=\"compact-control fragment-type\"\n      value=(mut fragmentType)\n      valueAttribute='label'\n      choices=fragmentTypes\n      isDisabled=(eq index 0)\n      onClick=(action 'changeFragmentType')\n    }}\n</div>\n\n{{#if (not-eq index 0)}}\n    {{list-item-icon\n      class='fragment-action-icon'\n      icon='remove'\n      action=(action removeFragment fragment)\n      bubbles=false\n    }}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/generated-url-options.hbs",
    "content": "{{#list-item-text class=\"title fragments-title\"}}\n    Fragments\n    {{#help-icon}}\n        Fragments\n        <p>\n            A generated url is made up of one or more fragments. A fragment can be a single value,\n            a list of different values or a range of numbers.\n        </p>\n        <p>\n            Using fragments you can create a large number of urls.\n        </p>\n    {{/help-icon}}\n{{/list-item-text}}\n\n{{#tooltip-container tooltipFor=\"add-fragment-button\" text=\"Create a new fragment to generate URLs\" tooltipContainer='body'}}\n    {{list-item-icon\n      icon='add'\n      id=\"add-fragment-button\"\n      action=(action 'addFragment')\n      disabled=(not allValidFragments)}}\n{{/tooltip-container}}\n\n{{#each fragments as |fragment index|}}\n    {{fragment-options\n      index          = index\n      fragment       = fragment\n      saveSpider     = saveSpider\n      fragmentColor  = (array-get fragmentColors index)\n      removeFragment = (action 'removeFragment')\n      allValidFragments = allValidFragments\n    }}\n{{/each}}\n\n<h3 class=\"start-url-list-title\">Generation List</h3>\n<div class=\"start-url-list form-control {{unless allValidFragments 'has-error'}}\">\n    <section class=\"start-url-generation-list\">\n    {{#each generatedUrlLists as |generatedUrlList|}}\n        <p>\n        {{#each generatedUrlList as |fragment index| ~}}\n            {{#colored-span color=(array-get fragmentColors index) ~}}\n                {{fragment}}\n            {{~/colored-span}}\n        {{~/each}}\n        </p>\n    {{/each}}\n\n    {{#if (not isComplete)}}\n        {{tooltip-icon\n          icon='vertical-ellipsis'\n          text='This list only shows the first few generated urls.'\n          modifyClasses='one-half-x full-width'\n        }}\n    {{/if}}\n\n    </section>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/help-icon.hbs",
    "content": "{{#tooltip-container tooltipClasses=tooltipClasses tooltipFor=(concat \"help-icon-\" elementId) tooltipContainer=tooltipContainer placement=placement as |tooltip|}}\n    {{#if (eq tooltip.section 'tooltip')}}\n        {{yield}}\n    {{else}}\n        {{icon-button id=(concat \"help-icon-\" elementId) class=classes icon=icon}}\n    {{/if}}\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/components/icon-button.hbs",
    "content": ""
  },
  {
    "path": "portiaui/app/templates/components/input-with-clear.hbs",
    "content": "{{input class=\"form-control\" value=(mut value) placeholder=placeholder keyUp=(action \"keyUp\" on=\"key-up\")}}\n{{icon-button class=\"clear-input\" icon='close' action=(action 'clear')}}\n"
  },
  {
    "path": "portiaui/app/templates/components/inspector-panel.hbs",
    "content": "{{#if inspectedElement}}\n    <div>{{elementPath}}</div>\n    <table>\n        {{#each attributes as |attribute|}}\n            <tr {{action 'changeAnnotationSource' attribute.attribute}}>\n                <td>{{attribute.name}}</td>\n                <td>\n                    <div>\n                        <div>\n                            <span class=\"value\">{{attribute.value}}</span>\n                        </div>\n                        {{#with (attribute-annotation (get sample.dataStructure.annotations (guid inspectedElement)) attribute.name) as |annotation|}}\n                            <div>\n                            {{#if annotation.name}}\n                                {{colored-badge value=annotation.name color=(array-get annotationColors annotation.orderedIndex)}}\n                            {{/if}}\n                            {{icon-button icon='add' action=(action 'addAnnotation' attribute.attribute) bubbles=false}}\n                            </div>\n                        {{/with}}\n                    </div>\n                </td>\n            </tr>\n        {{/each}}\n    </table>\n{{else}}\n    <p class=\"text-muted empty-notice\">\n        No element selected\n    </p>\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/json-file-compare.hbs",
    "content": "{{#if isArray}}\n    [{{#each entries as |entry index|}}\n        {{#if entry.conflict}}\n           {{#each entries as |entry|}}\n                {{json-file-compare json=entry.json path=entry.path update=\"update\" multi=true}}\n            {{/each}}\n        {{else}}\n            <span>{{entry.value}}<span class=\"comma\">,</span></span>\n        {{/if}}\n    {{/each}}]\n{{else if isObject}}\n    {{#if isConflict}}\n        {{#if isResolved}}\n            <span style=\"color:#2d882d;font-weight:bold\">RESOLVED</span>\n            <div {{action 'reset'}} style=\"margin:5px 0px 0px 40px;background:#AEA;\" class=\"conflict-option\">\n                <span style=\"font-weight:bold;color:#2d882d;margin:5px\"> [CHANGE SELECTION] </span>\n                {{resolvedRepr}},\n            </div>\n        {{else}}\n            <span style=\"color:#ff3939;font-weight:bold\">CONFLICT</span>\n            <div style=\"margin-left:40px;\">\n                {{#each conflictValues as |value|}}\n                    <div class=\"conflict-option {{value.state}}\">\n                        <span style=\"font-weight:bold\" class=\"{{if value.accepted \"green-label\" \"\"}}\">\n                            {{value.label}}:\n                            {{#unless value.accepted}}\n                            <span {{action 'conflictOptionSelected' value.key}} class=\"fa fa-icon fa-check green-label\"></span>\n                            {{/unless}}\n                            {{#if multi}}\n                                {{#unless value.rejected}}\n                                    <span {{action 'conflictOptionRejected' value.key}} class=\"fa fa-icon fa-times red-label\"></span>\n                                {{/unless}}\n                            {{/if}}\n                        </span>\n                        <span style=\"word-break:break-word\">\n                            {{value.value}}\n                        </span>\n                    </div>\n                {{/each}}\n            </div>\n        {{/if}}\n    {{else}}\n        <div>\n            {{#each entries as |entry|}}\n                <div style=\"margin:5px 5px 0px 20px;\">\n                    <span style=\"font-weight:bold\">{{entry.key}}:</span>{{json-file-compare json=entry.json path=entry.path update=\"update\"}}\n                </div>\n            {{/each}}\n        </div>\n    {{/if}}\n{{else}}\n    {{value}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/link-crawling-options.hbs",
    "content": "<h3>Crawling rules</h3>\n<form {{action \"save\" on=\"change\"}}>\n    {{#if (eq spider.linksToFollow 'all')}}\n        <div class=\"text-muted\">Following all encountered links within the same domains</div>\n    {{else if (eq spider.linksToFollow 'none')}}\n        <div class=\"text-muted\">Not following any links</div>\n    {{else if (eq spider.linksToFollow 'patterns')}}\n        <div>Follow links that match these patterns</div>\n        {{regex-pattern-list list=spider.followPatterns onChange=(action 'save')}}\n        <div>Exclude links that match these patterns</div>\n        {{regex-pattern-list list=spider.excludePatterns onChange=(action 'save')}}\n    {{/if}}\n\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"respectNoFollow\" checked=(mut spider.respectNoFollow) disabled=(eq spider.linksToFollow 'none')}} Respect the \"nofollow\" attribute\n        </label>\n    </div>\n</form>\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-add-annotation-menu.hbs",
    "content": "{{#list-item-icon-menu icon='add-dropdown' as |options|}}\n    {{#options.item value=\"Add annotation\" action=(chain-actions (action 'addAnnotation') options.closeMenu) as |value|}}\n        {{list-item-icon class=\"icon\" icon=\"add\"}}{{value}}\n    {{/options.item}}\n    {{#if allowNesting}}\n        {{#options.item value=\"Add nested item\" action=(chain-actions (action 'addNestedItem') options.closeMenu) as |value|}}\n            {{list-item-icon class=\"icon\" icon=\"add\"}}{{value}}\n        {{/options.item}}\n    {{/if}}\n{{/list-item-icon-menu}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-annotation-field.hbs",
    "content": "{{#list-item-relation-manager value=(mut annotation.field) choices=annotation.parent.schema.fields selecting=(mut selecting) onChange=(action 'changeField') validate=(action 'validateFieldName') create=(action 'addField') as |options|}}\n    {{#if (eq options.section 'change-header')}}\n        Type to change the field\n    {{else if (eq options.section 'choices-header')}}\n        Select an existing field\n    {{else if (eq options.section 'choice')}}\n        {{list-item-icon class=\"icon\" icon=options.choice.type}}{{options.choice.name}}\n    {{/if}}\n{{/list-item-relation-manager}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-badge.hbs",
    "content": "<span class=\"list-item-badge\">\n    <span class=\"badge\" style={{badgeStyle}}>\n        <span class=\"badge-centered\">{{#if hasBlock}}{{yield}}{{else}}{{value}}{{/if}}</span>\n    </span>\n</span>\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-combo.hbs",
    "content": "{{#if selecting}}\n    {{#if hasBlock}}\n        {{#combo-box choices=choices value=(mut value) valueAttribute=valueAttribute open=(mut selecting) orderItemsForSearch=orderItemsForSearch valuesEqual=valuesEqual onChange=onChange autoSelect=autoSelect inputClass=(concat \"input-list-item \" inputClass) menuClass=menuClass menuAlign=menuAlign menuContainer=menuContainer as |options|}}\n            {{yield options}}\n        {{/combo-box}}\n    {{else}}\n        {{combo-box choices=choices value=(mut value) valueAttribute=valueAttribute open=(mut selecting) orderItemsForSearch=orderItemsForSearch valuesEqual=valuesEqual onChange=onChange autoSelect=autoSelect inputClass=(concat \"input-list-item \" inputClass) menuClass=menuClass menuAlign=menuAlign menuContainer=menuContainer}}\n    {{/if}}\n{{else}}\n    <span>\n        {{#if valueAttribute}}\n            {{get value valueAttribute}}\n        {{else}}\n            {{value}}\n        {{/if}}\n    </span>\n    <a {{action 'startSelecting'}}>\n        <span class=\"caret\"></span>\n    </a>\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-editable.hbs",
    "content": "{{#if editing}}\n    {{buffered-input class=\"input-list-item\" value=(mut value) focused=editing autoSelect=true spellcheck=spellcheck onChange=onChange validate=validate autofocus=\"autofocus\"}}\n{{else}}\n    <span>{{value}}</span>\n    {{icon-button icon='edit' action=(action 'startEditing') bubbles=false}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-field-type.hbs",
    "content": "{{#list-item-selectable value=(mut field.type) onChange=(action 'saveField') menuContainer=\"body\" menuAlign=\"right\" as |select|}}\n    {{#if hasBlock}}\n        {{#select.header}}\n            {{yield}}\n        {{/select.header}}\n    {{/if}}\n    {{#each types as |type|}}\n        {{#select.item value=type action=(action select.setValueAndClose type)}}\n            {{list-item-icon class=\"icon\" icon=type}}{{type}}\n        {{/select.item}}\n    {{/each}}\n{{/list-item-selectable}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-icon-menu.hbs",
    "content": "{{#dropdown-widget class=\"list-item-icon\" menuContainer=\"body\" menuAlign=\"right\" as |options|}}\n    {{#if (eq options.section 'widget')}}\n        {{list-item-icon onClick=(action 'clickIcon') icon=icon action=options.toggleMenu tabindex=-1}}\n    {{else if (eq options.section 'menu')}}\n        {{yield options}}\n    {{/if}}\n{{/dropdown-widget}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-icon.hbs",
    "content": ""
  },
  {
    "path": "portiaui/app/templates/components/list-item-item-schema.hbs",
    "content": "{{#list-item-relation-manager value=(mut item.schema) choices=item.ownerSample.spider.project.schemas selecting=(mut selecting) onChange=(action 'changeSchema') create=(action 'addSchema') as |options|}}\n    {{#if (eq options.section 'change-header')}}\n        Type to change the data format\n    {{else if (eq options.section 'choices-header')}}\n        Select an existing data format\n    {{else if (eq options.section 'choice')}}\n        {{list-item-icon class=\"icon\" icon='schema'}}{{options.choice.name}}\n    {{/if}}\n{{/list-item-relation-manager}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-link-crawling.hbs",
    "content": "{{#list-item-selectable value=(mut linksToFollow) valueAttribute='label' onChange=(action 'saveSpider') menuContainer=\"body\" menuAlign=\"left\" as |select|}}\n    {{#select.header}}\n        Change how links are crawled\n    {{/select.header}}\n    {{#each followPatternOptions as |option|}}\n        {{#select.item value=option action=(action select.setValueAndClose option)}}\n            {{option.label}}\n        {{/select.item}}\n    {{/each}}\n{{/list-item-selectable}}\n{{#help-icon}}\n    {{linksToFollow.description}}\n{{/help-icon}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-relation-manager.hbs",
    "content": "{{#list-item-combo value=(mut value.content) valueAttribute='name' selecting=(mut selecting) orderItemsForSearch=orderItemsForSearch valuesEqual=valuesEqual onChange=onChange autoSelect=true menuContainer=\"body\" as |combo|}}\n    {{#combo.header}}\n        {{yield (hash section='change-header')}}\n    {{/combo.header}}\n    {{#combo.item value=(hash special=\"rename\" name=combo.query onMenuClosed=(action 'rename' combo.query)) disabled=(not combo.menu.active.special) action=(chain-actions (action 'rename' combo.query) (action combo.closeMenu 'escape'))}}\n        {{list-item-icon class=\"icon\" icon=\"edit\"}}Rename to “{{combo.query}}”\n    {{/combo.item}}\n    {{#combo.item value=(hash special=\"add\" name=combo.query onMenuClosed=(action 'add' combo.query)) disabled=(not combo.menu.active.special) action=(chain-actions (action 'add' combo.query) (action combo.closeMenu 'escape'))}}\n        {{list-item-icon class=\"icon\" icon=\"add\"}}Add “{{combo.query}}”\n    {{/combo.item}}\n\n    {{combo.divider}}\n\n    {{#combo.header}}\n        {{yield (hash section='choices-header')}}\n    {{/combo.header}}\n    {{#each sortedChoices as |choice|}}\n        {{#combo.item value=choice action=(action combo.setValueAndClose choice)}}\n            {{yield (hash section='choice' choice=choice)}}\n        {{/combo.item}}\n    {{/each}}\n{{/list-item-combo}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-selectable.hbs",
    "content": "{{#if selecting}}\n    {{#if hasBlock}}\n        {{#select-box choices=choices value=(mut value) valueAttribute=valueAttribute open=(mut selecting) onChange=onChange buttonClass=(concat \"input-list-item \" buttonClass) menuClass=menuClass menuAlign=menuAlign menuContainer=menuContainer as |options|}}\n            {{yield options}}\n        {{/select-box}}\n    {{else}}\n        {{select-box choices=choices value=(mut value) valueAttribute=valueAttribute open=(mut selecting) onChange=onChange buttonClass=(concat \"input-list-item \" buttonClass) menuClass=menuClass menuAlign=menuAlign menuContainer=menuContainer}}\n    {{/if}}\n{{else}}\n    <span>\n        {{#if valueAttribute}}\n            {{get value valueAttribute}}\n        {{else}}\n            {{value}}\n        {{/if}}\n    </span>\n    <a {{action 'startSelecting'}}>\n        <span class=\"caret\"></span>\n    </a>\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/list-item-text.hbs",
    "content": "{{yield}}\n"
  },
  {
    "path": "portiaui/app/templates/components/notification-container.hbs",
    "content": "{{#each banners as |notification|}}\n    {{notification-message notification=notification fade=notification.fading fadeAction=(action 'fadeBanner' notification)}}\n{{/each}}\n\n{{#each displayNotifications as |notification|}}\n    {{notification-message notification=notification fade=notification.fading closeAction=(action 'dismissNotification' notification) fadeAction=(action 'fadeNotification' notification)}}\n{{/each}}\n"
  },
  {
    "path": "portiaui/app/templates/components/notification-message.hbs",
    "content": "{{#if closeAction}}\n    <button type=\"button\" class=\"close\" aria-label=\"Close\" {{action \"close\"}}>\n        <span aria-hidden=\"true\">&times;</span>\n    </button>\n{{/if}}\n{{#if title}}\n    <h4>{{title}}</h4>\n{{/if}}\n<p>{{message}}</p>\n"
  },
  {
    "path": "portiaui/app/templates/components/page-actions-editor.hbs",
    "content": "{{#if editing }}\n{{#if addingNew}}\n    <div class=\"form-group form-group-sm\">\n        <label for=\"actionType\" class=\"col-sm-4 control-label\">Action type</label>\n        <div class=\"col-sm-7\">\n            <select onchange={{action (mut editing.type) value=\"target.value\"}}>\n                {{#each actionTypes as |type|}}\n                    <option value={{type}} selected={{eq type editing.type}}>{{type}}</option>\n                {{/each}}\n            </select>\n        </div>\n        <div class=\"btn-center\">\n            <button {{action \"addContinue\"}} class=\"btn btn-primary fa fa-icon fa-plus\">\n                Continue\n            </button>\n        </div>\n    </div>\n{{else}}\n<form class=\"form-horizontal\">\n    {{#if (eq editing.type \"wait\")}}\n        <div class=\"form-group form-group-sm\">\n            <label for=\"actionType\" class=\"col-sm-4 control-label\">Timeout (ms)</label>\n            <div class=\"col-sm-7\">\n                {{input value=editing.timeout pattern=\"^[0-9]+$\" class=\"form-control\" }}\n            </div>\n        </div>\n    {{else}}\n        <div class=\"form-group form-group-sm\">\n            <label for=\"actionType\" class=\"col-sm-4 control-label\">Selector</label>\n            <div class=\"col-sm-7\">\n                {{input value=editing.selector class=\"form-control\" }}\n            </div>\n        </div>\n    {{/if}}\n    {{#if (eq editing.type \"set\")}}\n        <div class=\"form-group form-group-sm\">\n            <label for=\"actionType\" class=\"col-sm-4 control-label\">Value</label>\n            <div class=\"col-sm-7\">\n                {{input value=editing.value class=\"form-control\" }}\n            </div>\n        </div>\n    {{/if}}\n</form>\n    <div class=\"form-group form-group-sm\">\n        <label for=\"actionType\" class=\"control-label\">Run only in pages matching</label>\n        {{input value=editing.accept class=\"form-control\" }}\n    </div>\n    <div class=\"form-group form-group-sm\">\n        <label for=\"actionType\" class=\"control-label\">Don't run in pages matching</label>\n        {{input value=editing.reject class=\"form-control\" }}\n    </div>\n    <div class=\"btn-center\">\n        <button {{action \"back\"}} class=\"btn btn-primary fa fa-icon fa-check\">\n            Back\n        </button>\n    </div>\n{{/if}}\n{{else}}\n    {{#tree-list}}\n        {{#tree-list-item hasChildren=true childsReorderable=true reorder=(action \"reorderPageAction\") as |options|}}\n            {{#if (eq options.section \"item\")}}\n                {{#list-item-text}} OnLoad {{/list-item-text}}\n                {{list-item-icon icon='add' action=(action \"addNew\") }}\n            {{else if (eq options.section \"subtrees\")}}\n                {{#each pageActions as |action index|}}\n                    {{#tree-list-item classNames=\"page-action\" as |options|}}\n                        {{reorder-handler}}\n                        {{list-item-icon icon=action.type}}\n                        {{#list-item-text}}\n                            {{#if action.selector}}<code>{{action.selector}}</code>{{/if}}\n                            {{#if action.value}} to <code>\"{{action.value}}\"</code>{{/if}}\n                            {{#if action.timeout}} for {{action.timeout}}ms{{/if}}\n                        {{/list-item-text}}\n                        {{list-item-icon icon='options' action=(action \"editPageAction\" action)}}\n                        {{list-item-icon icon='remove' action=(action \"deletePageAction\" index)}}\n                    {{/tree-list-item}}\n                {{else}}\n                    {{#tree-list-item}}\n                        {{#list-item-text}} No actions have been recorded yet{{/list-item-text}}\n                    {{/tree-list-item}}\n                {{/each}}\n            {{/if}}\n        {{/tree-list-item}}\n    {{/tree-list}}\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-list.hbs",
    "content": "{{#if showSearch}}\n    {{input-with-clear update=(action \"search\") clear=(action \"clear\") placeholder=\"Search...\"}}\n    <div class='project-list-items'>\n        {{#each filteredProjects as |project|}}\n            {{#if isSelecting}}\n                <div class='list-group-item'\n                 onclick={{action 'selectProject' project}}>\n                    {{project.name}}\n                </div>\n            {{else}}\n                {{link-to project.name 'projects.project' project.id\n                  class=\"list-group-item\"\n                }}\n            {{/if}}\n        {{/each}}\n    </div>\n{{else}}\n    <div class='project-list-items'>\n        {{#each projects as |project|}}\n            {{#if isSelecting}}\n                <div class='list-group-item'\n                 onclick={{action 'selectProject' project}}>\n                    {{project.name}}\n                </div>\n            {{else}}\n                {{link-to project.name 'projects.project' project.id\n                  class=\"list-group-item\"\n                }}\n            {{/if}}\n        {{/each}}\n    </div>\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-listing.hbs",
    "content": "{{#tree-list}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title project-listing\"}}\n                Project\n                {{#animation-container\n                    hide=isPublished\n                    class=\"inline project-changes\"\n                    setHeight=false\n                }}\n                    {{#link-to 'projects'}}Show all projects{{/link-to}}\n                {{/animation-container}}\n                {{#animation-container hide=notPublished id=\"project-changes-info\" class=\"inline project-changes\" setHeight=false}}\n                    Not published\n                    {{#help-icon tooltipClasses=\"tooltip-wide\"}}\n                        Not published\n                        <p>\n                            This project has changes that have not yet been published.\n                        </p>\n                        <p>\n                            When you make changes in Portia a private workspace is created for your\n                            user, separate from the rest of the project. Other users cannot see\n                            these changes until they are published, and you cannot see changes that\n                            were published by other users after you started making changes.\n                        </p>\n                        <p>\n                            To run a spider or make your changes visible to other users you must\n                            first publish ({{icon-button icon='publish'}}) the changes.\n                        </p>\n                        <p>\n                            To clean your private workspace, and get back to the most recently\n                            published version of your project, you can discard your changes\n                            ({{icon-button icon='rollback'}}).\n                        </p>\n                    {{/help-icon}}\n                {{/animation-container}}\n            {{/list-item-text}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item}}\n                {{#link-to 'projects.project' project}}\n                    {{indentation-spacer}}\n                    {{list-item-icon icon='project'}}\n                    {{#list-item-text}}\n                        {{project.name}}\n                    {{/list-item-text}}\n                {{/link-to}}\n\n                {{#list-item-icon-menu\n                  onClick=(action 'clickProjectOptions')\n                  icon='vertical-ellipsis' as |options|\n                }}\n                    {{#if (and versionControlled hasChanges)}}\n                        <li><a {{action (chain-actions (action 'publish')\n                                         options.closeMenu)}}>\n                            {{list-item-icon\n                              class=\"icon\"\n                              icon=\"publish\"}}Publish project\n                        </a></li>\n                        <li><a {{action (chain-actions (action 'discard')\n                                         options.closeMenu)}}>\n                            {{list-item-icon\n                              class=\"icon\"\n                              icon=\"rollback\"}}Discard changes\n                        </a></li>\n                    {{else if deployable}}\n                        <li><a {{action (chain-actions (action 'deploy')\n                                         options.closeMenu)}}>\n                            {{list-item-icon\n                              class=\"icon\"\n                              icon=\"publish\"}}Deploy project\n                        </a></li>\n                    {{/if}}\n                    <li> <a href={{downloadUrl}} target='_blank'>\n                        {{list-item-icon class=\"icon\" icon=\"download\"}}Download as Portia\n                    </a> </li>\n                    <li><a href={{downloadCodeUrl}} target='_blank'>\n                        {{list-item-icon class=\"icon\" icon=\"code\"}}Download as Scrapy\n                    </a> </li>\n                {{/list-item-icon-menu}}\n                <div class={{if isPulsing 'droplet'}}></div>\n\n            {{/tree-list-item}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-structure-listing.hbs",
    "content": "{{#tree-list hide=currentSchema}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n              Spider{{#animation-container class=\"inline\" hide=currentSpider setHeight=false}}s {{/animation-container}}&nbsp;{{pagination}}\n                {{#animation-container class=\"inline\" setHeight=false}}\n                    {{#help-icon}}\n                        Spiders\n                        <p>\n                            A spider crawls web pages to extract data.\n                        </p>\n                        <p>\n                            It is most common to create a spider for each website you wish to crawl, but\n                            a single spider can also crawl more than one website.\n                        </p>\n                        <p>\n                            To create a spider first visit a web page that you would like to start\n                            crawling from.\n                        </p>\n                    {{/help-icon}}\n                {{/animation-container}}\n                {{spider-message currentSpider=currentSpider}}\n            {{/list-item-text}}\n            {{#if currentSpider}}\n                {{#animation-container}}\n                    {{#link-to 'projects.project' project class='inline project-change'}}\n                        Show all spiders\n                    {{/link-to}}\n                {{/animation-container}}\n            {{else}}\n                {{#tooltip-container tooltipFor=\"add-spider-button\" text=addSpiderTooltipText tooltipContainer='body'}}\n                    {{list-item-icon id=\"add-spider-button\" icon='add' disabled=(not canAddSpider) action=(action 'addSpider')}}\n                {{/tooltip-container}}\n            {{/if}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item hide=(or project.spiders.isPending project.spiders.length) as |options|}}\n                {{#list-item-text class=\"text-center\"}}\n                    This project has no spiders\n                {{/list-item-text}}\n            {{/tree-list-item}}\n            {{#tree-list-item hide=(or project.spiders.isPending project.spiders.length) class=\"help\" as |options|}}\n                <div class=\"alert alert-info\" role=\"alert\">\n                    <p>\n                        To create a spider first visit a web page that you would like to start\n                        crawling from.\n                    </p>\n                </div>\n            {{/tree-list-item}}\n\n            {{#if (and noCurrentSpider isLarge)}}\n                {{#tree-list-item}}\n                    <input\n                     class='form-control'\n                     placeholder='Search for your spider'\n                     value={{spiderSearch}}\n                     oninput={{perform filterSpiders\n                              sortedSpiders\n                              value='target.value'}}\n                    />\n                {{/tree-list-item}}\n            {{/if}}\n\n            {{#if (and noCurrentSpider hasPreviousPage)}}\n                {{#tree-list-item isCentered=true}}\n                    <i\n                     onclick={{perform turnPage -1}}\n                     class='fa fa-angle-up twice-x clickable'>\n                    </i>\n                {{/tree-list-item}}\n            {{/if}}\n\n            <div class={{if isFiltering 'very-opaque'}}>\n            {{#each spiders as |spider|}}\n                {{spider-row spider=spider project=project}}\n            {{/each}}\n            </div>\n\n            {{#if (and noCurrentSpider hasNextPage)}}\n                {{#tree-list-item isCentered=true}}\n                    <i\n                     onclick={{perform turnPage 1}}\n                     class='fa fa-angle-down twice-x clickable'>\n                    </i>\n                {{/tree-list-item}}\n            {{/if}}\n\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n\n{{#tree-list hide=currentSpider}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Data Format{{#animation-container class=\"inline\" hide=currentSchema setHeight=false}}s{{/animation-container}}\n                {{#animation-container class=\"inline\" setHeight=false}}\n                    {{#help-icon}}\n                        Data Formats\n                        <p>\n                            A data format describes the data that you want to extract.\n                        </p>\n                        <p>\n                            Spiders can share a data format to extract the same logical data type from\n                            different web pages.\n                        </p>\n                        <p>\n                            You can create data formats in advance, but you can also create them later,\n                            while annotating the data on a web page.\n                        </p>\n                    {{/help-icon}}\n                {{/animation-container}}\n            {{/list-item-text}}\n            {{#if currentSchema}}\n                {{#animation-container}}\n                    {{#link-to 'projects.project' project class='inline project-change'}}\n                        Show all schemas\n                    {{/link-to}}\n                {{/animation-container}}\n            {{else}}\n                {{#tooltip-container tooltipFor=\"add-schema-button\" text=\"Create a new Schema\" tooltipContainer='body'}}\n                    {{list-item-icon id=\"add-schema-button\" icon='add' action=(action 'addSchema')}}\n                {{/tooltip-container}}\n            {{/if}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item hide=(or project.schemas.isPending project.schemas.length) as |options|}}\n                {{#list-item-text class=\"text-center\"}}\n                    This project has no data formats\n                {{/list-item-text}}\n            {{/tree-list-item}}\n            {{#each project.schemas as |schema|}}\n                {{#tree-list-item hide=(and currentSchema (not-eq schema currentSchema)) as |options|}}\n                    {{#link-to 'projects.project.schema' schema}}\n                        {{#if schema.default}}\n                            {{#help-icon icon='default-add' placement='right' classes='help-icon indentation-spacer'}}\n                                This Data Format will be used for new samples by default\n                            {{/help-icon}}\n                        {{else}}\n                            {{indentation-spacer}}\n                        {{/if}}\n                        {{list-item-icon icon='schema'}}\n                        {{list-item-editable value=(mut schema.name) editing=(mut schema.new) onChange=(action 'saveSchema' schema)}}\n                    {{/link-to}}\n                    {{#animation-container class=\"icon\" setWidth=false setHeight=false}}\n                        {{#list-item-icon-menu icon='vertical-ellipsis' as |options|}}\n                            {{#if schema.default}}\n                                <li {{action 'removeSchemaDefault' schema}}><a>\n                                {{list-item-icon class=\"icon\" icon=\"default-remove\"}}Remove as Default\n                                </a></li>\n                            {{else}}\n                                <li {{action 'setSchemaDefault' schema}}><a>\n                                {{list-item-icon class=\"icon\" icon=\"default-add\"}}Set as Default\n                                </a></li>\n                            {{/if}}\n                            {{dropdown-delete\n                              onDelete=(action 'removeSchema' schema)\n                              text='Delete Schema'\n                              disabled=(gt schema.items.length 0)\n                            }}\n                        {{/list-item-icon-menu}}\n                    {{/animation-container}}\n                {{/tree-list-item}}\n            {{/each}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-structure-spider-feed-url.hbs",
    "content": "{{#tree-list-item as |options|}}\n    {{#link-to 'projects.project.spider.start-url.options' index bubbles=false}}\n        {{indentation-spacer}}\n        {{list-item-icon icon='url-feed'}}\n        {{#list-item-text class=\"txt-describe\"}}{{url}}{{/list-item-text}}\n        {{#link-to 'projects.project.spider' bubbles=false}}\n            {{#link-to 'projects.project.spider.start-url.options' index\n              bubbles=false\n              class=\"ignore-active\"\n            }}\n                {{list-item-icon icon='options'}}\n            {{/link-to}}\n        {{/link-to}}\n        {{list-item-icon icon='remove' action=(action removeStartUrl) bubbles=false}}\n    {{/link-to}}\n{{/tree-list-item}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-structure-spider-generated-url.hbs",
    "content": "{{#tree-list-item as |options|}}\n    {{#link-to 'projects.project.spider.start-url.options' index bubbles=false}}\n        {{indentation-spacer}}\n        {{list-item-icon icon='url-generated'}}\n        {{#list-item-text class=\"generated-url\"}}{{url}}{{/list-item-text}}\n        {{#link-to 'projects.project.spider' bubbles=false}}\n            {{#link-to 'projects.project.spider.start-url.options' index bubbles=false class=\"ignore-active\"}}\n                {{list-item-icon icon='options'}}\n            {{/link-to}}\n        {{/link-to}}\n        {{list-item-icon icon='remove' action=(action removeStartUrl) bubbles=false}}\n    {{/link-to}}\n{{/tree-list-item}}\n"
  },
  {
    "path": "portiaui/app/templates/components/project-structure-spider-url.hbs",
    "content": "{{#tree-list-item as |options|}}\n    {{#link-to 'projects.project.spider' spider (query-params url=url baseurl=null) active=false}}\n        {{indentation-spacer}}\n        {{list-item-icon icon='url'}}\n        {{list-item-editable value=(mut viewUrl) editing=(mut urlAdded) spellcheck=false}}\n        {{list-item-icon icon='remove' action=(action removeStartUrl) bubbles=false}}\n    {{/link-to}}\n{{/tree-list-item}}\n"
  },
  {
    "path": "portiaui/app/templates/components/regex-pattern-list.hbs",
    "content": "{{#tree-list}}\n    {{#if list.length}}\n        {{#each list as |item index|}}\n            {{#tree-list-item hasChildren=spider.startUrls.length as |options|}}\n                {{list-item-editable value=item spellcheck=false onChange=(action 'changePattern' index)}}\n                {{list-item-icon icon='remove' action=(action 'removePattern' index)}}\n            {{/tree-list-item}}\n        {{/each}}\n    {{else}}\n        {{#tree-list-item hasChildren=spider.startUrls.length as |options|}}\n            No patterns defined\n        {{/tree-list-item}}\n    {{/if}}\n{{/tree-list}}\n<div class=\"form-group new-pattern {{if (not newPatternCorrect) 'has-error'}}\">\n    <div>\n        {{input type='text' class=\"form-control\" placeholder=\"Regular expression\" spellcheck=false value=(mut newPattern) change=(action 'stopPropagation') escape-press=(action 'clearPattern') insert-newline=(action 'addPattern')}}\n        {{icon-button icon='add' disabled=(or (not newPattern) (not newPatternCorrect)) action=(action 'addPattern' newPattern)}}\n    </div>\n    <span class=\"help-block{{if newPatternCorrect ' hide'}}\">The input value is not a valid regular expression.</span>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/save-status.hbs",
    "content": "{{#tooltip-container tooltipFor=(concat \"label-\" elementId) tooltipContainer='body' as |tooltip|}}\n    {{#if (eq tooltip.section 'tooltip')}}\n        <p class=\"first\">Every change you make is automatically saved by Portia</p>\n    {{else}}\n        <span id=\"label-{{elementId}}\" class=\"label label-{{labelColorClass}}\">\n            {{#if isSaving}}\n                Saving <span>.</span><span>.</span><span>.</span>\n            {{else if timeSinceLastSave}}\n                Last saved {{timeSinceLastSave}}\n            {{else}}\n                Changes are saved automatically\n            {{/if}}\n        </span>\n    {{/if}}\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/components/schema-structure-listing.hbs",
    "content": "{{#tree-list}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Fields\n                {{#help-icon}}\n                    Fields\n                    <p>\n                        A field describes the type of a value that you want to extract.\n                    </p>\n                    <p>\n                        Sample pages map the elements of a web page to the individual fields of a\n                        data format.\n                    </p>\n                    <p>\n                        You can create fields in advance, but you can also create them later, while\n                        annotating the data on a web page.\n                    </p>\n                {{/help-icon}}\n            {{/list-item-text}}\n            {{#tooltip-container tooltipFor=\"add-field-button\" text=\"Add field\" tooltipContainer='body'}}\n                {{list-item-icon id=\"add-field-button\" icon='add' action=(action 'addField')}}\n            {{/tooltip-container}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item hide=(or schema.fields.isPending schema.fields.length) as |options|}}\n                {{#list-item-text class=\"text-center\"}}\n                    This data format has no fields\n                {{/list-item-text}}\n            {{/tree-list-item}}\n            {{#each schema.fields as |field|}}\n                {{#tree-list-item as |options|}}\n                    {{#link-to 'projects.project.schema.field' field}}\n                        {{indentation-spacer}}\n                        {{list-item-icon icon=field.type}}\n                        {{list-item-editable value=(mut field.name) editing=(mut field.new) onChange=(action 'saveField' field) validate=(action 'validateFieldName' field)}}\n                        {{#list-item-field-type field=field}}\n                            Change field type\n                        {{/list-item-field-type}}\n                        {{#link-to 'projects.project.schema.field.options' field bubbles=false class=\"ignore-active\"}}\n                            {{list-item-icon icon='options'}}\n                        {{/link-to}}\n                        {{list-item-icon icon='remove' disabled=(not (not field.annotations.length)) action=(action 'removeField' field) bubbles=false}}\n                    {{/link-to}}\n                {{/tree-list-item}}\n            {{/each}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/scrapinghub-links.hbs",
    "content": "<li>\n    <a href=\"http://portia.readthedocs.org/en/2.0-docs/\" target=\"_blank\">\n        Portia 2.0 Documentation\n    </a>\n</li>\n"
  },
  {
    "path": "portiaui/app/templates/components/select-box.hbs",
    "content": "{{#dropdown-widget\n  class=\"select-box\"\n  open=(mut open)\n  active=(mut viewValue)\n  focused=value\n  menuContainer=menuContainer\n  menuClass=menuClass\n  menuAlign=menuAlign\n  isDisabled=isDisabled\n  onClick=(action 'menuClicked')\n  onClose=(action 'menuClosed') as |widget|}}\n\n    {{#if (eq widget.section 'widget')}}\n    <button id=\"{{inputId}}\" class=\"btn btn-default form-control dropdown-toggle {{if buttonClass buttonClass}} {{if isDisabled 'disabled'}}\" type=\"button\" name={{name}} aria-haspopup=\"true\" aria-expanded=\"true\" {{action widget.toggleMenu 'button'}}>\n            <span class=\"value\">\n                {{#if valueAttribute}}\n                    {{get viewValue valueAttribute}}\n                {{else}}\n                    {{viewValue}}\n                {{/if}}\n            </span>\n            <span class=\"caret\"></span>\n        </button>\n    {{else if (eq widget.section 'menu')}}\n        {{#if hasBlock}}\n            {{yield (hash menu=widget.menu header=widget.header item=widget.item divider=widget.divider setValue=(action 'setValue') setViewValue=(action 'setViewValue') setValueAndClose=(action 'setValueAndClose') closeMenu=widget.closeMenu)}}\n        {{else}}\n            {{#each choices as |choice|}}\n                {{#widget.item value=choice action=(action 'setValueAndClose' choice)}}\n                    {{#if valueAttribute}}\n                        {{get choice valueAttribute}}\n                    {{else}}\n                        {{choice}}\n                    {{/if}}\n                {{/widget.item}}\n            {{/each}}\n        {{/if}}\n    {{/if}}\n{{/dropdown-widget}}\n"
  },
  {
    "path": "portiaui/app/templates/components/show-links-button.hbs",
    "content": "{{#tooltip-container tooltipFor=\"show-links-button\" text=\"Toggle link highlighting\" tooltipContainer='body' as |options|}}\n    <button id=\"show-links-button\" class=\"btn btn-default {{if spider.showLinks 'active'}}\" disabled={{disableLinks}} {{action 'toggleShowLinks'}}>\n        {{icon-button icon='link'}}\n    </button>\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/components/show-links-legend.hbs",
    "content": "{{#tree-list}}\n    {{#tree-list-item as |options|}}\n        {{list-item-badge value=followedLinks color=colors.green}}\n        Followed\n    {{/tree-list-item}}\n    {{#tree-list-item as |options|}}\n        {{list-item-badge value=jsLinks color=colors.blue}}\n        Followed when Javascript is enabled\n    {{/tree-list-item}}\n    {{#tree-list-item as |options|}}\n        {{list-item-badge value=ignoredLinks color=colors.red}}\n        Not Followed\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/sliding-main.hbs",
    "content": "{{yield}}\n"
  },
  {
    "path": "portiaui/app/templates/components/spider-indentation.hbs",
    "content": "{{indentation-spacer}}\n"
  },
  {
    "path": "portiaui/app/templates/components/spider-message.hbs",
    "content": "{{#if hasSpider}}\n    {{#tooltip-container tooltipFor='run-spider-button' text='Run this spider.' tooltipContainer='body'}}\n        {{list-item-icon id='run-spider-button' icon='play' action=(action 'runSpider' currentSpider)}}\n    {{/tooltip-container}}\n{{/if}}"
  },
  {
    "path": "portiaui/app/templates/components/spider-options.hbs",
    "content": "<h3>Initialization</h3>\n<form {{action \"save\" on=\"change\"}}>\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"performLogin\" checked=(mut spider.performLogin)}} Perform login\n        </label>\n    </div>\n    {{#if spider.performLogin}}\n        <div class=\"form-group\">\n            <label for=\"loginUrl\">Login URL</label>\n            {{input type=\"url\" class=\"form-control\" id=\"loginUrl\" value=(mut spider.loginUrl)}}\n        </div>\n        <div class=\"form-group\">\n            <label for=\"loginUser\">Username</label>\n            {{input type=\"text\" class=\"form-control\" id=\"loginUser\" value=(mut spider.loginUser)}}\n        </div>\n        <div class=\"form-group\">\n            <label for=\"loginPassword\">Password</label>\n            {{input type=\"text\" class=\"form-control\" id=\"loginPassword\" value=(mut spider.loginPassword)}}\n        </div>\n    {{/if}}\n</form>\n\n<h3>Javascript support</h3>\n<form {{action \"save\" on=\"change\"}}>\n    <div class=\"checkbox\">\n        <label>\n            {{input type=\"checkbox\" name=\"jsEnabled\" checked=(mut spider.jsEnabled)}} Enable Javascript\n        </label>\n    </div>\n    {{#if spider.jsEnabled}}\n        <div>Enable Javascript for URLs that match these patterns</div>\n        {{regex-pattern-list list=spider.jsEnablePatterns onChange=(action 'save')}}\n        <div>Disable Javascript for URLs that match these patterns</div>\n        {{regex-pattern-list list=spider.jsDisablePatterns onChange=(action 'save')}}\n    {{/if}}\n</form>\n"
  },
  {
    "path": "portiaui/app/templates/components/spider-row.hbs",
    "content": "{{#tree-list-item hide=(and currentSpider (not-eq spider currentSpider)) as |options|}}\n    {{#link-to 'projects.project.spider' spider (query-params url=(or spider.firstUrl null) baseurl=null) current-when='projects.project.spider'}}\n        {{spider-indentation spider=spider currentSpider=currentSpider}}\n        {{list-item-icon icon='spider'}}\n\n        {{#if currentSpider}}\n            {{#list-item-text}}{{spider.nameAlias}}{{/list-item-text}}\n        {{else}}\n            {{list-item-editable value=(mut spider.nameAlias) onChange=(action 'saveSpiderName' spider) validate=(action 'validateSpiderName' spider)}}\n        {{/if}}\n    {{/link-to}}\n\n    {{#animation-container class=\"icon\" setWidth=false setHeight=false}}\n        {{#list-item-icon-menu icon='vertical-ellipsis' as |options|}}\n            <li>\n              <a href={{downloadUrl}} target='_blank'>\n                  {{list-item-icon class=\"icon\" icon=\"download\"}}Download as Portia\n                </a>\n            </li>\n            <li>\n              <a href={{downloadCodeUrl}} target='_blank'>\n                  {{list-item-icon class=\"icon\" icon=\"code\"}}Download as Scrapy\n                </a>\n            </li>\n            {{#if isCopyingSpider}}\n                {{project-list\n                  projects=projects\n                  withinDropdown=true\n                  onClear=(action 'closeSpiderOptions')\n                  selectProject=(action 'copyToProject' options)\n                }}\n            {{else}}\n                {{#options.item value=\"Copy\"\n                  action=(action 'copySpider') as |value|}}\n                    {{list-item-icon class=\"icon\" icon=\"copy\"}}{{value}}\n                {{/options.item}}\n            {{/if}}\n            {{dropdown-delete\n              onDelete=(action 'removeSpider' spider)\n              text='Delete Spider'\n            }}\n        {{/list-item-icon-menu}}\n    {{/animation-container}}\n\n    {{#animation-container class=\"icon\" hide=(not-eq spider currentSpider) setWidth=false setHeight=false}}\n        {{#tooltip-container tooltipFor=(concat \"spider-options-button\" (guid spider)) text=\"Advanced spider options\" tooltipContainer='body'}}\n            {{#link-to 'projects.project.spider' id=(concat \"spider-options-button\" (guid spider)) bubbles=false}}\n                {{#link-to 'projects.project.spider.options' bubbles=false class=\"ignore-active\"}}\n                    {{list-item-icon icon='options'}}\n                {{/link-to}}\n            {{/link-to}}\n        {{/tooltip-container}}\n    {{/animation-container}}\n\n{{/tree-list-item}}\n\n"
  },
  {
    "path": "portiaui/app/templates/components/spider-structure-listing.hbs",
    "content": "{{#tree-list hide=currentSample}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Start Pages\n                {{#help-icon}}\n                    Start Pages\n                    <p>\n                        Start pages are web pages that a spider will begin its crawl from. It&nbsp;will\n                        then continue to other web pages according to the defined link crawling\n                        rules.\n                    </p>\n                    <p>\n                        Start pages also restrict the domains that a spider will crawl. A&nbsp;spider\n                        will never follow a link that goes to a domain not included in the start\n                        pages.\n                    </p>\n                    <p>\n                        Without a start page the spider cannot begin crawling.\n                    </p>\n                {{/help-icon}}\n            {{/list-item-text}}\n            {{#tooltip-container tooltipFor=\"add-start-url-button\" text=\"Start crawling from the current page\" tooltipContainer='body'}}\n                {{#list-item-icon-menu icon='add-dropdown' as |options|}}\n                    {{#options.item value=\"Add fixed URL\"\n                      action=(chain-actions (action closeOptions) (action 'addStartUrl') options.closeMenu) as |value|}}\n                        {{list-item-icon class=\"icon\" icon=\"url\"}}{{value}}\n                    {{/options.item}}\n                    {{#options.item value=\"Add generation URL\" action=(chain-actions (action 'addGenerationUrl') options.closeMenu) as |value|}}\n                        {{list-item-icon class=\"icon\" icon=\"url-generated\"}}{{value}}\n                    {{/options.item}}\n                    {{#options.item value=\"Add feed URL\"\n                      action=(chain-actions (action closeOptions) (action 'addFeedUrl') options.closeMenu) as |value|}}\n                        {{list-item-icon class=\"icon\" icon=\"url-feed\"}}{{value}}\n                    {{/options.item}}\n                {{/list-item-icon-menu}}\n            {{/tooltip-container}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item hide=spider.startUrls.length as |options|}}\n                {{#list-item-text class=\"text-center\"}}\n                    This spider has no start pages\n                {{/list-item-text}}\n            {{/tree-list-item}}\n            {{#tree-list-item hide=spider.startUrls.length class=\"help\" as |options|}}\n                <div class=\"alert alert-warning\" role=\"alert\">\n                    <p>\n                        A spider needs at least one start page to start crawling from.\n                    </p>\n                </div>\n            {{/tree-list-item}}\n            {{#each spider.startUrls key=\"@index\" as |startUrl index|}}\n                {{#if (or (not newUrl) (not-eq urlValue startUrl.url))}}\n                    {{component startUrl.componentName\n                          index=index\n                          spider=spider\n                          startUrl=startUrl\n                          removeStartUrl=(action 'removeStartUrl' startUrl)\n                    }}\n                {{/if}}\n            {{/each}}\n            {{#if newUrl}}\n                {{project-structure-spider-url\n                  spider=spider\n                  startUrl=newStartUrl\n                  url=urlValue\n                  urlAdded=(mut newUrl)\n                  removeStartUrl=(action 'removeStartUrl' newUrl)\n                }}\n            {{/if}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n\n{{#tree-list hide=currentSample}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Link Crawling\n            {{/list-item-text}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item as |options|}}\n                {{indentation-spacer}}\n                {{list-item-icon icon='link'}}\n                {{list-item-link-crawling spider=spider}}\n                {{#if (not-eq spider.linksToFollow 'none')}}\n                    {{#link-to 'projects.project.spider' bubbles=false}}\n                        {{#link-to 'projects.project.spider.link-options' bubbles=false class=\"ignore-active\"}}\n                            {{list-item-icon icon='options'}}\n                        {{/link-to}}\n                    {{/link-to}}\n                {{/if}}\n            {{/tree-list-item}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n\n{{#tree-list}}\n    {{#tree-list-item hasChildren=true as |options|}}\n        {{#if (eq options.section \"item\")}}\n            {{#list-item-text class=\"title\"}}\n                Sample Page{{#animation-container class=\"inline\" hide=currentSample setHeight=false}}s{{/animation-container}}\n                {{#animation-container class=\"inline\" setHeight=false}}\n                    {{#help-icon}}\n                        Sample Pages\n                        <p>\n                            A sample page is a web page with the data you want to extract annotated.\n                        </p>\n                        <p>\n                            When the spider crawls to a new web page it finds the sample page that is\n                            the best match, and uses it to extract data.\n                        </p>\n                        <p>\n                            If you see a web page that the spider is having trouble extracting data\n                            from, you can create a new sample page from that web page to improve the\n                            extraction.\n                        </p>\n                    {{/help-icon}}\n                {{/animation-container}}\n            {{/list-item-text}}\n            {{#if currentSample}}\n                {{#animation-container}}\n                    {{#link-to 'projects.project.spider' spider}}\n                        Show all samples\n                    {{/link-to}}\n                {{/animation-container}}\n            {{else}}\n                {{#tooltip-container tooltipFor=\"add-sample-button\" text=\"Create a new sample from the current page\" tooltipContainer='body'}}\n                    {{list-item-icon id=\"add-sample-button\" icon='add' disabled=(not canAddSample) action=(action 'addSample')}}\n                {{/tooltip-container}}\n            {{/if}}\n        {{else if (eq options.section \"subtrees\")}}\n            {{#tree-list-item hide=(or spider.samples.isPending spider.samples.length) as |options|}}\n                {{#list-item-text class=\"text-center\"}}\n                    This spider has no sample pages\n                {{/list-item-text}}\n            {{/tree-list-item}}\n            {{#tree-list-item hide=(or spider.samples.isPending spider.samples.length) class=\"help\" as |options|}}\n                <div class=\"alert alert-info\" role=\"alert\">\n                    <p>\n                        Navigate to a web page that has the data you need, and create a new sample\n                        page to begin annotating the data.\n                    </p>\n                </div>\n            {{/tree-list-item}}\n            {{#each spider.samples as |sample|}}\n                {{#tree-list-item hide=(and currentSample (not-eq sample currentSample)) as |options|}}\n                    {{#link-to 'projects.project.spider.sample' sample (query-params url=sample.url baseurl=null) current-when='projects.project.spider.sample'}}\n                        {{indentation-spacer}}\n                        {{list-item-icon icon='sample'}}\n                        {{list-item-editable value=(mut sample.name) editing=(mut sample.new) onChange=(action 'saveSample' sample)}}\n                    {{/link-to}}\n\n                    {{#list-item-icon-menu icon='vertical-ellipsis' as |options|}}\n                        {{dropdown-delete\n                          onDelete=(action 'removeSample' sample)\n                          text='Delete Sample'\n                        }}\n                    {{/list-item-icon-menu}}\n\n                {{/tree-list-item}}\n            {{/each}}\n        {{/if}}\n    {{/tree-list-item}}\n{{/tree-list}}\n"
  },
  {
    "path": "portiaui/app/templates/components/start-url-options.hbs",
    "content": "{{#tool-group id=\"fragments-options-group\" collapsible=false onClose=(route-action 'closeOptions') as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n    {{#group.tab toolId=\"annotation-options\"}}{{title}}{{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"annotation-options\" as |active|}}\n            {{component startUrl.optionsComponentName\n              spider=spider\n              startUrl=startUrl\n              saveSpider=saveSpider\n            }}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/components/tool-group.hbs",
    "content": "<header class=\"tool-group-header\">\n    <ul class=\"nav nav-tabs\">\n        {{yield (hash section=\"tabs\" group=this tab=(component 'tool-tab' group=this) panel=(component 'tool-panel' group=this))}}\n        <li class=\"tool-group-icons pull-right\">\n            {{#if collapsible}}\n                <a class=\"tool-group-collapse\" {{action 'toggleCollapsed'}}>\n                    <span class=\"caret\"></span>\n                </a>\n            {{/if}}\n            {{#if onClose}}\n                <a class=\"tool-group-close\" {{action 'close'}}>\n                    {{icon-button icon='close'}}\n                </a>\n            {{/if}}\n        </li>\n    </ul>\n</header>\n<section class=\"tool-group-content\">\n    {{yield (hash section=\"panels\" group=this tab=(component 'tool-tab' group=this) panel=(component 'tool-panel' group=this))}}\n</section>\n"
  },
  {
    "path": "portiaui/app/templates/components/tool-panel.hbs",
    "content": "<div>\n    {{yield active}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/tool-tab.hbs",
    "content": "<a {{action 'selectTab'}}>\n    {{yield active}}\n</a>\n"
  },
  {
    "path": "portiaui/app/templates/components/tooltip-container.hbs",
    "content": "{{yield (hash section='body')}}\n<div class={{concat \"tooltip\" (if tooltipClasses (concat ' ' tooltipClasses))}} role=\"tooltip\" data-tooltip-id=\"{{elementId}}\">\n    <div class=\"tooltip-arrow\"></div>\n    <div class=\"tooltip-content\">\n        {{#if text}}\n            {{text}}\n        {{else}}\n            {{yield (hash section='tooltip')}}\n        {{/if}}\n    </div>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/tooltip-icon.hbs",
    "content": "{{#tooltip-container\n  tooltipFor=elementId\n  text=text\n  tooltipContainer='body'\n}}\n    {{icon-button\n      id=elementId\n      icon=icon\n      modifyClasses=modifyClasses\n      action=(action 'onClick')\n    }}\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/components/tree-list-item-row.hbs",
    "content": "<div class=\"tree-list-item-content {{if isCentered 'flex-center'}}\">\n    {{yield}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/tree-list-item.hbs",
    "content": "<div class=\"animation-content\">\n    {{#tree-list-item-row\n      isCentered=isCentered\n      onMouseEnter=onMouseEnter\n      onMouseLeave=onMouseLeave\n    }}\n        {{yield (hash section=\"item\")}}\n    {{/tree-list-item-row}}\n    {{#if hasChildren}}\n        {{#tree-list}}\n            {{yield (hash section=\"subtrees\")}}\n        {{/tree-list}}\n    {{/if}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/components/tree-list.hbs",
    "content": "<ul class=\"animation-content\">\n    {{yield}}\n</ul>\n"
  },
  {
    "path": "portiaui/app/templates/components/url-bar.hbs",
    "content": "<div id=\"url-bar\" class=\"input-group\">\n    <span class=\"input-group-btn\">\n        <button class=\"btn btn-default\" type=\"button\" disabled={{backDisabled}} {{action 'back'}}>\n            <span class=\"fa fa-arrow-left\"></span>\n        </button>\n        <button class=\"btn btn-default\" type=\"button\" disabled={{forwardDisabled}} {{action 'forward'}}>\n            <span class=\"fa fa-arrow-right\"></span>\n        </button>\n        {{#tooltip-container tooltipFor=\"mode-feedback-icon\" tooltipContainer='body' placement='right' as |options|}}\n            {{#if (eq options.section 'tooltip')}}\n                {{#if (eq mode 'navigation')}}\n                    Browsing\n                    <p>\n                        You can interact with the web page in this mode.\n                    </p>\n                {{else if (eq mode 'data-annotation')}}\n                    Annotating\n                    <p>\n                        Click on elements in the sample to create data annotations.\n                    </p>\n                    <p>\n                        Close the sample to switch back to navigating mode.\n                    </p>\n                {{/if}}\n            {{else}}\n                <button id=\"mode-feedback-icon\" class=\"btn btn-mode btn-mode-{{mode}}\" type=\"button\">\n                    {{icon-button icon=mode}}\n                </button>\n            {{/if}}\n        {{/tooltip-container}}\n    </span>\n    {{buffered-input placeholder=\"Enter a website address\" value=(mut url) viewValue=(mut editedUrl) autofocus=autofocus autoSelect=true disabled=disabled spellcheck=false onEnterPress=(action 'submit')}}\n    <span class=\"input-group-btn\">\n        <button class=\"btn btn-default\" type=\"button\" disabled={{disabled}} {{action 'submit' url}}>\n            <span class=\"fa {{if loading 'fa-spin fa-refresh' (if (not (eq (or (or editedUrl url) null) browser.url)) 'fa-arrow-right' 'fa-repeat')}}\"></span>\n        </button>\n    </span>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/options-panels.hbs",
    "content": "<nav id=\"options-panels\">\n    {{outlet 'options-panels'}}\n</nav>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/conflicts/file-selector.hbs",
    "content": "<nav id=\"side-bar\">\n    <div>\n        {{#tree-list}}\n            {{#tree-list-item hasChildren=conflictedFiles.length as |options|}}\n                {{#if (eq options.section \"item\")}}\n                    {{#list-item-text}}\n                        Conflicted files\n                    {{/list-item-text}}\n                {{else if (eq options.section \"subtrees\")}}\n                    {{#each conflictedFiles as |file|}}\n                        {{#tree-list-item as |options|}}\n                            {{#if (eq options.section \"item\")}}\n                                {{#link-to 'projects.project.conflicts.conflict' file.encodedName }}\n                                    {{list-item-icon icon='file'}}\n                                    {{file.name}}\n                                {{/link-to}}\n                            {{/if}}\n                        {{/tree-list-item}}\n                    {{/each}}\n                {{/if}}\n            {{/tree-list-item}}\n        {{/tree-list}}\n    </div>\n</nav>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/conflicts/help.hbs",
    "content": "<div class=\"text-center conflicts-text\">\n    {{#if conflictedFiles}}\n        <h1>Aw, Snap!</h1>\n\n        <h3>Portia couldn't deploy the project because there are conflicts with another user's changes</h3>\n        <p>Resolve the conflicts manually by selecting the conflicting files from the left panel to deploy the project.</p>\n    {{else}}\n        <h1>All done</h1>\n\n        <p>\n            All conflicts are resolved, to continue, go back to the\n            {{link-to \"project page\" 'projects.project' projectController.model}}\n            and try to deploy again.\n        </p>\n    {{/if}}\n</div>\n\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/conflicts/resolver.hbs",
    "content": "<div class=\"conflicts-resolver-container\">\n    {{json-file-compare json=model.contents update=\"updateConflict\"}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/conflicts/topbar.hbs",
    "content": "<div class=\"nav-container topbar-conflicts\">\n    <span>Resolving <strong>{{model.file}}</strong></span>\n    {{#unless haveConflicts}}\n        <button type=\"button\" class=\"btn btn-default\" {{action 'saveFile'}}>\n            <i class=\"fa fa-icon fa-upload\"></i>\n            Save File\n        </button>\n    {{/unless}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/schema/field/options.hbs",
    "content": "{{#tool-group id=\"field-options-group\" collapsible=false onClose=(action 'closeOptions') as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"field-options\"}}\n            Field properties\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"field-options\" as |active|}}\n            {{field-options field=model}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/schema/field.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/schema/structure.hbs",
    "content": "{{schema-structure-listing schema=model}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/schema.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/link-options.hbs",
    "content": "{{#tool-group id=\"link-crawling-options-group\" collapsible=false onClose=(action 'closeOptions') as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"link-crawling-options\"}}\n            Link crawling options\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"link-crawling-options\" as |active|}}\n            {{link-crawling-options spider=model}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/options.hbs",
    "content": "{{#tool-group id=\"spider-options-group\" collapsible=false onClose=(action 'closeOptions') as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"spider-options\"}}\n            Spider properties\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"spider-options\" as |active|}}\n            {{spider-options spider=model}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/overlays.hbs",
    "content": "{{#if model.showLinks}}\n    <div class=\"none-hovered none-selected\">\n        {{#each linkOverlayElements key=\"guid\" as |overlay|}}\n            {{element-overlay viewPortElement=overlay.element color=overlay.color}}\n        {{/each}}\n    </div>\n{{/if}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/annotation/selection.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/annotation/options.hbs",
    "content": "{{#tool-group id=\"annotation-options-group\" collapsible=false onClose=(action 'closeOptions') as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"annotation-options\"}}\n            Annotation properties\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"extracted-items container-fluid\" toolId=\"annotation-options\" as |active|}}\n            {{annotation-options annotation=model}}\n            {{field-options field=model.field.content}}\n            {{extractor-options annotation=model}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/annotation.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/item.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/overlays.hbs",
    "content": "<div class=\"{{unless hoveredElement 'none-hovered'}} {{unless selectedElement 'none-selected'}} {{if hoveredModels.length 'group-hovered'}} {{if selectedModel 'group-selected'}}\">\n    {{#each sample.dataStructure.elements.all as |element|}}\n        {{#each (get sample.dataStructure.annotations (guid element)) as |annotation|}}\n            {{#if (eq annotation.constructor.modelName \"annotation\")}}\n                {{element-overlay class=(concat (if (eq element hoveredElement) 'hovered') (if (includes hoveredModels annotation) ' group-hovered') (if (and (eq element selectedElement) (eq selectedModel annotation)) ' selected') (if (eq selectedModel annotation) ' group-selected')) viewPortElement=element icon=(if (eq element hoveredElement) (get selectionModeIcons activeSelectionMode)) color=(array-get annotationColors annotation.orderedIndex)}}\n            {{/if}}\n        {{/each}}\n    {{/each}}\n    {{element-overlay class=(concat 'hover-overlay' (unless showHoverOverlay ' hide')) positionMode='edges' viewPortElement=hoveredElement icon=(get selectionModeIcons activeSelectionMode) color=hoverOverlayColor}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/structure.hbs",
    "content": "{{data-structure-listing sample=model annotationColors=annotationColors}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/toolbar.hbs",
    "content": "<span>Tools</span>\n\n<div class=\"tool-bar\">\n    <div class=\"btn-group\" role=\"group\">\n        {{#tooltip-container tooltipFor=\"css-tool-button\" placement='left' tooltipContainer='body' as |options| }}\n            {{#if (eq options.section 'tooltip')}}\n                Toggle page styling\n                <p>\n                    When page styling is enabled you see the web page as the page author intended,\n                    the same way it would appear in a browser. However, sometimes this makes it hard\n                    to select the data that you need, for example if there are overlapping parts of\n                    the page or if some parts are hidden.\n                </p>\n                <p>\n                    You can disable the page styling which will change the look and layout of the\n                    page but will force all content within the page to become visible.\n                </p>\n            {{else}}\n                <button id=\"css-tool-button\" type=\"button\" class=\"btn btn-default {{if cssEnabled 'active'}}\" {{action 'toggleCSS'}}>\n                    {{icon-button icon='tool-css'}}\n                </button>\n            {{/if}}\n        {{/tooltip-container}}\n    </div>\n\n    <div class=\"btn-group\" role=\"group\">\n        {{#tooltip-container tooltipFor=\"magic-tool-button\" placement='left' tooltipContainer='body' as |options| }}\n            {{#if (eq options.section 'tooltip')}}\n                Magic tool selector\n                <p>\n                    When the magic tool selector is enabled, it will attempt to choose the most\n                    useful tool for you automatically, based on the element you are pointing at in\n                    the web page.\n                </p>\n                <p>\n                    You can see which tool is being selected for you by looking at enabled tool\n                    selection button, and at the icon visible on the element under the cursor.\n                </p>\n                <p>\n                    If you need, you can manually change the tool for the next click, by switching\n                    to it using the tool selection buttons.\n                </p>\n            {{else}}\n                <button id=\"magic-tool-button\" type=\"button\" class=\"btn btn-default {{if magicToolActive 'active'}}\" {{action 'toggleMagicTool'}}>\n                    {{icon-button icon='tool-magic'}}\n                </button>\n            {{/if}}\n        {{/tooltip-container}}\n    </div>\n\n    <div class=\"btn-group\" role=\"group\">\n        {{#each-in selectionModeIcons as |mode icon|}}\n            {{#tooltip-container tooltipFor=(get selectionModeIds mode) tooltipContainer='body' text=(get selectionModeText mode) }}\n                <button id={{get selectionModeIds mode}} type=\"button\" class=\"btn btn-default {{if (eq activeSelectionMode mode) 'active'}}\" {{action (action (mut selectionMode) mode)}}>\n                    {{icon-button icon=icon}}\n                </button>\n            {{/tooltip-container}}\n        {{/each-in}}\n    </div>\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data/tools.hbs",
    "content": "{{#tool-group id=\"inspector-group\" as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"inspector\"}}\n            Inspector\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"inspector container-fluid\" toolId=\"inspector\"}}\n            {{inspector-panel sample=model annotationColors=annotationColors}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n\n{{extracted-items-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/data.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/item.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/structure.hbs",
    "content": "{{outlet 'sample-structure'}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample/toolbar.hbs",
    "content": "{{outlet 'browser-toolbar'}}\n{{#tooltip-container tooltipFor=\"sample-close-button-browser\" text=\"Finish editing your sample so you can continue browsing and see how it works on other pages\" tooltipContainer='body'}}\n    {{#link-to 'projects.project.spider' class=\"btn btn-primary\" activeClass=\"\" id=\"sample-close-button-browser\"}}\n        {{icon-button icon='close'}} Close sample\n    {{/link-to}}\n{{/tooltip-container}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/sample.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/start-url/options.hbs",
    "content": "{{start-url-options\n  spider = model.spider\n  startUrlId = model.startUrlId\n}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/structure.hbs",
    "content": "{{spider-structure-listing\n  project=model.project\n  spider=model\n  closeOptions=(route-action 'closeOptions')\n  transitionToFragments=(route-action 'transitionToFragments')\n}}\n{{outlet 'spider-structure'}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/toolbar.hbs",
    "content": "{{show-links-button spider=model}}\n{{add-start-url-button spider=model}}\n{{edit-sample-button spider=model}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider/tools.hbs",
    "content": "{{#if model.showLinks}}\n    {{#tool-group id=\"show-links-legend-group\" as |group|}}\n        {{#if (eq group.section \"tabs\")}}\n            {{#group.tab toolId=\"show-links-legend\"}}\n                Followed links\n            {{/group.tab}}\n        {{else if (eq group.section \"panels\")}}\n            {{#group.panel id=\"show-links-legend\" class=\"container-fluid\" toolId=\"show-links-legend\"}}\n                {{show-links-legend followedLinks=followedLinkElements.length jsLinks=jsLinkElements.length ignoredLinks=ignoredLinkElements.length}}\n            {{/group.panel}}\n        {{/if}}\n    {{/tool-group}}\n{{/if}}\n\n{{!--\n{{#tool-group id=\"actions-group\" as |group|}}\n    {{#if (eq group.section \"tabs\")}}\n        {{#group.tab toolId=\"actions\"}}\n            Actions\n        {{/group.tab}}\n    {{else if (eq group.section \"panels\")}}\n        {{#group.panel class=\"actions container-fluid\" toolId=\"actions\"}}\n             {{page-actions-editor pageActions=model.pageActions}}\n        {{/group.panel}}\n    {{/if}}\n{{/tool-group}}\n--}}\n{{extracted-items-group}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/spider.hbs",
    "content": "{{outlet}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/structure.hbs",
    "content": "<nav id=\"side-bar\">\n    <div>\n        {{save-status}}\n        {{project-listing project=model reload=\"reload\" conflict=\"conflict\"}}\n        {{project-structure-listing project=model}}\n        {{outlet 'project-structure'}}\n    </div>\n</nav>\n"
  },
  {
    "path": "portiaui/app/templates/projects/project/toolbar.hbs",
    "content": "{{create-spider-button project=model}}\n"
  },
  {
    "path": "portiaui/app/templates/projects/project.hbs",
    "content": "{{#browser-view-port clickHandler=(action \"viewPortClick\") as |options|}}\n    {{#if (eq options.section \"toolbar\")}}\n        {{outlet \"browser-toolbar\"}}\n    {{else if (eq options.section \"overlays\")}}\n        {{outlet \"browser-overlays\"}}\n    {{/if}}\n{{/browser-view-port}}\n"
  },
  {
    "path": "portiaui/app/templates/projects.hbs",
    "content": "<div class=\"project-list-container\">\n    <img src=\"/assets/images/portia-logo.svg\" alt=\"Portia logo\">\n\n    <h3>What would you like to work on today?</h3>\n    {{create-project-button projects=model}}\n    {{#if model}}\n        <p>Choose a project from the list below.</p>\n\n        {{project-list projects=model}}\n    {{/if}}\n</div>\n"
  },
  {
    "path": "portiaui/app/templates/tool-panels.hbs",
    "content": "<nav id=\"tool-panels\">\n    {{outlet 'tool-panels'}}\n</nav>\n"
  },
  {
    "path": "portiaui/app/transforms/array.js",
    "content": "import DS from 'ember-data';\n\nexport default DS.Transform.extend({\n  deserialize: function(serialized) {\n    if (Array.isArray(serialized)) {\n        return serialized;\n    }\n    return [];\n  },\n\n  serialize: function(deserialized) {\n    if (Array.isArray(deserialized)) {\n        return deserialized;\n    }\n    return [];\n  }\n});\n"
  },
  {
    "path": "portiaui/app/transforms/json.js",
    "content": "import DS from 'ember-data';\n\nexport default DS.Transform.extend({\n  deserialize: function(serialized) {\n    return JSON.parse(serialized);\n  },\n\n  serialize: function(deserialized) {\n    return JSON.stringify(deserialized);\n  }\n});\n"
  },
  {
    "path": "portiaui/app/transforms/start-url.js",
    "content": "import DS from 'ember-data';\nimport buildStartUrl from '../models/start-url';\n\nexport default DS.Transform.extend({\n  deserialize: function(serialized) {\n    if (Array.isArray(serialized)) {\n        return serialized.map((url) => buildStartUrl(url));\n    }\n    return [];\n  },\n\n  serialize: function(deserialized) {\n    if (Array.isArray(deserialized)) {\n        return deserialized.map((startUrl) => startUrl.serialize());\n    }\n    return [];\n  }\n});\n"
  },
  {
    "path": "portiaui/app/utils/attrs.js",
    "content": "import Ember from 'ember';\n\nexport function attrValue(attr) {\n    return (!Ember.isNone(attr) && typeof attr === 'object' && 'value' in attr) ? attr.value : attr;\n}\n\nexport function attrChanged(oldAttrs, newAttrs, key) {\n    return !oldAttrs || attrValue(oldAttrs[key]) !== attrValue(newAttrs[key]);\n}\n\nexport function attrChangedTo(oldAttrs, newAttrs, key, value) {\n    return attrChanged(oldAttrs, newAttrs, key) && attrValue(newAttrs[key]) === value;\n}\n\nexport default {\n    attrValue,\n    attrChanged,\n    attrChangedTo\n};\n"
  },
  {
    "path": "portiaui/app/utils/browser-features.js",
    "content": "import Ember from 'ember';\nconst { RSVP } = Ember;\n\nexport default function hasBrowserFeatures() {\n    // generatedcontent: detection issue with zoom in chrome\n    let features = [\n        \"eventlistener\", \"json\", \"postmessage\", \"queryselector\", \"requestanimationframe\", \"svg\",\n        \"websockets\", \"cssanimations\", \"csscalc\", \"flexbox\", \"nthchild\",\n        \"csspointerevents\", \"opacity\", \"csstransforms\", \"csstransitions\", \"cssvhunit\",\n        \"classlist\", \"placeholder\", \"localstorage\", \"svgasimg\", \"datauri\", \"atobbtoa\"\n    ];\n    let feature_promises = features.map((feature) => {\n        return new RSVP.Promise((resolve) => {\n            Modernizr.on(feature, (isFeatureActive) => { resolve(isFeatureActive); });\n        });\n    });\n\n    return RSVP.all(feature_promises);\n}\n"
  },
  {
    "path": "portiaui/app/utils/colors.js",
    "content": "import Ember from 'ember';\n\n\n// material design colours\nexport const COLORS = [\n    {\n        name: 'indigo',\n        main: '#3f51b5',\n        shadow: '#1a237e'\n    },\n    {\n        name: 'blue',\n        main: '#2196f3',\n        shadow: '#0d47a1'\n    },\n    {\n        name: 'light blue',\n        main: '#03a9f4',\n        shadow: '#01579b'\n    },\n    {\n        name: 'cyan',\n        main: '#00bcd4',\n        shadow: '#006064'\n    },\n    {\n        name: 'teal',\n        main: '#009688',\n        shadow: '#004d40'\n    },\n    {\n        name: 'green',\n        main: '#4caf50',\n        shadow: '#1b5e20'\n    },\n    {\n        name: 'light green',\n        main: '#8bc34a',\n        shadow: '#33691e'\n    },\n    {\n        name: 'lime',\n        main: '#cddc39',\n        shadow: '#827717'\n    },\n    {\n        name: 'yellow',\n        main: '#ffeb3b',\n        shadow: '#f57f17'\n    },\n    {\n        name: 'amber',\n        main: '#ffc107',\n        shadow: '#ff6f00'\n    },\n    {\n        name: 'orange',\n        main: '#ff9800',\n        shadow: '#e65100'\n    },\n    {\n        name: 'deep orange',\n        main: '#ff5722',\n        shadow: '#bf360c'\n    },\n    {\n        name: 'red',\n        main: '#f44336',\n        shadow: '#b71c1c'\n    },\n    {\n        name: 'pink',\n        main: '#e91e63',\n        shadow: '#880e4f'\n    },\n    {\n        name: 'purple',\n        main: '#9c27b0',\n        shadow: '#4a148c'\n    },\n    {\n        name: 'deep purple',\n        main: '#673ab7',\n        shadow: '#311b92'\n    }\n];\n\nexport const NAMED_COLORS = {};\nfor (let color of COLORS) {\n    NAMED_COLORS[color.name] = color;\n}\n\n\nexport function interpolate(start, end, fraction) {\n    return {\n        main: Ember.$.Color(start.main).transition(\n            Ember.$.Color(end.main),\n            fraction\n        ).toHexString(),\n        shadow: Ember.$.Color(start.shadow).transition(\n            Ember.$.Color(end.shadow),\n            fraction\n        ).toHexString()\n    };\n}\n\nfunction* generateInterpolatedColors(n) {\n    // use as many colors as required interpolated between the pre-defined colors\n    const spacePerColor = COLORS.length / n;\n\n    for (let i = 0; i < n; i++) {\n        var prevIndex = Math.floor(i * spacePerColor);\n        var nextIndex = Math.ceil(i * spacePerColor);\n\n        if (prevIndex === nextIndex) {\n            yield COLORS[prevIndex];\n        }\n\n        yield interpolate(\n            COLORS[prevIndex],\n            COLORS[nextIndex] || COLORS[0],\n            i * spacePerColor - prevIndex);\n    }\n}\n\nexport function getColors(n) {\n    if (n <= COLORS.length >> 1) {\n        // use every second color\n        return COLORS.filter((color, index) => index % 2 === 0).slice(0, n);\n    } else if (n <= COLORS.length) {\n        // use all available colors\n        return COLORS.slice(0, n);\n    }\n\n    return Array.from(generateInterpolatedColors(n));\n}\n"
  },
  {
    "path": "portiaui/app/utils/computed.js",
    "content": "import Ember from 'ember';\n\nexport function computedPropertiesEqual(a, b) {\n    return Ember.computed(a, b, function() {\n        return this.get(a) === this.get(b);\n    });\n}\n"
  },
  {
    "path": "portiaui/app/utils/ensure-promise.js",
    "content": "import Ember from 'ember';\n\n// http://stackoverflow.com/questions/28247401/how-can-i-test-if-a-function-is-returning-a-promise-in-ember\nexport default function ensurePromise(x) {\n    return new Ember.RSVP.Promise(function(resolve) {\n        resolve(x);\n    });\n}"
  },
  {
    "path": "portiaui/app/utils/interaction-event.js",
    "content": "var eventCategories = {\n    \"keyup\": \"keyboard\",\n  \"keydown\": \"keyboard\",\n \"keypress\": \"keyboard\",\n\"mousedown\": \"mouse\",\n  \"mouseup\": \"mouse\",\n    \"click\": \"mouse\",\n   \"scroll\": \"scroll\",\n    \"focus\": \"focus\",\n     \"blur\": \"focus\",\n    \"input\": \"simple\",\n   \"change\": \"simple\",\n};\n\nfunction getEventCategory (evt) {\n    if(evt.type in eventCategories) {\n        return eventCategories[evt.type];\n    }\n    throw new Error(\"Can't serialize event of type \" + evt.type);\n}\n\nvar interactionEvent = function(evt) {\n    var target = evt.target;\n    var doc = target.ownerDocument;\n\n    if(target && target.nodeType === Node.DOCUMENT_NODE){\n        doc = target;\n        target = doc.documentElement;\n    }\n    if(!target || !target.nodeid) {\n        return null;\n    }\n\n    var data = {\n        category: getEventCategory(evt.originalEvent || evt),\n        type: evt.type,\n        target: target.nodeid,\n        propsBefore: {},\n        propsAfter: {}\n    };\n\n\n    if(data.category === 'mouse') {\n        // Send coordinates as a offset of the element instead of the document\n        var clientRect = target.getBoundingClientRect();\n        data.targetX = evt.clientX - clientRect.left;\n        data.targetY = evt.clientY - clientRect.top;\n        data.relatedTarget = evt.relatedTarget && evt.relatedTarget.nodeid;\n    } else if (data.type === 'scroll') {\n        let scrollTarget = target;\n        // Scroll events in the body are dispatched in the document, reverse\n        if(scrollTarget === doc.documentElement && !(target.scrollTopMax || target.scrollLeftMax)) {\n            scrollTarget = doc.body;\n        }\n        if (scrollTarget) {\n            data.scrollTop = scrollTarget.scrollTop;\n            data.scrollTopPercent = scrollTarget.scrollTopMax &&\n                Math.round(scrollTarget.scrollTop * 100 / scrollTarget.scrollTopMax);\n            data.scrollLeft  = scrollTarget.scrollLeft;\n        } else {\n            data.scrollTop = 0;\n            data.scrollLeft  = 0;\n            data.scrollTopPercent = 0;\n        }\n    }\n\n    ATTRIBUTE_WHITELIST.forEach((attr) => {\n        if (attr in evt) {\n            data[attr] = evt[attr];\n        }\n    });\n    function copyProperties(update_props, obj){\n        if(evt.type in update_props) {\n            update_props[evt.type].forEach(function(propName){\n                if(propName in target) {\n                    obj[propName] = target[propName];\n                }\n            });\n        }\n    }\n    copyProperties(UPDATE_PROPS_BEFORE, data.propsBefore);\n    copyProperties(UPDATE_PROPS_AFTER, data.propsAfter);\n    return data;\n};\n\nvar ATTRIBUTE_WHITELIST = [\n    'altKey', 'bubbles', 'button', 'buttons', 'cancelable', 'code', 'ctrlKey',\n    'deltaX', 'deltaY', 'deltaZ', 'deltaMode', 'detail', 'isComposing',\n    'isTrusted', 'key', 'keyCode', 'location', 'metaKey', 'relatedTargetId',\n    'shiftKey', 'type'\n];\n\n// When this events are fired, update the specified properties in the server\n// to the ones in the client before sending the event\nvar UPDATE_PROPS_BEFORE = {\n    'change': ['selectedIndex'], // selects\n    'input': ['value'], // text input, textareas\n    'keyup': ['value'], // text input, textareas\n    'click': ['checked'] // input type radio or check\n};\nvar UPDATE_PROPS_AFTER = {\n    'keydown': ['value'], // text input, textareas\n    'keypress': ['value'] // text input, textareas\n};\n\nexport default interactionEvent;\n"
  },
  {
    "path": "portiaui/app/utils/promises.js",
    "content": "import Ember from 'ember';\n\nexport function ensurePromise(valueOrPromise) {\n    return new Ember.RSVP.Promise(function(resolve) {\n        resolve(valueOrPromise);\n    });\n}\n\nexport default {\n    ensurePromise\n};\n"
  },
  {
    "path": "portiaui/app/utils/selectors.js",
    "content": "import Ember from \"ember\";\nconst { computed, guidFor } = Ember;\n\nconst IMPLICIT_TAGS = new Set(['tbody']);\nlet escapeCSS = CSS.escape;\n\nexport function elementPath(element) {\n    const elements = [element];\n    while (element.parentElement &&\n            !element.parentElement.isEqualNode(document.documentElement)) {\n        element = element.parentElement;\n        elements.unshift(element);\n    }\n    return elements;\n}\n\nfunction positionInParent(element) {\n    return Array.prototype.indexOf.call(element.parentNode.children, element) + 1;\n}\n\nexport function pathSelector(element) {\n    const path = elementPath(element);\n    return path.map(pathElement => pathElement.tagName.toLowerCase()).join(' > ');\n}\n\nexport function uniquePathSelector(element) {\n    const path = elementPath(element);\n    return path.map((pathElement, index) => {\n        const tag = pathElement.tagName.toLowerCase();\n        if (index === 0) {\n            return tag;\n        }\n        const parentIndex = positionInParent(pathElement);\n        return `${tag}:nth-child(${parentIndex})`;\n    }).join(' > ');\n}\n\nexport function smartSelector(element) {\n    const generator = BaseSelectorGenerator.create({\n        elements: [element]\n    });\n    const selector = generator.get('selector');\n    generator.destroy();\n    return selector;\n}\n\nexport function cssToXpath(selector) {\n    // css-to-xpath on github fails on nth-child(an+b) selectors :(\n    // this is mini version that supports only the css generated by BaseSelectorGenerator\n    // rules from: https://en.wikibooks.org/wiki/XPath/CSS_Equivalents\n    // TODO: support CSS escaped identifiers\n    const alternateSelectors = selector.split(', ');\n    const alternateXPaths = [];\n\n    for (let alternateSelector of alternateSelectors) {\n        const selectorParts = alternateSelector.split(' > ');\n        const xPathParts = [];\n\n        for (let selectorPart of selectorParts) {\n            const selectorSiblingParts = selectorPart.split(' + ');\n            const xPathSiblingParts = [];\n\n            for (let part of selectorSiblingParts) {\n                // cases we need to support\n                if (part === '*') {\n                    xPathSiblingParts.push('*[1]');\n                // id selector\n                } else if (part.startsWith('#')) {\n                    xPathSiblingParts.push(`*[@id=\"${part.slice(1)}\"]`);\n                } else {\n                    let match;\n                    match = part.match(/^([a-z]+[0-9]?)?(?:\\.((?:.(?!:nth-child))+.))?(?::nth-child\\((\\d+)\\))?(?::nth-child\\((\\d*)n\\+(\\d+)\\))?(?::nth-child\\(-(\\d*)n\\+(\\d+)\\))?$/);  // jshint ignore:line\n                    if (match) {\n                        let conditions = '';\n\n                        // simple :nth-child selectors\n                        if (match[3]) {\n                            conditions += `[${match[3]}]`;\n                        }\n\n                        // complex :nth-child selectors\n                        if (match[5] || match[7]) {\n                            const delta = match[4] === undefined ? match[6] : match[4];\n                            const start = match[5];\n                            const end = match[7];\n                            const modulus = (start === undefined ? end : start) % delta;\n                            let condition = `position() mod ${delta} = ${modulus}`;\n                            if (start && start > delta) {\n                                condition += ` and position() >= ${start}`;\n                            }\n                            if (end) {\n                                condition += ` and position() <= ${end}`;\n                            }\n                            conditions += `[${condition}]`;\n                        }\n\n                        // class selector\n                        if (match[2]) {\n                            conditions += `[contains(concat(\" \", @class, \" \"), \" ${match[2]} \")]`;\n                        }\n\n                        xPathSiblingParts.push(`${match[1] || '*'}${conditions}`);\n                    }\n                }\n            }\n            xPathParts.push(xPathSiblingParts.join('/following-sibling::'));\n        }\n        alternateXPaths.push('//' + xPathParts.join('/'));\n    }\n\n    return alternateXPaths.join(' | ');\n}\n\nexport const BaseSelectorGenerator = Ember.Object.extend({\n    parent: null,\n    elements: [],\n    siblings: null,\n\n    paths: computed.map('elements', elementPath),\n    groupedPaths: computed('paths', function() {\n        const paths = this.get('paths');\n        return this.groupPaths(paths);\n    }),\n    parentMap: computed(\n        'parent', 'parent.groupedPaths', 'parent.selectors', 'parent.siblings', function() {\n            if (!this.get('parent')) {\n                return null;\n            }\n\n            const parentGroupedPaths = this.get('parent.groupedPaths') || [];\n            const parentSelectors = this.get('parent.selectors') || [];\n            const parentSiblings = this.get('parent.siblings') || 0;\n\n            const parentMap = new Map();\n            for (let [index, paths] of parentGroupedPaths.entries()) {\n                const pathSelectors = parentSelectors[index];\n                const siblingSelectors = [pathSelectors];\n                for (let i = 0; i < parentSiblings; i++) {\n                    siblingSelectors.push(\n                        siblingSelectors[siblingSelectors.length - 1].map(\n                            selector => `${selector} + *`));\n                }\n                for (let path of paths) {\n                    let element = path[path.length - 1];\n                    parentMap.set(element, pathSelectors);\n                    for (let i = 0; i < parentSiblings; i++) {\n                        element = element.nextElementSibling;\n                        if (!element) {\n                            break;\n                        }\n                        parentMap.set(element, siblingSelectors[i + 1]);\n                    }\n                }\n            }\n\n            return parentMap;\n        }),\n    selectors: computed('groupedPaths', 'parentMap', function() {\n        const groupedPaths = this.get('groupedPaths');\n        const parentMap = this.get('parentMap');\n        return this.createSelectors(groupedPaths, parentMap);\n    }),\n    selector: computed('selectors', function() {\n        const selectors = this.get('selectors');\n\n        // filter out selectors with trailing implicit tags, if a selector\n        // without the tag also exists, otherwise the combined selector may\n        // match too many elements\n        const filteredSelectors = [];\n        for (let selectorGroup of selectors) {\n            for (let selector of selectorGroup) {\n                const selectorParts = selector.split(' > ');\n                const trailingTag = selectorParts[selectorParts.length - 1];\n                if (!IMPLICIT_TAGS.has(trailingTag) ||\n                        !selectorGroup.includes(selectorParts.slice(0, -1).join(' > '))) {\n                    filteredSelectors.push(selector);\n                }\n            }\n        }\n\n        return this.mergeSelectors(filteredSelectors);\n    }),\n    xpath: computed('selector', function() {\n        const selector = this.get('selector');\n        return cssToXpath(selector);\n    }),\n\n    groupPaths(paths) {\n        const groupedPaths = new Map();\n        for (let path of paths) {\n            // group by full path of tags names, and root element\n            const tagPath = [guidFor(path[0])].concat(path.map(element => element.tagName))\n                                                    .join(' ').toLowerCase();\n            const list = groupedPaths.get(tagPath) || [];\n            groupedPaths.set(tagPath, list);\n            list.push(path);\n        }\n        return Array.from(groupedPaths.values());\n    },\n\n    createSelectors(groupedPaths, parentMap) {\n        return groupedPaths.map(group => this.createGroupSelectors(group, parentMap));\n    },\n\n    createGroupSelectors(group, parentMap, generalize = false) {\n        const root = group && group[0] && group[0][0];\n        let parentIndex = 0;\n        let parentElements = null;\n        let selectors = [root.tagName.toLowerCase()];\n\n        const pathLength = group[0].length;\n        if (parentMap) {\n            for (let i = 1; i < pathLength; i++) {\n                if (parentMap.has(group[0][i])) {\n                    parentIndex = i;\n                }\n            }\n        }\n\n        if (parentIndex) {\n            const elements = Array.from(new Set(group.map(path => path[parentIndex])));\n            parentElements = elements;\n            selectors = parentMap.get(elements[0]);\n        }\n\n        let skippedTag = null;\n        indexloop: for (let i = parentIndex + 1; i < pathLength; i++) {\n            const elements = this.getGroupElementsAtIndex(group, i);\n            const testSelectorLists = [];\n\n            // check id selector\n            if (elements.length === 1) {\n                const id = elements[0].id;\n                if (id && !parentElements) {\n                    testSelectorLists.push(['#' + escapeCSS(id)]);\n                }\n            }\n\n            const tagName = elements[0].tagName.toLowerCase();\n            const classSelectors = this.getElementClassSelectors(elements);\n            const allClassesSelector = tagName + classSelectors.join('');\n\n            if (!generalize) {\n                // check class selectors\n                for (let classSelector of classSelectors) {\n                    testSelectorLists.push([classSelector]);\n                }\n\n                // check tag selector\n                if (!IMPLICIT_TAGS.has(tagName)) {\n                    testSelectorLists.push([tagName]);\n                }\n\n                // check tag + class selector\n                for (let classSelector of classSelectors) {\n                    testSelectorLists.push([tagName + classSelector]);\n                }\n            }\n\n            if (!IMPLICIT_TAGS.has(tagName)) {\n                // nth-child\n                const indices = this.getElementIndices(elements);\n\n                if (indices.length > 1 && !generalize) {\n                    // try to create an nth-child formula\n                    let delta = indices[1] - indices[0];\n                    let regularIndex = true;\n                    for (let i = 2; i < indices.length; i++) {\n                        if (indices[i] - indices[i - 1] !== delta) {\n                            regularIndex = false;\n                        }\n                    }\n                    if (regularIndex) {\n                        const firstIndex = indices[0];\n                        const lastIndex = indices[indices.length - 1];\n\n                        if (delta === 1) {\n                            delta = '';\n                        }\n                        testSelectorLists.push(\n                            [`${tagName}:nth-child(${delta}n+${firstIndex})`],\n                            [`${tagName}:nth-child(-${delta}n+${lastIndex})`],\n                            [`${tagName}:nth-child(${delta}n+${firstIndex}):nth-child(-${delta}n+${lastIndex})`]);  // jshint ignore:line\n                        for (let classSelector of classSelectors) {\n                            testSelectorLists.push(\n                                [`${classSelector}:nth-child(${delta}n+${firstIndex})`],\n                                [`${classSelector}:nth-child(-${delta}n+${lastIndex})`],\n                                [`${classSelector}:nth-child(${delta}n+${firstIndex}):nth-child(-${delta}n+${lastIndex})`]);  // jshint ignore:line\n                            testSelectorLists.push(\n                                [`${tagName}${classSelector}:nth-child(${delta}n+${firstIndex})`],\n                                [`${tagName}${classSelector}:nth-child(-${delta}n+${lastIndex})`],\n                                [`${tagName}${classSelector}:nth-child(${delta}n+${firstIndex}):nth-child(-${delta}n+${lastIndex})`]);  // jshint ignore:line\n                        }\n                    }\n                }\n\n                if (!generalize) {\n                    // fail-safe explicitly listing all indices\n\n                    let indexSelectors = [];\n                    for (let index of indices) {\n                        indexSelectors.push(`${tagName}:nth-child(${index})`);\n                    }\n                    testSelectorLists.push(indexSelectors);\n\n                    for (let classSelector of classSelectors) {\n                        let classIndexSelectors = [];\n                        let tagIndexSelectors = [];\n                        for (let index of indices) {\n                            const classIndexSelector = `${classSelector}:nth-child(${index})`;\n                            classIndexSelectors.push(classIndexSelector);\n                            tagIndexSelectors.push(`${tagName}${classIndexSelector}`);\n                        }\n                        testSelectorLists.push(classIndexSelectors);\n                        testSelectorLists.push(tagIndexSelectors);\n                    }\n                }\n\n                if (generalize && indices.length === 1) {\n                    testSelectorLists.push([`${allClassesSelector}:nth-child(${indices[0]})`]);\n                }\n            }\n\n            if (generalize) {\n                // fail-safe for generalized case\n                testSelectorLists.push([allClassesSelector]);\n            }\n\n            if (!parentElements) {\n                if (!generalize || elements.length === 1) {\n                    for (let testSelectorList of testSelectorLists) {\n                        const matches = root.querySelectorAll(\n                            this.mergeSelectors(testSelectorList));\n                        if (matches.length === elements.length) {\n                            selectors = testSelectorList;\n                            continue indexloop;\n                        }\n                    }\n                }\n            }\n\n            for (let testSelectorList of testSelectorLists) {\n                const concatSelectorList = [];\n                for (let selector of selectors) {\n                    for (let testSelector of testSelectorList) {\n                        concatSelectorList.push(`${selector} > ${testSelector}`);\n                    }\n                }\n                if (skippedTag) {\n                    // since we can't know in browser if the skipped tag was present in the source\n                    // markup we have at create a selector for both options like:\n                    //     prefix > suffix, prefix > skipped > suffix\n                    for (let selector of selectors) {\n                        for (let testSelector of testSelectorList) {\n                            concatSelectorList.push(\n                                `${selector} > ${skippedTag} > ${testSelector}`);\n                        }\n                    }\n                }\n                const testSelector = this.mergeSelectors(concatSelectorList);\n                let matches;\n                if (parentElements) {\n                    matches = new Set();\n                    for (let parentElement of parentElements) {\n                        for (let element of parentElement.querySelectorAll(testSelector)) {\n                            matches.add(element);\n                        }\n                    }\n                    matches = Array.from(matches);\n                } else {\n                    matches = root.querySelectorAll(testSelector);\n                }\n                if (generalize || matches.length === elements.length) {\n                    selectors = concatSelectorList;\n                    skippedTag = null;\n                    continue indexloop;\n                }\n            }\n\n            // we're here because we skipped a possibly implicitly added tag\n            skippedTag = tagName;\n        }\n\n        // the final tag was skipped, we need to append it now\n        if (skippedTag) {\n            selectors = selectors.concat(...selectors.map(\n                selector => `${selector} > ${skippedTag}`));\n        }\n\n        return selectors;\n    },\n\n    mergeSelectors(selectors) {\n        while (Array.isArray(selectors)) {\n            selectors = selectors.join(', ');\n        }\n        return selectors;\n    },\n\n    getGroupElementsAtIndex(group, index) {\n        return Array.from(new Set(group.map(path => path[index])));\n    },\n\n    getElementClassSelectors(elements) {\n        const classNameMap = new Map();\n        const classSelectors = [];\n        for (let element of elements) {\n            if (!element.classList.length) {\n                classNameMap.clear();\n                break;\n            }\n\n            for (let className of Array.from(element.classList)) {\n                classNameMap.set(className, (classNameMap.get(className) || 0) + 1);\n            }\n        }\n        for (let [className, count] of classNameMap.entries()) {\n            if (count === elements.length) {\n                classSelectors.push('.' + escapeCSS(className));\n            }\n        }\n        return classSelectors;\n    },\n\n    getElementIndices(elements) {\n        return Array.from(new Set(elements.map(positionInParent))).sort((a, b) => a - b);\n    },\n\n    generalizationDistance(element) {\n        const paths = this.get('paths');\n        const groupedPaths = this.get('groupedPaths');\n        const newPath = elementPath(element);\n        const newGroupedPaths = this.groupPaths([newPath].concat(paths));\n\n        if (newGroupedPaths.length > groupedPaths.length) {\n            return Infinity;\n        }\n\n        const group = newGroupedPaths.find(group => group[0] === newPath);\n        const pathLength = group[0].length;\n        let distance = 0;\n        let i = 0;\n        const rejectElements = element => element === newPath[i];\n        for (i = 0; i < pathLength; i++) {\n            const elements = this.getGroupElementsAtIndex(group, i);\n            if (elements.length === 1) {\n                continue;\n            }\n            const currentElements = elements.reject(rejectElements);\n            const newClassSelectors = this.getElementClassSelectors(elements);\n            const currentClassSelectors = this.getElementClassSelectors(currentElements);\n            if (currentClassSelectors.length > newClassSelectors.length) {\n                if (newClassSelectors.length >= 1 &&\n                        (currentClassSelectors.length - newClassSelectors.length === 1)) {\n                    distance++;\n                } else {\n                    return Infinity;\n                }\n            }\n            const newIndices = this.getElementIndices(elements);\n            const currentIndices = this.getElementIndices(currentElements);\n            if (currentIndices.length < newIndices.length) {\n                distance++;\n            }\n        }\n        return distance;\n    }\n});\n\nexport const AnnotationSelectorGenerator = BaseSelectorGenerator.extend({\n    selectorMatcher: null,\n    annotation: null,\n\n    acceptElements: computed('annotation.acceptSelectors.[]', function() {\n        const acceptSelectors = this.get('annotation.acceptSelectors');\n        return this.get('selectorMatcher').query(this.mergeSelectors(acceptSelectors));\n    }),\n    rejectElements: computed('annotation.rejectSelectors.[]', function() {\n        const rejectSelectors = this.get('annotation.rejectSelectors');\n        return this.get('selectorMatcher').query(this.mergeSelectors(rejectSelectors));\n    }),\n    generalizedSelector: computed(\n        'annotation.selectionMode', 'annotation.acceptSelectors.[]',\n        'acceptElements.[]', 'rejectElements.[]', function() {\n            if (this.get('annotation.selectionMode') === 'css') {\n                const acceptSelectors = this.get('annotation.acceptSelectors');\n                return this.mergeSelectors([acceptSelectors]);\n            }\n\n            const acceptElements = this.get('acceptElements');\n            const paths = acceptElements.map(elementPath);\n            const groupedPaths = this.groupPaths(paths);\n            const selectors = this.createGeneralizedSelectors(groupedPaths);\n            return this.mergeSelectors(selectors);\n        }),\n    elements: computed('generalizedSelector', function() {\n        const selector = this.get('generalizedSelector');\n        return this.get('selectorMatcher').query(selector);\n    }),\n    selector: computed(\n        'selectors', 'annotation.selectionMode',\n        'annotation.acceptSelectors.[]', 'acceptElements.[]', 'rejectElements.[]', function() {\n            if (this.get('annotation.selectionMode') === 'css') {\n                const acceptSelectors = this.get('annotation.acceptSelectors');\n                if (acceptSelectors.length === 1) {\n                    return this.mergeSelectors([acceptSelectors]);\n                }\n\n                const acceptElements = this.get('acceptElements');\n                const acceptPaths = acceptElements.map(elementPath);\n                const acceptGroupedPaths = this.groupPaths(acceptPaths);\n                const newAcceptSelectors = this.createSelectors(acceptGroupedPaths);\n                return this.mergeSelectors(newAcceptSelectors);\n            }\n\n            const selectors = this.get('selectors');\n            const filteredSelectors = this.filterRejectedSelectors(selectors);\n            return this.mergeSelectors(filteredSelectors);\n        }),\n\n    repeatedAnnotation: computed('selector', 'parent.repeatedContainers', function() {\n        const parent = this.get('parent');\n        if (!parent) {\n            return false;\n        }\n        const selector = this.get('selector');\n        const repeatedContainers = parent.get('repeatedContainers');\n        const selectorMatcher = this.get('selectorMatcher');\n        const elements = selectorMatcher.query(selector);\n        if (!(selector && elements && elements.length > 1)) {\n            return false;\n        }\n        if (repeatedContainers.length > 1) {\n            for (let container of repeatedContainers) {\n                let i = 0;\n                for (let child of elements) {\n                    if (container.contains(child)) {\n                        i += 1;\n                    }\n                    if (i > 1) {\n                        break;\n                    }\n                }\n                if (i > 1) {\n                    return true;\n                }\n            }\n        }\n        const container = findContainers(elements)[0];\n        if (container) {\n            const otherAnnotations = parent.get('children').filter(s => s !== parent);\n            return !otherAnnotations.any(a => a.get('parent.container') === container);\n        }\n        return false;\n    }),\n\n    createGeneralizedSelectors(groupedPaths) {\n        const selectors = groupedPaths.map(group => this.createGroupSelectors(group, null, true));\n        return this.filterRejectedSelectors(selectors);\n    },\n\n    filterRejectedSelectors(selectors) {\n        const selectorMatcher = this.get('selectorMatcher');\n        const rejectElements = new Set(this.get('rejectElements'));\n        return selectors.map(selectors => {\n            // if the generalized selector contains a rejected element, create a new selector\n            // that matches only the other elements\n            const elements = Array.from(selectorMatcher.query(this.mergeSelectors(selectors)));\n            const allowedElements = elements.filter(element => !rejectElements.has(element));\n            if (elements.length === allowedElements.length) {\n                return selectors;\n            }\n            const paths = allowedElements.map(elementPath);\n            const allowedSelectors = this.createSelectors([paths]);\n            return allowedSelectors[0];\n        });\n    }\n});\n\nexport const ContainerSelectorGenerator = BaseSelectorGenerator.extend({\n    init() {\n        this._super(...arguments);\n        this.set('children', []);\n    },\n\n    destroy() {\n        for (let child of this.get('children')) {\n            child.set('parent', null);\n        }\n        this.set('children', null);\n        this._super(...arguments);\n    },\n\n    autoChildren: computed.filterBy('children', 'annotation.selectionMode', 'auto'),\n    childElements: computed.mapBy('autoChildren', 'elements'),\n    container: computed('childElements', function() {\n        const childElements = this.get('childElements');\n        return findContainer(childElements);\n    }),\n    containerSelector: computed('container', function() {\n        const container = this.get('container');\n        if (container) {\n            const selectors = this.createSelectors([[elementPath(container)]]);\n            return this.mergeSelectors(selectors);\n        }\n        return 'body';\n    }),\n    repeatedContainersAndSiblings: computed('childElements', 'container', function() {\n        const childElements = this.get('childElements');\n        const container = this.get('container');\n        // TODO: support separated trees\n        return findRepeatedContainers(childElements, container);\n    }),\n    repeatedContainers: computed.readOnly('repeatedContainersAndSiblings.firstObject'),\n    siblings: computed.readOnly('repeatedContainersAndSiblings.lastObject'),\n    elements: computed('container', 'repeatedContainers', function() {\n        const container = this.get('container');\n        const repeatedContainers = this.get('repeatedContainers');\n        if (repeatedContainers.length) {\n            return repeatedContainers;\n        }\n        if (container) {\n            return [container];\n        }\n        return [];\n    }),\n\n    addChild(childGenerator) {\n        this.get('children').addObject(childGenerator);\n        childGenerator.set('parent', this);\n    },\n\n    addChildren(childGenerators) {\n        const children = this.get('children');\n        children.addObjects(childGenerators);\n        for (let childGenerator of childGenerators) {\n            childGenerator.set('parent', this);\n        }\n    }\n});\n\nexport function setIntersection(a, b) {\n    return new Set([...a].filter(x => b.has(x)));\n}\n\nexport function setDifference(a, b) {\n    return new Set([...a].filter(x => !b.has(x)));\n}\n\nexport function getParents(element, upto) {\n    if (!element) {\n        return [];\n    }\n    var parents = [],\n        parent = element.parentElement;\n    while (parent) {\n        parents.push(parent);\n        parent = parent.parentElement;\n        if (parent === upto) {\n            return parents;\n        }\n    }\n    return parents;\n}\n\nexport function getPreviousSiblings(element, upto) {\n    if (!element) {\n        return [];\n    }\n    var siblings = [],\n        sibling = element.previousElementSibling;\n    while (sibling && sibling !== upto) {\n        siblings.push(sibling);\n        sibling = sibling.previousElementSibling;\n    }\n    return siblings;\n}\n\nexport function closestParentIndex(element, parents) {\n    if (parents === undefined) {\n        parents = getParents(element);\n        parents.unshift(element);\n    }\n    let elementIndex = parents.indexOf(element);\n    if (elementIndex < 0) {\n        return 0;\n    }\n    return parents.length - elementIndex;\n}\n\nexport function findContainers(extractedElements, upto) {\n    let parentArrays = [];\n    for (let element of extractedElements) {\n        parentArrays.push(getParents(element, upto));\n    }\n    let parentSets = parentArrays.map((array) => new Set(array)),\n        intersection = parentSets[0] || new Set();\n    for (let set of parentSets.slice(1, parentSets.length)) {\n        intersection = setIntersection(intersection, set);\n    }\n    return Array.from(intersection);\n}\n\nexport function findContainer(extractedElements) {\n    return findContainers([].concat(...extractedElements))[0];\n}\n\nexport function findRepeatedContainers(extracted, container) {\n    let groupedItems = groupItems(extracted, container);\n    if (groupedItems.length === 1) {\n        return [[], 0];\n    }\n    let repeatedParents = groupedItems.map((item) => findContainers(item, container));\n    if (repeatedParents.length === 0) {\n        return [[], 0];\n    }\n    let allEqualLength = repeatedParents.isEvery('length', repeatedParents[0].length);\n    if (allEqualLength &&\n            new Set(repeatedParents.map((item) => item[0])).size === repeatedParents.length) {\n        return [repeatedParents[0].length ? repeatedParents.map(list => list[0]) : [], 0];\n    } else {\n        let shortest = Math.min(...repeatedParents.map(e => e.length));\n        repeatedParents = repeatedParents.map(\n            (item) => item.slice(item.length - shortest, item.length));\n        if (new Set(repeatedParents.map((item) => item[0])).size === repeatedParents.length) {\n            return [repeatedParents[0].length ? repeatedParents.map(list => list[0]) : [], 0];\n        }\n    }\n    return parentWithSiblings(groupedItems, container);\n}\n\nexport function parentWithSiblings(groupedItems, container) {\n    // 1. Get bounds\n    let itemBounds = getItemBounds(groupedItems, false),\n        itemParents = [],\n        sharedItemParents = new Set(),\n        sharedParents = new Set();\n    // 2. Using highest and lowest parents remove any parents shared by other groups\n    for (let [highest, lowest] of itemBounds) {\n        itemParents.push([getParents(highest, container).reverse(),\n                          getParents(lowest, container).reverse()]);\n    }\n    for (let fields of itemParents) {\n        for (let fieldParents of fields) {\n            for (let parent of fieldParents) {\n                if (sharedItemParents.has(parent)) {\n                    sharedParents.add(parent);\n                } else {\n                    sharedItemParents.add(parent);\n                }\n            }\n        }\n    }\n    let i = 0;\n    const filterNotShared = e => !sharedParents.has(e);\n    for (let [highest, lowest] of itemParents) {\n        itemParents[i] = [highest.filter(filterNotShared), lowest.filter(filterNotShared)];\n        i += 1;\n    }\n    // TODO: Check if not siblings\n    // 3. For each item find sibling distance between highest and lowest if they\n    //    don't have a parent that isn't shared with other items. Use minimum\n    let siblings = itemParents.map(\n            (bounds) => getPreviousSiblings(bounds[1][0], bounds[0][0]).length + 1),\n        siblingDistance = Math.min(...siblings);\n    // 5. Use the highest unshared parent of the highest field of the first item\n    //    as the repeating container\n    const containers = itemParents.map(lists => lists[0][0])\n        // remove undefined\n        .filter(containers => !!containers);\n    return [containers, siblingDistance];\n}\n\nfunction getItemBounds(items, tagNumber=true) {\n    let elementMap = {};\n    return items.map(function(elements) {\n            let tagids = [];\n            for (let element of elements) {\n                // TODO: Find incrementing id from dom nodes rather than\n                //       attribute added by backend\n                let tagid = element.getAttribute('data-tagid');\n                if (tagid) {\n                    tagid = parseInt(tagid);\n                    tagids.push(tagid);\n                    elementMap[tagid] = element;\n                }\n            }\n            if (tagNumber) {\n                return [Math.min(...tagids), Math.max(...tagids)];\n            }\n            return [elementMap[Math.min(...tagids)],\n                    elementMap[Math.max(...tagids)]];\n    });\n}\n\nexport function groupItems(extracted, upto) {\n    let groups = {},\n        id = 0;\n    // Group fields based on their color\n    // TODO: Group by schema too\n    for (let elements of extracted) {\n        groups[id] = elements;\n        id += 1;\n    }\n    // If all groups are the same length page has a regular structure where\n    // all items have the necessary fields and share a common repeating parent\n    let groupLengths = new Set(Object.keys(groups).map((key) => groups[key].length));\n    if (groupLengths.size === 1) {\n        return makeItemsFromGroups(groups);\n    }\n    let longest = Math.max(...groupLengths),\n        longestGroups = {},\n        otherGroups = {};\n    for (let key in groups) {\n        if (groups[key].length === longest) {\n            longestGroups[key] = groups[key];\n        } else {\n            otherGroups[key] = groups[key];\n        }\n    }\n    // Find bounding tagids for each item\n    let items = makeItemsFromGroups(longestGroups),\n        itemBounds = getItemBounds(items);\n    let remainingFields = {};\n    let i = 0,\n        seenElements = new Set();\n    // Place bounded elements into corresponding items and\n    // find parents for unbounded fields\n    for (let fieldKey in otherGroups) {\n        let fieldGroup = otherGroups[fieldKey];\n        for (let element of fieldGroup) {\n            i = 0;\n            for (let [min, max] of itemBounds) {\n                let tagid = parseInt(element.getAttribute('data-tagid'));\n                if (tagid && tagid > min && tagid < max) {\n                    items[i].push(element);\n                    seenElements.add(element);\n                    break;\n                }\n                i += 1;\n            }\n            if (!seenElements.has(element)) {\n                if (remainingFields[fieldKey]) {\n                    remainingFields[fieldKey].push([element, getParents(element, upto)]);\n                } else {\n                    remainingFields[fieldKey] = [[element, getParents(element, upto)]];\n                }\n            }\n        }\n    }\n    // Find parents for each field in an item for all items\n    let itemsParents = [];\n    for (let item of items) {\n        let itemParents = [];\n        for (let element of item) {\n            itemParents = itemParents.concat(getParents(element, upto));\n        }\n        let parentCount = [],\n            seenParents = [],\n            orderedParents = [];\n        for (let parent of itemParents) {\n            let parentIdx = seenParents.indexOf(parent);\n            if (parentIdx > 0) {\n                parentCount[parentIdx] += 1;\n            } else {\n                parentCount.push(1);\n                seenParents.push(parent);\n            }\n        }\n        // Order parents by ones with the most descendant fields\n        for (i=0; i < seenParents.length; i++) {\n            orderedParents.push([parentCount[i], seenParents[i]]);\n        }\n        itemParents = [];\n        for (let parent of orderedParents.sort()) {\n            itemParents.push(parent[1]);\n        }\n        itemsParents.push(new Set(itemParents));\n    }\n    // Remove parents shared by multiple items\n    let uniqueParents = [];\n    for (let parents of itemsParents) {\n        for (let otherParents of itemsParents) {\n            if (otherParents === parents) {\n                continue;\n            }\n            parents = setDifference(parents, otherParents);\n        }\n        uniqueParents.push(parents);\n    }\n    i = 0;\n    for (let itemParents of uniqueParents) {\n        for (let key in remainingFields) {\n            for (let [element, elementParents] of remainingFields[key]) {\n                for (let parent of elementParents) {\n                    if (itemParents.has(parent)) {\n                        items[i].push(element);\n                        break;\n                    }\n                }\n            }\n        }\n        i += 1;\n    }\n    // TODO: Fields that are not in all items and are below the item bounds still\n    //       need to be matched -> all tests pass without this, need a breaking test\n    return items;\n}\n\nexport function makeItemsFromGroups(groups) {\n    let items = [];\n    for (let key of Object.keys(groups)) {\n        for (let [i, item] of groups[key].entries()) {\n            if (!items[i]) {\n                items[i] = [];\n            }\n            items[i].push(item);\n        }\n    }\n    return items;\n}\n\nexport function createSelectorGenerators(structure, selectorMatcher) {\n    const accumulator = [];\n    accumulateSelectorGenerators(structure, selectorMatcher, accumulator);\n    return accumulator;\n}\n\nfunction accumulateSelectorGenerators(structure, selectorMatcher, accumulator) {\n    const generators = [];\n\n    for (let element of structure) {\n        const {annotation, children} = element;\n        let selectorGenerator;\n        if (children) {\n            selectorGenerator = ContainerSelectorGenerator.create({});\n            selectorGenerator.addChildren(\n                accumulateSelectorGenerators(children, selectorMatcher, accumulator));\n\n        } else {\n            selectorGenerator = AnnotationSelectorGenerator.create({\n                selectorMatcher,\n                annotation\n            });\n        }\n        generators.push(selectorGenerator);\n        accumulator.push([annotation, selectorGenerator]);\n    }\n\n    return generators;\n}\n\nexport default {\n    BaseSelectorGenerator,\n    AnnotationSelectorGenerator,\n    ContainerSelectorGenerator,\n    pathSelector,\n    uniquePathSelector,\n    smartSelector,\n    cssToXpath,\n    findContainer,\n    findRepeatedContainers\n};\n"
  },
  {
    "path": "portiaui/app/utils/start-urls.js",
    "content": "const SAMPLE_SIZE = 20;\nconst ALL_DIGITS = /^\\d+-\\d+$/;\nconst ALL_LETTERS = /^[a-zA-Z]+-[a-zA-Z]+$/;\n\nfunction nextLetter(letter) {\n    return String.fromCharCode(letter.charCodeAt(0) + 1);\n}\n\nfunction numberRange(a, b) {\n    const numbers = [];\n    for(let i = a; i < b + 1; i += 1) {\n        numbers.push(i.toString());\n    }\n    return numbers;\n}\n\nfunction letterRange(a, b) {\n    const letters = [];\n    letters.push(a);\n\n    while(!letters.contains(b)) {\n        const lastLetter = letters.get('lastObject');\n        letters.pushObject(nextLetter(lastLetter));\n    }\n    return letters;\n}\n\nfunction _processDigitRange(value) {\n    const endpoints = value.split('-');\n    let [a, b] = endpoints.map(x => parseInt(x));\n    b = Math.min(b, a + SAMPLE_SIZE);\n    return [a, b];\n}\n\nfunction augmentRange(fragment_value) {\n    if (allDigits(fragment_value)) {\n      const [a, b] = _processDigitRange(fragment_value);\n      return numberRange(a, b);\n    }\n\n    if (allLetters(fragment_value)) {\n      const [a, b] = fragment_value.split('-');\n      return letterRange(a, b);\n    }\n}\n\nfunction augmentFragment(fragment) {\n    switch(fragment.type) {\n        case('fixed'):\n            return [fragment.value];\n        case('list'):\n            return fragment.value.split(' ');\n        case('range'):\n            const value = fragment.value;\n\n            if (allLetters(value) || allDigits(value)) {\n                return augmentRange(value);\n            }\n\n            return [''];\n    }\n}\n\nexport function allLetters(value) {\n    return value.match(ALL_LETTERS);\n}\n\nexport function allDigits(value) {\n    return value.match(ALL_DIGITS);\n}\n\nexport function fragmentToString(fragment) {\n    switch(fragment.type) {\n        case('fixed'):\n            return fragment.value;\n        case('list'):\n            return '[...]';\n        case('range'):\n            return '[' + fragment.value + ']';\n    }\n}\n\nexport function augmentFragmentList(fragmentList, fragment) {\n    const result = [];\n    const newFragments = augmentFragment(fragment);\n\n    newFragments.forEach((newFragment) => {\n        result.push(fragmentList.concat(newFragment));\n    });\n    return result;\n}\n\nexport function includesUrl(spider, url) {\n    return spider.get('startUrls').mapBy('url').includes(url);\n}\n\nexport function multiplicityFragment(fragment) {\n    switch(fragment.type) {\n        case('fixed'):\n            return 1;\n        case('list'):\n            return fragment.value.split(' ').length;\n        case('range'):\n            const value = fragment.value;\n            const [a, b] = value.split('-');\n\n            if (allLetters(value)) {\n                return letterRange(a, b).length;\n            }\n            if (allDigits(value)) {\n                return numberRange(parseInt(a), parseInt(b)).length;\n            }\n            return 1;\n    }\n}\n\nexport default {\n    allDigits,\n    allLetters,\n    augmentFragmentList,\n    fragmentToString,\n    includesUrl,\n    multiplicityFragment\n};\n"
  },
  {
    "path": "portiaui/app/utils/tree-mirror-delegate.js",
    "content": "\nfunction paintCanvasMessage(canvas) {\n    var ctx = canvas.getContext('2d');\n\n    var pattern = document.createElement('canvas');\n    pattern.width = 20;\n    pattern.height = 20;\n    var pctx = pattern.getContext('2d');\n    pctx.fillStyle = \"#ccc\";\n    pctx.fillRect(0,0,10,10);\n    pctx.fillRect(10,10,10,10);\n    pattern = ctx.createPattern(pattern, \"repeat\");\n\n    ctx.fillStyle = pattern;\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n    ctx.font = '16px sans-serif';\n    ctx.fillStyle = 'black';\n    ctx.fillText('Displaying the content of the canvas is not supported', 10, canvas.height / 2);\n}\n\nfunction addEmbedBlockedMessage(node) {\n    if(!node || !node.parentNode || /EMBED|OBJECT/.test(node.parentNode.tagName)) {\n        return;\n    }\n    var computedStyle = window.getComputedStyle(node);\n\n    var width = node.hasAttribute(\"width\")?node.getAttribute(\"width\")+\"px\":computedStyle.width;\n    var height = node.hasAttribute(\"height\")?node.getAttribute(\"height\")+\"px\":computedStyle.height;\n\n    var errorMsg = $(\"<div/>\").css({\n        'background-color': '#269',\n        'background-image': 'linear-gradient(rgba(255,255,255,.2) 1px, transparent 1px), ' +\n                            'linear-gradient(90deg, rgba(255,255,255,.2) 1px, transparent 1px)',\n        'background-size': '20px 20px, 20px 20px',\n        'text-align': \"center\",\n        'overflow': \"hidden\",\n        'font-size': \"18px\",\n        'display': \"block\",\n        'font-family': 'sans-serif',\n        'color': 'white',\n        'text-shadow': '1px black',\n        'width': width,\n        'height': height,\n        'lineHeight': height,\n    }).text(\"Portia doesn't support browser plugins.\");\n    node.style.display = \"none\";\n    node.parentNode.insertBefore(errorMsg[0], node);\n}\n\nexport default function treeMirrorDelegate(){\n    return {\n        cssEnabled: true,\n        createElement: function(tagName) {\n            var node = null;\n            if(tagName === 'SCRIPT' || tagName === 'META' || tagName === 'BASE') {\n                node = document.createElement('NOSCRIPT');\n            } else {\n                try {\n                    node = document.createElement(tagName);\n                } catch(e) {\n                    // Invalid tag name\n                    node = document.createElement('NOSCRIPT');\n                }\n            }\n            if(tagName === 'FORM') {\n                $(node).on('submit', ()=>false);\n            } else if (tagName === 'IFRAME' || tagName === 'FRAME') {\n                node.setAttribute('src', '/static/frames-not-supported.html');\n            } else if (tagName === 'CANVAS') {\n                paintCanvasMessage(node);\n            } else if (tagName === 'OBJECT' || tagName === 'EMBED') {\n                setTimeout(addEmbedBlockedMessage.bind(null, node), 100);\n            }\n            return node;\n        },\n        setAttribute: function(node, attrName, value){\n            if(\n                /^on/.test(attrName) ||  // Disallow JS attributes\n                ((node.tagName === 'FRAME' || node.tagName === 'IFRAME') &&\n                (attrName === 'src' || attrName === 'srcdoc')) || // Frames not supported\n                ((node.tagName === 'OBJECT' || node.tagName === 'EMBED') &&\n                (attrName === 'data' || attrName === 'src')) // Block embed / object\n            ) {\n                return true;\n            }\n\n            // make sure tree mutations take into account disabled CSS\n            if (!this.cssEnabled) {\n                if (attrName === 'style') {\n                    attrName = 'data-portia-hidden-style';\n                } else if (node.tagName === 'STYLE' && attrName === 'media') {\n                    attrName = 'data-portia-hidden-media';\n                } else if (node.tagName === 'LINK') {\n                    if (attrName === 'media' && node.getAttribute('rel') === 'stylesheet') {\n                        attrName = 'data-portia-hidden-media';\n                    } else if (attrName === 'rel' && value === 'stylesheet' &&\n                               node.hasAttribute('media')) {\n                        node.setAttribute('data-portia-hidden-media',\n                                          node.getAttribute('media'));\n                        node.removeAttribute('media');\n                    }\n                }\n            }\n\n            try{\n                node.setAttribute(attrName, value);\n            }catch(e){\n                console.log(e, attrName, value);\n            }\n\n            if(node.tagName === 'CANVAS' && (attrName === 'width' || attrName === 'height')) {\n                paintCanvasMessage(node);\n            }\n\n            return true;\n        }\n    };\n}\n\n"
  },
  {
    "path": "portiaui/app/utils/types.js",
    "content": "export function toType(obj) {\n    return ({}).toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\nexport function isObject(obj) {\n    return toType(obj) === 'object';\n}\n\nexport function isArray(obj) {\n    return Array.isArray(obj);\n}\n\n"
  },
  {
    "path": "portiaui/app/utils/utils.js",
    "content": "import Ember from 'ember';\n\n/**\n * Cleans, normalizes and validates URLs\n */\nexport function cleanUrl(url) {\n    if(typeof url !== 'string') {\n        return null;\n    }\n    url = url.trim();\n    if(!/^https?:\\/\\//i.test(url)) {\n        url = 'http://' + url;\n    }\n    try {\n        url = (new URI(url)).normalize();\n    } catch(e){\n        return null;\n    }\n    if(!url.host()) {\n        return null;\n    }\n    return url.toString();\n}\n\n/**\n * Four random hex characters\n */\nfunction s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n        .toString(16)\n        .substring(1);\n}\n\nexport function guid() {\n    return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n        s4() + '-' + s4() + s4() + s4();\n}\n\nexport function shortGuid(separator='-') {\n    return s4() + separator + s4() + separator + s4();\n}\n\nexport function toType(obj) {\n    return ({}).toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\nexport function captureMessage(msg, params) {\n    Ember.Logger.log(msg);\n    if (window.Raven) {\n        Raven.captureMessage(msg, params);\n    }\n}\nexport function logError(err, params) {\n    Ember.Logger.error(err);\n    if (window.Raven) {\n        Raven.captureException(err, params);\n    }\n}\n\nexport function renameAttr($elements, from, to) {\n    if (to === from) {\n        return $elements;\n    }\n\n    return $elements.each(function() {\n        if (this.hasAttribute(from)) {\n            this.setAttribute(to, this.getAttribute(from));\n            this.removeAttribute(from);\n        } else if (this.hasAttribute(to)) {\n            this.removeAttribute(to);\n        }\n    });\n}\n\nexport function flatten(list) {\n    const result = [];\n    list.forEach((element) => {\n        element.forEach((nested) => { result.push(nested); });\n    });\n    return result;\n}\n"
  },
  {
    "path": "portiaui/app/validations/fixed-fragment.js",
    "content": "import { validatePresence } from 'ember-changeset-validations/validators';\nimport validateWhitespace from '../validators/whitespace';\n\nexport default {\n  value: [\n    validatePresence({ presence: true, message: 'Should not be empty.'}),\n    validateWhitespace()\n  ]\n};\n"
  },
  {
    "path": "portiaui/app/validations/list-fragment.js",
    "content": "import { validatePresence } from 'ember-changeset-validations/validators';\n\nexport default {\n  value: validatePresence(true)\n};\n"
  },
  {
    "path": "portiaui/app/validations/range-fragment.js",
    "content": "import validateRange from '../validators/range';\n\nexport default {\n  value: validateRange()\n};\n"
  },
  {
    "path": "portiaui/app/validators/range.js",
    "content": "import { allLetters, allDigits } from '../utils/start-urls';\n\nfunction hasMixedCase(endpoints) {\n    return endpoints.match(/[a-z]/) && endpoints.match(/[A-Z]/);\n}\n\nfunction hasSingleLetters(endpoints) {\n    return endpoints.split('-').every((x) => x.length === 1);\n}\n\nfunction isRangeIncomplete(endpoints) {\n    return endpoints.split('-').contains('');\n}\n\nfunction validateIncreasing(endpoints, isIncreasing) {\n    const [a, b] = endpoints.split('-');\n    const msg = `A range must be increasing. Try swapping to ${b}-${a}.`;\n    return isIncreasing(a, b) || msg;\n}\n\nexport default function validateRange() {\n    return (key, newValue/*, oldValue, changes */) => {\n        if (isRangeIncomplete(newValue)) {\n            return 'A range must have both a start and an end.';\n        }\n\n        if (allDigits(newValue)) {\n            return validateIncreasing(newValue, (a, b) => parseInt(a) <= parseInt(b));\n        }\n\n        if (allLetters(newValue)) {\n            if (!hasSingleLetters(newValue)) {\n                return 'A range must have only single letters.';\n            }\n            if (hasMixedCase(newValue)) {\n                return 'A range cannot mix lower and upper case.';\n            }\n            return validateIncreasing(newValue, (a, b) => a <= b);\n        }\n\n        return 'A range must not mix numbers and letters.';\n    };\n}\n"
  },
  {
    "path": "portiaui/app/validators/whitespace.js",
    "content": "export default function validateWhitespace() {\n    return (key, newValue/*, oldValue, changes */) => {\n        return newValue.match(/\\s/g) ? 'Should not have whitespace' : true;\n    };\n}\n"
  },
  {
    "path": "portiaui/bower.json",
    "content": "{\n  \"name\": \"portia-ui\",\n  \"ignore\": [\n    \"*\",\n    \"!bower.json\"\n  ],\n  \"dependencies\": {\n    \"ember\": \"~2.6.0\",\n    \"ember-cli-shims\": \"0.1.1\",\n    \"ember-cli-test-loader\": \"0.2.2\",\n    \"ember-qunit-notifications\": \"0.1.0\",\n    \"jquery\": \"^2.2.0\",\n    \"blob-polyfill\": \"~1.0.20150320\",\n    \"cookie\": \"~1.1.0\",\n    \"bootstrap-sass\": \"~3.3.6\",\n    \"font-awesome\": \"~4.5.0\",\n    \"jquery-color\": \"~2.1.2\",\n    \"moment\": \"~2.11.2\",\n    \"uri.js\": \"~1.16.0\",\n    \"fetch\": \"~0.10.1\",\n    \"es6-promise\": \"~3.0.2\",\n    \"uri-templates\": \"~0.1.9\",\n    \"css-escape\": \"~1.5.0\",\n    \"animation-frame\": \"~0.2.4\"\n  },\n  \"private\": true\n}\n"
  },
  {
    "path": "portiaui/config/deprecation-workflow.js",
    "content": "window.deprecationWorkflow = window.deprecationWorkflow || {};\nwindow.deprecationWorkflow.config = {\n    workflow: [\n        { handler: \"silence\", matchMessage: /You modified .+ twice in a single render. This was unreliable in Ember 1.x and will be removed in Ember 3.0/ }\n    ]\n};\n"
  },
  {
    "path": "portiaui/config/environment-development.js",
    "content": "/* jshint node: true */\n\nmodule.exports = function(ENV) {\n    ENV.APP.LOG_ACTIVE_GENERATION = true;\n    ENV.APP.LOG_TRANSITIONS = true;\n    ENV.APP.LOG_TRANSITIONS_INTERNAL = true;\n    ENV.APP.LOG_VIEW_LOOKUPS = true;\n    //ENV.APP.LOG_RESOLVER = true;\n    return ENV;\n};"
  },
  {
    "path": "portiaui/config/environment-production.js",
    "content": "/* jshint node: true */\n\nmodule.exports = function(ENV) {\n    return ENV;\n};"
  },
  {
    "path": "portiaui/config/environment-test.js",
    "content": "/* jshint node: true */\n\nmodule.exports = function(ENV) {\n    // Testem prefers this...\n    ENV.baseURL = '/';\n    ENV.locationType = 'none';\n\n    // keep test console output quieter\n    ENV.APP.LOG_ACTIVE_GENERATION = false;\n    ENV.APP.LOG_VIEW_LOOKUPS = false;\n\n    ENV.APP.rootElement = '#ember-testing';\n    return ENV;\n};"
  },
  {
    "path": "portiaui/config/environment.js",
    "content": "/* jshint node: true */\nvar path = require('path'),\n    envModule;\n\nmodule.exports = function(environment) {\n    var ENV = {\n        modulePrefix: 'portia-ui',\n        environment: environment,\n        baseURL: '/',\n        locationType: 'hash',\n\n        contentSecurityPolicy: {\n            'default-src': \"'none'\",\n            'script-src': \"* 'unsafe-inline' 'unsafe-eval'\",\n            'style-src': \"* 'unsafe-inline'\",\n            'img-src': \"* data:\",\n            'connect-src': \"*\",\n            'font-src': \"*\",\n            'object-src': \"*\",\n            'media-src': \"*\",\n            'frame-src': \"'none'\"\n        },\n\n        EmberENV: {\n            FEATURES: {\n                // Here you can enable experimental features on an ember canary build\n                // e.g. 'with-controller': true\n            }\n        },\n\n        APP: {\n            // Here you can pass flags/options to your application instance\n            // when it is created\n            allow_nesting: true\n        }\n    };\n    try {\n        envModule = require(path.join(process.cwd(), 'config/environment-' + environment));\n    } catch (e) {\n        console.log('Config module for \"' + environment + '\" not found.');\n    }\n    if (typeof envModule === 'function') {\n        ENV = envModule(ENV);\n    }\n\n    return ENV;\n};\n"
  },
  {
    "path": "portiaui/ember-cli-build.js",
    "content": "/* global require, module */\nvar EmberApp = require('ember-cli/lib/broccoli/ember-app');\nvar UnwatchedDir = require('broccoli-source').UnwatchedDir;\nvar WatchedDir = require('broccoli-source').WatchedDir;\nvar concat = require('broccoli-concat');\nvar mergeTrees = require('ember-cli/lib/broccoli/merge-trees');\n\nmodule.exports = function(defaults) {\n    var app = new EmberApp(defaults, {\n        babel: {\n            includePolyfill: true\n        }\n    });\n\n    app.import('bower_components/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js');\n    app.import('bower_components/cookie/cookie.min.js');\n    app.import('bower_components/jquery-color/jquery.color.js');\n    app.import('bower_components/moment/min/moment.min.js');\n    app.import('bower_components/uri.js/src/URI.min.js');\n    app.import('bower_components/css-escape/css.escape.js');\n\n    app.import('vendor/tree-mirror.js');\n    app.import('vendor/modernizr.js');\n\n    ['eot', 'svg', 'ttf', 'woff', 'woff2'].forEach(function(file) {\n        app.import('bower_components/font-awesome/fonts/fontawesome-webfont.' + file, {\n            destDir: 'assets/fonts'\n        });\n    });\n\n    // Splash scripts\n    var splashTree = concat(mergeTrees([\n        new WatchedDir(app._resolveLocal('../splash_utils')),\n        new UnwatchedDir(app._resolveLocal('vendor'))\n    ], {\n        annotation: 'TreeMerger (splash utils)'\n    }), {\n        inputFiles: [\n            'mutation-summary.js',\n            'tree-mirror.js',\n            // LocalStorage Shim disabled since it doesn't work in Qt5\n            // 'local-storage-shim.js',\n            'z_inject_this.js'\n        ],\n        outputFile: 'splash_content_scripts/combined.js',\n        header: '(function(){',\n        footer: '})();'\n    });\n\n    return mergeTrees([\n        app.toTree(),\n        splashTree\n    ]);\n};\n"
  },
  {
    "path": "portiaui/package.json",
    "content": "{\n  \"name\": \"portia-ui\",\n  \"version\": \"2.0.0-alpha\",\n  \"description\": \"User interface for the Portia visual scraping tool\",\n  \"private\": true,\n  \"directories\": {\n    \"doc\": \"doc\",\n    \"test\": \"tests\"\n  },\n  \"scripts\": {\n    \"build\": \"bower install && ember build -e production\",\n    \"start\": \"ember server\",\n    \"test\": \"ember test\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.10.0\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"bower\": \"^1.8.4\",\n    \"broccoli-asset-rev\": \"^2.4.2\",\n    \"broccoli-concat\": \"^3.2.2\",\n    \"broccoli-source\": \"^1.1.0\",\n    \"ember-ajax\": \"^2.0.1\",\n    \"ember-api-actions\": \"0.0.11\",\n    \"ember-api-requests\": \"0.3.0\",\n    \"ember-changeset\": \"1.1.2\",\n    \"ember-changeset-validations\": \"1.2.0\",\n    \"ember-cli\": \"2.6.3\",\n    \"ember-cli-app-version\": \"^1.0.0\",\n    \"ember-cli-autoprefixer\": \"^0.6.0\",\n    \"ember-cli-babel\": \"^6.6.0\",\n    \"ember-cli-content-security-policy\": \"0.5.0\",\n    \"ember-cli-dependency-checker\": \"^1.2.0\",\n    \"ember-cli-deprecation-workflow\": \"^0.2.3\",\n    \"ember-cli-htmlbars\": \"^1.0.3\",\n    \"ember-cli-htmlbars-inline-precompile\": \"^1.0.3\",\n    \"ember-cli-inject-live-reload\": \"^1.4.0\",\n    \"ember-cli-jshint\": \"^1.0.0\",\n    \"ember-cli-loading-slider\": \"^1.3.0\",\n    \"ember-cli-qunit\": \"^1.4.0\",\n    \"ember-cli-release\": \"^0.2.9\",\n    \"ember-cli-sass\": \"^7.2.0\",\n    \"ember-cli-sri\": \"^2.1.0\",\n    \"ember-cli-uglify\": \"^1.2.0\",\n    \"ember-concurrency\": \"0.7.10\",\n    \"ember-data\": \"~2.11.3\",\n    \"ember-data-url-templates\": \"0.1.1\",\n    \"ember-export-application-global\": \"^1.0.5\",\n    \"ember-load-initializers\": \"^0.5.1\",\n    \"ember-local-storage\": \"^1.3.0\",\n    \"ember-resolver\": \"^2.0.3\",\n    \"ember-route-action-helper\": \"0.3.1\",\n    \"ember-run-raf\": \"1.1.2\",\n    \"ember-truth-helpers\": \"^1.2.0\",\n    \"loader.js\": \"^4.0.1\"\n  }\n}\n"
  },
  {
    "path": "portiaui/public/crossdomain.xml",
    "content": "<?xml version=\"1.0\"?>\n<!DOCTYPE cross-domain-policy SYSTEM \"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">\n<cross-domain-policy>\n    <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->\n\n    <!-- Most restrictive policy: -->\n    <site-control permitted-cross-domain-policies=\"none\"/>\n\n    <!-- Least restrictive policy: -->\n    <!--\n    <site-control permitted-cross-domain-policies=\"all\"/>\n    <allow-access-from domain=\"*\" to-ports=\"*\" secure=\"false\"/>\n    <allow-http-request-headers-from domain=\"*\" headers=\"*\" secure=\"false\"/>\n    -->\n</cross-domain-policy>\n"
  },
  {
    "path": "portiaui/public/empty-frame.html",
    "content": "<!DOCTYPE html>\n<html><script>\nwindow.top.postMessage({frameReady: location.search.replace('?','')}, \"*\");\nwhile(document.firstChild) document.removeChild(document.firstChild);\n</script></html>\n"
  },
  {
    "path": "portiaui/public/frames-not-supported.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">\n        <style>\n            html {\n                width:100%;\n                height:100%;\n                background-color:#269;\n\n                background-image: linear-gradient(rgba(255,255,255,.2) 1px, transparent 1px),\n                linear-gradient(90deg, rgba(255,255,255,.2) 1px, transparent 1px);\n\n                background-size: 20px 20px, 20px 20px;\n            }\n            html, body, h1 {\n                margin: 0;\n            }\n            h1 {\n                height: 100px;\n                margin-top: -50px;\n                line-height: 50px;\n                width: 100%;\n                text-align: center;\n                position: absolute;\n                top: 50%;\n                font-family: sans-serif;\n                color: white;\n                text-shadow: 1px black;\n            }\n        </style>\n    </head>\n    <body>\n        <h1>:(<br/>Frames are not supported by Portia</h1>\n    </body>\n</html>\n"
  },
  {
    "path": "portiaui/public/robots.txt",
    "content": "# http://www.robotstxt.org\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "portiaui/testem.js",
    "content": "/*jshint node:true*/\nmodule.exports = {\n  \"framework\": \"qunit\",\n  \"test_page\": \"tests/index.html?hidepassed\",\n  \"disable_watching\": true,\n  \"launch_in_ci\": [\n    \"PhantomJS\"\n  ],\n  \"launch_in_dev\": [\n    \"PhantomJS\",\n    \"Chrome\"\n  ]\n};\n"
  },
  {
    "path": "portiaui/tests/.jshintrc",
    "content": "{\n  \"predef\": [\n    \"document\",\n    \"window\",\n    \"location\",\n    \"setTimeout\",\n    \"$\",\n    \"-Promise\",\n    \"define\",\n    \"console\",\n    \"visit\",\n    \"exists\",\n    \"fillIn\",\n    \"click\",\n    \"keyEvent\",\n    \"triggerEvent\",\n    \"find\",\n    \"findWithAssert\",\n    \"wait\",\n    \"DS\",\n    \"andThen\",\n    \"currentURL\",\n    \"currentPath\",\n    \"currentRouteName\"\n  ],\n  \"node\": false,\n  \"browser\": false,\n  \"boss\": true,\n  \"curly\": true,\n  \"debug\": false,\n  \"devel\": false,\n  \"eqeqeq\": true,\n  \"evil\": true,\n  \"forin\": false,\n  \"immed\": false,\n  \"laxbreak\": false,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"noempty\": false,\n  \"nonew\": false,\n  \"nomen\": false,\n  \"onevar\": false,\n  \"plusplus\": false,\n  \"regexp\": false,\n  \"undef\": true,\n  \"sub\": true,\n  \"strict\": false,\n  \"white\": false,\n  \"eqnull\": true,\n  \"esnext\": true,\n  \"unused\": true\n}\n"
  },
  {
    "path": "portiaui/tests/helpers/destroy-app.js",
    "content": "import Ember from 'ember';\n\nexport default function destroyApp(application) {\n  Ember.run(application, 'destroy');\n}\n"
  },
  {
    "path": "portiaui/tests/helpers/module-for-acceptance.js",
    "content": "import { module } from 'qunit';\nimport Ember from 'ember';\nimport startApp from '../helpers/start-app';\nimport destroyApp from '../helpers/destroy-app';\n\nconst { RSVP: { Promise } } = Ember;\n\nexport default function(name, options = {}) {\n  module(name, {\n    beforeEach() {\n      this.application = startApp();\n\n      if (options.beforeEach) {\n        return options.beforeEach.apply(this, arguments);\n      }\n    },\n\n    afterEach() {\n      let afterEach = options.afterEach && options.afterEach.apply(this, arguments);\n      return Promise.resolve(afterEach).then(() => destroyApp(this.application));\n    }\n  });\n}\n"
  },
  {
    "path": "portiaui/tests/helpers/resolver.js",
    "content": "import Resolver from '../../resolver';\nimport config from '../../config/environment';\n\nconst resolver = Resolver.create();\n\nresolver.namespace = {\n  modulePrefix: config.modulePrefix,\n  podModulePrefix: config.podModulePrefix\n};\n\nexport default resolver;\n"
  },
  {
    "path": "portiaui/tests/helpers/start-app.js",
    "content": "import Ember from 'ember';\nimport Application from '../../app';\nimport config from '../../config/environment';\n\nexport default function startApp(attrs) {\n  let application;\n\n  let attributes = Ember.merge({}, config.APP);\n  attributes = Ember.merge(attributes, attrs); // use defaults, but you can override;\n\n  Ember.run(() => {\n    application = Application.create(attributes);\n    application.setupForTesting();\n    application.injectTestHelpers();\n  });\n\n  return application;\n}\n"
  },
  {
    "path": "portiaui/tests/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>PortiaWeb Tests</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    {{content-for \"head\"}}\n    {{content-for \"test-head\"}}\n\n    <link rel=\"stylesheet\" href=\"assets/vendor.css\">\n    <link rel=\"stylesheet\" href=\"assets/portia-ui.css\">\n    <link rel=\"stylesheet\" href=\"assets/test-support.css\">\n\n    {{content-for \"head-footer\"}}\n    {{content-for \"test-head-footer\"}}\n  </head>\n  <body>\n    {{content-for \"body\"}}\n    {{content-for \"test-body\"}}\n\n    <script src=\"testem.js\" integrity=\"\"></script>\n    <script src=\"assets/vendor.js\"></script>\n    <script src=\"assets/test-support.js\"></script>\n    <script src=\"assets/portia-ui.js\"></script>\n    <script src=\"assets/tests.js\"></script>\n    <script src=\"assets/test-loader.js\"></script>\n\n    {{content-for \"body-footer\"}}\n    {{content-for \"test-body-footer\"}}\n  </body>\n</html>\n"
  },
  {
    "path": "portiaui/tests/test-helper.js",
    "content": "import resolver from './helpers/resolver';\nimport {\n  setResolver\n} from 'ember-qunit';\n\nsetResolver(resolver);\n"
  },
  {
    "path": "portiaui/tests/unit/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/tests/unit/models/start-url-test.js",
    "content": "import buildStartUrl from '../../../models/start-url';\nimport { moduleForModel, test } from 'ember-qunit';\n\nmoduleForModel('start-url', 'Unit | Model | start-url', {\n  needs: []\n});\n\ntest('it generates a correct url list', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n\n  assert.deepEqual(url.generateList(), [[urlString]]);\n});\n\ntest('it generates a list with a list fragment', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n  url.fragments.addObject({type: 'list', value: 'a b'});\n  const result = [\n      [urlString, 'a'],\n      [urlString, 'b']\n  ];\n\n  assert.deepEqual(url.generateList(), result);\n});\n\ntest('it generates a list with a range fragment', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n  url.fragments.addObject({type: 'range', value: '0-2'});\n  const result = [\n      [urlString, '0'],\n      [urlString, '1'],\n      [urlString, '2']\n  ];\n\n  assert.deepEqual(url.generateList(), result);\n});\n\ntest('it generates a list with a letter range fragment', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n  url.fragments.addObject({type: 'range', value: 'a-c'});\n  const result = [\n      [urlString, 'a'],\n      [urlString, 'b'],\n      [urlString, 'c']\n  ];\n\n  assert.deepEqual(url.generateList(), result);\n});\n\ntest('it generates a combined fragment correctly', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n  url.fragments.addObject({type: 'list', value: 'a b'});\n  url.fragments.addObject({type: 'range', value: '0-1'});\n  url.fragments.addObject({type: 'fixed', value: '/ending'});\n  const result = [\n      [urlString, 'a', '0', '/ending'],\n      [urlString, 'a', '1', '/ending'],\n      [urlString, 'b', '0', '/ending'],\n      [urlString, 'b', '1', '/ending']\n  ];\n\n  assert.deepEqual(url.generateList(), result);\n});\n\ntest('it treats ranges nicely', function(assert) {\n  const urlString = 'http://domain.com';\n  const url = buildStartUrl({ type: 'generated', url: urlString});\n  url.fragments.addObject({type: 'range', value: '0-'});\n  const result = [ [urlString, ''] ];\n\n  assert.deepEqual(url.generateList(), result);\n});\n\nfunction assertFeedsEqual(assert, url, test_url) {\n  const feed = buildStartUrl({ type: 'feed', url: url});\n\n  assert.equal(feed.show(), test_url);\n}\n\ntest('it rawifies a github nonraw gist', function(assert) {\n  assertFeedsEqual(\n      assert,\n      'https://gist.github.com/user/gist_id',\n      'https://gist.github.com/user/gist_id/raw'\n  );\n});\n\ntest('it rawifies a github nonraw trailing gist', function(assert) {\n  assertFeedsEqual(\n      assert,\n      'https://gist.github.com/user/gist_id/',\n      'https://gist.github.com/user/gist_id/raw'\n  );\n});\n\ntest('it does nothing with a github raw gist', function(assert) {\n  const gistUrl = 'https://gist.github.com/user/gist_id/raw';\n  assertFeedsEqual(assert, gistUrl, gistUrl);\n});\n\ntest('it rawifies a dropbox shareable link', function(assert) {\n  assertFeedsEqual(\n      assert,\n      'https://www.dropbox.com/s/dropbox-id/urls.txt?dl=0',\n      'https://www.dropbox.com/s/dropbox-id/urls.txt?dl=0&raw=1'\n  );\n});\n\ntest('it rawifies a google shareable link', function(assert) {\n  assertFeedsEqual(\n      assert,\n      'https://docs.google.com/document/d/drive-id/edit?usp=sharing',\n      'https://docs.google.com/document/d/drive-id/export?format=txt'\n  );\n});\n\ntest('it does not rawify a non drive google link', function(assert) {\n  assertFeedsEqual(\n      assert,\n      'http://google.com/sitemap.xml',\n      'http://google.com/sitemap.xml'\n  );\n});\n"
  },
  {
    "path": "portiaui/tests/unit/utils/selectors-test.js",
    "content": "import Ember from 'ember';\nimport SelectorMatcher from '../../../services/selector-matcher';\nimport {\n    findContainer,\n    findRepeatedContainers,\n    BaseSelectorGenerator,\n    ContainerSelectorGenerator,\n    AnnotationSelectorGenerator\n} from '../../../utils/selectors';\nimport { module, test, skip } from 'qunit';\n\nmodule('Unit | Utility | selectors');\n\nclass MockBrowser {\n    constructor(documentRoot) {\n        this.$document = Ember.$(documentRoot);\n    }\n}\n\ntest('BaseSelectorGenerator computes paths for all elements', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selector = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#div2, #li1, #li2, #li3').toArray()\n    });\n    const idPaths = selector.get('paths').map(\n        path => path.map(\n            element => element.id));\n    assert.deepEqual(idPaths, [\n        ['main', 'div1', 'div2'],\n        ['main', 'div1', 'ul1', 'li1'],\n        ['main', 'div1', 'ul1', 'li2'],\n        ['main', 'div1', 'ul1', 'li3']\n    ]);\n});\n\ntest('BaseSelectorGenerator groups paths for all elements', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selector = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#div2, #li1, #li2, #li3').toArray()\n    });\n    const groupedIdPaths = selector.get('groupedPaths').map(\n        group => group.map(\n            path => path.map(\n                element => element.id)));\n    assert.deepEqual(groupedIdPaths, [\n        [\n            ['main', 'div1', 'div2']\n        ],\n        [\n            ['main', 'div1', 'ul1', 'li1'],\n            ['main', 'div1', 'ul1', 'li2'],\n            ['main', 'div1', 'ul1', 'li3']\n        ]\n    ]);\n});\n\ntest('BaseSelectorGenerator generates selectors for groups of elements', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selector = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#div2, #li1, #li2, #li3').toArray()\n    });\n    assert.deepEqual(selector.get('selectors'), [\n        ['#div2'],\n        ['li']\n    ]);\n    assert.equal(selector.get('selector'), '#div2, li');\n});\n\ntest('BaseSelectorGenerator nesting generates correct selectors', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selectorParent = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#div1, #li1, #li2, #li3').toArray()\n    });\n    const selector = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        parent: selectorParent,\n        elements: $elements.find('#div2, #li1').toArray()\n    });\n    assert.deepEqual(selector.get('selectors'), [\n        ['#div1 > div'],\n        ['li']\n    ]);\n    assert.equal(selector.get('selector'), '#div1 > div, li');\n});\n\ntest('ContainerSelectorGenerator propagates groups to child selectors', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-1').toArray()\n    });\n    const selector2 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-2, #span2-2, #span3-2').toArray()\n    });\n    const selector3 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-3').toArray()\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n});\n\ntest('ContainerSelectorGenerator propagates groups to disjoint child selectors', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-1').toArray()\n    });\n    const selector2 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-2, #span2-2, #span3-2').toArray()\n    });\n    const selector3 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span2-3').toArray()\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n});\n\nskip('ContainerSelectorGenerator propagates groups to child selectors with additional trees', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#div2, #span1-1').toArray()\n    });\n    const selector2 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-2, #span2-2, #span3-2').toArray()\n    });\n    const selector3 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span2-3').toArray()\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), '#div2, li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n});\n\ntest('ContainerSelectorGenerator propagates changes in a child selector to other children', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-1').toArray()\n    });\n    const selector2 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span1-2, #span2-2').toArray()\n    });\n    const selector3 = BaseSelectorGenerator.create({\n        annotation: Ember.Object.create({selectionMode: 'auto'}),\n        elements: $elements.find('#span2-3').toArray()\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), 'li:nth-child(-n+2) > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li:nth-child(-n+2) > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li:nth-child(-n+2) > span:nth-child(3)');\n\n    selector2.set('elements', $elements.find('#span1-2, #span2-2, #span3-2').toArray());\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n});\n\ntest('AnnotationSelectorGenerator generates selectors for groups of elements', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selector = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            selectionMode: 'auto',\n            acceptSelectors: [\"#div2\", \"#li1\", \"#li2\", \"#li3\"],\n            rejectSelectors: []\n        })\n    });\n    assert.equal(selector.get('generalizedSelector'), '#div2, #ul1 > li');\n    assert.deepEqual(selector.get('selectors'), [\n        ['#div2'],\n        ['li']\n    ]);\n    assert.equal(selector.get('selector'), '#div2, li');\n});\n\ntest('AnnotationSelectorGenerator generates generalized selectors', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selector2 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            selectionMode: 'auto',\n            acceptSelectors: [\"#div2\", \"#li1\", \"#li2\"],\n            rejectSelectors: []\n        })\n    });\n    assert.equal(selector2.get('generalizedSelector'), '#div2, #ul1 > li');\n    assert.equal(selector2.get('selector'), '#div2, li');\n});\n\ntest('AnnotationSelectorGenerator generates repeated selectors for repeated field', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const repeatedSelector = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            selectionMode: 'auto',\n            acceptSelectors: [\"#li1\", \"#li2\"],\n            rejectSelectors: []\n        })\n    });\n    const standardSelector = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            selectionMode: 'auto',\n            acceptSelectors: [\"#div2\"],\n            rejectSelectors: []\n        })\n    });\n    selectorParent.addChildren([standardSelector, repeatedSelector]);\n    assert.equal(repeatedSelector.get('generalizedSelector'), '#ul1 > li');\n    assert.equal(repeatedSelector.get('repeatedAnnotation'), true);\n    assert.equal(repeatedSelector.get('selector'), '#div1 > ul > li');\n    assert.equal(standardSelector.get('generalizedSelector'), '#div2');\n    assert.equal(standardSelector.get('repeatedAnnotation'), false);\n    assert.equal(standardSelector.get('selector'), '#div1 > div');\n    assert.equal(selectorParent.get('containerSelector'), '#div1');\n    assert.equal(selectorParent.get('selector'), '#div1');\n});\n\n\ntest('AnnotationSelectorGenerator supports rejecting selectors', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\"><li id=\"li1\"></li><li id=\"li2\"></li><li id=\"li3\"></li></ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selector = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            selectionMode: 'auto',\n            acceptSelectors: [\"#div2\", \"#li1\", \"#li2\"],\n            rejectSelectors: [\"#li3\"]\n        })\n    });\n    assert.equal(selector.get('generalizedSelector'), '#div2, li:nth-child(-n+2)');\n    assert.equal(selector.get('selector'), '#div2, li:nth-child(-n+2)');\n});\n\ntest('AnnotationSelectorGenerator changes get propagated to siblings', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 1,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span1-1'],\n            rejectSelectors: []\n        })\n    });\n    const selector2 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 2,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span1-2'],\n            rejectSelectors: []\n        })\n    });\n    const selector3 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 3,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span2-3'],\n            rejectSelectors: []\n        })\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), '#ul1 > li:nth-child(1) > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), '#ul1 > li:nth-child(1) > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), '#ul1 > li:nth-child(2) > span:nth-child(3)');\n\n    selector2.get('annotation.acceptSelectors').pushObject('#span2-2');\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n\n    selector2.get('annotation.rejectSelectors').pushObject('#span3-2');\n    assert.equal(selector1.get('selector'), 'li:nth-child(-n+2) > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li:nth-child(-n+2) > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li:nth-child(-n+2) > span:nth-child(3)');\n});\n\ntest('Nested AnnotationSelectorGenerator supports rejecting elements', function(assert) {\n    const $elements = Ember.$('<main id=\"main\"><div id=\"div1\"><div id=\"div2\"></div><ul id=\"ul1\">' +\n        '<li id=\"li1\"><span id=\"span1-1\"></span><span id=\"span1-2\"></span><span id=\"span1-3\"></span></li>' +\n        '<li id=\"li2\"><span id=\"span2-1\"></span><span id=\"span2-2\"></span><span id=\"span2-3\"></span></li>' +\n        '<li id=\"li3\"><span id=\"span3-1\"></span><span id=\"span3-2\"></span><span id=\"span3-3\"></span></li>' +\n        '</ul></div></main>');\n    const selectorMatcher = SelectorMatcher.create({\n        browser: new MockBrowser($elements)\n    });\n    const selectorParent = ContainerSelectorGenerator.create({});\n    const selector1 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 1,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span1-1'],\n            rejectSelectors: []\n        })\n    });\n    const selector2 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 2,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span1-2', '#span2-2', '#span3-2'],\n            rejectSelectors: []\n        })\n    });\n    const selector3 = AnnotationSelectorGenerator.create({\n        selectorMatcher,\n        annotation: Ember.Object.create({\n            id: 3,\n            selectionMode: 'auto',\n            acceptSelectors: ['#span2-3'],\n            rejectSelectors: []\n        })\n    });\n    selectorParent.addChildren([selector1, selector2, selector3]);\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li > span:nth-child(3)');\n\n    selector3.get('annotation.rejectSelectors').pushObject('#span1-3');\n    assert.equal(selector1.get('selector'), 'li > span:nth-child(1)');\n    assert.equal(selector2.get('selector'), 'li > span:nth-child(2)');\n    assert.equal(selector3.get('selector'), 'li:nth-child(n+2) > span:nth-child(3)');\n});\n\nvar commonFields = 'image title address area description price'.split(' ');\nvar getElements = function(testCase, fields) {\n    let selectors = {\n        image: `${testCase} .image > img`,\n        title: `${testCase} .title > h3`,\n        address: `${testCase} .address`,\n        area: `${testCase} .address > span:nth-child(2)`,\n        description: `${testCase} .description > p`,\n        price: `${testCase} .description > span`,\n        view: `${testCase} .views > span:nth-child(2)`,\n        info: `${testCase} .info > span:nth-child(2)`\n    };\n\n    let structure = [];\n    for (let field of fields) {\n        structure.push(Array.from(doc.querySelectorAll(selectors[field])));\n    }\n    return structure;\n};\n\nvar runTest = function(assert, type, fields, expected) {\n    let elements = getElements(type, fields),\n        container = findContainer(elements),\n        [repeatedContainers, siblings] = findRepeatedContainers(elements, container);\n    let containerId = '0';\n    if (container) {\n        containerId = container.getAttribute('data-tagid');\n    }\n    let repeatedContainerIds = repeatedContainers.map(\n        element => element.getAttribute('data-tagid'));\n    assert.deepEqual([containerId, repeatedContainerIds, siblings], expected);\n};\n\ntest('regular', function(assert) {\n    runTest(assert, '#regular-structure', commonFields, [\n        '5',\n        [\n            '6',\n            '17',\n            '28',\n            '39',\n            '50',\n            '61',\n            '72',\n            '83',\n            '94'\n        ],\n        0\n    ]);\n});\n\ntest('regular-with-unneeded-rows', function(assert) {\n    runTest(assert, '#regular-with-unneeded-rows', commonFields, [\n        '107',\n        [\n            '108',\n            '121',\n            '134',\n            '147',\n            '160',\n            '173',\n            '186',\n            '199',\n            '212'\n        ],\n        0\n    ]);\n});\n\ntest('nested-rows-and-columns', function(assert) {\n    runTest(assert, '#nested-rows-and-columns', commonFields, [\n        '225',\n        [\n            '227',\n            '238',\n            '249',\n            '261',\n            '272',\n            '283',\n            '295',\n            '306',\n            '317'\n        ],\n        0\n    ]);\n});\n\ntest('items-with-some-fields-missing', function(assert) {\n    runTest(assert, '#items-with-some-fields-missing', commonFields, [\n        '330',\n        [\n            '331',\n            '339',\n            '350',\n            '361',\n            '372',\n            '383',\n            '391',\n            '402',\n            '410'\n        ],\n        0\n    ]);\n});\n\ntest('items-with-siblings', function(assert) {\n    let fields = commonFields.slice(0, commonFields.length);\n    fields.push('view');\n    runTest(assert, '#items-spread-across-siblings', fields, [\n        '423',\n        [\n            '424',\n            '438',\n            '452',\n            '466',\n            '480',\n            '494',\n            '508',\n            '522',\n            '536'\n        ],\n        1\n    ]);\n});\n\ntest('items-across-siblings-with-fields-missing', function(assert) {\n    let fields = commonFields.slice(0, commonFields.length);\n    fields.push('view');\n    runTest(assert, '#items-across-siblings-fields-missing', fields, [\n        '552',\n        [\n            '553',\n            '564',\n            '578',\n            '592',\n            '606',\n            '620',\n            '631',\n            '645',\n            '656'\n        ],\n        1\n    ]);\n});\n\ntest('nested-items-with-siblings', function(assert) {\n    let fields = commonFields.slice(0, commonFields.length);\n    fields.push('view');\n    runTest(assert, '#nested-items-with-siblings', fields, [\n        '771',\n        [\n            '773',\n            '787',\n            '801',\n            '816',\n            '830',\n            '844',\n            '859',\n            '873',\n            '887'\n        ],\n        1\n    ]);\n});\n\ntest('items-with-field-missing-at-end', function(assert) {\n    runTest(assert, '#items-with-field-missing-at-end', commonFields, [\n        '672',\n        [\n            '673',\n            '683',\n            '694',\n            '705',\n            '716',\n            '727',\n            '737',\n            '748',\n            '758'\n        ],\n        0\n    ]);\n});\n\ntest('multiple-siblings', function(assert) {\n    let fields = commonFields.slice(0, commonFields.length);\n    fields.push('view');\n    runTest(assert, '#multiple-siblings', fields, [\n        '903',\n        [\n            '904',\n            '921',\n            '938',\n            '955',\n            '972',\n            '989',\n            '1006',\n            '1023',\n            '1040'\n        ],\n        1\n    ]);\n});\n\ntest('multiple-siblings-skip-element', function(assert) {\n    let fields = commonFields.slice(0, commonFields.length);\n    fields.push('info');\n    runTest(assert, '#multiple-siblings', fields, [\n        '903',\n        [\n            '904',\n            '921',\n            '938',\n            '955',\n            '972',\n            '989',\n            '1006',\n            '1023',\n            '1040'\n        ],\n        2\n    ]);\n});\n\nskip('transposed-table', function(assert) {\n    runTest(assert, '#transposed-table-structure', commonFields, [\n        '1060',\n        [\n            '1062',\n            '0',\n            '0',\n            '0',\n            '0',\n            '0',\n            '0',\n            '0',\n            '0'\n        ],\n        4\n    ]);\n});\n\ntest('no-elements-found', function(assert) {\n    runTest(assert, '#doess-not-exist-in-page', commonFields, [\n        '0',\n        [],\n        0\n    ]);\n});\n\nvar testPage = `\n<!DOCTYPE html>\n<html data-tagid=\"0\">\n<style data-tagid=\"1\" type=\"text/css\">\n    .items {display: flex; border: solid;}\n    .items > div {padding: 5px;}\n    .spacer-row {border-left: solid;}\n    html {font-size: 0.8em;}\n</style>\n<body data-tagid=\"2\">\n    <h2 data-tagid=\"3\">Regular Structure</h2>\n    <div data-tagid=\"4\" id=\"regular-structure\">\n        <div data-tagid=\"5\" class=\"items\">\n            <div data-tagid=\"6\" id=\"item_0\">\n                <div data-tagid=\"7\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"8\">\n                </div>\n                <div data-tagid=\"9\" class=\"title\">\n                    <h3 data-tagid=\"10\">Luxury 3 Bed Apartment</h3>\n                    <div data-tagid=\"11\" class=\"address\">\n                        <span data-tagid=\"12\">978 Charles Street</span>\n                        <span data-tagid=\"13\">Barrington, IL 60010</span>\n                    </div>\n                </div>\n                <div data-tagid=\"14\" class=\"description\">\n                    <p data-tagid=\"15\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"16\">$215000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"17\" id=\"item_1\">\n                <div data-tagid=\"18\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"19\">\n                </div>\n                <div data-tagid=\"20\" class=\"title\">\n                    <h3 data-tagid=\"21\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"22\" class=\"address\">\n                        <span data-tagid=\"23\">609 Prospect Street</span>\n                        <span data-tagid=\"24\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"25\" class=\"description\">\n                    <p data-tagid=\"26\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"27\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"28\" id=\"item_2\">\n                <div data-tagid=\"29\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"30\">\n                </div>\n                <div data-tagid=\"31\" class=\"title\">\n                    <h3 data-tagid=\"32\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"33\" class=\"address\">\n                        <span data-tagid=\"34\">312 Route 29</span>\n                        <span data-tagid=\"35\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"36\" class=\"description\">\n                    <p data-tagid=\"37\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"38\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"39\" id=\"item_3\">\n                <div data-tagid=\"40\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"41\">\n                </div>\n                <div data-tagid=\"42\" class=\"title\">\n                    <h3 data-tagid=\"43\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"44\" class=\"address\">\n                        <span data-tagid=\"45\">799 Briarwood Drive</span>\n                        <span data-tagid=\"46\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"47\" class=\"description\">\n                    <p data-tagid=\"48\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"49\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"50\" id=\"item_4\">\n                <div data-tagid=\"51\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"52\">\n                </div>\n                <div data-tagid=\"53\" class=\"title\">\n                    <h3 data-tagid=\"54\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"55\" class=\"address\">\n                        <span data-tagid=\"56\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"57\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"58\" class=\"description\">\n                    <p data-tagid=\"59\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"60\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"61\" id=\"item_5\">\n                <div data-tagid=\"62\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"63\">\n                </div>\n                <div data-tagid=\"64\" class=\"title\">\n                    <h3 data-tagid=\"65\">Renovated 3 Bed Terrace</h3>\n                    <div data-tagid=\"66\" class=\"address\">\n                        <span data-tagid=\"67\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"68\">Aliquippa, PA 15001</span>\n                    </div>\n                </div>\n                <div data-tagid=\"69\" class=\"description\">\n                    <p data-tagid=\"70\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"71\">$418000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"72\" id=\"item_6\">\n                <div data-tagid=\"73\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"74\">\n                </div>\n                <div data-tagid=\"75\" class=\"title\">\n                    <h3 data-tagid=\"76\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"77\" class=\"address\">\n                        <span data-tagid=\"78\">117 5th Street North</span>\n                        <span data-tagid=\"79\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"80\" class=\"description\">\n                    <p data-tagid=\"81\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"82\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"83\" id=\"item_7\">\n                <div data-tagid=\"84\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"85\">\n                </div>\n                <div data-tagid=\"86\" class=\"title\">\n                    <h3 data-tagid=\"87\">Detatched 4 Bed Family Residence</h3>\n                    <div data-tagid=\"88\" class=\"address\">\n                        <span data-tagid=\"89\">46 Chestnut Street</span>\n                        <span data-tagid=\"90\">Whitestone, NY 11357</span>\n                    </div>\n                </div>\n                <div data-tagid=\"91\" class=\"description\">\n                    <p data-tagid=\"92\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"93\">$586000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"94\" id=\"item_8\">\n                <div data-tagid=\"95\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"96\">\n                </div>\n                <div data-tagid=\"97\" class=\"title\">\n                    <h3 data-tagid=\"98\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"99\" class=\"address\">\n                        <span data-tagid=\"100\">354 Church Street South</span>\n                        <span data-tagid=\"101\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"102\" class=\"description\">\n                    <p data-tagid=\"103\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"104\">$342000.00</span>\n                </div>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"105\">Regular Structure With additonal unimportant rows</h2>\n    <div data-tagid=\"106\" id=\"regular-with-unneeded-rows\">\n        <div data-tagid=\"107\" class=\"items\">\n            <div data-tagid=\"108\" id=\"item_0\">\n                <div data-tagid=\"109\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"110\">\n                </div>\n                <div data-tagid=\"111\" class=\"title\">\n                    <h3 data-tagid=\"112\">Luxury 3 Bed Apartment</h3>\n                    <div data-tagid=\"113\" class=\"address\">\n                        <span data-tagid=\"114\">978 Charles Street</span>\n                        <span data-tagid=\"115\">Barrington, IL 60010</span>\n                    </div>\n                </div>\n                <div data-tagid=\"116\" class=\"description\">\n                    <p data-tagid=\"117\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"118\">$215000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"119\" class=\"spacer-row\"><span data-tagid=\"120\">-</span></div>\n            <div data-tagid=\"121\" id=\"item_1\">\n                <div data-tagid=\"122\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"123\">\n                </div>\n                <div data-tagid=\"124\" class=\"title\">\n                    <h3 data-tagid=\"125\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"126\" class=\"address\">\n                        <span data-tagid=\"127\">609 Prospect Street</span>\n                        <span data-tagid=\"128\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"129\" class=\"description\">\n                    <p data-tagid=\"130\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"131\">$353000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"132\" class=\"spacer-row\"><span data-tagid=\"133\">-</span></div>\n            <div data-tagid=\"134\" id=\"item_2\">\n                <div data-tagid=\"135\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"136\">\n                </div>\n                <div data-tagid=\"137\" class=\"title\">\n                    <h3 data-tagid=\"138\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"139\" class=\"address\">\n                        <span data-tagid=\"140\">312 Route 29</span>\n                        <span data-tagid=\"141\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"142\" class=\"description\">\n                    <p data-tagid=\"143\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"144\">$300000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"145\" class=\"spacer-row\"><span data-tagid=\"146\">-</span></div>\n            <div data-tagid=\"147\" id=\"item_3\">\n                <div data-tagid=\"148\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"149\">\n                </div>\n                <div data-tagid=\"150\" class=\"title\">\n                    <h3 data-tagid=\"151\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"152\" class=\"address\">\n                        <span data-tagid=\"153\">799 Briarwood Drive</span>\n                        <span data-tagid=\"154\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"155\" class=\"description\">\n                    <p data-tagid=\"156\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"157\">$428000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"158\" class=\"spacer-row\"><span data-tagid=\"159\">-</span></div>\n            <div data-tagid=\"160\" id=\"item_4\">\n                <div data-tagid=\"161\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"162\">\n                </div>\n                <div data-tagid=\"163\" class=\"title\">\n                    <h3 data-tagid=\"164\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"165\" class=\"address\">\n                        <span data-tagid=\"166\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"167\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"168\" class=\"description\">\n                    <p data-tagid=\"169\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"170\">$364000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"171\" class=\"spacer-row\"><span data-tagid=\"172\">-</span></div>\n            <div data-tagid=\"173\" id=\"item_5\">\n                <div data-tagid=\"174\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"175\">\n                </div>\n                <div data-tagid=\"176\" class=\"title\">\n                    <h3 data-tagid=\"177\">Renovated 3 Bed Terrace</h3>\n                    <div data-tagid=\"178\" class=\"address\">\n                        <span data-tagid=\"179\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"180\">Aliquippa, PA 15001</span>\n                    </div>\n                </div>\n                <div data-tagid=\"181\" class=\"description\">\n                    <p data-tagid=\"182\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"183\">$418000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"184\" class=\"spacer-row\"><span data-tagid=\"185\">-</span></div>\n            <div data-tagid=\"186\" id=\"item_6\">\n                <div data-tagid=\"187\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"188\">\n                </div>\n                <div data-tagid=\"189\" class=\"title\">\n                    <h3 data-tagid=\"190\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"191\" class=\"address\">\n                        <span data-tagid=\"192\">117 5th Street North</span>\n                        <span data-tagid=\"193\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"194\" class=\"description\">\n                    <p data-tagid=\"195\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"196\">$552000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"197\" class=\"spacer-row\"><span data-tagid=\"198\">-</span></div>\n            <div data-tagid=\"199\" id=\"item_7\">\n                <div data-tagid=\"200\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"201\">\n                </div>\n                <div data-tagid=\"202\" class=\"title\">\n                    <h3 data-tagid=\"203\">Detatched 4 Bed Family Residence</h3>\n                    <div data-tagid=\"204\" class=\"address\">\n                        <span data-tagid=\"205\">46 Chestnut Street</span>\n                        <span data-tagid=\"206\">Whitestone, NY 11357</span>\n                    </div>\n                </div>\n                <div data-tagid=\"207\" class=\"description\">\n                    <p data-tagid=\"208\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"209\">$586000.00</span>\n                </div>\n            </div>\n            <div data-tagid=\"210\" class=\"spacer-row\"><span data-tagid=\"211\">-</span></div>\n            <div data-tagid=\"212\" id=\"item_8\">\n                <div data-tagid=\"213\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"214\">\n                </div>\n                <div data-tagid=\"215\" class=\"title\">\n                    <h3 data-tagid=\"216\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"217\" class=\"address\">\n                        <span data-tagid=\"218\">354 Church Street South</span>\n                        <span data-tagid=\"219\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"220\" class=\"description\">\n                    <p data-tagid=\"221\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"222\">$342000.00</span>\n                </div>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"223\">Nested Rows and Columns</h2>\n    <div data-tagid=\"224\" id=\"nested-rows-and-columns\">\n        <div data-tagid=\"225\" class=\"items\">\n            <div data-tagid=\"226\" class=\"row\">\n                <div data-tagid=\"227\" id=\"item_0\">\n                    <div data-tagid=\"228\" class=\"image\">\n                        <img src=\"/images/0.jpg\" data-tagid=\"229\">\n                    </div>\n                    <div data-tagid=\"230\" class=\"title\">\n                        <h3 data-tagid=\"231\">Luxury 3 Bed Apartment</h3>\n                        <div data-tagid=\"232\" class=\"address\">\n                            <span data-tagid=\"233\">978 Charles Street</span>\n                            <span data-tagid=\"234\">Barrington, IL 60010</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"235\" class=\"description\">\n                        <p data-tagid=\"236\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"237\">$215000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"238\" id=\"item_1\">\n                    <div data-tagid=\"239\" class=\"image\">\n                        <img src=\"/images/1.jpg\" data-tagid=\"240\">\n                    </div>\n                    <div data-tagid=\"241\" class=\"title\">\n                        <h3 data-tagid=\"242\">Upscale Retirement Condo</h3>\n                        <div data-tagid=\"243\" class=\"address\">\n                            <span data-tagid=\"244\">609 Prospect Street</span>\n                            <span data-tagid=\"245\">Rochester, NY 14606</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"246\" class=\"description\">\n                        <p data-tagid=\"247\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"248\">$353000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"249\" id=\"item_2\">\n                    <div data-tagid=\"250\" class=\"image\">\n                        <img src=\"/images/2.jpg\" data-tagid=\"251\">\n                    </div>\n                    <div data-tagid=\"252\" class=\"title\">\n                        <h3 data-tagid=\"253\">Prestigious 3 Bed Home</h3>\n                        <div data-tagid=\"254\" class=\"address\">\n                            <span data-tagid=\"255\">312 Route 29</span>\n                            <span data-tagid=\"256\">Hampton, VA 23666</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"257\" class=\"description\">\n                        <p data-tagid=\"258\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"259\">$300000.00</span>\n                    </div>\n                </div>\n\n            </div>\n\n            <div data-tagid=\"260\" class=\"row\">\n                <div data-tagid=\"261\" id=\"item_3\">\n                    <div data-tagid=\"262\" class=\"image\">\n                        <img src=\"/images/3.jpg\" data-tagid=\"263\">\n                    </div>\n                    <div data-tagid=\"264\" class=\"title\">\n                        <h3 data-tagid=\"265\">Unique 5 Bed fixer upper</h3>\n                        <div data-tagid=\"266\" class=\"address\">\n                            <span data-tagid=\"267\">799 Briarwood Drive</span>\n                            <span data-tagid=\"268\">Shirley, NY 11967</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"269\" class=\"description\">\n                        <p data-tagid=\"270\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"271\">$428000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"272\" id=\"item_4\">\n                    <div data-tagid=\"273\" class=\"image\">\n                        <img src=\"/images/4.jpg\" data-tagid=\"274\">\n                    </div>\n                    <div data-tagid=\"275\" class=\"title\">\n                        <h3 data-tagid=\"276\">Splendid 2 Bed Duplex</h3>\n                        <div data-tagid=\"277\" class=\"address\">\n                            <span data-tagid=\"278\">102 Tanglewood Drive</span>\n                            <span data-tagid=\"279\">East Meadow, NY 11554</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"280\" class=\"description\">\n                        <p data-tagid=\"281\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"282\">$364000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"283\" id=\"item_5\">\n                    <div data-tagid=\"284\" class=\"image\">\n                        <img src=\"/images/5.jpg\" data-tagid=\"285\">\n                    </div>\n                    <div data-tagid=\"286\" class=\"title\">\n                        <h3 data-tagid=\"287\">Renovated 3 Bed Terrace</h3>\n                        <div data-tagid=\"288\" class=\"address\">\n                            <span data-tagid=\"289\">237 Myrtle Avenue</span>\n                            <span data-tagid=\"290\">Aliquippa, PA 15001</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"291\" class=\"description\">\n                        <p data-tagid=\"292\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"293\">$418000.00</span>\n                    </div>\n                </div>\n\n            </div>\n\n            <div data-tagid=\"294\" class=\"row\">\n                <div data-tagid=\"295\" id=\"item_6\">\n                    <div data-tagid=\"296\" class=\"image\">\n                        <img src=\"/images/6.jpg\" data-tagid=\"297\">\n                    </div>\n                    <div data-tagid=\"298\" class=\"title\">\n                        <h3 data-tagid=\"299\">Bright Studio Apartment</h3>\n                        <div data-tagid=\"300\" class=\"address\">\n                            <span data-tagid=\"301\">117 5th Street North</span>\n                            <span data-tagid=\"302\">Copperas Cove, TX 76522</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"303\" class=\"description\">\n                        <p data-tagid=\"304\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"305\">$552000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"306\" id=\"item_7\">\n                    <div data-tagid=\"307\" class=\"image\">\n                        <img src=\"/images/7.jpg\" data-tagid=\"308\">\n                    </div>\n                    <div data-tagid=\"309\" class=\"title\">\n                        <h3 data-tagid=\"310\">Detatched 4 Bed Family Residence</h3>\n                        <div data-tagid=\"311\" class=\"address\">\n                            <span data-tagid=\"312\">46 Chestnut Street</span>\n                            <span data-tagid=\"313\">Whitestone, NY 11357</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"314\" class=\"description\">\n                        <p data-tagid=\"315\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"316\">$586000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"317\" id=\"item_8\">\n                    <div data-tagid=\"318\" class=\"image\">\n                        <img src=\"/images/8.jpg\" data-tagid=\"319\">\n                    </div>\n                    <div data-tagid=\"320\" class=\"title\">\n                        <h3 data-tagid=\"321\">Superbly designed modern Townhouse</h3>\n                        <div data-tagid=\"322\" class=\"address\">\n                            <span data-tagid=\"323\">354 Church Street South</span>\n                            <span data-tagid=\"324\">Eastlake, OH 44095</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"325\" class=\"description\">\n                        <p data-tagid=\"326\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"327\">$342000.00</span>\n                    </div>\n                </div>\n\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"328\">Items with Some Fields Missing</h2>\n    <div data-tagid=\"329\" id=\"items-with-some-fields-missing\">\n        <div data-tagid=\"330\" class=\"items\">\n            <div data-tagid=\"331\" id=\"item_0\">\n                <div data-tagid=\"332\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"333\">\n                </div>\n                <div data-tagid=\"334\" class=\"title\">\n                    <h3 data-tagid=\"335\">Luxury 3 Bed Apartment</h3>\n                </div>\n                <div data-tagid=\"336\" class=\"description\">\n                    <p data-tagid=\"337\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"338\">$215000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"339\" id=\"item_1\">\n                <div data-tagid=\"340\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"341\">\n                </div>\n                <div data-tagid=\"342\" class=\"title\">\n                    <h3 data-tagid=\"343\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"344\" class=\"address\">\n                        <span data-tagid=\"345\">609 Prospect Street</span>\n                        <span data-tagid=\"346\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"347\" class=\"description\">\n                    <p data-tagid=\"348\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"349\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"350\" id=\"item_2\">\n                <div data-tagid=\"351\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"352\">\n                </div>\n                <div data-tagid=\"353\" class=\"title\">\n                    <h3 data-tagid=\"354\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"355\" class=\"address\">\n                        <span data-tagid=\"356\">312 Route 29</span>\n                        <span data-tagid=\"357\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"358\" class=\"description\">\n                    <p data-tagid=\"359\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"360\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"361\" id=\"item_3\">\n                <div data-tagid=\"362\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"363\">\n                </div>\n                <div data-tagid=\"364\" class=\"title\">\n                    <h3 data-tagid=\"365\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"366\" class=\"address\">\n                        <span data-tagid=\"367\">799 Briarwood Drive</span>\n                        <span data-tagid=\"368\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"369\" class=\"description\">\n                    <p data-tagid=\"370\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"371\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"372\" id=\"item_4\">\n                <div data-tagid=\"373\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"374\">\n                </div>\n                <div data-tagid=\"375\" class=\"title\">\n                    <h3 data-tagid=\"376\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"377\" class=\"address\">\n                        <span data-tagid=\"378\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"379\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"380\" class=\"description\">\n                    <p data-tagid=\"381\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"382\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"383\" id=\"item_5\">\n                <div data-tagid=\"384\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"385\">\n                </div>\n                <div data-tagid=\"386\" class=\"title\">\n                    <h3 data-tagid=\"387\">Renovated 3 Bed Terrace</h3>\n                </div>\n                <div data-tagid=\"388\" class=\"description\">\n                    <p data-tagid=\"389\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"390\">$418000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"391\" id=\"item_6\">\n                <div data-tagid=\"392\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"393\">\n                </div>\n                <div data-tagid=\"394\" class=\"title\">\n                    <h3 data-tagid=\"395\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"396\" class=\"address\">\n                        <span data-tagid=\"397\">117 5th Street North</span>\n                        <span data-tagid=\"398\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"399\" class=\"description\">\n                    <p data-tagid=\"400\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"401\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"402\" id=\"item_7\">\n                <div data-tagid=\"403\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"404\">\n                </div>\n                <div data-tagid=\"405\" class=\"title\">\n                    <h3 data-tagid=\"406\">Detatched 4 Bed Family Residence</h3>\n                </div>\n                <div data-tagid=\"407\" class=\"description\">\n                    <p data-tagid=\"408\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"409\">$586000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"410\" id=\"item_8\">\n                <div data-tagid=\"411\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"412\">\n                </div>\n                <div data-tagid=\"413\" class=\"title\">\n                    <h3 data-tagid=\"414\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"415\" class=\"address\">\n                        <span data-tagid=\"416\">354 Church Street South</span>\n                        <span data-tagid=\"417\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"418\" class=\"description\">\n                    <p data-tagid=\"419\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"420\">$342000.00</span>\n                </div>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"421\">Items Spread across siblings</h2>\n    <div data-tagid=\"422\" id=\"items-spread-across-siblings\">\n        <div data-tagid=\"423\" class=\"items\">\n            <div data-tagid=\"424\" id=\"item_0\">\n                <div data-tagid=\"425\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"426\">\n                </div>\n                <div data-tagid=\"427\" class=\"title\">\n                    <h3 data-tagid=\"428\">Luxury 3 Bed Apartment</h3>\n                    <div data-tagid=\"429\" class=\"address\">\n                        <span data-tagid=\"430\">978 Charles Street</span>\n                        <span data-tagid=\"431\">Barrington, IL 60010</span>\n                    </div>\n                </div>\n                <div data-tagid=\"432\" class=\"description\">\n                    <p data-tagid=\"433\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"434\">$215000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"435\" class=\"views\">\n                <span data-tagid=\"436\">Number of views:</span>\n                <span data-tagid=\"437\">0</span>\n            </div>\n\n            <div data-tagid=\"438\" id=\"item_1\">\n                <div data-tagid=\"439\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"440\">\n                </div>\n                <div data-tagid=\"441\" class=\"title\">\n                    <h3 data-tagid=\"442\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"443\" class=\"address\">\n                        <span data-tagid=\"444\">609 Prospect Street</span>\n                        <span data-tagid=\"445\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"446\" class=\"description\">\n                    <p data-tagid=\"447\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"448\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"449\" class=\"views\">\n                <span data-tagid=\"450\">Number of views:</span>\n                <span data-tagid=\"451\">1</span>\n            </div>\n\n            <div data-tagid=\"452\" id=\"item_2\">\n                <div data-tagid=\"453\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"454\">\n                </div>\n                <div data-tagid=\"455\" class=\"title\">\n                    <h3 data-tagid=\"456\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"457\" class=\"address\">\n                        <span data-tagid=\"458\">312 Route 29</span>\n                        <span data-tagid=\"459\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"460\" class=\"description\">\n                    <p data-tagid=\"461\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"462\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"463\" class=\"views\">\n                <span data-tagid=\"464\">Number of views:</span>\n                <span data-tagid=\"465\">2</span>\n            </div>\n\n            <div data-tagid=\"466\" id=\"item_3\">\n                <div data-tagid=\"467\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"468\">\n                </div>\n                <div data-tagid=\"469\" class=\"title\">\n                    <h3 data-tagid=\"470\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"471\" class=\"address\">\n                        <span data-tagid=\"472\">799 Briarwood Drive</span>\n                        <span data-tagid=\"473\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"474\" class=\"description\">\n                    <p data-tagid=\"475\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"476\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"477\" class=\"views\">\n                <span data-tagid=\"478\">Number of views:</span>\n                <span data-tagid=\"479\">3</span>\n            </div>\n\n            <div data-tagid=\"480\" id=\"item_4\">\n                <div data-tagid=\"481\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"482\">\n                </div>\n                <div data-tagid=\"483\" class=\"title\">\n                    <h3 data-tagid=\"484\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"485\" class=\"address\">\n                        <span data-tagid=\"486\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"487\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"488\" class=\"description\">\n                    <p data-tagid=\"489\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"490\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"491\" class=\"views\">\n                <span data-tagid=\"492\">Number of views:</span>\n                <span data-tagid=\"493\">4</span>\n            </div>\n\n            <div data-tagid=\"494\" id=\"item_5\">\n                <div data-tagid=\"495\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"496\">\n                </div>\n                <div data-tagid=\"497\" class=\"title\">\n                    <h3 data-tagid=\"498\">Renovated 3 Bed Terrace</h3>\n                    <div data-tagid=\"499\" class=\"address\">\n                        <span data-tagid=\"500\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"501\">Aliquippa, PA 15001</span>\n                    </div>\n                </div>\n                <div data-tagid=\"502\" class=\"description\">\n                    <p data-tagid=\"503\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"504\">$418000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"505\" class=\"views\">\n                <span data-tagid=\"506\">Number of views:</span>\n                <span data-tagid=\"507\">5</span>\n            </div>\n\n            <div data-tagid=\"508\" id=\"item_6\">\n                <div data-tagid=\"509\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"510\">\n                </div>\n                <div data-tagid=\"511\" class=\"title\">\n                    <h3 data-tagid=\"512\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"513\" class=\"address\">\n                        <span data-tagid=\"514\">117 5th Street North</span>\n                        <span data-tagid=\"515\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"516\" class=\"description\">\n                    <p data-tagid=\"517\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"518\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"519\" class=\"views\">\n                <span data-tagid=\"520\">Number of views:</span>\n                <span data-tagid=\"521\">6</span>\n            </div>\n\n            <div data-tagid=\"522\" id=\"item_7\">\n                <div data-tagid=\"523\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"524\">\n                </div>\n                <div data-tagid=\"525\" class=\"title\">\n                    <h3 data-tagid=\"526\">Detatched 4 Bed Family Residence</h3>\n                    <div data-tagid=\"527\" class=\"address\">\n                        <span data-tagid=\"528\">46 Chestnut Street</span>\n                        <span data-tagid=\"529\">Whitestone, NY 11357</span>\n                    </div>\n                </div>\n                <div data-tagid=\"530\" class=\"description\">\n                    <p data-tagid=\"531\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"532\">$586000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"533\" class=\"views\">\n                <span data-tagid=\"534\">Number of views:</span>\n                <span data-tagid=\"535\">7</span>\n            </div>\n\n            <div data-tagid=\"536\" id=\"item_8\">\n                <div data-tagid=\"537\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"538\">\n                </div>\n                <div data-tagid=\"539\" class=\"title\">\n                    <h3 data-tagid=\"540\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"541\" class=\"address\">\n                        <span data-tagid=\"542\">354 Church Street South</span>\n                        <span data-tagid=\"543\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"544\" class=\"description\">\n                    <p data-tagid=\"545\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"546\">$342000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"547\" class=\"views\">\n                <span data-tagid=\"548\">Number of views:</span>\n                <span data-tagid=\"549\">8</span>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"550\">Items spread across siblings with some fields missing</h2>\n    <div data-tagid=\"551\" id=\"items-across-siblings-fields-missing\">\n        <div data-tagid=\"552\" class=\"items\">\n            <div data-tagid=\"553\" id=\"item_0\">\n                <div data-tagid=\"554\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"555\">\n                </div>\n                <div data-tagid=\"556\" class=\"title\">\n                    <h3 data-tagid=\"557\">Luxury 3 Bed Apartment</h3>\n                </div>\n                <div data-tagid=\"558\" class=\"description\">\n                    <p data-tagid=\"559\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"560\">$215000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"561\" class=\"views\">\n                <span data-tagid=\"562\">Number of views:</span>\n                <span data-tagid=\"563\">0</span>\n            </div>\n\n            <div data-tagid=\"564\" id=\"item_1\">\n                <div data-tagid=\"565\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"566\">\n                </div>\n                <div data-tagid=\"567\" class=\"title\">\n                    <h3 data-tagid=\"568\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"569\" class=\"address\">\n                        <span data-tagid=\"570\">609 Prospect Street</span>\n                        <span data-tagid=\"571\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"572\" class=\"description\">\n                    <p data-tagid=\"573\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"574\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"575\" class=\"views\">\n                <span data-tagid=\"576\">Number of views:</span>\n                <span data-tagid=\"577\">1</span>\n            </div>\n\n            <div data-tagid=\"578\" id=\"item_2\">\n                <div data-tagid=\"579\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"580\">\n                </div>\n                <div data-tagid=\"581\" class=\"title\">\n                    <h3 data-tagid=\"582\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"583\" class=\"address\">\n                        <span data-tagid=\"584\">312 Route 29</span>\n                        <span data-tagid=\"585\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"586\" class=\"description\">\n                    <p data-tagid=\"587\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"588\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"589\" class=\"views\">\n                <span data-tagid=\"590\">Number of views:</span>\n                <span data-tagid=\"591\">2</span>\n            </div>\n\n            <div data-tagid=\"592\" id=\"item_3\">\n                <div data-tagid=\"593\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"594\">\n                </div>\n                <div data-tagid=\"595\" class=\"title\">\n                    <h3 data-tagid=\"596\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"597\" class=\"address\">\n                        <span data-tagid=\"598\">799 Briarwood Drive</span>\n                        <span data-tagid=\"599\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"600\" class=\"description\">\n                    <p data-tagid=\"601\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"602\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"603\" class=\"views\">\n                <span data-tagid=\"604\">Number of views:</span>\n                <span data-tagid=\"605\">3</span>\n            </div>\n\n            <div data-tagid=\"606\" id=\"item_4\">\n                <div data-tagid=\"607\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"608\">\n                </div>\n                <div data-tagid=\"609\" class=\"title\">\n                    <h3 data-tagid=\"610\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"611\" class=\"address\">\n                        <span data-tagid=\"612\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"613\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"614\" class=\"description\">\n                    <p data-tagid=\"615\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"616\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"617\" class=\"views\">\n                <span data-tagid=\"618\">Number of views:</span>\n                <span data-tagid=\"619\">4</span>\n            </div>\n\n            <div data-tagid=\"620\" id=\"item_5\">\n                <div data-tagid=\"621\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"622\">\n                </div>\n                <div data-tagid=\"623\" class=\"title\">\n                    <h3 data-tagid=\"624\">Renovated 3 Bed Terrace</h3>\n                </div>\n                <div data-tagid=\"625\" class=\"description\">\n                    <p data-tagid=\"626\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"627\">$418000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"628\" class=\"views\">\n                <span data-tagid=\"629\">Number of views:</span>\n                <span data-tagid=\"630\">5</span>\n            </div>\n\n            <div data-tagid=\"631\" id=\"item_6\">\n                <div data-tagid=\"632\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"633\">\n                </div>\n                <div data-tagid=\"634\" class=\"title\">\n                    <h3 data-tagid=\"635\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"636\" class=\"address\">\n                        <span data-tagid=\"637\">117 5th Street North</span>\n                        <span data-tagid=\"638\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"639\" class=\"description\">\n                    <p data-tagid=\"640\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"641\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"642\" class=\"views\">\n                <span data-tagid=\"643\">Number of views:</span>\n                <span data-tagid=\"644\">6</span>\n            </div>\n\n            <div data-tagid=\"645\" id=\"item_7\">\n                <div data-tagid=\"646\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"647\">\n                </div>\n                <div data-tagid=\"648\" class=\"title\">\n                    <h3 data-tagid=\"649\">Detatched 4 Bed Family Residence</h3>\n                </div>\n                <div data-tagid=\"650\" class=\"description\">\n                    <p data-tagid=\"651\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"652\">$586000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"653\" class=\"views\">\n                <span data-tagid=\"654\">Number of views:</span>\n                <span data-tagid=\"655\">7</span>\n            </div>\n\n            <div data-tagid=\"656\" id=\"item_8\">\n                <div data-tagid=\"657\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"658\">\n                </div>\n                <div data-tagid=\"659\" class=\"title\">\n                    <h3 data-tagid=\"660\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"661\" class=\"address\">\n                        <span data-tagid=\"662\">354 Church Street South</span>\n                        <span data-tagid=\"663\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"664\" class=\"description\">\n                    <p data-tagid=\"665\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"666\">$342000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"667\" class=\"views\">\n                <span data-tagid=\"668\">Number of views:</span>\n                <span data-tagid=\"669\">8</span>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"670\">Items with Some Field Missing at End</h2>\n    <div data-tagid=\"671\" id=\"items-with-field-missing-at-end\">\n        <div data-tagid=\"672\" class=\"items\">\n            <div data-tagid=\"673\" id=\"item_0\">\n                <div data-tagid=\"674\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"675\">\n                </div>\n                <div data-tagid=\"676\" class=\"title\">\n                    <h3 data-tagid=\"677\">Luxury 3 Bed Apartment</h3>\n                    <div data-tagid=\"678\" class=\"address\">\n                        <span data-tagid=\"679\">978 Charles Street</span>\n                        <span data-tagid=\"680\">Barrington, IL 60010</span>\n                    </div>\n                </div>\n                <div data-tagid=\"681\" class=\"description\">\n                    <p data-tagid=\"682\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                </div>\n            </div>\n\n            <div data-tagid=\"683\" id=\"item_1\">\n                <div data-tagid=\"684\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"685\">\n                </div>\n                <div data-tagid=\"686\" class=\"title\">\n                    <h3 data-tagid=\"687\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"688\" class=\"address\">\n                        <span data-tagid=\"689\">609 Prospect Street</span>\n                        <span data-tagid=\"690\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"691\" class=\"description\">\n                    <p data-tagid=\"692\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"693\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"694\" id=\"item_2\">\n                <div data-tagid=\"695\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"696\">\n                </div>\n                <div data-tagid=\"697\" class=\"title\">\n                    <h3 data-tagid=\"698\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"699\" class=\"address\">\n                        <span data-tagid=\"700\">312 Route 29</span>\n                        <span data-tagid=\"701\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"702\" class=\"description\">\n                    <p data-tagid=\"703\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"704\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"705\" id=\"item_3\">\n                <div data-tagid=\"706\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"707\">\n                </div>\n                <div data-tagid=\"708\" class=\"title\">\n                    <h3 data-tagid=\"709\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"710\" class=\"address\">\n                        <span data-tagid=\"711\">799 Briarwood Drive</span>\n                        <span data-tagid=\"712\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"713\" class=\"description\">\n                    <p data-tagid=\"714\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"715\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"716\" id=\"item_4\">\n                <div data-tagid=\"717\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"718\">\n                </div>\n                <div data-tagid=\"719\" class=\"title\">\n                    <h3 data-tagid=\"720\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"721\" class=\"address\">\n                        <span data-tagid=\"722\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"723\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"724\" class=\"description\">\n                    <p data-tagid=\"725\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"726\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"727\" id=\"item_5\">\n                <div data-tagid=\"728\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"729\">\n                </div>\n                <div data-tagid=\"730\" class=\"title\">\n                    <h3 data-tagid=\"731\">Renovated 3 Bed Terrace</h3>\n                    <div data-tagid=\"732\" class=\"address\">\n                        <span data-tagid=\"733\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"734\">Aliquippa, PA 15001</span>\n                    </div>\n                </div>\n                <div data-tagid=\"735\" class=\"description\">\n                    <p data-tagid=\"736\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                </div>\n            </div>\n\n            <div data-tagid=\"737\" id=\"item_6\">\n                <div data-tagid=\"738\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"739\">\n                </div>\n                <div data-tagid=\"740\" class=\"title\">\n                    <h3 data-tagid=\"741\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"742\" class=\"address\">\n                        <span data-tagid=\"743\">117 5th Street North</span>\n                        <span data-tagid=\"744\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"745\" class=\"description\">\n                    <p data-tagid=\"746\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"747\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"748\" id=\"item_7\">\n                <div data-tagid=\"749\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"750\">\n                </div>\n                <div data-tagid=\"751\" class=\"title\">\n                    <h3 data-tagid=\"752\">Detatched 4 Bed Family Residence</h3>\n                    <div data-tagid=\"753\" class=\"address\">\n                        <span data-tagid=\"754\">46 Chestnut Street</span>\n                        <span data-tagid=\"755\">Whitestone, NY 11357</span>\n                    </div>\n                </div>\n                <div data-tagid=\"756\" class=\"description\">\n                    <p data-tagid=\"757\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                </div>\n            </div>\n\n            <div data-tagid=\"758\" id=\"item_8\">\n                <div data-tagid=\"759\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"760\">\n                </div>\n                <div data-tagid=\"761\" class=\"title\">\n                    <h3 data-tagid=\"762\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"763\" class=\"address\">\n                        <span data-tagid=\"764\">354 Church Street South</span>\n                        <span data-tagid=\"765\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"766\" class=\"description\">\n                    <p data-tagid=\"767\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"768\">$342000.00</span>\n                </div>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"769\">Nested items with internal siblings</h2>\n    <div data-tagid=\"770\" id=\"nested-items-with-siblings\">\n        <div data-tagid=\"771\" class=\"items\">\n            <div data-tagid=\"772\" class=\"row\">\n                <div data-tagid=\"773\" id=\"item_0\">\n                    <div data-tagid=\"774\" class=\"image\">\n                        <img src=\"/images/0.jpg\" data-tagid=\"775\">\n                    </div>\n                    <div data-tagid=\"776\" class=\"title\">\n                        <h3 data-tagid=\"777\">Luxury 3 Bed Apartment</h3>\n                        <div data-tagid=\"778\" class=\"address\">\n                            <span data-tagid=\"779\">978 Charles Street</span>\n                            <span data-tagid=\"780\">Barrington, IL 60010</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"781\" class=\"description\">\n                        <p data-tagid=\"782\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"783\">$215000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"784\" class=\"views\">\n                    <span data-tagid=\"785\">Number of views:</span>\n                    <span data-tagid=\"786\">0</span>\n                </div>\n\n                <div data-tagid=\"787\" id=\"item_1\">\n                    <div data-tagid=\"788\" class=\"image\">\n                        <img src=\"/images/1.jpg\" data-tagid=\"789\">\n                    </div>\n                    <div data-tagid=\"790\" class=\"title\">\n                        <h3 data-tagid=\"791\">Upscale Retirement Condo</h3>\n                        <div data-tagid=\"792\" class=\"address\">\n                            <span data-tagid=\"793\">609 Prospect Street</span>\n                            <span data-tagid=\"794\">Rochester, NY 14606</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"795\" class=\"description\">\n                        <p data-tagid=\"796\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"797\">$353000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"798\" class=\"views\">\n                    <span data-tagid=\"799\">Number of views:</span>\n                    <span data-tagid=\"800\">1</span>\n                </div>\n\n                <div data-tagid=\"801\" id=\"item_2\">\n                    <div data-tagid=\"802\" class=\"image\">\n                        <img src=\"/images/2.jpg\" data-tagid=\"803\">\n                    </div>\n                    <div data-tagid=\"804\" class=\"title\">\n                        <h3 data-tagid=\"805\">Prestigious 3 Bed Home</h3>\n                        <div data-tagid=\"806\" class=\"address\">\n                            <span data-tagid=\"807\">312 Route 29</span>\n                            <span data-tagid=\"808\">Hampton, VA 23666</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"809\" class=\"description\">\n                        <p data-tagid=\"810\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"811\">$300000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"812\" class=\"views\">\n                    <span data-tagid=\"813\">Number of views:</span>\n                    <span data-tagid=\"814\">2</span>\n                </div>\n\n            </div>\n\n            <div data-tagid=\"815\" class=\"row\">\n                <div data-tagid=\"816\" id=\"item_3\">\n                    <div data-tagid=\"817\" class=\"image\">\n                        <img src=\"/images/3.jpg\" data-tagid=\"818\">\n                    </div>\n                    <div data-tagid=\"819\" class=\"title\">\n                        <h3 data-tagid=\"820\">Unique 5 Bed fixer upper</h3>\n                        <div data-tagid=\"821\" class=\"address\">\n                            <span data-tagid=\"822\">799 Briarwood Drive</span>\n                            <span data-tagid=\"823\">Shirley, NY 11967</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"824\" class=\"description\">\n                        <p data-tagid=\"825\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"826\">$428000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"827\" class=\"views\">\n                    <span data-tagid=\"828\">Number of views:</span>\n                    <span data-tagid=\"829\">0</span>\n                </div>\n\n                <div data-tagid=\"830\" id=\"item_4\">\n                    <div data-tagid=\"831\" class=\"image\">\n                        <img src=\"/images/4.jpg\" data-tagid=\"832\">\n                    </div>\n                    <div data-tagid=\"833\" class=\"title\">\n                        <h3 data-tagid=\"834\">Splendid 2 Bed Duplex</h3>\n                        <div data-tagid=\"835\" class=\"address\">\n                            <span data-tagid=\"836\">102 Tanglewood Drive</span>\n                            <span data-tagid=\"837\">East Meadow, NY 11554</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"838\" class=\"description\">\n                        <p data-tagid=\"839\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"840\">$364000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"841\" class=\"views\">\n                    <span data-tagid=\"842\">Number of views:</span>\n                    <span data-tagid=\"843\">1</span>\n                </div>\n\n                <div data-tagid=\"844\" id=\"item_5\">\n                    <div data-tagid=\"845\" class=\"image\">\n                        <img src=\"/images/5.jpg\" data-tagid=\"846\">\n                    </div>\n                    <div data-tagid=\"847\" class=\"title\">\n                        <h3 data-tagid=\"848\">Renovated 3 Bed Terrace</h3>\n                        <div data-tagid=\"849\" class=\"address\">\n                            <span data-tagid=\"850\">237 Myrtle Avenue</span>\n                            <span data-tagid=\"851\">Aliquippa, PA 15001</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"852\" class=\"description\">\n                        <p data-tagid=\"853\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"854\">$418000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"855\" class=\"views\">\n                    <span data-tagid=\"856\">Number of views:</span>\n                    <span data-tagid=\"857\">2</span>\n                </div>\n\n            </div>\n\n            <div data-tagid=\"858\" class=\"row\">\n                <div data-tagid=\"859\" id=\"item_6\">\n                    <div data-tagid=\"860\" class=\"image\">\n                        <img src=\"/images/6.jpg\" data-tagid=\"861\">\n                    </div>\n                    <div data-tagid=\"862\" class=\"title\">\n                        <h3 data-tagid=\"863\">Bright Studio Apartment</h3>\n                        <div data-tagid=\"864\" class=\"address\">\n                            <span data-tagid=\"865\">117 5th Street North</span>\n                            <span data-tagid=\"866\">Copperas Cove, TX 76522</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"867\" class=\"description\">\n                        <p data-tagid=\"868\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"869\">$552000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"870\" class=\"views\">\n                    <span data-tagid=\"871\">Number of views:</span>\n                    <span data-tagid=\"872\">0</span>\n                </div>\n\n                <div data-tagid=\"873\" id=\"item_7\">\n                    <div data-tagid=\"874\" class=\"image\">\n                        <img src=\"/images/7.jpg\" data-tagid=\"875\">\n                    </div>\n                    <div data-tagid=\"876\" class=\"title\">\n                        <h3 data-tagid=\"877\">Detatched 4 Bed Family Residence</h3>\n                        <div data-tagid=\"878\" class=\"address\">\n                            <span data-tagid=\"879\">46 Chestnut Street</span>\n                            <span data-tagid=\"880\">Whitestone, NY 11357</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"881\" class=\"description\">\n                        <p data-tagid=\"882\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"883\">$586000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"884\" class=\"views\">\n                    <span data-tagid=\"885\">Number of views:</span>\n                    <span data-tagid=\"886\">1</span>\n                </div>\n\n                <div data-tagid=\"887\" id=\"item_8\">\n                    <div data-tagid=\"888\" class=\"image\">\n                        <img src=\"/images/8.jpg\" data-tagid=\"889\">\n                    </div>\n                    <div data-tagid=\"890\" class=\"title\">\n                        <h3 data-tagid=\"891\">Superbly designed modern Townhouse</h3>\n                        <div data-tagid=\"892\" class=\"address\">\n                            <span data-tagid=\"893\">354 Church Street South</span>\n                            <span data-tagid=\"894\">Eastlake, OH 44095</span>\n                        </div>\n                    </div>\n                    <div data-tagid=\"895\" class=\"description\">\n                        <p data-tagid=\"896\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                        <span data-tagid=\"897\">$342000.00</span>\n                    </div>\n                </div>\n\n                <div data-tagid=\"898\" class=\"views\">\n                    <span data-tagid=\"899\">Number of views:</span>\n                    <span data-tagid=\"900\">2</span>\n                </div>\n\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"901\">Items spread across multiple siblings</h2>\n    <div data-tagid=\"902\" id=\"multiple-siblings\">\n        <div data-tagid=\"903\" class=\"items\">\n            <div data-tagid=\"904\" id=\"item_0\">\n                <div data-tagid=\"905\" class=\"image\">\n                    <img src=\"/images/0.jpg\" data-tagid=\"906\">\n                </div>\n                <div data-tagid=\"907\" class=\"title\">\n                    <h3 data-tagid=\"908\">Luxury 3 Bed Apartment</h3>\n                    <div data-tagid=\"909\" class=\"address\">\n                        <span data-tagid=\"910\">978 Charles Street</span>\n                        <span data-tagid=\"911\">Barrington, IL 60010</span>\n                    </div>\n                </div>\n                <div data-tagid=\"912\" class=\"description\">\n                    <p data-tagid=\"913\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"914\">$215000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"915\" class=\"views\">\n                <span data-tagid=\"916\">Number of views:</span>\n                <span data-tagid=\"917\">0</span>\n            </div>\n\n            <div data-tagid=\"918\" class=\"info\">\n                <span data-tagid=\"919\">Posted on:</span>\n                <span data-tagid=\"920\">January 06 2016</span>\n            </div>\n\n            <div data-tagid=\"921\" id=\"item_1\">\n                <div data-tagid=\"922\" class=\"image\">\n                    <img src=\"/images/1.jpg\" data-tagid=\"923\">\n                </div>\n                <div data-tagid=\"924\" class=\"title\">\n                    <h3 data-tagid=\"925\">Upscale Retirement Condo</h3>\n                    <div data-tagid=\"926\" class=\"address\">\n                        <span data-tagid=\"927\">609 Prospect Street</span>\n                        <span data-tagid=\"928\">Rochester, NY 14606</span>\n                    </div>\n                </div>\n                <div data-tagid=\"929\" class=\"description\">\n                    <p data-tagid=\"930\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"931\">$353000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"932\" class=\"views\">\n                <span data-tagid=\"933\">Number of views:</span>\n                <span data-tagid=\"934\">1</span>\n            </div>\n\n            <div data-tagid=\"935\" class=\"info\">\n                <span data-tagid=\"936\">Posted on:</span>\n                <span data-tagid=\"937\">January 02 2016</span>\n            </div>\n\n            <div data-tagid=\"938\" id=\"item_2\">\n                <div data-tagid=\"939\" class=\"image\">\n                    <img src=\"/images/2.jpg\" data-tagid=\"940\">\n                </div>\n                <div data-tagid=\"941\" class=\"title\">\n                    <h3 data-tagid=\"942\">Prestigious 3 Bed Home</h3>\n                    <div data-tagid=\"943\" class=\"address\">\n                        <span data-tagid=\"944\">312 Route 29</span>\n                        <span data-tagid=\"945\">Hampton, VA 23666</span>\n                    </div>\n                </div>\n                <div data-tagid=\"946\" class=\"description\">\n                    <p data-tagid=\"947\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"948\">$300000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"949\" class=\"views\">\n                <span data-tagid=\"950\">Number of views:</span>\n                <span data-tagid=\"951\">2</span>\n            </div>\n\n            <div data-tagid=\"952\" class=\"info\">\n                <span data-tagid=\"953\">Posted on:</span>\n                <span data-tagid=\"954\">December 22 2015</span>\n            </div>\n\n            <div data-tagid=\"955\" id=\"item_3\">\n                <div data-tagid=\"956\" class=\"image\">\n                    <img src=\"/images/3.jpg\" data-tagid=\"957\">\n                </div>\n                <div data-tagid=\"958\" class=\"title\">\n                    <h3 data-tagid=\"959\">Unique 5 Bed fixer upper</h3>\n                    <div data-tagid=\"960\" class=\"address\">\n                        <span data-tagid=\"961\">799 Briarwood Drive</span>\n                        <span data-tagid=\"962\">Shirley, NY 11967</span>\n                    </div>\n                </div>\n                <div data-tagid=\"963\" class=\"description\">\n                    <p data-tagid=\"964\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"965\">$428000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"966\" class=\"views\">\n                <span data-tagid=\"967\">Number of views:</span>\n                <span data-tagid=\"968\">3</span>\n            </div>\n\n            <div data-tagid=\"969\" class=\"info\">\n                <span data-tagid=\"970\">Posted on:</span>\n                <span data-tagid=\"971\">December 15 2015</span>\n            </div>\n\n            <div data-tagid=\"972\" id=\"item_4\">\n                <div data-tagid=\"973\" class=\"image\">\n                    <img src=\"/images/4.jpg\" data-tagid=\"974\">\n                </div>\n                <div data-tagid=\"975\" class=\"title\">\n                    <h3 data-tagid=\"976\">Splendid 2 Bed Duplex</h3>\n                    <div data-tagid=\"977\" class=\"address\">\n                        <span data-tagid=\"978\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"979\">East Meadow, NY 11554</span>\n                    </div>\n                </div>\n                <div data-tagid=\"980\" class=\"description\">\n                    <p data-tagid=\"981\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"982\">$364000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"983\" class=\"views\">\n                <span data-tagid=\"984\">Number of views:</span>\n                <span data-tagid=\"985\">4</span>\n            </div>\n\n            <div data-tagid=\"986\" class=\"info\">\n                <span data-tagid=\"987\">Posted on:</span>\n                <span data-tagid=\"988\">December 12 2015</span>\n            </div>\n\n            <div data-tagid=\"989\" id=\"item_5\">\n                <div data-tagid=\"990\" class=\"image\">\n                    <img src=\"/images/5.jpg\" data-tagid=\"991\">\n                </div>\n                <div data-tagid=\"992\" class=\"title\">\n                    <h3 data-tagid=\"993\">Renovated 3 Bed Terrace</h3>\n                    <div data-tagid=\"994\" class=\"address\">\n                        <span data-tagid=\"995\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"996\">Aliquippa, PA 15001</span>\n                    </div>\n                </div>\n                <div data-tagid=\"997\" class=\"description\">\n                    <p data-tagid=\"998\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"999\">$418000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"1000\" class=\"views\">\n                <span data-tagid=\"1001\">Number of views:</span>\n                <span data-tagid=\"1002\">5</span>\n            </div>\n\n            <div data-tagid=\"1003\" class=\"info\">\n                <span data-tagid=\"1004\">Posted on:</span>\n                <span data-tagid=\"1005\">January 03 2016</span>\n            </div>\n\n            <div data-tagid=\"1006\" id=\"item_6\">\n                <div data-tagid=\"1007\" class=\"image\">\n                    <img src=\"/images/6.jpg\" data-tagid=\"1008\">\n                </div>\n                <div data-tagid=\"1009\" class=\"title\">\n                    <h3 data-tagid=\"1010\">Bright Studio Apartment</h3>\n                    <div data-tagid=\"1011\" class=\"address\">\n                        <span data-tagid=\"1012\">117 5th Street North</span>\n                        <span data-tagid=\"1013\">Copperas Cove, TX 76522</span>\n                    </div>\n                </div>\n                <div data-tagid=\"1014\" class=\"description\">\n                    <p data-tagid=\"1015\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"1016\">$552000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"1017\" class=\"views\">\n                <span data-tagid=\"1018\">Number of views:</span>\n                <span data-tagid=\"1019\">6</span>\n            </div>\n\n            <div data-tagid=\"1020\" class=\"info\">\n                <span data-tagid=\"1021\">Posted on:</span>\n                <span data-tagid=\"1022\">December 23 2015</span>\n            </div>\n\n            <div data-tagid=\"1023\" id=\"item_7\">\n                <div data-tagid=\"1024\" class=\"image\">\n                    <img src=\"/images/7.jpg\" data-tagid=\"1025\">\n                </div>\n                <div data-tagid=\"1026\" class=\"title\">\n                    <h3 data-tagid=\"1027\">Detatched 4 Bed Family Residence</h3>\n                    <div data-tagid=\"1028\" class=\"address\">\n                        <span data-tagid=\"1029\">46 Chestnut Street</span>\n                        <span data-tagid=\"1030\">Whitestone, NY 11357</span>\n                    </div>\n                </div>\n                <div data-tagid=\"1031\" class=\"description\">\n                    <p data-tagid=\"1032\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"1033\">$586000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"1034\" class=\"views\">\n                <span data-tagid=\"1035\">Number of views:</span>\n                <span data-tagid=\"1036\">7</span>\n            </div>\n\n            <div data-tagid=\"1037\" class=\"info\">\n                <span data-tagid=\"1038\">Posted on:</span>\n                <span data-tagid=\"1039\">January 03 2016</span>\n            </div>\n\n            <div data-tagid=\"1040\" id=\"item_8\">\n                <div data-tagid=\"1041\" class=\"image\">\n                    <img src=\"/images/8.jpg\" data-tagid=\"1042\">\n                </div>\n                <div data-tagid=\"1043\" class=\"title\">\n                    <h3 data-tagid=\"1044\">Superbly designed modern Townhouse</h3>\n                    <div data-tagid=\"1045\" class=\"address\">\n                        <span data-tagid=\"1046\">354 Church Street South</span>\n                        <span data-tagid=\"1047\">Eastlake, OH 44095</span>\n                    </div>\n                </div>\n                <div data-tagid=\"1048\" class=\"description\">\n                    <p data-tagid=\"1049\">\n                         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                    </p>\n                    <span data-tagid=\"1050\">$342000.00</span>\n                </div>\n            </div>\n\n            <div data-tagid=\"1051\" class=\"views\">\n                <span data-tagid=\"1052\">Number of views:</span>\n                <span data-tagid=\"1053\">8</span>\n            </div>\n\n            <div data-tagid=\"1054\" class=\"info\">\n                <span data-tagid=\"1055\">Posted on:</span>\n                <span data-tagid=\"1056\">January 05 2016</span>\n            </div>\n\n        </div>\n    </div>\n    <h2 data-tagid=\"1057\">Transposed Table Structure</h2>\n    <div data-tagid=\"1058\" id=\"transposed-table-structure\">\n        <div data-tagid=\"1059\">\n            <table data-tagid=\"1060\" class=\"table\">\n                <tr data-tagid=\"1061\">\n                    <td data-tagid=\"1062\" class=\"image\">\n                        <img src=\"/images/0.jpg\" data-tagid=\"1063\">\n                    </td>\n                    <td data-tagid=\"1064\" class=\"image\">\n                        <img src=\"/images/1.jpg\" data-tagid=\"1065\">\n                    </td>\n                    <td data-tagid=\"1066\" class=\"image\">\n                        <img src=\"/images/2.jpg\" data-tagid=\"1067\">\n                    </td>\n                    <td data-tagid=\"1068\" class=\"image\">\n                        <img src=\"/images/3.jpg\" data-tagid=\"1069\">\n                    </td>\n                    <td data-tagid=\"1070\" class=\"image\">\n                        <img src=\"/images/4.jpg\" data-tagid=\"1071\">\n                    </td>\n                    <td data-tagid=\"1072\" class=\"image\">\n                        <img src=\"/images/5.jpg\" data-tagid=\"1073\">\n                    </td>\n                    <td data-tagid=\"1074\" class=\"image\">\n                        <img src=\"/images/6.jpg\" data-tagid=\"1075\">\n                    </td>\n                    <td data-tagid=\"1076\" class=\"image\">\n                        <img src=\"/images/7.jpg\" data-tagid=\"1077\">\n                    </td>\n                    <td data-tagid=\"1078\" class=\"image\">\n                        <img src=\"/images/8.jpg\" data-tagid=\"1079\">\n                    </td>\n                </tr>\n                <tr data-tagid=\"1080\">\n                    <td data-tagid=\"1081\" class=\"title\">\n                        <h3 data-tagid=\"1082\">Luxury 3 Bed Apartment</h3>\n                    </td>\n                    <td data-tagid=\"1083\" class=\"title\">\n                        <h3 data-tagid=\"1084\">Upscale Retirement Condo</h3>\n                    </td>\n                    <td data-tagid=\"1085\" class=\"title\">\n                        <h3 data-tagid=\"1086\">Prestigious 3 Bed Home</h3>\n                    </td>\n                    <td data-tagid=\"1087\" class=\"title\">\n                        <h3 data-tagid=\"1088\">Unique 5 Bed fixer upper</h3>\n                    </td>\n                    <td data-tagid=\"1089\" class=\"title\">\n                        <h3 data-tagid=\"1090\">Splendid 2 Bed Duplex</h3>\n                    </td>\n                    <td data-tagid=\"1091\" class=\"title\">\n                        <h3 data-tagid=\"1092\">Renovated 3 Bed Terrace</h3>\n                    </td>\n                    <td data-tagid=\"1093\" class=\"title\">\n                        <h3 data-tagid=\"1094\">Bright Studio Apartment</h3>\n                    </td>\n                    <td data-tagid=\"1095\" class=\"title\">\n                        <h3 data-tagid=\"1096\">Detatched 4 Bed Family Residence</h3>\n                    </td>\n                    <td data-tagid=\"1097\" class=\"title\">\n                        <h3 data-tagid=\"1098\">Superbly designed modern Townhouse</h3>\n                    </td>\n                </tr>\n                <tr data-tagid=\"1099\">\n                    <td data-tagid=\"1100\" class=\"address\">\n                        <span data-tagid=\"1101\">978 Charles Street</span>\n                        <span data-tagid=\"1102\">Barrington, IL 60010</span>\n                    </td>\n                    <td data-tagid=\"1103\" class=\"address\">\n                        <span data-tagid=\"1104\">609 Prospect Street</span>\n                        <span data-tagid=\"1105\">Rochester, NY 14606</span>\n                    </td>\n                    <td data-tagid=\"1106\" class=\"address\">\n                        <span data-tagid=\"1107\">312 Route 29</span>\n                        <span data-tagid=\"1108\">Hampton, VA 23666</span>\n                    </td>\n                    <td data-tagid=\"1109\" class=\"address\">\n                        <span data-tagid=\"1110\">799 Briarwood Drive</span>\n                        <span data-tagid=\"1111\">Shirley, NY 11967</span>\n                    </td>\n                    <td data-tagid=\"1112\" class=\"address\">\n                        <span data-tagid=\"1113\">102 Tanglewood Drive</span>\n                        <span data-tagid=\"1114\">East Meadow, NY 11554</span>\n                    </td>\n                    <td data-tagid=\"1115\" class=\"address\">\n                        <span data-tagid=\"1116\">237 Myrtle Avenue</span>\n                        <span data-tagid=\"1117\">Aliquippa, PA 15001</span>\n                    </td>\n                    <td data-tagid=\"1118\" class=\"address\">\n                        <span data-tagid=\"1119\">117 5th Street North</span>\n                        <span data-tagid=\"1120\">Copperas Cove, TX 76522</span>\n                    </td>\n                    <td data-tagid=\"1121\" class=\"address\">\n                        <span data-tagid=\"1122\">46 Chestnut Street</span>\n                        <span data-tagid=\"1123\">Whitestone, NY 11357</span>\n                    </td>\n                    <td data-tagid=\"1124\" class=\"address\">\n                        <span data-tagid=\"1125\">354 Church Street South</span>\n                        <span data-tagid=\"1126\">Eastlake, OH 44095</span>\n                    </td>\n                </tr>\n                <tr data-tagid=\"1127\">\n                    <td data-tagid=\"1128\" class=\"description\">\n                        <p data-tagid=\"1129\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1130\" class=\"description\">\n                        <p data-tagid=\"1131\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1132\" class=\"description\">\n                        <p data-tagid=\"1133\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1134\" class=\"description\">\n                        <p data-tagid=\"1135\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1136\" class=\"description\">\n                        <p data-tagid=\"1137\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1138\" class=\"description\">\n                        <p data-tagid=\"1139\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1140\" class=\"description\">\n                        <p data-tagid=\"1141\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1142\" class=\"description\">\n                        <p data-tagid=\"1143\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                    <td data-tagid=\"1144\" class=\"description\">\n                        <p data-tagid=\"1145\">\n                             Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit amet congue.\n                        </p>\n                    </td>\n                </tr>\n                <tr data-tagid=\"1146\">\n                    <td data-tagid=\"1147\" class=\"description\">\n                        <span data-tagid=\"1148\">$215000.00</span>\n                    </td>\n                    <td data-tagid=\"1149\" class=\"description\">\n                        <span data-tagid=\"1150\">$353000.00</span>\n                    </td>\n                    <td data-tagid=\"1151\" class=\"description\">\n                        <span data-tagid=\"1152\">$300000.00</span>\n                    </td>\n                    <td data-tagid=\"1153\" class=\"description\">\n                        <span data-tagid=\"1154\">$428000.00</span>\n                    </td>\n                    <td data-tagid=\"1155\" class=\"description\">\n                        <span data-tagid=\"1156\">$364000.00</span>\n                    </td>\n                    <td data-tagid=\"1157\" class=\"description\">\n                        <span data-tagid=\"1158\">$418000.00</span>\n                    </td>\n                    <td data-tagid=\"1159\" class=\"description\">\n                        <span data-tagid=\"1160\">$552000.00</span>\n                    </td>\n                    <td data-tagid=\"1161\" class=\"description\">\n                        <span data-tagid=\"1162\">$586000.00</span>\n                    </td>\n                    <td data-tagid=\"1163\" class=\"description\">\n                        <span data-tagid=\"1164\">$342000.00</span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</body>\n</html>\n`;\nvar doc = Ember.$('<html/>').html(testPage).get(0);\n"
  },
  {
    "path": "portiaui/tests/unit/utils/start-urls-test.js",
    "content": "import { multiplicityFragment } from '../../../utils/start-urls';\nimport { module, test } from 'qunit';\n\nmodule('Unit | Utility | startUrls');\n\ntest('is correct for a one number range', function(assert) {\n  const fragment = { type: 'range', value: '0-0' };\n  assert.equal(multiplicityFragment(fragment), 1);\n});\n\ntest('is correct for a large range', function(assert) {\n  const fragment = { type: 'range', value: '0-99' };\n  assert.equal(multiplicityFragment(fragment), 100);\n});\n\ntest('is correct for a non-zero starting range', function(assert) {\n  const fragment = { type: 'range', value: '51-100' };\n  assert.equal(multiplicityFragment(fragment), 50);\n});\n"
  },
  {
    "path": "portiaui/tests/unit/validators/range-test.js",
    "content": "import validateRange from '../../../validators/range';\nimport { module, test } from 'qunit';\n\nmodule('Unit | Validators | validateRange');\n\ntest('it tests valid ranges', function(assert) {\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, '1-4'), true);\n    assert.equal(validator(key, 'a-c'), true);\n    assert.equal(validator(key, '5-5'), true);\n    assert.equal(validator(key, 'z-z'), true);\n});\n\ntest('it tests all digits or all letters', function(assert) {\n    const error = 'A range must not mix numbers and letters.';\n\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, '1-a'), error);\n    assert.equal(validator(key, 'w-3'), error);\n});\n\ntest('it tests completeness', function(assert) {\n    const error = 'A range must have both a start and an end.';\n\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, '-1'), error);\n    assert.equal(validator(key, '1-'), error);\n    assert.equal(validator(key, '-'), error);\n    assert.equal(validator(key, ''), error);\n});\n\ntest('it tests completeness', function(assert) {\n    const error = 'A range must be increasing.';\n\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, '10-5'), `${error} Try swapping to 5-10.`);\n    assert.equal(validator(key, 'b-a'), `${error} Try swapping to a-b.`);\n});\n\ntest('it disallows multiple letters', function(assert) {\n    const error = 'A range must have only single letters.';\n\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, 'a-bc'), error);\n    assert.equal(validator(key, 'asd-z'), error);\n    assert.equal(validator(key, 'aas-zie'), error);\n});\n\ntest('it disallows mixed cases', function(assert) {\n    const error = 'A range cannot mix lower and upper case.';\n\n    const key = 'value';\n    const validator = validateRange();\n\n    assert.equal(validator(key, 'a-C'), error);\n    assert.equal(validator(key, 'D-q'), error);\n});\n"
  },
  {
    "path": "portiaui/tests/unit/validators/whitespace-test.js",
    "content": "import validateWhitespace from '../../../validators/whitespace';\nimport { module, test } from 'qunit';\n\nmodule('Unit | Validators | validateWhitespace');\n\ntest('it should be true without whitespace', function(assert) {\n    const key = 'value';\n    const validator = validateWhitespace();\n\n    assert.equal(validator(key, 'withoutspace'), true);\n});\n\ntest('it should not have whitespace', function(assert) {\n    const error = 'Should not have whitespace';\n    const key = 'value';\n    const validator = validateWhitespace();\n\n    assert.equal(validator(key, 'with space'), error);\n    assert.equal(validator(key, 'endspace '), error);\n    assert.equal(validator(key, ' startspace'), error);\n});\n"
  },
  {
    "path": "portiaui/vendor/.gitkeep",
    "content": ""
  },
  {
    "path": "portiaui/vendor/modernizr.js",
    "content": "/*!\n * modernizr v3.3.1\n * Build https://modernizr.com/download?-atobbtoa-classlist-cssanimations-csscalc-csspointerevents-csstransforms-csstransitions-cssvhunit-datauri-eventlistener-flexbox-generatedcontent-json-localstorage-nthchild-opacity-placeholder-postmessage-queryselector-requestanimationframe-svg-svgasimg-websockets-dontmin\n *\n * Copyright (c)\n *  Faruk Ates\n *  Paul Irish\n *  Alex Sexton\n *  Ryan Seddon\n *  Patrick Kettner\n *  Stu Cox\n *  Richard Herrera\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `<html>` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(window, document, undefined){\n  var tests = [];\n  \n\n  /**\n   *\n   * ModernizrProto is the constructor for Modernizr\n   *\n   * @class\n   * @access public\n   */\n\n  var ModernizrProto = {\n    // The current version, dummy\n    _version: '3.3.1',\n\n    // Any settings that don't work as separate modules\n    // can go in here as configuration.\n    _config: {\n      'classPrefix': '',\n      'enableClasses': true,\n      'enableJSClass': true,\n      'usePrefixes': true\n    },\n\n    // Queue of tests\n    _q: [],\n\n    // Stub these for people who are listening\n    on: function(test, cb) {\n      // I don't really think people should do this, but we can\n      // safe guard it a bit.\n      // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n      // This is in case people listen to synchronous tests. I would leave it out,\n      // but the code to *disallow* sync tests in the real version of this\n      // function is actually larger than this.\n      var self = this;\n      setTimeout(function() {\n        cb(self[test]);\n      }, 0);\n    },\n\n    addTest: function(name, fn, options) {\n      tests.push({name: name, fn: fn, options: options});\n    },\n\n    addAsyncTest: function(fn) {\n      tests.push({name: null, fn: fn});\n    }\n  };\n\n  \n\n  // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n  var Modernizr = function() {};\n  Modernizr.prototype = ModernizrProto;\n\n  // Leak modernizr globally when you `require` it rather than force it here.\n  // Overwrite name so constructor name is nicer :D\n  Modernizr = new Modernizr();\n\n  \n/*!\n{\n  \"name\": \"Event Listener\",\n  \"property\": \"eventlistener\",\n  \"authors\": [\"Andrew Betts (@triblondon)\"],\n  \"notes\": [{\n    \"name\": \"W3C Spec\",\n    \"href\": \"https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Registration-interfaces\"\n  }],\n  \"polyfills\": [\"eventlistener\"]\n}\n!*/\n/* DOC\nDetects native support for addEventListener\n*/\n\n  Modernizr.addTest('eventlistener', 'addEventListener' in window);\n\n/*!\n{\n  \"name\": \"JSON\",\n  \"property\": \"json\",\n  \"caniuse\": \"json\",\n  \"notes\": [{\n    \"name\": \"MDN documentation\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Glossary/JSON\"\n  }],\n  \"polyfills\": [\"json2\"]\n}\n!*/\n/* DOC\nDetects native support for JSON handling functions.\n*/\n\n  // this will also succeed if you've loaded the JSON2.js polyfill ahead of time\n  //   ... but that should be obvious. :)\n\n  Modernizr.addTest('json', 'JSON' in window && 'parse' in JSON && 'stringify' in JSON);\n\n/*!\n{\n  \"name\": \"postMessage\",\n  \"property\": \"postmessage\",\n  \"caniuse\": \"x-doc-messaging\",\n  \"notes\": [{\n    \"name\": \"W3C Spec\",\n    \"href\": \"http://www.w3.org/TR/html5/comms.html#posting-messages\"\n  }],\n  \"polyfills\": [\"easyxdm\", \"postmessage-jquery\"]\n}\n!*/\n/* DOC\nDetects support for the `window.postMessage` protocol for cross-document messaging.\n*/\n\n  Modernizr.addTest('postmessage', 'postMessage' in window);\n\n/*!\n{\n  \"name\": \"QuerySelector\",\n  \"property\": \"queryselector\",\n  \"caniuse\": \"queryselector\",\n  \"tags\": [\"queryselector\"],\n  \"authors\": [\"Andrew Betts (@triblondon)\"],\n  \"notes\": [{\n    \"name\" : \"W3C Selectors reference\",\n    \"href\": \"https://www.w3.org/TR/selectors-api/#queryselectorall\"\n  }],\n  \"polyfills\": [\"css-selector-engine\"]\n}\n!*/\n/* DOC\nDetects support for querySelector.\n*/\n\n  Modernizr.addTest('queryselector', 'querySelector' in document && 'querySelectorAll' in document);\n\n/*!\n{\n  \"name\": \"SVG\",\n  \"property\": \"svg\",\n  \"caniuse\": \"svg\",\n  \"tags\": [\"svg\"],\n  \"authors\": [\"Erik Dahlstrom\"],\n  \"polyfills\": [\n    \"svgweb\",\n    \"raphael\",\n    \"amplesdk\",\n    \"canvg\",\n    \"svg-boilerplate\",\n    \"sie\",\n    \"dojogfx\",\n    \"fabricjs\"\n  ]\n}\n!*/\n/* DOC\nDetects support for SVG in `<embed>` or `<object>` elements.\n*/\n\n  Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);\n\n/*!\n{\n  \"name\": \"WebSockets Support\",\n  \"property\": \"websockets\",\n  \"authors\": [\"Phread [fearphage]\", \"Mike Sherov [mikesherov]\", \"Burak Yigit Kaya [BYK]\"],\n  \"caniuse\": \"websockets\",\n  \"tags\": [\"html5\"],\n  \"warnings\": [\n    \"This test will reject any old version of WebSockets even if it is not prefixed such as in Safari 5.1\"\n  ],\n  \"notes\": [{\n    \"name\": \"CLOSING State and Spec\",\n    \"href\": \"https://www.w3.org/TR/websockets/#the-websocket-interface\"\n  }],\n  \"polyfills\": [\n    \"sockjs\",\n    \"socketio\",\n    \"kaazing-websocket-gateway\",\n    \"websocketjs\",\n    \"atmosphere\",\n    \"graceful-websocket\",\n    \"portal\",\n    \"datachannel\"\n  ]\n}\n!*/\n\n  var supports = false;\n  try {\n    supports = 'WebSocket' in window && window.WebSocket.CLOSING === 2;\n  } catch (e) {}\n  Modernizr.addTest('websockets', supports);\n\n/*!\n{\n  \"name\": \"Local Storage\",\n  \"property\": \"localstorage\",\n  \"caniuse\": \"namevalue-storage\",\n  \"tags\": [\"storage\"],\n  \"knownBugs\": [],\n  \"notes\": [],\n  \"warnings\": [],\n  \"polyfills\": [\n    \"joshuabell-polyfill\",\n    \"cupcake\",\n    \"storagepolyfill\",\n    \"amplifyjs\",\n    \"yui-cacheoffline\"\n  ]\n}\n!*/\n\n  // In FF4, if disabled, window.localStorage should === null.\n\n  // Normally, we could not test that directly and need to do a\n  //   `('localStorage' in window) && ` test first because otherwise Firefox will\n  //   throw bugzil.la/365772 if cookies are disabled\n\n  // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem\n  // will throw the exception:\n  //   QUOTA_EXCEEDED_ERROR DOM Exception 22.\n  // Peculiarly, getItem and removeItem calls do not throw.\n\n  // Because we are forced to try/catch this, we'll go aggressive.\n\n  // Just FWIW: IE8 Compat mode supports these features completely:\n  //   www.quirksmode.org/dom/html5.html\n  // But IE8 doesn't support either with local files\n\n  Modernizr.addTest('localstorage', function() {\n    var mod = 'modernizr';\n    try {\n      localStorage.setItem(mod, mod);\n      localStorage.removeItem(mod);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  });\n\n\n  var classes = [];\n  \n\n  /**\n   * is returns a boolean if the typeof an obj is exactly type.\n   *\n   * @access private\n   * @function is\n   * @param {*} obj - A thing we want to check the type of\n   * @param {string} type - A string to compare the typeof against\n   * @returns {boolean}\n   */\n\n  function is(obj, type) {\n    return typeof obj === type;\n  }\n  ;\n\n  /**\n   * Run through all tests and detect their support in the current UA.\n   *\n   * @access private\n   */\n\n  function testRunner() {\n    var featureNames;\n    var feature;\n    var aliasIdx;\n    var result;\n    var nameIdx;\n    var featureName;\n    var featureNameSplit;\n\n    for (var featureIdx in tests) {\n      if (tests.hasOwnProperty(featureIdx)) {\n        featureNames = [];\n        feature = tests[featureIdx];\n        // run the test, throw the return value into the Modernizr,\n        // then based on that boolean, define an appropriate className\n        // and push it into an array of classes we'll join later.\n        //\n        // If there is no name, it's an 'async' test that is run,\n        // but not directly added to the object. That should\n        // be done with a post-run addTest call.\n        if (feature.name) {\n          featureNames.push(feature.name.toLowerCase());\n\n          if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n            // Add all the aliases into the names list\n            for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n              featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n            }\n          }\n        }\n\n        // Run the test, or use the raw value if it's not a function\n        result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n\n        // Set each of the names on the Modernizr object\n        for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n          featureName = featureNames[nameIdx];\n          // Support dot properties as sub tests. We don't do checking to make sure\n          // that the implied parent tests have been added. You must call them in\n          // order (either in the test, or make the parent test a dependency).\n          //\n          // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n          // hashtag famous last words\n          featureNameSplit = featureName.split('.');\n\n          if (featureNameSplit.length === 1) {\n            Modernizr[featureNameSplit[0]] = result;\n          } else {\n            // cast to a Boolean, if not one already\n            /* jshint -W053 */\n            if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n              Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n            }\n\n            Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n          }\n\n          classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n        }\n      }\n    }\n  }\n  ;\n\n  /**\n   * List of property values to set for css tests. See ticket #21\n   * http://git.io/vUGl4\n   *\n   * @memberof Modernizr\n   * @name Modernizr._prefixes\n   * @optionName Modernizr._prefixes\n   * @optionProp prefixes\n   * @access public\n   * @example\n   *\n   * Modernizr._prefixes is the internal list of prefixes that we test against\n   * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply\n   * an array of kebab-case vendor prefixes you can use within your code.\n   *\n   * Some common use cases include\n   *\n   * Generating all possible prefixed version of a CSS property\n   * ```js\n   * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');\n   *\n   * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'\n   * ```\n   *\n   * Generating all possible prefixed version of a CSS value\n   * ```js\n   * rule = 'display:' +  Modernizr._prefixes.join('flex; display:') + 'flex';\n   *\n   * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'\n   * ```\n   */\n\n  // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test\n  // values in feature detects to continue to work\n  var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);\n\n  // expose these for the plugin API. Look in the source for how to join() them against your input\n  ModernizrProto._prefixes = prefixes;\n\n  \n\n  /**\n   * docElement is a convenience wrapper to grab the root element of the document\n   *\n   * @access private\n   * @returns {HTMLElement|SVGElement} The root element of the document\n   */\n\n  var docElement = document.documentElement;\n  \n/*!\n{\n  \"name\": \"classList\",\n  \"caniuse\": \"classlist\",\n  \"property\": \"classlist\",\n  \"tags\": [\"dom\"],\n  \"builderAliases\": [\"dataview_api\"],\n  \"notes\": [{\n    \"name\": \"MDN Docs\",\n    \"href\": \"https://developer.mozilla.org/en/DOM/element.classList\"\n  }]\n}\n!*/\n\n  Modernizr.addTest('classlist', 'classList' in docElement);\n\n\n  /**\n   * cssToDOM takes a kebab-case string and converts it to camelCase\n   * e.g. box-sizing -> boxSizing\n   *\n   * @access private\n   * @function cssToDOM\n   * @param {string} name - String name of kebab-case prop we want to convert\n   * @returns {string} The camelCase version of the supplied name\n   */\n\n  function cssToDOM(name) {\n    return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n      return m1 + m2.toUpperCase();\n    }).replace(/^-/, '');\n  }\n  ;\n\n  /**\n   * A convenience helper to check if the document we are running in is an SVG document\n   *\n   * @access private\n   * @returns {boolean}\n   */\n\n  var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n  \n\n  /**\n   * createElement is a convenience wrapper around document.createElement. Since we\n   * use createElement all over the place, this allows for (slightly) smaller code\n   * as well as abstracting away issues with creating elements in contexts other than\n   * HTML documents (e.g. SVG documents).\n   *\n   * @access private\n   * @function createElement\n   * @returns {HTMLElement|SVGElement} An HTML or SVG element\n   */\n\n  function createElement() {\n    if (typeof document.createElement !== 'function') {\n      // This is the case in IE7, where the type of createElement is \"object\".\n      // For this reason, we cannot call apply() as Object is not a Function.\n      return document.createElement(arguments[0]);\n    } else if (isSVG) {\n      return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n    } else {\n      return document.createElement.apply(document, arguments);\n    }\n  }\n\n  ;\n/*!\n{\n  \"name\": \"CSS Calc\",\n  \"property\": \"csscalc\",\n  \"caniuse\": \"calc\",\n  \"tags\": [\"css\"],\n  \"builderAliases\": [\"css_calc\"],\n  \"authors\": [\"@calvein\"]\n}\n!*/\n/* DOC\nMethod of allowing calculated values for length units. For example:\n\n```css\n//lem {\n  width: calc(100% - 3em);\n}\n```\n*/\n\n  Modernizr.addTest('csscalc', function() {\n    var prop = 'width:';\n    var value = 'calc(10px);';\n    var el = createElement('a');\n\n    el.style.cssText = prop + prefixes.join(value + prop);\n\n    return !!el.style.length;\n  });\n\n/*!\n{\n  \"name\": \"CSS Opacity\",\n  \"caniuse\": \"css-opacity\",\n  \"property\": \"opacity\",\n  \"tags\": [\"css\"]\n}\n!*/\n\n  // Browsers that actually have CSS Opacity implemented have done so\n  // according to spec, which means their return values are within the\n  // range of [0.0,1.0] - including the leading zero.\n\n  Modernizr.addTest('opacity', function() {\n    var style = createElement('a').style;\n    style.cssText = prefixes.join('opacity:.55;');\n\n    // The non-literal . in this regex is intentional:\n    // German Chrome returns this value as 0,55\n    // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n    return (/^0.55$/).test(style.opacity);\n  });\n\n/*!\n{\n  \"name\": \"CSS Pointer Events\",\n  \"caniuse\": \"pointer-events\",\n  \"property\": \"csspointerevents\",\n  \"authors\": [\"ausi\"],\n  \"tags\": [\"css\"],\n  \"builderAliases\": [\"css_pointerevents\"],\n  \"notes\": [\n    {\n      \"name\": \"MDN Docs\",\n      \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events\"\n    },{\n      \"name\": \"Test Project Page\",\n      \"href\": \"https://ausi.github.com/Feature-detection-technique-for-pointer-events/\"\n    },{\n      \"name\": \"Test Project Wiki\",\n      \"href\": \"https://github.com/ausi/Feature-detection-technique-for-pointer-events/wiki\"\n    },\n    {\n      \"name\": \"Related Github Issue\",\n      \"href\": \"https://github.com/Modernizr/Modernizr/issues/80\"\n    }\n  ]\n}\n!*/\n\n  Modernizr.addTest('csspointerevents', function() {\n    var style = createElement('a').style;\n    style.cssText = 'pointer-events:auto';\n    return style.pointerEvents === 'auto';\n  });\n\n/*!\n{\n  \"name\": \"placeholder attribute\",\n  \"property\": \"placeholder\",\n  \"tags\": [\"forms\", \"attribute\"],\n  \"builderAliases\": [\"forms_placeholder\"]\n}\n!*/\n/* DOC\nTests for placeholder attribute in inputs and textareas\n*/\n\n  Modernizr.addTest('placeholder', ('placeholder' in createElement('input') && 'placeholder' in createElement('textarea')));\n\n\n  /**\n   * hasOwnProp is a shim for hasOwnProperty that is needed for Safari 2.0 support\n   *\n   * @author kangax\n   * @access private\n   * @function hasOwnProp\n   * @param {object} object - The object to check for a property\n   * @param {string} property - The property to check for\n   * @returns {boolean}\n   */\n\n  // hasOwnProperty shim by kangax needed for Safari 2.0 support\n  var hasOwnProp;\n\n  (function() {\n    var _hasOwnProperty = ({}).hasOwnProperty;\n    /* istanbul ignore else */\n    /* we have no way of testing IE 5.5 or safari 2,\n     * so just assume the else gets hit */\n    if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) {\n      hasOwnProp = function(object, property) {\n        return _hasOwnProperty.call(object, property);\n      };\n    }\n    else {\n      hasOwnProp = function(object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n      };\n    }\n  })();\n\n  \n\n  /**\n   * setClasses takes an array of class names and adds them to the root element\n   *\n   * @access private\n   * @function setClasses\n   * @param {string[]} classes - Array of class names\n   */\n\n  // Pass in an and array of class names, e.g.:\n  //  ['no-webp', 'borderradius', ...]\n  function setClasses(classes) {\n    var className = docElement.className;\n    var classPrefix = Modernizr._config.classPrefix || '';\n\n    if (isSVG) {\n      className = className.baseVal;\n    }\n\n    // Change `no-js` to `js` (independently of the `enableClasses` option)\n    // Handle classPrefix on this too\n    if (Modernizr._config.enableJSClass) {\n      var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n      className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n    }\n\n    if (Modernizr._config.enableClasses) {\n      // Add the new classes\n      className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n      isSVG ? docElement.className.baseVal = className : docElement.className = className;\n    }\n\n  }\n\n  ;\n\n\n   // _l tracks listeners for async tests, as well as tests that execute after the initial run\n  ModernizrProto._l = {};\n\n  /**\n   * Modernizr.on is a way to listen for the completion of async tests. Being\n   * asynchronous, they may not finish before your scripts run. As a result you\n   * will get a possibly false negative `undefined` value.\n   *\n   * @memberof Modernizr\n   * @name Modernizr.on\n   * @access public\n   * @function on\n   * @param {string} feature - String name of the feature detect\n   * @param {function} cb - Callback function returning a Boolean - true if feature is supported, false if not\n   * @example\n   *\n   * ```js\n   * Modernizr.on('flash', function( result ) {\n   *   if (result) {\n   *    // the browser has flash\n   *   } else {\n   *     // the browser does not have flash\n   *   }\n   * });\n   * ```\n   */\n\n  ModernizrProto.on = function(feature, cb) {\n    // Create the list of listeners if it doesn't exist\n    if (!this._l[feature]) {\n      this._l[feature] = [];\n    }\n\n    // Push this test on to the listener list\n    this._l[feature].push(cb);\n\n    // If it's already been resolved, trigger it on next tick\n    if (Modernizr.hasOwnProperty(feature)) {\n      // Next Tick\n      setTimeout(function() {\n        Modernizr._trigger(feature, Modernizr[feature]);\n      }, 0);\n    }\n  };\n\n  /**\n   * _trigger is the private function used to signal test completion and run any\n   * callbacks registered through [Modernizr.on](#modernizr-on)\n   *\n   * @memberof Modernizr\n   * @name Modernizr._trigger\n   * @access private\n   * @function _trigger\n   * @param {string} feature - string name of the feature detect\n   * @param {function|boolean} [res] - A feature detection function, or the boolean =\n   * result of a feature detection function\n   */\n\n  ModernizrProto._trigger = function(feature, res) {\n    if (!this._l[feature]) {\n      return;\n    }\n\n    var cbs = this._l[feature];\n\n    // Force async\n    setTimeout(function() {\n      var i, cb;\n      for (i = 0; i < cbs.length; i++) {\n        cb = cbs[i];\n        cb(res);\n      }\n    }, 0);\n\n    // Don't trigger these again\n    delete this._l[feature];\n  };\n\n  /**\n   * addTest allows you to define your own feature detects that are not currently\n   * included in Modernizr (under the covers it's the exact same code Modernizr\n   * uses for its own [feature detections](https://github.com/Modernizr/Modernizr/tree/master/feature-detects)). Just like the offical detects, the result\n   * will be added onto the Modernizr object, as well as an appropriate className set on\n   * the html element when configured to do so\n   *\n   * @memberof Modernizr\n   * @name Modernizr.addTest\n   * @optionName Modernizr.addTest()\n   * @optionProp addTest\n   * @access public\n   * @function addTest\n   * @param {string|object} feature - The string name of the feature detect, or an\n   * object of feature detect names and test\n   * @param {function|boolean} test - Function returning true if feature is supported,\n   * false if not. Otherwise a boolean representing the results of a feature detection\n   * @example\n   *\n   * The most common way of creating your own feature detects is by calling\n   * `Modernizr.addTest` with a string (preferably just lowercase, without any\n   * punctuation), and a function you want executed that will return a boolean result\n   *\n   * ```js\n   * Modernizr.addTest('itsTuesday', function() {\n   *  var d = new Date();\n   *  return d.getDay() === 2;\n   * });\n   * ```\n   *\n   * When the above is run, it will set Modernizr.itstuesday to `true` when it is tuesday,\n   * and to `false` every other day of the week. One thing to notice is that the names of\n   * feature detect functions are always lowercased when added to the Modernizr object. That\n   * means that `Modernizr.itsTuesday` will not exist, but `Modernizr.itstuesday` will.\n   *\n   *\n   *  Since we only look at the returned value from any feature detection function,\n   *  you do not need to actually use a function. For simple detections, just passing\n   *  in a statement that will return a boolean value works just fine.\n   *\n   * ```js\n   * Modernizr.addTest('hasJquery', 'jQuery' in window);\n   * ```\n   *\n   * Just like before, when the above runs `Modernizr.hasjquery` will be true if\n   * jQuery has been included on the page. Not using a function saves a small amount\n   * of overhead for the browser, as well as making your code much more readable.\n   *\n   * Finally, you also have the ability to pass in an object of feature names and\n   * their tests. This is handy if you want to add multiple detections in one go.\n   * The keys should always be a string, and the value can be either a boolean or\n   * function that returns a boolean.\n   *\n   * ```js\n   * var detects = {\n   *  'hasjquery': 'jQuery' in window,\n   *  'itstuesday': function() {\n   *    var d = new Date();\n   *    return d.getDay() === 2;\n   *  }\n   * }\n   *\n   * Modernizr.addTest(detects);\n   * ```\n   *\n   * There is really no difference between the first methods and this one, it is\n   * just a convenience to let you write more readable code.\n   */\n\n  function addTest(feature, test) {\n\n    if (typeof feature == 'object') {\n      for (var key in feature) {\n        if (hasOwnProp(feature, key)) {\n          addTest(key, feature[ key ]);\n        }\n      }\n    } else {\n\n      feature = feature.toLowerCase();\n      var featureNameSplit = feature.split('.');\n      var last = Modernizr[featureNameSplit[0]];\n\n      // Again, we don't check for parent test existence. Get that right, though.\n      if (featureNameSplit.length == 2) {\n        last = last[featureNameSplit[1]];\n      }\n\n      if (typeof last != 'undefined') {\n        // we're going to quit if you're trying to overwrite an existing test\n        // if we were to allow it, we'd do this:\n        //   var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n        //   docElement.className = docElement.className.replace( re, '' );\n        // but, no rly, stuff 'em.\n        return Modernizr;\n      }\n\n      test = typeof test == 'function' ? test() : test;\n\n      // Set the value (this is the magic, right here).\n      if (featureNameSplit.length == 1) {\n        Modernizr[featureNameSplit[0]] = test;\n      } else {\n        // cast to a Boolean, if not one already\n        /* jshint -W053 */\n        if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n          Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n        }\n\n        Modernizr[featureNameSplit[0]][featureNameSplit[1]] = test;\n      }\n\n      // Set a single class (either `feature` or `no-feature`)\n      /* jshint -W041 */\n      setClasses([(!!test && test != false ? '' : 'no-') + featureNameSplit.join('-')]);\n      /* jshint +W041 */\n\n      // Trigger the event\n      Modernizr._trigger(feature, test);\n    }\n\n    return Modernizr; // allow chaining.\n  }\n\n  // After all the tests are run, add self to the Modernizr prototype\n  Modernizr._q.push(function() {\n    ModernizrProto.addTest = addTest;\n  });\n\n  \n\n/*!\n{\n  \"name\": \"SVG as an <img> tag source\",\n  \"property\": \"svgasimg\",\n  \"caniuse\" : \"svg-img\",\n  \"tags\": [\"svg\"],\n  \"authors\": [\"Chris Coyier\"],\n  \"notes\": [{\n    \"name\": \"HTML5 Spec\",\n    \"href\": \"http://www.w3.org/TR/html5/embedded-content-0.html#the-img-element\"\n  }]\n}\n!*/\n\n\n  // Original Async test by Stu Cox\n  // https://gist.github.com/chriscoyier/8774501\n\n  // Now a Sync test based on good results here\n  // http://codepen.io/chriscoyier/pen/bADFx\n\n  // Note http://www.w3.org/TR/SVG11/feature#Image is *supposed* to represent\n  // support for the `<image>` tag in SVG, not an SVG file linked from an `<img>`\n  // tag in HTML – but it’s a heuristic which works\n  Modernizr.addTest('svgasimg', document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1'));\n\n/*!\n{\n  \"name\": \"Data URI\",\n  \"property\": \"datauri\",\n  \"caniuse\": \"datauri\",\n  \"tags\": [\"url\"],\n  \"builderAliases\": [\"url_data_uri\"],\n  \"async\": true,\n  \"notes\": [{\n    \"name\": \"Wikipedia article\",\n    \"href\": \"https://en.wikipedia.org/wiki/Data_URI_scheme\"\n  }],\n  \"warnings\": [\"Support in Internet Explorer 8 is limited to images and linked resources like CSS files, not HTML files\"]\n}\n!*/\n/* DOC\nDetects support for data URIs. Provides a subproperty to report support for data URIs over 32kb in size:\n\n```javascript\nModernizr.datauri           // true\nModernizr.datauri.over32kb  // false in IE8\n```\n*/\n\n  // https://github.com/Modernizr/Modernizr/issues/14\n  Modernizr.addAsyncTest(function() {\n    /* jshint -W053 */\n\n    // IE7 throw a mixed content warning on HTTPS for this test, so we'll\n    // just blacklist it (we know it doesn't support data URIs anyway)\n    // https://github.com/Modernizr/Modernizr/issues/362\n    if (navigator.userAgent.indexOf('MSIE 7.') !== -1) {\n      // Keep the test async\n      setTimeout(function() {\n        addTest('datauri', false);\n      }, 10);\n    }\n\n    var datauri = new Image();\n\n    datauri.onerror = function() {\n      addTest('datauri', false);\n    };\n    datauri.onload = function() {\n      if (datauri.width == 1 && datauri.height == 1) {\n        testOver32kb();\n      }\n      else {\n        addTest('datauri', false);\n      }\n    };\n\n    datauri.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n\n    // Once we have datauri, let's check to see if we can use data URIs over\n    // 32kb (IE8 can't). https://github.com/Modernizr/Modernizr/issues/321\n    function testOver32kb() {\n\n      var datauriBig = new Image();\n\n      datauriBig.onerror = function() {\n        addTest('datauri', true);\n        Modernizr.datauri = new Boolean(true);\n        Modernizr.datauri.over32kb = false;\n      };\n      datauriBig.onload = function() {\n        addTest('datauri', true);\n        Modernizr.datauri = new Boolean(true);\n        Modernizr.datauri.over32kb = (datauriBig.width == 1 && datauriBig.height == 1);\n      };\n\n      var base64str = 'R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n      while (base64str.length < 33000) {\n        base64str = '\\r\\n' + base64str;\n      }\n      datauriBig.src = 'data:image/gif;base64,' + base64str;\n    }\n\n  });\n\n\n  /**\n   * getBody returns the body of a document, or an element that can stand in for\n   * the body if a real body does not exist\n   *\n   * @access private\n   * @function getBody\n   * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n   * artificially created element that stands in for the body\n   */\n\n  function getBody() {\n    // After page load injecting a fake body doesn't work so check if body exists\n    var body = document.body;\n\n    if (!body) {\n      // Can't use the real body create a fake one.\n      body = createElement(isSVG ? 'svg' : 'body');\n      body.fake = true;\n    }\n\n    return body;\n  }\n\n  ;\n\n  /**\n   * injectElementWithStyles injects an element with style element and some CSS rules\n   *\n   * @access private\n   * @function injectElementWithStyles\n   * @param {string} rule - String representing a css rule\n   * @param {function} callback - A function that is used to test the injected element\n   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n   * @returns {boolean}\n   */\n\n  function injectElementWithStyles(rule, callback, nodes, testnames) {\n    var mod = 'modernizr';\n    var style;\n    var ret;\n    var node;\n    var docOverflow;\n    var div = createElement('div');\n    var body = getBody();\n\n    if (parseInt(nodes, 10)) {\n      // In order not to give false positives we create a node for each test\n      // This also allows the method to scale for unspecified uses\n      while (nodes--) {\n        node = createElement('div');\n        node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n        div.appendChild(node);\n      }\n    }\n\n    style = createElement('style');\n    style.type = 'text/css';\n    style.id = 's' + mod;\n\n    // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n    // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n    (!body.fake ? div : body).appendChild(style);\n    body.appendChild(div);\n\n    if (style.styleSheet) {\n      style.styleSheet.cssText = rule;\n    } else {\n      style.appendChild(document.createTextNode(rule));\n    }\n    div.id = mod;\n\n    if (body.fake) {\n      //avoid crashing IE8, if background image is used\n      body.style.background = '';\n      //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n      body.style.overflow = 'hidden';\n      docOverflow = docElement.style.overflow;\n      docElement.style.overflow = 'hidden';\n      docElement.appendChild(body);\n    }\n\n    ret = callback(div, rule);\n    // If this is done after page load we don't want to remove the body so check if body exists\n    if (body.fake) {\n      body.parentNode.removeChild(body);\n      docElement.style.overflow = docOverflow;\n      // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n      docElement.offsetHeight;\n    } else {\n      div.parentNode.removeChild(div);\n    }\n\n    return !!ret;\n\n  }\n\n  ;\n\n  /**\n   * testStyles injects an element with style element and some CSS rules\n   *\n   * @memberof Modernizr\n   * @name Modernizr.testStyles\n   * @optionName Modernizr.testStyles()\n   * @optionProp testStyles\n   * @access public\n   * @function testStyles\n   * @param {string} rule - String representing a css rule\n   * @param {function} callback - A function that is used to test the injected element\n   * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n   * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n   * @returns {boolean}\n   * @example\n   *\n   * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n   * along with (possibly multiple) DOM elements. This lets you check for features\n   * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n   *\n   * ```js\n   * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n   *   // elem is the first DOM node in the page (by default #modernizr)\n   *   // rule is the first argument you supplied - the CSS rule in string form\n   *\n   *   addTest('widthworks', elem.style.width === '9px')\n   * });\n   * ```\n   *\n   * If your test requires multiple nodes, you can include a third argument\n   * indicating how many additional div elements to include on the page. The\n   * additional nodes are injected as children of the `elem` that is returned as\n   * the first argument to the callback.\n   *\n   * ```js\n   * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n   *   document.getElementById('modernizr').style.width === '1px'; // true\n   *   document.getElementById('modernizr2').style.width === '2px'; // true\n   *   elem.firstChild === document.getElementById('modernizr2'); // true\n   * }, 1);\n   * ```\n   *\n   * By default, all of the additional elements have an ID of `modernizr[n]`, where\n   * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n   * the second additional is `#modernizr3`, etc.).\n   * If you want to have more meaningful IDs for your function, you can provide\n   * them as the fourth argument, as an array of strings\n   *\n   * ```js\n   * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n   *   elem.firstChild === document.getElementById('foo'); // true\n   *   elem.lastChild === document.getElementById('bar'); // true\n   * }, 2, ['foo', 'bar']);\n   * ```\n   *\n   */\n\n  var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n  \n/*!\n{\n  \"name\": \"CSS Generated Content\",\n  \"property\": \"generatedcontent\",\n  \"tags\": [\"css\"],\n  \"warnings\": [\"Android won't return correct height for anything below 7px #738\"],\n  \"notes\": [{\n    \"name\": \"W3C CSS Selectors Level 3 spec\",\n    \"href\": \"https://www.w3.org/TR/css3-selectors/#gen-content\"\n  },{\n    \"name\": \"MDN article on :before\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/::before\"\n  },{\n    \"name\": \"MDN article on :after\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/CSS/::before\"\n  }]\n}\n!*/\n\n  testStyles('#modernizr{font:0/0 a}#modernizr:after{content:\":)\";visibility:hidden;font:7px/1 a}', function(node) {\n    Modernizr.addTest('generatedcontent', node.offsetHeight >= 7);\n  });\n\n/*!\n{\n  \"name\": \"CSS :nth-child pseudo-selector\",\n  \"caniuse\": \"css-sel3\",\n  \"property\": \"nthchild\",\n  \"tags\": [\"css\"],\n  \"notes\": [\n    {\n      \"name\": \"Related Github Issue\",\n      \"href\": \"https://github.com/Modernizr/Modernizr/pull/685\"\n    },\n    {\n      \"name\": \"Sitepoint :nth-child documentation\",\n      \"href\": \"http://reference.sitepoint.com/css/pseudoclass-nthchild\"\n    }\n  ],\n  \"authors\": [\"@emilchristensen\"],\n  \"warnings\": [\"Known false negative in Safari 3.1 and Safari 3.2.2\"]\n}\n!*/\n/* DOC\nDetects support for the ':nth-child()' CSS pseudo-selector.\n*/\n\n  // 5 `<div>` elements with `1px` width are created.\n  // Then every other element has its `width` set to `2px`.\n  // A Javascript loop then tests if the `<div>`s have the expected width\n  // using the modulus operator.\n  testStyles('#modernizr div {width:1px} #modernizr div:nth-child(2n) {width:2px;}', function(elem) {\n    var elems = elem.getElementsByTagName('div');\n    var correctWidths = true;\n\n    for (var i = 0; i < 5; i++) {\n      correctWidths = correctWidths && elems[i].offsetWidth === i % 2 + 1;\n    }\n    Modernizr.addTest('nthchild', correctWidths);\n  }, 5);\n\n/*!\n{\n  \"name\": \"CSS vh unit\",\n  \"property\": \"cssvhunit\",\n  \"caniuse\": \"viewport-units\",\n  \"tags\": [\"css\"],\n  \"builderAliases\": [\"css_vhunit\"],\n  \"notes\": [{\n    \"name\": \"Related Modernizr Issue\",\n    \"href\": \"https://github.com/Modernizr/Modernizr/issues/572\"\n  },{\n    \"name\": \"Similar JSFiddle\",\n    \"href\": \"https://jsfiddle.net/FWeinb/etnYC/\"\n  }]\n}\n!*/\n\n  testStyles('#modernizr { height: 50vh; }', function(elem) {\n    var height = parseInt(window.innerHeight / 2, 10);\n    var compStyle = parseInt((window.getComputedStyle ?\n                              getComputedStyle(elem, null) :\n                              elem.currentStyle).height, 10);\n    Modernizr.addTest('cssvhunit', compStyle == height);\n  });\n\n\n  /**\n   * If the browsers follow the spec, then they would expose vendor-specific style as:\n   *   elem.style.WebkitBorderRadius\n   * instead of something like the following, which would be technically incorrect:\n   *   elem.style.webkitBorderRadius\n\n   * Webkit ghosts their properties in lowercase but Opera & Moz do not.\n   * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+\n   *   erik.eae.net/archives/2008/03/10/21.48.10/\n\n   * More here: github.com/Modernizr/Modernizr/issues/issue/21\n   *\n   * @access private\n   * @returns {string} The string representing the vendor-specific style properties\n   */\n\n  var omPrefixes = 'Moz O ms Webkit';\n  \n\n  var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n  ModernizrProto._cssomPrefixes = cssomPrefixes;\n  \n\n  /**\n   * atRule returns a given CSS property at-rule (eg @keyframes), possibly in\n   * some prefixed form, or false, in the case of an unsupported rule\n   *\n   * @memberof Modernizr\n   * @name Modernizr.atRule\n   * @optionName Modernizr.atRule()\n   * @optionProp atRule\n   * @access public\n   * @function atRule\n   * @param {string} prop - String name of the @-rule to test for\n   * @returns {string|boolean} The string representing the (possibly prefixed)\n   * valid version of the @-rule, or `false` when it is unsupported.\n   * @example\n   * ```js\n   *  var keyframes = Modernizr.atRule('@keyframes');\n   *\n   *  if (keyframes) {\n   *    // keyframes are supported\n   *    // could be `@-webkit-keyframes` or `@keyframes`\n   *  } else {\n   *    // keyframes === `false`\n   *  }\n   * ```\n   *\n   */\n\n  var atRule = function(prop) {\n    var length = prefixes.length;\n    var cssrule = window.CSSRule;\n    var rule;\n\n    if (typeof cssrule === 'undefined') {\n      return undefined;\n    }\n\n    if (!prop) {\n      return false;\n    }\n\n    // remove literal @ from beginning of provided property\n    prop = prop.replace(/^@/, '');\n\n    // CSSRules use underscores instead of dashes\n    rule = prop.replace(/-/g, '_').toUpperCase() + '_RULE';\n\n    if (rule in cssrule) {\n      return '@' + prop;\n    }\n\n    for (var i = 0; i < length; i++) {\n      // prefixes gives us something like -o-, and we want O_\n      var prefix = prefixes[i];\n      var thisRule = prefix.toUpperCase() + '_' + rule;\n\n      if (thisRule in cssrule) {\n        return '@-' + prefix.toLowerCase() + '-' + prop;\n      }\n    }\n\n    return false;\n  };\n\n  ModernizrProto.atRule = atRule;\n\n  \n\n  /**\n   * List of JavaScript DOM values used for tests\n   *\n   * @memberof Modernizr\n   * @name Modernizr._domPrefixes\n   * @optionName Modernizr._domPrefixes\n   * @optionProp domPrefixes\n   * @access public\n   * @example\n   *\n   * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather\n   * than kebab-case properties, all properties are their Capitalized variant\n   *\n   * ```js\n   * Modernizr._domPrefixes === [ \"Moz\", \"O\", \"ms\", \"Webkit\" ];\n   * ```\n   */\n\n  var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);\n  ModernizrProto._domPrefixes = domPrefixes;\n  \n\n\n  /**\n   * contains checks to see if a string contains another string\n   *\n   * @access private\n   * @function contains\n   * @param {string} str - The string we want to check for substrings\n   * @param {string} substr - The substring we want to search the first string for\n   * @returns {boolean}\n   */\n\n  function contains(str, substr) {\n    return !!~('' + str).indexOf(substr);\n  }\n\n  ;\n\n  /**\n   * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n   *\n   * @access private\n   * @function fnBind\n   * @param {function} fn - a function you want to change `this` reference to\n   * @param {object} that - the `this` you want to call the function with\n   * @returns {function} The wrapped version of the supplied function\n   */\n\n  function fnBind(fn, that) {\n    return function() {\n      return fn.apply(that, arguments);\n    };\n  }\n\n  ;\n\n  /**\n   * testDOMProps is a generic DOM property test; if a browser supports\n   *   a certain property, it won't return undefined for it.\n   *\n   * @access private\n   * @function testDOMProps\n   * @param {array.<string>} props - An array of properties to test for\n   * @param {object} obj - An object or Element you want to use to test the parameters again\n   * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n   */\n  function testDOMProps(props, obj, elem) {\n    var item;\n\n    for (var i in props) {\n      if (props[i] in obj) {\n\n        // return the property name as a string\n        if (elem === false) {\n          return props[i];\n        }\n\n        item = obj[props[i]];\n\n        // let's bind a function\n        if (is(item, 'function')) {\n          // bind to obj unless overriden\n          return fnBind(item, elem || obj);\n        }\n\n        // return the unbound function or obj or value\n        return item;\n      }\n    }\n    return false;\n  }\n\n  ;\n\n  /**\n   * Create our \"modernizr\" element that we do most feature tests on.\n   *\n   * @access private\n   */\n\n  var modElem = {\n    elem: createElement('modernizr')\n  };\n\n  // Clean up this element\n  Modernizr._q.push(function() {\n    delete modElem.elem;\n  });\n\n  \n\n  var mStyle = {\n    style: modElem.elem.style\n  };\n\n  // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n  // the front of the queue.\n  Modernizr._q.unshift(function() {\n    delete mStyle.style;\n  });\n\n  \n/*!\n{\n  \"name\": \"Base 64 encoding/decoding\",\n  \"property\": [\"atobbtoa\"],\n  \"builderAliases\": [\"atob-btoa\"],\n  \"caniuse\" : \"atob-btoa\",\n  \"tags\": [\"atob\", \"base64\", \"WindowBase64\", \"btoa\"],\n  \"authors\": [\"Christian Ulbrich\"],\n  \"notes\": [{\n    \"name\": \"WindowBase64\",\n    \"href\": \"https://www.w3.org/TR/html5/webappapis.html#windowbase64\"\n  }, {\n    \"name\": \"MDN documentation\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/atob\"\n  }],\n  \"polyfills\": [\"base64js\"]\n}\n!*/\n/* DOC\n\nDetects support for WindowBase64 API (window.atob && window.btoa).\n\n*/\n\n  Modernizr.addTest('atobbtoa', 'atob' in window && 'btoa' in window, {aliases: ['atob-btoa']});\n\n\n  /**\n   * domToCSS takes a camelCase string and converts it to kebab-case\n   * e.g. boxSizing -> box-sizing\n   *\n   * @access private\n   * @function domToCSS\n   * @param {string} name - String name of camelCase prop we want to convert\n   * @returns {string} The kebab-case version of the supplied name\n   */\n\n  function domToCSS(name) {\n    return name.replace(/([A-Z])/g, function(str, m1) {\n      return '-' + m1.toLowerCase();\n    }).replace(/^ms-/, '-ms-');\n  }\n  ;\n\n  /**\n   * nativeTestProps allows for us to use native feature detection functionality if available.\n   * some prefixed form, or false, in the case of an unsupported rule\n   *\n   * @access private\n   * @function nativeTestProps\n   * @param {array} props - An array of property names\n   * @param {string} value - A string representing the value we want to check via @supports\n   * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n   */\n\n  // Accepts a list of property names and a single value\n  // Returns `undefined` if native detection not available\n  function nativeTestProps(props, value) {\n    var i = props.length;\n    // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n    if ('CSS' in window && 'supports' in window.CSS) {\n      // Try every prefixed variant of the property\n      while (i--) {\n        if (window.CSS.supports(domToCSS(props[i]), value)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    // Otherwise fall back to at-rule (for Opera 12.x)\n    else if ('CSSSupportsRule' in window) {\n      // Build a condition string for every prefixed variant\n      var conditionText = [];\n      while (i--) {\n        conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n      }\n      conditionText = conditionText.join(' or ');\n      return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n        return getComputedStyle(node, null).position == 'absolute';\n      });\n    }\n    return undefined;\n  }\n  ;\n\n  // testProps is a generic CSS / DOM property test.\n\n  // In testing support for a given CSS property, it's legit to test:\n  //    `elem.style[styleName] !== undefined`\n  // If the property is supported it will return an empty string,\n  // if unsupported it will return undefined.\n\n  // We'll take advantage of this quick test and skip setting a style\n  // on our modernizr element, but instead just testing undefined vs\n  // empty string.\n\n  // Property names can be provided in either camelCase or kebab-case.\n\n  function testProps(props, prefixed, value, skipValueTest) {\n    skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n    // Try native detect first\n    if (!is(value, 'undefined')) {\n      var result = nativeTestProps(props, value);\n      if (!is(result, 'undefined')) {\n        return result;\n      }\n    }\n\n    // Otherwise do it properly\n    var afterInit, i, propsLength, prop, before;\n\n    // If we don't have a style element, that means we're running async or after\n    // the core tests, so we'll need to create our own elements to use\n\n    // inside of an SVG element, in certain browsers, the `style` element is only\n    // defined for valid tags. Therefore, if `modernizr` does not have one, we\n    // fall back to a less used element and hope for the best.\n    // for strict XHTML browsers the hardly used samp element is used\n    var elems = ['modernizr', 'tspan', 'samp'];\n    while (!mStyle.style && elems.length) {\n      afterInit = true;\n      mStyle.modElem = createElement(elems.shift());\n      mStyle.style = mStyle.modElem.style;\n    }\n\n    // Delete the objects if we created them.\n    function cleanElems() {\n      if (afterInit) {\n        delete mStyle.style;\n        delete mStyle.modElem;\n      }\n    }\n\n    propsLength = props.length;\n    for (i = 0; i < propsLength; i++) {\n      prop = props[i];\n      before = mStyle.style[prop];\n\n      if (contains(prop, '-')) {\n        prop = cssToDOM(prop);\n      }\n\n      if (mStyle.style[prop] !== undefined) {\n\n        // If value to test has been passed in, do a set-and-check test.\n        // 0 (integer) is a valid property value, so check that `value` isn't\n        // undefined, rather than just checking it's truthy.\n        if (!skipValueTest && !is(value, 'undefined')) {\n\n          // Needs a try catch block because of old IE. This is slow, but will\n          // be avoided in most cases because `skipValueTest` will be used.\n          try {\n            mStyle.style[prop] = value;\n          } catch (e) {}\n\n          // If the property value has changed, we assume the value used is\n          // supported. If `value` is empty string, it'll fail here (because\n          // it hasn't changed), which matches how browsers have implemented\n          // CSS.supports()\n          if (mStyle.style[prop] != before) {\n            cleanElems();\n            return prefixed == 'pfx' ? prop : true;\n          }\n        }\n        // Otherwise just return true, or the property name if this is a\n        // `prefixed()` call\n        else {\n          cleanElems();\n          return prefixed == 'pfx' ? prop : true;\n        }\n      }\n    }\n    cleanElems();\n    return false;\n  }\n\n  ;\n\n  /**\n   * testPropsAll tests a list of DOM properties we want to check against.\n   * We specify literally ALL possible (known and/or likely) properties on\n   * the element including the non-vendor prefixed one, for forward-\n   * compatibility.\n   *\n   * @access private\n   * @function testPropsAll\n   * @param {string} prop - A string of the property to test for\n   * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n   * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n   * @param {string} [value] - A string of a css value\n   * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n   */\n  function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n    var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n    props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n    // did they call .prefixed('boxSizing') or are we just testing a prop?\n    if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n      return testProps(props, prefixed, value, skipValueTest);\n\n      // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n    } else {\n      props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n      return testDOMProps(props, prefixed, elem);\n    }\n  }\n\n  // Modernizr.testAllProps() investigates whether a given style property,\n  // or any of its vendor-prefixed variants, is recognized\n  //\n  // Note that the property names must be provided in the camelCase variant.\n  // Modernizr.testAllProps('boxSizing')\n  ModernizrProto.testAllProps = testPropsAll;\n\n  \n\n  /**\n   * prefixed returns the prefixed or nonprefixed property name variant of your input\n   *\n   * @memberof Modernizr\n   * @name Modernizr.prefixed\n   * @optionName Modernizr.prefixed()\n   * @optionProp prefixed\n   * @access public\n   * @function prefixed\n   * @param {string} prop - String name of the property to test for\n   * @param {object} [obj] - An object to test for the prefixed properties on\n   * @param {HTMLElement} [elem] - An element used to test specific properties against\n   * @returns {string|false} The string representing the (possibly prefixed) valid\n   * version of the property, or `false` when it is unsupported.\n   * @example\n   *\n   * Modernizr.prefixed takes a string css value in the DOM style camelCase (as\n   * opposed to the css style kebab-case) form and returns the (possibly prefixed)\n   * version of that property that the browser actually supports.\n   *\n   * For example, in older Firefox...\n   * ```js\n   * prefixed('boxSizing')\n   * ```\n   * returns 'MozBoxSizing'\n   *\n   * In newer Firefox, as well as any other browser that support the unprefixed\n   * version would simply return `boxSizing`. Any browser that does not support\n   * the property at all, it will return `false`.\n   *\n   * By default, prefixed is checked against a DOM element. If you want to check\n   * for a property on another object, just pass it as a second argument\n   *\n   * ```js\n   * var rAF = prefixed('requestAnimationFrame', window);\n   *\n   * raf(function() {\n   *  renderFunction();\n   * })\n   * ```\n   *\n   * Note that this will return _the actual function_ - not the name of the function.\n   * If you need the actual name of the property, pass in `false` as a third argument\n   *\n   * ```js\n   * var rAFProp = prefixed('requestAnimationFrame', window, false);\n   *\n   * rafProp === 'WebkitRequestAnimationFrame' // in older webkit\n   * ```\n   *\n   * One common use case for prefixed is if you're trying to determine which transition\n   * end event to bind to, you might do something like...\n   * ```js\n   * var transEndEventNames = {\n   *     'WebkitTransition' : 'webkitTransitionEnd', * Saf 6, Android Browser\n   *     'MozTransition'    : 'transitionend',       * only for FF < 15\n   *     'transition'       : 'transitionend'        * IE10, Opera, Chrome, FF 15+, Saf 7+\n   * };\n   *\n   * var transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];\n   * ```\n   *\n   * If you want a similar lookup, but in kebab-case, you can use [prefixedCSS](#modernizr-prefixedcss).\n   */\n\n  var prefixed = ModernizrProto.prefixed = function(prop, obj, elem) {\n    if (prop.indexOf('@') === 0) {\n      return atRule(prop);\n    }\n\n    if (prop.indexOf('-') != -1) {\n      // Convert kebab-case to camelCase\n      prop = cssToDOM(prop);\n    }\n    if (!obj) {\n      return testPropsAll(prop, 'pfx');\n    } else {\n      // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'\n      return testPropsAll(prop, obj, elem);\n    }\n  };\n\n  \n/*!\n{\n  \"name\": \"requestAnimationFrame\",\n  \"property\": \"requestanimationframe\",\n  \"aliases\": [\"raf\"],\n  \"caniuse\": \"requestanimationframe\",\n  \"tags\": [\"animation\"],\n  \"authors\": [\"Addy Osmani\"],\n  \"notes\": [{\n    \"name\": \"W3C spec\",\n    \"href\": \"https://www.w3.org/TR/animation-timing/\"\n  }],\n  \"polyfills\": [\"raf\"]\n}\n!*/\n/* DOC\nDetects support for the `window.requestAnimationFrame` API, for offloading animation repainting to the browser for optimized performance.\n*/\n\n  Modernizr.addTest('requestanimationframe', !!prefixed('requestAnimationFrame', window), {aliases: ['raf']});\n\n\n  /**\n   * testAllProps determines whether a given CSS property is supported in the browser\n   *\n   * @memberof Modernizr\n   * @name Modernizr.testAllProps\n   * @optionName Modernizr.testAllProps()\n   * @optionProp testAllProps\n   * @access public\n   * @function testAllProps\n   * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n   * @param {string} [value] - String of the value to test\n   * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n   * @example\n   *\n   * testAllProps determines whether a given CSS property, in some prefixed form,\n   * is supported by the browser.\n   *\n   * ```js\n   * testAllProps('boxSizing')  // true\n   * ```\n   *\n   * It can optionally be given a CSS value in string form to test if a property\n   * value is valid\n   *\n   * ```js\n   * testAllProps('display', 'block') // true\n   * testAllProps('display', 'penguin') // false\n   * ```\n   *\n   * A boolean can be passed as a third parameter to skip the value check when\n   * native detection (@supports) isn't available.\n   *\n   * ```js\n   * testAllProps('shapeOutside', 'content-box', true);\n   * ```\n   */\n\n  function testAllProps(prop, value, skipValueTest) {\n    return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n  }\n  ModernizrProto.testAllProps = testAllProps;\n  \n/*!\n{\n  \"name\": \"CSS Animations\",\n  \"property\": \"cssanimations\",\n  \"caniuse\": \"css-animation\",\n  \"polyfills\": [\"transformie\", \"csssandpaper\"],\n  \"tags\": [\"css\"],\n  \"warnings\": [\"Android < 4 will pass this test, but can only animate a single property at a time\"],\n  \"notes\": [{\n    \"name\" : \"Article: 'Dispelling the Android CSS animation myths'\",\n    \"href\": \"https://goo.gl/OGw5Gm\"\n  }]\n}\n!*/\n/* DOC\nDetects whether or not elements can be animated using CSS\n*/\n\n  Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));\n\n/*!\n{\n  \"name\": \"Flexbox\",\n  \"property\": \"flexbox\",\n  \"caniuse\": \"flexbox\",\n  \"tags\": [\"css\"],\n  \"notes\": [{\n    \"name\": \"The _new_ flexbox\",\n    \"href\": \"http://dev.w3.org/csswg/css3-flexbox\"\n  }],\n  \"warnings\": [\n    \"A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect.\"\n  ]\n}\n!*/\n/* DOC\nDetects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.\n*/\n\n  Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));\n\n/*!\n{\n  \"name\": \"CSS Transforms\",\n  \"property\": \"csstransforms\",\n  \"caniuse\": \"transforms2d\",\n  \"tags\": [\"css\"]\n}\n!*/\n\n  Modernizr.addTest('csstransforms', function() {\n    // Android < 3.0 is buggy, so we sniff and blacklist\n    // http://git.io/hHzL7w\n    return navigator.userAgent.indexOf('Android 2.') === -1 &&\n           testAllProps('transform', 'scale(1)', true);\n  });\n\n/*!\n{\n  \"name\": \"CSS Transitions\",\n  \"property\": \"csstransitions\",\n  \"caniuse\": \"css-transitions\",\n  \"tags\": [\"css\"]\n}\n!*/\n\n  Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));\n\n\n  // Run each test\n  testRunner();\n\n  delete ModernizrProto.addTest;\n  delete ModernizrProto.addAsyncTest;\n\n  // Run the things that are supposed to run after the tests\n  for (var i = 0; i < Modernizr._q.length; i++) {\n    Modernizr._q[i]();\n  }\n\n  // Leak Modernizr namespace\n  window.Modernizr = Modernizr;\n\n\n;\n\n})(window, document);"
  },
  {
    "path": "portiaui/vendor/mutation-summary.js",
    "content": "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nvar __extends = this.__extends || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    __.prototype = b.prototype;\n    d.prototype = new __();\n};\nvar MutationObserverCtor;\nif (typeof WebKitMutationObserver !== 'undefined')\n    MutationObserverCtor = WebKitMutationObserver;\nelse\n    MutationObserverCtor = MutationObserver;\n\nif (MutationObserverCtor === undefined) {\n    console.error('DOM Mutation Observers are required.');\n    console.error('https://developer.mozilla.org/en-US/docs/DOM/MutationObserver');\n    throw Error('DOM Mutation Observers are required');\n}\n\nvar NodeMap = (function () {\n    function NodeMap() {\n        this.nodes = [];\n        this.values = [];\n    }\n    NodeMap.prototype.isIndex = function (s) {\n        return +s === s >>> 0;\n    };\n\n    NodeMap.prototype.nodeId = function (node) {\n        var id = node[NodeMap.ID_PROP];\n        if (!id)\n            id = node[NodeMap.ID_PROP] = NodeMap.nextId_++;\n        return id;\n    };\n\n    NodeMap.prototype.set = function (node, value) {\n        var id = this.nodeId(node);\n        this.nodes[id] = node;\n        this.values[id] = value;\n    };\n\n    NodeMap.prototype.get = function (node) {\n        var id = this.nodeId(node);\n        return this.values[id];\n    };\n\n    NodeMap.prototype.has = function (node) {\n        return this.nodeId(node) in this.nodes;\n    };\n\n    NodeMap.prototype.delete = function (node) {\n        var id = this.nodeId(node);\n        delete this.nodes[id];\n        this.values[id] = undefined;\n    };\n\n    NodeMap.prototype.keys = function () {\n        var nodes = [];\n        for (var id in this.nodes) {\n            if (!this.isIndex(id))\n                continue;\n            nodes.push(this.nodes[id]);\n        }\n\n        return nodes;\n    };\n    NodeMap.ID_PROP = '__mutation_summary_node_map_id__';\n    NodeMap.nextId_ = 1;\n    return NodeMap;\n})();\n\nfunction NodeIdMap(){\n    NodeMap.call(this);\n    this.byId = {}; // Id -> Node\n}\nNodeIdMap.prototype = new NodeMap();\nNodeIdMap.prototype.delete = function(node) {\n    var id = this.get(node);\n    if(id){\n        NodeMap.prototype.delete.call(this, node);\n        delete this.byId[id];\n    }\n};\nNodeIdMap.prototype.set = function(node, id) {\n    NodeMap.prototype.set.call(this, node, id);\n    this.byId[id] = node;\n};\n/**\n*  var reachableMatchableProduct = [\n*  //  STAYED_OUT,  ENTERED,     STAYED_IN,   EXITED\n*    [ STAYED_OUT,  STAYED_OUT,  STAYED_OUT,  STAYED_OUT ], // STAYED_OUT\n*    [ STAYED_OUT,  ENTERED,     ENTERED,     STAYED_OUT ], // ENTERED\n*    [ STAYED_OUT,  ENTERED,     STAYED_IN,   EXITED     ], // STAYED_IN\n*    [ STAYED_OUT,  STAYED_OUT,  EXITED,      EXITED     ]  // EXITED\n*  ];\n*/\nvar Movement;\n(function (Movement) {\n    Movement[Movement[\"STAYED_OUT\"] = 0] = \"STAYED_OUT\";\n    Movement[Movement[\"ENTERED\"] = 1] = \"ENTERED\";\n    Movement[Movement[\"STAYED_IN\"] = 2] = \"STAYED_IN\";\n    Movement[Movement[\"REPARENTED\"] = 3] = \"REPARENTED\";\n    Movement[Movement[\"REORDERED\"] = 4] = \"REORDERED\";\n    Movement[Movement[\"EXITED\"] = 5] = \"EXITED\";\n})(Movement || (Movement = {}));\n\nfunction enteredOrExited(changeType) {\n    return changeType === 1 /* ENTERED */ || changeType === 5 /* EXITED */;\n}\n\nvar NodeChange = (function () {\n    function NodeChange(node, childList, attributes, characterData, oldParentNode, added, attributeOldValues, characterDataOldValue) {\n        if (typeof childList === \"undefined\") { childList = false; }\n        if (typeof attributes === \"undefined\") { attributes = false; }\n        if (typeof characterData === \"undefined\") { characterData = false; }\n        if (typeof oldParentNode === \"undefined\") { oldParentNode = null; }\n        if (typeof added === \"undefined\") { added = false; }\n        if (typeof attributeOldValues === \"undefined\") { attributeOldValues = null; }\n        if (typeof characterDataOldValue === \"undefined\") { characterDataOldValue = null; }\n        this.node = node;\n        this.childList = childList;\n        this.attributes = attributes;\n        this.characterData = characterData;\n        this.oldParentNode = oldParentNode;\n        this.added = added;\n        this.attributeOldValues = attributeOldValues;\n        this.characterDataOldValue = characterDataOldValue;\n        this.isCaseInsensitive = this.node.nodeType === Node.ELEMENT_NODE && this.node instanceof HTMLElement && this.node.ownerDocument instanceof HTMLDocument;\n    }\n    NodeChange.prototype.getAttributeOldValue = function (name) {\n        if (!this.attributeOldValues)\n            return undefined;\n        if (this.isCaseInsensitive)\n            name = name.toLowerCase();\n        return this.attributeOldValues[name];\n    };\n\n    NodeChange.prototype.getAttributeNamesMutated = function () {\n        var names = [];\n        if (!this.attributeOldValues)\n            return names;\n        for (var name in this.attributeOldValues) {\n            names.push(name);\n        }\n        return names;\n    };\n\n    NodeChange.prototype.attributeMutated = function (name, oldValue) {\n        this.attributes = true;\n        this.attributeOldValues = this.attributeOldValues || {};\n\n        if (name in this.attributeOldValues)\n            return;\n\n        this.attributeOldValues[name] = oldValue;\n    };\n\n    NodeChange.prototype.characterDataMutated = function (oldValue) {\n        if (this.characterData)\n            return;\n        this.characterData = true;\n        this.characterDataOldValue = oldValue;\n    };\n\n    // Note: is it possible to receive a removal followed by a removal. This\n    // can occur if the removed node is added to an non-observed node, that\n    // node is added to the observed area, and then the node removed from\n    // it.\n    NodeChange.prototype.removedFromParent = function (parent) {\n        this.childList = true;\n        if (this.added || this.oldParentNode)\n            this.added = false;\n        else\n            this.oldParentNode = parent;\n    };\n\n    NodeChange.prototype.insertedIntoParent = function () {\n        this.childList = true;\n        this.added = true;\n    };\n\n    // An node's oldParent is\n    //   -its present parent, if its parentNode was not changed.\n    //   -null if the first thing that happened to it was an add.\n    //   -the node it was removed from if the first thing that happened to it\n    //      was a remove.\n    NodeChange.prototype.getOldParent = function () {\n        if (this.childList) {\n            if (this.oldParentNode)\n                return this.oldParentNode;\n            if (this.added)\n                return null;\n        }\n\n        return this.node.parentNode;\n    };\n    return NodeChange;\n})();\n\nvar ChildListChange = (function () {\n    function ChildListChange() {\n        this.added = new NodeMap();\n        this.removed = new NodeMap();\n        this.maybeMoved = new NodeMap();\n        this.oldPrevious = new NodeMap();\n        this.moved = undefined;\n    }\n    return ChildListChange;\n})();\n\nvar TreeChanges = (function (_super) {\n    __extends(TreeChanges, _super);\n    function TreeChanges(rootNode, mutations) {\n        _super.call(this);\n\n        this.rootNode = rootNode;\n        this.reachableCache = undefined;\n        this.wasReachableCache = undefined;\n        this.anyParentsChanged = false;\n        this.anyAttributesChanged = false;\n        this.anyCharacterDataChanged = false;\n\n        for (var m = 0; m < mutations.length; m++) {\n            var mutation = mutations[m];\n            switch (mutation.type) {\n                case 'childList':\n                    this.anyParentsChanged = true;\n                    for (var i = 0; i < mutation.removedNodes.length; i++) {\n                        var node = mutation.removedNodes[i];\n                        this.getChange(node).removedFromParent(mutation.target);\n                    }\n                    for (var i = 0; i < mutation.addedNodes.length; i++) {\n                        var node = mutation.addedNodes[i];\n                        this.getChange(node).insertedIntoParent();\n                    }\n                    break;\n\n                case 'attributes':\n                    this.anyAttributesChanged = true;\n                    var change = this.getChange(mutation.target);\n                    change.attributeMutated(mutation.attributeName, mutation.oldValue);\n                    break;\n\n                case 'characterData':\n                    this.anyCharacterDataChanged = true;\n                    var change = this.getChange(mutation.target);\n                    change.characterDataMutated(mutation.oldValue);\n                    break;\n            }\n        }\n    }\n    TreeChanges.prototype.getChange = function (node) {\n        var change = this.get(node);\n        if (!change) {\n            change = new NodeChange(node);\n            this.set(node, change);\n        }\n        return change;\n    };\n\n    TreeChanges.prototype.getOldParent = function (node) {\n        var change = this.get(node);\n        return change ? change.getOldParent() : node.parentNode;\n    };\n\n    TreeChanges.prototype.getIsReachable = function (node) {\n        if (node === this.rootNode)\n            return true;\n        if (!node)\n            return false;\n\n        this.reachableCache = this.reachableCache || new NodeMap();\n        var isReachable = this.reachableCache.get(node);\n        if (isReachable === undefined) {\n            isReachable = this.getIsReachable(node.parentNode);\n            this.reachableCache.set(node, isReachable);\n        }\n        return isReachable;\n    };\n\n    // A node wasReachable if its oldParent wasReachable.\n    TreeChanges.prototype.getWasReachable = function (node) {\n        if (node === this.rootNode)\n            return true;\n        if (!node)\n            return false;\n\n        this.wasReachableCache = this.wasReachableCache || new NodeMap();\n        var wasReachable = this.wasReachableCache.get(node);\n        if (wasReachable === undefined) {\n            wasReachable = this.getWasReachable(this.getOldParent(node));\n            this.wasReachableCache.set(node, wasReachable);\n        }\n        return wasReachable;\n    };\n\n    TreeChanges.prototype.reachabilityChange = function (node) {\n        if (this.getIsReachable(node)) {\n            return this.getWasReachable(node) ? 2 /* STAYED_IN */ : 1 /* ENTERED */;\n        }\n\n        return this.getWasReachable(node) ? 5 /* EXITED */ : 0 /* STAYED_OUT */;\n    };\n    return TreeChanges;\n})(NodeMap);\n\nvar MutationProjection = (function () {\n    // TOOD(any)\n    function MutationProjection(rootNode, mutations, selectors, calcReordered, calcOldPreviousSibling) {\n        this.rootNode = rootNode;\n        this.mutations = mutations;\n        this.selectors = selectors;\n        this.calcReordered = calcReordered;\n        this.calcOldPreviousSibling = calcOldPreviousSibling;\n        this.treeChanges = new TreeChanges(rootNode, mutations);\n        this.entered = [];\n        this.exited = [];\n        this.stayedIn = new NodeMap();\n        this.visited = new NodeMap();\n        this.childListChangeMap = undefined;\n        this.characterDataOnly = undefined;\n        this.matchCache = undefined;\n\n        this.processMutations();\n    }\n    MutationProjection.prototype.processMutations = function () {\n        if (!this.treeChanges.anyParentsChanged && !this.treeChanges.anyAttributesChanged)\n            return;\n\n        var changedNodes = this.treeChanges.keys();\n        for (var i = 0; i < changedNodes.length; i++) {\n            this.visitNode(changedNodes[i], undefined);\n        }\n    };\n\n    MutationProjection.prototype.visitNode = function (node, parentReachable) {\n        if (this.visited.has(node))\n            return;\n\n        this.visited.set(node, true);\n\n        var change = this.treeChanges.get(node);\n        var reachable = parentReachable;\n\n        // node inherits its parent's reachability change unless\n        // its parentNode was mutated.\n        if ((change && change.childList) || reachable == undefined)\n            reachable = this.treeChanges.reachabilityChange(node);\n\n        if (reachable === 0 /* STAYED_OUT */)\n            return;\n\n        // Cache match results for sub-patterns.\n        this.matchabilityChange(node);\n\n        if (reachable === 1 /* ENTERED */) {\n            this.entered.push(node);\n        } else if (reachable === 5 /* EXITED */) {\n            this.exited.push(node);\n            this.ensureHasOldPreviousSiblingIfNeeded(node);\n        } else if (reachable === 2 /* STAYED_IN */) {\n            var movement = 2 /* STAYED_IN */;\n\n            if (change && change.childList) {\n                if (change.oldParentNode !== node.parentNode) {\n                    movement = 3 /* REPARENTED */;\n                    this.ensureHasOldPreviousSiblingIfNeeded(node);\n                } else if (this.calcReordered && this.wasReordered(node)) {\n                    movement = 4 /* REORDERED */;\n                }\n            }\n\n            this.stayedIn.set(node, movement);\n        }\n\n        if (reachable === 2 /* STAYED_IN */)\n            return;\n\n        for (var child = node.firstChild; child; child = child.nextSibling) {\n            this.visitNode(child, reachable);\n        }\n    };\n\n    MutationProjection.prototype.ensureHasOldPreviousSiblingIfNeeded = function (node) {\n        if (!this.calcOldPreviousSibling)\n            return;\n\n        this.processChildlistChanges();\n\n        var parentNode = node.parentNode;\n        var nodeChange = this.treeChanges.get(node);\n        if (nodeChange && nodeChange.oldParentNode)\n            parentNode = nodeChange.oldParentNode;\n\n        var change = this.childListChangeMap.get(parentNode);\n        if (!change) {\n            change = new ChildListChange();\n            this.childListChangeMap.set(parentNode, change);\n        }\n\n        if (!change.oldPrevious.has(node)) {\n            change.oldPrevious.set(node, node.previousSibling);\n        }\n    };\n\n    MutationProjection.prototype.getChanged = function (summary, selectors, characterDataOnly) {\n        this.selectors = selectors;\n        this.characterDataOnly = characterDataOnly;\n\n        for (var i = 0; i < this.entered.length; i++) {\n            var node = this.entered[i];\n            var matchable = this.matchabilityChange(node);\n            if (matchable === 1 /* ENTERED */ || matchable === 2 /* STAYED_IN */)\n                summary.added.push(node);\n        }\n\n        var stayedInNodes = this.stayedIn.keys();\n        for (var i = 0; i < stayedInNodes.length; i++) {\n            var node = stayedInNodes[i];\n            var matchable = this.matchabilityChange(node);\n\n            if (matchable === 1 /* ENTERED */) {\n                summary.added.push(node);\n            } else if (matchable === 5 /* EXITED */) {\n                summary.removed.push(node);\n            } else if (matchable === 2 /* STAYED_IN */ && (summary.reparented || summary.reordered)) {\n                var movement = this.stayedIn.get(node);\n                if (summary.reparented && movement === 3 /* REPARENTED */)\n                    summary.reparented.push(node);\n                else if (summary.reordered && movement === 4 /* REORDERED */)\n                    summary.reordered.push(node);\n            }\n        }\n\n        for (var i = 0; i < this.exited.length; i++) {\n            var node = this.exited[i];\n            var matchable = this.matchabilityChange(node);\n            if (matchable === 5 /* EXITED */ || matchable === 2 /* STAYED_IN */)\n                summary.removed.push(node);\n        }\n    };\n\n    MutationProjection.prototype.getOldParentNode = function (node) {\n        var change = this.treeChanges.get(node);\n        if (change && change.childList)\n            return change.oldParentNode ? change.oldParentNode : null;\n\n        var reachabilityChange = this.treeChanges.reachabilityChange(node);\n        if (reachabilityChange === 0 /* STAYED_OUT */ || reachabilityChange === 1 /* ENTERED */)\n            throw Error('getOldParentNode requested on invalid node.');\n\n        return node.parentNode;\n    };\n\n    MutationProjection.prototype.getOldPreviousSibling = function (node) {\n        var parentNode = node.parentNode;\n        var nodeChange = this.treeChanges.get(node);\n        if (nodeChange && nodeChange.oldParentNode)\n            parentNode = nodeChange.oldParentNode;\n\n        var change = this.childListChangeMap.get(parentNode);\n        if (!change)\n            throw Error('getOldPreviousSibling requested on invalid node.');\n\n        return change.oldPrevious.get(node);\n    };\n\n    MutationProjection.prototype.getOldAttribute = function (element, attrName) {\n        var change = this.treeChanges.get(element);\n        if (!change || !change.attributes)\n            throw Error('getOldAttribute requested on invalid node.');\n\n        var value = change.getAttributeOldValue(attrName);\n        if (value === undefined)\n            throw Error('getOldAttribute requested for unchanged attribute name.');\n\n        return value;\n    };\n\n    MutationProjection.prototype.attributeChangedNodes = function (includeAttributes) {\n        if (!this.treeChanges.anyAttributesChanged)\n            return {};\n\n        var attributeFilter;\n        var caseInsensitiveFilter;\n        if (includeAttributes) {\n            attributeFilter = {};\n            caseInsensitiveFilter = {};\n            for (var i = 0; i < includeAttributes.length; i++) {\n                var attrName = includeAttributes[i];\n                attributeFilter[attrName] = true;\n                caseInsensitiveFilter[attrName.toLowerCase()] = attrName;\n            }\n        }\n\n        var result = {};\n        var nodes = this.treeChanges.keys();\n\n        for (var i = 0; i < nodes.length; i++) {\n            var node = nodes[i];\n\n            var change = this.treeChanges.get(node);\n            if (!change.attributes)\n                continue;\n\n            if (2 /* STAYED_IN */ !== this.treeChanges.reachabilityChange(node) || 2 /* STAYED_IN */ !== this.matchabilityChange(node)) {\n                continue;\n            }\n\n            var element = node;\n            var changedAttrNames = change.getAttributeNamesMutated();\n            for (var j = 0; j < changedAttrNames.length; j++) {\n                var attrName = changedAttrNames[j];\n\n                if (attributeFilter && !attributeFilter[attrName] && !(change.isCaseInsensitive && caseInsensitiveFilter[attrName])) {\n                    continue;\n                }\n\n                var oldValue = change.getAttributeOldValue(attrName);\n                if (oldValue === element.getAttribute(attrName))\n                    continue;\n\n                if (caseInsensitiveFilter && change.isCaseInsensitive)\n                    attrName = caseInsensitiveFilter[attrName];\n\n                result[attrName] = result[attrName] || [];\n                result[attrName].push(element);\n            }\n        }\n\n        return result;\n    };\n\n    MutationProjection.prototype.getOldCharacterData = function (node) {\n        var change = this.treeChanges.get(node);\n        if (!change || !change.characterData)\n            throw Error('getOldCharacterData requested on invalid node.');\n\n        return change.characterDataOldValue;\n    };\n\n    MutationProjection.prototype.getCharacterDataChanged = function () {\n        if (!this.treeChanges.anyCharacterDataChanged)\n            return [];\n\n        var nodes = this.treeChanges.keys();\n        var result = [];\n        for (var i = 0; i < nodes.length; i++) {\n            var target = nodes[i];\n            if (2 /* STAYED_IN */ !== this.treeChanges.reachabilityChange(target))\n                continue;\n\n            var change = this.treeChanges.get(target);\n            if (!change.characterData || target.textContent == change.characterDataOldValue)\n                continue;\n\n            result.push(target);\n        }\n\n        return result;\n    };\n\n    MutationProjection.prototype.computeMatchabilityChange = function (selector, el) {\n        if (!this.matchCache)\n            this.matchCache = [];\n        if (!this.matchCache[selector.uid])\n            this.matchCache[selector.uid] = new NodeMap();\n\n        var cache = this.matchCache[selector.uid];\n        var result = cache.get(el);\n        if (result === undefined) {\n            result = selector.matchabilityChange(el, this.treeChanges.get(el));\n            cache.set(el, result);\n        }\n        return result;\n    };\n\n    MutationProjection.prototype.matchabilityChange = function (node) {\n        var _this = this;\n        // TODO(rafaelw): Include PI, CDATA?\n        // Only include text nodes.\n        if (this.characterDataOnly) {\n            switch (node.nodeType) {\n                case Node.COMMENT_NODE:\n                case Node.TEXT_NODE:\n                    return 2 /* STAYED_IN */;\n                default:\n                    return 0 /* STAYED_OUT */;\n            }\n        }\n\n        // No element filter. Include all nodes.\n        if (!this.selectors)\n            return 2 /* STAYED_IN */;\n\n        // Element filter. Exclude non-elements.\n        if (node.nodeType !== Node.ELEMENT_NODE)\n            return 0 /* STAYED_OUT */;\n\n        var el = node;\n\n        var matchChanges = this.selectors.map(function (selector) {\n            return _this.computeMatchabilityChange(selector, el);\n        });\n\n        var accum = 0 /* STAYED_OUT */;\n        var i = 0;\n\n        while (accum !== 2 /* STAYED_IN */ && i < matchChanges.length) {\n            switch (matchChanges[i]) {\n                case 2 /* STAYED_IN */:\n                    accum = 2 /* STAYED_IN */;\n                    break;\n                case 1 /* ENTERED */:\n                    if (accum === 5 /* EXITED */)\n                        accum = 2 /* STAYED_IN */;\n                    else\n                        accum = 1 /* ENTERED */;\n                    break;\n                case 5 /* EXITED */:\n                    if (accum === 1 /* ENTERED */)\n                        accum = 2 /* STAYED_IN */;\n                    else\n                        accum = 5 /* EXITED */;\n                    break;\n            }\n\n            i++;\n        }\n\n        return accum;\n    };\n\n    MutationProjection.prototype.getChildlistChange = function (el) {\n        var change = this.childListChangeMap.get(el);\n        if (!change) {\n            change = new ChildListChange();\n            this.childListChangeMap.set(el, change);\n        }\n\n        return change;\n    };\n\n    MutationProjection.prototype.processChildlistChanges = function () {\n        if (this.childListChangeMap)\n            return;\n\n        this.childListChangeMap = new NodeMap();\n\n        for (var i = 0; i < this.mutations.length; i++) {\n            var mutation = this.mutations[i];\n            if (mutation.type != 'childList')\n                continue;\n\n            if (this.treeChanges.reachabilityChange(mutation.target) !== 2 /* STAYED_IN */ && !this.calcOldPreviousSibling)\n                continue;\n\n            var change = this.getChildlistChange(mutation.target);\n\n            var oldPrevious = mutation.previousSibling;\n\n            function recordOldPrevious(node, previous) {\n                if (!node || change.oldPrevious.has(node) || change.added.has(node) || change.maybeMoved.has(node))\n                    return;\n\n                if (previous && (change.added.has(previous) || change.maybeMoved.has(previous)))\n                    return;\n\n                change.oldPrevious.set(node, previous);\n            }\n\n            for (var j = 0; j < mutation.removedNodes.length; j++) {\n                var node = mutation.removedNodes[j];\n                recordOldPrevious(node, oldPrevious);\n\n                if (change.added.has(node)) {\n                    change.added.delete(node);\n                } else {\n                    change.removed.set(node, true);\n                    change.maybeMoved.delete(node);\n                }\n\n                oldPrevious = node;\n            }\n\n            recordOldPrevious(mutation.nextSibling, oldPrevious);\n\n            for (var j = 0; j < mutation.addedNodes.length; j++) {\n                var node = mutation.addedNodes[j];\n                if (change.removed.has(node)) {\n                    change.removed.delete(node);\n                    change.maybeMoved.set(node, true);\n                } else {\n                    change.added.set(node, true);\n                }\n            }\n        }\n    };\n\n    MutationProjection.prototype.wasReordered = function (node) {\n        if (!this.treeChanges.anyParentsChanged)\n            return false;\n\n        this.processChildlistChanges();\n\n        var parentNode = node.parentNode;\n        var nodeChange = this.treeChanges.get(node);\n        if (nodeChange && nodeChange.oldParentNode)\n            parentNode = nodeChange.oldParentNode;\n\n        var change = this.childListChangeMap.get(parentNode);\n        if (!change)\n            return false;\n\n        if (change.moved)\n            return change.moved.get(node);\n\n        change.moved = new NodeMap();\n        var pendingMoveDecision = new NodeMap();\n\n        function isMoved(node) {\n            if (!node)\n                return false;\n            if (!change.maybeMoved.has(node))\n                return false;\n\n            var didMove = change.moved.get(node);\n            if (didMove !== undefined)\n                return didMove;\n\n            if (pendingMoveDecision.has(node)) {\n                didMove = true;\n            } else {\n                pendingMoveDecision.set(node, true);\n                didMove = getPrevious(node) !== getOldPrevious(node);\n            }\n\n            if (pendingMoveDecision.has(node)) {\n                pendingMoveDecision.delete(node);\n                change.moved.set(node, didMove);\n            } else {\n                didMove = change.moved.get(node);\n            }\n\n            return didMove;\n        }\n\n        var oldPreviousCache = new NodeMap();\n        function getOldPrevious(node) {\n            var oldPrevious = oldPreviousCache.get(node);\n            if (oldPrevious !== undefined)\n                return oldPrevious;\n\n            oldPrevious = change.oldPrevious.get(node);\n            while (oldPrevious && (change.removed.has(oldPrevious) || isMoved(oldPrevious))) {\n                oldPrevious = getOldPrevious(oldPrevious);\n            }\n\n            if (oldPrevious === undefined)\n                oldPrevious = node.previousSibling;\n            oldPreviousCache.set(node, oldPrevious);\n\n            return oldPrevious;\n        }\n\n        var previousCache = new NodeMap();\n        function getPrevious(node) {\n            if (previousCache.has(node))\n                return previousCache.get(node);\n\n            var previous = node.previousSibling;\n            while (previous && (change.added.has(previous) || isMoved(previous)))\n                previous = previous.previousSibling;\n\n            previousCache.set(node, previous);\n            return previous;\n        }\n\n        change.maybeMoved.keys().forEach(isMoved);\n        return change.moved.get(node);\n    };\n    return MutationProjection;\n})();\n\nvar Summary = (function () {\n    function Summary(projection, query) {\n        var _this = this;\n        this.projection = projection;\n        this.added = [];\n        this.removed = [];\n        this.reparented = query.all || query.element ? [] : undefined;\n        this.reordered = query.all ? [] : undefined;\n\n        projection.getChanged(this, query.elementFilter, query.characterData);\n\n        if (query.all || query.attribute || query.attributeList) {\n            var filter = query.attribute ? [query.attribute] : query.attributeList;\n            var attributeChanged = projection.attributeChangedNodes(filter);\n\n            if (query.attribute) {\n                this.valueChanged = attributeChanged[query.attribute] || [];\n            } else {\n                this.attributeChanged = attributeChanged;\n                if (query.attributeList) {\n                    query.attributeList.forEach(function (attrName) {\n                        if (!_this.attributeChanged.hasOwnProperty(attrName))\n                            _this.attributeChanged[attrName] = [];\n                    });\n                }\n            }\n        }\n\n        if (query.all || query.characterData) {\n            var characterDataChanged = projection.getCharacterDataChanged();\n\n            if (query.characterData)\n                this.valueChanged = characterDataChanged;\n            else\n                this.characterDataChanged = characterDataChanged;\n        }\n\n        if (this.reordered)\n            this.getOldPreviousSibling = projection.getOldPreviousSibling.bind(projection);\n    }\n    Summary.prototype.getOldParentNode = function (node) {\n        return this.projection.getOldParentNode(node);\n    };\n\n    Summary.prototype.getOldAttribute = function (node, name) {\n        return this.projection.getOldAttribute(node, name);\n    };\n\n    Summary.prototype.getOldCharacterData = function (node) {\n        return this.projection.getOldCharacterData(node);\n    };\n\n    Summary.prototype.getOldPreviousSibling = function (node) {\n        return this.projection.getOldPreviousSibling(node);\n    };\n    return Summary;\n})();\n\n// TODO(rafaelw): Allow ':' and '.' as valid name characters.\nvar validNameInitialChar = /[a-zA-Z_]+/;\nvar validNameNonInitialChar = /[a-zA-Z0-9_\\-]+/;\n\n// TODO(rafaelw): Consider allowing backslash in the attrValue.\n// TODO(rafaelw): There's got a to be way to represent this state machine\n// more compactly???\nfunction escapeQuotes(value) {\n    return '\"' + value.replace(/\"/, '\\\\\\\"') + '\"';\n}\n\nvar Qualifier = (function () {\n    function Qualifier() {\n    }\n    Qualifier.prototype.matches = function (oldValue) {\n        if (oldValue === null)\n            return false;\n\n        if (this.attrValue === undefined)\n            return true;\n\n        if (!this.contains)\n            return this.attrValue == oldValue;\n\n        var tokens = oldValue.split(' ');\n        for (var i = 0; i < tokens.length; i++) {\n            if (this.attrValue === tokens[i])\n                return true;\n        }\n\n        return false;\n    };\n\n    Qualifier.prototype.toString = function () {\n        if (this.attrName === 'class' && this.contains)\n            return '.' + this.attrValue;\n\n        if (this.attrName === 'id' && !this.contains)\n            return '#' + this.attrValue;\n\n        if (this.contains)\n            return '[' + this.attrName + '~=' + escapeQuotes(this.attrValue) + ']';\n\n        if ('attrValue' in this)\n            return '[' + this.attrName + '=' + escapeQuotes(this.attrValue) + ']';\n\n        return '[' + this.attrName + ']';\n    };\n    return Qualifier;\n})();\n\nvar Selector = (function () {\n    function Selector() {\n        this.uid = Selector.nextUid++;\n        this.qualifiers = [];\n    }\n    Object.defineProperty(Selector.prototype, \"caseInsensitiveTagName\", {\n        get: function () {\n            return this.tagName.toUpperCase();\n        },\n        enumerable: true,\n        configurable: true\n    });\n\n    Object.defineProperty(Selector.prototype, \"selectorString\", {\n        get: function () {\n            return this.tagName + this.qualifiers.join('');\n        },\n        enumerable: true,\n        configurable: true\n    });\n\n    Selector.prototype.isMatching = function (el) {\n        return el[Selector.matchesSelector](this.selectorString);\n    };\n\n    Selector.prototype.wasMatching = function (el, change, isMatching) {\n        if (!change || !change.attributes)\n            return isMatching;\n\n        var tagName = change.isCaseInsensitive ? this.caseInsensitiveTagName : this.tagName;\n        if (tagName !== '*' && tagName !== el.tagName)\n            return false;\n\n        var attributeOldValues = [];\n        var anyChanged = false;\n        for (var i = 0; i < this.qualifiers.length; i++) {\n            var qualifier = this.qualifiers[i];\n            var oldValue = change.getAttributeOldValue(qualifier.attrName);\n            attributeOldValues.push(oldValue);\n            anyChanged = anyChanged || (oldValue !== undefined);\n        }\n\n        if (!anyChanged)\n            return isMatching;\n\n        for (var i = 0; i < this.qualifiers.length; i++) {\n            var qualifier = this.qualifiers[i];\n            var oldValue = attributeOldValues[i];\n            if (oldValue === undefined)\n                oldValue = el.getAttribute(qualifier.attrName);\n            if (!qualifier.matches(oldValue))\n                return false;\n        }\n\n        return true;\n    };\n\n    Selector.prototype.matchabilityChange = function (el, change) {\n        var isMatching = this.isMatching(el);\n        if (isMatching)\n            return this.wasMatching(el, change, isMatching) ? 2 /* STAYED_IN */ : 1 /* ENTERED */;\n        else\n            return this.wasMatching(el, change, isMatching) ? 5 /* EXITED */ : 0 /* STAYED_OUT */;\n    };\n\n    Selector.parseSelectors = function (input) {\n        var selectors = [];\n        var currentSelector;\n        var currentQualifier;\n\n        function newSelector() {\n            if (currentSelector) {\n                if (currentQualifier) {\n                    currentSelector.qualifiers.push(currentQualifier);\n                    currentQualifier = undefined;\n                }\n\n                selectors.push(currentSelector);\n            }\n            currentSelector = new Selector();\n        }\n\n        function newQualifier() {\n            if (currentQualifier)\n                currentSelector.qualifiers.push(currentQualifier);\n\n            currentQualifier = new Qualifier();\n        }\n\n        var WHITESPACE = /\\s/;\n        var valueQuoteChar;\n        var SYNTAX_ERROR = 'Invalid or unsupported selector syntax.';\n\n        var SELECTOR = 1;\n        var TAG_NAME = 2;\n        var QUALIFIER = 3;\n        var QUALIFIER_NAME_FIRST_CHAR = 4;\n        var QUALIFIER_NAME = 5;\n        var ATTR_NAME_FIRST_CHAR = 6;\n        var ATTR_NAME = 7;\n        var EQUIV_OR_ATTR_QUAL_END = 8;\n        var EQUAL = 9;\n        var ATTR_QUAL_END = 10;\n        var VALUE_FIRST_CHAR = 11;\n        var VALUE = 12;\n        var QUOTED_VALUE = 13;\n        var SELECTOR_SEPARATOR = 14;\n\n        var state = SELECTOR;\n        var i = 0;\n        while (i < input.length) {\n            var c = input[i++];\n\n            switch (state) {\n                case SELECTOR:\n                    if (c.match(validNameInitialChar)) {\n                        newSelector();\n                        currentSelector.tagName = c;\n                        state = TAG_NAME;\n                        break;\n                    }\n\n                    if (c == '*') {\n                        newSelector();\n                        currentSelector.tagName = '*';\n                        state = QUALIFIER;\n                        break;\n                    }\n\n                    if (c == '.') {\n                        newSelector();\n                        newQualifier();\n                        currentSelector.tagName = '*';\n                        currentQualifier.attrName = 'class';\n                        currentQualifier.contains = true;\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '#') {\n                        newSelector();\n                        newQualifier();\n                        currentSelector.tagName = '*';\n                        currentQualifier.attrName = 'id';\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '[') {\n                        newSelector();\n                        newQualifier();\n                        currentSelector.tagName = '*';\n                        currentQualifier.attrName = '';\n                        state = ATTR_NAME_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    throw Error(SYNTAX_ERROR);\n\n                case TAG_NAME:\n                    if (c.match(validNameNonInitialChar)) {\n                        currentSelector.tagName += c;\n                        break;\n                    }\n\n                    if (c == '.') {\n                        newQualifier();\n                        currentQualifier.attrName = 'class';\n                        currentQualifier.contains = true;\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '#') {\n                        newQualifier();\n                        currentQualifier.attrName = 'id';\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '[') {\n                        newQualifier();\n                        currentQualifier.attrName = '';\n                        state = ATTR_NAME_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE)) {\n                        state = SELECTOR_SEPARATOR;\n                        break;\n                    }\n\n                    if (c == ',') {\n                        state = SELECTOR;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case QUALIFIER:\n                    if (c == '.') {\n                        newQualifier();\n                        currentQualifier.attrName = 'class';\n                        currentQualifier.contains = true;\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '#') {\n                        newQualifier();\n                        currentQualifier.attrName = 'id';\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '[') {\n                        newQualifier();\n                        currentQualifier.attrName = '';\n                        state = ATTR_NAME_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE)) {\n                        state = SELECTOR_SEPARATOR;\n                        break;\n                    }\n\n                    if (c == ',') {\n                        state = SELECTOR;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case QUALIFIER_NAME_FIRST_CHAR:\n                    if (c.match(validNameInitialChar)) {\n                        currentQualifier.attrValue = c;\n                        state = QUALIFIER_NAME;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case QUALIFIER_NAME:\n                    if (c.match(validNameNonInitialChar)) {\n                        currentQualifier.attrValue += c;\n                        break;\n                    }\n\n                    if (c == '.') {\n                        newQualifier();\n                        currentQualifier.attrName = 'class';\n                        currentQualifier.contains = true;\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '#') {\n                        newQualifier();\n                        currentQualifier.attrName = 'id';\n                        state = QUALIFIER_NAME_FIRST_CHAR;\n                        break;\n                    }\n                    if (c == '[') {\n                        newQualifier();\n                        state = ATTR_NAME_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE)) {\n                        state = SELECTOR_SEPARATOR;\n                        break;\n                    }\n                    if (c == ',') {\n                        state = SELECTOR;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case ATTR_NAME_FIRST_CHAR:\n                    if (c.match(validNameInitialChar)) {\n                        currentQualifier.attrName = c;\n                        state = ATTR_NAME;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    throw Error(SYNTAX_ERROR);\n\n                case ATTR_NAME:\n                    if (c.match(validNameNonInitialChar)) {\n                        currentQualifier.attrName += c;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE)) {\n                        state = EQUIV_OR_ATTR_QUAL_END;\n                        break;\n                    }\n\n                    if (c == '~') {\n                        currentQualifier.contains = true;\n                        state = EQUAL;\n                        break;\n                    }\n\n                    if (c == '=') {\n                        currentQualifier.attrValue = '';\n                        state = VALUE_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c == ']') {\n                        state = QUALIFIER;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case EQUIV_OR_ATTR_QUAL_END:\n                    if (c == '~') {\n                        currentQualifier.contains = true;\n                        state = EQUAL;\n                        break;\n                    }\n\n                    if (c == '=') {\n                        currentQualifier.attrValue = '';\n                        state = VALUE_FIRST_CHAR;\n                        break;\n                    }\n\n                    if (c == ']') {\n                        state = QUALIFIER;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    throw Error(SYNTAX_ERROR);\n\n                case EQUAL:\n                    if (c == '=') {\n                        currentQualifier.attrValue = '';\n                        state = VALUE_FIRST_CHAR;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n\n                case ATTR_QUAL_END:\n                    if (c == ']') {\n                        state = QUALIFIER;\n                        break;\n                    }\n\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    throw Error(SYNTAX_ERROR);\n\n                case VALUE_FIRST_CHAR:\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    if (c == '\"' || c == \"'\") {\n                        valueQuoteChar = c;\n                        state = QUOTED_VALUE;\n                        break;\n                    }\n\n                    currentQualifier.attrValue += c;\n                    state = VALUE;\n                    break;\n\n                case VALUE:\n                    if (c.match(WHITESPACE)) {\n                        state = ATTR_QUAL_END;\n                        break;\n                    }\n                    if (c == ']') {\n                        state = QUALIFIER;\n                        break;\n                    }\n                    if (c == \"'\" || c == '\"')\n                        throw Error(SYNTAX_ERROR);\n\n                    currentQualifier.attrValue += c;\n                    break;\n\n                case QUOTED_VALUE:\n                    if (c == valueQuoteChar) {\n                        state = ATTR_QUAL_END;\n                        break;\n                    }\n\n                    currentQualifier.attrValue += c;\n                    break;\n\n                case SELECTOR_SEPARATOR:\n                    if (c.match(WHITESPACE))\n                        break;\n\n                    if (c == ',') {\n                        state = SELECTOR;\n                        break;\n                    }\n\n                    throw Error(SYNTAX_ERROR);\n            }\n        }\n\n        switch (state) {\n            case SELECTOR:\n            case TAG_NAME:\n            case QUALIFIER:\n            case QUALIFIER_NAME:\n            case SELECTOR_SEPARATOR:\n                // Valid end states.\n                newSelector();\n                break;\n            default:\n                throw Error(SYNTAX_ERROR);\n        }\n\n        if (!selectors.length)\n            throw Error(SYNTAX_ERROR);\n\n        return selectors;\n    };\n    Selector.nextUid = 1;\n    Selector.matchesSelector = (function () {\n        var element = document.createElement('div');\n        if (typeof element['webkitMatchesSelector'] === 'function')\n            return 'webkitMatchesSelector';\n        if (typeof element['mozMatchesSelector'] === 'function')\n            return 'mozMatchesSelector';\n        if (typeof element['msMatchesSelector'] === 'function')\n            return 'msMatchesSelector';\n\n        return 'matchesSelector';\n    })();\n    return Selector;\n})();\n\nvar attributeFilterPattern = /^([a-zA-Z:_]+[a-zA-Z0-9_\\-:\\.]*)$/;\n\nfunction validateAttribute(attribute) {\n    if (typeof attribute != 'string')\n        throw Error('Invalid request opion. attribute must be a non-zero length string.');\n\n    attribute = attribute.trim();\n\n    if (!attribute)\n        throw Error('Invalid request opion. attribute must be a non-zero length string.');\n\n    if (!attribute.match(attributeFilterPattern))\n        throw Error('Invalid request option. invalid attribute name: ' + attribute);\n\n    return attribute;\n}\n\nfunction validateElementAttributes(attribs) {\n    if (!attribs.trim().length)\n        throw Error('Invalid request option: elementAttributes must contain at least one attribute.');\n\n    var lowerAttributes = {};\n    var attributes = {};\n\n    var tokens = attribs.split(/\\s+/);\n    for (var i = 0; i < tokens.length; i++) {\n        var name = tokens[i];\n        if (!name)\n            continue;\n\n        var name = validateAttribute(name);\n        var nameLower = name.toLowerCase();\n        if (lowerAttributes[nameLower])\n            throw Error('Invalid request option: observing multiple case variations of the same attribute is not supported.');\n\n        attributes[name] = true;\n        lowerAttributes[nameLower] = true;\n    }\n\n    return Object.keys(attributes);\n}\n\nfunction elementFilterAttributes(selectors) {\n    var attributes = {};\n\n    selectors.forEach(function (selector) {\n        selector.qualifiers.forEach(function (qualifier) {\n            attributes[qualifier.attrName] = true;\n        });\n    });\n\n    return Object.keys(attributes);\n}\n\nvar MutationSummary = (function () {\n    function MutationSummary(opts) {\n        var _this = this;\n        this.connected = false;\n        this.options = MutationSummary.validateOptions(opts);\n        this.observerOptions = MutationSummary.createObserverOptions(this.options.queries);\n        this.root = this.options.rootNode;\n        this.callback = this.options.callback;\n\n        this.elementFilter = Array.prototype.concat.apply([], this.options.queries.map(function (query) {\n            return query.elementFilter ? query.elementFilter : [];\n        }));\n        if (!this.elementFilter.length)\n            this.elementFilter = undefined;\n\n        this.calcReordered = this.options.queries.some(function (query) {\n            return query.all;\n        });\n\n        this.queryValidators = []; // TODO(rafaelw): Shouldn't always define this.\n        if (MutationSummary.createQueryValidator) {\n            this.queryValidators = this.options.queries.map(function (query) {\n                return MutationSummary.createQueryValidator(_this.root, query);\n            });\n        }\n\n        this.observer = new MutationObserverCtor(function (mutations) {\n            _this.observerCallback(mutations);\n        });\n\n        this.reconnect();\n    }\n    MutationSummary.createObserverOptions = function (queries) {\n        var observerOptions = {\n            childList: true,\n            subtree: true\n        };\n\n        var attributeFilter;\n        function observeAttributes(attributes) {\n            if (observerOptions.attributes && !attributeFilter)\n                return;\n\n            observerOptions.attributes = true;\n            observerOptions.attributeOldValue = true;\n\n            if (!attributes) {\n                // observe all.\n                attributeFilter = undefined;\n                return;\n            }\n\n            // add to observed.\n            attributeFilter = attributeFilter || {};\n            attributes.forEach(function (attribute) {\n                attributeFilter[attribute] = true;\n                attributeFilter[attribute.toLowerCase()] = true;\n            });\n        }\n\n        queries.forEach(function (query) {\n            if (query.characterData) {\n                observerOptions.characterData = true;\n                observerOptions.characterDataOldValue = true;\n                return;\n            }\n\n            if (query.all) {\n                observeAttributes();\n                observerOptions.characterData = true;\n                observerOptions.characterDataOldValue = true;\n                return;\n            }\n\n            if (query.attribute) {\n                observeAttributes([query.attribute.trim()]);\n                return;\n            }\n\n            var attributes = elementFilterAttributes(query.elementFilter).concat(query.attributeList || []);\n            if (attributes.length)\n                observeAttributes(attributes);\n        });\n\n        if (attributeFilter)\n            observerOptions.attributeFilter = Object.keys(attributeFilter);\n\n        return observerOptions;\n    };\n\n    MutationSummary.validateOptions = function (options) {\n        for (var prop in options) {\n            if (!(prop in MutationSummary.optionKeys))\n                throw Error('Invalid option: ' + prop);\n        }\n\n        if (typeof options.callback !== 'function')\n            throw Error('Invalid options: callback is required and must be a function');\n\n        if (!options.queries || !options.queries.length)\n            throw Error('Invalid options: queries must contain at least one query request object.');\n\n        var opts = {\n            callback: options.callback,\n            rootNode: options.rootNode || document,\n            observeOwnChanges: !!options.observeOwnChanges,\n            oldPreviousSibling: !!options.oldPreviousSibling,\n            queries: []\n        };\n\n        for (var i = 0; i < options.queries.length; i++) {\n            var request = options.queries[i];\n\n            // all\n            if (request.all) {\n                if (Object.keys(request).length > 1)\n                    throw Error('Invalid request option. all has no options.');\n\n                opts.queries.push({ all: true });\n                continue;\n            }\n\n            // attribute\n            if ('attribute' in request) {\n                var query = {\n                    attribute: validateAttribute(request.attribute)\n                };\n\n                query.elementFilter = Selector.parseSelectors('*[' + query.attribute + ']');\n\n                if (Object.keys(request).length > 1)\n                    throw Error('Invalid request option. attribute has no options.');\n\n                opts.queries.push(query);\n                continue;\n            }\n\n            // element\n            if ('element' in request) {\n                var requestOptionCount = Object.keys(request).length;\n                var query = {\n                    element: request.element,\n                    elementFilter: Selector.parseSelectors(request.element)\n                };\n\n                if (request.hasOwnProperty('elementAttributes')) {\n                    query.attributeList = validateElementAttributes(request.elementAttributes);\n                    requestOptionCount--;\n                }\n\n                if (requestOptionCount > 1)\n                    throw Error('Invalid request option. element only allows elementAttributes option.');\n\n                opts.queries.push(query);\n                continue;\n            }\n\n            // characterData\n            if (request.characterData) {\n                if (Object.keys(request).length > 1)\n                    throw Error('Invalid request option. characterData has no options.');\n\n                opts.queries.push({ characterData: true });\n                continue;\n            }\n\n            throw Error('Invalid request option. Unknown query request.');\n        }\n\n        return opts;\n    };\n\n    MutationSummary.prototype.createSummaries = function (mutations) {\n        if (!mutations || !mutations.length)\n            return [];\n\n        var projection = new MutationProjection(this.root, mutations, this.elementFilter, this.calcReordered, this.options.oldPreviousSibling);\n\n        var summaries = [];\n        for (var i = 0; i < this.options.queries.length; i++) {\n            summaries.push(new Summary(projection, this.options.queries[i]));\n        }\n\n        return summaries;\n    };\n\n    MutationSummary.prototype.checkpointQueryValidators = function () {\n        this.queryValidators.forEach(function (validator) {\n            if (validator)\n                validator.recordPreviousState();\n        });\n    };\n\n    MutationSummary.prototype.runQueryValidators = function (summaries) {\n        this.queryValidators.forEach(function (validator, index) {\n            if (validator)\n                validator.validate(summaries[index]);\n        });\n    };\n\n    MutationSummary.prototype.changesToReport = function (summaries) {\n        return summaries.some(function (summary) {\n            var summaryProps = [\n                'added', 'removed', 'reordered', 'reparented',\n                'valueChanged', 'characterDataChanged'];\n            if (summaryProps.some(function (prop) {\n                return summary[prop] && summary[prop].length;\n            }))\n                return true;\n\n            if (summary.attributeChanged) {\n                var attrNames = Object.keys(summary.attributeChanged);\n                var attrsChanged = attrNames.some(function (attrName) {\n                    return !!summary.attributeChanged[attrName].length;\n                });\n                if (attrsChanged)\n                    return true;\n            }\n            return false;\n        });\n    };\n\n    MutationSummary.prototype.observerCallback = function (mutations) {\n        if (!this.options.observeOwnChanges)\n            this.observer.disconnect();\n\n        var summaries = this.createSummaries(mutations);\n        this.runQueryValidators(summaries);\n\n        if (this.options.observeOwnChanges)\n            this.checkpointQueryValidators();\n\n        if (this.changesToReport(summaries))\n            this.callback(summaries);\n\n        // disconnect() may have been called during the callback.\n        if (!this.options.observeOwnChanges && this.connected) {\n            this.checkpointQueryValidators();\n            this.observer.observe(this.root, this.observerOptions);\n        }\n    };\n\n    MutationSummary.prototype.reconnect = function () {\n        if (this.connected)\n            throw Error('Already connected');\n\n        this.observer.observe(this.root, this.observerOptions);\n        this.connected = true;\n        this.checkpointQueryValidators();\n    };\n\n    MutationSummary.prototype.takeSummaries = function () {\n        if (!this.connected)\n            throw Error('Not connected');\n\n        var summaries = this.createSummaries(this.observer.takeRecords());\n        return this.changesToReport(summaries) ? summaries : undefined;\n    };\n\n    MutationSummary.prototype.disconnect = function () {\n        var summaries = this.takeSummaries();\n        this.observer.disconnect();\n        this.connected = false;\n        return summaries;\n    };\n    MutationSummary.NodeMap = NodeMap;\n    MutationSummary.NodeIdMap = NodeIdMap;\n    MutationSummary.parseElementFilter = Selector.parseSelectors;\n\n    MutationSummary.optionKeys = {\n        'callback': true,\n        'queries': true,\n        'rootNode': true,\n        'oldPreviousSibling': true,\n        'observeOwnChanges': true\n    };\n    return MutationSummary;\n})();\n\n"
  },
  {
    "path": "portiaui/vendor/tree-mirror.js",
    "content": "///<reference path='../src/mutation-summary.ts'/>\n\nvar TreeMirror = (function () {\n    function TreeMirror(root, delegate) {\n        this.root = root;\n        this.delegate = delegate;\n        this.idMap = {};\n    }\n    TreeMirror.prototype.initialize = function (rootId, children, baseURI) {\n        this.baseURI = baseURI;\n        this.idMap[rootId] = this.root;\n\n        for (var i = 0; i < children.length; i++)\n            this.deserializeNode(children[i], this.root);\n    };\n\n    TreeMirror.prototype.applyChanged = function (removed, addedOrMoved, attributes, text) {\n        var _this = this;\n        // NOTE: Applying the changes can result in an attempting to add a child\n        // to a parent which is presently an ancestor of the parent. This can occur\n        // based on random ordering of moves. The way we handle this is to first\n        // remove all changed nodes from their parents, then apply.\n        addedOrMoved.forEach(function (data) {\n            var node = _this.deserializeNode(data);\n            var parent = _this.deserializeNode(data.parentNode);\n            var previous = _this.deserializeNode(data.previousSibling);\n            if (node.parentNode)\n                node.parentNode.removeChild(node);\n        });\n\n        removed.forEach(function (data) {\n            var node = _this.deserializeNode(data);\n            if (node.parentNode)\n                node.parentNode.removeChild(node);\n        });\n\n        addedOrMoved.forEach(function (data) {\n            var node = _this.deserializeNode(data);\n            var parent = _this.deserializeNode(data.parentNode);\n            var previous = _this.deserializeNode(data.previousSibling);\n            parent.insertBefore(node, previous ? previous.nextSibling : parent.firstChild);\n        });\n\n        attributes.forEach(function (data) {\n            var node = _this.deserializeNode(data);\n            Object.keys(data.attributes).forEach(function (attrName) {\n                var newVal = data.attributes[attrName];\n                if (newVal === null) {\n                    node.removeAttribute(attrName);\n                } else {\n                    if (!_this.delegate || !_this.delegate.setAttribute || !_this.delegate.setAttribute(node, attrName, newVal)) {\n                        node.setAttribute(attrName, newVal);\n                    }\n                }\n            });\n        });\n\n        text.forEach(function (data) {\n            var node = _this.deserializeNode(data);\n            node.textContent = data.textContent;\n        });\n\n        removed.forEach(function (node) {\n            delete _this.idMap[node.id];\n        });\n    };\n\n    TreeMirror.prototype.deserializeNode = function (nodeData, parent) {\n        var _this = this;\n        if (nodeData === null)\n            return null;\n\n        var node = this.idMap[nodeData.id];\n        if (node)\n            return node;\n\n        var doc = this.root.ownerDocument;\n        if (doc === null)\n            doc = this.root;\n\n        switch (nodeData.nodeType) {\n            case Node.COMMENT_NODE:\n                node = doc.createComment(nodeData.textContent);\n                break;\n\n            case Node.TEXT_NODE:\n                node = doc.createTextNode(nodeData.textContent);\n                break;\n\n            case Node.DOCUMENT_TYPE_NODE:\n                try {\n                    node = doc.implementation.createDocumentType(nodeData.name, nodeData.publicId, nodeData.systemId);\n                } catch (e) {\n                    // Ignore error from incorrect document type\n                }\n                break;\n\n            case Node.ELEMENT_NODE:\n                if (this.delegate && this.delegate.createElement)\n                    node = this.delegate.createElement(nodeData.tagName);\n                if (!node)\n                    node = doc.createElement(nodeData.tagName);\n                node.setAttribute('data-tagid', nodeData.id);\n\n                Object.keys(nodeData.attributes).forEach(function (name) {\n                    if (!_this.delegate || !_this.delegate.setAttribute || !_this.delegate.setAttribute(node, name, nodeData.attributes[name])) {\n                        node.setAttribute(name, nodeData.attributes[name]);\n                    }\n                });\n\n                break;\n        }\n\n        if (!node) {\n            throw new Error(\"No node with that id.\");\n        }\n\n        this.idMap[nodeData.id] = node;\n        node.nodeid = nodeData.id;\n\n        if (parent)\n            parent.appendChild(node);\n\n        if (nodeData.childNodes) {\n            for (var i = 0; i < nodeData.childNodes.length; i++)\n                this.deserializeNode(nodeData.childNodes[i], node);\n        }\n\n        return node;\n    };\n    return TreeMirror;\n})();\n\nvar URL_ATTRIBUTES = {\n    img_src: true,\n    link_href: true,\n    input_src: true,\n    body_background: true,\n    table_background: true,\n    td_background: true,\n    tr_background: true,\n    th_background: true,\n    tbody_background: true,\n    thead_background: true,\n    tfoot_background: true,\n    col_background: true,\n    colgroup_background: true,\n    section_background: true,\n    head_profile: true,\n    html_manifest: true,\n    command_icon: true,\n    embed_src: true,\n    object_data: true,\n    video_poster: true,\n    form_action: true,\n    iframe_src: true\n};\nfunction isUrlAttribute(tagName, attribute) {\n    var key = tagName.toLowerCase() + '_' + attribute.toLowerCase();\n    return URL_ATTRIBUTES[key] || false;\n}\n\nvar TreeMirrorClient = (function () {\n    function TreeMirrorClient(target, mirror, testingQueries) {\n        var _this = this;\n        this.target = target;\n        this.mirror = mirror;\n        this.nextId = 1;\n        this.knownNodes = new MutationSummary.NodeIdMap();\n        //this.knownNodes = new MutationSummary.NodeMap();\n\n        var rootId = this.serializeNode(target).id;\n        var children = [];\n        for (var child = target.firstChild; child; child = child.nextSibling)\n            children.push(this.serializeNode(child, true));\n\n        this.mirror.initialize(rootId, children, target.baseURI);\n\n        var self = this;\n\n        var queries = [{ all: true }];\n\n        if (testingQueries)\n            queries = queries.concat(testingQueries);\n\n        this.mutationSummary = new MutationSummary({\n            rootNode: target,\n            callback: function (summaries) {\n                try {\n                    _this.applyChanged(summaries);\n                } catch (e) {\n                    if (e.message !== 'No node with that id') {\n                        throw e;\n                    }\n                }\n            },\n            queries: queries\n        });\n    }\n    TreeMirrorClient.prototype.disconnect = function () {\n        if (this.mutationSummary) {\n            this.mutationSummary.disconnect();\n            this.mutationSummary = undefined;\n        }\n    };\n\n    TreeMirrorClient.prototype.rememberNode = function (node) {\n        var id = this.nextId++;\n        this.knownNodes.set(node, id);\n        return id;\n    };\n\n    TreeMirrorClient.prototype.forgetNode = function (node) {\n        this.knownNodes.delete(node);\n    };\n\n    TreeMirrorClient.prototype.serializeAttribute = function (node, attr, obj) {\n        var value = node.getAttribute(attr);\n        var tagName = node.tagName;\n\n        if(value === null) {\n            obj[attr] = null; // Attribute was removed\n            obj['data-portia-' + attr] = null;\n        } else if(attr === \"style\"){\n            obj[attr] = __portiaApi.processCss(value, node.baseURI);\n            obj['data-portia-' + attr] = value;\n        } else if (attr === 'srcset' && tagName === 'IMG') {\n            var split_attr = value.split(',')\n            for (var i=0; i < split_attr.length; i++) {\n                split_attr[i] = __portiaApi.wrapUrl(\n                    split_attr[i].trim(),\n                    node.baseURI);\n            }\n            obj[attr] = split_attr.join(', ')\n            obj['data-portia-' + attr] = value;\n        } else if (isUrlAttribute(tagName, attr)){\n            obj[attr] = __portiaApi.wrapUrl(value, node.baseURI);\n            obj['data-portia-' + attr] = value;\n        } else if (tagName === 'A' && attr === 'href') {\n            value = node.href;\n            if(!value || /^\\s*javascript:/i.test(value)){\n                obj[attr] = 'javascript:void(0)';\n                obj['data-portia-' + attr] = value;\n            } else {\n                obj[attr] = value;\n            }\n        } else {\n            obj[attr] = value;\n        }\n    };\n\n    TreeMirrorClient.prototype.serializeNode = function (node, recursive) {\n        if (node === null)\n            return null;\n\n        var id = this.knownNodes.get(node);\n        if (id !== undefined) {\n            return { id: id };\n        }\n\n        var data = {\n            nodeType: node.nodeType,\n            id: this.rememberNode(node)\n        };\n\n\n        switch (data.nodeType) {\n            case Node.DOCUMENT_TYPE_NODE:\n                var docType = node;\n                data.name = docType.name;\n                data.publicId = docType.publicId;\n                data.systemId = docType.systemId;\n                break;\n\n            case Node.COMMENT_NODE:\n            case Node.TEXT_NODE:\n                data.textContent = node.textContent;\n                if(node.parentNode && node.parentNode.tagName == \"STYLE\"){\n                    data.textContent = __portiaApi.processCss(data.textContent, node.baseURI);\n                }\n                break;\n\n            case Node.ELEMENT_NODE:\n                var elm = node;\n                data.tagName = elm.tagName;\n                data.attributes = {};\n                for (var i = 0; i < elm.attributes.length; i++) {\n                    var attr = elm.attributes[i];\n                    this.serializeAttribute(node, attr.name, data.attributes);\n                }\n\n                if (recursive && elm.childNodes.length) {\n                    data.childNodes = [];\n\n                    for (var child = elm.firstChild; child; child = child.nextSibling)\n                        data.childNodes.push(this.serializeNode(child, true));\n                }\n                break;\n        }\n\n        return data;\n    };\n\n    TreeMirrorClient.prototype.serializeAddedAndMoved = function (added, reparented, reordered) {\n        var _this = this;\n        var all = added.concat(reparented).concat(reordered);\n\n        var parentMap = new MutationSummary.NodeMap();\n\n        all.forEach(function (node) {\n            var parent = node.parentNode;\n            var children = parentMap.get(parent);\n            if (!children) {\n                children = new MutationSummary.NodeMap();\n                parentMap.set(parent, children);\n            }\n\n            children.set(node, true);\n        });\n\n        var moved = [];\n\n        parentMap.keys().forEach(function (parent) {\n            var children = parentMap.get(parent);\n\n            var keys = children.keys();\n            while (keys.length) {\n                var node = keys[0];\n                while (node.previousSibling && children.has(node.previousSibling))\n                    node = node.previousSibling;\n\n                while (node && children.has(node)) {\n                    var data = _this.serializeNode(node);\n                    data.previousSibling = _this.serializeNode(node.previousSibling);\n                    data.parentNode = _this.serializeNode(node.parentNode);\n                    moved.push(data);\n                    children.delete(node);\n                    node = node.nextSibling;\n                }\n\n                var keys = children.keys();\n            }\n        });\n\n        return moved;\n    };\n\n    TreeMirrorClient.prototype.serializeAttributeChanges = function (attributeChanged) {\n        var _this = this;\n        var map = new MutationSummary.NodeMap();\n\n        Object.keys(attributeChanged).forEach(function (attrName) {\n            (attributeChanged[attrName] || []).forEach(function (element) {\n                var record = map.get(element);\n                if (!record) {\n                    record = _this.serializeNode(element);\n                    record.attributes = {};\n                    map.set(element, record);\n                }\n\n                _this.serializeAttribute(element, attrName, record.attributes);\n            });\n        });\n\n        return map.keys().map(function (node) {\n            return map.get(node);\n        });\n    };\n\n    TreeMirrorClient.prototype.applyChanged = function (summaries) {\n        var _this = this;\n        var summary = summaries[0];\n\n        var removed = summary.removed.map(function (node) {\n            return _this.serializeNode(node);\n        });\n\n        var moved = this.serializeAddedAndMoved(summary.added, summary.reparented, summary.reordered);\n\n        var attributes = this.serializeAttributeChanges(summary.attributeChanged);\n\n        var text = summary.characterDataChanged.map(function (node) {\n            var data = _this.serializeNode(node);\n            data.textContent = node.textContent;\n            return data;\n        });\n\n        this.mirror.applyChanged(removed, moved, attributes, text);\n\n        summary.removed.forEach(function (node) {\n            _this.forgetNode(node);\n        });\n    };\n    return TreeMirrorClient;\n})();\n"
  },
  {
    "path": "slybot/.gitignore",
    "content": "*.pyc\ndocs/_build\nslybot.egg-info/\n"
  },
  {
    "path": "slybot/CHANGES",
    "content": "Slybot 0.13.3\n\nUpdate slybot to work with python 3.7 and Scrapy 1.6\n\nSlybot 0.13.2\n\nAllow default spidermanager to load zipfiles\n\nSlybot 0.13.1\n\nChoose parent of first extracted repeated item for parent region\nDrop empty fields if css extraction fails\nHandle requests through Splash in python 3\n\nSlybot 0.13.0\n\nUpdate slybot to use the most recent libraries\nAdd a DropMetaPipeline to remove unwanted meta fields from items\nAllow `\\r` character to be used in start url feeds\nUse `rendered_html` when building sample if JS enabled\nLimit CSS selector annotations to a single element\nAllow scrapy shell to find a spider if the name matches the url hostname\n\nSlybot 0.13.0b37\n\nDo not create repeated extractor for CSS/XPath annotations\nHandle parsing Empty HTML response without raising error\nHandle malformed JSON annotation due to invalid HTML\nMerge fields extracted with the same name instead of deleting them\n\nSlybot 0.13.0b36\n\nFix python 3 compatibility\nFix extraction from splash when using default script for `execute` endpoint\n\nSlybot 0.13.0b35\nCache selector searches for container to increase sample build speed\nBetter handle XML responses\nUse extract endpoint for spiders using splash\nStore and load cookies when using splash\nFix error when loading broken samples in Portia UI\nFix bytes/unicode issue with regex extractor `__name__`\nFix error thrown for missing annotation data in sample when finding schema\n\nSlybot 0.13.0b34\n    Fix error when building legacy spiders\n\nSlybot 0.13.0b33\n    Add serializer for datetime objects when they are being exported\n    Handle malformed data when building selector\n    Add chardet as slybot requirement\n    Find element for container if it is missing\n    Do not re-encode or decode binary or text data.\n    Remove duplication by using Storage Abstraction for loading spiders.\n\nSlybot 0.13.0b32\n    Fix bug with url following\n    Improve migration for spiders using tables\n    Change spider loading to be lazy to improve performance when starting spider\n    Do not replace named html entities in urls\n    Use an empty collection of annotations if none found during migration\n\nSlybot 0.13.0b31\n    Do not require portia repo to build slybot distribution\n\nSlybot 0.13.0b30\n    Add legacy compile mode for samples\n\nSlybot 0.13.0b29\n    Allow arbitrary nesting Allow annotations and containers to share an element\n\nSlybot 0.13.0b28\n    Handle required fields from schemas in item processor\n    Extract CSS and XPath in the SlybotIBLExtractor\n    Run item validation in the SlybotIBLExtractor\n    Fix nested items using item processor\n    Add `annotated` flag to samples to avoid rebuilding samples\n\nSlybot 0.13.0b27\n    Remove tags from html content Extract raw html when using css selectors\n    Fix unicode bug\n    Handle invalid selectors gracefully\n    Do not extract items with only meta fields and url\n\nSlybot 0.13.0b26\n     Fix issue with empty css selectors\n     Change IblItem to be a subclass of scrapy.Item\n\nSlybot 0.13.0b25\n    Add configurable jump sizes and separators for repeated annotations\n    Add ItemProcessor and selector handling to non repeated items\n    Shorten specialised selectors when building sample if no elements found\n    Clean up some tests\n\nSlybot 0.13.0b24\n    Add ability to extract CSS and XPath selectors as part of items\n    Fix issue where base url is terminated by backslash\n    Fix closing unclosed annotation tag during template parsing\n\nSlybot 0.13.0b23\n    Add FeedGenerator\n\nSlybot 0.13.0b22\n    Add Normalization for generated and normal urls\n    Add body field to samples (used to decide is JS is used or not)\n    Repair annotation ids if they have been truncated\n    Repair missing fields in annotations\n    Create deterministic id generator so fields can be \"re-created\"\n    Save schemas  after creating missing fields and schemas\n    Handle missing extractors while porting samples\n    Return `None, None` instead of `None` for error when finding element\n    Fix bug in repeated field extractor\n    Fix error when creating item with single repeated field\n    Remove reverences to `accept_selectors` and `reject_selectors`\n\nSlybot 0.13.0b21\n    Improve repeated fields for slybot\n    Extract repeated lists of values\n    Container can only extract a single item unless it wraps a repeated container\n    Better handle cases where not all repeated items have all fields\n    Fixed printing error with BaseExtractor\n    Removed legacy support (legacy now uses scrapely.InstanceBasedLearningExtractor)\n    Log slybot version when using spidermanager\n    Add samples to train page clustering on subsequest crawls\n    Add samples to train page clustering on subsequest crawls\n\nSlybot 0.13.0b20\n    Allow slybot to be userd with scrapy<1.1.0\n\nSlybot 0.13.0b19\n    Better template matching\n    Update project url in setup.py\n    Add missing dependency in setup.py\n    Fix multiple containers in a single sample\n    Fix dupefilter fallback to different schema error\n    add annotated_body to sample if not present\n\nSlybot 0.13.0b18\n    Add selectors to annotation metadata.\n    Fix extraction issue.\n\nSlybot 0.13.0b17\n    Selectors correctly generated in the presence of HTML comments\n    Pagination link extractor now uses start_urls from spec to specify links to follow\n    Corrected bug that manifested when extracting items with more than one sibling\n\nSlybot 0.13.0b16\n    Add trigger in spec for `page_finder` algorithm for extraction\n    Fix bug where `None` can be passed to strip_url in image extractor\n\nSlybot 0.13.0b15\n    Add ability to adjust splash wait time\n\nSlybot 0.13.0b14\n    Fix per annotation requireds\n    Fix problem with suffix when extracting final item\n    Convert old style annotation to new style annotation when merging annotations\n\nSlybot 0.13.0b13\n    Change unicode to HtmlPageRegion when using type extractors\n    Add schema for generated_urls\n\nSlybot 0.13.0b12\n    Merge annotations pointing to single element\n\nSlybot 0.13.0b11\n    Add start urls generation\n    Fix per annotation requireds\n    Fix illegal characters in urls\n    Change speed test iterations using `SLYBOT_SPEED_TEST_ITERATIONS` env variable\n    Refactor spider init\n    Improve tests\n\nSlybot 0.13.0b10\n    Add extractors to descriptors\n    Check for required fields using fields ids\n    Allow `null` value for `allowed_domains`\n\nSlybot 0.13.0b9\n    Build all new samples when starting spider\n    Do not throw error when fields are missing from item\n\nSlybot 0.13.0b8\n\n    Limit domains to template and start url hosts if `allowed_domains` is empty\n    Do not drop items after first item if `version_fields` are empty\n\nSlybot 0.13.0b7\n    Create ScrapyItem correctly if no item found\n\nSlybot 0.13.0b6\n    Add `_type` field to ScrapyItem created from dict\n\nSlybot 0.13.0b5\n    Fallback for older projects\n\nSlybot 0.13.0b4\n    Fix off by one error for generated annotations.\n    Process variant fields\n\nSlybot 0.13.0b3\n    Add legacy support for variants\n\nSlybot 0.13.0b2\n    Fix nested items structure.\n    Use live page while annotating and stored page when building annotated_body\n    Move migration code to slybot\n\nSlybot 0.13.0b1\n    Add Multiple item extraction.\n    Add support for nested items.\n    Add extractors backend.\n    Add per annotation extractors rather than per field.\n    Add support for annotation `selector` field when building annotated body.\n    Add latest items and extractors when extracting data during annotation.\n    Add variant extractors.\n    Add pagination link extractor.\n    Add support for atom, rss and xml sitemaps.\n    Add algorithm for calculating containers and siblings.\n    Add saving for page HTML when creating sample.\n    Add ability to rename fields.\n    Add backwards compatability to sample.\n    Add selectors to existing annotations.\n    Add pre and post text to generated annotations.\n    Fix instantiate Annotations class.\n    Fix issuse where default scrapely RecordExtractor fails.\n    Port sample if it has a version less than 0.13.0.\n    Strip whitespace from uris.\n    Make htmlpage optional for type adapters.\n    Use type extractors and adapters correctly.\n    Change annotation format to allow extracting a single attribute to many fields.\n    When loading template add annotation text to annotations with pre and post text.\n    Loop over elements iterator rather than using map function.\n    Add `all` option to `links_to_follow`.\n    Save HTML and update annotations correctly.\n"
  },
  {
    "path": "slybot/MANIFEST.in",
    "content": "include README.rst\ninclude requirements.txt\ninclude slybot/validation/schemas.json\ninclude slybot/splash-script-combined.js\n"
  },
  {
    "path": "slybot/Makefile.buildbot",
    "content": "build:\n\tbin/makedeb\n"
  },
  {
    "path": "slybot/README.rst",
    "content": "==============\nSlybot crawler\n==============\n\nSlybot is a Python web crawler for doing web scraping. It's implemented on top of the\n`Scrapy`_ web crawling framework and the `Scrapely`_ extraction library.\n\nThe documentation (including installation and usage) can be found at:\nhttp://slybot.readthedocs.org/\n\n.. _Scrapely: https://github.com/scrapy/scrapely\n.. _Scrapy: http://scrapy.org\n"
  },
  {
    "path": "slybot/bin/makedeb",
    "content": "#!/bin/sh\n\nversion=$(python setup.py --version)-r$(git log --oneline | wc -l)+$(date +%Y%m%d%H%M)~$(git rev-parse --short HEAD)${BUILD_CODE:+~$BUILD_CODE}\ndebchange -m -D unstable --force-distribution -v $version \"Automatic build\"\ndebuild --no-lintian -us -uc -b\n"
  },
  {
    "path": "slybot/bin/portiacrawl",
    "content": "#!/usr/bin/env python3\n\"\"\"Allow to easily run slybot spiders on console. If spider is not given, print a list of available spiders inside the project\"\"\"\nimport os\nimport subprocess\nfrom optparse import OptionParser\n\ndef main():\n    parser = OptionParser(description=__doc__,\n            usage=\"%prog <project dir/project zip> [spider] [options]\")\n    parser.add_option(\"--settings\", help=\"Give specific settings module (must be on python path)\", default='slybot.settings')\n    parser.add_option(\"--logfile\", help=\"Specify log file\")\n    parser.add_option(\"-a\", help=\"Add spider arguments\", dest=\"spargs\", action=\"append\", default=[], metavar=\"NAME=VALUE\")\n    parser.add_option(\"-s\", help=\"Add extra scrapy settings\", dest=\"extra_settings\", action=\"append\", default=[], metavar=\"NAME=VALUE\")\n    parser.add_option(\"--output\", \"-o\", help='dump scraped items into FILE (use - for stdout)', metavar='FILE')\n    parser.add_option(\"--output-format\", \"-t\", metavar='FORMAT', help='format to use for dumping items with -o (default: jsonlines)')\n    parser.add_option(\"--verbose\", \"-v\", action=\"store_true\", default=False, help=\"more verbose\")\n\n    opts, args = parser.parse_args()\n\n    try:\n        project_specs = args[0]\n        if not os.path.exists(project_specs) or len(args) > 2:\n            parser.print_help()\n            return\n    except IndexError:\n        parser.print_help()\n        return\n\n\n    if opts.settings:\n        os.environ[\"SCRAPY_SETTINGS_MODULE\"] = opts.settings\n\n    command_spec = [\"scrapy\", \"crawl\", args[1]] if len(args) == 2 else [\"scrapy\", \"list\"]\n    if project_specs.endswith(\".zip\"):\n        command_spec.extend([\n            \"-s\", \"PROJECT_DIR=%s\" % project_specs,\n            \"-s\", \"SPIDER_MANAGER_CLASS=slybot.spidermanager.SlybotSpiderManager\",\n        ])\n    else:\n        command_spec.extend([\n            \"-s\", \"PROJECT_DIR=%s\" % project_specs,\n            \"-s\", \"SPIDER_LOADER_CLASS=slybot.spidermanager.SlybotSpiderManager\",\n        ])\n\n    if opts.logfile:\n        command_spec.append(\"--logfile=%s\" % opts.logfile)\n    if opts.output:\n        command_spec.append(\"--output=%s\" % opts.output)\n    if opts.output_format:\n        command_spec.append(\"--output-format=%s\" % opts.output_format)\n\n    for sparg in opts.spargs:\n        command_spec.append(\"-a\")\n        command_spec.append(sparg)\n\n    for setting in opts.extra_settings:\n        command_spec.append(\"-s\")\n        command_spec.append(setting)\n\n    if opts.verbose:\n        print(\" \".join(command_spec))\n\n    subprocess.call(command_spec)\n\nmain()\n"
  },
  {
    "path": "slybot/bin/slybot",
    "content": "#!/usr/bin/env python3\nimport os\nos.environ['SCRAPY_SETTINGS_MODULE'] = 'slybot.settings'\n\nfrom scrapy.cmdline import execute\nexecute()\n"
  },
  {
    "path": "slybot/debian/changelog",
    "content": "python-slybot (0.9) unstable; urgency=low\n\n  * Initial release.\n\n -- Scrapinghub Team <info@scrapinghub.com>  Wed, 31 Oct 2012 16:32:13 -0300\n"
  },
  {
    "path": "slybot/debian/compat",
    "content": "7\n"
  },
  {
    "path": "slybot/debian/control",
    "content": "Source: python-slybot\nSection: python\nPriority: extra\nMaintainer: Scrapinghub Team <info@scrapinghub.com>\nBuild-Depends: debhelper (>= 7), python (>=2.7)\nStandards-Version: 3.8.3\nHomepage: https://github.com/scrapinghub/portia\n\nPackage: python-slybot\nArchitecture: all\nDepends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends},\n scrapy (>= 1.0.3.post6),\n python-scrapely,\n python-loginform,\n python-lxml,\n python-dateparser,\n python-scrapy-splash,\n python-page-finder\nDescription: A web crawler implemented in Python.\n Slybot is a Python web crawler for doing web scraping. It's implemented on top\n of the Scrapy web crawling framework and the Scrapely extraction library.\n"
  },
  {
    "path": "slybot/debian/copyright",
    "content": "Copyright (C) 2011-2012 Scrapinghub\n"
  },
  {
    "path": "slybot/debian/pyversions",
    "content": "2.5-\n"
  },
  {
    "path": "slybot/debian/rules",
    "content": "#!/usr/bin/make -f\n# -*- makefile -*-\n# Sample debian/rules that uses debhelper.\n# This file was originally written by Joey Hess and Craig Small.\n# As a special exception, when this file is copied by dh-make into a\n# dh-make output file, you may use that output file without restriction.\n# This special exception was added by Craig Small in version 0.37 of dh-make.\n\n# Uncomment this to turn on verbose mode.\n#export DH_VERBOSE=1\n\n%:\n\tdh  $@\n"
  },
  {
    "path": "slybot/docs/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n# the i18n builder cannot share the environment and doctrees with the others\nI18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  texinfo    to make Texinfo files\"\n\t@echo \"  info       to make Texinfo files and run them through makeinfo\"\n\t@echo \"  gettext    to make PO message catalogs\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\t-rm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/Slybot.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/Slybot.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/Slybot\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Slybot\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\t$(MAKE) -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\ntexinfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo\n\t@echo \"Build finished. The Texinfo files are in $(BUILDDIR)/texinfo.\"\n\t@echo \"Run \\`make' in that directory to run these through makeinfo\" \\\n\t      \"(use \\`make info' here to do that automatically).\"\n\ninfo:\n\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo\n\t@echo \"Running Texinfo files through makeinfo...\"\n\tmake -C $(BUILDDIR)/texinfo info\n\t@echo \"makeinfo finished; the Info files are in $(BUILDDIR)/texinfo.\"\n\ngettext:\n\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale\n\t@echo\n\t@echo \"Build finished. The message catalogs are in $(BUILDDIR)/locale.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n\nhtmlview: html\n\tpython -c \"import webbrowser; webbrowser.open('_build/html/index.html')\"\n"
  },
  {
    "path": "slybot/docs/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Slybot documentation build configuration file, created by\n# sphinx-quickstart on Thu Aug 22 10:19:15 2013.\n#\n# This file is execfile()d with the current directory set to its containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys, os\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#sys.path.insert(0, os.path.abspath('.'))\n\n# -- General configuration -----------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be extensions\n# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.\nextensions = []\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = u'Slybot'\ncopyright = u'2013, Scrapy team'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = '0.9'\n# The full version, including alpha/beta/rc tags.\nrelease = '0.9'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = None\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n\n# -- Options for HTML output ---------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'default'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n#html_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\n#html_title = None\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\n#html_logo = None\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\n#html_domain_indices = True\n\n# If false, no index is generated.\n#html_use_index = True\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'Slybotdoc'\n\n\n# -- Options for LaTeX output --------------------------------------------------\n\nlatex_elements = {\n# The paper size ('letterpaper' or 'a4paper').\n#'papersize': 'letterpaper',\n\n# The font size ('10pt', '11pt' or '12pt').\n#'pointsize': '10pt',\n\n# Additional stuff for the LaTeX preamble.\n#'preamble': '',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title, author, documentclass [howto/manual]).\nlatex_documents = [\n  ('index', 'Slybot.tex', u'Slybot Documentation',\n   u'Scrapy team', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output --------------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'slybot', u'Slybot Documentation',\n     [u'Scrapy team'], 1)\n]\n\n# If true, show URL addresses after external links.\n#man_show_urls = False\n\n\n# -- Options for Texinfo output ------------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n  ('index', 'Slybot', u'Slybot Documentation',\n   u'Scrapy team', 'Slybot', 'One line description of project.',\n   'Miscellaneous'),\n]\n\n# Documents to append as an appendix to all manuals.\n#texinfo_appendices = []\n\n# If false, no module index is generated.\n#texinfo_domain_indices = True\n\n# How to display URL addresses: 'footnote', 'no', or 'inline'.\n#texinfo_show_urls = 'footnote'\n"
  },
  {
    "path": "slybot/docs/index.rst",
    "content": "==============================\nSlybot |version| documentation\n==============================\n\nSlybot is a Python web crawler for doing web scraping. It's implemented on top of the\n`Scrapy`_ web crawling framework and the `Scrapely`_ extraction library.\n\nRequirements\n============\n\n* `Scrapy`_\n* `Scrapely`_\n* `loginform`_\n* lxml\n\nInstallation\n============\n\nTo install the last development version::\n\n    pip install git+https://github.com/scrapy/slybot.git\n\nTo install the last stable version::\n\n    pip install slybot\n\nQuick Usage\n===========\n\nCreate a directory called ``slybot-project``, place your slybot project (JSON\nfiles) there.\n\nTo get a list of all spiders::\n\n    slybot list\n\nTo run a specific specific spider::\n\n    slybot crawl <spider_name>\n\nFor those familiar with Scrapy, ``slybot`` is a thin wrapper for the ``scrapy``\ncommand, that just instructs Scrapy to use Slybot settings\n(``slybot.settings``). All commands and arguments supported by the ``scrapy``\ncommand are also supported by the ``slybot`` command, although a few of them\ndon't apply.\n\nSlybot projects\n===============\n\nSlybot projects are configured through a collection of JSON files which are\ndocumented in :doc:`project`.\n\nExample project\n===============\n\nThere is a working slybot project example in `slybot/tests/data/SampleProject`_\nthat is used for tests and hence use most of the available features.\n\nUser interfaces\n===============\n\nHere is a list of known UIs to create Slybot templates:\n\n* `Scrapely tool`_ (command line interface)\n* `Scrapinghub Autoscraping`_ (visual, web-based)\n\nAdvanced configuration\n======================\n\nSlybot is a `Scrapy`_ project, so it can be tuned and configured using `Scrapy\nsettings`_. For more information see: :doc:`config`.\n\nSpiderlets\n==========\n\nThe behaviour of Slybot spiders can also be tuned with small (Python) code\nsnippets called spiderlets. For more information see :doc:`spiderlets`.\n\nTable of contents\n=================\n\n.. toctree::\n   :maxdepth: 2\n\n   project\n   config\n   spiderlets\n\n.. _Scrapy: https://github.com/scrapy/scrapy\n.. _Scrapely: https://github.com/scrapy/scrapely\n.. _loginform: https://github.com/scrapy/loginform\n.. _slybot/tests/data/SampleProject: https://github.com/scrapy/slybot/tree/master/slybot/tests/data/SampleProject\n.. _Scrapy settings: http://doc.scrapy.org/en/latest/topics/settings.html\n.. _Scrapely tool: https://github.com/scrapy/scrapely#usage-command-line-tool\n.. _Scrapinghub Autoscraping: http://scrapinghub.com/autoscraping.html\n"
  },
  {
    "path": "slybot/docs/make.bat",
    "content": "@ECHO OFF\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset BUILDDIR=_build\r\nset ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .\r\nset I18NSPHINXOPTS=%SPHINXOPTS% .\r\nif NOT \"%PAPER%\" == \"\" (\r\n\tset ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%\r\n\tset I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%\r\n)\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\nif \"%1\" == \"help\" (\r\n\t:help\r\n\techo.Please use `make ^<target^>` where ^<target^> is one of\r\n\techo.  html       to make standalone HTML files\r\n\techo.  dirhtml    to make HTML files named index.html in directories\r\n\techo.  singlehtml to make a single large HTML file\r\n\techo.  pickle     to make pickle files\r\n\techo.  json       to make JSON files\r\n\techo.  htmlhelp   to make HTML files and a HTML help project\r\n\techo.  qthelp     to make HTML files and a qthelp project\r\n\techo.  devhelp    to make HTML files and a Devhelp project\r\n\techo.  epub       to make an epub\r\n\techo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\r\n\techo.  text       to make text files\r\n\techo.  man        to make manual pages\r\n\techo.  texinfo    to make Texinfo files\r\n\techo.  gettext    to make PO message catalogs\r\n\techo.  changes    to make an overview over all changed/added/deprecated items\r\n\techo.  linkcheck  to check all external links for integrity\r\n\techo.  doctest    to run all doctests embedded in the documentation if enabled\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"clean\" (\r\n\tfor /d %%i in (%BUILDDIR%\\*) do rmdir /q /s %%i\r\n\tdel /q /s %BUILDDIR%\\*\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"html\" (\r\n\t%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/html.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"dirhtml\" (\r\n\t%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"singlehtml\" (\r\n\t%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"pickle\" (\r\n\t%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the pickle files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"json\" (\r\n\t%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can process the JSON files.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"htmlhelp\" (\r\n\t%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run HTML Help Workshop with the ^\r\n.hhp project file in %BUILDDIR%/htmlhelp.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"qthelp\" (\r\n\t%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; now you can run \"qcollectiongenerator\" with the ^\r\n.qhcp project file in %BUILDDIR%/qthelp, like this:\r\n\techo.^> qcollectiongenerator %BUILDDIR%\\qthelp\\Slybot.qhcp\r\n\techo.To view the help file:\r\n\techo.^> assistant -collectionFile %BUILDDIR%\\qthelp\\Slybot.ghc\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"devhelp\" (\r\n\t%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"epub\" (\r\n\t%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The epub file is in %BUILDDIR%/epub.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"latex\" (\r\n\t%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished; the LaTeX files are in %BUILDDIR%/latex.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"text\" (\r\n\t%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The text files are in %BUILDDIR%/text.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"man\" (\r\n\t%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The manual pages are in %BUILDDIR%/man.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"texinfo\" (\r\n\t%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"gettext\" (\r\n\t%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Build finished. The message catalogs are in %BUILDDIR%/locale.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"changes\" (\r\n\t%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.The overview file is in %BUILDDIR%/changes.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"linkcheck\" (\r\n\t%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Link check complete; look for any errors in the above output ^\r\nor in %BUILDDIR%/linkcheck/output.txt.\r\n\tgoto end\r\n)\r\n\r\nif \"%1\" == \"doctest\" (\r\n\t%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest\r\n\tif errorlevel 1 exit /b 1\r\n\techo.\r\n\techo.Testing of doctests in the sources finished, look at the ^\r\nresults in %BUILDDIR%/doctest/output.txt.\r\n\tgoto end\r\n)\r\n\r\n:end\r\n"
  },
  {
    "path": "slybot/docs/project.rst",
    "content": "=====================\nSlybot project format\n=====================\n\nThis document describes the format used by slybot to store the configuration of\na project and its spiders.\n\n* The format consists of a set of JSON files, laid out in a specific directory\n  structure\n* All JSON files are encoded in UTF-8 format\n* Unless specified as \"optional\", all attributes are required\n\nFiles and structure\n===================\n\nThe project consists of the following files and structure::\n\n    project.json\n    items.json\n    extractors.json\n    fieldtypes.json\n    spiders/\n       spider1.json\n       spider2.json\n       ...\n\nproject.json\n------------\n\nA project object.\n\nitems.json\n----------\n\nAn items object.\n\nextractors.json\n---------------\n\nA mapping from extractor ids to extractor objects.\n\nfieldtypes.json\n---------------\n\nA mapping from field type name to field type objects.\n\nspiders/NAME.json\n-----------------\n\nA spider object.\n\nObject types\n============\n\nSummary of object types:\n\n* `Project`_\n* `Items`_\n* `Item`_\n* `Field`_\n* `Field Type`_\n* `Extractor`_\n* `Template`_\n* `Spider`_\n* `Request`_\n\nProject\n-------\n\nThe project object contains the global project metadata::\n\n\t{\n\t    \"name\": \"Slybot Test Project\",\n\t    \"version\": \"1.0\",\n\t    \"comment\": \"\"\n\t}\n\nAttributes:\n\nname : string\n  The project name.\n\nversion : string\n  Version number of the format.\n\ncomment : string : optional\n  A comment provided by the user.\n\nItems\n-----\n\nThe items object contains all the item objects used in the project, it is\nrepresented as a mapping of item ids to items::\n\n    {\n        \"person\": item object 1,\n        \"job\": item object 2,\n        ...\n    }\n\nItem\n----\n\nAn item object represents a individual object to be extracted by the\nsystem, i.e: person, job, category, etc.::\n\n    {\n        fields: {\n            \"first_name\": field object 1,\n            \"last_name\": field object 2,\n        }\n    },\n\nAttributes:\n\ndisplay_name: string : optional\n  User-friendly name of the item. If not specified, the item id will be used\n  instead.\n\nfields : mapping\n  This is a mapping of the field names to the field objects representing\n  the properties of this item.\n\nField\n-----\n\nThe field describes the properties of an item field::\n\n    {\n        \"type\": \"string\",\n        \"required\": \"true\",\n        \"vary\": \"true\",\n    },\n\nAttributes:\n\ntype : string\n  The field type. It can reference a field type defined in `fieldtypes.json`\n  or be one of the following built-in types:\n\n  * safe html\n  * url\n  * text\n  * image\n  * geopoint\n  * number\n  * raw html\n  * price\n\nrequired : boolean\n  Whether the field is required to produce a successful match. All required\n  fields must extract data, otherwise the extraction is considered to have\n  failed and the data is discarded.\n\nvary : boolean\n  Whether to ignore this field for duplicate detection. For example, sometimes\n  the same product is available under many urls, in which case you would want\n  to enable this attribute for the ``url`` field, if you want to drop\n  duplicates.\n\ndescription : string : optional\n  Field description.\n\nField Type\n----------\n\nAttributes:\n\nextractor : string?\n  The extractor used for this field type. TODO: define how to specify extractor.\n\nadaptor : string?\n  The adaptor used for this field types. Unlike extractors, adaptors are applied after extraction has occurred and hence cannot affect the matching process. TODO: how to specify the adaptor (python func, etc).\n\nSpider\n------\n\nThe Spider object is the top-level object that describes a slybot spider::\n\n    {\n        \"start_urls\": list of strings,\n        \"allowed_domains\": list of strings,\n        \"links_to_follow\": string,\n        \"follow_patterns\": list of strings,\n        \"exclude_patterns\": list of strings,\n        \"respect_nofollow\": boolean,\n        \"templates\": list of template objects,\n        \"init_requests\": list of request objects,\n    }\n\nAttributes:\n\nstart_urls : list of strings\n  The list of URLs the spider will start crawling from. Start urls are expected to point to an HTML page, whose links will be followed according to the url filters\n  attributes (``allowed_domains``, ``links_to_follow``, etc.). If you need a custom link extraction behavior (for example, if your starting page is a csv or xml feed)\n  consider to include a `Start request`_ in ``init_requests`` array.\n\nallowed_domains : list of strings : optional\n  The list of domains that can be crawled. If set to an empty list it will allow any domain. If this variable is not set then the list of allowed domains is extracted from the start urls.\n\nlinks_to_follow : string\n  Either one of these values:\n  \n  * ``none``: no links will be followed (only the start urls will be visited)\n  * ``patterns``: links will be followed according to the regular expressions in ``follow_patterns`` and ``exclude_patterns`` attributes\n\nfollow_patterns : list of strings : optional\n  A list of regular expressions that define urls to follow. If empty, it will follow all links. This field is ignored if ``links_to_follow`` is other than ``patterns``.\n\nexclude_patterns : list of strings : optional\n  A list of regular expressions that define urls to avoid following. It has\n  precedence over ``follow_patterns``.\n\nrespect_nofollow : boolean\n  Whether to respect `rel=nofollow`_. Defaults to false.\n  \ntemplates : list of objects\n  A list of template objects.\n\ninit_requests : list of request objects : optional\n  A list of requests objects that will be executed (sequentially, in order)\n  when the spider is opened and before visiting the start urls.\n\npage_actions : list of page action objects : optional\n  A list of page actions (like clicking a button or typing text into a field) that will be executed (sequentially) on the page.\n\nTemplate\n--------\n\nAttributes:\n\npage_id : string\n  An identifier for the template\n\npage_type : string\n  Either one of these values:\n\n  * ``links``: indicates this template contains \"links to follow\" annotations\n  * ``item``: indicates this template contains field annotations. It can also contain \"links to follow\" annotations.\n\nscrapes : string\n  The name of the item this template annotates. It must be defined in `items.json`.\n\nextractors : mapping\n  A mapping from field names to extractor ids (which must be defined in `extractors.json`)\n\nurl : string\n  The URL of the page from which the template was generated from.\n\nannotated_body : string\n  The annotated body.\n\noriginal_body : string\n  The original body (without annotations).\n\nselectors : mapping\n  A mapping from field names to selector objects. If provided when this\n  template extracts an item from a response, the selectors will be run on the\n  page and results added to the item.\n\nSelector\n--------\n\nAttributes:\n\ntype : string\n  The type of the selector, can be either ``css`` or ``xpath``.\n\nselector : string\n  The selector expression\n\nExtractor\n---------\n\nAttributes:\n\ntype_extractor : string : optional\n  If defined, it will override the default extractor for the field. For allowed\n  values, see the ``type`` attribute in `Field object`.\n\nregular_expression : string : optional\n  A regular expression that will be applied to the extracted data, to refine\n  its result. It will be applied after the base extractor (either defined in\n  the field type or through the ``type_extractor`` attribute).\n\n  The regex must extract at least one group (parenthesis enclosed part), in\n  order to be considered a match. The groups matched will be concatenated for\n  generating the final result.\n\nExamples\n========\n\nThis is a complete example of an items.json file::\n\n\t{\n\t\t\"person\": {\n\t\t    \"fields\": {\n\t\t\t    \"first_name\": {\n\t\t\t\t    \"required\": \"true\", \n\t\t\t\t    \"type\": \"string\", \n\t\t\t\t    \"vary\": \"true\"\n\t\t\t\t}, \n\t\t\t    \"last_name\": {\n\t\t\t\t    \"required\": \"true\", \n\t\t\t\t    \"type\": \"string\", \n\t\t\t\t    \"vary\": \"true\"\n\t\t\t\t}\n\t\t    }\n\t\t},\n\t\t\"job\": {\n\t\t    \"fields\": {\n\t\t\t    \"company\": {\n\t\t\t\t    \"required\": \"true\", \n\t\t\t\t    \"type\": \"string\", \n\t\t\t\t    \"vary\": \"true\"\n\t\t\t\t}, \n\t\t\t    \"position\": {\n\t\t\t\t    \"required\": \"true\", \n\t\t\t\t    \"type\": \"string\", \n\t\t\t\t    \"vary\": \"true\"\n\t\t\t\t}\n\t\t    }\n\t\t}\n\t}\n\nRequest\n=======\n\nA request object represents a request that will be made by slybot::\n\n    {\n        \"type\": string,\n        # ... type-specific arguments ...\n    }\n\nAttributes:\n\ntype : string\n  The type of the request. This is the only attribute that is present in all request types.\n\nOther attributes are available depending on the request type.\n\nStart request\n-------------\n\nUsed to represent a plain start url::\n\n    {\n        \"type\": \"start\",\n        \"url\": string,\n        \"link_extractor\": link extractor object,\n    }\n\nAttributes:\n\ntype : string\n    The type of request, which for start requests must be ``start``.\n\nurl: string\n    The start page URL.\n\nlink_extractor : link extractor : optional\n  Allow to associate a link extractor object to the request, in order to be applied to its response. If given, the request callback will be constructed using the\n  specified link extractor in order to extract links. If not given, the assigned callback will be the spider ``parse`` method, so request will work as if it were a\n  single url inside `Spider`_ ``start_urls``.\n\nLogin request\n-------------\n\nUsed to represent a request to perform login::\n\n    {\n        \"type\": \"login\",\n        \"loginurl\": string,\n        \"username\": string,\n        \"password\": string,\n    }\n\n\nAttributes:\n\ntype : string\n  The type of request, which for login requests must be ``login``.\n\nloginurl : string\n  The login page URL. This is the page containing the login form, not the URL\n  where the form data is POSTed.\n\nusername : string\n  The login username.\n\npassword : string\n  The login password.\n\nGeneric form request\n--------------------\n\nUsed to represent a request to a generic form::\n\n    {\n        \"type\": \"form\",\n        \"form_url\": \"http://www.mysite.com/search.php\",\n        \"xpath\" : \"//form[@name=search_form]\",\n        \"fields\" : [\n            {\n                \"xpath\": \"//*[@name=state]\",\n                \"type\": \"iterate\",\n                \"value\": \".*\",\n            },\n            {\n                \"xpath\": \"//*[@name=country]\",\n                \"type\": \"constants\",\n                \"value\": [\"US\"]\n            }\n        ]\n    }\n\nAttributes:\n\ntype : string\n  The type of request, which for generic form requests must be ``form``.\n\nform_url : string\n  The form page URL. This is the page containing the form, not the URL\n  where the form data is POSTed.\n\nxpath : string\n  A xpath expression to access the form to be posted.\n\nfields : list\n  A list of fields to be posted with the form.\n\nPage Action\n-----------\n\nUsed to represent an action to be performed on a page::\n\n    {\n        \"type\": \"click\",\n        \"selector\": \"#show_more\",\n        \"accept\": \"/product/[0-9]+\",\n        \"reject\": \"/product/(0|999)\"\n    }\n\nAttributes:\n\ntype : string\n  Either one of these values:\n  * ``wait``: Wait for a specified amount of time before continuing\n  * ``click``: Click something on the page\n  * ``set``: Set a text field or select box value\n  * ``scroll``: Scroll an element\n\ntimeout : number\n  Only when type is ``wait``: Ammount of time to wait\n\nselector : string\n  Only when type is ``click``, ``set`` or ``scroll``: CSS selector of the elements to apply the action to. If the selector matches several elements, action is applied to all.\n\nvalue : string\n  Only when type is ``set``: Value to set the field or select box to.\n\npercent : number\n  Only when type is ``scroll``: Scroll vertically this percentage of the  page.\n\naccept : regex (optional)\n  Only run the  action in pages which URL matches the regex\n\nreject: regex (optional)\n  Don't run the action in pages which URL matches the regex\n\nGeneric Form Field\n------------------\n\nUsed to represent a field in a generic form.\n\nAttributes:\n\nxpath : string\n  A xpath expression to access the field to be posted.\n\ntype : string\n  The type attribute defines how the field will be posted, it supports the following values:\n\n    * \"constants\": Use a list of values defined in the value field.\n    * \"iterate\": Use the option values defined in a select field. The value for this type is a regex expression used to match the options for the select. If empty it will use all the select options.\n    * \"inurl\": Use a list of values obtained from the URL defined in the \"value\" attribute. The URL must point to a text file with a value per line.\n\nname : string : optional\n  If this field is set then it will be used as the option name sent to the server\n  overriding the field name. This can be used to submit values for fields not\n  present in the form (this is useful in some cases like when the data submitted\n  is modified by javascript, i.e in aspx forms).\n\nvalue : string : optional\n  Define the value(s) to be submitted with this field. The sintax of this attribute depends of the field type (see above).\n  This attribute supports the use of spider arguments, using the following sintax: {arg1}, this will use the value of the arg1.\n\nLink Extractor\n--------------\n\nDefines a link extractor object. Except in the case of ``module`` type, all types configure a base link extractor class. But all link extractors must have\nthe same interface (see slybot.linkextractor.BaseLinkExtractor)\n\nAttributes:\n\ntype : string\n  Defines how to interpret the string in the 'value' attribute. Current supported values for this attribute are:\n\n  * ``csv_column`` - value is an integer index indicating a column number. Link source is regarded as csv formatted ``scrapy.http.TextResponse``.\n  * ``xpath`` - value is an xpath. Link source is regarded as a ``scrapy.http.XmlResponse``.\n  * ``regex`` - value is a regular expression. Link source is regarded as a ``scrapy.http.TextResponse``.\n  * ``module`` - value is a python module path. Link source is a ``scrapy.http.Response`` or subclass, depending on implementation requirements.\n  * ``html`` - a shortcut for ``module`` type with value ``slybot.linkextractor.HtmlLinkExtractor``. The content of the value attribute is ignored. Source is a ``scrapely.htmlpage.HtmlPage`` object or a ``scrapy.http.HtmlResponse``.\n  * ``rss`` - a shortcut for ``xpath`` type with value ``//item/link/text()``. The content of the value attribute is ignored.\n  * ``sitemap`` - shortcut for ``xpath`` type with value ``//urlset/url/loc/text()`` and removed namespaces. The content of the value attribute is ignored.\n  * ``atom`` - shortcut for ``xpath`` type with value ``//link/@href`` and removed namespaces. The content of the value attribute is ignored.\n\nvalue : any\n  The content is specific to the defined type.\n\nAdditional attributes can be given. They are passed as extra keyword argument for the link extractor class constructor. Check ``slybot.linkextractor`` module.\n\nTODO\n====\n\n* should we combine everything into a single JSON file (like HAR format). It\n  could still support excluding certain spiders.\n\n* what about global project metadata, like name or application (and version)\n  used to generate the project?\n\n* cleanup built-in field types?\n\n* Template object: change ``page_id`` attribute to ``id``, or ``template_id``?.\n  Same for ``page_type``.\n\n* Template page_type: why do we need both ``item`` and ``links``?. What happens\n  if a field is required and not extracted, but there are links to follow?\n\n* Template: ``scrapes`` should only be set if page_type=item?\n\n* Extractor: ``type_extractor`` redundant?\n\n* Extractor: refactor to support other extractor types (xpath, python, css) and\n  integrate with field types.\n\n* Field type: finish spec and integrate with extractors (after refactoring)\n\n.. _rel=nofollow: http://en.wikipedia.org/wiki/Nofollow\n"
  },
  {
    "path": "slybot/docs/spiderlets.rst",
    "content": "==========\nSpiderlets\n==========\n\n.. warning::\n\n   This functionality is experimental and its API may undergo changes from time\n   to time. Use at your own risk and please contribute feedback to make it\n   stable.\n\n\nThe slybot spider alone is not able to solve all the crawling and extraction difficulties that may arise for every possible case: data\npresented in a way partially or not suitable for the similarity algorithm, arbitrary post data and ajax requests, complex url \nnormalization not handled by an addon, etc. Spiderlets are a method to extend any AS spider in a way that everything it is possible\nto do with a normal scrapy spider, can be done with a spiderlet.\n\nSpiderlets are handled by a spider middleware. In order to be enabled, the setting ``SPIDERLETS_MODULE`` must be present, with the\nvalue being the module name that contains the spiderlets submodules. For example, if your spiderlets are in the module\n``mylib.spiderlets``, then you set the value of ``SPIDERLETS_MODULE`` to ``mylib.spiderlets``.\n\nWhat is a spiderlet\n___________________\n\nA spiderlet is an instance of a python class which implements at least one of the predefined methods described below. In order to\nattach a spiderlet to a given spider, you use the class attribute ``name``. The value of this attribute must match the name of the\nspider:\n\n::\n\n    class MySpiderlet:\n        name = \"myspider\"\n\n        def process_request(self, request, response):\n            ...\n            return request\n\n        def process_item(self, item, response):\n            ...\n            return item\n\n        def process_start_request(self, request):\n            ...\n            return request\n\n        def parse_login_page(self, response):\n            ...\n            return request\n\n\nThree of the methods, ``process_request``, ``process_item`` and ``process_start_request``, are attached to the output of the\nautoscraping spider. The autoscraping spider generates two kind of objects: a request or an item. And depending on the kind\nof object generated and the source, the spiderlet addon passes it to one or another method of your spiderlet. So, each item\nissued by the spider is passed to ``process_item``, and each request is passed to ``process_start_request`` or ``process_request``,\ndepending on the source: a start url, or a request generated by the spider as a consequence of a link extraction from a received\nresponse. Starting requests usually need to be processed in a different way, and they don't have an associated response from which\nthey were generated.\n\n``process_request`` and ``process_start_request`` are commonly used for normalize request url, filter it, or override the request\ncallback (eventually defined as a new method of the spiderlet). The default callback for every request generated by the spider is\nthe ``parse`` method of the autoscraping spider. Whenever you need to generate a FormRequest for sending post\ndata or simulating an AJAX call, you will need to create your own callbacks in the spiderlet and point the request callbacks to them.\n\n``process_item`` is mostly used for item post processing. An important feature is that the values of the item fields returned by the\nautoscraping spider are always lists, even if it is single valued. So you have to consider this fact when you are accessing the item\nfields inside the ``process_item`` method. There is no restriction, however, on the types of data contained in the items returned by the\nspiderlet.\n\nThe fourth method, ``parse_login_page``, is of a different kind. Instead of process an output from the spider, it process an\nincoming response, and it is applied only to those responses which its callback is the ``parse_login_page`` method of the autoscraping\nspider. If you define ``parse_login_page`` method in your spiderlet, the request callback will be overridden by this new one. This\nfeature allows to write your own login handler when the slybot default one (based on the generic solution implemented in the\n`loginforms library <https://github.com/scrapy/loginform>`_) does not fit well for a given case.\n\nAnother very practical feature of a spiderlet is that you can access the autoscraping spider methods and attributes with the spiderlet\nattribute ``self.spider``. ``self.spider.log`` or ``self.spider.parse`` are among the most commonly methods needed to be accessed from\nthe spiderlet.\n\n"
  },
  {
    "path": "slybot/requirements-clustering.txt",
    "content": "-r requirements.txt\npage_clustering==0.0.1\n"
  },
  {
    "path": "slybot/requirements-test.txt",
    "content": "tox==3.12.1\nnose==1.3.7\nnose-timer==0.7.5\ndoctest-ignore-unicode==0.1.2\nsetuptools>=41.0.1\n"
  },
  {
    "path": "slybot/requirements.txt",
    "content": "# Slybot requirements\nnumpy==1.16.4\nScrapy==1.6.0\nscrapely==0.13.5\nloginform==1.2.0\nlxml==4.3.4\ndateparser==0.7.1\npython-dateutil==2.8.0\njsonschema==2.6.0\nsix==1.12.0\nscrapy-splash==0.7.2\npage_finder==0.1.8\nchardet==3.0.4\n"
  },
  {
    "path": "slybot/scrapy.cfg",
    "content": "[settings]\ndefault = slybot.settings\n"
  },
  {
    "path": "slybot/setup.py",
    "content": "from os.path import join, abspath, dirname, exists\nfrom slybot import __version__\nfrom setuptools import setup, find_packages\nfrom setuptools.command.bdist_egg import bdist_egg\nfrom setuptools.command.sdist import sdist\n\n\ndef build_js():\n    root = abspath(dirname(__file__))\n    base_path = abspath(join(root, '..', 'splash_utils'))\n    if not exists(base_path):\n        base_path = abspath(join(root, '..', 'slyd', 'splash_utils'))\n\n    files = ('waitAsync.js', 'perform_actions.js')\n    fdata = []\n    for fname in files:\n        try:\n            with open(join(base_path, fname)) as f:\n                fdata.append(f.read())\n        except IOError:\n            print(\n                'WARNING: Could not find JavaScript files to build splash '\n                'scripts. Using pre-built assets if available instead')\n            return\n    js_file = abspath(join(root, 'slybot', 'splash-script-combined.js'))\n    with open(js_file, 'w') as f:\n        f.write(';(function(){\\n%s\\n})();' % '\\n'.join(fdata))\n\n\nclass bdist_egg_command(bdist_egg):\n    def run(self):\n        build_js()\n        bdist_egg.run(self)\n\n\nclass sdist_command(sdist):\n    def run(self):\n        build_js()\n        sdist.run(self)\n\n\ninstall_requires = ['Scrapy', 'scrapely', 'loginform', 'lxml', 'jsonschema',\n                    'dateparser', 'scrapy-splash', 'page_finder', 'six',\n                    'chardet']\nextras = {\n    'tests': ['nose', 'nose-timer', 'doctest-ignore-unicode', 'tox'],\n    'clustering': ['page_clustering']\n}\n\nsetup(name='slybot',\n      version=__version__,\n      license='BSD',\n      description='Slybot crawler',\n      author='Scrapy project',\n      author_email='info@scrapy.org',\n      url='http://github.com/scrapinghub/portia',\n      packages=find_packages(exclude=('tests', 'tests.*')),\n      platforms=['Any'],\n      scripts=['bin/slybot', 'bin/portiacrawl'],\n      install_requires=install_requires,\n      extras_require=extras,\n      package_data={'': ['slybot/splash-script-combined.js']},\n      include_package_data=True,\n\n      cmdclass={\n          'bdist_egg': bdist_egg_command,\n          'sdist': sdist_command\n      },\n\n      classifiers=[\n          'Development Status :: 4 - Beta',\n          'License :: OSI Approved :: BSD License',\n          'Operating System :: OS Independent',\n          'Programming Language :: Python',\n          'Programming Language :: Python :: 2',\n          'Programming Language :: Python :: 2.7',\n          'Programming Language :: Python :: 3',\n          'Programming Language :: Python :: 3.4',\n      ])\n"
  },
  {
    "path": "slybot/slybot/__init__.py",
    "content": "__version__ = '0.13.3'\n"
  },
  {
    "path": "slybot/slybot/baseurl.py",
    "content": "\"\"\"\nhtml page utils\n\"\"\"\nimport re\n\nfrom six.moves.urllib.parse import urljoin\n\nfrom scrapely.htmlpage import parse_html, HtmlTagType\n\nABSURLRE = re.compile(\"^https?\\:\\/\\/\")\nDOCTYPERE = re.compile(\"<!DOCTYPE.*?>\", re.S | re.I)\n\n\ndef _is_abs_url(url):\n    return bool(ABSURLRE.match(url))\n\n\ndef insert_base_url(html, base):\n    \"\"\"\n    Inserts the given base url if does not exist in html source,\n    or replace the existing if needed\n    \"\"\"\n    baseurl = baseelement = headelement = htmlelement = None\n    for element in parse_html(html):\n        if getattr(element, \"tag\", None) == \"base\":\n            baseurl = element.attributes.get(\"href\", None)\n            baseelement = element\n        elif getattr(element, \"tag\", None) == \"head\" and \\\n                element.tag_type == HtmlTagType.OPEN_TAG:\n            headelement = element\n        elif getattr(element, \"tag\", None) == \"html\" and \\\n                element.tag_type == HtmlTagType.OPEN_TAG:\n            htmlelement = element\n\n    if baseurl:\n        if not _is_abs_url(baseurl):\n            absurl = urljoin(base, baseurl)\n            # replace original base tag\n            basetag = '<base href=\"%s\" />' % absurl\n            html = html[:baseelement.start] + basetag + html[baseelement.end:]\n\n    else:\n        # Generate new base element and include\n        basetag = '<base href=\"%s\" />' % base\n        if headelement:\n            insertpos = headelement.end\n        else:\n            if htmlelement:\n                basetag = \"\\n<head>%s</head>\\n\" % basetag\n                insertpos = htmlelement.end\n            else:\n                doctype_match = DOCTYPERE.search(html)\n                if doctype_match:\n                    insertpos = doctype_match.end()\n                else:\n                    insertpos = 0\n        html = html[:insertpos] + basetag + html[insertpos:]\n\n    return html\n\n\ndef get_base_url(htmlpage):\n    \"\"\"Return the base url of the given HtmlPage\"\"\"\n    for element in htmlpage.parsed_body:\n        if getattr(element, \"tag\", None) == \"base\":\n            return element.attributes.get(\"href\") or htmlpage.url\n    return htmlpage.url\n"
  },
  {
    "path": "slybot/slybot/closespider.py",
    "content": "\"\"\"\nThis extension closes spiders after they have been crawling inefficiently for a\nwhile\nEach SLYCLOSE_SPIDER_CHECK_PERIOD seconds, it checks that at least SLYCLOSE_SPIDER_PERIOD_ITEMS\nhave been extracted along the last time interval of same length.\n\"\"\"\n\nfrom twisted.internet import task\n\nfrom scrapy.xlib.pydispatch import dispatcher\nfrom scrapy import signals\nfrom scrapy.exceptions import NotConfigured\n\nDEFAULT_CHECK_PERIOD = 3600\nDEFAULT_PERIOD_MIN_ITEMS = 200\n\n\nclass SlybotCloseSpider(object):\n\n    def __init__(self, crawler):\n        if not crawler.settings.getbool(\"SLYCLOSE_SPIDER_ENABLED\"):\n            raise NotConfigured\n\n        self.crawler = crawler\n        self.check_period = crawler.settings.getint(\"SLYCLOSE_SPIDER_CHECK_PERIOD\", DEFAULT_CHECK_PERIOD)\n        self.period_items = crawler.settings.getint(\"SLYCLOSE_SPIDER_PERIOD_ITEMS\", DEFAULT_PERIOD_MIN_ITEMS)\n\n        self.items_in_period = 0\n\n        dispatcher.connect(self.spider_opened, signal=signals.spider_opened)\n        dispatcher.connect(self.spider_closed, signal=signals.spider_closed)\n        dispatcher.connect(self.item_scraped, signal=signals.item_scraped)\n\n    def spider_opened(self, spider):\n        self.task = task.LoopingCall(self._check_crawled_items, spider)\n        self.task.start(self.check_period, now=False)\n\n    def spider_closed(self, spider):\n        if self.task.running:\n            self.task.stop()\n\n    def item_scraped(self, item, spider):\n        self.items_in_period += 1\n\n    def _check_crawled_items(self, spider):\n        if self.items_in_period >= self.period_items:\n            self.items_in_period = 0\n        else:\n            spider.log(\"Closing spider because of low item throughput. Items in last period: %d\" % self.items_in_period)\n            self.crawler.engine.close_spider(spider, 'slybot_fewitems_scraped')\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        return cls(crawler)\n"
  },
  {
    "path": "slybot/slybot/clustering.py",
    "content": "import json\nimport logging\nimport os\n\nfrom scrapely.htmlpage import HtmlPage\nfrom scrapy import signals\nfrom scrapy.exceptions import NotConfigured\nfrom scrapy.utils.request import request_fingerprint\nfrom scrapy.utils.project import data_path\nfrom slybot.plugins.scrapely_annotations.annotations import _CLUSTER_NA\n\n\nclass PersistentClusteringMiddleware(object):\n    def __init__(self, directory, reset=False, stats=None):\n        try:\n            import anydbm as _dbm\n        except ImportError:\n            import dbm as _dbm\n        self.dbmodule = _dbm\n        self.directory = directory\n        self.reset = reset\n        self.stats = stats\n        self.clustering_enabled = False\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        s = crawler.settings\n        if not s.getbool('PERSISTENT_PAGE_CLUSTERING'):\n            raise NotConfigured\n        directory = data_path(s.get('CLUSTERING_DIR', 'clustering'))\n        reset = s.getbool('CLUSTERING_RESET')\n        o = cls(directory, reset, crawler.stats)\n        crawler.signals.connect(o.spider_opened, signal=signals.spider_opened)\n        crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)\n        return o\n\n    def spider_opened(self, spider):\n        try:\n            clustering = spider.plugins['Annotations'].clustering\n            assert bool(clustering) == True\n            self.clustering_enabled = True\n        except (KeyError, AttributeError, AssertionError):\n            logging.warning('Persistent page clustering has not been enabled '\n                            'because page clustering is not enabled for this '\n                            'spider')\n            return\n        if not os.path.exists(self.directory):\n            os.makedirs(self.directory)\n        dbpath = os.path.join(self.directory, spider.name)\n        flag = 'n' if self.reset else 'c'\n        self.db = self.dbmodule.open(dbpath, flag=flag)\n        for data in getattr(self.db, 'itervalues', self.db.values)():\n            page, encoding = json.loads(data)\n            clustering.add_page(HtmlPage(body=page.decode(encoding)))\n\n    def spider_closed(self, spider):\n        self.db.close()\n\n    def process_spider_output(self, response, result, spider):\n        \"\"\"Store page tag details if page clustering was not available.\"\"\"\n        saved = False\n        for out in result:\n            if (not saved and self.clustering_enabled and\n                    hasattr(out, 'get') and\n                    out.get('_template_cluster') == _CLUSTER_NA):\n                key = request_fingerprint(response.request)\n                logging.debug('Saving %s for clustering on next crawl',\n                              response.request)\n                self.db[key] = json.dumps([response.body_as_unicode(),\n                                           response.encoding])\n                saved = True\n            yield out\n"
  },
  {
    "path": "slybot/slybot/dupefilter.py",
    "content": "\"\"\"\nDuplicates filter middleware for autoscraping\n\"\"\"\nfrom scrapy.exceptions import NotConfigured\nfrom scrapy.exceptions import DropItem\n\nfrom slybot.item import create_item_version\n\n\nclass DupeFilterPipeline(object):\n    def __init__(self, settings):\n        if not settings.getbool('SLYDUPEFILTER_ENABLED'):\n            raise NotConfigured\n        self._itemversion_cache = {}\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        return cls(crawler.settings)\n\n    def process_item(self, item, spider):\n        \"\"\"Checks whether a scrapy item is a dupe, based on version (not vary)\n        fields of the item class\"\"\"\n        if (not hasattr(item, 'version_fields') or not item.version_fields or\n                item.get('_type') != getattr(item, '_display_name', 0)):\n            return item\n        version = create_item_version(item)\n        if version in self._itemversion_cache:\n            old_url = self._itemversion_cache[version]\n            raise DropItem(\"Duplicate product scraped at <%s>, first one was \"\n                           \"scraped at <%s>\" % (item[\"url\"], old_url))\n        self._itemversion_cache[version] = item[\"url\"]\n        return item\n"
  },
  {
    "path": "slybot/slybot/exporter.py",
    "content": "from scrapy.exporters import CsvItemExporter\nfrom scrapy.conf import settings\n\n\nclass SlybotCSVItemExporter(CsvItemExporter):\n    def __init__(self, *args, **kwargs):\n        kwargs['fields_to_export'] = settings.getlist('CSV_EXPORT_FIELDS') or None\n        super(SlybotCSVItemExporter, self).__init__(*args, **kwargs)\n"
  },
  {
    "path": "slybot/slybot/extractors.py",
    "content": "import re\nimport six\n\nfrom scrapely.extractors import htmlregion\nfrom scrapely.htmlpage import HtmlPageRegion\n\nfrom slybot.fieldtypes import FieldTypeManager\nfrom slybot.item import SlybotFieldDescriptor, SlybotItemDescriptor\n\n\ndef create_regex_extractor(pattern):\n    r\"\"\"Create extractor from a regular expression.\n\n    Only groups from match are extracted and concatenated, so it\n    is required to define at least one group. Ex:\n    >>> extractor = create_regex_extractor(\"(\\d+).*(\\.\\d+)\")\n    >>> extractor(u\"The price is <b>45</b></i class='sm'>.50</i> $\")\n    u'45.50'\n    \"\"\"\n    ereg = re.compile(pattern, re.S)\n\n    def _extractor(txt, htmlpage=None):\n        if txt is None:\n            return\n        m = ereg.search(txt)\n        if m:\n            return htmlregion(u\"\".join([g for g in m.groups() or m.group()\n                                        if g]))\n\n    name = u\"Regex: %s\" % pattern\n    if six.PY2:\n        name = name.encode('utf-8')\n    _extractor.__name__ = name\n    return _extractor\n\n\ndef create_type_extractor(_type):\n    types = FieldTypeManager()\n    extractor = types.type_processor_class(_type)()\n\n    def _extractor(txt, htmlpage=None):\n        if txt is None:\n            return\n        page = getattr(htmlpage, 'htmlpage', htmlpage)\n        if not hasattr(txt, 'text_content'):\n            txt = HtmlPageRegion(page, txt)\n        data = extractor.extract(txt)\n        if data:\n            return extractor.adapt(data, page)\n    name = (u\"Type Extractor: %s\" % _type)\n    if six.PY2:\n        name = name.encode('utf-8')\n    _extractor.__name__ = name\n    return _extractor\n\n\nclass PipelineExtractor:\n    def __init__(self, *extractors):\n        self.extractors = extractors\n\n    def __call__(self, value):\n        for extractor in self.extractors:\n            value = extractor(value) if value else value\n        return value\n\n    @property\n    def __name__(self):\n        return repr(self.extractors)\n\n\ndef apply_extractors(descriptor, template_extractors, extractors):\n    type_processor_class = FieldTypeManager().type_processor_class\n    if isinstance(template_extractors, dict):\n        template_extractors = template_extractors.items()\n    attribute_map = descriptor.attribute_map\n    for field_name, field_extractors in template_extractors:\n        equeue = []\n        for eid in field_extractors:\n            e_doc = extractors.get(eid, {})\n            if \"regular_expression\" in e_doc:\n                equeue.append(\n                    create_regex_extractor(e_doc[\"regular_expression\"]))\n            elif \"type_extractor\" in e_doc:  # overrides default one\n                try:\n                    display_name = attribute_map[field_name].description\n                except KeyError:\n                    display_name = field_name\n                field_type = type_processor_class(e_doc[\"type_extractor\"])()\n                attribute_map[field_name] = SlybotFieldDescriptor(\n                    field_name, display_name, field_type)\n        if field_name not in attribute_map:\n            # if not defined type extractor, use text type by default, as it is\n            # by far the most commonly used\n            attribute_map[field_name] = SlybotFieldDescriptor(\n                field_name, field_name,\n                type_processor_class(\"text\")())\n\n        if equeue:\n            equeue.insert(0, attribute_map[field_name].extractor)\n            attribute_map[field_name].extractor = PipelineExtractor(*equeue)\n\n\ndef add_extractors_to_descriptors(descriptors, extractors):\n    new_extractors = {}\n    for _id, data in extractors.items():\n        if \"regular_expression\" in data:\n            extractor = create_regex_extractor(data['regular_expression'])\n        else:\n            extractor = create_type_extractor(data['type_extractor'])\n        new_extractors[_id] = extractor\n    for descriptor in descriptors.values():\n        if isinstance(descriptor, SlybotItemDescriptor):\n            descriptor.extractors = new_extractors\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/__init__.py",
    "content": "\"\"\"\nField Types\n\nSpiders extracts items of a given type. These item types are defined by a\nschema, which specifies the type of each field in the item. This module\ncontains FieldProcessor implementations, which are the classes responsible for\ncustom processing of these types.\n\nWe keep the types of scrapers supported flexible and allow different methods\nfor each. In the future, we expect many different types, for example one might\nbe a mechanical turk scraper and the fields would have to do user validation\nand provide error messages.\n\"\"\"\nfrom .text import (\n    RawFieldTypeProcessor,\n    TextFieldTypeProcessor,\n    SafeHtmlFieldTypeProcessor\n)\nfrom .images import ImagesFieldTypeProcessor\nfrom .url import UrlFieldTypeProcessor\nfrom .number import NumberTypeProcessor\nfrom .point import GeoPointFieldTypeProcessor\nfrom .price import PriceTypeProcessor\nfrom .date import DateTimeFieldTypeProcessor\n\n\nclass FieldTypeManager(object):\n    _TYPEMAP = dict((c.name, c) for c in (\n        RawFieldTypeProcessor, TextFieldTypeProcessor,\n        ImagesFieldTypeProcessor, NumberTypeProcessor,\n        UrlFieldTypeProcessor, SafeHtmlFieldTypeProcessor,\n        GeoPointFieldTypeProcessor, PriceTypeProcessor,\n        DateTimeFieldTypeProcessor\n    ))\n    _names = sorted(_TYPEMAP.keys())\n\n    def available_type_names(self):\n        \"\"\"Find the names of all field types available. \"\"\"\n        return self._names\n\n    def type_processor_class(self, name):\n        \"\"\"Retrieve the class for the given extractor\n\n        This can be useful to introspect on the constructor arguments. If no\n        suitable type is found, it will default to the RawFieldTypeProcessor\n        (no processing of extracted data is done).\n        \"\"\"\n        return self._TYPEMAP.get(name, RawFieldTypeProcessor)\n\n    def type_processor_serializer(self, name):\n        processor = self._TYPEMAP.get(name, RawFieldTypeProcessor)\n        return getattr(processor, 'serializer', None)\n\n    def all_processor_classes(self):\n        \"\"\"Retrieve all processor classes registered\"\"\"\n        return list(self._TYPEMAP.values())\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/date.py",
    "content": "from datetime import datetime\n\nfrom dateparser.date import DateDataParser\nfrom scrapy.utils.spider import arg_to_iter\n\nfrom .text import TextFieldTypeProcessor\n\n\nclass DateTimeFieldTypeProcessor(TextFieldTypeProcessor):\n    \"\"\"\n    Extracts a date from text\n\n    >>> from scrapely.extractors import htmlregion\n    >>> d = DateTimeFieldTypeProcessor()\n    >>> d.extract(htmlregion(u\"  Jan 12, 2014 11:15AM  <br>\"))\n    u'Jan 12, 2014 11:15AM'\n    >>> d.adapt(u\"Jan 12, 2014 11:15AM\", None).strftime('%Y-%m-%dT%H:%M:%S')\n    '2014-01-12T11:15:00'\n    >>> d.adapt(u'no date here', None)\n    \"\"\"\n    DATETIME_FMT = \"%Y-%m-%d %H:%M:%S\"\n\n    name = 'date'\n    description = 'Extracts date and time information from a string'\n\n    def extract(self, htmlregion):\n        return super(DateTimeFieldTypeProcessor, self).extract(htmlregion)\n\n    def adapt(self, text, htmlpage=None):\n        try:\n            return DateDataParser().get_date_data(text)['date_obj']\n        except ValueError:\n            return\n\n    @classmethod\n    def serializer(cls, output):\n        return [\n            o.strftime(cls.DATETIME_FMT) if isinstance(o, datetime) else str(o)\n            for o in arg_to_iter(output)\n        ]\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/images.py",
    "content": "\"\"\"Images.\"\"\"\nfrom scrapely.extractors import extract_image_url\nfrom slybot.fieldtypes.url import UrlFieldTypeProcessor\n\n\nclass ImagesFieldTypeProcessor(UrlFieldTypeProcessor):\n    name = 'image'\n    description = 'extracts image URLs'\n\n    def extract(self, text):\n        if text is not None:\n            return extract_image_url(text) or ''\n        return ''\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/number.py",
    "content": "\"\"\"\nNumeric data extraction\n\"\"\"\nfrom scrapely.extractors import contains_any_numbers, extract_number\n\nclass NumberTypeProcessor(object):\n    \"\"\"NumberTypeProcessor\n\n    Extracts a number from text\n\n    >>> from scrapely.extractors import htmlregion\n    >>> n = NumberTypeProcessor()\n    >>> n.extract(htmlregion(u\"there are no numbers here\"))\n    >>> n.extract(htmlregion(u\"foo 34\"))\n    u'foo 34'\n    >>> n.adapt(u\"foo 34\", None)\n    u'34'\n\n    If more than one number is present, nothing is extracted\n    >>> n.adapt(u\"34 48\", None) is None\n    True\n    \"\"\"\n    name = 'number'\n    description = 'extracts a single number in the text passed'\n\n    def extract(self, htmlregion):\n        \"\"\"Only matches and extracts strings with at least one number\"\"\"\n        return contains_any_numbers(htmlregion.text_content)\n\n    def adapt(self, text, htmlpage=None):\n        return extract_number(text)\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/point.py",
    "content": "\nclass GeoPointFieldTypeProcessor(object):\n    \"\"\"Renders point with tags\"\"\"\n\n    name = 'geopoint'\n    description = 'geo point'\n    multivalue = True\n\n    def extract(self, value):\n        return value\n\n    def adapt(self, value, htmlpage=None):\n        return value\n\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/price.py",
    "content": "\"\"\"\nPrice field types\n\"\"\"\nfrom scrapely import extractors\n\nclass PriceTypeProcessor(object):\n    \"\"\"Extracts price from text\"\"\"\n    name = \"price\"\n    description = \"extracts a price decimal number in the text passed\"\n\n    def extract(self, htmlregion):\n        return extractors.contains_any_numbers(htmlregion.text_content)\n\n    def adapt(self, text, htmlpage=None):\n        return extractors.extract_price(text)\n\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/text.py",
    "content": "\"\"\"\nText types\n\"\"\"\nimport re\nfrom scrapely.extractors import text as extract_text, safehtml\nfrom w3lib.html import remove_tags\n_REMOVE_TAGID = re.compile(' data-tagid=\"\\d+\"').sub\n\n\nclass _BaseTextProcessor(object):\n    \"\"\"basic text processor, defines identity functions, some of which\n    are overridden in subclasses\n    \"\"\"\n    def extract(self, text):\n        \"\"\"Matches and extracts any string, as it is\"\"\"\n        return _REMOVE_TAGID('', text)\n\n    def adapt(self, text, htmlpage=None):\n        return text\n\n\nclass RawFieldTypeProcessor(_BaseTextProcessor):\n    \"\"\"Extracts the raw data, without processing. Data is escaped for presentation\n\n    >>> from scrapely.extractors import htmlregion\n    >>> r = RawFieldTypeProcessor()\n    >>> html = htmlregion(u'<p>test</p>')\n    >>> r.extract(html)\n    u'<p>test</p>'\n    >>> r.adapt(html, None)\n    u'<p>test</p>'\n    \"\"\"\n    name = 'raw html'\n    description = 'raw html as it appears in the page'\n\n\nclass TextFieldTypeProcessor(_BaseTextProcessor):\n    \"\"\"Extracts strings, removing all HTML markup\n\n    >>> from scrapely.extractors import htmlregion\n    >>> p = TextFieldTypeProcessor()\n    >>> html = htmlregion(u'<p>test</p><!-- comment --><script> // script</script>!')\n    >>> extracted = p.extract(html)\n    >>> extracted\n    u'test !'\n    >>> p.adapt(extracted, None)\n    u'test !'\n    >>> html = htmlregion(u'<p>&nbsp;\\\\n<p>')\n    >>> p.extract(html)\n    u''\n    \"\"\"\n    name = 'text'\n    description = 'extracts text from web pages, cleaning all markup'\n\n    def extract(self, htmlregion):\n        text = getattr(htmlregion, 'text_content', htmlregion)\n        return remove_tags(extract_text(text)).strip()\n\n\nclass SafeHtmlFieldTypeProcessor(_BaseTextProcessor):\n    \"\"\"Extracts strings, with only a safe subset of HTML remaining\n\n    Extraction checks for presence of text content, and adapt transforms the HTML\n    >>> from scrapely.extractors import htmlregion\n    >>> p = SafeHtmlFieldTypeProcessor()\n    >>> html = htmlregion(u'<p>test</p> <blink>foo')\n    >>> p.extract(html)\n    u'<p>test</p> <blink>foo'\n    >>> p.adapt(html)\n    u'<p>test</p> foo'\n    >>> html = htmlregion(u'<p><a href=\"#\">value</a><script>asdf</script>')\n    >>> p.extract(html)\n    u'<p><a href=\"#\">value</a><script>asdf</script>'\n    >>> p.adapt(html)\n    u'<p>value</p>'\n\n    html without text must not be extracted\n    >>> html = htmlregion(u'<br/>')\n\n    \"\"\"\n    name = 'safe html'\n    description = 'removes all but a small subset of html tags'\n\n    def extract(self, htmlregion):\n        if extract_text(htmlregion.text_content):\n            return htmlregion\n\n    def adapt(self, text, htmlpage=None):\n        \"\"\"Remove html markup\"\"\"\n        return safehtml(text)\n"
  },
  {
    "path": "slybot/slybot/fieldtypes/url.py",
    "content": "import re\nfrom six.moves.urllib.parse import urljoin\nfrom scrapely.extractors import url as strip_url\nfrom scrapy.utils.url import safe_download_url\nfrom scrapy.utils.markup import unquote_markup\nfrom slybot.baseurl import get_base_url\ndisallowed = re.compile('[\\x00-\\x1F\\x7F]')\n\n\nclass UrlFieldTypeProcessor(object):\n    \"\"\"Renders URLs as links\"\"\"\n\n    name = 'url'\n    description = 'URL'\n    limit = 80\n\n    def extract(self, text):\n        if text is not None:\n            return strip_url(text)\n        return ''\n\n    def adapt(self, text, htmlpage=None):\n        if htmlpage is None:\n            return text\n        if text is None:\n            return\n        encoding = getattr(htmlpage, 'encoding', 'utf-8')\n        text = text.encode(encoding)\n        unquoted = unquote_markup(text, encoding=encoding)\n        cleaned = strip_url(disallowed.sub('', unquoted))\n        base = get_base_url(htmlpage).encode(encoding)\n        base_url = strip_url(unquote_markup(base, encoding=encoding))\n        joined = urljoin(base_url, cleaned)\n        return safe_download_url(joined)\n"
  },
  {
    "path": "slybot/slybot/generic_form.py",
    "content": "import re\nimport itertools\n\nfrom collections import OrderedDict\n\nfrom lxml import html\n\nfrom scrapy.http.request.form import _get_inputs\n\n\nclass GenericForm:\n\n    def __init__(self, **kwargs):\n        self.kwargs = kwargs\n\n    def _pick_node(self, doc, selector):\n        nodes = doc.xpath(selector['xpath'])\n        if nodes:\n            return nodes[0]\n\n    def _filter_by_regex(self, lines, regex):\n        search_regex = re.compile(regex).search\n        return [l for l in lines if search_regex(l)]\n\n    def _get_field_values(self, form, field_descriptor):\n        if 'name' in field_descriptor:\n            field_name = field_descriptor['name']\n        else:\n            select_field = self._pick_node(form, field_descriptor)\n            field_name = select_field.name\n\n        field_type = field_descriptor['type']\n        if field_type == 'constants':\n            return [[field_name, option] for option in self.get_value(field_descriptor)]\n        elif field_type == 'iterate':\n            select_field = self._pick_node(form, field_descriptor)\n            values = self._filter_by_regex(select_field.value_options,\n                                           self.get_value(field_descriptor))\n            return [[select_field.name, option] for option in values]\n        elif field_type == 'inurl':\n            return [[field_name, option] for option in field_descriptor['file_values']]\n\n    def get_value(self, field_descriptor):\n        values = field_descriptor.get('value', '')\n        if isinstance(values, list):\n            return [val.format(**self.kwargs) for val in values]\n        else:\n            return values.format(**self.kwargs)\n\n    def set_values_url_field(self, field_descriptor, body):\n        field_descriptor['file_values'] = body.split('\\n')\n\n    def get_url_field(self, form_descriptor):\n        for i, field_descriptor in enumerate(form_descriptor['fields']):\n            if (field_descriptor['type'] == 'inurl'\n                and (not 'file_values' in field_descriptor or\n                     not field_descriptor['file_values'])):\n                yield i, field_descriptor\n\n    def fill_generic_form(self, url, body, form_descriptor):\n\n        doc = html.document_fromstring(body, base_url=url)\n        form = self._pick_node(doc, form_descriptor)\n        if form is None:\n            raise Exception('Generic form not found')\n\n        # Get all the possible inputs for each field\n        values = [self._get_field_values(form, field)\n                  for field in form_descriptor['fields']]\n        for params in itertools.product(*values):\n            form_values = OrderedDict(_get_inputs(form, None, False, None,\n                                                  None))\n            for name, option in params:\n                form_values[name] = option\n            yield list(form_values.items()), form.action or form.base_url, form.method\n"
  },
  {
    "path": "slybot/slybot/item.py",
    "content": "import hashlib\nfrom collections import defaultdict, namedtuple\n\nfrom scrapy.item import DictItem, Field, Item\nfrom scrapely.descriptor import ItemDescriptor, FieldDescriptor\n\nfrom slybot.fieldtypes import FieldTypeManager\nFieldProcessor = namedtuple('FieldProcessor', ['name', 'description',\n                                               'extract', 'adapt'])\n\n\nclass SlybotItem(DictItem):\n    # like DictItem.__setitem__ but doesn't check the field is declared\n    def __setitem__(self, name, value):\n        self._values[name] = value\n\n    def display_name(self):\n        return self._display_name\n\n    @classmethod\n    def create_iblitem_class(cls, schema):\n\n        class IblItem(cls, Item):\n            ftm = FieldTypeManager()\n            fields = defaultdict(dict)\n            version_fields = []\n            _display_name = schema.get('name')\n            for _name, _meta in schema.get('fields', {}).items():\n                name = _meta.get('name', _name)\n                serializer = ftm.type_processor_serializer(_meta.get('type'))\n                if serializer:\n                    _meta['serializer'] = serializer\n                fields[name] = Field(_meta)\n                if not _meta.get(\"vary\", False):\n                    version_fields.append(name)\n            version_fields = sorted(version_fields)\n        return IblItem\n\n\ndef create_slybot_item_descriptor(schema, schema_name=\"\"):\n    field_type_manager = FieldTypeManager()\n    descriptors = []\n    for pname, pdict in schema.get('fields', {}).items():\n        required = pdict['required']\n        pdisplay_name = pdict.get('name', pname)\n        pclass = field_type_manager.type_processor_class(pdict['type'])\n        processor = pclass()\n        descriptor = SlybotFieldDescriptor(pname, pdisplay_name, processor,\n                                           required)\n        descriptors.append(descriptor)\n    return SlybotItemDescriptor(schema_name,\n                                schema.get('name', schema_name),\n                                descriptors)\n\n\nclass SlybotFieldDescriptor(FieldDescriptor):\n    \"\"\"Extends the scrapely field descriptor to use slybot fieldtypes and\n    to be created from a slybot item schema\n    \"\"\"\n\n    def __init__(self, name, description, field_type_processor, required=False):\n        \"\"\"Create a new SlybotFieldDescriptor with the given name and description.\n        The field_type_processor is used for extraction and is publicly available\n        \"\"\"\n        FieldDescriptor.__init__(self, name, description,\n                                 field_type_processor.extract, required)\n        # add an adapt method\n        self.adapt = field_type_processor.adapt\n        self._processor = field_type_processor\n\n    @property\n    def processor(self):\n        return FieldProcessor(self._processor.name,\n                              self._processor.description,\n                              self.extractor, self.adapt)\n\n    def __str__(self):\n        return \"SlybotFieldDescriptor(%s, %s)\" % (self.name,\n                                                  self._processor.name)\n\n\nclass SlybotItemDescriptor(ItemDescriptor):\n    def __str__(self):\n        return \"SlybotItemDescriptor(%s)\" % self.name\n\n    def copy(self):\n        attribute_descriptors = []\n        for d in self.attribute_map.values():\n            attribute_descriptors.append(\n                SlybotFieldDescriptor(d.name, d.description, d.processor,\n                                      d.required))\n        return SlybotItemDescriptor(self.name, self.description,\n                                    attribute_descriptors)\n\n\ndef create_item_version(item):\n    \"\"\"Item version based on hashlib.sha1 algorithm\"\"\"\n    if not item.version_fields:\n        return\n    _hash = hashlib.sha1()\n    for attrname in item.version_fields:\n        _hash.update(repr(item.get(attrname)).encode('utf-8'))\n    return _hash.digest()\n"
  },
  {
    "path": "slybot/slybot/linkextractor/__init__.py",
    "content": "\"\"\"\nLink extraction for auto scraping\n\"\"\"\nfrom scrapy.utils.misc import load_object\n\nfrom .base import BaseLinkExtractor, ALLOWED_SCHEMES\nfrom .html import HtmlLinkExtractor\nfrom .pagination import PaginationExtractor\nfrom .xml import XmlLinkExtractor, RssLinkExtractor, SitemapLinkExtractor, AtomLinkExtractor\nfrom .regex import RegexLinkExtractor\nfrom .ecsv import CsvLinkExtractor\n\n_TYPE_MAP = (\n    # type, class, ignore value\n    ('regex', RegexLinkExtractor, False),\n    ('xpath', XmlLinkExtractor, False),\n    ('column', CsvLinkExtractor, False),\n    ('html', HtmlLinkExtractor, True),\n    ('pagination', PaginationExtractor, True),\n    ('rss', RssLinkExtractor, True),\n    ('sitemap', SitemapLinkExtractor, True),\n    ('atom', AtomLinkExtractor, True),\n)\ndef create_linkextractor_from_specs(specs):\n    \"\"\"Return a link extractor instance from specs. By default, return a HtmlLinkExtractor.\n    \"\"\"\n    specs = specs.copy()\n    ltype, value = specs.pop('type'), specs.pop('value')\n    if ltype == 'module':\n        cls = load_object(value)\n        return cls(**specs)\n    for key, cls, ignore in _TYPE_MAP:\n        if key == ltype:\n            if ignore:\n                return cls(**specs)\n            return cls(value, **specs)\n    raise ValueError(\"Invalid link extractor type specification\")\n"
  },
  {
    "path": "slybot/slybot/linkextractor/base.py",
    "content": "\"\"\"\nLink extraction for auto scraping\n\"\"\"\nimport re\nimport os\nimport posixpath\nfrom six.moves.urllib.parse import urlparse\nfrom scrapy.linkextractors import IGNORED_EXTENSIONS\n\n_ONCLICK_LINK_RE = re.compile(\"(?P<sep>('|\\\"))(?P<url>.+?)(?P=sep)\")\n\n_ignored_exts = frozenset(['.' + e for e in IGNORED_EXTENSIONS])\n\n# allowed protocols\nALLOWED_SCHEMES = frozenset(['http', 'https', None, ''])\n\n\nclass BaseLinkExtractor(object):\n\n    def __init__(self, max_url_len=2083, ignore_extensions=_ignored_exts,\n                 allowed_schemes=ALLOWED_SCHEMES):\n        \"\"\"Creates a new LinkExtractor\n\n        The defaults are a good guess for the first time crawl. After that, we\n        expect that they can be learned.\n        \"\"\"\n        self.max_url_len = max_url_len\n        self.ignore_extensions = ignore_extensions\n        self.allowed_schemes = allowed_schemes\n\n    def _extract_links(self, source):\n        raise NotImplementedError\n\n    def links_to_follow(self, source):\n        \"\"\"Returns normalized extracted links\"\"\"\n        for link in self._extract_links(source):\n            link = self.normalize_link(link)\n            if link is not None:\n                yield link\n\n    def normalize_link(self, link):\n        \"\"\"Normalize a link\n\n        >>> from scrapy.link import Link\n        >>> le = BaseLinkExtractor()\n        >>> l = Link('http://scrapinghub.com/some/path/../dir')\n        >>> le.normalize_link(l).url\n        'http://scrapinghub.com/some/dir'\n        >>> l = Link('http://scrapinghub.com/some//./path/')\n        >>> le.normalize_link(l).url\n        'http://scrapinghub.com/some/path/'\n\n        Files with disallowed extentions or protocols are not returned\n        >>> le.normalize_link(Link('myimage.jpg')) is None\n        True\n        >>> le.normalize_link(Link('file:///tmp/mydoc.htm')) is None\n        True\n        >>> le.normalize_link(Link('http://scrapinghub.com')).url\n        'http://scrapinghub.com/'\n\n        Fragments are removed\n        >>> le.normalize_link(Link('http://example.com/#something')).url\n        'http://example.com/'\n        >>> le.normalize_link(Link('http://example.com/#something')).fragment\n        'something'\n        >>> le.normalize_link(Link('http://scrapinghub.com#some fragment')).url\n        'http://scrapinghub.com/'\n\n        Ajax crawling\n        >>> le.normalize_link(Link('http://example.com/#!something')).url\n        'http://example.com/?_escaped_fragment_=something'\n        >>> le.normalize_link(Link('http://example.com/page.html?arg=1#!something')).url\n        'http://example.com/page.html?arg=1&_escaped_fragment_=something'\n        \"\"\"\n        if len(link.url) > self.max_url_len:\n            return\n        parsed = urlparse(link.url)\n        extention = os.path.splitext(parsed.path)[1].lower()\n        if parsed.scheme not in self.allowed_schemes or \\\n                extention in self.ignore_extensions:\n            return\n        # path normalization\n        path = parsed.path or '/'\n        path = path if path[0] != '.' else '/' + path\n        path = posixpath.normpath(path)\n        if parsed.path.endswith('/') and not path.endswith('/'):\n            path += '/'\n        if parsed.fragment.startswith('!'):\n            query = '_escaped_fragment_=%s' % parsed.fragment[1:]\n            query = parsed.query + '&' + query if parsed.query else query\n            parsed = parsed._replace(query=query)\n        link.fragment = parsed.fragment\n        if path != parsed.path or parsed.fragment:\n            link.url = parsed._replace(path=path, fragment='').geturl()\n        return link\n"
  },
  {
    "path": "slybot/slybot/linkextractor/ecsv.py",
    "content": "from __future__ import absolute_import\nimport csv\n\nfrom six import string_types, StringIO, PY2\n\nfrom scrapy.link import Link\nfrom .base import BaseLinkExtractor\n\n# see http://docs.python.org/2/library/csv.html#csv-fmt-params\n_FORMAT_PARAMETERS = (\n    ('delimiter', ','),\n    ('quotechar', '\"'),\n    ('doublequote', True),\n    ('escapechar', None),\n    ('lineterminator', '\\r\\n'),\n    ('skipinitialspace', False),\n    ('strict', False),\n)\n\n\nclass CsvLinkExtractor(BaseLinkExtractor):\n    def __init__(self, column=0, **kwargs):\n        self.fmtparams = dict((key, kwargs.pop(key, default))\n                              for key, default in _FORMAT_PARAMETERS)\n        if PY2:\n            for key, val in self.fmtparams.items():\n                if isinstance(val, unicode):\n                    self.fmtparams[key] = val.encode()\n        super(CsvLinkExtractor, self).__init__(**kwargs)\n        self.allowed_schemes = [x for x in self.allowed_schemes\n                                if x and isinstance(x, string_types)]\n        self.column = column\n\n    def _extract_links(self, response):\n        buff = StringIO(response.text)\n        reader = csv.reader(buff, **self.fmtparams)\n        for row in reader:\n            if len(row) > self.column:\n                yield Link(row[self.column])\n"
  },
  {
    "path": "slybot/slybot/linkextractor/html.py",
    "content": "\"\"\"\nLink extraction for auto scraping\n\"\"\"\nimport re\nimport six\nfrom six.moves.urllib.parse import urljoin\nfrom six.moves.html_entities import name2codepoint\nfrom scrapy.link import Link\nfrom scrapy.http import HtmlResponse\n\nfrom scrapely.htmlpage import HtmlTag, HtmlTagType\n\nfrom w3lib.html import replace_entities\n\nfrom slybot.linkextractor.base import BaseLinkExtractor\nfrom slybot.utils import htmlpage_from_response\n\n_META_REFRESH_CONTENT_RE = re.compile(r\"(?P<int>(\\d*\\.)?\\d+)\\s*;\\s*url=(?P<url>.*)\")\n_ONCLICK_LINK_RE = re.compile(\"(?P<sep>('|\\\"))(?P<url>.+?)(?P=sep)\")\n_ENTITIES_TO_KEEP = frozenset({c for c in name2codepoint} -\n                              {'amp', 'quot', 'lt', 'gt'})\n\n\ndef remove_entities(text, encoding):\n    return replace_entities(text, keep=_ENTITIES_TO_KEEP, encoding=encoding)\n\n\n\nclass HtmlLinkExtractor(BaseLinkExtractor):\n    \"\"\"Link extraction for auto scraping\n\n    Links (urls and the anchor text) are extracted from HtmlPage objects.\n\n    Some safe normalization is done (always correct, does not make assumptions\n    about how the site handles URLs). It allows some customization, which we\n    expect to learn for specific websites from the crawl logs.\n    \"\"\"\n\n    def _extract_links(self, response_or_htmlpage):\n        \"\"\"Extract links to follow from an html page\n\n        This uses `iterlinks` to read the links in the page.\n        \"\"\"\n        if isinstance(response_or_htmlpage, HtmlResponse):\n            response_or_htmlpage = htmlpage_from_response(response_or_htmlpage)\n        return iterlinks(response_or_htmlpage)\n\n\ndef iterlinks(htmlpage):\n    \"\"\"Iterate through the links in the HtmlPage passed\n\n    For example:\n    >>> import six\n    >>> from scrapy.link import Link\n    >>> from scrapely.htmlpage import HtmlPage\n    >>> try:\n    ...     if type(unicode) == type:\n    ...         utext = lambda x: x\n    ... except NameError:\n    ...     class utext(str):\n    ...         def __repr__(self): return 'u{}'.format(super().__repr__())\n    >>> def link_repr(self):\n    ...      text = self.text\n    ...      if isinstance(text, six.text_type):\n    ...          text = utext(self.text)\n    ...      return (\n    ...         'Link(url={!r}, text={!r}, fragment={!r}, nofollow={!r})'\n    ...      ).format(self.url, text, self.fragment, self.nofollow)\n    >>> Link.__repr__ = link_repr\n    >>> p = HtmlPage(body=u\"Please visit <a href='http://scrapinghub.com/'>Scrapinghub</a>\")\n    >>> next(iterlinks(p))\n    Link(url='http://scrapinghub.com/', text=u'Scrapinghub', fragment='', nofollow=False)\n    >>> p = HtmlPage(body=u\"Go <a href='home.html'>Home</a>\")\n    >>> next(iterlinks(p))\n    Link(url='home.html', text=u'Home', fragment='', nofollow=False)\n\n    When a url is specified, absolute urls are made:\n    >>> p.url = 'http://scrapinghub.com/'\n    >>> next(iterlinks(p))\n    Link(url='http://scrapinghub.com/home.html', text=u'Home', fragment='', nofollow=False)\n\n    Base href attributes in the page are respected\n    >>> p.body = u\"<html><head><base href='myproject/'/></head><body>see my <a href='index.html'>project</a></body>\"\n    >>> next(iterlinks(p))\n    Link(url='http://scrapinghub.com/myproject/index.html', text=u'project', fragment='', nofollow=False)\n    >>> p.body = u\"<html><head><base href='http://scrape.io\\\\\\\\' /></head><body>see my <a href='index.html'>project</a></body>\"\n    >>> next(iterlinks(p))\n    Link(url='http://scrape.io/index.html', text=u'project', fragment='', nofollow=False)\n\n    Frameset and iframe urls are extracted\n    >>> p = HtmlPage(body=u\"<html><frameset><frame src=frame1.html><frame src=frame2.html></frameset><iframe src='iframe.html'/></html>\")\n    >>> [l.url for l in iterlinks(p)]\n    ['frame1.html', 'frame2.html', 'iframe.html']\n\n    As are meta refresh tags:\n    >>> p = HtmlPage(body=u\"<html><head><meta http-equiv='refresh' content='5;url=http://example.com/' />\")\n    >>> next(iterlinks(p)).url\n    'http://example.com/'\n\n    nofollow is set to True if the link has a rel='nofollow' attribute:\n    >>> p = HtmlPage(body=u\"<a href='somewhere.html' rel='nofollow'>somewhere</a>\")\n    >>> list(iterlinks(p))\n    [Link(url='somewhere.html', text=u'somewhere', fragment='', nofollow=True)]\n\n    It does not require well formed HTML and behaves similar to many browsers\n    >>> p = HtmlPage(body=u\"<a href='foo'>foo <a href=bar>bar</a><a href='baz'/>baz\")\n    >>> list(iterlinks(p))\n    [Link(url='foo', text=u'foo ', fragment='', nofollow=False), Link(url='bar', text=u'bar', fragment='', nofollow=False), Link(url='baz', text=u'baz', fragment='', nofollow=False)]\n\n    Leading and trailing whitespace should be removed, including in base href\n    >>> p = HtmlPage(body=u\"<head><base href=' foo/ '/></head><a href='bar '/>baz\")\n    >>> list(iterlinks(p))\n    [Link(url='foo/bar', text=u'baz', fragment='', nofollow=False)]\n\n    Test standard onclick links\n    >>> p = HtmlPage(url=\"http://www.example.com\", body=u\"<html><td onclick=window.open('page.html?productid=23','win2') >\")\n    >>> list(iterlinks(p))\n    [Link(url='http://www.example.com/page.html?productid=23', text=None, fragment='', nofollow=False)]\n\n    >>> p = HtmlPage(\"http://www.example.com\", body=u\"<html><a href='#' onclick=window.open('page.html?productid=24','win2') >\")\n    >>> list(iterlinks(p))\n    [Link(url='http://www.example.com/page.html?productid=24', text=None, fragment='', nofollow=False)]\n\n    >>> p = HtmlPage(body=u\"<html><div onclick=window.location.href='http://www.jungleberry.co.uk/Fair-Trade-Earrings/Aguas-Earrings.htm'>\")\n    >>> list(iterlinks(p))\n    [Link(url='http://www.jungleberry.co.uk/Fair-Trade-Earrings/Aguas-Earrings.htm', text=None, fragment='', nofollow=False)]\n\n    Onclick with no href\n    >>> p = HtmlPage(\"http://www.example.com\", body=u\"<html><a onclick=window.open('page.html?productid=24','win2') >\")\n    >>> list(iterlinks(p))\n    [Link(url='http://www.example.com/page.html?productid=24', text=None, fragment='', nofollow=False)]\n\n    Dont generate link when target is an anchor\n    >>> p = HtmlPage(\"http://www.example.com\", body=u\"<html><a href='#section1' >\")\n    >>> list(iterlinks(p))\n    []\n\n    Dont convert query params as if they were html entities\n    >>> p = HtmlPage(\"http://example.com\", body=u\"<html><a href='/api?title=1&prop=4&pound=GBP&amp;amp=7'></a>\")\n    >>> list(iterlinks(p))\n    [Link(url='http://example.com/api?title=1&prop=4&pound=GBP&amp=7', text=u'', fragment='', nofollow=False)]\n\n    Extract links from <link> tags in page header\n    >>> p = HtmlPage(\"http://example.blogspot.com/\", body=u\"<html><head><link rel='me' href='http://www.blogger.com/profile/987372' /></head><body>This is my body!</body></html>\")\n    >>> list(iterlinks(p))\n    [Link(url='http://www.blogger.com/profile/987372', text=None, fragment='', nofollow=False)]\n    \"\"\"\n    encoding = htmlpage.encoding\n    base_href = remove_entities(htmlpage.url, encoding=encoding).strip('\\\\')\n\n    def mklink(url, anchortext=None, nofollow=False):\n        url = url.strip()\n        fullurl = urljoin(\n            base_href, remove_entities(url, encoding=htmlpage.encoding))\n        if not isinstance(fullurl, six.text_type):\n            fullurl = fullurl.encode(htmlpage.encoding)\n        return Link(fullurl, text=anchortext, nofollow=nofollow)\n\n    # iter to quickly scan only tags\n    tag_iter = (t for t in htmlpage.parsed_body if isinstance(t, HtmlTag))\n\n    # parse body\n    astart = ahref = None\n    body, CLOSE_TAG, nofollow = htmlpage.body, HtmlTagType.CLOSE_TAG, False\n    for nexttag in tag_iter:\n        tagname = nexttag.tag\n        attributes = nexttag.attributes\n        if tagname == 'a' and (nexttag.tag_type == CLOSE_TAG or\n                               attributes.get('href') and\n                               not attributes.get('href', '').startswith('#')):\n            if astart:\n                yield mklink(ahref, body[astart:nexttag.start], nofollow)\n                astart = ahref = None\n                nofollow = False\n            href = attributes.get('href')\n            if href:\n                ahref = href\n                astart = nexttag.end\n                nofollow = attributes.get('rel') == u'nofollow'\n        elif tagname == 'head':\n            # scan ahead until end of head section\n            for nexttag in tag_iter:\n                tagname = nexttag.tag\n                if ((tagname == 'head' and\n                        nexttag.tag_type == HtmlTagType.CLOSE_TAG) or\n                        tagname == 'body'):\n                    break\n                if tagname == 'base':\n                    href = nexttag.attributes.get('href')\n                    if href:\n                        joined_base = urljoin(htmlpage.url,\n                                              href.strip().strip('\\\\'),\n                                              htmlpage.encoding)\n                        base_href = remove_entities(\n                            joined_base, encoding=htmlpage.encoding)\n                elif tagname == 'meta':\n                    attrs = nexttag.attributes\n                    if attrs.get('http-equiv') == 'refresh':\n                        m = _META_REFRESH_CONTENT_RE.search(\n                            attrs.get('content') or '')\n                        if m:\n                            target = m.group('url')\n                            if target:\n                                yield mklink(target)\n                elif tagname == 'link':\n                    href = nexttag.attributes.get('href')\n                    if href:\n                        yield mklink(href)\n        elif tagname == 'area':\n            href = attributes.get('href')\n            if href:\n                nofollow = attributes.get('rel') == u'nofollow'\n                yield mklink(href, attributes.get('alt', ''), nofollow)\n        elif tagname in ('frame', 'iframe'):\n            target = attributes.get('src')\n            if target:\n                yield mklink(target)\n        elif 'onclick' in attributes:\n            match = _ONCLICK_LINK_RE.search(attributes[\"onclick\"] or \"\")\n            if not match:\n                continue\n            target = match.group(\"url\")\n            nofollow = attributes.get('rel') == u'nofollow'\n            yield mklink(target, nofollow=nofollow)\n\n    if astart:\n        yield mklink(ahref, htmlpage.body[astart:])\n"
  },
  {
    "path": "slybot/slybot/linkextractor/pagination.py",
    "content": "from scrapy.http import Response\nfrom scrapy.link import Link\n\nfrom page_finder import LinkAnnotation\nfrom .html import HtmlLinkExtractor\n\n\nclass PaginationExtractor(HtmlLinkExtractor):\n    def __init__(self, **specs):\n        self.link_annotation = LinkAnnotation()\n        self.visited = set()\n        self.url_to_link = {}\n        start_urls = specs.get('start_urls')\n        if start_urls:\n            self.link_annotation.load(start_urls)\n            for url in start_urls:\n                self.url_to_link[url] = Link(url)\n                self.visited.add(url)\n                self.link_annotation.mark_link(url, follow=True)\n        super(PaginationExtractor, self).__init__()\n\n    def _extract_links(self, response_or_htmlpage, n_links=3):\n        self.visited.add(response_or_htmlpage.url)\n        new_links = list(\n            super(PaginationExtractor, self)._extract_links(response_or_htmlpage))\n        for link in new_links:\n            self.url_to_link[link.url] = link\n        self.link_annotation.load(link.url for link in new_links)\n        if isinstance(response_or_htmlpage, Response):\n            n_items = response_or_htmlpage.meta.get('n_items')\n        else:\n            n_items = response_or_htmlpage.headers.get('n_items')\n        if n_items is not None:\n            self.link_annotation.mark_link(\n                response_or_htmlpage.url, follow=(n_items > 0))\n        best = self.link_annotation.best_links_to_follow()\n        if best:\n            pages = []\n            for url in best:\n                if url not in self.visited:\n                    pages.append(self.url_to_link[url]) # TODO: extract only the best link?\n                    if len(pages) == n_links:\n                        return pages\n        return new_links\n"
  },
  {
    "path": "slybot/slybot/linkextractor/regex.py",
    "content": "from __future__ import absolute_import\nimport re\nfrom scrapy.link import Link\n\nfrom .base import BaseLinkExtractor\nimport six\n\n# Based on http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without-the\n# leaves aside the fragment part, not needed for link extraction\nURL_DEFAULT_REGEX = r'(?:[A-Za-z0-9.\\-]+|(?:www.|[-;:&=\\+\\$,\\w]+@)[A-Za-z0-9.\\-]+)(?:(?:\\/[\\+~%\\/.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@.\\w_]*)(?:#[.\\!\\/\\w]*)?)?'\n\nclass RegexLinkExtractor(BaseLinkExtractor):\n    def __init__(self, regex=None, **kwargs):\n        super(RegexLinkExtractor, self).__init__(**kwargs)\n        self.allowed_schemes = [x for x in self.allowed_schemes if x and isinstance(x, six.string_types)]\n        regex = regex or '(?:%s)://%s' % ('|'.join(self.allowed_schemes), URL_DEFAULT_REGEX)\n        self.regex = re.compile(regex)\n\n    def _extract_links(self, response):\n        \"\"\"First extract regex groups(). If empty, extracts from regex group()\"\"\"\n        for s in self.regex.finditer(response.text):\n            if s.groups():\n                for url in s.groups():\n                    yield Link(url)\n            else:\n                yield Link(s.group())\n\n\n"
  },
  {
    "path": "slybot/slybot/linkextractor/xml.py",
    "content": "\"\"\"\nLink extraction for auto scraping\n\"\"\"\nimport six\nfrom scrapy.link import Link\nfrom scrapy.selector import Selector\n\nfrom slybot.linkextractor.base import BaseLinkExtractor\nRSS_XPATH = \"//item/link/text()\"\nSITEMAP_XPATH = \"//urlset/url/loc/text()|//sitemapindex/sitemap/loc/text()\"\nATOM_XPATH = \"//link/@href\"\n\n\nclass XmlLinkExtractor(BaseLinkExtractor):\n    \"\"\"Link extractor for XML sources\"\"\"\n    def __init__(self, xpath=None, **kwargs):\n        if not xpath:\n            xpath = '|'.join((RSS_XPATH, SITEMAP_XPATH, ATOM_XPATH))\n            self.remove_namespaces = True\n        else:\n            self.remove_namespaces = kwargs.pop('remove_namespaces', False)\n        super(XmlLinkExtractor, self).__init__(**kwargs)\n        self.xpath = xpath\n\n    def _extract_links(self, response):\n        body = response.body_as_unicode()\n        _type = 'html'\n        if body.lstrip().startswith('<?xml version='):\n            _type = 'xml'\n        xxs = Selector(text=body, type=_type)\n        if self.remove_namespaces:\n            xxs.remove_namespaces()\n        for url in xxs.xpath(self.xpath).extract():\n            if not isinstance(url, six.text_type):\n                url = url.encode(response.encoding)\n            yield Link(url)\n\n\nclass RssLinkExtractor(XmlLinkExtractor):\n    \"\"\"Link extraction from RSS feeds\"\"\"\n    def __init__(self, **kwargs):\n        super(RssLinkExtractor, self).__init__(RSS_XPATH, **kwargs)\n\n\nclass SitemapLinkExtractor(XmlLinkExtractor):\n    \"\"\"Link extraction for sitemap.xml feeds\"\"\"\n    def __init__(self, **kwargs):\n        kwargs['remove_namespaces'] = True\n        super(SitemapLinkExtractor, self).__init__(SITEMAP_XPATH, **kwargs)\n\n\nclass AtomLinkExtractor(XmlLinkExtractor):\n    def __init__(self, **kwargs):\n        kwargs['remove_namespaces'] = True\n        super(AtomLinkExtractor, self).__init__(ATOM_XPATH, **kwargs)\n"
  },
  {
    "path": "slybot/slybot/meta.py",
    "content": "\"\"\"\nClean up meta data if it is not wanted in the final output\n\"\"\"\nfrom scrapy.exceptions import NotConfigured\nfrom scrapy.exceptions import DropItem\n\n\nclass DropMetaPipeline(object):\n    def __init__(self, settings):\n        if not settings.getbool('SLYDROPMETA_ENABLED'):\n            raise NotConfigured\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        return cls(crawler.settings)\n\n    def process_item(self, item, spider):\n        if not hasattr(item, 'items'):\n            return item\n        meta_keys = []\n        for key, value in item.items():\n            if key.startswith('_'):\n                meta_keys.append(key)\n            if isinstance(value, list):\n                for v in value:\n                    self.process_item(v, spider)\n            else:\n                self.process_item(value, spider)\n        for key in meta_keys:\n            del item[key]\n        return item\n"
  },
  {
    "path": "slybot/slybot/pageactions.py",
    "content": "import json\nimport re\n\nLUA_SOURCE = \"\"\"\nfunction main(splash)\n    assert(splash:go(splash.args.url))\n    splash:runjs(splash.args.js_source)\n    splash:wait_for_resume(splash.args.slybot_actions_source)\n    splash:set_result_content_type(\"text/html\")\n    return splash.html()\nend\n\"\"\"\n\nJS_SOURCE = \"\"\"\nfunction main(splash) {\n    var events = (%s);\n    try{\n        __slybot__performEvents(events, function(){\n            splash.resume();\n        });\n    }catch(e){\n        splash.error(e);\n    }\n}\n\"\"\"\n\n\ndef filter_for_url(url):\n    def _filter(page_action):\n        accept = page_action.get('accept')\n        reject = page_action.get('reject')\n        if reject and re.search(reject, url):\n            return False\n        if accept and not re.search(accept, url):\n            return False\n        return True\n    return _filter\n\n\nclass PageActionsMiddleware(object):\n    def process_request(self, request, spider):\n        splash_options = request.meta.get('splash', None)\n        if not splash_options:  # Already processed or JS disabled\n            return\n        splash_args = splash_options.get('args', {})\n        events = spider.page_actions\n        url = splash_args['url']\n        events = list(filter(filter_for_url(url), events))\n        if len(events):\n            splash_options['endpoint'] = 'execute'\n            splash_args.update({\n                \"lua_source\": LUA_SOURCE,\n                \"slybot_actions_source\": (JS_SOURCE % json.dumps(events)),\n            })\n\n__all__ = ['PageActionsMiddleware']\n"
  },
  {
    "path": "slybot/slybot/plugins/__init__.py",
    "content": ""
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/__init__.py",
    "content": "from __future__ import absolute_import\n\nfrom .annotations import Annotations\n\n__all__ = [Annotations]\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/annotations.py",
    "content": "from __future__ import absolute_import\n\nimport itertools\nimport operator\n\nfrom collections import OrderedDict\n\nfrom scrapy.http import Request\nfrom scrapy.utils.misc import arg_to_iter\n\nfrom scrapely.extraction import InstanceBasedLearningExtractor\nfrom scrapely.htmlpage import HtmlPage, dict_to_page\n\nfrom slybot.linkextractor import create_linkextractor_from_specs\nfrom slybot.linkextractor.html import HtmlLinkExtractor\nfrom slybot.linkextractor.xml import XmlLinkExtractor\nfrom slybot.linkextractor.pagination import PaginationExtractor\nfrom slybot.item import SlybotItem, create_slybot_item_descriptor\nfrom slybot.extractors import apply_extractors, add_extractors_to_descriptors\nfrom slybot.utils import (htmlpage_from_response, include_exclude_filter,\n                          _build_sample, content_type)\nfrom .extraction import SlybotIBLExtractor\n_CLUSTER_NA = 'not available'\n_CLUSTER_OUTLIER = 'outlier'\n\n\nclass Annotations(object):\n    \"\"\"\n    Base Class for adding plugins to Portia Web and Slybot.\n    \"\"\"\n\n    def setup_bot(self, settings, spider, spec, items, extractors, logger):\n        \"\"\"\n        Perform any initialization needed for crawling using this plugin\n        \"\"\"\n        self.logger = logger\n        self.spider = spider\n        templates = list(map(self._get_annotated_template, spec['templates']))\n\n        _item_template_pages = sorted((\n            [t.get('scrapes'), dict_to_page(t, 'annotated_body'),\n             t.get('extractors', []), t.get('version', '0.12.0')]\n            for t in templates if t.get('page_type', 'item') == 'item'\n        ), key=lambda x: x[0])\n        self.item_classes = {}\n        self.template_scrapes = {template.get('page_id'): template['scrapes']\n                                 for template in templates\n                                 if template.get('scrapes')}\n        if (settings.get('AUTO_PAGINATION') or\n                spec.get('links_to_follow') == 'auto'):\n            self.html_link_extractor = PaginationExtractor()\n        else:\n            self.html_link_extractor = HtmlLinkExtractor()\n        for schema_name, schema in items.items():\n            if schema_name not in self.item_classes:\n                if not schema.get('name'):\n                    schema['name'] = schema_name\n                item_cls = SlybotItem.create_iblitem_class(schema)\n                self.item_classes[schema_name] = item_cls\n\n        # Create descriptors and apply additional extractors to fields\n        page_descriptor_pairs = []\n        self.schema_descriptors = {}\n        for default, template, template_extractors, v in _item_template_pages:\n            descriptors = OrderedDict()\n            for schema_name, schema in items.items():\n                item_descriptor = create_slybot_item_descriptor(schema,\n                                                                schema_name)\n                apply_extractors(item_descriptor, template_extractors,\n                                 extractors)\n                descriptors[schema_name] = item_descriptor\n            descriptor = list(descriptors.values()) or [{}]\n            descriptors['#default'] = descriptors.get(default, descriptor[0])\n            self.schema_descriptors[template.page_id] = descriptors['#default']\n            page_descriptor_pairs.append((template, descriptors, v))\n            add_extractors_to_descriptors(descriptors, extractors)\n\n        grouped = itertools.groupby(sorted(page_descriptor_pairs,\n                                           key=operator.itemgetter(2)),\n                                    lambda x: x[2] < '0.13.0')\n        self.extractors = []\n        for version, group in grouped:\n            if version:\n                self.extractors.append(\n                    InstanceBasedLearningExtractor(\n                        [(page, scrapes['#default'])\n                         for page, scrapes, version in group]))\n            else:\n                self.extractors.append(SlybotIBLExtractor(list(group)))\n\n        # generate ibl extractor for links pages\n        _links_pages = [dict_to_page(t, 'annotated_body')\n                        for t in templates if t.get('page_type') == 'links']\n        _links_item_descriptor = create_slybot_item_descriptor({'fields': {}})\n        self._links_ibl_extractor = InstanceBasedLearningExtractor(\n            [(t, _links_item_descriptor) for t in _links_pages]) \\\n            if _links_pages else None\n\n        self.build_url_filter(spec)\n        # Clustering\n        self.template_names = [t.get('page_id') for t in spec['templates']]\n        if settings.get('PAGE_CLUSTERING'):\n            try:\n                import page_clustering\n                self.clustering = page_clustering.kmeans_from_samples(spec['templates'])\n                self.logger.info(\"Clustering activated\")\n            except ImportError:\n                self.clustering = None\n                self.logger.warning(\n                    \"Clustering could not be used because it is not installed\")\n        else:\n            self.clustering = None\n\n    def _get_annotated_template(self, template):\n        changed = False\n        if template.get('version', '0.12.0') >= '0.13.0':\n            using_js = self.spider._filter_js_urls(template['url'])\n            body = 'rendered_body' if using_js else 'original_body'\n            if template.get('body') != body:\n                template['body'] = body\n                changed = True\n        if changed or not template.get('annotated'):\n            _build_sample(template)\n        return template\n\n    def handle_html(self, response, seen=None):\n        htmlpage = htmlpage_from_response(response, _add_tagids=True)\n        if htmlpage.parsed_body:\n            items, link_regions = self.extract_items(htmlpage, response)\n        else:\n            items, link_regions = [], []\n        htmlpage.headers['n_items'] = len(items)\n        try:\n            response.meta['n_items'] = len(items)\n        except AttributeError:\n            pass  # response not tied to any request\n        for item in items:\n            yield item\n        for request in self._process_link_regions(htmlpage, link_regions):\n            yield request\n\n    def extract_items(self, htmlpage, response=None):\n        \"\"\"This method is also called from UI webservice to extract items\"\"\"\n        for extractor in self.extractors:\n            items, links = self._do_extract_items_from(htmlpage, extractor,\n                                                       response)\n            if items:\n                return items, links\n        return [], []\n\n    def _do_extract_items_from(self, htmlpage, extractor, response=None):\n        # Try to predict template to use\n        template_cluster, pref_template_id = self._cluster_page(htmlpage)\n        extracted, template = extractor.extract(htmlpage, pref_template_id)\n        extracted = extracted or []\n        link_regions = []\n        for ddict in extracted:\n            link_regions.extend(arg_to_iter(ddict.pop(\"_links\", [])))\n        descriptor = None\n        unprocessed = False\n        if template is not None and hasattr(template, 'descriptor'):\n            descriptor = template.descriptor()\n            if hasattr(descriptor, 'name'):\n                item_cls_name = descriptor.name\n            elif hasattr(descriptor, 'get'):\n                item_cls_name = descriptor.get('name',\n                                               descriptor.get('display_name'))\n            else:\n                item_cls_name = ''\n        else:\n            unprocessed = True\n            try:\n                descriptor = self.schema_descriptors[template.id]\n                item_cls_name = self.template_scrapes[template.id]\n            except (AttributeError, KeyError):\n                try:\n                    descriptor = sorted(self.schema_descriptors.items())[0][1]\n                    item_cls_name = sorted(self.template_scrapes.items())[0][1]\n                except IndexError:\n                    descriptor, item_cls_name = None, None\n        item_cls = self.item_classes.get(item_cls_name)\n        items = []\n        for processed_attributes in extracted:\n            if processed_attributes.get('_type') in self.item_classes:\n                _type = processed_attributes['_type']\n                item = self.item_classes[_type](processed_attributes)\n                item['_type'] = item.display_name()\n            elif unprocessed:\n                item = self._process_attributes(processed_attributes,\n                                                descriptor, htmlpage)\n                if item_cls:\n                    item = item_cls(item)\n            elif item_cls:\n                item = item_cls(processed_attributes)\n            else:\n                item = dict(processed_attributes)\n            item[u'url'] = htmlpage.url\n            item[u'_template'] = str(template.id)\n            item.setdefault('_type', item_cls_name)\n            if not isinstance(item, SlybotItem):\n                default_meta = {'type': 'text', 'required': False,\n                                'vary': False}\n                item_cls = SlybotItem.create_iblitem_class(\n                    {'fields': {k: default_meta for k in item}}\n                )\n                item = item_cls(**item)\n            if self.clustering:\n                item['_template_cluster'] = template_cluster\n            items.append(item)\n        return items, link_regions\n\n    def _process_attributes(self, item, descriptor, htmlpage):\n        new_item = {}\n        try:\n            attr_map = descriptor.attribute_map\n        except AttributeError:\n            attr_map = {}\n        page = getattr(htmlpage, 'htmlpage', htmlpage)\n        for field, value in item.items():\n            if field.startswith('_sticky'):\n                continue\n            if field == 'variants':\n                value = [self._process_attributes(v, descriptor, page)\n                         for v in value]\n            elif field in attr_map:\n                value = [attr_map[field].adapt(v, page) for v in value]\n            new_item[field] = value\n        return new_item\n\n    def build_url_filter(self, spec):\n        \"\"\"make a filter for links\"\"\"\n        respect_nofollow = spec.get('respect_nofollow', True)\n\n        if spec.get(\"links_to_follow\") == \"none\":\n            url_filterf = lambda x: False\n        elif spec.get(\"links_to_follow\") == \"all\":\n            if respect_nofollow:\n                url_filterf = lambda x: x.nofollow\n            else:\n                url_filterf = lambda x: True\n        else: # patterns\n            patterns = spec.get('follow_patterns')\n            excludes = spec.get('exclude_patterns')\n            pattern_fn = include_exclude_filter(patterns, excludes)\n\n            if respect_nofollow:\n                url_filterf = lambda x: not x.nofollow and pattern_fn(x.url)\n            else:\n                url_filterf = lambda x: pattern_fn(x.url)\n\n        self.url_filterf = url_filterf\n\n    def _cluster_page(self, htmlpage):\n        template_cluster, preferred = _CLUSTER_NA, None\n        if self.clustering:\n            self.clustering.add_page(htmlpage)\n            if self.clustering.is_fit:\n                clt = self.clustering.classify(htmlpage)\n                if clt != -1:\n                    template_cluster = preferred = self.template_names[clt]\n                else:\n                    template_cluster = _CLUSTER_OUTLIER\n        return template_cluster, preferred\n\n\n    def _filter_link(self, link, seen):\n        url = link.url\n        if self.url_filterf(link):\n            # filter out duplicate urls, later we should handle link text\n            if url not in seen:\n                seen.add(url)\n                request = Request(url)\n                if link.text:\n                    request.meta['link_text'] = link.text\n                return request\n\n    def _process_link_regions(self, htmlpage, link_regions):\n        \"\"\"Process link regions if any, and generate requests\"\"\"\n        if link_regions:\n            for link_region in link_regions:\n                htmlregion = HtmlPage(htmlpage.url, htmlpage.headers,\n                                      link_region, encoding=htmlpage.encoding)\n                for request in self._requests_to_follow(htmlregion):\n                    yield request\n        else:\n            for request in self._requests_to_follow(htmlpage):\n                yield request\n\n    def _requests_to_follow(self, htmlpage):\n        if self._links_ibl_extractor is not None:\n            extracted = self._links_ibl_extractor.extract(htmlpage)[0]\n            if extracted:\n                extracted_regions = extracted[0].get('_links', [])\n                seen = set()\n                for region in extracted_regions:\n                    htmlregion = HtmlPage(htmlpage.url, htmlpage.headers,\n                                          region, encoding=htmlpage.encoding)\n                    for request in self._request_to_follow_from_region(\n                            htmlregion):\n                        if request.url in seen:\n                            continue\n                        seen.add(request.url)\n                        yield request\n        else:\n            for request in self._request_to_follow_from_region(htmlpage):\n                yield request\n\n    def _request_to_follow_from_region(self, htmlregion):\n        seen = set()\n        for link in self.html_link_extractor.links_to_follow(htmlregion):\n            request = self._filter_link(link, seen)\n            if request is not None:\n                yield request\n\n    def handle_xml(self, response, seen):\n        _type = content_type(response).subtype.split('+')[0]\n        try:\n            link_extractor = create_linkextractor_from_specs({\n                'type': _type, 'value': ''\n            })\n        except ValueError:\n            link_extractor = XmlLinkExtractor()\n        for link in link_extractor.links_to_follow(response):\n            request = self._filter_link(link, seen)\n            if request:\n                yield request\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/builder.py",
    "content": "import copy\nimport json\nimport six\n\nfrom scrapy import Selector\nfrom scrapy.utils.spider import arg_to_iter\nfrom scrapely.htmlpage import parse_html, HtmlTag, HtmlDataFragment\n\nfrom collections import defaultdict\nfrom itertools import tee, count, groupby, chain\nfrom operator import itemgetter\n\nfrom slybot.utils import (serialize_tag, add_tagids, remove_tagids, TAGID,\n                          OPEN_TAG, CLOSE_TAG, UNPAIRED_TAG, GENERATEDTAGID)\n\nfrom .migration import _get_parent, short_guid\n\n\nclass Annotations(object):\n    def __init__(self, sample, **options):\n        self.sample = sample\n        page_id = sample.get('page_id') or sample.get('id') or \"\"\n        sample['page_id'] = page_id\n        plugins = sample.setdefault('plugins', {})\n        self.data = plugins.setdefault('annotations-plugin', {'extracts': []})\n        self.annotations = self.data['extracts']\n        self.legacy = options.get('legacy') or False\n        self.data['extracts'] = _clean_annotation_data(self.annotations)\n        self._elems = {}\n\n    @property\n    def html(self):\n        if hasattr(self, '_html'):\n            return self._html\n        template = self.sample\n        body = template.get('body') or 'original_body'\n        if body not in template:\n            body = next((k for k, v in template.items()\n                         if v and k.endswith('_body')), body)\n        self._html = template[body]\n        return self._html\n\n    @property\n    def selector(self):\n        if hasattr(self, '_selector'):\n            return self._selector\n        self._selector = Selector(text=self.numbered_html)\n        return self._selector\n\n    @property\n    def numbered_html(self):\n        if hasattr(self, '_numbered_html'):\n            return self._numbered_html\n        self._numbered_html = add_tagids(self.html)\n        return self._numbered_html\n\n    def build(self):\n        if not self.annotations and 'annotated_body' in self.sample:\n            return self.data\n        self.sample['annotated_body'] = self.apply()\n        return self.data\n\n    def verify(self, tagid_annotations):\n        def on_cid(a):\n            return a['id'] if a.get('item_container') else a['container_id']\n        containers = {a['id']: a for a in chain(*tagid_annotations)\n                      if a.get('item_container')}\n        missing = {}\n        groups = groupby(sorted(chain(*tagid_annotations), key=on_cid), on_cid)\n        for group, annotations in groups:\n            if group not in containers:\n                annotations = list(annotations)\n                missing[group] = list(annotations)\n        if missing:\n            all_containers = {a['id']: a for a in self.annotations\n                              if a.get('item_container')}\n            for container_id, annnotations in missing.items():\n                container = all_containers[container_id]\n                annotations = list(annotations)\n                elements = list(chain(*(self.elements(a)\n                                        for a in annotations)))\n                parent = _get_parent(elements, self.selector)\n                container['tagid'] = parent.attrib.get(TAGID)\n                tagid_annotations.append(container)\n        return tagid_annotations\n\n    def generate(self, annotations):\n        data = {}\n        annotation_data = []\n        for annotation in arg_to_iter(annotations):\n            if 'annotations' in annotation:\n                annotation_data.append({\n                    'id': annotation.get('id', short_guid()),\n                    'annotations': annotation.get('annotations', {}),\n                    'required': annotation.get('required', []),\n                    'required_fields': annotation.get('required', []),\n                    'variant': int(annotation.get('variant', 0)),\n                    'generated': annotation.get('generated', False),\n                    'text-content': annotation.get('text-content', 'content'),\n                    'item_container': annotation.get('item_container', False),\n                    'container_id': annotation.get('container_id'),\n                    'schema_id': annotation.get('schema_id'),\n                    'repeated': annotation.get('repeated'),\n                    'siblings': annotation.get('siblings'),\n                    'field': annotation.get('field'),\n                    'selector': annotation.get('selector'),\n                    'selection_mode': annotation.get('selection_mode'),\n                    'min_jump': annotation.get('min_jump', -1),\n                    'max_separator': annotation.get('max_separator', -1),\n                    'xpath': annotation.get('xpath')\n                })\n            if 'ignore' in annotation or 'ignore_beneath' in annotation:\n                if annotation.get('ignore_beneath'):\n                    data['data-scrapy-ignore-beneath'] = 'true'\n                elif annotation.get('ignore'):\n                    data['data-scrapy-ignore'] = 'true'\n        if annotation_data:\n            if self.legacy:\n                annotation_data = annotation_data[0]\n            serialized = json.dumps(annotation_data).replace('\"', '&quot;')\n            data['data-scrapy-annotate'] = serialized\n        return data\n\n    def _generate_elem(self, annotation, text):\n        sections = ['<ins']\n        annotation_info = self.generate(annotation)\n        annotation_info[GENERATEDTAGID] = annotation.get('id')\n        attributes = []\n        for key, value in annotation_info.items():\n            attributes.append('%s=\"%s\"' % (key, value))\n        sections.append(' '.join(attributes))\n        if len(sections) > 1:\n            sections[0] += ' '\n        sections.extend(['>', text, '</ins>'])\n        return ''.join(sections)\n\n    def _get_generated(self, element, annotations, nodes, inserts):\n        html_body = self.numbered_html\n        eid = insert_after_tag = _get_data_id(element)\n        text_strings = _get_text_nodes(nodes, html_body)\n        text_content = ''.join((s.lstrip() for s in text_strings))\n        pre_selected = []\n        for annotation in annotations:\n            start, end = _get_generated_slice(annotation)\n            pre_selected.append(\n                (text_content[0:start], text_content[start:end], annotation))\n        stack = [insert_after_tag]\n        next_text_node = ''\n        for i, node in enumerate(nodes):\n            if isinstance(node, HtmlTag):\n                if node.tag_type == OPEN_TAG:\n                    tagid = node.attributes.get(TAGID, '').strip()\n                    if tagid:\n                        stack.append(tagid)\n                elif node.tag_type == CLOSE_TAG and stack:\n                    insert_after_tag = stack.pop()\n            elif (isinstance(node, HtmlDataFragment) and len(stack) == 1):\n                text = html_body[node.start:node.end]\n                # This allows for a clean way to insert fragments up until the\n                # next tag in apply_annotations if we have already inserted a\n                # new generated tag\n                if not node.is_text_content and inserts.get(insert_after_tag):\n                    inserts[insert_after_tag].append(text)\n                    continue\n                removed = 0\n                inserted = False\n                for j, (pre, selected, anno) in enumerate(pre_selected[:]):\n                    if selected and selected in text:\n                        previous, post = text.split(selected, 1)\n                        if previous.strip() in pre:\n                            pre_selected.pop(j - removed)\n                            removed += 1\n                            generated = self._generate_elem(anno, selected)\n                            # Next immediate text node will be returned and\n                            # added to the new document. Other text nodes\n                            # within this node will be added after other child\n                            # nodes have been closed.\n                            if (insert_after_tag == eid and\n                                    not anno.get('insert_after')):\n                                next_text_node += previous + generated\n                                inserted = True\n                            else:\n                                inserts[insert_after_tag].extend([previous,\n                                                                  generated])\n                            text = post\n                if inserted:\n                    next_text_node += text\n                else:\n                    inserts[insert_after_tag].append(text)\n        return next_text_node\n\n    def apply(self):\n        selector_annotations, tagid_annotations = self.split()\n        inserts, numbered_html = defaultdict(list), self.numbered_html\n        if selector_annotations:\n            converted_annotations = self.apply_selector(selector_annotations)\n            tagid_annotations += converted_annotations\n        if not self.legacy:\n            tagid_annotations = self.verify(\n                [arg_to_iter(a) for a in tagid_annotations])\n        target = iter(parse_html(numbered_html))\n        output, stack = [], []\n        elem = next(target)\n        last_id = 0\n        # XXX: A dummy element is added to the end so if the last annotation is\n        #      generated it will be added to the output\n        filtered = defaultdict(list)\n        for grouped in tagid_annotations:\n            for ann in arg_to_iter(grouped):\n                filtered[ann['tagid']].append(ann)\n        dummy = [(1e9, [{}])]\n        sorted_annotations = sorted([(int(k), v) for k, v in filtered.items()\n                                     if k is not None])\n        try:\n            for aid, annotation_data in chain(sorted_annotations, dummy):\n                # Move target until replacement/insertion point\n                while True:\n                    while not isinstance(elem, HtmlTag) or elem.tag == 'ins':\n                        output.append(numbered_html[elem.start:elem.end])\n                        elem = next(target)\n                    if elem.tag_type in {OPEN_TAG, UNPAIRED_TAG}:\n                        last_id = elem.attributes.get(TAGID)\n                        stack.append(last_id)\n                    if elem.tag_type in {CLOSE_TAG, UNPAIRED_TAG} and stack:\n                        if ('__added' not in elem.attributes and\n                                last_id is not None and aid is not None and\n                                int(last_id) < int(aid)):\n                            output.append(numbered_html[elem.start:elem.end])\n                            elem.attributes['__added'] = True\n                        last_inserted = stack.pop()\n                        to_insert = inserts.pop(last_inserted, None)\n                        if to_insert:\n                            output.extend(to_insert)\n                            # Skip all nodes up to the next HtmlTag as these\n                            # have already been added\n                            while True:\n                                elem = next(target)\n                                try:\n                                    last_id = elem.attributes.get(TAGID,\n                                                                  last_id)\n                                except AttributeError:\n                                    pass\n                                if isinstance(elem, HtmlTag):\n                                    break\n                            continue\n                    if (last_id is not None and aid is not None and\n                            int(last_id) < int(aid)):\n                        if '__added' not in elem.attributes:\n                            output.append(numbered_html[elem.start:elem.end])\n                            elem.attributes['__added'] = True\n                        elem = next(target)\n                    else:\n                        break\n\n                generated = []\n                next_generated = []\n                regular_annotations = []\n                # Place generated annotations at the end and sort by slice\n                for annotation in sorted(annotation_data, key=_annotation_key):\n                    if annotation.get('generated'):\n                        if annotation.get('insert_after'):\n                            next_generated.append(annotation)\n                        else:\n                            generated.append(annotation)\n                    else:\n                        regular_annotations.append(annotation)\n                # Add annotations data as required\n                if regular_annotations:\n                    annotation_info = self.generate(regular_annotations)\n                    for key, val in annotation_info.items():\n                        elem.attributes[key] = val\n                next_text_section = ''\n                if generated:\n                    inner_data, target = tee(target)\n                    nodes = _get_inner_nodes(inner_data)\n                    next_text_section = self._get_generated(\n                        elem, generated, nodes, inserts)\n                if next_generated:\n                    inner_data, target = tee(target)\n                    open_tags = 0 if elem.tag_type == UNPAIRED_TAG else 1\n                    nodes = _get_inner_nodes(inner_data, open_tags=open_tags,\n                                             insert_after=True)\n                    next_text_section = self._get_generated(\n                        elem, next_generated, nodes, inserts)\n\n                if '__added' not in elem.attributes:\n                    output.append(serialize_tag(elem))\n                    elem.attributes['__added'] = True\n                # If an <ins> tag has been inserted we need to move forward\n                if next_text_section:\n                    while True:\n                        elem = next(target)\n                        if (isinstance(elem, HtmlDataFragment) and\n                                elem.is_text_content):\n                            break\n                        output.append(numbered_html[elem.start:elem.end])\n                    output.append(next_text_section)\n        # Reached the end of the document\n        except StopIteration:\n            output.append(numbered_html[elem.start:elem.end])\n        else:\n            for element in target:\n                output.append(numbered_html[element.start:element.end])\n        return remove_tagids(''.join(output))\n\n    def split(self):\n        selector, tagid = [], []\n        for ann in copy.deepcopy(self.annotations):\n            if ann:\n                if ann.get('selector'):\n                    selector.append(ann)\n                elif ann.get('tagid') and (ann.get('annotations') or\n                                           ann.get('ignore')):\n                    tagid.append(ann)\n        return selector, tagid\n\n    def apply_selector(self, annotations):\n        page = self.selector\n        converted_annotations = []\n        tagid_selector_map = {}\n        added_repeated = {}\n        containers = {}\n        for annotation in annotations:\n            if annotation.get('item_container'):\n                containers[annotation['id']] = annotation\n            selector = annotation.get('selector')\n            elems = self.elements(annotation)\n            if elems:\n                tagid = min([int(e.attrib.get('data-tagid', 1e9))\n                             for e in elems])\n                annotation['tagid'] = tagid\n                if selector:\n                    tagid_selector_map[tagid] = selector\n                converted_annotations.append(annotation)\n\n            # Create container for repeated field annotation\n            if (annotation.get('repeated') and\n                    annotation.get('selection_mode') == 'auto' and\n                    not annotation.get('item_container') and\n                    elems is not None and len(elems) and\n                    len(annotation.get('annotations')) == 1):\n                repeated_parent = add_repeated_field(annotation, elems, page)\n                if repeated_parent:\n                    converted_annotations.append(repeated_parent)\n                    container_id = repeated_parent['container_id']\n                    added_repeated[container_id] = repeated_parent\n        if added_repeated:\n            for container_id, child in added_repeated.items():\n                container = containers[container_id]\n                if container.get('tagid') != child['tagid']:\n                    continue\n                elems = self.elements(container)\n                parent = elems[0].getparent()\n                container['tagid'] = int(parent.attrib.get('data-tagid', 1e9))\n        return _merge_annotations_by_selector(converted_annotations)\n\n    def elements(self, annotation):\n        aid = annotation['id']\n        if aid in self._elems:\n            return self._elems[aid]\n        selector = annotation.get('selector')\n        if not selector:\n            return []\n        elems = []\n        while selector and not elems:\n            elems = [elem._root for elem in self.selector.css(selector)]\n            selector = ' > '.join(selector.split(' > ')[1:])\n        self._elems[aid] = elems or []\n        if not elems:\n            return []\n        return elems\n\n\ndef _clean_annotation_data(data):\n    result = []\n    sticky_count, stickies = count(1), set()\n    for ann in data:\n        if ann.get('item_container'):\n            ann['annotations'] = {'#portia-content': '#dummy'}\n            ann['text-content'] = '#portia-content'\n        elif 'data' in ann:\n            modified_annotations = {}\n            grp = itemgetter('attribute')\n            for _id, value in ann['data'].items():\n                value['id'] = '%s|%s' % (ann['id'], _id)\n            sorted_annotations = sorted(ann['data'].values(), key=grp)\n            for attribute, annotations in groupby(sorted_annotations, grp):\n                modified_annotations[attribute] = list(annotations)\n            ann['annotations'] = modified_annotations\n        elif 'annotations' in ann:\n            filtered_annotations = {}\n            for k, v in ann['annotations'].items():\n                if not v:\n                    continue\n                if v == '#sticky':\n                    next_sticky = '_sticky%s' % next(sticky_count)\n                    stickies.add(next_sticky)\n                    v = next_sticky\n                filtered_annotations[k] = v\n\n            ann['annotations'] = filtered_annotations\n            ann['required'] = list((set(ann.get('required', [])) | stickies) &\n                                   set(filtered_annotations.values()))\n        elif \"ignore\" in ann or \"ignore_beneath\" in ann:\n            pass\n        else:\n            continue\n        result.append(ann)\n    return result\n\n\ndef _get_data_id(annotation):\n    \"\"\"Get id (a str) of an annotation.\"\"\"\n    if isinstance(annotation, HtmlTag):\n        return annotation.attributes[TAGID]\n\n\ndef _get_text_nodes(nodes, html_body):\n    text = []\n    open_tags = 0\n    for node in nodes:\n        if isinstance(node, HtmlTag):\n            if node.tag_type == OPEN_TAG:\n                open_tags += 1\n            elif node.tag_type == CLOSE_TAG:\n                open_tags -= 1\n        elif (isinstance(node, HtmlDataFragment) and\n              node.is_text_content and open_tags == 0):\n            text.append(html_body[node.start:node.end])\n    return text\n\n\ndef _get_generated_slice(annotation):\n    annotation_slice = annotation.get('slice', [0])[:2]\n    if not annotation_slice:\n        annotation_slice = [0, 0]\n    elif len(annotation_slice) < 2:\n        annotation_slice.append(annotation_slice[0])\n    return annotation_slice\n\n\ndef _get_inner_nodes(target, open_tags=1, insert_after=False,\n                     stop_on_next=False):\n    nodes = []\n    while open_tags > -0:\n        elem = next(target)\n        if isinstance(elem, HtmlTag):\n            if elem.tag_type == OPEN_TAG:\n                open_tags += 1\n                if stop_on_next and elem.attributes.get(TAGID) is not None:\n                    return nodes\n            elif (stop_on_next and\n                  elem.tag_type == UNPAIRED_TAG and\n                  elem.attributes.get(TAGID) is not None):\n                return nodes\n            elif elem.tag_type == CLOSE_TAG:\n                open_tags -= 1\n        nodes.append(elem)\n    if insert_after:\n        return _get_inner_nodes(target, stop_on_next=True)\n    return nodes\n\n\ndef _add_element(element, output, html):\n    if '__added' not in element.attributes:\n        output.append(html[element.start:element.end])\n        element.attributes['__added'] = True\n    return element\n\n\ndef _annotation_key(a):\n    return a.get('generated', False) + sum(a.get('slice', []))\n\n\ndef _merge_annotations_by_selector(annotations):\n    def grouper(x):\n        return x.get('selector', '')\n    annotations.sort(key=grouper)\n    return [list(annos) for _, annos in groupby(annotations, key=grouper)]\n\n\ndef add_repeated_field(annotation, elems, page):\n    parent = _get_parent(elems, page)\n    field = next(six.itervalues(annotation['annotations']))[0]['field']\n    container_id = '%s#parent' % annotation['id']\n    if len(parent):\n        tagid = int(parent.attrib.get('data-tagid', 1e9))\n        parent_annotation = {\n            'item_container': True,\n            'id': container_id,\n            'annotations': {'#portia-content': '#dummy'},\n            'text-content': '#portia-content',\n            'container_id': annotation['container_id'],\n            'field': field,\n            'tagid': tagid\n        }\n        annotation['item_container'] = True\n        annotation['field'] = field\n        annotation['container_id'] = container_id\n        return parent_annotation\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/exceptions.py",
    "content": "class MissingRequiredError(Exception):\n    pass\n\n\nclass ItemNotValidError(Exception):\n    pass\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/__init__.py",
    "content": "from .container_extractors import (\n    BaseContainerExtractor, ContainerExtractor, RepeatedContainerExtractor,\n    RepeatedFieldsExtractor\n)\nfrom .extractors import SlybotIBLExtractor, TemplatePageMultiItemExtractor\nfrom .pageparsing import (\n    parse_template, SlybotTemplatePage, SlybotTemplatePageParser\n)\nfrom .region_extractors import BaseExtractor, SlybotRecordExtractor\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/container_extractors.py",
    "content": "import pprint\nimport copy\n\nfrom collections import defaultdict\nfrom itertools import groupby\n\nfrom numpy import array\nfrom six.moves import xrange, StringIO\n\nfrom scrapely.extraction.pageobjects import AnnotationTag\nfrom scrapely.extraction.regionextract import (\n    RecordExtractor, BasicTypeExtractor, RepeatedDataExtractor,\n    AdjacentVariantExtractor\n)\nfrom scrapely.extraction.similarity import (\n    similar_region, longest_unique_subsequence, first_longest_subsequence\n)\nfrom scrapely.htmlpage import HtmlTagType\nfrom scrapy.utils.spider import arg_to_iter\n\nfrom .region_extractors import SlybotRecordExtractor, BaseExtractor\nfrom .utils import container_id, group_tree, Region, element_from_page_index\nfrom ..processors import MissingRequiredError, ItemProcessor\n\n\nMAX_SEARCH_DISTANCE_MULTIPLIER = 3\nMIN_TOKEN_LENGTH_BEFORE_TRUNCATE = 3\nMIN_JUMP_DISTANCE = 0.7\nMAX_RELATIVE_SEPARATOR_MULTIPLIER = 0.7\n\n\nclass BaseContainerExtractor(object):\n    _extractor_classes = [\n        RepeatedDataExtractor,\n        AdjacentVariantExtractor,\n        RepeatedDataExtractor,\n        AdjacentVariantExtractor,\n        RepeatedDataExtractor,\n        RecordExtractor,\n    ]\n\n    def __init__(self, extractors, template):\n        schema_name = self.annotation.metadata.get('schema_id')\n        self.schema = template.descriptor(schema_name).copy()\n        self.modifiers = template.modifiers\n        extra_requires = getattr(self, 'extra_requires', [])\n        self.extra_requires = extra_requires\n        if hasattr(self.schema, '_required_attributes'):\n            requires = list(extra_requires) + self.schema._required_attributes\n            self.schema._required_attributes = requires\n\n    @property\n    def annotation(self):\n        try:\n            return self._annotation\n        except AttributeError:\n            return AnnotationTag(1, 1)\n\n    @classmethod\n    def apply(cls, template, extractors):\n        # Group containers and get container info\n        container_info = cls._get_container_data(extractors)\n        containers, container_annos, non_container_annos = container_info\n        # Build extraction tree\n        extraction_tree = cls._build_extraction_tree(containers)\n        tree = group_tree(extraction_tree, container_annos)\n\n        # Build containerized extractors\n        container_extractors = cls._build_containerized_extractors(\n            containers, container_annos, template, tree)\n        return non_container_annos + container_extractors\n\n    def _build_extractors(self, extractors, containers, container_contents,\n                          template):\n        new_extractors = []\n        annotation = None\n        if isinstance(extractors, list):  # Bottom of extraction tree\n            self.extra_requires = set()\n            for ex in extractors:\n                fields = ex.annotation.metadata.get('required_fields', [])\n                self.extra_requires.update(fields)\n            new_extractors.extend(\n                SlybotRecordExtractor.apply(template, extractors))\n        else:\n            for container_name, container_data in (extractors or {}).items():\n                annotation = self._find_annotation(template, container_name)\n                if annotation.metadata.get('item_container'):\n                    self._add_new_container(\n                        annotation, new_extractors, container_data, template,\n                        containers, container_contents)\n        if not hasattr(self, '_annotation'):\n            self._annotation = None\n        if annotation:\n            self._annotation = annotation\n        elif new_extractors and self._annotation is None:\n            self._annotation = new_extractors[0].annotation\n        return new_extractors\n\n    @staticmethod\n    def _get_container_data(extractors):\n        \"\"\"\n        Find information about all containers.\n\n        Group all annotations by container.\n        Group all annotations without a container.\n        \"\"\"\n        # Get information about nested data\n        containers = dict((x.annotation.metadata['id'], x)\n                          for x in extractors\n                          if x.annotation.metadata.get('item_container'))\n        container_annos = defaultdict(list)\n        non_container_annos = []\n        for con_id, annotation in groupby(extractors, container_id):\n            annotation = list(annotation)\n            # Handle repeated container deletion but not parent container\n            if (con_id and str(con_id).endswith('#parent') and\n                    con_id not in containers):\n                con_id = con_id.strip('#parent')\n            if con_id and con_id in containers:\n                container_annos[con_id].extend(annotation)\n            else:\n                non_container_annos.extend([\n                    e for e in annotation\n                    if e.annotation.metadata.get('id') not in containers\n                ])\n        return (containers, container_annos, non_container_annos)\n\n    @staticmethod\n    def _build_extraction_tree(containers):\n        \"\"\"\n        Find the containers path for each sub container.\n        \"\"\"\n        extraction_tree = []\n        for container in containers.values():\n            parent_id = container_id(container)\n            path = [container.annotation.metadata['id']]\n            parent = container\n            if parent_id:\n                while container_id(parent):\n                    parent_id = container_id(parent)\n                    if parent_id in path:\n                        break  # Avoid cyclical tree\n                    path.append(parent_id)\n                    parent = containers[parent_id]\n            path.reverse()\n            extraction_tree.append(path)\n        return sorted(extraction_tree, key=len)\n\n    @classmethod\n    def _build_containerized_extractors(cls, containers, container_annos,\n                                        template, tree):\n        \"\"\"\n        Convert container annotation trees into container extractors.\n        \"\"\"\n        container_extractors = []\n        for container_name, container_data in tree.items():\n            if container_name not in containers:\n                continue  # Ignore missing containers\n            container = container_annos[container_name]\n            annotation = None\n            for a in template.annotations:\n                if a.metadata.get('id') == container_name:\n                    annotation = a\n                    break\n            if container:\n                cls._add_new_container(\n                    annotation, container_extractors, container_data,\n                    template, container_annos, container)\n        return container_extractors\n\n    @staticmethod\n    def _add_new_container(annotation, extractors, container_data, template,\n                           containers, container_contents):\n        \"\"\"\n        Create a new container from the provided container information.\n        \"\"\"\n        meta = annotation.metadata\n        cls = ContainerExtractor\n        if meta.get('repeated'):\n            cls = RepeatedContainerExtractor\n            if meta.get('field'):\n                cls = RepeatedFieldsExtractor\n        extractors.append(\n            cls(container_data, template, annotation=annotation,\n                containers=containers, container_contents=container_contents))\n\n    def _find_annotation(self, template, annotation_id):\n        \"\"\"\n        Look for an annotation with the given id in the given template\n        \"\"\"\n        for annotation in template.annotations:\n            aid = annotation.metadata.get('id', '')\n            if aid == annotation_id:\n                return annotation\n\n    def _validate_and_adapt_item(self, item, htmlpage, region=None,\n                                 surrounding_region=None):\n        if isinstance(item, ItemProcessor):\n            return item\n\n        # Check if all required fields are available\n        if isinstance(item, dict):\n            for k in self.extra_requires:\n                if k.startswith('_sticky'):  # Sticky no longer supported\n                    item.pop(k, None)\n                    continue\n                if k not in item:\n                    return {}\n        processor = ItemProcessor(item, self, region, surrounding_region,\n                                  htmlpage)\n\n        # Check if item is valid\n        if len(processor):\n            return processor\n        else:\n            return {}\n\n    def __str__(self):\n        stream = StringIO()\n        pprint.pprint(self.extractors, stream)\n        stream.seek(0)\n        template_data = stream.read()\n        if template_data:\n            return \"%s[\\n%s\\n]\" % (self.__class__.__name__, template_data)\n        return \"%s[none]\" % (self.__class__.__name__)\n\n\nclass ContainerExtractor(BaseContainerExtractor, BasicTypeExtractor):\n    def __init__(self, extractors, template, containers=None,\n                 container_contents=None, annotation=None,\n                 required_fields=None):\n        if containers is None:\n            containers = {}\n        if container_contents is None:\n            container_contents = {}\n        if annotation is not None:\n            aid = annotation.metadata.get('id')\n        else:\n            aid = None\n        self.template_tokens = template.page_tokens\n        self.template_token_dict = template.token_dict\n        self.extractors = self._build_extractors(\n            extractors, containers, container_contents, template)\n        record = [e for e in containers.get(aid, [])\n                  if not e.annotation.metadata.get('item_container')]\n        if record and not isinstance(extractors, list):\n            self.extractors.extend(\n                SlybotRecordExtractor.apply(template, record))\n        self.content_validate = lambda x: x\n        self.best_match = longest_unique_subsequence\n        if annotation:\n            self._annotation = annotation\n        BaseContainerExtractor.__init__(self, extractors, template)\n        if required_fields:\n            self.extra_requires = set(required_fields) | self.extra_requires\n        # A Container can only extract many items if it has at least one child\n        # RepeatedContainerExtractor\n        self.many = False\n        if (any(isinstance(e, RepeatedContainerExtractor)\n                for e in self.extractors)):\n            self.many = True\n\n    def extract(self, page, start_index=0, end_index=None,\n                ignored_regions=None, **kwargs):\n        \"\"\"\n        Find a region surrounding repeated data and run extractors on the data\n        in that region.\n        \"\"\"\n        start_index = max(0, start_index - 1)\n        max_end_index = len(page.token_page_indexes)\n        if end_index is None:\n            end_index = max_end_index\n        else:\n            end_index = min(max_end_index, end_index + 1)\n        region = Region(*similar_region(\n            page.page_tokens, self.template_tokens, self.annotation,\n            start_index, end_index, self.best_match, **kwargs))\n        if region.score < 1:\n            return []\n        surrounding = element_from_page_index(page, start_index)\n        items = self._extract_items_from_region(\n            region, page, ignored_regions, surrounding, **kwargs)\n        tag = element_from_page_index(page, region.start_index)\n        items = [self._validate_and_adapt_item(i, page, tag) for i in items]\n        if self.many:\n            return items\n        return self._merge_items(items)\n\n    def _extract_items_from_region(self, region, page, ignored_regions,\n                                   surrounding, **kwargs):\n        items = []\n        for extractor in self.extractors:\n            try:\n                try:\n                    item = extractor.extract(\n                        page, region.start_index, region.end_index,\n                        ignored_regions, **kwargs\n                    )\n                except TypeError:\n                    ex = SlybotRecordExtractor(\n                        extractor.extractors, extractor.template_tokens\n                    )\n                    item = ex.extract(\n                        page, region.start_index, region.end_index,\n                        ignored_regions, **kwargs\n                    )\n            except MissingRequiredError:\n                return []\n            if (isinstance(extractor, BaseContainerExtractor) and\n                    isinstance(item, list)):\n                items.extend(item)\n            else:\n                if not isinstance(item, ItemProcessor):\n                    item = ItemProcessor(item, self, [region], surrounding,\n                                         page)\n                items.append(item)\n        return items\n\n    def _merge_items(self, items):\n        items = sorted((i for i in items if len(i)),\n                       key=lambda x: x.name or '')\n        if not items:\n            return []\n        item = items[0]\n        for other_item in items[1:]:\n            item.merge(other_item)\n        return item\n\n\nclass RepeatedContainerExtractor(BaseContainerExtractor, RecordExtractor):\n    def __init__(self, extractors, template, containers=None,\n                 container_contents=None, annotation=None, schemas=None):\n        if containers is None:\n            containers = {}\n        if container_contents is None:\n            container_contents = {}\n        if schemas is None:\n            schemas = {}\n        if annotation is not None:\n            aid = annotation.metadata.get('id')\n        else:\n            aid = None\n        self.template_tokens = template.page_tokens\n        self.template_token_dict = template.token_dict\n        self.prefix, self.suffix = self._find_prefix_suffix(\n            extractors, container_contents, containers, template)\n        self.extractors = self._build_extractors(\n            extractors, containers, container_contents, template)\n        record = [e for e in containers.get(aid, [])\n                  if not e.annotation.metadata.get('item_container')]\n        if record and not isinstance(extractors, list):\n            self.extractors.extend(\n                SlybotRecordExtractor.apply(template, record))\n        self.best_match = first_longest_subsequence\n        BaseContainerExtractor.__init__(self, extractors, template)\n\n    def extract(self, page, start_index=0, end_index=None,\n                ignored_regions=None, **kwargs):\n        \"\"\"\n        Find regions bounded by the prefix and suffix and repeatedly\n        extract them.\n        \"\"\"\n        prefixlen = len(self.prefix)\n        suffixlen = len(self.suffix)\n        index = max(0, start_index - prefixlen)\n        if end_index is None:\n            end_index = len(self.template_tokens)\n        max_index = min(len(page.page_tokens) - suffixlen,\n                        end_index + len(self.suffix))\n        max_start_index = max_index - prefixlen\n        extracted = []\n        region = element_from_page_index(page, start_index)\n        surrounding_tag = [region] if region else []\n        first = True\n        while index <= max_start_index:\n            prefix_end = index + prefixlen\n            if (page.page_tokens[index:prefix_end] == self.prefix).all():\n                for peek in xrange(prefix_end + self.min_jump, max_index + 1):\n                    next_prefix = page.page_tokens[peek:peek + prefixlen]\n                    next_suffix = page.page_tokens[peek:peek + suffixlen]\n                    matches_next_prefix = (next_prefix == self.prefix).all()\n                    matches_next_suffix = (next_suffix == self.suffix).all()\n                    if not (matches_next_suffix or matches_next_prefix or\n                            peek + suffixlen >= max_index):\n                        continue\n                    if matches_next_prefix:\n                        peek -= suffixlen + 1\n                    if first:\n                        surrounding_tag.append(element_from_page_index(\n                            page, index - prefixlen - 1))\n                        first = False\n                    try:\n                        items = []\n                        _index = index\n                        for extractor in self.extractors:\n                            items += extractor.extract(\n                                page, index, peek + self.offset,\n                                ignored_regions,\n                                suffix_max_length=suffixlen)\n                            _index = max(peek, index) - 1\n                    except MissingRequiredError:\n                        pass\n                    else:\n                        tag = element_from_page_index(page, index)\n                        processed = self._process_items(items, page, tag,\n                                                        surrounding_tag)\n                        extracted.extend(processed)\n                    index = _index\n                    break\n            index += 1\n        result = []\n        for i, item in enumerate(extracted, 1):\n            if not item:\n                continue\n            try:\n                item[u'_index'] = i\n            except TypeError:\n                pass\n            result.append(item)\n        if self.parent_annotation.metadata.get('field'):\n            return [(self.parent_annotation.metadata['field'], result)]\n        return result\n\n    def _process_items(self, items, page, region, surrounding_region):\n        if not items:\n            return []\n        items = self._validate_and_adapt_item(items, page, region,\n                                              surrounding_region)\n        return arg_to_iter(items)\n\n    def _find_prefix_suffix(self, extractors, container_contents, containers,\n                            template):\n        \"\"\"\n        Find the prefix and suffix for this repeating extractor.\n        \"\"\"\n        htt = HtmlTagType\n        all_tags = (htt.CLOSE_TAG, htt.UNPAIRED_TAG, htt.OPEN_TAG)\n        open_tags = (htt.OPEN_TAG, htt.UNPAIRED_TAG)\n        parent, child = self._find_siblings(template, containers,\n                                            container_contents)\n        self.parent_annotation = parent\n        parent_sindex = 0 if not parent else parent.start_index\n        tokens = template.page_tokens[parent_sindex:child.start_index + 1]\n        prefix = self._find_tokens(tokens, open_tags, template)\n        prefix.reverse()\n        tokens = template.page_tokens[child.start_index + 1:\n                                      child.end_index + 1]\n        suffix = self._find_tokens(tokens, all_tags, template)\n        prefix = self._trim_prefix(prefix, suffix, template)\n        suffix.reverse()\n        suffix = self._trim_prefix(suffix, prefix, template, 3)\n        tokens = template.page_tokens[child.start_index + 1:\n                                      child.end_index][::-1]\n        max_separator = child.metadata.get('max_separator', -1)\n        if max_separator == -1:\n            max_separator = int(\n                len(tokens) * MAX_RELATIVE_SEPARATOR_MULTIPLIER)\n        tokens = self._find_tokens(tokens, open_tags, template)\n        prefix = self._trim_prefix(\n            prefix + tokens, suffix, template, 3, True)\n        tokens = template.page_tokens[child.end_index + 1:\n                                      child.end_index + max_separator][::-1]\n        tokens = self._find_tokens(tokens, open_tags, template, prefix[0])\n        self.offset = 1 if not tokens else 0\n        suffix = self._trim_prefix(suffix + tokens, prefix, template, 3, True)\n        # Heuristic to reduce chance of false positives\n        self.min_jump = child.metadata.get('min_jump', -1)\n        if self.min_jump == -1:\n            self.min_jump = int((child.end_index - child.start_index -\n                                 len(suffix)) * MIN_JUMP_DISTANCE)\n        return (array(prefix), array(suffix))\n\n    def _find_siblings(self, template, containers, container_contents):\n        child_id = container_contents[0].annotation.metadata['container_id']\n        child = self._annotation = containers[child_id][0].annotation\n        parent_id = child.metadata.get('container_id')\n        parent = self._find_annotation(template, parent_id)\n        siblings = child.metadata.get('siblings') or 0\n        end = child.end_index\n        if siblings > 0:\n            end = self._find_siblings_end(template, child.end_index + 1,\n                                          parent.end_index, siblings)\n        if end is not None:\n            new_child = AnnotationTag(child.start_index, end,\n                                      child.surrounds_attribute,\n                                      child.annotation_text,\n                                      child.tag_attributes)\n            new_child.metadata = child.metadata\n            self._annotation = new_child\n            return (parent, new_child)\n        return parent, child\n\n    def _find_siblings_end(self, template, start_index, max_index, siblings):\n        if start_index >= max_index:\n            return None\n        if siblings == 0:\n            return start_index\n        htt = HtmlTagType\n        first_token = template.page_tokens[start_index]\n        if template.token_dict.token_type(first_token) == htt.UNPAIRED_TAG:\n            return self._find_siblings_end(template, start_index + 1,\n                                           max_index, siblings - 1)\n        tokens = template.page_tokens[start_index + 1:max_index]\n        tag_stack = [first_token]\n        for idx, token in enumerate(tokens, 1):\n            token_type = template.token_dict.token_type(token)\n            if token_type == htt.OPEN_TAG:\n                tag_stack.append(token)\n            elif token_type == htt.CLOSE_TAG:\n                tag_stack.pop(-1)\n            if not tag_stack:\n                return self._find_siblings_end(template, start_index + idx + 1,\n                                               max_index, siblings - 1)\n\n    def _trim_prefix(self, prefix, suffix, template, min_prefix_len=1,\n                     remove_from_end=False):\n        \"\"\"\n        If the annotation is on the first element it is possible that there are\n        too many tokens in the prefix to find sibling regions. This looks ahead\n        for sibling regions and reduces the number of tokens until it can find\n        some.\n        \"\"\"\n        if len(prefix) <= min_prefix_len:\n            return prefix\n        page_tokens = template.page_tokens\n        new_prefix = copy.copy(prefix)\n        suffixlen = len(suffix)\n        end_index = self.annotation.end_index\n        start_index = self.annotation.start_index\n        annotation_length = start_index - end_index\n        max_start_index = min(\n            start_index + MAX_SEARCH_DISTANCE_MULTIPLIER * annotation_length,\n            len(page_tokens))\n        while len(new_prefix) > min_prefix_len:\n            index = end_index\n            while index < max_start_index:\n                prefixlen = len(new_prefix)\n                prefix_end = index + prefixlen\n                if (page_tokens[index:prefix_end] == new_prefix).all():\n                    for peek in xrange(prefix_end, max_start_index + 1):\n                        suffix_tokens = page_tokens[peek:peek + suffixlen]\n                        if (suffix_tokens == suffix).all():\n                            return new_prefix\n                index += 1\n            if remove_from_end:\n                new_prefix = new_prefix[:-1]\n            else:\n                new_prefix = new_prefix[1:]\n\n        return new_prefix\n\n    @staticmethod\n    def _find_tokens(tokens, token_types, template, upto=None):\n        \"\"\"\n        Find a consecutive list tokens marching the supplied token types.\n        Possibly remove the final token as this may reduce the number of\n        regions that can be found.\n        \"\"\"\n        result_tokens = []\n        token_type = template.token_dict.token_type\n        for token in reversed(tokens):\n            if token == upto:\n                break\n            if token_type(token) in token_types:\n                result_tokens.append(token)\n            else:\n                break\n        if len(result_tokens) > MIN_TOKEN_LENGTH_BEFORE_TRUNCATE:\n            result_tokens = result_tokens[:-1]\n        return result_tokens\n\n\nclass RepeatedFieldsExtractor(RepeatedContainerExtractor):\n    def __init__(self, extractors, template, containers=None,\n                 container_contents=None, annotation=None, schemas=None):\n        extractors = [BaseExtractor(annotation, schemas)]\n        self._annotation = annotation\n        RepeatedContainerExtractor.__init__(\n            self, extractors, template, containers, container_contents,\n            schemas)\n        self.extractors = [RepeatedDataExtractor(\n            [self.prefix[-2:]], [self.suffix[:1]],\n            [BaseExtractor(annotation, self.schema)])]\n\n    def extract(self, page, start_index=0, end_index=None,\n                ignored_regions=None, **kwargs):\n        data = self.extractors[0].extract(\n            page, start_index, end_index, ignored_regions, **kwargs)\n        if not data:\n            return []\n        values = [v for _, v in data]\n        return [(data[0][0], values)]\n\n    def _validate_and_adapt_item(self, item, htmlpage=None, region=None,\n                                 surrounding_region=None):\n        return item\n\n    def _find_siblings(self, template, containers, container_contents):\n        container_id = self.annotation.metadata['container_id']\n        parent = self._find_annotation(template, container_id)\n        return parent, self.annotation\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/extractors.py",
    "content": "from scrapely.extraction import (InstanceBasedLearningExtractor,\n                                 _annotation_count)\nfrom scrapely.extraction.pageparsing import parse_extraction_page\nfrom scrapely.extraction.pageobjects import TokenDict\nfrom scrapely.extraction.regionextract import (TraceExtractor,\n                                               TemplatePageExtractor)\nfrom scrapy.selector import Selector\nfrom scrapy.utils.spider import arg_to_iter\n\nfrom .container_extractors import BaseContainerExtractor, ContainerExtractor\nfrom .pageparsing import parse_template\nfrom .region_extractors import BaseExtractor\nfrom .utils import _count_annotations\nfrom ..processors import ItemProcessor\n\n\nclass TemplatePageMultiItemExtractor(TemplatePageExtractor):\n    def extract(self, page, start_index=0, end_index=None):\n        items = []\n        for extractor in self.extractors:\n            extracted = extractor.extract(page, start_index, end_index,\n                                          self.template.ignored_regions)\n            for item in arg_to_iter(extracted):\n                if item:\n                    if isinstance(item, (ItemProcessor, dict)):\n                        item[u'_template'] = self.template.id\n                    items.append(item)\n\n        return items\n\n\nclass SlybotIBLExtractor(InstanceBasedLearningExtractor):\n    tree_order_func = _count_annotations\n\n    def __init__(self, template_descriptor_pairs, trace=False,\n                 apply_extrarequired=True):\n        self.token_dict = TokenDict()\n        parsed_templates = []\n        template_versions = []\n        for template, descriptors, version in template_descriptor_pairs:\n            parsed = parse_template(self.token_dict, template, descriptors)\n            parsed_templates.append(parsed)\n            template_versions.append(version)\n            if _annotation_count(parsed):\n                parse_extraction_page(self.token_dict, template)\n\n        for parsed in parsed_templates:\n            default_schema = getattr(parsed, '_default_schema', None)\n            descriptor = parsed.descriptors.get(default_schema)\n            if descriptor is not None and apply_extrarequired:\n                descriptor = descriptor.copy()\n                parsed.descriptors[default_schema] = descriptor\n                parsed.descriptors['#default'] = descriptor\n\n        # templates with more attributes are considered first\n        parsed_templates = sorted(\n            parsed_templates, key=_annotation_count, reverse=True\n        )\n        self.extraction_trees = [\n            self.build_extraction_tree(p, None, trace)\n            for p, v in zip(parsed_templates, template_versions)\n        ]\n\n    def build_extraction_tree(self, template, type_descriptor=None,\n                              trace=False):\n        \"\"\"Build a tree of region extractors corresponding to the template.\"\"\"\n        basic_extractors = BaseExtractor.create(template.annotations)\n        if trace:\n            basic_extractors = TraceExtractor.apply(template, basic_extractors)\n        basic_extractors = ContainerExtractor.apply(template, basic_extractors)\n\n        item_containers, extractors = [], []\n        for extractor in basic_extractors:\n            if (isinstance(extractor, BaseContainerExtractor) and\n                    not extractor.annotation.metadata.get('field')):\n                item_containers.append(extractor)\n            else:\n                extractors.append(extractor)\n        if not extractors:\n            return TemplatePageMultiItemExtractor(template, item_containers)\n        outer_container = ContainerExtractor(\n            extractors, template,\n            required_fields=template.extra_required_attrs)\n        extractors = [outer_container]\n        extractors.extend(item_containers)\n        return TemplatePageMultiItemExtractor(template, extractors)\n\n    def extract(self, html, pref_template_id=None):\n        \"\"\"Extract data from an html page.\n\n        If pref_template_url is specified, the template with that url will be\n        used first.\n        \"\"\"\n        extraction_page = parse_extraction_page(self.token_dict, html)\n        extraction_trees = self.extraction_trees\n        if pref_template_id is not None:\n            extraction_trees = sorted(\n                self.extraction_trees,\n                key=lambda x: x.template.id != pref_template_id)\n        sel = Selector(text=html.body)\n        for extraction_tree in extraction_trees:\n            template_id = extraction_tree.template.id\n            extracted = extraction_tree.extract(extraction_page)\n            correctly_extracted = []\n            for item in extracted:\n                if (isinstance(item, ItemProcessor) or\n                        not hasattr(self, 'validated')):\n                    if hasattr(item, 'process'):\n                        item = item.process(sel)\n                else:\n                    item = self.validated[template_id]([item])\n                if item:\n                    correctly_extracted.append(item)\n            if len(correctly_extracted) > 0:\n                return correctly_extracted, extraction_tree.template\n        return None, None\n\n    def __str__(self):\n        trees = ',\\n'.join(map(str, self.extraction_trees))\n        return \"SlybotIBLExtractor[\\n%s\\n]\" % (trees)\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/pageparsing.py",
    "content": "import json\nfrom itertools import chain\n\nfrom scrapy.utils.spider import arg_to_iter\n\nfrom scrapely.extraction.pageparsing import (\n    TemplatePageParser, _AUTO_CLOSE_TAGS_ON_OPEN, _END_UNPAIREDTAG_TAGS,\n    HtmlTag\n)\nfrom scrapely.extraction.pageobjects import (\n    TemplatePage, AnnotationTag, AnnotationText\n)\n\n\nclass SlybotTemplatePageParser(TemplatePageParser):\n    def to_template(self, descriptors=None):\n        if self.labelled_tag_stacks:\n            tags = sorted(\n                filter(bool, chain(*self.labelled_tag_stacks.values())),\n                key=lambda a: a.start_index, reverse=True)\n            try:\n                next_tag_index = self.annotations[-1].end_index + 1\n            except IndexError:\n                next_tag_index = self.next_tag_index - len(tags) - 2\n            for tag in tags:\n                tag.end_index = next_tag_index\n                next_tag_index += 1\n            self.annotations.extend(tags)\n        if descriptors is None:\n            descriptors = {}\n        return SlybotTemplatePage(self.html_page, self.token_dict,\n                                  self.token_list, self.annotations,\n                                  self.html_page.page_id, self.ignored_regions,\n                                  self.extra_required_attrs, descriptors)\n\n    @staticmethod\n    def _read_template_annotation(html_tag):\n        template_attr = html_tag.attributes.get('data-scrapy-annotate')\n        if template_attr is None:\n            return None\n        try:\n            return json.loads(template_attr.replace('&quot;', '\"'))\n        except ValueError:\n            # JSON may be invalid in the case of extremely malformed html\n            return None\n\n    def read_jannotations(self, html_tag):\n        jannotations = self._read_template_annotation(html_tag)\n        return jannotations if jannotations else None\n\n    def build_annotation(self, jannotation, is_open=True):\n        annotation = AnnotationTag(self.next_tag_index,\n                                   self.next_tag_index + 1)\n        content_key = jannotation.pop('text-content', 'content')\n        attribute_annotations = jannotation.pop('annotations', {})\n        content = attribute_annotations.pop(content_key, None)\n        if is_open and content:\n            annotation.surrounds_attribute = content\n        annotation.tag_attributes = list(attribute_annotations.items())\n        annotation.metadata = jannotation\n        return annotation\n\n    def handle_generated(self, annotation, ignored=False):\n        if not annotation.metadata.pop('generated', False):\n            return\n        self.token_list.pop()\n        annotation.start_index -= 1\n        if self.previous_element_class == HtmlTag:\n            annotation.annotation_text = AnnotationText('')\n        else:\n            annotation.annotation_text = AnnotationText(self.prev_data)\n        if ignored:\n            ignored = self.ignored_regions.pop()\n            self.ignored_regions.append((ignored[0] - 1, ignored[1]))\n\n    def handle_variant(self, annotation, is_open=True):\n        try:\n            variant_id = int(annotation.metadata.pop('variant', 0))\n        except (TypeError, ValueError):\n            variant_id = None\n        if variant_id is not None and variant_id > 0:\n            if is_open and annotation.surrounds_attribute is not None:\n                self.variant_stack.append(variant_id)\n            else:\n                annotation.variant_id = variant_id\n        if is_open and self.variant_stack and annotation.variant_id is None:\n            variant_id = self.variant_stack[-1]\n            if variant_id == '0':\n                variant_id = None\n            annotation.variant_id = variant_id\n\n    def handle_ignore(self, html_tag, is_open=True):\n        next_tag_idx = self.next_tag_index\n        read_bool = lambda x: self._read_bool_template_attribute(html_tag, x)\n        ignore = read_bool('ignore')\n        ignore_beneath = read_bool('ignore-beneath')\n        if ignore:\n            if html_tag.tag == \"img\":\n                self.ignored_regions.append((next_tag_idx, next_tag_idx + 1))\n            elif is_open:\n                self.ignored_regions.append((next_tag_idx, None))\n                self.ignored_tag_stacks[html_tag.tag].append(html_tag)\n        elif is_open and self.ignored_tag_stacks.get(html_tag.tag):\n            self.ignored_tag_stacks[html_tag.tag].append(None)\n        if ignore_beneath:\n            self.ignored_regions.append((next_tag_idx, None))\n        return ignore or ignore_beneath\n\n    def handle_replacement(self, html_tag):\n        replacement = html_tag.attributes.pop(\"data-scrapy-replacement\", None)\n        if replacement:\n            self.token_list.pop()\n            self._add_token(replacement, html_tag.tag_type, html_tag.start,\n                            html_tag.end)\n            self.replacement_stacks[html_tag.tag].append(replacement)\n        elif html_tag.tag in self.replacement_stacks:\n            self.replacement_stacks[html_tag.tag].append(None)\n        if self.unpairedtag_stack:\n            if html_tag.tag in _END_UNPAIREDTAG_TAGS:\n                self._close_unpaired_tag()\n            else:\n                self.unpairedtag_stack.append(html_tag.tag)\n        tagname = replacement or self._update_replacement_stack(html_tag)\n        self._handle_unclosed_tags(tagname, _AUTO_CLOSE_TAGS_ON_OPEN)\n        return tagname\n\n    def _handle_unpaired_tag(self, html_tag):\n        self.handle_ignore(html_tag, is_open=False)\n        jannotations = self.read_jannotations(html_tag)\n        for jannotation in arg_to_iter(jannotations):\n            if self.unpairedtag_stack:\n                self._close_unpaired_tag()\n            self.extra_required_attrs.extend(jannotation.pop('required', []))\n            annotation = self.build_annotation(jannotation)\n            self.handle_variant(annotation, is_open=False)\n            self.annotations.append(annotation)\n        self.next_tag_index += 1\n\n    def _handle_open_tag(self, html_tag):\n        ignored = self.handle_ignore(html_tag)\n        tagname = self.handle_replacement(html_tag)\n        jannotations = self.read_jannotations(html_tag)\n        if not jannotations and tagname in self.labelled_tag_stacks:\n            # add this tag to the stack to match correct end tag\n            self.labelled_tag_stacks[tagname].append(None)\n        increment = not jannotations\n        for jannotation in arg_to_iter(jannotations):\n            self.extra_required_attrs.extend(jannotation.pop('required', []))\n            annotation = self.build_annotation(jannotation)\n            self.handle_generated(annotation, ignored)\n            self.handle_variant(annotation)\n            # Don't increment generated/text annotation\n            if annotation.annotation_text is None and not increment:\n                increment = True\n            # look for a closing tag if the content is important\n            if annotation.surrounds_attribute:\n                self.labelled_tag_stacks[tagname].append(annotation)\n            else:\n                annotation.end_index = annotation.start_index + 1\n                self.annotations.append(annotation)\n        self.next_tag_index += increment\n\n\nclass SlybotTemplatePage(TemplatePage):\n    __slots__ = ('descriptors', 'modifiers')\n\n    def __init__(self, htmlpage, token_dict, page_tokens, annotations,\n                 template_id=None, ignored_regions=None, extra_required=None,\n                 descriptors=None):\n        self.descriptors = descriptors\n        self.modifiers = {}\n        for descriptor in descriptors.values():\n            self.modifiers.update(getattr(descriptor, 'extractors', {}))\n        super(SlybotTemplatePage, self).__init__(\n            htmlpage, token_dict, page_tokens, annotations, template_id,\n            ignored_regions, extra_required)\n\n    def descriptor(self, descriptor_name=None):\n        if descriptor_name is None:\n            descriptor_name = '#default'\n        return self.descriptors.get(descriptor_name, {})\n\n\ndef parse_template(token_dict, template_html, descriptors):\n    \"\"\"Create an TemplatePage object by parsing the annotated html.\"\"\"\n    parser = SlybotTemplatePageParser(token_dict)\n    parser.feed(template_html)\n    return parser.to_template(descriptors)\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/region_extractors.py",
    "content": "from itertools import chain\n\nfrom scrapely.extraction.pageobjects import AnnotationTag, PageRegion\nfrom scrapely.extraction.regionextract import (\n    RecordExtractor, BasicTypeExtractor, TextRegionDataExtractor,\n    labelled_element\n)\nfrom scrapely.extraction.similarity import similar_region\n\nfrom .utils import _int_cmp\nfrom ..exceptions import MissingRequiredError\n\n\nclass BaseExtractor(BasicTypeExtractor):\n    def __init__(self, annotation, attribute_descriptors=None):\n        self.annotation = annotation\n        if annotation.surrounds_attribute:\n            self.content_validate = lambda x: x\n            self.extract = self._extract_content\n            if annotation.annotation_text:\n                start = annotation.annotation_text.start_text\n                end = annotation.annotation_text.follow_text\n                self.content_validate = TextRegionDataExtractor(\n                    start, end).extract\n\n        if annotation.tag_attributes:\n            self.tag_data = []\n            for (tag_attr, extraction_attr) in annotation.tag_attributes:\n                self.tag_data.append((lambda x: x, tag_attr, extraction_attr))\n            self.extract = self._extract_both if \\\n                annotation.surrounds_attribute else self._extract_attribute\n\n    @classmethod\n    def _create_basic_extractor(cls, annotation, attribute_descriptors):\n        return cls(annotation, attribute_descriptors)\n\n    def __str__(self):\n        messages = [self.__class__.__name__, '(']\n        annotation = self.annotation\n        messages.append(self.annotation.surrounds_attribute or '')\n\n        if annotation.tag_attributes:\n            if annotation.surrounds_attribute:\n                messages.append(';')\n            for (f, ta, ea) in self.tag_data:\n                messages += [ea, ': attribute \"', ta, '\"']\n        start, end = annotation.start_index, annotation.end_index\n        messages.append(', template[%s:%s])' % (start, end))\n        return ''.join(map(str, messages))\n\n\nclass SlybotRecordExtractor(RecordExtractor):\n    def extract(self, page, start_index=0, end_index=None,\n                ignored_regions=None, **kwargs):\n        \"\"\"extract data from an extraction page\n\n        The region in the page to be extracted from may be specified using\n        start_index and end_index\n        \"\"\"\n        if ignored_regions is None:\n            ignored_regions = []\n        extractors = sorted(self.extractors + ignored_regions,\n                            key=lambda x: labelled_element(x).start_index)\n        _, _, attributes = self._doextract(page, extractors + ignored_regions,\n                                           start_index,\n                                           end_index, **kwargs)\n        return list(attributes)\n\n    def _doextract(self, page, extractors, start_index, end_index,\n                   nested_regions=None, ignored_regions=None, **kwargs):\n        # reorder extractors leaving nested ones for the end and separating\n        # ignore regions\n        nested_regions = nested_regions or []\n        ignored_regions = ignored_regions or []\n        first_extractor, following_extractors = extractors[0], extractors[1:]\n        while (following_extractors and\n               _int_cmp(\n                labelled_element(following_extractors[0]).start_index, 'lt',\n                labelled_element(first_extractor).end_index)):\n            ex = following_extractors.pop(0)\n            labelled = labelled_element(ex)\n            if (isinstance(labelled, AnnotationTag) or\n                (nested_regions and\n                 _int_cmp(labelled_element(nested_regions[-1]).start_index, 'lt', labelled.start_index) and\n                 _int_cmp(labelled.start_index, 'lt', labelled_element(nested_regions[-1]).end_index))):\n                nested_regions.append(ex)\n            else:\n                ignored_regions.append(ex)\n        lelem = labelled_element\n        extracted_data = []\n        # end_index is inclusive, but similar_region treats it as exclusive\n        end_region = None if end_index is None else end_index + 1\n        start_region = None if start_index is None else start_index - 1\n        labelled = lelem(first_extractor)\n        try:\n            score, pindex, sindex = similar_region(\n                page.page_tokens, self.template_tokens, labelled, start_region,\n                end_region, self.best_match, **kwargs)\n        except IndexError:\n            start_region, end_region = start_index, end_index\n            try:\n                score, pindex, sindex = similar_region(\n                    page.page_tokens, self.template_tokens, labelled,\n                    start_region, end_region, self.best_match, **kwargs)\n            except IndexError:\n                return start_index + 1, end_index, []\n\n        if score > 0:\n            if isinstance(labelled, AnnotationTag):\n                similar_ignored_regions = []\n                start = pindex\n                for i in ignored_regions:\n                    s, p, e = similar_region(\n                        page.page_tokens, self.template_tokens, i, start,\n                        sindex, self.best_match, **kwargs)\n                    if s > 0:\n                        similar_ignored_regions.append(PageRegion(p, e))\n                        start = e or start\n                extracted_data = first_extractor.extract(\n                    page, pindex, sindex, similar_ignored_regions, **kwargs)\n            if following_extractors:\n                previous_extraction = start_region or sindex\n                if previous_extraction:\n                    kwargs['previous'] = previous_extraction + 1\n                _, _, following_data = self._doextract(\n                    page, following_extractors, sindex or start_region,\n                    end_index, **kwargs)\n                extracted_data += following_data\n            if nested_regions:\n                _, _, nested_data = self._doextract(\n                    page, nested_regions, pindex, sindex, **kwargs)\n                extracted_data += nested_data\n        elif following_extractors:\n            end_index, _, following_data = self._doextract(\n                page, following_extractors, start_index, end_index, **kwargs)\n            if end_index is not None:\n                pindex, sindex, extracted_data = self._doextract(\n                    page, [first_extractor], start_region, end_index,\n                    nested_regions, ignored_regions, **kwargs\n                )\n                if extracted_data and sindex:\n                    kwargs['previous'] = sindex + 1\n            extracted_data += following_data\n        elif nested_regions:\n            _, _, nested_data = self._doextract(\n                page, nested_regions, start_index, end_index, **kwargs)\n            extracted_data += nested_data\n\n        if (hasattr(first_extractor, 'annotation') and\n                first_extractor.annotation):\n            annotation = first_extractor.annotation or []\n            content = annotation.surrounds_attribute or []\n            attributes = annotation.tag_attributes\n            attrs = chain(content, *(a for _, a in attributes))\n            extracted_ids = {a['id'] for annos, _ in extracted_data\n                             for a in annos\n                             if isinstance(a, dict) and 'id' in a}\n            if (any(isinstance(k, dict) and k.get('required') and\n                    k.get('id') not in extracted_ids for k in attrs)):\n                raise MissingRequiredError()\n        return pindex, sindex, extracted_data\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/extraction/utils.py",
    "content": "import operator\n\nfrom collections import namedtuple\nfrom itertools import groupby\nfrom operator import itemgetter\nRegion = namedtuple('Region', ['score', 'start_index', 'end_index'])\n\n\ndef element_from_page_index(page, index):\n    token_index = page.token_page_indexes[index]\n    return page.htmlpage.parsed_body[token_index]\n\n\ndef container_id(x):\n    return x.annotation.metadata.get('container_id')\n\n\ndef _int_cmp(a, op, b):\n    op = getattr(operator, op)\n    a = -float('inf') if a is None else a\n    b = -float('inf') if b is None else b\n    return op(a, b)\n\n\ndef group_tree(tree, container_annotations):\n    result = {}\n    get_first = itemgetter(0)\n    for name, value in groupby(sorted(tree, key=get_first), get_first):\n        value = list(value)\n        if len(value) <= 1:\n            result[name] = container_annotations.get(name)\n        else:\n            result[name] = group_tree([l[1:] for l in value if len(l) > 1],\n                                      container_annotations)\n    return result\n\n\ndef _count_annotations(extractor):\n\n    def count(extractors):\n        result = 0\n        for ex in extractors:\n            while (hasattr(ex, 'extractors') and\n                   hasattr(ex, 'modifiers')):\n                return count(ex.extractors)\n            result += len(ex.extractors)\n        return result\n    return count(extractor.extractors)\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/migration.py",
    "content": "\"\"\"Migrate existing samples to most current slybot version.\n\nConvert tagid to selector\n    1. Add tagids\n    2. Load page in lxml\n    3. for each annotation\n    4.     find element by tagid\n    5.     get unique selector for tagid\n    6.     save unique selector\n\nHandle variants\n    1. Find matching variants\n    2. Find selector for each matching variant\n    3. Find common parent\n    4. Find repeated parent\n    5. Assign to parent field called variant\n\nHandle generated annotations\n    1. Find element referred to by annotation\n    2. Find text for element\n    3. Find text for annotation\n    3. Remove extra annotation metadata\n\"\"\"\nimport copy\nimport json\nimport re\nimport six\nimport sys\n\nimport slybot\n\nfrom collections import defaultdict\nfrom itertools import chain, combinations, groupby\nfrom operator import itemgetter\nfrom random import Random\nfrom six.moves.urllib.parse import unquote\nfrom uuid import uuid4\n\nfrom cssselect import SelectorSyntaxError\nfrom lxml.etree import _Element, Comment\nfrom scrapy import Selector\n\nfrom slybot.utils import add_tagids\nSLYBOT_VERSION = slybot.__version__\nIGNORE_ATTRIBUTES = ['data-scrapy-ignore', 'data-scrapy-ignore-beneath']\n_ID_RE = re.compile('([0-9a-f]{4}-){2}[0-9a-f]{4}')\n_TABLE_RE = re.compile('((?:^|\\s)table[^\\s>]*[\\s])', re.I)\n\n\ndef short_guid():\n    return '-'.join(str(uuid4()).split('-')[1:4])\n\n\ndef gen_id(disallow=None):\n    if disallow is not None:\n        disallow = set(disallow)\n    else:\n        disallow = []\n    _id = short_guid()\n    while _id in disallow:\n        _id = short_guid()\n    return _id\n\n\ndef gen_predictable_id(id1, id2, disallow=None):\n    if disallow is not None:\n        disallow = set(disallow)\n    else:\n        disallow = []\n    id1, id2 = id_to_int(id1), id_to_int(id2)\n    if id1 == id2:\n        id2 = ~id2 - 1\n    seed = id1 ^ id2\n    generator = Random(seed)\n\n    def format_id():\n        id_ = '{:0>12x}'.format(generator.randint(0, 2**47))\n        return '-'.join((id_[:4], id_[4:-4], id_[-4:]))\n    id_ = format_id()\n    while id_ in disallow:\n        id_ = format_id()\n    return id_\n\n\ndef id_to_int(id_):\n    try:\n        return int(str(id_).replace('-', ''), 16)\n    except ValueError:\n        seed = 1\n        for i, ch in enumerate(id_):\n            seed *= ord(ch) + i\n        return seed\n\n\ndef repair_ids(sample):\n    annotations = sample['plugins']['annotations-plugin']['extracts']\n    aids, cids = defaultdict(list), {}\n    for a in annotations:\n        if a.get('item_container'):\n            cids[a['id']] = a\n        if a.get('container_id'):\n            aids[a['container_id']].append(a)\n    full_ids = PartialKeyDict()\n    for id_ in aids:\n        try:\n            full_ids[id_] = id_\n        except ValueError:\n            pass\n    for id_, affected in aids.items():\n        if not id_ or len(id_) in (14, 21):\n            continue\n        full_id = full_ids[id_]\n        if id_ != full_id:\n            for a in affected:\n                a['container_id'] = full_id\n            if id_ in cids:\n                cids[id_]['id'] = full_id\n    return sample\n\n\ndef port_sample(sample, schemas=None, extractors=None):\n    \"\"\"Convert slybot samples made before slybot 0.13 to new format.\"\"\"\n    if schemas is None:\n        schemas = {}\n    if extractors is None:\n        extractors = {}\n    if sample.get('version') == SLYBOT_VERSION:\n        return sample, schemas\n    if 'url' not in sample:\n        sample['url'] = 'http://example.com'\n    container_id = gen_predictable_id(\n        sample.get('id', 1), sample.get('page_id', sample['name']))\n    schema_id, schemas = guess_schema(sample, schemas)\n    default_annotations = [_create_container('body', container_id,\n                                             schema_id=schema_id)]\n    if not sample.get('annotated_body') and not sample.get('plugins'):\n        sample['plugins'] = {\n            'annotations-plugin': {\n                'extracts': default_annotations\n            }\n        }\n        return sample, schemas\n    if not sample.get('plugins'):\n        sample['plugins'] = load_annotations(sample.get('annotated_body', u''))\n    else:\n        repair_ids(sample)\n\n    # Group annotations by type\n    annotations = sample['plugins']['annotations-plugin']['extracts']\n    try:\n        sel = Selector(text=add_tagids(sample['original_body']))\n    except KeyError:\n        annotated = sample.get('annotated_body', u'')\n        sample['original_body'] = annotated\n        try:\n            tagged = add_tagids(annotated)\n        except KeyError:\n            tagged = u''\n        sel = Selector(text=tagged)\n    sample.pop('annotated_body', None)\n    annotations = port_standard(annotations, sel, sample, extractors)\n    standard_annos, generated_annos, variant_annos = [], [], []\n    for a in annotations:\n        if a.get('generated'):\n            generated_annos.append(a)\n        elif a.get('variants', 0) > 0:\n            variant_annos.append(a)\n        else:\n            standard_annos.append(a)\n    if not annotations:\n        sample['plugins'] = {\n            'annotations-plugin': {\n                'extracts': default_annotations\n            }\n        }\n        return sample, schemas\n    new_annotations = []\n    a = find_element(annotations[0], sel)\n    for b in annotations[1:]:\n        b = find_element(b, sel)\n        a = find_common_parent(a, b)\n    parent = a.getparent()\n    container = _create_container(\n        a if parent is None else parent, container_id, selector=sel,\n        schema_id=schema_id)\n    new_annotations.append(container)\n    for a in standard_annos:\n        a.pop('variant', None)\n    new_annotations.extend(standard_annos)\n    new_annotations.extend(port_generated(generated_annos, sel))\n    new_annotations.extend(port_variants(variant_annos, sel))\n    for a in new_annotations:\n        if not (a.get('item_container') and a.get('container_id')):\n            if container_id == a.get('id'):\n                continue\n            a['container_id'] = container_id\n        a.pop('tagid', None) or a.pop('data-tagid', None)\n    # Update annotations\n    sample['plugins']['annotations-plugin']['extracts'] = new_annotations\n    sample['version'] = SLYBOT_VERSION\n    return sample, schemas\n\n\ndef find_element(tagid, sel):\n    \"\"\"Find an element by its tagid.\"\"\"\n    if isinstance(tagid, _Element):\n        return tagid\n    if isinstance(tagid, dict):\n        tagid = tagid.get('tagid')\n    elements = sel.xpath('//*[@data-tagid=\"%s\"]' % tagid)\n    if elements:\n        return elements[0].root\n\n\ndef css_escape(s):\n    \"\"\"from http://mathiasbynens.be/notes/css-escapes\"\"\"\n    s = re.sub(r'(^-$|[ !\"#\\$%&\\'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])', r'\\\\\\1', s)\n    s = re.sub(r'^(-?)(\\d)', lambda m: '%s\\%x ' % (m.group(1), ord(m.group(2))), s)\n    s = re.sub(r'([\\t\\n\\v\\f\\r])', lambda m: '\\%x ' % ord(m.group(1)), s)\n    return s\n\n\ndef find_generalized_css_selector(elem, sel):\n    selector = find_css_selector(elem, sel)\n    return ', '.join(handle_tables(s) for s in selector.split(', '))\n\n\ndef handle_tables(selector):\n    generalized, has_parts = [], False\n    for part in (part.strip() for part in _TABLE_RE.split(selector) if part):\n        if has_parts and part.startswith('table'):\n            generalized[-1] = ' '.join((generalized[-1], part))\n        else:\n            generalized.append(part)\n        has_parts = True\n    selectors = []\n    combined = (combinations(generalized[:-1], i + 1)\n                for i in range(len(generalized) - 1))\n    for section in chain(*combined):\n        sel = generalized[:]\n        for selection in section:\n            idx = sel.index(selection)\n            sel[idx] = sel[idx] + ' > *'\n        selectors.append(' '.join(sel))\n    return ', '.join([selector] + selectors)\n\n\ndef find_css_selector(elem, sel, depth=0, previous_tbody=False):\n    \"\"\"Find a unique selector for an element.\n\n    Adapted from mozilla findCssSelector in css-logic.js\n    http://lxr.mozilla.org/mozilla-release/source/toolkit/devtools/styleinspector/css-logic.js\n    \"\"\"\n    def children_index(elem):\n        parent = elem.getparent()\n        if parent is not None:\n            children = filter(lambda x: x.tag is not Comment,\n                              parent.getchildren())\n            index = children.index(elem) + 1\n        else:\n            index = 0\n        return index\n\n    def css(selector, query):\n        try:\n            return selector.css(query)\n        except SelectorSyntaxError:\n            return []\n\n    def build_table_selector(elem):\n        parent = find_css_selector(elem.getparent(), sel, depth + 1)\n        join = '' if previous_tbody else ' >'\n        selector = '%s%s %s:nth-child(%s)' % (\n            parent, join, tag_name, children_index(elem)\n        )\n        e = css(sel, selector)\n        if not e:\n            join = '' if previous_tbody or tag_name == 'tr' else ' >'\n            selector = '%s%s %s:nth-child(%s)' % (\n                parent, join, tag_name, children_index(elem))\n        return selector\n\n    elem_id = elem.attrib.get('id')\n    if elem_id:\n        id_selector = '#%s' % css_escape(elem_id)\n        if len(css(sel, id_selector)) == 1 and depth <= 1:\n            return id_selector\n\n    # Inherently unique by tag name\n    tag_name = elem.tag\n    for tag in ('html', 'head', 'body'):\n        if tag_name == tag:\n            return tag\n\n    # We might be able to find a unique class name\n    classes = elem.get('class', '').split()\n    if classes:\n        for class_name in classes:\n            selector = '.%s' % css_escape(class_name)\n            matches = css(sel, selector)\n            if len(matches) == 1 and tag_name != 'table':\n                return selector\n            # Maybe it's unique with a tag name?\n            selector = tag_name + selector\n            matches = css(sel, selector)\n            if len(matches) == 1:\n                return selector\n            tag = tag_name if tag_name == 'table' else ''\n            child_idx = children_index(elem)\n            # Maybe it's unique using a tag name and nth-child\n            selector = '%s%s:nth-child(%s)' % (tag, selector, child_idx)\n            matches = css(sel, selector)\n            if len(matches) == 1:\n                return selector\n\n    # Not unique enough yet.  As long as it's not a child of the document,\n    # continue recursing up until it is unique enough.\n    if elem.getparent() is not None:\n        if tag_name in ('thead', 'tbody'):\n            selector = find_css_selector(elem.getparent(), sel, depth + 1,\n                                         True)\n        else:\n            selector = build_table_selector(elem)\n    return selector\n\n\ndef find_common_parent(a, b):\n    \"\"\"Find a common parent for 2 elements.\"\"\"\n    a_parents = list(a.iterancestors())\n    b_parents = list(b.iterancestors())\n    a_parents_set = set(a_parents)\n    b_parents_set = set(b_parents)\n    if a == b:\n        return a\n    if b in a_parents_set:\n        return b\n    if a in b_parents_set:\n        return a\n    if len(a_parents) < len(b_parents):\n        for elem in a_parents:\n            if elem == b or elem in b_parents_set:\n                return elem\n    else:\n        for elem in b_parents:\n            if elem == a or elem in a_parents_set:\n                return elem\n\n\ndef port_variants(variant_annotations, sel, schema_id=None):\n    \"\"\"Port variant annotations to the MIE annotations.\"\"\"\n    # Group variants\n    grouper = itemgetter('variants')\n    grouped_variants = [(vid, list(grp))\n                        for vid, grp in groupby(variant_annotations, grouper)]\n    adjacent_variants = set()\n    # Eliminate non adjacent variants\n    for variant_id, _ in grouped_variants:\n        if not variant_id:\n            continue\n        if variant_id in adjacent_variants:\n            adjacent_variants.remove(variant_id)\n        else:\n            adjacent_variants.add(variant_id)\n    # Remove non sequential variants\n    grouped_variants = [(vid, variant) for vid, variant in grouped_variants\n                        if variant_id in adjacent_variants and variant]\n    annotations = []\n    for first, last in zip(*[iter(grouped_variants)] * 2):\n        siblings = 0\n        repeated_container = _get_parent(first, sel)\n        last_shared_parent = _get_parent(last, sel)\n        container = find_common_parent(repeated_container, last_shared_parent)\n        if repeated_container == container:\n            repeated_container, siblings = _get_parent_and_siblings(first,\n                                                                    container,\n                                                                    sel)\n        container_id = gen_predictable_id(first['id'], last['id'])\n        for annotation in first:\n            annotation['container_id'] = container_id\n            del annotation['variant']\n        annotations.extend(first)\n        annotations.append(_create_container(container, container_id,\n                                             field='variants', selector=sel,\n                                             schema_id=schema_id))\n        annotations.append(_create_container(repeated_container, container_id,\n                                             repeated=True, siblings=siblings,\n                                             selector=sel))\n    return variant_annotations\n\n\ndef _get_parent(annotations, sel):\n    parent = annotations[0]\n    parent_element = find_element(parent, sel)\n    if len(annotations) == 1:\n        return parent_element.getparent()\n    for annotation in annotations[1:]:\n        annotation_element = find_element(annotation, sel)\n        parent_element = find_common_parent(parent_element, annotation_element)\n    return parent_element\n\n\ndef _get_parent_and_siblings(annotations, upto, sel):\n    # Find deepest parents at same depth from shared parent which are siblings\n    highest = _get_highest(annotations, upto, sel)\n    highest_reverse = _get_highest(list(reversed(annotations)), upto, sel)\n    parent_siblings = [set(highest_reverse.getparent().getchildren())]\n    for parent in highest_reverse.iterancestors():\n        if parent == upto:\n            break\n        parent_siblings.append(set(parent.getparent().getchildren()))\n    for element in chain((highest,), highest.iterancestors()):\n        for siblings_set in parent_siblings:\n            if element in siblings_set:\n                highest = element\n                break\n    # Find distance between those siblings\n    siblings = highest.getparent().getchildren()\n    siblings_set = set(siblings)\n    max_sibling = 0\n    for annotation in annotations:\n        parents = set(find_element(annotation, sel).iterancestors())\n        intersection = parents & siblings_set\n        if not intersection:\n            continue\n        try:\n            sibling = siblings.index(list(intersection)[0])\n        except ValueError:\n            continue\n        if sibling > max_sibling:\n            max_sibling = sibling\n    return highest, sibling\n\n\ndef _get_highest(annotations, upto, sel):\n    highest = find_element(annotations[0], sel)\n    for annotation in annotations[1:]:\n        element = find_element(annotation, sel)\n        next = find_common_parent(highest, element)\n        if next == upto:\n            break\n        highest = next\n    return highest\n\n\ndef _create_container(element, container_id, repeated=False, siblings=0,\n                      field=None, selector=None, schema_id=None):\n    if isinstance(element, str):\n        s = element\n    else:\n        s = find_generalized_css_selector(element, selector)\n    data = {\n        'id': '%s%s' % (container_id, '#parent' if repeated else ''),\n        'container_id': None,\n        'accept_selectors': [s],\n        'reject_selectors': [],\n        'selector': s,\n        'item_container': True,\n        'repeated': repeated,\n        'required': [],\n        'schema_id': schema_id,\n        'siblings': siblings,\n        'annotations': {'#portia-content': '#dummy'},\n        'text-content': '#portia-content',\n    }\n    if repeated:\n        data['container_id'] = container_id\n    if hasattr(element, 'attrib') and 'data-tagid' in element.attrib:\n        data['data-tagid'] = element.attrib['data-tagid']\n    if field:\n        data['field'] = field\n    return data\n\n\ndef _add_annotation_data(annotation, sample, extractors):\n    if 'data' in annotation:\n        return annotation\n    annotations = sample['plugins']['annotations-plugin']['extracts']\n    existing_ids = {i for a in annotations for i in a.get('data', [])}\n    annotation['data'] = {}\n    for attribute, field in annotation.get('annotations', {}).items():\n        if field == '#dummy':\n            continue\n        _id = gen_predictable_id(\n            sample['page_id'], attribute + field or '', disallow=existing_ids)\n        extractors = [e for e in sample.get('extractors', {}).get(field, [])\n                      if e in extractors]\n        annotation['data'][_id] = {\n            'attribute': attribute,\n            'field': field,\n            'required': field in annotation.get('required', []),\n            'extractors': extractors\n        }\n    return annotation\n\n\ndef port_generated(generated_annotations, sel):\n    \"\"\"Port generated annotations to annotations with custom extractors.\"\"\"\n    for annotation in generated_annotations:\n        # Find pre and post text\n        _slice = annotation.get('slice')\n        if not annotation.get('tagid') or not _slice or len(_slice) != 2:\n            continue\n        element = find_element(annotation, sel)\n        if element is None:\n            continue\n        pre_text, post_text = '', ''\n        if annotation.get('insert_after'):\n            selector = find_generalized_css_selector(element.getparent(), sel)\n            if not selector:\n                continue\n            annotation['accept_selectors'] = [selector]\n            annotation['selector'] = selector\n            siblings = list(element.getparent().iterchildren())\n            start = siblings.index(element)\n\n            def process_siblings(others, reverse=False):\n                text = []\n                order = ('tail', 'text') if reverse else ('text', 'tail')\n                for elem in others:\n                    for t in order:\n                        text.append(getattr(elem, t) or ' ')\n                    if any(t.strip() for t in text):\n                        break\n                return ''.join(text)\n            pre_text = process_siblings(\n                siblings[start - 1: 0: -1] + [siblings[0]], True)\n            post_text = process_siblings(siblings[start + 1:], 1)\n            text = element.tail\n        else:\n            text = element.text\n        text = (text or '').strip()\n        data = annotation['data']\n        contentf = annotation.get('text-content', 'content')\n        for anno in (a for a in data.values() if a['attribute'] == contentf):\n            pre_text = (pre_text + text[0:_slice[0]]).strip()\n            post_text = (text[_slice[1]:] + post_text).strip()\n            if anno and pre_text or post_text:\n                anno['pre_text'] = pre_text\n                anno['post_text'] = post_text\n        # Create new text region field\n        annotation.pop('variant', None)\n        del annotation['slice']\n    return generated_annotations\n\n\ndef port_standard(standard_annotations, sel, sample, extractors):\n    \"\"\"Add accept selectors for existing annotations.\"\"\"\n    new_annotations = []\n    for annotation in standard_annotations:\n        if not annotation.get('tagid'):\n            continue\n        element = find_element(annotation, sel)\n        if element is None:\n            continue\n        selector = find_generalized_css_selector(element, sel)\n        if not selector:\n            continue\n        annotation['accept_selectors'] = [selector]\n        annotation['selector'] = selector\n        annotation['reject_selectors'] = []\n        annotation = _add_annotation_data(annotation, sample, extractors)\n        for _id, data in annotation.get('data', {}).items():\n            a = copy.deepcopy(annotation)\n            a['id'] = gen_predictable_id(_id, a['id'])\n            a['data'] = {\n                gen_predictable_id(a['id'], 1): data\n            }\n            new_annotations.append(a)\n    return new_annotations\n\n\ndef load_annotations(body):\n    \"\"\"Create slybot annotations from annotated html.\"\"\"\n    if not body:\n        return {'annotations-plugin': {'extracts': []}}\n    sel = Selector(text=add_tagids(body))\n    existing_ids = set()\n    annotations = []\n    for elem in sel.xpath('//*[@data-scrapy-annotate]'):\n        attributes = elem.root.attrib\n        try:\n            # Load annotation json and skip malformed json strings\n            annotation = json.loads(\n                unquote(attributes['data-scrapy-annotate']))\n        except ValueError:\n            continue\n        if (isinstance(elem.root, _Element) and\n                elem.root.tag.lower() == 'ins'):\n            annotation.update(find_generated_annotation(elem))\n        else:\n            annotation['tagid'] = attributes.get('data-tagid')\n        if 'id' not in annotation:\n            annotation['id'] = gen_id(disallow=existing_ids)\n        existing_ids.add(annotation['id'])\n        annotations.append(annotation)\n    for elem in sel.xpath('//*[@%s]' % '|@'.join(IGNORE_ATTRIBUTES)):\n        attributes = elem.root.attrib\n        for attribute in IGNORE_ATTRIBUTES:\n            if attribute in attributes:\n                break\n        ignore = {attribute[len('data-scrapy-'):]: True}\n        if 'id' not in ignore:\n            ignore['id'] = gen_id(disallow=existing_ids)\n        existing_ids.add(ignore['id'])\n        annotations.append(ignore)\n    return {'annotations-plugin': {'extracts': annotations}}\n\n\ndef find_generated_annotation(elem):\n    \"\"\"Find annotation information for generated element.\"\"\"\n    elem = elem.root\n    previous = elem.getprevious()\n    insert_after = True\n    nodes = []\n    if previous is None:\n        previous = elem.getparent()\n        nodes = [previous] + previous.getchildren()\n        insert_after = False\n    else:\n        while (previous is not None and isinstance(previous, _Element) and\n                previous.tag.lower() == 'ins'):\n            previous = previous.getprevious()\n        if previous is None:\n            previous = elem.getparent()\n            insert_after = False\n            node = previous.getchildren()[0]\n        else:\n            node = previous\n        while node is not None:\n            nodes.append(node)\n            node = node.getnext()\n            if (node is None or\n                    isinstance(node, _Element) and node.tag.lower() == 'ins'):\n                nodes.append(node)\n                break\n    annotation = {\n        'tagid': previous.attrib.get('data-tagid'),\n        'generated': True,\n        'insert_after': insert_after\n    }\n    last_node_ins = False\n    start = 0\n    # Calculate the length and start position of the slice ignoring the ins\n    # tag and with leading whitespace removed\n    for node in nodes:\n        if (node is not None and isinstance(node, _Element) and\n                node.tag.lower() == 'ins'):\n            last_node_ins = True\n            text_len = len(node.text or '')\n            if node == elem:\n                annotation['slice'] = start, start + text_len\n            else:\n                start += text_len\n        else:\n            text = node.tail if annotation['insert_after'] else node.text\n            text = '' if text is None else text\n            if not last_node_ins:\n                text = text.lstrip()\n            start += len(text)\n            last_node_ins = False\n    return annotation\n\n\ndef guess_schema(sample, schemas):\n    schema_id = _guess_schema_id(sample, schemas)\n    try:\n        annotations = sample['plugins']['annotations-plugin']['extracts']\n    except KeyError:\n        annotations = []\n    if schema_id not in schemas:\n        schemas[schema_id] = create_schema(schemas, annotations)\n    else:\n        schemas[schema_id] = add_fields(schemas[schema_id], annotations)\n    return schema_id, schemas\n\n\ndef _guess_schema_id(sample, schemas):\n    # If project has no schemas just return default value\n    if not schemas:\n        return 'default'\n\n    # Check if scrapes exists\n    schema_id = sample.get('scrapes')\n    if schema_id and schema_id in schemas:\n        return schema_id\n\n    # Check if a schema is explicitly mentioned\n    try:\n        annotations = sample['plugins']['annotations-plugin']['extracts']\n    except KeyError:\n        annotations = []\n    annotations_with_schemas = [a for a in annotations if 'schema_id' in a]\n    if annotations_with_schemas:\n        parent = sorted(annotations_with_schemas, key=container_id_key)[0]\n        return parent['schema_id']\n\n    # Look for a schema with matching fields\n    fields = set()\n    for annotation in annotations:\n        try:\n            fields.add(list(annotation['data'].values())[0]['field'])\n        except KeyError:\n            pass\n    scores = {}\n    fields = set()\n    for schema_id, schema in schemas.items():\n        scores[schema_id] = len(set(schema.get('fields')) & fields)\n    if any(score > 0 for score in scores.values()):\n        return max(scores.items(), key=itemgetter(1))[0]\n\n    # Use default if it is available\n    if 'default' in schemas:\n        return 'default'\n\n    # Use the schema with the most fields\n    schemas = sorted(\n        schemas.items(), key=lambda x: len(x[1].get('fields', {})))\n    return schemas[-1][0]\n\n\ndef add_fields(schema, annotations):\n    field_ids = set(schema['fields'].keys())\n    schema['fields'].update(_create_fields(annotations, field_ids))\n    return schema\n\n\ndef create_schema(schemas, annotations):\n    fields = _create_fields(annotations, ())\n    schema = {'name': 'schema_%s' % (len(schemas) + 1),\n              'fields': fields}\n    return schema\n\n\ndef _create_fields(annotations, field_ids):\n    field_ids = set(filter(bool, field_ids))\n    fields, field_number = {}, len(field_ids) + 1\n    for a in sorted(annotations, key=lambda a: a['id']):\n        if 'data' not in a:\n            continue\n        for aid, attribute in a['data'].items():\n            field_name = attribute['field']\n            if field_name in field_ids:\n                # Skip existing fields\n                continue\n            if field_name is None:\n                field_name = gen_predictable_id(a['id'], aid)\n                a['data'][aid]['field'] = field_name\n            field, field_number = _field(field_name, field_number)\n            fields[field_name] = field\n            field_ids.add(field_name)\n    return fields\n\n\ndef _field(field_id, num_fields):\n    field_name = field_id\n    if _ID_RE.match(field_id):\n        field_name = 'field%d' % num_fields\n        num_fields += 1\n    field = {'name': field_name, 'vary': False,\n             'required': False, 'type': 'text'}\n    return field, num_fields\n\n\ndef container_id_key(annotation):\n    container_id = annotation.get('', 'z' * 19)\n    if container_id is None:\n        return ''\n    return container_id\n\n\nclass PartialKeyDict(dict):\n    def __getitem__(self, key):\n        try:\n            return super(PartialKeyDict, self).__getitem__(key)\n        except KeyError:\n            removed_parent, key = self._remove_parent(key)\n            if len(key) == 13:\n                full_key = self._find_key(key)\n                if full_key:\n                    if removed_parent:\n                        key, full_key = self._add_parent(key, full_key)\n                    self[key] = full_key\n                    return full_key\n            six.reraise(*sys.exc_info())\n\n    def __setitem__(self, key, value):\n        removed_parent, key = self._remove_parent(key)\n        if key and len(key) not in (14, 21):\n            full_key = self._find_key(key)\n        else:\n            full_key = key\n        if len(full_key) != 14:\n            raise ValueError('ids must be of length 14')\n        if removed_parent:\n            key, full_key = self._add_parent(key, full_key)\n        if full_key:\n            super(PartialKeyDict, self).__setitem__(key, full_key)\n\n    def _find_key(self, key):\n        for k in self:\n            if k.startswith(key):\n                return k\n        return None\n\n    def _remove_parent(self, key):\n        if key.endswith('#parent'):\n            return True, key[:-len('#parent')]\n        return False, key\n\n    def _add_parent(self, key, full_key):\n        parent_fmt = u'{}#parent'.format\n        return parent_fmt(key), parent_fmt(full_key)\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/processors.py",
    "content": "import copy\n\nimport six\n\nfrom collections import defaultdict\nfrom itertools import chain\n\nfrom parsel import SelectorList\nfrom scrapely.extraction.regionextract import TextRegionDataExtractor\nfrom scrapely.htmlpage import HtmlPageParsedRegion, HtmlPageRegion\nfrom scrapely.extractors import htmlregion\nfrom scrapy.utils.spider import arg_to_iter\nfrom slybot.item import SlybotFieldDescriptor\n\nfrom w3lib.html import remove_tags\n\nfrom .utils import (cached_property, load_annotations, region_id,\n                    _DEFAULT_EXTRACTOR)\nfrom .exceptions import ItemNotValidError, MissingRequiredError\n\n\ndef _compose(f, g):\n    \"\"\"given unary functions f and g, return a function that computes f(g(x))\n    \"\"\"\n    def _exec(x):\n        ret = g(x)\n        if ret is not None:\n            ret = HtmlPageRegion(ret.htmlpage, remove_tags(ret.text_content))\n            return f(ret)\n        return None\n    return _exec\n\n\nclass ItemProcessor(object):\n    \"\"\"Processor for extracted data.\"\"\"\n    ignore = False\n    should_overwrite = True\n    selector_modes = (u'css', u'xpath')\n\n    def __init__(self, data, extractor, regions, parent_region=None,\n                 htmlpage=None):\n        self.annotation = extractor.annotation\n        self.id = self.annotation.metadata.get(u'id')\n        self.regions = arg_to_iter(regions)\n        parent_region = arg_to_iter(parent_region) if parent_region else []\n        self.parent_region = parent_region\n        self.modifiers = extractor.modifiers or {}\n        self.schema = extractor.schema or {}\n        if hasattr(htmlpage, u'htmlpage'):\n            htmlpage = htmlpage.htmlpage\n        self.htmlpage = htmlpage\n        self.annotations = list(\n            load_annotations(getattr(extractor, 'extractors', [])))\n        self.fields = self._process_fields(data)\n\n    @cached_property\n    def field(self):\n        \"\"\"Field display name.\"\"\"\n        return getattr(self.descriptor, 'description', self.name)\n\n    @cached_property\n    def descriptor(self):\n        \"\"\"Field descriptor and adaptor.\"\"\"\n        return getattr(self.schema, u'attribute_map', {}).get(self.name)\n\n    @cached_property\n    def name(self):\n        \"\"\"Field unique name.\"\"\"\n        return self.annotation.metadata.get(u'field')\n\n    @cached_property\n    def description(self):\n        \"\"\"Field display name.\"\"\"\n        return self.field\n\n    @property\n    def region_id(self):\n        return ', '.join(str(r) for r in self.regions)\n\n    @cached_property\n    def metadata(self):\n        return self.annotation.metadata\n\n    @cached_property\n    def repeated(self):\n        return self.metadata.get('repeated', False)\n\n    def attribute_query(self, metadata):\n        \"\"\"Extract attribute or content from a region.\"\"\"\n        content_field = metadata.get(u'text-content', u'content')\n        attribute = metadata.get(u'attribute', content_field)\n        if attribute == content_field:\n            return u'self::node()'\n        return u'@%s' % attribute\n\n    def _process_fields(self, data):\n        \"\"\"Convert extracted data into ItemField fields.\"\"\"\n        schema, modifiers, page = self.schema, self.modifiers, self.htmlpage\n        fields = {}\n        for field_num, (field, value) in enumerate(self._normalize_data(data)):\n            # Repeated Fields and nested items support\n            if hasattr(field, 'fields'):\n                self._add_item(field, fields)\n                continue\n            # New style annotation field\n            elif isinstance(field, dict):\n                field_id = field.get(u'id') or field_num\n            # Legacy attribute, field mapping annotation\n            else:\n                field_id = field_num\n                field = {u'field': field, u'id': field_id,\n                         u'attribute': u'content'}\n            field_cls = self._field_class(field['field'])\n            fields[field_id] = field_cls(value, field, schema, modifiers, page)\n        return fields\n\n    def _field_class(self, field):\n        if not field or field.startswith('#'):\n            return ScrapelyField\n        if field.startswith('_'):\n            return ProcessedField\n        return ItemField\n\n    def _add_item(self, item, fields=None):\n        fields = self.fields if fields is None else fields\n        child = None\n        if len(item.fields) == 1:\n            child = next(six.itervalues(item.fields))\n        if child and item.descriptor == child.extractor:\n            fields[child.id] = child\n        else:\n            fields[item.name] = item\n\n    def _normalize_data(self, data):\n        \"\"\"Normalize extracted data for conversion into ItemFields.\"\"\"\n        if isinstance(data, dict):\n            data = data.items()\n        elif data and not isinstance(data[0], (tuple, dict)):\n            data = [data]\n        for i in data:\n            if hasattr(i, u'items'):\n                i = i.items()\n            else:\n                i = (i,)\n            other_fields = []\n            for fields in chain(arg_to_iter(i), other_fields):\n                try:\n                    fields, value = fields\n                except ValueError:\n                    for field in fields:\n                        if hasattr(field, 'fields'):\n                            yield field, None\n                        elif len(field) == 2:\n                            # Queue repeated fields for normalization\n                            other_fields.append(field)\n                    continue\n                if isinstance(fields, list):\n                    # More than a one attribute for a single annotation\n                    for field in fields:\n                        yield field, value\n                elif isinstance(fields, six.string_types):\n                    # Legacy field support\n                    yield {u'field': fields, u'attribute': u'content'}, value\n                else:\n                    yield fields, value\n\n    def process(self, selector=None, include_meta=False):\n        \"\"\"Extract CSS and XPath annotations and dump item.\"\"\"\n        if selector is not None:\n            self._process_selectors(selector)\n        return self.dump(include_meta, validate=True)\n\n    def _process_selectors(self, selector):\n        selector_annotations = self._selector_annotations()\n        field_annotations = (\n            f.metadata for f in self.fields.values()\n            if hasattr(f, 'selection_mode') and\n            f.selection_mode in self.selector_modes\n        )\n        for field_id, field in self.fields.items():\n            if hasattr(field, 'fields'):\n                value = field.process(selector)\n                if not value:\n                    continue\n                meta = {'id': field.id, 'field': field.name,\n                        'attribute': 'content'}\n                self.fields[field_id] = ProcessedField(\n                    value, meta, self.schema,\n                    self.modifiers, self.htmlpage)\n        all_selector_annotations = list(\n            chain(selector_annotations, field_annotations))\n        if all_selector_annotations:\n            self._process_css_and_xpath(all_selector_annotations, selector)\n\n    def _selector_annotations(self):\n        for annotation in self.annotations:\n            meta = annotation.metadata\n            if meta.get(u'selection_mode') not in self.selector_modes:\n                continue\n            surrounds = arg_to_iter(annotation.surrounds_attribute) or []\n            tags = chain(*(a for _, a in annotation.tag_attributes))\n            for attribute in chain(surrounds, tags):\n                new_attribute = {k: v for k, v in meta.items()}\n                new_attribute.update(attribute)\n                yield new_attribute\n\n    @staticmethod\n    def get_region_id(region):\n        if hasattr(region, 'attributes'):\n            return region.attributes.get('data-tagid')\n        return region\n\n    def _process_css_and_xpath(self, annotations, selector):\n        schema, modifiers, page = self.schema, self.modifiers, self.htmlpage\n        region_ids = list(filter(bool, (region_id(r) for r in self.regions)))\n        query = ','.join(('[data-tagid=\"%s\"]' % rid for rid in region_ids))\n        parents = {e._root for e in selector.css(query)}\n        containers = ()\n        if self.parent_region:\n            if isinstance(self.parent_region, list):\n                pquery = ', '.join(\n                    '[data-tagid=\"{}\"]'.format(self.get_region_id(r))\n                    for r in self.parent_region)\n            else:\n                pquery = '[data-tagid=\"{}\"]'.format(\n                    self.get_region_id(self.parent_region))\n            containers = {e._root for e in selector.css(pquery)}\n        for i, a in enumerate(annotations, start=len(self.fields)):\n            mode = a.get(u'selection_mode')\n            query = a.get(mode if mode != 'css' else u'selector')\n            try:\n                elems = self._pick_elems(\n                    getattr(selector, mode)(query), parents, containers)\n            except ValueError:\n                continue\n            for elem in elems:\n                elem._root.attrib.pop('data-tagid', None)\n            extracted = elems.xpath(self.attribute_query(a)).extract()\n            value = list(map(six.text_type.strip, extracted))\n            aid = a.get(u'id') or i\n            if value:\n                value = [htmlregion(v) for v in arg_to_iter(value)]\n                self.fields[aid] = ItemField(value, a, schema, modifiers, page)\n            else:\n                self.fields.pop(aid, None)\n\n    def _pick_elems(self, elements, parents, containers):\n        closest_elements, closest_set = SelectorList(), set()\n        other_elements = SelectorList()\n        for element in elements:\n            try:\n                element_parents = element._root.iterancestors()\n            except AttributeError:\n                continue\n            for parent in element_parents:\n                if parent in parents:\n                    closest_elements.append(element)\n                    closest_set.add(element)\n\n                if parent in containers and element not in closest_set:\n                    break\n            else:\n                other_elements.append(element)\n        if closest_elements:\n            return closest_elements\n        elif (self.repeated and containers) or other_elements:\n            return other_elements\n        return elements\n\n    def merge(self, other):\n        \"\"\"Merge this instance with another ItemProcessor instance\n\n        Add additional regions.\n        Add additional annotations.\n        Add new fields from the other ItemProcessor.\n        Merge existing field values.\n        \"\"\"\n        for region in other.regions:\n            if region not in self.regions:\n                self.regions.append(region)\n        aids = {a.metadata.get(u'id') for a in self.annotations}\n        other_aids = {a.metadata.get(u'id') for a in other.annotations}\n        missing_ids = other_aids - aids\n        for annotation in other.annotations:\n            id_ = annotation.metadata.get(u'id')\n            if id_ and id_ in missing_ids:\n                self.annotations.append(annotation)\n        if other.name:\n            self._add_item(other)\n            return\n        for field_id, field in other.fields.items():\n            if field_id in self.fields:\n                self.fields[field_id].merge(field)\n            else:\n                self.fields[field_id] = field\n\n    def dump(self, include_meta=False, validate=False):\n        \"\"\"Dump processed fields into a new item.\"\"\"\n        try:\n            return self._dump(include_meta, validate)\n        except (MissingRequiredError, ItemNotValidError):\n            return {}\n\n    def _dump(self, include_meta=False, validate=False):\n        item = defaultdict(list)\n        meta = defaultdict(dict)\n        schema_id = getattr(self.schema, u'id', None)\n        for field in self.fields.values():\n            value = field.dump()\n            if not value or field.ignore:\n                continue\n            if field.should_overwrite:\n                item[field.field] = value\n            else:\n                item[field.field].extend(value)\n            if include_meta:\n                meta[field.id].update(dict(schema=schema_id, **field.metadata))\n        if validate:\n            self._validate(item)\n\n        # Rename fields to their human readable names\n        item = self._item_with_names(item)\n        if include_meta:\n            item[u'_meta'] = meta\n        if u'_type' not in item:\n            _type = getattr(self.schema, u'description', schema_id)\n            if _type:\n                item[u'_type'] = _type\n        return item\n\n    def _validate(self, item):\n        item_fields = self._item_with_names(item, u'name')\n        # Bring keys from nested items into primary item for required check\n        for key, value in list(item_fields.items()):\n            if isinstance(value, dict):\n                for sub_key in value:\n                    item_fields[sub_key] = True\n        # Check if a pre prcessed item has been provided\n        if u'_type' in item_fields:\n            return item_fields\n        if (hasattr(self.schema, u'_item_validates') and\n                not self.schema._item_validates(item_fields)):\n            raise ItemNotValidError\n        if all(fname[0] == '_' or fname == 'url' for fname in item_fields):\n            raise ItemNotValidError\n\n    def _item_with_names(self, item, attribute=u'description'):\n        item_dict = {}\n        for field, value in item.items():\n            if not (field and value):\n                continue\n            if hasattr(field, attribute):\n                key = getattr(field, attribute)\n                if getattr(field, 'should_overwrite', False):\n                    item_dict[key] = value\n                else:\n                    item_dict[key] = [\n                        v for v in chain(arg_to_iter(item_dict.get(key, [])),\n                                         arg_to_iter(value))\n                    ]\n            else:\n                item_dict[field] = value\n        return item_dict\n\n    def __getitem__(self, key):\n        values = []\n        for field in self.fields.values():\n            if hasattr(field.field, u'get'):\n                field_name = field.field.get(u'field')\n            else:\n                field_name = field.field\n            if field_name == key:\n                values.extend(field.dump())\n        return values\n\n    def __bool__(self):\n        return bool(self.dump())\n\n    __nonzero__ = __bool__\n\n    def __len__(self):\n        return len(self.fields)\n\n    def __hash__(self):\n        return hash(str(self.id) + str(self.region_id))\n\n    def __setitem__(self, key, value):\n        self.fields[key] = ProcessedField(value, {u'id': key, u'field': key,\n                                                  u'attribute': u'content'})\n\n    def __str__(self):\n        return u'%s, %s' % (self.id, self.region_id)\n\n    def __repr__(self):\n        return u'%s(%s, %s)' % (self.__class__.__name__, str(self),\n                                repr(self.fields))\n\n\nclass ItemField(object):\n    should_overwrite = False\n\n    def __init__(self, value, meta, schema=None, modifiers=None,\n                 htmlpage=None):\n        self.htmlpage = htmlpage\n        self.value = value\n        self._meta = meta\n        self.id = meta.get(u'id')\n        self._field = meta[u'field']\n        self.attribute = meta[u'attribute']\n        self.selection_mode = meta.get(u'selection_mode', u'auto')\n        self.extractor, self.adaptors = self._load_extractors(\n            self._field, schema, modifiers)\n\n    @cached_property\n    def field(self):\n        return self\n\n    @cached_property\n    def ignore(self):\n        if not self._field:\n            return True\n        return False\n\n    @cached_property\n    def description(self):\n        \"\"\"Field display name.\"\"\"\n        return getattr(self.extractor, u'description', self._field)\n\n    @cached_property\n    def name(self):\n        \"\"\"Field unique name.\"\"\"\n        return getattr(self.extractor, u'name', self._field)\n\n    @cached_property\n    def metadata(self):\n        meta = {k: v for k, v in self._meta.items() if k not in\n                (u'name', u'value', u'schema')}\n        meta['field'], meta['value'], meta['processed'] = (\n            self._field, self.value, self.dump())\n        return meta\n\n    @cached_property\n    def required(self):\n        return self._meta.get('required') or False\n\n    def dump(self):\n        \"\"\"Process and adapt extracted data for field.\"\"\"\n        values = self._process()\n        return self._adapt(values)\n\n    def merge(self, other):\n        try:\n            self.value.extend(other.value)\n        except AttributeError:\n            self.value = other.value\n\n    def _load_extractors(self, field, schema, modifiers):\n        field, _meta = self._field, self._meta\n        extractors = []\n        try:\n            field_extraction = schema.attribute_map.get(field)\n        except AttributeError:\n            field_extraction = None\n        if field_extraction is None:\n            field_extraction = SlybotFieldDescriptor(field, field,\n                                                     _DEFAULT_EXTRACTOR)\n        if u'pre_text' in _meta or u'post_text' in _meta:\n            text_extractor = TextRegionDataExtractor(\n                _meta.get(u'pre_text', u''),\n                _meta.get(u'post_text', u''))\n            field_extraction = copy.deepcopy(field_extraction)\n            field_extraction.extractor = _compose(\n                field_extraction.extractor, text_extractor.extract)\n        extractors = _meta.get(u'extractors', [])\n        if isinstance(extractors, dict):\n            extractors = extractors.get(field, [])\n        adaptors = []\n        for extractor in extractors:\n            if extractor in modifiers:\n                adaptors.append(modifiers[extractor])\n        return field_extraction, adaptors\n\n    def _process(self):\n        values = []\n        for value in arg_to_iter(self.value):\n            if (isinstance(value, (HtmlPageParsedRegion, HtmlPageRegion)) and\n                    hasattr(self.extractor, u'extractor')):\n                value = self.extractor.extractor(value)\n            if value:\n                values.append(value)\n        if hasattr(self.extractor, u'adapt'):\n            values = [self.extractor.adapt(x, self.htmlpage) for x in values\n                      if x and not isinstance(x, (dict, ItemProcessor))]\n        else:\n            values = list(filter(bool, values))\n        return values\n\n    def _adapt(self, values):\n        for adaptor in self.adaptors:\n            if values:\n                values = [adaptor(v, self.htmlpage) for v in values if v]\n        if self.required and not values:\n            raise MissingRequiredError\n        return values\n\n    def __hash__(self):\n        return hash(str(self.id) + str(self._field))\n\n    def __str__(self):\n        return u'%s: %s | id=%s' % (self.description, self.dump(), self.id)\n\n    def __repr__(self):\n        return u'%s(%s, field=%s, extractor=%s, adaptors=%s)' % (\n            self.__class__.__name__, str(self), self._field, self.extractor,\n            self.adaptors)\n\n\nclass ProcessedField(ItemField):\n    \"\"\"Field without any transformations.\"\"\"\n    should_overwrite = True\n\n    @cached_property\n    def field(self):\n        return self._field\n\n    def dump(self):\n        return self.value\n\n\nclass ScrapelyField(ItemField):\n    \"\"\"Field used for guiding extraction but not used for extracting data.\"\"\"\n    ignore = True\n"
  },
  {
    "path": "slybot/slybot/plugins/scrapely_annotations/utils.py",
    "content": "\"\"\"\nhtml page utils\n\"\"\"\nfrom __future__ import absolute_import\n\nfrom scrapy.utils.spider import arg_to_iter\nfrom slybot.fieldtypes import FieldTypeManager\n\n\n_DEFAULT_EXTRACTOR = FieldTypeManager().type_processor_class(u'raw html')()\n\n\nclass cached_property(object):\n    \"\"\"\n    A property that is only computed once per instance and then replaces itself\n    with an ordinary attribute. Deleting the attribute resets the property.\n    Source: https://github.com/bottlepy/bottle/blob/18ea724b6f658943606237e01febc242f7a56260/bottle.py#L162-L173\n    \"\"\"\n\n    def __init__(self, func):\n        self.__doc__ = getattr(func, u'__doc__')\n        self.func = func\n\n    def __get__(self, obj, cls):\n        if obj is None:\n            return self\n        value = obj.__dict__[self.func.__name__] = self.func(obj)\n        return value\n\n\ndef region_id(region, attribute_name='data-tagid'):\n    try:\n        return region.attributes.get(attribute_name, -1)\n    except AttributeError:\n        return -1\n\n\ndef load_annotations(extractor):\n    for e in arg_to_iter(extractor):\n        if hasattr(e, 'annotation') and not hasattr(e, u'extractors'):\n            meta = e.annotation.metadata\n            if u'attribute' not in meta:\n                attribute = [a for a in e.annotation.tag_attributes]\n                content = meta.get(u'text-content', u'content')\n                attribute, ann = (attribute or [(content, None)])[0]\n                if not e.annotation.surrounds_attribute:\n                    meta['text-content'] = '#portia-content'\n                meta[u'attribute'] = attribute\n                if ann is not None:\n                    if isinstance(ann, list):\n                        ann = ann[0].get(u'field')\n                    meta[u'field'] = ann\n            if not meta.get(u'field'):\n                attr = e.annotation.surrounds_attribute\n                if isinstance(attr, list):\n                    attr = attr[0].get(u'field')\n                meta[u'field'] = attr\n            yield e.annotation\n        if hasattr(e, u'extractors') and not hasattr(e, u'schema'):\n            for sub_e in load_annotations(e.extractors):\n                yield sub_e\n"
  },
  {
    "path": "slybot/slybot/plugins/selectors/__init__.py",
    "content": "\nclass Selectors(object):\n    def setup_bot(self, settings, spider, spec, items, extractors, logger):\n        self.logger = logger\n        self.selectors = {} # { template_id: { field_name: {..} }\n\n        for template in spec['templates']:\n            template_id = template.get('page_id')\n            self.selectors[template_id] = template.get('selectors', {})\n\n    def process_item(self, item, response):\n        template_id = item.get('_template', '')\n        selectors = self.selectors.get(template_id)\n        if not selectors:\n            return\n\n        for field, selector_data in selectors.items():\n            selector = selector_data['selector']\n            selector_type = selector_data['type']\n\n            if selector_type == 'css':\n                result = response.css(selector).xpath('./text()').extract()\n            elif selector_type == 'xpath':\n                result = response.xpath(selector).extract()\n            else:\n                msg = 'Selector type not implemented: {}'.format(selector_type)\n                raise Exception(msg)\n\n            item[field] = ([item[field]] + result) if field in item else result\n\n__all__ = [Selectors]\n"
  },
  {
    "path": "slybot/slybot/settings.py",
    "content": "from __future__ import absolute_import\nSPIDER_LOADER_CLASS = 'slybot.spidermanager.SlybotSpiderManager'\nEXTENSIONS = {'slybot.closespider.SlybotCloseSpider': 1}\nITEM_PIPELINES = {\n    'slybot.dupefilter.DupeFilterPipeline': 1,\n    'slybot.meta.DropMetaPipeline': 2\n}\nSPIDER_MIDDLEWARES = {'slybot.spiderlets.SpiderletsMiddleware': 999}  # as close as possible to spider output\nDOWNLOADER_MIDDLEWARES = {\n    'slybot.pageactions.PageActionsMiddleware': 700,\n    'scrapy_splash.middleware.SplashCookiesMiddleware': 723,\n    'slybot.splash.SlybotJsMiddleware': 725\n}\nPLUGINS = [\n    'slybot.plugins.scrapely_annotations.Annotations',\n    'slybot.plugins.selectors.Selectors'\n]\nSLYDUPEFILTER_ENABLED = True\nSLYDROPMETA_ENABLED = False\nDUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'\nPROJECT_DIR = 'slybot-project'\nFEED_EXPORTERS = {\n    'csv': 'slybot.exporter.SlybotCSVItemExporter',\n}\nCSV_EXPORT_FIELDS = None\n\ntry:\n    from .local_slybot_settings import *\nexcept ImportError:\n    pass\n"
  },
  {
    "path": "slybot/slybot/spider.py",
    "content": "from __future__ import absolute_import\n\nimport itertools\nimport json\n\nfrom copy import deepcopy\n\nfrom loginform import fill_login_form\n\nfrom scrapy.http import FormRequest, HtmlResponse, Request, XmlResponse\nfrom scrapy.spiders.sitemap import SitemapSpider\nfrom scrapy.utils.spider import arg_to_iter\n\nimport six\nfrom six.moves.urllib_parse import urlparse\n\nfrom slybot.generic_form import GenericForm\nfrom slybot.linkextractor import create_linkextractor_from_specs\nfrom slybot.starturls import (\n    FragmentGenerator, FeedGenerator, IdentityGenerator, StartUrlCollection,\n    UrlGenerator\n)\nfrom slybot.splash import DEFAULT_LUA_SOURCE\nfrom slybot.utils import (\n    include_exclude_filter, IndexedDict, iter_unique_scheme_hostname,\n    load_plugin_names, load_plugins, content_type\n)\n\ntry:\n    from scrapy_splash.response import SplashJsonResponse\n    html_responses = (HtmlResponse, SplashJsonResponse)\nexcept ImportError:\n    html_responses = (HtmlResponse,)\nfrom w3lib.http import basic_auth_header\n\nSTRING_KEYS = ['start_urls', 'exclude_patterns', 'follow_patterns',\n               'allowed_domains', 'js_enabled', 'js_enable_patterns',\n               'js_disable_patterns']\n\n\nclass IblSpider(SitemapSpider):\n    def __init__(self, name, spec, item_schemas, all_extractors, settings=None,\n                 **kw):\n        self.start_url_generators = {\n            'start_urls': IdentityGenerator(),\n            'generated_urls': UrlGenerator(settings, kw),\n\n            'url': IdentityGenerator(),\n            'feed': FeedGenerator(self.parse),\n            'generated': FragmentGenerator(),\n        }\n        self.generic_form = GenericForm(**kw)\n        super(IblSpider, self).__init__(name, **kw)\n        spec = deepcopy(spec)\n        self._add_spider_args_to_spec(spec, kw)\n        self._configure_js(spec, settings)\n        self.plugins = self._configure_plugins(\n            settings, spec, item_schemas, all_extractors)\n\n        self.login_requests, self.form_requests = [], []\n        self._start_urls = self._create_start_urls(spec)\n        self._start_requests = self._create_start_requests(spec)\n        self._create_init_requests(spec)\n        self._add_allowed_domains(spec)\n        self.page_actions = spec.get('page_actions', [])\n\n    def _add_spider_args_to_spec(self, spec, args):\n        for key, val in args.items():\n            if isinstance(val, six.string_types) and key in STRING_KEYS:\n                val = val.splitlines()\n            spec[key] = val\n\n    def _create_start_urls(self, spec):\n        url_type = spec.get('start_urls_type', 'start_urls')\n        return StartUrlCollection(\n            arg_to_iter(spec[url_type]),\n            self.start_url_generators,\n        )\n\n    def _create_start_requests(self, spec):\n        init_requests = spec.get('init_requests', [])\n        for rdata in init_requests:\n            if rdata[\"type\"] == \"start\":\n                yield self._create_start_request_from_specs(rdata)\n\n        for start_url in self._start_urls:\n            if not isinstance(start_url, Request):\n                start_url = Request(start_url, callback=self.parse,\n                                    dont_filter=True)\n            yield self._add_splash_meta(start_url)\n\n    def _create_init_requests(self, spec):\n        init_requests = spec.get('init_requests', [])\n        for rdata in init_requests:\n            if rdata[\"type\"] == \"login\":\n                request = Request(url=rdata.pop(\"loginurl\"), meta=rdata,\n                                  callback=self.parse_login_page,\n                                  dont_filter=True)\n                self._add_splash_meta(request)\n                self.login_requests.append(request)\n            elif rdata[\"type\"] == \"form\":\n                self.form_requests.append(\n                    self.get_generic_form_start_request(rdata)\n                )\n\n    def _add_allowed_domains(self, spec):\n        self.allowed_domains = spec.get('allowed_domains', [])\n        if self.allowed_domains is not None and not self.allowed_domains:\n            self.allowed_domains = self._get_allowed_domains(spec)\n\n    def parse_login_page(self, response):\n        username = response.request.meta[\"username\"]\n        password = response.request.meta[\"password\"]\n        args, url, method = fill_login_form(response.url, response.body,\n                                            username, password)\n        return FormRequest(url, method=method, formdata=args,\n                           callback=self.after_login, dont_filter=True)\n\n    def after_login(self, response):\n        for result in self.parse(response):\n            yield result\n        for req in self._start_requests:\n            yield req\n\n    def get_generic_form_start_request(self, form_descriptor):\n        file_fields = list(self.generic_form.get_url_field(form_descriptor))\n        if file_fields:\n            (field_index, field_descriptor) = file_fields.pop(0)\n            form_descriptor['field_index'] = field_index\n            return FormRequest(self.generic_form.get_value(field_descriptor),\n                               meta=form_descriptor,\n                               callback=self.parse_field_url_page,\n                               dont_filter=True)\n        else:\n            return Request(url=form_descriptor.pop(\"form_url\"),\n                           meta=form_descriptor, callback=self.parse_form_page,\n                           dont_filter=True)\n\n    def parse_field_url_page(self, response):\n        form_descriptor = response.request.meta\n        field_index = form_descriptor['field_index']\n        field_descriptor = form_descriptor['fields'][field_index]\n        self.generic_form.set_values_url_field(field_descriptor, response.text)\n        yield self.get_generic_form_start_request(form_descriptor)\n\n    def parse_form_page(self, response):\n        fill_form = self.generic_form.fill_generic_form\n        try:\n            for (args, url, method) in fill_form(response.url, response.body,\n                                                 response.request.meta):\n                yield FormRequest(url, method=method, formdata=args,\n                                  callback=self.after_form_page,\n                                  dont_filter=True)\n        except Exception as e:\n            self.logger.warning(str(e))\n        for req in self._start_requests:\n            yield req\n\n    def after_form_page(self, response):\n        for result in self.parse(response):\n            yield result\n\n    def _get_allowed_domains(self, spec):\n        urls = [x['url'] for x in spec['templates']]\n        urls += [x['url'] for x in spec.get('init_requests', [])\n                 if x['type'] == 'start']\n        urls += self._start_urls.allowed_domains\n        return [domain for scheme, domain in iter_unique_scheme_hostname(urls)]\n\n    def start_requests(self):\n        start_requests = []\n        if self.login_requests:\n            start_requests = self.login_requests\n        elif self.form_requests:\n            start_requests = self.form_requests\n        else:\n            start_requests = self._start_requests\n        for req in start_requests:\n            yield req\n\n    def _create_start_request_from_specs(self, info):\n        url = info[\"url\"]\n        lspecs = info.get(\"link_extractor\")\n        if lspecs:\n            linkextractor = create_linkextractor_from_specs(lspecs)\n\n            def _callback(spider, response):\n                for link in linkextractor.links_to_follow(response):\n                    request = Request(url=link.url, callback=spider.parse)\n                    yield self._add_splash_meta(request)\n            request = Request(url=url, callback=_callback)\n            return self._add_splash_meta(request)\n        request = Request(url=url, callback=self.parse)\n        return self._add_splash_meta(request)\n\n    def parse(self, response):\n        \"\"\"Main handler for all downloaded responses\"\"\"\n        request = response.request\n        if (request and request.method == 'POST' and\n                urlparse(request.url).hostname == self.SPLASH_HOST):\n            url = json.loads(request.body.decode(request.encoding)).get('url')\n            if url:\n                response._url = url\n        _type = content_type(response)\n        if (isinstance(response, XmlResponse) or\n                response.url.endswith(('.xml', '.xml.gz')) or\n                'xml' in _type.subtype):\n            sitemap_body = self._get_sitemap_body(response)\n            if sitemap_body:\n                response._set_body(self._get_sitemap_body(response))\n            return self.handle_xml(response)\n        if isinstance(response, html_responses):\n            return self.handle_html(response)\n        self.logger.debug(\n            \"Ignoring page with content-type=%r: %s\" % (\n                response.headers.get('Content-Type', ''), response.url)\n        )\n        return []\n\n    def _configure_plugins(self, settings, spec, schemas, extractors):\n        plugins = IndexedDict()\n        for plugin_class, plugin_name in zip(load_plugins(settings),\n                                             load_plugin_names(settings)):\n            instance = plugin_class()\n            instance.setup_bot(settings, self, spec, schemas, extractors,\n                               self.logger)\n            plugins[plugin_name] = instance\n        return plugins\n\n    def _plugin_hook(self, name, *args):\n        results = []\n        for plugin in self.plugins.values():\n            if hasattr(plugin, name):\n                results.append(getattr(plugin, name)(*args))\n        return results\n\n    def _handle(self, hook, response, *extrasrgs):\n        generators = self._plugin_hook(hook, response, *extrasrgs)\n        for item_or_request in itertools.chain(*generators):\n            if isinstance(item_or_request, Request):\n                self._plugin_hook('process_request', item_or_request, response)\n            else:\n                self._plugin_hook('process_item', item_or_request, response)\n            if isinstance(item_or_request, Request):\n                item_or_request = self._add_splash_meta(item_or_request)\n            yield item_or_request\n\n    def handle_xml(self, response):\n        return self._handle('handle_xml', response, set([]))\n\n    def handle_html(self, response):\n        return self._handle('handle_html', response)\n\n    def _configure_js(self, spec, settings):\n        self.js_enabled = False\n        self.SPLASH_HOST = None\n        if settings.get('SPLASH_URL'):\n            self.SPLASH_HOST = urlparse(settings.get('SPLASH_URL')).hostname\n            self.js_enabled = spec.get('js_enabled', False)\n        if self.js_enabled and (settings.get('SPLASH_PASS') is not None or\n                                settings.get('SPLASH_USER') is not None):\n            self.splash_auth = basic_auth_header(\n                settings.get('SPLASH_USER', ''),\n                settings.get('SPLASH_PASS', ''))\n        self.splash_wait = settings.getint('SPLASH_WAIT', 5)\n        self.splash_timeout = settings.getint('SPLASH_TIMEOUT', 30)\n        self.splash_js_source = settings.get(\n            'SPLASH_JS_SOURCE', 'function(){}')\n        self.splash_lua_source = settings.get(\n            'SPLASH_LUA_SOURCE', DEFAULT_LUA_SOURCE)\n        self._filter_js_urls = self._build_js_url_filter(spec)\n\n    def _build_js_url_filter(self, spec):\n        if not self.js_enabled:\n            return lambda x: None\n        enable_patterns = spec.get('js_enable_patterns')\n        disable_patterns = spec.get('js_disable_patterns')\n        return include_exclude_filter(enable_patterns, disable_patterns)\n\n    def _add_splash_meta(self, request):\n        if self.js_enabled and self._filter_js_urls(request.url):\n            cleaned_url = urlparse(request.url)._replace(params='', query='',\n                                                         fragment='').geturl()\n            request.meta['splash'] = {\n                'endpoint': 'execute',\n                'session_id': '{}-{}'.format(self.name, id(self)),\n                'args': {\n                    'wait': self.splash_wait,\n                    'timeout': self.splash_timeout,\n                    'js_source': self.splash_js_source,\n                    'lua_source': self.splash_lua_source,\n                    'images': 0,\n                    'url': request.url,\n                    'baseurl': cleaned_url\n                }\n            }\n        return request\n"
  },
  {
    "path": "slybot/slybot/spiderlets.py",
    "content": "\"\"\"\nSpider middleware for AS for completing the work made by AS with a \"spiderlet\" code\n\n\"\"\"\nfrom __future__ import absolute_import\nimport pkgutil, inspect\n\nfrom scrapy.xlib.pydispatch import dispatcher\nfrom scrapy import signals\nfrom scrapy.exceptions import NotConfigured\nfrom scrapy.http import Request\n\n\nclass DefaultSpiderlet(object):\n    name = None\n\n    def __init__(self, spider):\n        self.spider = spider\n\n    def process_request(self, request, response):\n        return request\n\n    def process_item(self, item, response):\n        return item\n\n    def process_start_request(self, request):\n        return request\n\n    def parse_login_page(self, response):\n        return self.spider.parse_login_page(response)\n\n\ndef list_spiderlets(spiderlets_module_path):\n    spiderlets_module = __import__(spiderlets_module_path, {}, {}, [''])\n    seen_classes = set()\n    for _, mname, _ in pkgutil.iter_modules(spiderlets_module.__path__):\n        module = __import__(\".\".join([spiderlets_module_path, mname]), {}, {}, [''])\n        for cls in [c for c in vars(module).values() if inspect.isclass(c)]:\n            if cls in seen_classes:\n                continue\n            seen_classes.add(cls)\n            name = getattr(cls, 'name', None)\n            if name:\n                yield cls\n\n\ndef _load_spiderlet(spiderlets_module_path, spider):\n    for cls in list_spiderlets(spiderlets_module_path):\n        if cls.name == spider.name:\n            class _spiderlet_cls(cls, DefaultSpiderlet):\n                pass\n            spider.log(\"SpiderletMiddleware: loaded %s\" % _spiderlet_cls.name)\n            return _spiderlet_cls(spider)\n    return DefaultSpiderlet(spider)\n\n\nclass SpiderletsMiddleware(object):\n    @classmethod\n    def from_crawler(cls, crawler):\n        return cls(crawler.settings)\n\n    def __init__(self, settings):\n        self.annotating = \"annotating\" in settings.getlist('SHUB_JOB_TAGS')\n        self.spiderlets_module_path = settings[\"SPIDERLETS_MODULE\"]\n        if not self.spiderlets_module_path:\n            raise NotConfigured\n        dispatcher.connect(self.spider_opened, signals.spider_opened)\n\n    def spider_opened(self, spider):\n        self.spiderlet = _load_spiderlet(self.spiderlets_module_path, spider)\n\n    def process_spider_output(self, response, result, spider):\n        for item_or_request in result:\n            if isinstance(item_or_request, Request):\n                yield self.spiderlet.process_request(item_or_request, response)\n            else:\n                yield self.spiderlet.process_item(item_or_request, response)\n\n    def process_start_requests(self, start_requests, spider):\n        for request in start_requests:\n            if request.callback == spider.parse_login_page:\n                request.callback = self.spiderlet.parse_login_page\n            yield self.spiderlet.process_start_request(request)\n"
  },
  {
    "path": "slybot/slybot/spidermanager.py",
    "content": "from __future__ import absolute_import\nimport tempfile\nimport shutil\nimport atexit\nimport logging\n\nfrom six.moves.urllib.parse import urlparse\n\nimport slybot\n\nfrom zipfile import is_zipfile, ZipFile\n\nfrom zope.interface import implementer\nfrom scrapy.interfaces import ISpiderLoader\nfrom scrapy.utils.misc import load_object\nfrom scrapy.utils.project import get_project_settings\n\nfrom slybot.spider import IblSpider\nfrom slybot.utils import open_project_from_dir, load_plugins\n\n\n@implementer(ISpiderLoader)\nclass SlybotSpiderManager(object):\n\n    def __init__(self, datadir, spider_cls=None, settings=None, **kwargs):\n        logging.info('Slybot %s Spider', slybot.__version__)\n        if is_zipfile(datadir):\n            tempdir = tempfile.mkdtemp(prefix='slybot-')\n            ZipFile(datadir).extractall(tempdir)\n            atexit.register(shutil.rmtree, tempdir)\n            datadir = tempdir\n\n        if settings is None:\n            settings = get_project_settings()\n        self.spider_cls = load_object(spider_cls) if spider_cls else IblSpider\n        self._specs = open_project_from_dir(datadir)\n        settings = settings.copy()\n        settings.frozen = False\n        settings.set('LOADED_PLUGINS', load_plugins(settings))\n        self.settings = settings\n\n    @classmethod\n    def from_crawler(cls, crawler):\n        # backwards compatibility with Scrapy < 0.25\n        return cls.from_settings(crawler.settings)\n\n    @classmethod\n    def from_settings(cls, settings):\n        datadir = settings['PROJECT_DIR']\n        spider_cls = settings['SLYBOT_SPIDER_CLASS']\n        return cls(datadir, spider_cls, settings=settings)\n\n    def load(self, spider_name):\n        spec = self._specs[\"spiders\"][spider_name]\n        items = self._specs[\"items\"]\n        extractors = self._specs[\"extractors\"]\n\n        class SlybotSpider(self.spider_cls):\n            def __init__(self_, **kwargs):\n                super(SlybotSpider, self_).__init__(spider_name, spec, items,\n                                                    extractors, self.settings,\n                                                    **kwargs)\n\n        return SlybotSpider\n\n    def create(self, name, **args):\n        # backwards compatibility with Scrapy < 0.25\n        spec = self._specs[\"spiders\"][name]\n        items = self._specs[\"items\"]\n        extractors = self._specs[\"extractors\"]\n        return self.spider_cls(name, spec, items, extractors, self.settings,\n                               **args)\n\n    def list(self):\n        return list(self._specs[\"spiders\"].keys())\n\n    def find_by_request(self, request):\n        parsed = urlparse(request.url)\n        if parsed.hostname in self._specs['spiders'].spider_names:\n            return [parsed.hostname]\n        # TODO: Look at start urls and samples\n\n\nclass ZipfileSlybotSpiderManager(SlybotSpiderManager):\n\n    def __init__(self, datadir, zipfile=None, spider_cls=None, settings=None,\n                 **kwargs):\n        if zipfile:\n            datadir = zipfile\n        super(ZipfileSlybotSpiderManager, self).__init__(datadir, spider_cls,\n                                                         settings=settings)\n\n    @classmethod\n    def from_settings(cls, settings):\n        datadir = settings['PROJECT_DIR']\n        zipfile = settings['PROJECT_ZIPFILE']\n        spider_cls = settings['SLYBOT_SPIDER_CLASS']\n        return cls(datadir, zipfile, spider_cls, settings=settings)\n"
  },
  {
    "path": "slybot/slybot/splash.py",
    "content": "from scrapy_splash.middleware import SplashMiddleware\nimport os\n\n\nDEFAULT_LUA_SOURCE = u'''\nfunction main(splash)\n  splash:init_cookies(splash.args.cookies or {})\n  assert(splash:go(splash.args.url))\n  assert(splash:wait(splash.args.wait))\n  splash:runjs(splash.args.js_source)\n  assert(splash:wait(0.5))\n  return {\n    html = splash:html(),\n    cookies = splash:get_cookies(),\n  }\nend'''\njs_file = os.path.join(os.path.dirname(__file__), 'splash-script-combined.js')\njs_source = \"\"\nif os.path.exists(js_file):\n    with open(js_file, 'r') as f:\n        js_source = f.read()\n\n\nclass SlybotJsMiddleware(SplashMiddleware):\n    def process_request(self, request, spider):\n        splash_opts = request.meta.get('splash')\n        if splash_opts and 'args' in splash_opts:\n            args = splash_opts['args']\n            args['js_source'] = \"%s;\\n%s\" % (js_source, args.get('js_source', ''))\n\n        req = super(SlybotJsMiddleware, self).process_request(request, spider)\n        splash_auth = getattr(spider, 'splash_auth', None)\n        if splash_auth and 'Authorization' not in request.headers:\n            request.headers['Authorization'] = splash_auth\n        return req\n"
  },
  {
    "path": "slybot/slybot/starturls/__init__.py",
    "content": "from collections import OrderedDict as ODict\nfrom itertools import chain, product\n\nfrom scrapy.utils.spider import arg_to_iter\n\nimport six\nfrom six.moves.urllib_parse import urlparse\n\nfrom .feed_generator import FeedGenerator\nfrom .fragment_generator import FragmentGenerator\nfrom .generated_url import GeneratedUrl\nfrom .generator import IdentityGenerator, UrlGenerator\n\n\nclass StartUrlCollection(object):\n    def __init__(self, start_urls, generators=None):\n        self.generators = generators or []\n        self.start_urls = [self._from_type(url) for url in start_urls]\n\n    def __iter__(self):\n        generated = (self._generate_urls(url) for url in self.start_urls)\n        for url in chain(*(arg_to_iter(g) for g in generated)):\n            yield url\n\n    def uniq(self):\n        return list(ODict([(s.key, s.spec) for s in self.start_urls]).values())\n\n    @property\n    def allowed_domains(self):\n        domains = [start_url.allowed_domains for start_url in self.start_urls]\n        return list(set(chain(*domains)))\n\n    def normalize(self):\n        return [start_url.normalized for start_url in self.start_urls]\n\n    def _generate_urls(self, start_url):\n        generator = self.generators[start_url.generator_type]\n        return generator(start_url.generator_value)\n\n    def _from_type(self, start_url):\n        if isinstance(start_url, six.string_types):\n            return StringUrl(start_url)\n        if start_url.get('paths') or start_url.get('template'):\n            return GeneratedUrl(start_url)\n        return StartUrl(start_url, self.generators)\n\n\nclass StartUrl(object):\n    def __init__(self, spec, generators):\n        self.spec = spec\n        self.generators = generators\n        self.generator_type = spec['type']\n        self.generator_value = self.spec if self._has_fragments else self.spec['url']\n\n    @property\n    def key(self):\n        fragments = self.spec.get('fragments', [])\n        fragment_values = [fragment['value'] for fragment in fragments]\n        return self.spec['url'] + ''.join(fragment_values)\n\n    @property\n    def allowed_domains(self):\n        if self._has_fragments:\n            return self._find_fragment_domains()\n        return [self.spec['url']]\n\n    @property\n    def normalized(self):\n        return self.spec\n\n    def _find_fragment_domains(self):\n        generator = self.generators[self.generator_type]\n        fragment_lists = list(generator.process_fragments(self.spec))\n\n        while len(fragment_lists) > 0:\n            fragment_list = fragment_lists.pop(0)\n\n            if all(self._has_domain(fragment) for fragment in fragment_list):\n                return fragment_list\n            if len(fragment_lists) == 0:\n                return []\n\n            augmented_first_fragments = product(fragment_list, fragment_lists[0])\n            fragment_lists[0] = self._join_fragments(augmented_first_fragments)\n        return []\n\n    def _join_fragments(self, fragments):\n        return [''.join([f, g]) for (f, g) in fragments]\n\n    def _has_domain(self, url):\n        parsed_url = urlparse(url)\n        methods = ['path', 'params', 'query', 'fragment']\n        return any(getattr(parsed_url, method) != '' for method in methods)\n\n    @property\n    def _has_fragments(self):\n        return self.spec.get('fragments')\n\n\nclass StringUrl(object):\n    def __init__(self, spec):\n        self.key = spec\n        self.spec = spec\n        self.generator_value = spec\n        self.generator_type = 'start_urls'\n\n    @property\n    def allowed_domains(self):\n        return [self.spec]\n\n    @property\n    def normalized(self):\n        return {'url': self.spec, 'type': 'url'}\n"
  },
  {
    "path": "slybot/slybot/starturls/feed_generator.py",
    "content": "import re\nfrom scrapy import Request\n_NEWLINE_RE = re.compile('[\\r\\n]')\n\n\nclass FeedGenerator(object):\n    def __init__(self, callback):\n        self.callback = callback\n\n    def __call__(self, url):\n        return Request(url, callback=self.parse_urls)\n\n    def parse_urls(self, response):\n        newline_urls = _NEWLINE_RE.split(response.text)\n        urls = [url for url in newline_urls if url]\n        for url in urls:\n            yield Request(url, callback=self.callback)\n"
  },
  {
    "path": "slybot/slybot/starturls/fragment_generator.py",
    "content": "from datetime import datetime\nfrom itertools import product\n\nimport six\n\n\nclass FragmentGenerator(object):\n    def _process_fixed(self, fragment):\n        return [fragment]\n\n    def _process_list(self, fragment):\n        return fragment.split(' ')\n\n    def _process_date(self, fragment):\n        now = datetime.now()\n        return [now.strftime(fragment)]\n\n    def _process_range(self, fragment):\n        a, b = fragment.split('-')\n\n        if a.isalpha() and b.isalpha():\n            a, b = [ord(w.lower()) for w in [a, b]]\n            return (chr(w) for w in six.moves.range(a, b + 1))\n        else:\n            a, b = int(a), int(b)\n            return (str(i) for i in six.moves.range(a, b + 1))\n\n    def _process_fragment(self, fragment):\n        processor = getattr(self, '_process_{}'.format(fragment['type']))\n        return processor(fragment['value'])\n\n    def process_fragments(self, spec):\n        return map(self._process_fragment, spec['fragments'])\n\n    def __call__(self, spec):\n        generated = product(*self.process_fragments(spec))\n        for fragment_list in generated:\n            yield ''.join(fragment_list)\n"
  },
  {
    "path": "slybot/slybot/starturls/generated_url.py",
    "content": "from itertools import chain\n\n\nclass GeneratedUrl(object):\n    def __init__(self, spec):\n        self.key = spec\n        self.spec = spec\n        self.generator_value = spec\n        self.generator_type = 'generated_urls'\n\n    @property\n    def allowed_domains(self):\n        return [self.spec['template']]\n\n    @property\n    def normalized(self):\n        return {\n            'url': self.normalized_url,\n            'type': 'generated',\n            'fragments': self.normalized_fragments,\n        }\n\n    @property\n    def normalized_url(self):\n        paths = [normalize_url_path(path) for path in self.spec['paths']]\n        try:\n            base_url = self.spec['template'].format(*paths)\n        except IndexError:\n            # Fix templates that have more sections than path pieces\n            template = self.spec['template']\n            while '{}' in template:\n                template = template.rsplit('{}', 1)[0]\n                try:\n                    base_url = template.format(*paths)\n                    break\n                except IndexError:\n                    continue\n\n        query_params = [normalize_url_query_param(path, is_first=(i == 0))\n                        for i, path in enumerate(self._query_params)]\n        return base_url + ''.join(query_params)\n\n    @property\n    def normalized_fragments(self):\n        fixed, path = self._fixed_fragments, self._path_fragments\n        fragments = list(zip(fixed, path))\n\n        # Missed last fixed fragment when using zip\n        if len(fixed) == len(path) + 1:\n            fragments.append([fixed[-1]])\n\n        return list(chain.from_iterable(fragments)) + self._query_fragments\n\n    @property\n    def _path_fragments(self):\n        return [normalize_path(path) for path in self.spec['paths']]\n\n    @property\n    def _fixed_fragments(self):\n        return [{'type': 'fixed', 'value': fragment} for fragment in\n                self.spec['template'].split('{}') if fragment]\n\n    @property\n    def _query_fragments(self):\n        if len(self._query_params) == 0:\n            return []\n\n        fragments = [normalize_query_param(query_param, is_first=(i == 0))\n                     for i, query_param in enumerate(self._query_params)]\n        return list(chain(*fragments))\n\n    @property\n    def _query_params(self):\n        params = self.spec['params']\n        template_params = self.spec['params_template']\n\n        query_params = []\n        param_names = {p['name'] for p in params}\n        for query, value in template_params:\n            if query not in param_names:\n                query_params.append({\n                    'name': query,\n                    'type': 'default',\n                    'values': [value]\n                })\n        return query_params + params\n\n\ndef normalize_path(path):\n    if path['type'] == 'options':\n        return {\n            'type': 'list',\n            'value': ' '.join(path['values']),\n        }\n    if path['type'] == 'default':\n        return {\n            'type': 'fixed',\n            'value': normalize_default(path)\n        }\n    if path['type'] == 'date':\n        return {\n            'type': 'date',\n            'value': normalize_default(path)\n        }\n    if path['type'] == 'range':\n        return {\n            'type': 'range',\n            'value': normalize_range(path)\n            }\n    return None\n\n\ndef normalize_url_path(path):\n    if path['type'] == 'default':\n        return normalize_default(path)\n    if path['type'] == 'range':\n        return normalize_range(path)\n    return '[...]'\n\n\ndef normalize_url_query_param(x, is_first=False):\n    prefix = query_params_prefix(is_first).format(x['name'])\n    return prefix + normalize_url_path(x)\n\n\ndef normalize_query_param(x, is_first=False):\n    first_fragment = {\n        'type': 'fixed',\n        'value': query_params_prefix(is_first).format(x['name'])\n    }\n    return [first_fragment, normalize_path(x)]\n\n\ndef normalize_default(x):\n    return str(x['values'][0])\n\n\ndef normalize_range(x):\n    a, b = x['values'][0:2]\n    b_inclusive = str(int(b) - 1)\n    return '{}-{}'.format(a, b_inclusive)\n\n\ndef query_params_prefix(is_first):\n    return '?{}=' if is_first else '&{}='\n"
  },
  {
    "path": "slybot/slybot/starturls/generator.py",
    "content": "from collections import OrderedDict\nfrom datetime import datetime\nfrom itertools import chain, product\n\nfrom scrapy.utils.spider import arg_to_iter\n\nimport six\n\ntry:\n    from itertools import izip_longest\nexcept ImportError:\n    from itertools import zip_longest as izip_longest\nfrom six.moves.urllib.parse import urlencode\n\n\nclass IdentityGenerator():\n    def __call__(self, spec):\n        return spec\n\n\nclass UrlGenerator(object):\n    def __init__(self, settings=None, spider_args=None):\n        self._processors = {\n            'date': self._process_date,\n            'default': self._process_default,\n            'options': self._process_option,\n            'range': self._process_range,\n            'settings': self._process_setting,\n            'spider_args': self._process_args\n        }\n        self.settings = settings\n        self.spider_args = spider_args\n\n    def _process_date(self, values):\n        now = datetime.now()\n        return [now.strftime(v) for v in values]\n\n    def _process_default(self, values):\n        return [str(values[0])]\n\n    def _process_option(self, values):\n        return [str(v) for v in values]\n\n    def _process_range(self, values):\n        if len(values) > 3:\n            return []\n        return six.moves.range(*values)\n\n    def _process_setting(self, values):\n        if self.settings is None:\n            return []\n        results = []\n        for value in values:\n            results.extend(self.settings.getlist(value))\n        return results\n\n    def _process_args(self, values):\n        if self.spider_args is None:\n            return []\n        results = []\n        for value in values:\n            results.extend(arg_to_iter(self.spider_args.get(value, [])))\n        return results\n\n    def _build_section(self, descriptor, params=False):\n        if 'type' not in descriptor or 'values' not in descriptor:\n            return []  # Malformed descriptor\n        processor = self._processors.get(descriptor['type'])\n        if processor is None:\n            return []\n        processed = processor(descriptor['values'])\n        if not params:\n            return processed\n        if 'name' not in descriptor:\n            return []\n        return izip_longest([], processed, fillvalue=descriptor['name'])\n\n    def _generate_urls(self, template, paths, params_template, params):\n        path_length = len(paths)\n        if params and not paths:\n            components = product(*params)\n        else:\n            components = product(*chain(paths, params))\n        for values in components:\n            url = template.format(*values[:path_length])\n            params = values[path_length:]\n            if params_template or params:\n                url_params = OrderedDict(params_template)\n                for name, value in params:\n                    url_params[name] = value\n                url_params = urlencode(url_params)\n                yield '{}?{}'.format(url, url_params)\n            else:\n                yield url\n\n    def __call__(self, spec):\n        template = spec['template']\n        param = spec.get('params_template', {})\n        paths = [self._build_section(d) for d in spec.get('paths', [])]\n        params = [self._build_section(d, True) for d in spec.get('params', [])]\n        url_generator = self._generate_urls(template, paths, param, params)\n        return url_generator\n\n\ngenerator = UrlGenerator()\n"
  },
  {
    "path": "slybot/slybot/tests/__init__.py",
    "content": ""
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/extractors.json",
    "content": "{\n    \"4fad3762688f920d76000000\": {\n        \"regular_expression\": \"(\\\\d+)\"\n    }\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/items.json",
    "content": "{\n    \"default\": {\n        \"fields\": {\n            \"determinate\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"description\": {\n                \"required\": true,\n                \"vary\": false,\n                \"type\": \"safe html\"\n            },\n            \"weight\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"number\"\n            },\n            \"color\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"season\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"aaaa-aaaa\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"price\",\n                \"name\": \"price\"\n            },\n            \"lifecycle\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"categories\": {\n                \"required\": false,\n                \"vary\": true,\n                \"type\": \"safe html\"\n            },\n            \"product_id\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"name\": {\n                \"required\": true,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"url\": {\n                \"required\": false,\n                \"vary\": true,\n                \"type\": \"url\"\n            },\n            \"days\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"number\"\n            },\n            \"species\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            },\n            \"size\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"number\"\n            },\n            \"type\": {\n                \"required\": false,\n                \"vary\": false,\n                \"type\": \"text\"\n            }\n        }\n    },\n    \"doctor\": {\n        \"fields\": {\n            \"body\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"raw html\"\n            },\n            \"area_interest\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_state\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_line2\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_line3\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_line1\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"title\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"orgname\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"languages\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"fellowship\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"location\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"safe html\"\n            },\n            \"phone_number\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"internship\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"fax_number\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"specialty\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"clinical_interest\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"key\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_city\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"name\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"url\": {\n                \"vary\": true,\n                \"required\": false,\n                \"type\": \"url\"\n            },\n            \"other_certifications\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"residency\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"graduate_education\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"medical_education\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            },\n            \"address_zipcode\": {\n                \"vary\": false,\n                \"required\": false,\n                \"type\": \"text\"\n            }\n        }\n    },\n    \"8fab-4682-a3c7\": {\n        \"name\": \"book\",\n        \"fields\": {\n            \"a3ab-4a47-a423\": {\n                \"name\": \"image\",\n                \"required\": false,\n                \"type\": \"image\",\n                \"vary\": false\n            },\n            \"cb8b-445e-b85b\": {\n                \"name\": \"title\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"ddaf-46e3-8f36\": {\n                \"name\": \"price\",\n                \"required\": false,\n                \"type\": \"price\",\n                \"vary\": false\n            },\n            \"ddaf-46e3-8f35\": {\n                \"name\": \"counts\",\n                \"required\": false,\n                \"type\": \"price\",\n                \"vary\": false\n            },\n            \"ddaf-46e3-8f34\": {\n                \"name\": \"posted\",\n                \"required\": false,\n                \"type\": \"date\",\n                \"vary\": false\n            },\n            \"ddaf-46e3-8f33\": {\n                \"name\": \"breadcrumbs\",\n                \"required\": false,\n                \"type\": \"safe html\",\n                \"vary\": false\n            },\n            \"ddaf-46e3-8f32\": {\n                \"name\": \"pager\",\n                \"required\": false,\n                \"type\": \"raw html\",\n                \"vary\": false\n            }\n        }\n    },\n    \"9c67-4898-9d96\": {\n        \"fields\": {\n            \"d7c3-412c-ad4e\": {\n                \"id\": \"d7c3-412c-ad4e\",\n                \"name\": \"description\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"aee3-4653-945f\": {\n                \"id\": \"aee3-4653-945f\",\n                \"name\": \"image\",\n                \"required\": true,\n                \"type\": \"image\",\n                \"vary\": true\n            },\n            \"85cb-43ca-928b\": {\n                \"id\": \"85cb-43ca-928b\",\n                \"name\": \"breadcrumbs\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"965b-4060-a104\": {\n                \"id\": \"965b-4060-a104\",\n                \"name\": \"upc\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"71ed-4634-b777\": {\n                \"id\": \"71ed-4634-b777\",\n                \"name\": \"type\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"e711-4838-a687\": {\n                \"id\": \"e711-4838-a687\",\n                \"name\": \"price\",\n                \"required\": false,\n                \"type\": \"price\",\n                \"vary\": false\n            },\n            \"bbed-4317-b686\": {\n                \"id\": \"bbed-4317-b686\",\n                \"name\": \"price+tax\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            },\n            \"b616-4d53-9386\": {\n                \"id\": \"b616-4d53-9386\",\n                \"name\": \"tax\",\n                \"required\": false,\n                \"type\": \"price\",\n                \"vary\": false\n            },\n            \"1312-419b-afcd\": {\n                \"id\": \"1312-419b-afcd\",\n                \"name\": \"stock\",\n                \"required\": true,\n                \"type\": \"number\",\n                \"vary\": false\n            },\n            \"ad73-4b2b-9bd8\": {\n                \"id\": \"ad73-4b2b-9bd8\",\n                \"name\": \"reviews\",\n                \"required\": false,\n                \"type\": \"text\",\n                \"vary\": false\n            }\n        },\n        \"name\": \"Sharp Objects Books to Scrape - Sandbox\"\n    }\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/project.json",
    "content": "{\n    \"version\": \"1\", \n    \"name\": \"SampleProject\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/allowed_domains.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\"\n    ], \n    \"allowed_domains\": [\n        \"www.ebay.com\",\n        \"www.yahoo.com\"\n    ], \n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/any_allowed_domains.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/\"\n    ], \n    \"allowed_domains\": null,\n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"scrapes\": \"default\", \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com/3617-44af-a2f0/original_body.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if lt IE 7]>      <html lang=\"en-us\" class=\"no-js lt-ie9 lt-ie8 lt-ie7\"> <![endif]-->\n<!--[if IE 7]>         <html lang=\"en-us\" class=\"no-js lt-ie9 lt-ie8\"> <![endif]-->\n<!--[if IE 8]>         <html lang=\"en-us\" class=\"no-js lt-ie9\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html lang=\"en-us\" class=\"no-js\"> <!--<![endif]-->\n    <head>\n        <title>\n    Sharp Objects | Books to Scrape - Sandbox\n</title>\n\n        <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n        <meta name=\"created\" content=\"24th Jun 2016 09:29\" />\n        <meta name=\"description\" content=\"\n    WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since she left town eight years ago, Camille has hardly spoken to her neurotic, hypochondriac mother or to the half-sister she barely knows: a beautiful thirteen-year-old with an eerie grip on the town. Now, installed again in her family’s Victorian mansion, Camille is haunted by the childhood tragedy she has spent her whole life trying to cut from her memory. HARMFUL on her wrist, WHORE on her ankle As Camille works to uncover the truth about these violent crimes, she finds herself identifying with the young victims—a bit too strongly. Clues keep leading to dead ends, forcing Camille to unravel the psychological puzzle of her own past to get at the story. Dogged by her own demons, Camille will have to confront what happened to her years before if she wants to survive this homecoming.With its taut, crafted writing, Sharp Objects is addictive, haunting, and unforgettable. ...more\n\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        <meta name=\"robots\" content=\"NOARCHIVE,NOCACHE\" />\n\n        <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->\n        <!--[if lt IE 9]>\n        <script src=\"//html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n        <![endif]-->\n\n        \n            <link rel=\"shortcut icon\" href=\"../../static/oscar/favicon.ico\" />\n        \n\n        \n        \n    \n    \n        <link rel=\"stylesheet\" type=\"text/css\" href=\"../../static/oscar/css/styles.css\" />\n    \n    <link rel=\"stylesheet\" href=\"../../static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../static/oscar/css/datetimepicker.css\" />\n\n\n        \n        \n\n        \n\n        \n            \n            \n\n        \n    </head>\n\n    <body id=\"default\" class=\"default\">\n        \n        \n    \n    \n    <header class=\"header container-fluid\">\n        <div class=\"page_inner\">\n            <div class=\"row\">\n                <div class=\"col-sm-8 h1\"><a href=\"../../index.html\">Books to Scrape</a><small> We love being scraped!</small>\n</div>\n\n                \n            </div>\n        </div>\n    </header>\n\n    \n    \n        <div class=\"container-fluid page\">\n            <div class=\"page_inner\">\n                \n<ul class=\"breadcrumb\">\n    <li>\n        <a href=\"../../index.html\">Home</a>\n    </li>\n    \n        \n        <li>\n            <a href=\"../category/books_1/index.html\">Books</a>\n        </li>\n        \n        <li>\n            <a href=\"../category/books/mystery_3/index.html\">Mystery</a>\n        </li>\n        \n        <li class=\"active\">Sharp Objects</li>\n\n        \n        \n    \n</ul>\n\n                \n\n                \n\n\n\n<div id=\"messages\">\n\n</div>\n\n                \n                <div class=\"content\">\n                    \n\n                    \n                    <div id=\"promotions\">\n                        \n                    </div>\n\n                    \n                    <div id=\"content_inner\">\n\n<article class=\"product_page\"><!-- Start of product page -->\n\n    <div class=\"row\">\n\n        \n        <div class=\"col-sm-6\">\n            \n\n\n\n\n    \n\n    \n\n        \n        <div id=\"product_gallery\" class=\"carousel\">\n            <div class=\"thumbnail\">\n                <div class=\"carousel-inner\">\n                    <div class=\"item active\">\n                    \n                        \n                            <img src=\"../../media/cache/c0/59/c05972805aa7201171b8fc71a5b00292.jpg\" alt=\"Sharp Objects\" />\n                        \n                    \n                    </div>\n                </div>\n            </div>\n        </div>\n\n    \n\n\n        </div>\n        \n\n        \n        <div class=\"col-sm-6 product_main\">\n            \n            \n            <h1>Sharp Objects</h1>\n\n            \n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£47.82</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock (20 available)\n    \n</p>\n\n            \n\n            \n                \n\n\n\n    <p class=\"star-rating Four\">\n        <i class=\"icon-star\"></i>\n        <i class=\"icon-star\"></i>\n        <i class=\"icon-star\"></i>\n        <i class=\"icon-star\"></i>\n        <i class=\"icon-star\"></i>\n\n        <!-- <small><a href=\"/catalogue/sharp-objects_997/reviews/\">\n        \n                \n                    0 customer reviews\n                \n        </a></small>\n         -->&nbsp;\n\n\n<!-- \n    <a id=\"write_review\" href=\"/catalogue/sharp-objects_997/reviews/add/#addreview\" class=\"btn btn-success btn-sm\">\n        Write a review\n    </a>\n\n --></p>\n\n            \n\n            <hr/>\n\n            <div class=\"alert alert-warning\" role=\"alert\"><strong>Warning!</strong> This is a demo website for web scraping purposes. Prices and ratings here were randomly assigned and have no real meaning.</div>\n\n\n            \n                \n\n\n\n\n\n\n            \n        </div><!-- /col-sm-6 -->\n        \n\n    </div><!-- /row -->\n\n    \n        \n        <div id=\"product_description\" class=\"sub-header\">\n            <h2>Product Description</h2>\n        </div>\n        <p>WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since she left town eight years ago, Camille has hardly spoken to her neurotic, hypochondriac mother or to the half-sister she barely knows: a beautiful thirteen-year-old with an eerie grip on the town. Now, installed again in her family’s Victorian mansion, Camille is haunted by the childhood tragedy she has spent her whole life trying to cut from her memory. HARMFUL on her wrist, WHORE on her ankle As Camille works to uncover the truth about these violent crimes, she finds herself identifying with the young victims—a bit too strongly. Clues keep leading to dead ends, forcing Camille to unravel the psychological puzzle of her own past to get at the story. Dogged by her own demons, Camille will have to confront what happened to her years before if she wants to survive this homecoming.With its taut, crafted writing, Sharp Objects is addictive, haunting, and unforgettable. ...more</p>\n        \n    \n\n    \n    <div class=\"sub-header\">\n        <h2>Product Information</h2>\n    </div>\n    <table class=\"table table-striped\">\n        \n        <tr>\n            <th>UPC</th><td>e00eb4fd7b871a48</td>\n        </tr>\n        \n        <tr>\n            <th>Product Type</th><td>Books</td>\n        </tr>\n\n        \n        \n            <tr>\n                <th>Price (excl. tax)</th><td>£47.82</td>\n            </tr>\n            \n                <tr>\n                    <th>Price (incl. tax)</th><td>£47.82</td>\n                </tr>\n                <tr>\n                    <th>Tax</th><td>£0.00</td>\n                </tr>\n            \n            <tr>\n                <th>Availability</th>\n                <td>In stock (20 available)</td>\n            </tr>\n        \n        \n        \n            <tr>\n                <th>Number of reviews</th>\n                <td>0</td>\n            </tr>\n        \n    </table>\n    \n\n    \n        \n        <section>\n            <div id=\"reviews\" class=\"sub-header\">\n            </div>\n        </section>\n        \n    \n\n    \n        \n    \n\n    \n\n\n\n    \n        <div class=\"sub-header\">\n            <h2>Products you recently viewed</h2>\n        </div>\n\n        <ul class=\"row\">\n            \n                <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"../soumission_998/index.html\"><img src=\"../../media/cache/3e/ef/3eef99c9d9adef34639f510662022830.jpg\" alt=\"Soumission\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"../soumission_998/index.html\" title=\"Soumission\">Soumission</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£50.10</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n            \n                <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"../tipping-the-velvet_999/index.html\"><img src=\"../../media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg\" alt=\"Tipping the Velvet\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"../tipping-the-velvet_999/index.html\" title=\"Tipping the Velvet\">Tipping the Velvet</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£53.74</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n            \n                <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"../a-light-in-the-attic_1000/index.html\"><img src=\"../../media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg\" alt=\"A Light in the Attic\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Three\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"../a-light-in-the-attic_1000/index.html\" title=\"A Light in the Attic\">A Light in the ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£51.77</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n            \n        </ul>\n    \n\n\n\n</article><!-- End of product page -->\n</div>\n                </div>\n            </div>\n        </div>\n    \n\n    \n<footer class=\"footer container-fluid\">\n    \n        \n    \n</footer>\n\n\n        \n        \n  \n            <!-- jQuery -->\n            <script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n            <script>window.jQuery || document.write('<script src=\"../../static/oscar/js/jquery/jquery-1.9.1.min.js\"><\\/script>')</script>\n        \n  \n\n\n        \n        \n    \n        \n    <!-- Twitter Bootstrap -->\n    <script type=\"text/javascript\" src=\"../../static/oscar/js/bootstrap3/bootstrap.min.js\"></script>\n    <!-- Oscar -->\n    <script src=\"../../static/oscar/js/oscar/ui.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n    <script src=\"../../static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n    <script src=\"../../static/oscar/js/bootstrap-datetimepicker/locales/bootstrap-datetimepicker.all.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n\n        \n        \n    \n    \n\n    \n\n\n\n        \n        <script type=\"text/javascript\">\n            $(function() {\n                \n    \n    oscar.init();\n\n            });\n        </script>\n\n        \n        <!-- Version: N/A -->\n        \n    </body>\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com/3617-44af-a2f0.json",
    "content": " {\n  \"annotated_body\": \"\",\n  \"body\": \"rendered_body\",\n  \"extractors\": {},\n  \"id\": \"3617-44af-a2f0\",\n  \"name\": \"Sharp Objects Books to Scrape - Sandbox\",\n  \"page_id\": \"\",\n  \"page_type\": \"item\",\n  \"plugins\": {\n    \"annotations-plugin\": {\n      \"extracts\": [\n        {\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": null,\n          \"id\": \"5506-4528-84cd\",\n          \"item_container\": true,\n          \"schema_id\": \"9c67-4898-9d96\",\n          \"selector\": \".page > .page_inner\",\n          \"siblings\": 0,\n          \"text-content\": \"#portia-content\"\n        },\n        {\n          \"container_id\": \"5506-4528-84cd\",\n          \"data\": {\n            \"950d-4e62-9dfc\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"d7c3-412c-ad4e\",\n              \"required\": false\n            }\n          },\n          \"id\": \"b862-450e-8ad5\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > p\"\n        },\n        {\n          \"container_id\": \"5506-4528-84cd\",\n          \"data\": {\n            \"04b1-4eb6-afb5\": {\n              \"attribute\": \"src\",\n              \"extractors\": {},\n              \"field\": \"aee3-4653-945f\",\n              \"required\": false\n            }\n          },\n          \"id\": \"9fec-4790-86d9\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > div.row > div:nth-child(1) > .carousel > .thumbnail > .carousel-inner > .item > img\"\n        },\n        {\n          \"container_id\": \"5506-4528-84cd\",\n          \"data\": {\n            \"71fc-46d0-9d8a\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"85cb-43ca-928b\",\n              \"required\": false\n            }\n          },\n          \"id\": \"ab41-440b-a755\",\n          \"repeated\": true,\n          \"selection_mode\": \"auto\",\n          \"selector\": \".breadcrumb > li > a\"\n        },\n        {\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": \"5506-4528-84cd\",\n          \"field\": \"info\",\n          \"id\": \"ef87-4968-8171\",\n          \"item_container\": true,\n          \"schema_id\": \"9c67-4898-9d96\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table\",\n          \"text-content\": \"#portia-content\"\n        },\n        {\n          \"container_id\": \"ef87-4968-8171\",\n          \"data\": {\n            \"766e-4511-b2d6\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"965b-4060-a104\",\n              \"required\": false\n            }\n          },\n          \"id\": \"c168-42b6-94bd\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tr:nth-child(1) > td,.page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tbody > tr:nth-child(1) > td\"\n        },\n        {\n          \"container_id\": \"ef87-4968-8171\",\n          \"data\": {\n            \"b02b-4934-af1a\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"71ed-4634-b777\",\n              \"required\": true\n            }\n          },\n          \"id\": \"5c6c-49b4-b4c2\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tr:nth-child(2) > td,.page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tbody > tr:nth-child(2) > td\"\n        },\n        {\n          \"container_id\": \"ef87-4968-8171\",\n          \"data\": {\n            \"5f0c-4fc3-a0fb\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"1312-419b-afcd\",\n              \"required\": false\n            }\n          },\n          \"id\": \"3865-468d-ae26\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tr:nth-child(6) > td,.page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tbody > tr:nth-child(6) > td\"\n        },\n        {\n          \"container_id\": \"ef87-4968-8171\",\n          \"data\": {\n            \"6c8d-44b6-98dd\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"e711-4838-a687\",\n              \"required\": false\n            }\n          },\n          \"id\": \"42c2-4f50-8697\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tr:nth-child(4) > td,.page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tbody > tr:nth-child(4) > td\"\n        },\n        {\n          \"container_id\": \"ef87-4968-8171\",\n          \"data\": {\n            \"0ade-4584-aeb0\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"b616-4d53-9386\",\n              \"required\": false\n            }\n          },\n          \"id\": \"bb7f-4b7a-bf8b\",\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tr:nth-child(5) > td,.page > .page_inner > .content > div:nth-child(2) > .product_page > .table > tbody > tr:nth-child(5) > td\"\n        }\n      ]\n    }\n  },\n  \"scrapes\": \"9c67-4898-9d96\",\n  \"spider\": \"books.toscrape.com\",\n  \"url\": \"http://books.toscrape.com/catalogue/sharp-objects_997/index.html\",\n  \"version\": \"0.13.0b25\",\n  \"results\": [\n    {\n      \"_template\": \"3617-44af-a2f0\",\n      \"_type\": \"Sharp Objects Books to Scrape - Sandbox\",\n      \"breadcrumbs\": [\n        \"Home\",\n        \"Books\",\n        \"Mystery\"\n      ],\n      \"description\": [\n        \"WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since WICKED above her hipbone, GIRL across her heart Words are like a road map to reporter Camille Preaker’s troubled past. Fresh from a brief stay at a psych hospital, Camille’s first assignment from the second-rate daily paper where she works brings her reluctantly back to her hometown to cover the murders of two preteen girls. NASTY on her kneecap, BABYDOLL on her leg Since she left town eight years ago, Camille has hardly spoken to her neurotic, hypochondriac mother or to the half-sister she barely knows: a beautiful thirteen-year-old with an eerie grip on the town. Now, installed again in her family’s Victorian mansion, Camille is haunted by the childhood tragedy she has spent her whole life trying to cut from her memory. HARMFUL on her wrist, WHORE on her ankle As Camille works to uncover the truth about these violent crimes, she finds herself identifying with the young victims—a bit too strongly. Clues keep leading to dead ends, forcing Camille to unravel the psychological puzzle of her own past to get at the story. Dogged by her own demons, Camille will have to confront what happened to her years before if she wants to survive this homecoming.With its taut, crafted writing, Sharp Objects is addictive, haunting, and unforgettable. ...more\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/c0/59/c05972805aa7201171b8fc71a5b00292.jpg\"\n      ],\n      \"info\": {\n        \"_type\": \"Sharp Objects Books to Scrape - Sandbox\",\n        \"price\": [\n          \"47.82\"\n        ],\n        \"stock\": [\n          \"20\"\n        ],\n        \"tax\": [\n          \"0.00\"\n        ],\n        \"type\": [\n          \"Books\"\n        ],\n        \"upc\": [\n          \"e00eb4fd7b871a48\"\n        ]\n      },\n      \"url\": \"http://books.toscrape.com/catalogue/sharp-objects_997/index.html\"\n    }\n  ]\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com/3652-4fa1-a912.json",
    "content": "{}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com/4583-41b4-9edb/original_body.html",
    "content": "<!DOCTYPE html>\n<!--[if lt IE 7]>      <html lang=\"en-us\" class=\"no-js lt-ie9 lt-ie8 lt-ie7\"> <![endif]-->\n<!--[if IE 7]>         <html lang=\"en-us\" class=\"no-js lt-ie9 lt-ie8\"> <![endif]-->\n<!--[if IE 8]>         <html lang=\"en-us\" class=\"no-js lt-ie9\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html lang=\"en-us\" class=\"no-js\"> <!--<![endif]-->\n    <head>\n        <title>\n    All products | Books to Scrape - Sandbox\n</title>\n\n        <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n        <meta name=\"created\" content=\"24th Jun 2016 09:29\" />\n        <meta name=\"description\" content=\"\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        <meta name=\"robots\" content=\"NOARCHIVE,NOCACHE\" />\n\n        <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->\n        <!--[if lt IE 9]>\n        <script src=\"//html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n        <![endif]-->\n\n        \n            <link rel=\"shortcut icon\" href=\"static/oscar/favicon.ico\" />\n        \n\n        \n        \n    \n    \n        <link rel=\"stylesheet\" type=\"text/css\" href=\"static/oscar/css/styles.css\" />\n    \n    <link rel=\"stylesheet\" href=\"static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"static/oscar/css/datetimepicker.css\" />\n\n\n        \n        \n\n        \n\n        \n            \n            \n\n        \n    </head>\n\n    <body id=\"default\" class=\"default\">\n        \n        \n    \n    \n    <header class=\"header container-fluid\">\n        <div class=\"page_inner\">\n            <div class=\"row\">\n                <div class=\"col-sm-8 h1\"><a href=\"index.html\">Books to Scrape</a><small> We love being scraped!</small>\n</div>\n\n                \n            </div>\n        </div>\n    </header>\n\n    \n    \n<div class=\"container-fluid page\">\n    <div class=\"page_inner\">\n        \n    <ul class=\"breadcrumb\">\n        <li>\n            <a href=\"index.html\">Home</a>\n        </li>\n        <li class=\"active\">All products</li>\n    </ul>\n\n        <div class=\"row\">\n\n            <aside class=\"sidebar col-sm-4 col-md-3\">\n                \n                <div id=\"promotions_left\">\n                    \n                </div>\n                \n    \n    \n        \n        <div class=\"side_categories\">\n            <ul class=\"nav nav-list\">\n                \n                    <li>\n                        <a href=\"catalogue/category/books_1/index.html\">\n                            \n                                Books\n                            \n                        </a>\n\n                        <ul>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/travel_2/index.html\">\n                            \n                                Travel\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/mystery_3/index.html\">\n                            \n                                Mystery\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/historical-fiction_4/index.html\">\n                            \n                                Historical Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/sequential-art_5/index.html\">\n                            \n                                Sequential Art\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/classics_6/index.html\">\n                            \n                                Classics\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/philosophy_7/index.html\">\n                            \n                                Philosophy\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/romance_8/index.html\">\n                            \n                                Romance\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/womens-fiction_9/index.html\">\n                            \n                                Womens Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/fiction_10/index.html\">\n                            \n                                Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/childrens_11/index.html\">\n                            \n                                Childrens\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/religion_12/index.html\">\n                            \n                                Religion\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/nonfiction_13/index.html\">\n                            \n                                Nonfiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/music_14/index.html\">\n                            \n                                Music\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/default_15/index.html\">\n                            \n                                Default\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/science-fiction_16/index.html\">\n                            \n                                Science Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/sports-and-games_17/index.html\">\n                            \n                                Sports and Games\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/add-a-comment_18/index.html\">\n                            \n                                Add a comment\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/fantasy_19/index.html\">\n                            \n                                Fantasy\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/new-adult_20/index.html\">\n                            \n                                New Adult\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/young-adult_21/index.html\">\n                            \n                                Young Adult\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/science_22/index.html\">\n                            \n                                Science\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/poetry_23/index.html\">\n                            \n                                Poetry\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/paranormal_24/index.html\">\n                            \n                                Paranormal\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/art_25/index.html\">\n                            \n                                Art\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/psychology_26/index.html\">\n                            \n                                Psychology\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/autobiography_27/index.html\">\n                            \n                                Autobiography\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/parenting_28/index.html\">\n                            \n                                Parenting\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/adult-fiction_29/index.html\">\n                            \n                                Adult Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/humor_30/index.html\">\n                            \n                                Humor\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/horror_31/index.html\">\n                            \n                                Horror\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/history_32/index.html\">\n                            \n                                History\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/food-and-drink_33/index.html\">\n                            \n                                Food and Drink\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/christian-fiction_34/index.html\">\n                            \n                                Christian Fiction\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/business_35/index.html\">\n                            \n                                Business\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/biography_36/index.html\">\n                            \n                                Biography\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/thriller_37/index.html\">\n                            \n                                Thriller\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/contemporary_38/index.html\">\n                            \n                                Contemporary\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/spirituality_39/index.html\">\n                            \n                                Spirituality\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/academic_40/index.html\">\n                            \n                                Academic\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/self-help_41/index.html\">\n                            \n                                Self Help\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/historical_42/index.html\">\n                            \n                                Historical\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/christian_43/index.html\">\n                            \n                                Christian\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/suspense_44/index.html\">\n                            \n                                Suspense\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/short-stories_45/index.html\">\n                            \n                                Short Stories\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/novels_46/index.html\">\n                            \n                                Novels\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/health_47/index.html\">\n                            \n                                Health\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/politics_48/index.html\">\n                            \n                                Politics\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/cultural_49/index.html\">\n                            \n                                Cultural\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/erotica_50/index.html\">\n                            \n                                Erotica\n                            \n                        </a>\n\n                        </li>\n                        \n                \n                    <li>\n                        <a href=\"catalogue/category/books/crime_51/index.html\">\n                            \n                                Crime\n                            \n                        </a>\n\n                        </li>\n                        \n                            </ul></li>\n                        \n                \n            </ul>\n        </div>\n    \n    \n\n            </aside>\n\n            <div class=\"col-sm-8 col-md-9\">\n                \n                <div class=\"page-header action\">\n                    <h1>All products</h1>\n                </div>\n                \n\n                \n\n\n\n<div id=\"messages\">\n\n</div>\n\n\n                <div id=\"promotions\">\n                    \n                </div>\n\n                \n    <form method=\"get\" class=\"form-horizontal\">\n        \n        <div style=\"display:none\">\n            \n            \n        </div>\n\n        \n            \n                \n                    <strong>1000</strong> results - showing <strong>1</strong> to <strong>20</strong>.\n                \n            \n            \n        \n    </form>\n    \n        <section>\n            <div class=\"alert alert-warning\" role=\"alert\"><strong>Warning!</strong> This is a demo website for web scraping purposes. Prices and ratings here were randomly assigned and have no real meaning.</div>\n\n            <div>\n                <ol class=\"row\">\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/a-light-in-the-attic_1000/index.html\"><img src=\"media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg\" alt=\"A Light in the Attic\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Three\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/a-light-in-the-attic_1000/index.html\" title=\"A Light in the Attic\">A Light in the ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£51.77</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/tipping-the-velvet_999/index.html\"><img src=\"media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg\" alt=\"Tipping the Velvet\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/tipping-the-velvet_999/index.html\" title=\"Tipping the Velvet\">Tipping the Velvet</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£53.74</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/soumission_998/index.html\"><img src=\"media/cache/3e/ef/3eef99c9d9adef34639f510662022830.jpg\" alt=\"Soumission\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/soumission_998/index.html\" title=\"Soumission\">Soumission</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£50.10</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/sharp-objects_997/index.html\"><img src=\"media/cache/32/51/3251cf3a3412f53f339e42cac2134093.jpg\" alt=\"Sharp Objects\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Four\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/sharp-objects_997/index.html\" title=\"Sharp Objects\">Sharp Objects</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£47.82</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/sapiens-a-brief-history-of-humankind_996/index.html\"><img src=\"media/cache/be/a5/bea5697f2534a2f86a3ef27b5a8c12a6.jpg\" alt=\"Sapiens: A Brief History of Humankind\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Five\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/sapiens-a-brief-history-of-humankind_996/index.html\" title=\"Sapiens: A Brief History of Humankind\">Sapiens: A Brief History ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£54.23</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/the-requiem-red_995/index.html\"><img src=\"media/cache/68/33/68339b4c9bc034267e1da611ab3b34f8.jpg\" alt=\"The Requiem Red\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/the-requiem-red_995/index.html\" title=\"The Requiem Red\">The Requiem Red</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£22.65</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/the-dirty-little-secrets-of-getting-your-dream-job_994/index.html\"><img src=\"media/cache/92/27/92274a95b7c251fea59a2b8a78275ab4.jpg\" alt=\"The Dirty Little Secrets of Getting Your Dream Job\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Four\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/the-dirty-little-secrets-of-getting-your-dream-job_994/index.html\" title=\"The Dirty Little Secrets of Getting Your Dream Job\">The Dirty Little Secrets ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£33.34</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/the-coming-woman-a-novel-based-on-the-life-of-the-infamous-feminist-victoria-woodhull_993/index.html\"><img src=\"media/cache/3d/54/3d54940e57e662c4dd1f3ff00c78cc64.jpg\" alt=\"The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Three\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/the-coming-woman-a-novel-based-on-the-life-of-the-infamous-feminist-victoria-woodhull_993/index.html\" title=\"The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull\">The Coming Woman: A ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£17.93</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html\"><img src=\"media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg\" alt=\"The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Four\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html\" title=\"The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics\">The Boys in the ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£22.60</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/the-black-maria_991/index.html\"><img src=\"media/cache/58/46/5846057e28022268153beff6d352b06c.jpg\" alt=\"The Black Maria\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/the-black-maria_991/index.html\" title=\"The Black Maria\">The Black Maria</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£52.15</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/starving-hearts-triangular-trade-trilogy-1_990/index.html\"><img src=\"media/cache/be/f4/bef44da28c98f905a3ebec0b87be8530.jpg\" alt=\"Starving Hearts (Triangular Trade Trilogy, #1)\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Two\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/starving-hearts-triangular-trade-trilogy-1_990/index.html\" title=\"Starving Hearts (Triangular Trade Trilogy, #1)\">Starving Hearts (Triangular Trade ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£13.99</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/shakespeares-sonnets_989/index.html\"><img src=\"media/cache/10/48/1048f63d3b5061cd2f424d20b3f9b666.jpg\" alt=\"Shakespeare&#39;s Sonnets\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Four\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/shakespeares-sonnets_989/index.html\" title=\"Shakespeare&#39;s Sonnets\">Shakespeare&#39;s Sonnets</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£20.66</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/set-me-free_988/index.html\"><img src=\"media/cache/5b/88/5b88c52633f53cacf162c15f4f823153.jpg\" alt=\"Set Me Free\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Five\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/set-me-free_988/index.html\" title=\"Set Me Free\">Set Me Free</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£17.46</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/scott-pilgrims-precious-little-life-scott-pilgrim-1_987/index.html\"><img src=\"media/cache/94/b1/94b1b8b244bce9677c2f29ccc890d4d2.jpg\" alt=\"Scott Pilgrim&#39;s Precious Little Life (Scott Pilgrim #1)\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Five\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/scott-pilgrims-precious-little-life-scott-pilgrim-1_987/index.html\" title=\"Scott Pilgrim&#39;s Precious Little Life (Scott Pilgrim #1)\">Scott Pilgrim&#39;s Precious Little ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£52.29</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/rip-it-up-and-start-again_986/index.html\"><img src=\"media/cache/81/c4/81c4a973364e17d01f217e1188253d5e.jpg\" alt=\"Rip it Up and Start Again\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Five\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/rip-it-up-and-start-again_986/index.html\" title=\"Rip it Up and Start Again\">Rip it Up and ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£35.02</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/our-band-could-be-your-life-scenes-from-the-american-indie-underground-1981-1991_985/index.html\"><img src=\"media/cache/54/60/54607fe8945897cdcced0044103b10b6.jpg\" alt=\"Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Three\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/our-band-could-be-your-life-scenes-from-the-american-indie-underground-1981-1991_985/index.html\" title=\"Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991\">Our Band Could Be ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£57.25</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/olio_984/index.html\"><img src=\"media/cache/55/33/553310a7162dfbc2c6d19a84da0df9e1.jpg\" alt=\"Olio\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/olio_984/index.html\" title=\"Olio\">Olio</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£23.88</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/mesaerion-the-best-science-fiction-stories-1800-1849_983/index.html\"><img src=\"media/cache/09/a3/09a3aef48557576e1a85ba7efea8ecb7.jpg\" alt=\"Mesaerion: The Best Science Fiction Stories 1800-1849\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating One\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/mesaerion-the-best-science-fiction-stories-1800-1849_983/index.html\" title=\"Mesaerion: The Best Science Fiction Stories 1800-1849\">Mesaerion: The Best Science ...</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£37.59</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/libertarianism-for-beginners_982/index.html\"><img src=\"media/cache/0b/bc/0bbcd0a6f4bcd81ccb1049a52736406e.jpg\" alt=\"Libertarianism for Beginners\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Two\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/libertarianism-for-beginners_982/index.html\" title=\"Libertarianism for Beginners\">Libertarianism for Beginners</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£51.33</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                        <li class=\"col-xs-6 col-sm-4 col-md-3 col-lg-3\">\n\n\n\n\n\n\n    <article class=\"product_pod\">\n        \n            <div class=\"image_container\">\n                \n                    \n                    <a href=\"catalogue/its-only-the-himalayas_981/index.html\"><img src=\"media/cache/27/a5/27a53d0bb95bdd88288eaf66c9230d7e.jpg\" alt=\"It&#39;s Only the Himalayas\" class=\"thumbnail\"></a>\n                    \n                \n            </div>\n        \n\n        \n            \n                <p class=\"star-rating Two\">\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                    <i class=\"icon-star\"></i>\n                </p>\n            \n        \n\n        \n            <h3><a href=\"catalogue/its-only-the-himalayas_981/index.html\" title=\"It&#39;s Only the Himalayas\">It&#39;s Only the Himalayas</a></h3>\n        \n\n        \n            <div class=\"product_price\">\n                \n\n\n\n\n\n\n    \n        <p class=\"price_color\">£45.17</p>\n    \n\n<p class=\"instock availability\">\n    <i class=\"icon-ok\"></i>\n    \n        In stock\n    \n</p>\n\n                \n                    \n\n\n\n\n\n\n    \n    <form>\n        <button type=\"submit\" class=\"btn btn-primary btn-block\" data-loading-text=\"Adding...\">Add to basket</button>\n    </form>\n\n\n                \n            </div>\n        \n    </article>\n\n</li>\n                    \n                </ol>\n                \n\n\n\n    <div>\n        <ul class=\"pager\">\n            \n            <li class=\"current\">\n            \n                Page 1 of 50\n            \n            </li>\n            \n                <li class=\"next\"><a href=\"catalogue/page-2.html\">next</a></li>\n            \n        </ul>\n    </div>\n\n\n            </div>\n        </section>\n    \n\n\n            </div>\n\n        </div><!-- /row -->\n    </div><!-- /page_inner -->\n</div><!-- /container-fluid -->\n\n\n    \n<footer class=\"footer container-fluid\">\n    \n        \n    \n</footer>\n\n\n        \n        \n  \n            <!-- jQuery -->\n            <script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n            <script>window.jQuery || document.write('<script src=\"static/oscar/js/jquery/jquery-1.9.1.min.js\"><\\/script>')</script>\n        \n  \n\n\n        \n        \n    \n        \n    <!-- Twitter Bootstrap -->\n    <script type=\"text/javascript\" src=\"static/oscar/js/bootstrap3/bootstrap.min.js\"></script>\n    <!-- Oscar -->\n    <script src=\"static/oscar/js/oscar/ui.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n    <script src=\"static/oscar/js/bootstrap-datetimepicker/bootstrap-datetimepicker.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n    <script src=\"static/oscar/js/bootstrap-datetimepicker/locales/bootstrap-datetimepicker.all.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n\n        \n        \n    \n\n    \n\n\n        \n        <script type=\"text/javascript\">\n            $(function() {\n                \n    \n    \n    oscar.init();\n\n    oscar.search.init();\n\n            });\n        </script>\n\n        \n        <!-- Version: N/A -->\n        \n    </body>\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com/4583-41b4-9edb.json",
    "content": "{\n  \"extractors\": {},\n  \"id\": \"4583-41b4-9edb\",\n  \"body\": \"rendered_body\",\n  \"name\": \"Books\",\n  \"page_id\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n  \"page_type\": \"item\",\n  \"plugins\": {\n    \"annotations-plugin\": {\n      \"extracts\": [\n        {\n          \"accept_selectors\": [\n            \".product_pod\"\n          ],\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": \"4bda-4c32-9f61#parent\",\n          \"id\": \"4bda-4c32-9f61\",\n          \"item_container\": true,\n          \"reject_selectors\": [],\n          \"repeated\": true,\n          \"required\": [],\n          \"schema_id\": \"8fab-4682-a3c7\",\n          \"selector\": \".product_pod\",\n          \"siblings\": 0,\n          \"tagid\": 12,\n          \"text-content\": \"#portia-content\"\n        },\n        {\n          \"accept_selectors\": [\n            \".col-xs-6:nth-child(1) > .product_pod > .image_container > a > .thumbnail\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4821-48f5-8fd7\": {\n              \"attribute\": \"src\",\n              \"extractors\": {},\n              \"field\": \"a3ab-4a47-a423\",\n              \"required\": false\n            }\n          },\n          \"id\": \"d951-4f05-9748\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".product_pod > .image_container > a > .thumbnail\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".form-horizontal > strong:nth-child(2)\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4821-48f5-8fd6\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"ddaf-46e3-8f35\",\n              \"required\": false\n            }\n          },\n          \"id\": \"d951-4f05-9747\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".form-horizontal > strong:nth-child(2)\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".breadcrumb > li\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4821-48f5-8fd5\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"ddaf-46e3-8f33\",\n              \"required\": false\n            }\n          },\n          \"id\": \"d951-4f05-9746\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".breadcrumb > li\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".pager\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4821-48f5-8fd5\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"ddaf-46e3-8f32\",\n              \"required\": false\n            }\n          },\n          \"id\": \"d951-4f05-9646\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".pager\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \"meta[name=\\\"created\\\"]\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4821-48f5-8fd4\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"ddaf-46e3-8f34\",\n              \"required\": false\n            }\n          },\n          \"text-content\": \"#portia-content\",\n          \"id\": \"d951-4f05-9745\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \"meta[name=\\\"created\\\"]\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".col-xs-6:nth-child(1) > .product_pod > h3 > a\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"35b4-4a46-aee9\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"cb8b-445e-b85b\",\n              \"required\": false\n            }\n          },\n          \"id\": \"be1d-4925-8fbf\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".product_pod > h3 > a\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".col-xs-6:nth-child(1) > .product_pod > .product_price > .price_color\",\n            \".col-xs-6:nth-child(2) > .product_pod > .product_price > .price_color\"\n          ],\n          \"container_id\": \"4bda-4c32-9f61\",\n          \"data\": {\n            \"4846-473a-9bff\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"ddaf-46e3-8f36\",\n              \"required\": false\n            }\n          },\n          \"id\": \"b39c-4cdf-938d\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".product_pod > .product_price > .price_color\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \"ol\"\n          ],\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": null,\n          \"id\": \"4bda-4c32-9f61#parent\",\n          \"item_container\": true,\n          \"reject_selectors\": [],\n          \"repeated\": false,\n          \"required\": [],\n          \"schema_id\": \"8fab-4682-a3c7\",\n          \"selector\": \"ol\",\n          \"siblings\": 0,\n          \"tagid\": 12,\n          \"text-content\": \"#portia-content\"\n        }\n      ]\n    }\n  },\n  \"scrapes\": \"8fab-4682-a3c7\",\n  \"spider\": \"books.toscrape.com\",\n  \"url\": \"http://books.toscrape.com/\",\n  \"version\": \"0.13.0b20\",\n  \"_results\": [\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"51.77\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 1,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"A Light in the ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"53.74\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 2,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Tipping the Velvet\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"50.10\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 3,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Soumission\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/3e/ef/3eef99c9d9adef34639f510662022830.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"47.82\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 4,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Sharp Objects\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/32/51/3251cf3a3412f53f339e42cac2134093.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"54.23\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 5,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Sapiens: A Brief History ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/be/a5/bea5697f2534a2f86a3ef27b5a8c12a6.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"22.65\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 6,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"The Requiem Red\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/68/33/68339b4c9bc034267e1da611ab3b34f8.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"33.34\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 7,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"The Dirty Little Secrets ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/92/27/92274a95b7c251fea59a2b8a78275ab4.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"17.93\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 8,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"The Coming Woman: A ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/3d/54/3d54940e57e662c4dd1f3ff00c78cc64.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"22.60\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 9,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"The Boys in the ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"52.15\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 10,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"The Black Maria\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/58/46/5846057e28022268153beff6d352b06c.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"13.99\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 11,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Starving Hearts (Triangular Trade ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/be/f4/bef44da28c98f905a3ebec0b87be8530.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"20.66\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 12,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Shakespeare's Sonnets\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/10/48/1048f63d3b5061cd2f424d20b3f9b666.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"17.46\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 13,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Set Me Free\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/5b/88/5b88c52633f53cacf162c15f4f823153.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"52.29\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 14,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Scott Pilgrim's Precious Little ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/94/b1/94b1b8b244bce9677c2f29ccc890d4d2.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"35.02\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 15,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Rip it Up and ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/81/c4/81c4a973364e17d01f217e1188253d5e.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"57.25\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 16,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Our Band Could Be ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/54/60/54607fe8945897cdcced0044103b10b6.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"23.88\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 17,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Olio\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/55/33/553310a7162dfbc2c6d19a84da0df9e1.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"37.59\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 18,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Mesaerion: The Best Science ...\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/09/a3/09a3aef48557576e1a85ba7efea8ecb7.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"51.33\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 19,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"Libertarianism for Beginners\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/0b/bc/0bbcd0a6f4bcd81ccb1049a52736406e.jpg\"\n      ]\n    },\n    {\n      \"_type\": \"book\",\n      \"price\": [\n        \"45.17\"\n      ],\n      \"_template\": \"0a96a4dba3c62275ecf13903f42a007dd06718d8\",\n      \"counts\": [\n        \"1000\"\n      ],\n      \"pager\": [\n        \"<ul class=\\\"pager\\\">\\n            \\n            <li class=\\\"current\\\">\\n            \\n                Page 1 of 50\\n            \\n            </li>\\n            \\n                <li class=\\\"next\\\"><a href=\\\"catalogue/page-2.html\\\">next</a></li>\\n            \\n        </ul>\"\n      ],\n      \"posted\": [\n        \"2016-06-24 09:29\"\n      ],\n      \"_index\": 20,\n      \"url\": \"http://books.toscrape.com/\",\n      \"breadcrumbs\": [\n        \"<li>\\n            Home\\n        </li>\",\n        \"<li>All products</li>\"\n      ],\n      \"title\": [\n        \"It's Only the Himalayas\"\n      ],\n      \"image\": [\n        \"http://books.toscrape.com/media/cache/27/a5/27a53d0bb95bdd88288eaf66c9230d7e.jpg\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com.json",
    "content": "{\n    \"exclude_patterns\": [],\n    \"follow_patterns\": [\n        \"page-\\\\d+\\\\.html\"\n    ],\n    \"id\": \"f8ad-40cc-9916\",\n    \"init_requests\": [],\n    \"js_disable_patterns\": [],\n    \"js_enable_patterns\": [],\n    \"js_enabled\": false,\n    \"links_to_follow\": \"patterns\",\n    \"page_actions\": [],\n    \"respect_nofollow\": false,\n    \"start_urls\": [\n        \"http://books.toscrape.com/\"\n    ],\n    \"version\": \"0.13.0b32\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/books.toscrape.com_1.json",
    "content": "{\n    \"exclude_patterns\": [],\n    \"follow_patterns\": [],\n    \"id\": \"f8ad-40cc-9916\",\n    \"init_requests\": [],\n    \"js_disable_patterns\": [],\n    \"js_enable_patterns\": [],\n    \"js_enabled\": false,\n    \"allowed_domains\": null,\n    \"links_to_follow\": \"all\",\n    \"page_actions\": [],\n    \"respect_nofollow\": false,\n    \"start_urls\": [\n        \"http://books.toscrape.com/\"\n    ],\n    \"version\": \"0.13.0b34\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/cargurus.json",
    "content": "{\n    \"templates\": [\n    ], \n    \"start_urls\": [\n        \"http://www.cargurus.com/Cars/sitemap.html\"\n    ], \n    \"exclude_patterns\": [\n        \"-Pictures-\", \n        \"-Specs-\", \n        \"-Price-\", \n        \"_v\", \n        \"-Videos-\"\n    ], \n    \"follow_patterns\": [\n        \"-Overview-\", \n        \"-Reviews-\", \n        \"/rss/\"\n    ],\n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": false\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/ebay.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\"\n    ], \n    \"init_requests\": [\n        {\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\"]\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\"\n                }\n            ]\n        }\n    ],\n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/ebay2.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\"\n    ], \n    \"init_requests\": [\n        {\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"inurl\",\n                  \"value\": \"file://tmp/test_params.txt\"\n                },\n                {\n                  \"name\": \"_nkw2\",\n                  \"type\": \"inurl\",\n                  \"value\": \"file://tmp/test_params.txt\"\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\"\n                }\n            ]\n        }\n    ],\n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"scrapes\": \"default\", \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/ebay3.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\"\n    ], \n    \"init_requests\": [\n        {\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"{search_string}\"]\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\"\n                }\n            ]\n        }\n    ],\n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"scrapes\": \"default\", \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/ebay4.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\"\n    ], \n    \"init_requests\": [\n        {\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"{search_string}\"]\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\"\n                }\n            ]\n        }\n    ],\n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"scrapes\": \"default\", \n    \"links_to_follow\": \"none\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/example.com.json",
    "content": "{\n    \"templates\": [],\n    \"start_urls\": [\"http://www.example.com/index.html\"],\n    \"init_requests\": [\n        {\n            \"type\": \"start\",\n            \"url\": \"http://www.example.com/products.csv\",\n            \"link_extractor\": {\n                \"type\": \"column\",\n                \"value\": 1,\n                \"delimiter\": \",\"\n            }\n        }\n    ], \n    \"exclude_patterns\": [], \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/example2.com.json",
    "content": "{\n    \"templates\": [],\n    \"start_urls\": [],\n    \"init_requests\": [\n        {\n            \"type\": \"start\",\n            \"url\": \"http://www.example.com/index.html\"\n        }\n    ], \n    \"exclude_patterns\": [], \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/example3.com.json",
    "content": "{\n    \"templates\": [],\n    \"start_urls\": [\"http://www.example.com/index.html\"],\n    \"exclude_patterns\": [], \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/example4.com.json",
    "content": "{\n    \"templates\": [],\n    \"start_urls\": [\"http://www.example.com/index.html\"],\n    \"start_urls_type\": \"generated_urls\",\n    \"generated_urls\": [{\n            \"template\": \"http://www.example.com/{}\",\n            \"paths\": [{\n                \"type\": \"options\",\n                \"values\": [\"about_us\", \"contact\"]\n            }],\n            \"params\": []\n        }, {\n            \"template\": \"http://www.example.com/{}/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"p\"]\n            }, {\n                \"type\": \"range\",\n                \"values\": [2, 5]\n            }],\n            \"params\": []\n        }],\n    \"exclude_patterns\": [], \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/networkhealth.com/networkhealthtemplate/annotated_body.html",
    "content": "\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n\n<head>\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\"/>\n<meta content=\"en\" http-equiv=\"content-language\"/>\n<meta content=\"IE=edge\" http-equiv=\"X-UA-Compatible\"/>\n<meta content=\"en\" name=\"language\"/>\n<meta content=\"true\" name=\"MSSmartTagsPreventParsing\"/>\n<meta content=\"width=device-width; initial-scale=1.0;\" name=\"viewport\"/>\n<link href=\"../../../favicon.ico\" type=\"image/x-icon\" rel=\"shortcut icon\"/> \t\n\t<link media=\"all\" href=\"/_common-nhp-all/files/css/master.css\" type=\"text/css\" rel=\"stylesheet\"/>\n\t<!--[if lt IE 7]><link rel=\"stylesheet\" type=\"text/css\" href=\"/_common-nhp-all/files/css/ie_lt7.css\" media=\"all\" /><![endif]-->\n\t<link media=\"all\" href=\"/_common-nhp-all/files/css/master.css\" type=\"text/css\" rel=\"stylesheet\"/>\n\t<link media=\"all\" href=\"/_common-nhp-all/files/css/provider_search.css\" type=\"text/css\" rel=\"stylesheet\"/>\n\t<link media=\"handheld, only screen and (max-device-width: 480px)\" href=\"/_common-nhp-all/files/css/handheld.css\" type=\"text/css\" rel=\"stylesheet\"/>\n \t\n\t<script type=\"text/javascript\">try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {}</script>\n\t<script src=\"/_common-nhp-all/files/js/jquery-1.4.2.min.js\" type=\"text/javascript\"></script>\n\t<script src=\"/_common-nhp-all/files/js/jquery-alerts.js\" type=\"text/javascript\"></script>\n\t<script src=\"/_common-nhp-all/files/js/superfish.js\" type=\"text/javascript\"></script>\n\t<script src=\"/_common-nhp-all/files/js/jquery.colorbox-min.js\" type=\"text/javascript\"></script>\n\t<script src=\"/_common-nhp-all/files/js/nhp-library.js\" type=\"text/javascript\"></script>\n      \n<title> | Health Insurance Plans | Network Health, Wisconsin</title>\n</head>\n<body class=\"providerDetail\">\n<div id=\"container\">\n<div id=\"masthead\">\n\t\t\t<a href=\"../../../index.aspx\"><img src=\"/_common-nhp-all/files/images/template/logo-nhp.gif\" height=\"59\" width=\"160\" alt=\"Network Health\" id=\"logo\"/></a>\n\t\t\t\n\t\t\t<p class=\"contactInfo\">800-826-0940 | 920-720-1300</p>\n\t\t\t<ul id=\"skipTo\">\n\t\t\t\t<li id=\"skipToPrimary\"><a href=\"#contentPrimaryStart\">Skip to primary content</a></li>\n\t\t\t\t<li id=\"skipToSecondary\"><a href=\"#contentSecondaryStart\">Skip to additional (left sidebar) content</a></li>\n\t\t\t\t<li id=\"skipToTertiary\"><a href=\"#contentTertiaryStart\">Skip to additional (right sidebar) content</a></li>\n\t\t\t</ul>\n\t\t\t<form action=\"http://thunder.affinityhealth.org/texis/search/main.html\" id=\"siteSearch\" method=\"get\">\n\t\t\t\t<div>\n\t\t\t\t\t<label for=\"searchWords\">Search: </label>\n\t\t\t\t\t<input name=\"query\" value=\"Search...\" type=\"text\" id=\"searchWords\" size=\"15\"/>\n\t\t\t\t\t<input src=\"/_common-nhp-all/files/images/template/button-go.gif\" name=\"searchSubmit\" title=\"Start search\" value=\"go\" alt=\"Start search\" type=\"image\" id=\"searchSubmit\"/>\n\t\t\t\t\t<input type=\"hidden\" class=\"hidden\" value=\"nnhp\" name=\"pr\"/>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t\n\n<ul id=\"textSizer\">\n<li class=\"small\"><a href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=s\" title=\"Set small text size...\"><span>Small Text</span></a></li>\n<li class=\"medium\"><a href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=m\" title=\"Set medium text size...\"><span>Med Text</span></a></li>\n<li class=\"large\"><a href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=l\" title=\"Set large text size...\"><span>Large Text</span></a></li>\n</ul>\n\n\t\t\t<ul class=\"columns7\" id=\"navUtility\"><li class=\"first\"><a href=\"../../../index.aspx\">Home</a><ul><li class=\"first\"><a href=\"http://www.nppdrugplans.com/\" class=\"linkNewWindow\">Medicare Plans</a></li><li><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Members</a></li><li><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Brokers</a></li><li><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Providers</a></li><li><a href=\"../../../health-insurance-info/employers/index.aspx\">Employers</a></li><li><a href=\"../../../health-insurance-info/visitors/index.aspx\">Visitors</a></li></ul></li><li><a href=\"../my-account/index.aspx\">Sign In</a><ul><li class=\"first\"><a href=\"https://nhp.healthinsurance-asp.com/expressweb/user/LoginEdit.action\" class=\"navigationNotice linkNewWindow\" title=\"To access the Broker Portal, please log in.\">Brokers, Group Health</a></li><li><a href=\"https://nhp.healthtrioconnect.com/loginNHP.cfm\">Members, Group Health</a></li><li><a href=\"https://nppproviderweb.tmghealth.com/\" class=\"navigationNotice linkNewWindow\" title=\"To access the Medicare Provider Portal, please log in.\">Providers, Medicare Plans</a></li></ul></li><li><a href=\"index.aspx\">Find a Doc/Location</a></li><li><a href=\"../contact-us/index.aspx\">Contact Us</a><ul><li class=\"first\"><a href=\"../../brokers/contact-us/index.aspx\">Brokers</a></li><li><a href=\"../../employers/contact-us/index.aspx\">Employers</a></li><li><a href=\"../../group-members/contact-us/index.aspx\">Members</a></li><li><a href=\"../../providers/contact-us/index.aspx\">Providers</a></li><li><a href=\"http://www.nppdrugplans.com\" class=\"linkNewWindow\">Medicare</a></li></ul></li><li><a href=\"http://www.networkhealth.com/blog\">Blog</a></li><li><a href=\"http://www.networkhealth.com/endthejargon\">End the Jargon</a></li><li><a href=\"../about-us/index.aspx\">About Us</a><ul><li><a href=\"../about-us/jobs/index.aspx\">Jobs</a></li><li><a href=\"../about-us/quality-initiatives/index.aspx\">Quality Initiatives</a><ul><li><a href=\"../about-us/quality-initiatives/hedis-cahps-results.aspx\">Quality Measures</a></li><li><a href=\"../about-us/quality-initiatives/hedis-cahps-results-medicare.aspx\">HEDIS and CAHPS</a></li></ul></li></ul></li></ul>\n</div>\n<div id=\"navPrimaryWrap\">\n<div id=\"navPrimaryMask\">\n<div></div>\n</div>\n<ul class=\"columns5\" id=\"navPrimary\"><li class=\"first\"><a href=\"../../../health-insurance-info/members/index.aspx\">For Members</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Group Health Members</a></li><li><a href=\"http://www.nppdrugplans.com\" class=\"linkNewWindow\">Medicare Members</a></li><li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\">Medicaid/BadgerCare Plus</a></li><li><a href=\"../../../health-insurance-info/members/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></li><li><a href=\"../../../health-insurance-info/brokers/index.aspx\">For Brokers</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Group Health</a></li><li><a href=\"http://www.nppdrugplans.com/\" class=\"linkNewWindow\">Medicare</a></li><li><a href=\"../../../health-insurance-info/brokers/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></li><li><a href=\"../../../health-insurance-info/employers/index.aspx\">For Employers</a></li><li><a href=\"../../../health-insurance-info/providers/index.aspx\">For Providers</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Commercial Plans</a></li><li><a href=\"http://www.nppdrugplans.com\" class=\"linkNewWindow\">Medicare</a></li></ul></li><li><a href=\"../../../health-insurance-info/visitors/index.aspx\">For Visitors</a></li></ul></div>\n<div id=\"content\">\n<div id=\"contentWrapPrimarySecondary\">\n<div id=\"contentPrimary\"><a id=\"contentPrimaryStart\" name=\"contentPrimaryStart\"></a>      <!-- IMPLEMENTATION NOTE: Script-generated provider detail code here -->\n\n<form action=\"provider-search-provider-detail.aspx?Id=P00138746&amp;Network=HMO%2fPOS\" method=\"post\" id=\"providerDetail\">\n<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"/wEPDwUKLTEyOTMyMzU1NA9kFgICBA9kFgoCAQ8PFgIeBFRleHQFXFBldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2tlbGwsIE1EZGQCAw8PFgIeB1Zpc2libGVoZGQCCQ8PFgIfAAUBTWRkAgsPFCsAAg8WBB4LXyFEYXRhQm91bmRnHgtfIUl0ZW1Db3VudAIDZGQWAmYPZBYCAgEPZBYGAgEPZBYYAgEPDxYCHgtOYXZpZ2F0ZVVybAWGAXByb3ZpZGVyLXNlYXJjaC1sb2NhdGlvbi1kZXRhaWwuYXNweD8yMDArVGhlZGErQ2xhcmsrTWVkaWNhbCtQbHorU1RFKzMyMCsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyssTmVlbmFoLFdJLDU0OTU2ZBYCZg8PFgIeCEltYWdlVXJsBb4BaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzL2FwaS9zdGF0aWNtYXA/c2l6ZT05NHg5NCZzZW5zb3I9ZmFsc2UmbWFya2Vycz1jb2xvcjpibHVlfGxhYmVsOkF8MjAwK1RoZWRhK0NsYXJrK01lZGljYWwrUGx6K1NURSszMjArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLE5lZW5haCxXSSw1NDk1NmRkAgMPDxYCHwQFhgFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MjAwK1RoZWRhK0NsYXJrK01lZGljYWwrUGx6K1NURSszMjArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLE5lZW5haCxXSSw1NDk1NmRkAgUPDxYCHwAFHUFwcGxldG9uIENhcmRpb2xvZ3kgVGhlZGFjYXJlZGQCBw8PFgIfAAU8Q2FyZGlvbG9neS9DYXJkaW92YXNjdWxhciBEaXNlYXNlLCBDYXJkaW9sb2d5LUludGVydmVudGlvbmFsZGQCCQ8PFgIfAAUOKDkyMCkgNzIyLTMzNDFkZAILDw8WAh8ABVEyMDAgVGhlZGEgQ2xhcmsgTWVkaWNhbCBQbHogU1RFIDMyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZAINDxYCHwFoZAIPDw8WAh8ABQZOZWVuYWhkZAIRDw8WAh8ABQJXSWRkAhMPDxYCHwAFBTU0OTU2ZGQCFQ8PFgIfAAUBWWRkAhkPFgIfAWhkAgIPZBYYAgEPDxYCHwQFiAFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MTgxOCtOK01lYWRlK1N0KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLEFwcGxldG9uLFdJLDU0OTExZBYCZg8PFgIfBQXAAWh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvc3RhdGljbWFwP3NpemU9OTR4OTQmc2Vuc29yPWZhbHNlJm1hcmtlcnM9Y29sb3I6Ymx1ZXxsYWJlbDpBfDE4MTgrTitNZWFkZStTdCsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxBcHBsZXRvbixXSSw1NDkxMWRkAgMPDxYCHwQFiAFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MTgxOCtOK01lYWRlK1N0KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLEFwcGxldG9uLFdJLDU0OTExZGQCBQ8PFgIfAAUdQXBwbGV0b24gQ2FyZGlvbG9neSBUaGVkYWNhcmVkZAIHDw8WAh8ABTxDYXJkaW9sb2d5L0NhcmRpb3Zhc2N1bGFyIERpc2Vhc2UsIENhcmRpb2xvZ3ktSW50ZXJ2ZW50aW9uYWxkZAIJDw8WAh8ABQ4oOTIwKSA3MzEtODkwMGRkAgsPDxYCHwAFUTE4MTggTiBNZWFkZSBTdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkAg0PFgIfAWhkAg8PDxYCHwAFCEFwcGxldG9uZGQCEQ8PFgIfAAUCV0lkZAITDw8WAh8ABQU1NDkxMWRkAhUPDxYCHwAFAVlkZAIZDxYCHwFoZAIDD2QWGAIBDw8WAh8EBYcBcHJvdmlkZXItc2VhcmNoLWxvY2F0aW9uLWRldGFpbC5hc3B4PzYxNCtNZW1vcmlhbCtEcisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxDaGlsdG9uLFdJLDUzMDE0ZBYCZg8PFgIfBQW/AWh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvc3RhdGljbWFwP3NpemU9OTR4OTQmc2Vuc29yPWZhbHNlJm1hcmtlcnM9Y29sb3I6Ymx1ZXxsYWJlbDpBfDYxNCtNZW1vcmlhbCtEcisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxDaGlsdG9uLFdJLDUzMDE0ZGQCAw8PFgIfBAWHAXByb3ZpZGVyLXNlYXJjaC1sb2NhdGlvbi1kZXRhaWwuYXNweD82MTQrTWVtb3JpYWwrRHIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyssQ2hpbHRvbixXSSw1MzAxNGRkAgUPDxYCHwAFHUFwcGxldG9uIENhcmRpb2xvZ3kgVGhlZGFjYXJlZGQCBw8PFgIfAAU8Q2FyZGlvbG9neS9DYXJkaW92YXNjdWxhciBEaXNlYXNlLCBDYXJkaW9sb2d5LUludGVydmVudGlvbmFsZGQCCQ8PFgIfAAUOKDkyMCkgNzMxLTg5MDBkZAILDw8WAh8ABVE2MTQgTWVtb3JpYWwgRHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZAINDxYCHwFoZAIPDw8WAh8ABQdDaGlsdG9uZGQCEQ8PFgIfAAUCV0lkZAITDw8WAh8ABQU1MzAxNGRkAhUPDxYCHwAFAVlkZAIZDxYCHwFoZAINDw9kDxAWAmYCARYCFgIeDlBhcmFtZXRlclZhbHVlBQlQMDAxMzg3NDYWAh8GBQdITU8vUE9TFgICBQIFZGQYAQUQTG9jYXRpb25MaXN0Vmlldw8UKwAOZGRkZGRkZBQrAANkZGQCA2RkZGYC/////w9kiYzcYC7kJy/RlNHEM8ikELx+xieKvWPiapcuBaZPyL0=\" id=\"__VIEWSTATE\"/>\n\n\t<div>\n\t\t<h1>\n\t\t\t<span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;name&quot;], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;name&quot;}}\" id=\"ProviderNameLabel\">Peter                                                                             Ackell, MD</span>\n\t\t</h1>\n\t\t<h2>\n\t\t\t\n\t\t\t<span id=\"LanguageValuesLabel\"></span>\n\t\t</h2>\n\t\t<h2>\n\t\t\t<span id=\"GenderLabel\">Gender:</span>\n\t\t\t<span id=\"GenderValueLabel\">M</span>\n\t\t</h2>\n\t\t\n\t\t\t\t<div id=\"LocationListView_itemPlaceholderContainer\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" id=\"LocationListView_LocationMapHyperLink_0\" target=\"_blank\"><img src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" alt=\"Get Directions\" id=\"LocationListView_LocationMapImage_0\"/></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" id=\"LocationListView_LocationHyperLink_0\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;orgname&quot;], &quot;variant&quot;: 1, &quot;annotations&quot;: {&quot;content&quot;: &quot;orgname&quot;}}\" id=\"LocationListView_LocationLabel_0\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n                        <span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;specialty&quot;], &quot;variant&quot;: 1, &quot;annotations&quot;: {&quot;content&quot;: &quot;specialty&quot;}}\" id=\"LocationListView_SpecialtyValuesLabel_0\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;phone_number&quot;], &quot;variant&quot;: 1, &quot;annotations&quot;: {&quot;content&quot;: &quot;phone_number&quot;}, &quot;generated&quot;: false}\" id=\"LocationListView_AppointmentPhoneLabel_0\">(920) 722-3341</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li data-scrapy-annotate=\"{&quot;required&quot;: [&quot;address_line1&quot;], &quot;variant&quot;: 1, &quot;annotations&quot;: {&quot;content&quot;: &quot;address_line1&quot;}, &quot;generated&quot;: false}\">\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_0\">200 Theda Clark Medical Plz STE 320                                              </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li data-scrapy-annotate=\"{&quot;required&quot;: [&quot;address_line2&quot;], &quot;variant&quot;: 1, &quot;annotations&quot;: {&quot;content&quot;: &quot;address_line2&quot;}, &quot;generated&quot;: false}\">\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_0\">Neenah</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_0\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_0\">54956</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_0\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t   \n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" id=\"LocationListView_LocationMapHyperLink_1\" target=\"_blank\"><img src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" alt=\"Get Directions\" id=\"LocationListView_LocationMapImage_1\"/></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" id=\"LocationListView_LocationHyperLink_1\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span id=\"LocationListView_LocationLabel_1\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t<span id=\"LocationListView_SpecialtyValuesLabel_1\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AppointmentPhoneLabel_1\">(920) 731-8900</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_1\">1818 N Meade St                                                                  </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_1\">Appleton</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_1\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_1\">54911</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_1\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" id=\"LocationListView_LocationMapHyperLink_2\" target=\"_blank\"><img src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" alt=\"Get Directions\" id=\"LocationListView_LocationMapImage_2\"/></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a href=\"provider-search-location-detail.aspx?614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" id=\"LocationListView_LocationHyperLink_2\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span data-scrapy-annotate=\"{&quot;required&quot;: [], &quot;variant&quot;: 2, &quot;annotations&quot;: {&quot;content&quot;: &quot;orgname&quot;}}\" id=\"LocationListView_LocationLabel_2\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n                        <span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;specialty&quot;], &quot;variant&quot;: 2, &quot;annotations&quot;: {&quot;content&quot;: &quot;specialty&quot;}}\" id=\"LocationListView_SpecialtyValuesLabel_2\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span data-scrapy-annotate=\"{&quot;required&quot;: [&quot;phone_number&quot;], &quot;variant&quot;: 2, &quot;annotations&quot;: {&quot;content&quot;: &quot;phone_number&quot;}, &quot;generated&quot;: false}\" id=\"LocationListView_AppointmentPhoneLabel_2\">(920) 731-8900</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li data-scrapy-annotate=\"{&quot;required&quot;: [&quot;address_line1&quot;], &quot;variant&quot;: 2, &quot;annotations&quot;: {&quot;content&quot;: &quot;address_line1&quot;}}\">\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_2\">614 Memorial Dr                                                                  </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li data-scrapy-annotate=\"{&quot;required&quot;: [&quot;address_line2&quot;], &quot;variant&quot;: 2, &quot;annotations&quot;: {&quot;content&quot;: &quot;address_line2&quot;}}\">\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_2\">Chilton</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_2\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_2\">53014</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_2\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t   \n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\n\t\n\t\t\n\t\n\t\n\t</div>\n    <a href=\"provider-search-results.aspx\">Back to Search Results</a>\n\t</form>\n  \n</div>\n<div id=\"contentSecondary\"><a id=\"contentSecondaryStart\" name=\"contentSecondaryStart\"></a> </div>\n</div>\n</div>\n</div>\n<div id=\"footerWrap\">\n<div id=\"footer\"><h3>920-720-1300 </h3> <div class=\"columns5\" id=\"navFooter\"><div class=\"subSiteNavBlock first\"><h4><a href=\"../../../health-insurance-info/members/index.aspx\">For Members</a></h4><ul><li><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Group Health Members</a></li><li><a href=\"http://www.nppdrugplans.com\" class=\"linkNewWindow\">Medicare Members</a></li><li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\">Medicaid/BadgerCare Plus</a></li><li><a href=\"../../../health-insurance-info/members/Empower.aspx\">Millennium</a></li><li><a href=\"../../../health-insurance-info/members/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/brokers/index.aspx\">For Brokers</a></h4><ul><li><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Group Health</a></li><li><a href=\"http://www.nppdrugplans.com/\" class=\"linkNewWindow\">Medicare</a></li><li><a href=\"../../../health-insurance-info/brokers/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/employers/index.aspx\">For Employers</a></h4><ul><li><a href=\"../../../health-insurance-info/employers/health-management/index.aspx\">Health Management</a></li><li><a href=\"../../../health-insurance-info/employers/plans-and-services/index.aspx\">Plans &amp; Services</a></li><li><a href=\"../../../health-insurance-info/employers/tools-and-resources/index.aspx\">Tools &amp; Resources</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/providers/index.aspx\">For Providers</a></h4><ul><li><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Commercial Plans</a></li><li><a href=\"http://www.nppdrugplans.com\" class=\"linkNewWindow\">Medicare</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/visitors/index.aspx\">For Visitors</a></h4><ul><li><a href=\"../../../health-insurance-info/visitors/individual_family.aspx\">I'm a Visitor</a></li></ul></div></div> \t\t\t<div class=\"subSiteNavBlock\" id=\"navFooterUserColumn\">\n\t\t\t\t<h4>Other Links</h4>\n\t\t\t\t<ul>\n<li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\" target=\"_blank\" title=\"Medicaid\">Medicaid</a></li>\n</ul>\n\t\t\t</div>\n <ul class=\"utilityLinks\">\n\t\t\t\t<li class=\"first\"><a href=\"../../../privacy-terms-of-use/index.aspx\">Privacy Policies &amp; Terms of Use</a></li>\n\t\t\t\t<li><a href=\"../../../sitemap.aspx\">Site Map</a></li>\n\t\t\t\t<li><a href=\"../../../news/index.aspx\">News</a></li>\n\t\t\t</ul> <p class=\"notices\">Copyright 2012 Network Health Plan and Network Health Insurance Corporation. All rights reserved. <br/> HMO plans underwritten by Network Health Plan. POS plans underwritten by Network Health Insurance Corporation, or underwritten by <br/> Network Health Insurance Corporation and Network Health Plan. Self-funded HMO and POS plans administered by Network Health Plan.\n\t\t\t</p></div>\n</div>\n<script src=\"/_common-nhp-all/files/js/onload-common.js\" type=\"text/javascript\"></script>\n    <script type=\"text/javascript\">\n    //<![CDATA[\n    \tif ($(window).width() > 599) {\n\t   \t$('#providerDetail').find('.mapWrap a').colorbox({initialWidth: '100px', initialHeight: '100px', innerWidth: 530, innerHeight: 535, title: 'Location', iframe: true, fixed: true});\n\t}\n\telse {\n\t    \t$('#providerDetail').find('.mapWrap a').attr('target', '');\n\t}\n    // ]]>\n    </script>\n\n\n\t<script type=\"text/javascript\">\n\t\t//<![CDATA[\n\t\tvar gaJsHost = ((\"https:\" == document.location.protocol) ? \"https://ssl.\" : \"http://www.\");\n\t\tdocument.write(unescape(\"%3Cscript src='\" + gaJsHost + \"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\"));\n\t\t// ]]>\n\t</script>\n\t<script type=\"text/javascript\">\n\t\t//<![CDATA[\n\t\ttry {\n\t\t\tvar pageTracker = _gat._getTracker(\"UA-10612616-2\");\n\t\t\tpageTracker._trackPageview();\n\t\t} catch(err) { }\n\t\t// ]]>\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/networkhealth.com/networkhealthtemplate/original_body.html",
    "content": "\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">\n\n<head>\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" />\n<meta content=\"en\" http-equiv=\"content-language\" />\n<meta content=\"IE=edge\" http-equiv=\"X-UA-Compatible\" />\n<meta content=\"en\" name=\"language\" />\n<meta content=\"true\" name=\"MSSmartTagsPreventParsing\" />\n<meta content=\"width=device-width; initial-scale=1.0;\" name=\"viewport\" />\n<link href=\"../../../favicon.ico\" rel=\"shortcut icon\" type=\"image/x-icon\" /> \t\n\t<link href=\"/_common-nhp-all/files/css/master.css\" media=\"all\" rel=\"stylesheet\" type=\"text/css\" />\n\t<!--[if lt IE 7]><link rel=\"stylesheet\" type=\"text/css\" href=\"/_common-nhp-all/files/css/ie_lt7.css\" media=\"all\" /><![endif]-->\n\t<link href=\"/_common-nhp-all/files/css/master.css\" media=\"all\" rel=\"stylesheet\" type=\"text/css\" />\n\t<link href=\"/_common-nhp-all/files/css/provider_search.css\" media=\"all\" rel=\"stylesheet\" type=\"text/css\" />\n\t<link href=\"/_common-nhp-all/files/css/handheld.css\" media=\"handheld, only screen and (max-device-width: 480px)\" rel=\"stylesheet\" type=\"text/css\" />\n \t\n\t<script type=\"text/javascript\">try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {}</script>\n\t<script src=\"/_common-nhp-all/files/js/jquery-1.4.2.min.js\" type=\"text/javascript\" ></script>\n\t<script src=\"/_common-nhp-all/files/js/jquery-alerts.js\" type=\"text/javascript\" ></script>\n\t<script src=\"/_common-nhp-all/files/js/superfish.js\" type=\"text/javascript\" ></script>\n\t<script src=\"/_common-nhp-all/files/js/jquery.colorbox-min.js\" type=\"text/javascript\" ></script>\n\t<script src=\"/_common-nhp-all/files/js/nhp-library.js\" type=\"text/javascript\" ></script>\n      \n<title> | Health Insurance Plans | Network Health, Wisconsin</title>\n</head>\n<body class=\"providerDetail\">\n<div id=\"container\">\n<div id=\"masthead\">\n\t\t\t<a href=\"../../../index.aspx\"><img alt=\"Network Health\" height=\"59\" id=\"logo\" src=\"/_common-nhp-all/files/images/template/logo-nhp.gif\" width=\"160\" /></a>\n\t\t\t\n\t\t\t<p class=\"contactInfo\">800-826-0940 | 920-720-1300</p>\n\t\t\t<ul id=\"skipTo\">\n\t\t\t\t<li id=\"skipToPrimary\"><a href=\"#contentPrimaryStart\">Skip to primary content</a></li>\n\t\t\t\t<li id=\"skipToSecondary\"><a href=\"#contentSecondaryStart\">Skip to additional (left sidebar) content</a></li>\n\t\t\t\t<li id=\"skipToTertiary\"><a href=\"#contentTertiaryStart\">Skip to additional (right sidebar) content</a></li>\n\t\t\t</ul>\n\t\t\t<form action=\"http://thunder.affinityhealth.org/texis/search/main.html\" id=\"siteSearch\" method=\"get\">\n\t\t\t\t<div>\n\t\t\t\t\t<label for=\"searchWords\">Search: </label>\n\t\t\t\t\t<input id=\"searchWords\" name=\"query\" size=\"15\" type=\"text\" value=\"Search...\" />\n\t\t\t\t\t<input alt=\"Start search\" id=\"searchSubmit\" name=\"searchSubmit\" src=\"/_common-nhp-all/files/images/template/button-go.gif\" title=\"Start search\" type=\"image\" value=\"go\" />\n\t\t\t\t\t<input class=\"hidden\" name=\"pr\" type=\"hidden\" value=\"nnhp\" />\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t\t\n\n<ul id=\"textSizer\">\n<li class=\"small\"><a title=\"Set small text size...\" href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=s\"><span>Small Text</span></a></li>\n<li class=\"medium\"><a title=\"Set medium text size...\" href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=m\"><span>Med Text</span></a></li>\n<li class=\"large\"><a title=\"Set large text size...\" href=\"/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?text=l\"><span>Large Text</span></a></li>\n</ul>\n\n\t\t\t<ul class=\"columns7\" id=\"navUtility\"><li class=\"first\"><a href=\"../../../index.aspx\">Home</a><ul><li class=\"first\"><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com/\">Medicare Plans</a></li><li><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Members</a></li><li><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Brokers</a></li><li><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Providers</a></li><li><a href=\"../../../health-insurance-info/employers/index.aspx\">Employers</a></li><li><a href=\"../../../health-insurance-info/visitors/index.aspx\">Visitors</a></li></ul></li><li><a href=\"../my-account/index.aspx\">Sign In</a><ul><li class=\"first\"><a class=\"navigationNotice linkNewWindow\" href=\"https://nhp.healthinsurance-asp.com/expressweb/user/LoginEdit.action\" title=\"To access the Broker Portal, please log in.\">Brokers, Group Health</a></li><li><a href=\"https://nhp.healthtrioconnect.com/loginNHP.cfm\">Members, Group Health</a></li><li><a class=\"navigationNotice linkNewWindow\" href=\"https://nppproviderweb.tmghealth.com/\" title=\"To access the Medicare Provider Portal, please log in.\">Providers, Medicare Plans</a></li></ul></li><li><a href=\"index.aspx\">Find a Doc/Location</a></li><li><a href=\"../contact-us/index.aspx\">Contact Us</a><ul><li class=\"first\"><a href=\"../../brokers/contact-us/index.aspx\">Brokers</a></li><li><a href=\"../../employers/contact-us/index.aspx\">Employers</a></li><li><a href=\"../../group-members/contact-us/index.aspx\">Members</a></li><li><a href=\"../../providers/contact-us/index.aspx\">Providers</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com\">Medicare</a></li></ul></li><li><a href=\"http://www.networkhealth.com/blog\">Blog</a></li><li><a href=\"http://www.networkhealth.com/endthejargon\">End the Jargon</a></li><li><a href=\"../about-us/index.aspx\">About Us</a><ul><li><a href=\"../about-us/jobs/index.aspx\">Jobs</a></li><li><a href=\"../about-us/quality-initiatives/index.aspx\">Quality Initiatives</a><ul><li><a href=\"../about-us/quality-initiatives/hedis-cahps-results.aspx\">Quality Measures</a></li><li><a href=\"../about-us/quality-initiatives/hedis-cahps-results-medicare.aspx\">HEDIS and CAHPS</a></li></ul></li></ul></li></ul>\n</div>\n<div id=\"navPrimaryWrap\">\n<div id=\"navPrimaryMask\">\n<div ></div>\n</div>\n<ul class=\"columns5\" id=\"navPrimary\"><li class=\"first\"><a href=\"../../../health-insurance-info/members/index.aspx\">For Members</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Group Health Members</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com\">Medicare Members</a></li><li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\">Medicaid/BadgerCare Plus</a></li><li><a href=\"../../../health-insurance-info/members/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></li><li><a href=\"../../../health-insurance-info/brokers/index.aspx\">For Brokers</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Group Health</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com/\">Medicare</a></li><li><a href=\"../../../health-insurance-info/brokers/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></li><li><a href=\"../../../health-insurance-info/employers/index.aspx\">For Employers</a></li><li><a href=\"../../../health-insurance-info/providers/index.aspx\">For Providers</a><ul><li class=\"first\"><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Commercial Plans</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com\">Medicare</a></li></ul></li><li><a href=\"../../../health-insurance-info/visitors/index.aspx\">For Visitors</a></li></ul></div>\n<div id=\"content\">\n<div id=\"contentWrapPrimarySecondary\">\n<div id=\"contentPrimary\"><a id=\"contentPrimaryStart\" name=\"contentPrimaryStart\" ></a>      <!-- IMPLEMENTATION NOTE: Script-generated provider detail code here -->\n\n<form method=\"post\" action=\"provider-search-provider-detail.aspx?Id=P00138746&amp;Network=HMO%2fPOS\" id=\"providerDetail\">\n<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"/wEPDwUKLTEyOTMyMzU1NA9kFgICBA9kFgoCAQ8PFgIeBFRleHQFXFBldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2tlbGwsIE1EZGQCAw8PFgIeB1Zpc2libGVoZGQCCQ8PFgIfAAUBTWRkAgsPFCsAAg8WBB4LXyFEYXRhQm91bmRnHgtfIUl0ZW1Db3VudAIDZGQWAmYPZBYCAgEPZBYGAgEPZBYYAgEPDxYCHgtOYXZpZ2F0ZVVybAWGAXByb3ZpZGVyLXNlYXJjaC1sb2NhdGlvbi1kZXRhaWwuYXNweD8yMDArVGhlZGErQ2xhcmsrTWVkaWNhbCtQbHorU1RFKzMyMCsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyssTmVlbmFoLFdJLDU0OTU2ZBYCZg8PFgIeCEltYWdlVXJsBb4BaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzL2FwaS9zdGF0aWNtYXA/c2l6ZT05NHg5NCZzZW5zb3I9ZmFsc2UmbWFya2Vycz1jb2xvcjpibHVlfGxhYmVsOkF8MjAwK1RoZWRhK0NsYXJrK01lZGljYWwrUGx6K1NURSszMjArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLE5lZW5haCxXSSw1NDk1NmRkAgMPDxYCHwQFhgFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MjAwK1RoZWRhK0NsYXJrK01lZGljYWwrUGx6K1NURSszMjArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLE5lZW5haCxXSSw1NDk1NmRkAgUPDxYCHwAFHUFwcGxldG9uIENhcmRpb2xvZ3kgVGhlZGFjYXJlZGQCBw8PFgIfAAU8Q2FyZGlvbG9neS9DYXJkaW92YXNjdWxhciBEaXNlYXNlLCBDYXJkaW9sb2d5LUludGVydmVudGlvbmFsZGQCCQ8PFgIfAAUOKDkyMCkgNzIyLTMzNDFkZAILDw8WAh8ABVEyMDAgVGhlZGEgQ2xhcmsgTWVkaWNhbCBQbHogU1RFIDMyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZAINDxYCHwFoZAIPDw8WAh8ABQZOZWVuYWhkZAIRDw8WAh8ABQJXSWRkAhMPDxYCHwAFBTU0OTU2ZGQCFQ8PFgIfAAUBWWRkAhkPFgIfAWhkAgIPZBYYAgEPDxYCHwQFiAFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MTgxOCtOK01lYWRlK1N0KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLEFwcGxldG9uLFdJLDU0OTExZBYCZg8PFgIfBQXAAWh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvc3RhdGljbWFwP3NpemU9OTR4OTQmc2Vuc29yPWZhbHNlJm1hcmtlcnM9Y29sb3I6Ymx1ZXxsYWJlbDpBfDE4MTgrTitNZWFkZStTdCsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxBcHBsZXRvbixXSSw1NDkxMWRkAgMPDxYCHwQFiAFwcm92aWRlci1zZWFyY2gtbG9jYXRpb24tZGV0YWlsLmFzcHg/MTgxOCtOK01lYWRlK1N0KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLEFwcGxldG9uLFdJLDU0OTExZGQCBQ8PFgIfAAUdQXBwbGV0b24gQ2FyZGlvbG9neSBUaGVkYWNhcmVkZAIHDw8WAh8ABTxDYXJkaW9sb2d5L0NhcmRpb3Zhc2N1bGFyIERpc2Vhc2UsIENhcmRpb2xvZ3ktSW50ZXJ2ZW50aW9uYWxkZAIJDw8WAh8ABQ4oOTIwKSA3MzEtODkwMGRkAgsPDxYCHwAFUTE4MTggTiBNZWFkZSBTdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkAg0PFgIfAWhkAg8PDxYCHwAFCEFwcGxldG9uZGQCEQ8PFgIfAAUCV0lkZAITDw8WAh8ABQU1NDkxMWRkAhUPDxYCHwAFAVlkZAIZDxYCHwFoZAIDD2QWGAIBDw8WAh8EBYcBcHJvdmlkZXItc2VhcmNoLWxvY2F0aW9uLWRldGFpbC5hc3B4PzYxNCtNZW1vcmlhbCtEcisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxDaGlsdG9uLFdJLDUzMDE0ZBYCZg8PFgIfBQW/AWh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcy9hcGkvc3RhdGljbWFwP3NpemU9OTR4OTQmc2Vuc29yPWZhbHNlJm1hcmtlcnM9Y29sb3I6Ymx1ZXxsYWJlbDpBfDYxNCtNZW1vcmlhbCtEcisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyxDaGlsdG9uLFdJLDUzMDE0ZGQCAw8PFgIfBAWHAXByb3ZpZGVyLXNlYXJjaC1sb2NhdGlvbi1kZXRhaWwuYXNweD82MTQrTWVtb3JpYWwrRHIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyssQ2hpbHRvbixXSSw1MzAxNGRkAgUPDxYCHwAFHUFwcGxldG9uIENhcmRpb2xvZ3kgVGhlZGFjYXJlZGQCBw8PFgIfAAU8Q2FyZGlvbG9neS9DYXJkaW92YXNjdWxhciBEaXNlYXNlLCBDYXJkaW9sb2d5LUludGVydmVudGlvbmFsZGQCCQ8PFgIfAAUOKDkyMCkgNzMxLTg5MDBkZAILDw8WAh8ABVE2MTQgTWVtb3JpYWwgRHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZAINDxYCHwFoZAIPDw8WAh8ABQdDaGlsdG9uZGQCEQ8PFgIfAAUCV0lkZAITDw8WAh8ABQU1MzAxNGRkAhUPDxYCHwAFAVlkZAIZDxYCHwFoZAINDw9kDxAWAmYCARYCFgIeDlBhcmFtZXRlclZhbHVlBQlQMDAxMzg3NDYWAh8GBQdITU8vUE9TFgICBQIFZGQYAQUQTG9jYXRpb25MaXN0Vmlldw8UKwAOZGRkZGRkZBQrAANkZGQCA2RkZGYC/////w9kiYzcYC7kJy/RlNHEM8ikELx+xieKvWPiapcuBaZPyL0=\" />\n\n\t<div>\n\t\t<h1>\n\t\t\t<span id=\"ProviderNameLabel\">Peter                                                                             Ackell, MD</span>\n\t\t</h1>\n\t\t<h2>\n\t\t\t\n\t\t\t<span id=\"LanguageValuesLabel\"></span>\n\t\t</h2>\n\t\t<h2>\n\t\t\t<span id=\"GenderLabel\">Gender:</span>\n\t\t\t<span id=\"GenderValueLabel\">M</span>\n\t\t</h2>\n\t\t\n\t\t\t\t<div id=\"LocationListView_itemPlaceholderContainer\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationMapHyperLink_0\" href=\"provider-search-location-detail.aspx?200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" target=\"_blank\"><img id=\"LocationListView_LocationMapImage_0\" src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" alt=\"Get Directions\" /></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationHyperLink_0\" href=\"provider-search-location-detail.aspx?200+Theda+Clark+Medical+Plz+STE+320++++++++++++++++++++++++++++++++++++++++++++++,Neenah,WI,54956\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span id=\"LocationListView_LocationLabel_0\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n                        <span id=\"LocationListView_SpecialtyValuesLabel_0\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AppointmentPhoneLabel_0\">(920) 722-3341</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_0\">200 Theda Clark Medical Plz STE 320                                              </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_0\">Neenah</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_0\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_0\">54956</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_0\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t   \n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationMapHyperLink_1\" href=\"provider-search-location-detail.aspx?1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" target=\"_blank\"><img id=\"LocationListView_LocationMapImage_1\" src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" alt=\"Get Directions\" /></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationHyperLink_1\" href=\"provider-search-location-detail.aspx?1818+N+Meade+St++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Appleton,WI,54911\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span id=\"LocationListView_LocationLabel_1\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t<span id=\"LocationListView_SpecialtyValuesLabel_1\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AppointmentPhoneLabel_1\">(920) 731-8900</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_1\">1818 N Meade St                                                                  </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_1\">Appleton</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_1\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_1\">54911</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_1\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"mapWrap\">\n\t\t\t\t\t\t<div class=\"gmap\">\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationMapHyperLink_2\" href=\"provider-search-location-detail.aspx?614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" target=\"_blank\"><img id=\"LocationListView_LocationMapImage_2\" src=\"http://maps.google.com/maps/api/staticmap?size=94x94&amp;sensor=false&amp;markers=color:blue|label:A|614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" alt=\"Get Directions\" /></a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<a id=\"LocationListView_LocationHyperLink_2\" href=\"provider-search-location-detail.aspx?614+Memorial+Dr++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,Chilton,WI,53014\" target=\"_blank\">View Larger</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"detailWrap\">\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t<span id=\"LocationListView_LocationLabel_2\">Appleton Cardiology Thedacare</span>\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<h4>\n\t\t\t\t\t\t\tSpecialties:\n\t\t\t\t\t\t</h4>\n                        <span id=\"LocationListView_SpecialtyValuesLabel_2\">Cardiology/Cardiovascular Disease, Cardiology-Interventional</span>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AppointmentPhoneLabel_2\">(920) 731-8900</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationAddressLabel_2\">614 Memorial Dr                                                                  </span>\n\t\t\t\t\t\t\t</li>\n                            \n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationCityLabel_2\">Chilton</span>,\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationStateLabel_2\">WI</span>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_LocationZipLabel_2\">53014</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<strong>Accepting new patients?</strong>\n\t\t\t\t\t\t\t\t<span id=\"LocationListView_AcceptingNewMembersLabel_2\">Y</span>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t   \n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\n\t\n\t\t\n\t\n\t\n\t</div>\n    <a href=\"provider-search-results.aspx\">Back to Search Results</a>\n\t</form>\n  \n</div>\n<div id=\"contentSecondary\"><a id=\"contentSecondaryStart\" name=\"contentSecondaryStart\" ></a> </div>\n</div>\n</div>\n</div>\n<div id=\"footerWrap\">\n<div id=\"footer\"><h3>920-720-1300 </h3> <div class=\"columns5\" id=\"navFooter\"><div class=\"subSiteNavBlock first\"><h4><a href=\"../../../health-insurance-info/members/index.aspx\">For Members</a></h4><ul><li><a href=\"../../../health-insurance-info/members/group-members/index.aspx\">Group Health Members</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com\">Medicare Members</a></li><li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\">Medicaid/BadgerCare Plus</a></li><li><a href=\"../../../health-insurance-info/members/Empower.aspx\">Millennium</a></li><li><a href=\"../../../health-insurance-info/members/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/brokers/index.aspx\">For Brokers</a></h4><ul><li><a href=\"../../../health-insurance-info/brokers/group-health/index.aspx\">Group Health</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com/\">Medicare</a></li><li><a href=\"../../../health-insurance-info/brokers/individual-health/index.aspx\">Individual &amp; Family Health</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/employers/index.aspx\">For Employers</a></h4><ul><li><a href=\"../../../health-insurance-info/employers/health-management/index.aspx\">Health Management</a></li><li><a href=\"../../../health-insurance-info/employers/plans-and-services/index.aspx\">Plans &amp; Services</a></li><li><a href=\"../../../health-insurance-info/employers/tools-and-resources/index.aspx\">Tools &amp; Resources</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/providers/index.aspx\">For Providers</a></h4><ul><li><a href=\"../../../health-insurance-info/providers/group-health/index.aspx\">Commercial Plans</a></li><li><a class=\"linkNewWindow\" href=\"http://www.nppdrugplans.com\">Medicare</a></li></ul></div><div class=\"subSiteNavBlock\"><h4><a href=\"../../../health-insurance-info/visitors/index.aspx\">For Visitors</a></h4><ul><li><a href=\"../../../health-insurance-info/visitors/individual_family.aspx\">I'm a Visitor</a></li></ul></div></div> \t\t\t<div class=\"subSiteNavBlock\" id=\"navFooterUserColumn\">\n\t\t\t\t<h4>Other Links</h4>\n\t\t\t\t<ul>\n<li><a href=\"../../../health-insurance-info/members/medicaid/index.aspx\" target=\"_blank\" title=\"Medicaid\">Medicaid</a></li>\n</ul>\n\t\t\t</div>\n <ul class=\"utilityLinks\">\n\t\t\t\t<li class=\"first\"><a href=\"../../../privacy-terms-of-use/index.aspx\">Privacy Policies &amp; Terms of Use</a></li>\n\t\t\t\t<li><a href=\"../../../sitemap.aspx\">Site Map</a></li>\n\t\t\t\t<li><a href=\"../../../news/index.aspx\">News</a></li>\n\t\t\t</ul> <p class=\"notices\">Copyright 2012 Network Health Plan and Network Health Insurance Corporation. All rights reserved. <br /> HMO plans underwritten by Network Health Plan. POS plans underwritten by Network Health Insurance Corporation, or underwritten by <br /> Network Health Insurance Corporation and Network Health Plan. Self-funded HMO and POS plans administered by Network Health Plan.\n\t\t\t</p></div>\n</div>\n<script src=\"/_common-nhp-all/files/js/onload-common.js\" type=\"text/javascript\" ></script>\n    <script type=\"text/javascript\">\n    //<![CDATA[\n    \tif ($(window).width() > 599) {\n\t   \t$('#providerDetail').find('.mapWrap a').colorbox({initialWidth: '100px', initialHeight: '100px', innerWidth: 530, innerHeight: 535, title: 'Location', iframe: true, fixed: true});\n\t}\n\telse {\n\t    \t$('#providerDetail').find('.mapWrap a').attr('target', '');\n\t}\n    // ]]>\n    </script>\n\n\n\t<script type=\"text/javascript\">\n\t\t//<![CDATA[\n\t\tvar gaJsHost = ((\"https:\" == document.location.protocol) ? \"https://ssl.\" : \"http://www.\");\n\t\tdocument.write(unescape(\"%3Cscript src='\" + gaJsHost + \"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\"));\n\t\t// ]]>\n\t</script>\n\t<script type=\"text/javascript\">\n\t\t//<![CDATA[\n\t\ttry {\n\t\t\tvar pageTracker = _gat._getTracker(\"UA-10612616-2\");\n\t\t\tpageTracker._trackPageview();\n\t\t} catch(err) { }\n\t\t// ]]>\n\t</script>\n\n</body>\n</html>"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/networkhealth.com/networkhealthtemplate.json",
    "content": "{\n    \"extractors\": {},\n    \"url\": \"http://www.networkhealth.com/network-health-plan-info/all/find-a-doctor/provider-search-provider-detail.aspx?Id=P00138746&Network=HMO/POS\",\n    \"scrapes\": \"doctor\",\n    \"page_type\": \"item\",\n    \"page_id\": \"50b67886d559307f097be904\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/networkhealth.com.json",
    "content": "{\n    \"template_names\": [\n        \"networkhealthtemplate\",\n        \"doesnotexist\"\n    ],\n    \"start_urls\": [\n        \"http://www.networkhealth.com/network-health-plan-info/all/find-a-doctor/index.aspx\"\n    ],\n    \"exclude_patterns\": [],\n    \"follow_patterns\": [\n        \"provider-detail.aspx\\\\?Id=\"\n    ],\n    \"links_to_follow\": \"patterns\",\n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/pinterest.com.json",
    "content": "{\n    \"templates\": [], \n    \"start_urls\": [\n        \"http://pinterest.com/popular/\"\n    ], \n    \"init_requests\": [\n        {\n            \"username\": \"test\", \n            \"loginurl\": \"https://pinterest.com/login/\", \n            \"password\": \"testpass\", \n            \"type\": \"login\"\n        }\n    ], \n    \"exclude_patterns\": [], \n    \"respect_nofollow\": true, \n    \"follow_patterns\": [], \n    \"links_to_follow\": \"patterns\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/seedsofchange.com.json",
    "content": "{\n    \"templates\": [],\n    \"start_urls\": [\n        \"http://www.seedsofchange.com/garden_center/browse_category.aspx?id=123\"\n    ], \n    \"exclude_patterns\": [\n        \"/tellafriend.aspx.+\"\n    ], \n    \"follow_patterns\": [\n        \"/garden_center/browse_category.aspx.+\", \n        \"/garden_center/detailedCategoryDisplay.aspx.+\", \n        \"/garden_center/product_details.aspx.+\"\n    ], \n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/seedsofchange.json",
    "content": "{\n    \"templates\": [\n        {\n            \"extractors\": {},\n            \"annotated_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<title>Seeds of Change</title>\\r\\n<link href=\\\"/css/soc.css\\\" type=\\\"text/css\\\" rel=\\\"STYLESHEET\\\"/>\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script src=\\\"/scripts/master_scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script src=\\\"/scripts/scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script type=\\\"text/javascript\\\" language=\\\"JavaScript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script src=\\\"/scripts/HM_Loader.js\\\" type=\\\"text/javascript\\\" language=\\\"JavaScript1.2\\\"></script>\\r\\n<script src=\\\"/jquery/jquery-1.3.2.min.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Vegetables\\r\\n</title></head>\\r\\n\\r\\n<body style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\" topmargin=\\\"0\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\" id=\\\"ctl00_MasterBody\\\" leftmargin=\\\"0\\\">\\r\\n    <form action=\\\"browse_category.aspx?id=123\\\" method=\\\"post\\\" id=\\\"aspnetForm\\\" name=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" value=\\\"ebf3xj1HVqKVjY+06DJATt6Es58C8RRAHjf2DUfEFpeo2UtzZYM7p71m9jOb0vANKK5sHtxCfVaKL14RzLV+hz7psnQQS7d8pVbQcxG2fpOMwOGlRCWVyE9mA0YWMIOPA7SywHkZMCvAL+wlzSLLyieVrqLsk/93FiMu8RViO+07lNj6BApERVA0KkaSgDfCWvNNgpKHat8nXNSYMI8b6Aa4c/h8sa/C2d5tKU/33LVwNRWcYD2wlQ3y3c3mVKOs4SAerKqpPpNvGfD7bUnLarT/3Ri1XvT6erwZCsMr0jBv+br/v+G6qoAVCY1JCFi0FCROIbEnh7B4Mlbn2Npo4mWeLpR+YNfIrj8kjYEDDU+cq+0B1UkbWjypMLt1XKzdroNGMVIAeBlDPfmFgkYYOgJfmTOmBU1KAGR2eB5FC9+302v0kkr5HN+HJ1J5408qcES6GkPnzU/UJBIwpo3ANzC/wflJCqqB/ZDrabkTsfWeQRZDbGTfRfGrVg1DKLE0YRHnNbGjnEgL7Xyn34P0ijRVYIMalrctEkW1e0k/sKMBehRBIpmtpB/aLyH65K7oZiCA7p1+m5vPaGSrciHNmUBrAbeHmAITvKSbKPGuPs2IJWrIJzhWgWO2fN3Eiy3bqRXPGOc4yPVRSbJF75E9dhv4v8T7uBAmXLxlKXK0SBT0zK4fgOIoTdlDZI3LLbvdez9FGWKoj7yaPAqlXVlvKQT8Fz1uysvYezwy4125Wz2E9n0LHMv6ZSA66Z99Ci4GkR/gWMBm8AjLo7YviNtf6YDn9WGBh+uu9YtQXNjWCjOKyEXFtU/8RwSWks/4Id0ufW1wnoG0lQOuus4+denext6dIwMRpnxEV3z4m/JRubrQgv69CrltCKXeJd5BKutmu3shfNqFzwkCQhYNXR5amTDLg1wdaJzc/V86BLqUohnl905CO3soUsw0gZG7inBeSHbxTbRXvo/NP7qjNxPSQn2b1CeZrBpX7K29xw48lnIi6Jhr+ehQDiqwfQw3ui+tbQn/DJ0RV/S/2ymzjwLVEqCmPvjThsbmIT2k3cHnhUyJidHLBC72bnoxhCCemPWkcM2amFX6xu2nPkLPTNvhzTtVQzGdGG25VbbWiW2KUxkH4l9GROaAJWTqtrAh7sDvgh1GcLkSp5lxF9ZPi8BGolt7bHHkWbQbJ2RCKlO2bgWJ+tDQgO00xw8p4x1r8S8kbAJbr5G7vQwGdj/YS0g6v/+Gs9xZw9NZaW7jhcLuF6cLzjBihqEzBGgYN73xfLCcNR0csTudtX9DB5ciJE5JQS0fGpBIpLOfr885RHpE86sMdn5yGvJeW5BjYBVQzsi1ych1w9byp1tNAYpgWNs9TJAcGtNraIsCL4V7oGDzp6h63E12inVweb3KisegT9xnWsdX0utcjhIqB+3ecvYfRLHbcbVgbk/tQA7n+4vJOXoOZ5gF2xm75WBLKkiHHRN2pnbxNjYvP9P6V1KhN9ki05fTekwZVFGGT33Jkm0w7IKfBMxOERnlCvao4OI8YjziYjElLM5nFlWfrMAM0xLG0D7wKEmVYza9pPORNGu+ji7SIyLSgGFFDuXqD7uHhybt7HBTVs1J9ReA5MeoWZJit40bdDU1mxdB5TIF5zW5eQKn2ffXRDIgsPYtrf7prHjGkrSNaKYzdhrGbc6EEiWzeUj0UScMvHl7Limf7beRtJJpLWECbGXOA8DLYI0B+Cvbg4UNHWhQVhX9959X0+kmQ1ZSqrbYin0gLta/JuLabPIHXUgqENT9CCRx9wGOa/u6JevzP+pJFKBZkPAwZBGFtADw4T/DyvEdvrVJbukznDB2aXai2/ln8R3sHNhWii4230XXxF0fVyyQlDv5x9szeWuadh/n3KRPBBdco9iFCnwGtJBRYph/DXwXAY6cZTG/1ffmx4C9WvB/LvAucgD3l2qdOVuUB//hIbkOsCRXB9pMBy89cUXrPxDBkOz1CTBdKkbXnqmPILyO39c2wjkjAuhoxyyxCbkNiqXsT1zg4/uYKRiGoIuGSyqTDqafsF9LVHliMlW1dP8Sivz+BNPpJ7QxRQ3sHeWb1L91ugbN2gbSDuOUU01OVIyRDhAziFVJtuOELhu1NJLKGkpGemKMzWcrDKm8qhi+F8rYF8/YTBE8gGxBG+JgkmS0Gn5/tFQRJ1a8IH3n+l8gIXwyO16eqvLzP2W0VEJmZl/721zDai/URPBoQFoKxY5T1XafWZiG6RM34OBsIFJfCfwgSAFgHg8iACb4qahLmCBOLuJuQhpfL2/VPtLUks4P25n11ZR6CCqbJlD86gA4m9kVgLDauEK4esFVPRgGRpm1HAKD66wJrBcgTC5u644+jYjp7aBlbDrEfO+evkb23YXfet58SLjif/fEgfGhl/bSfG+FbLZxxr3BoLqlxLoYQnBZieOT1dSN+q3zdYW4iR2XeiXCWa+x3kPmmf2j6Gg0U4h+agnOb13Cqck9Nt7LpDU4LLvzcmGXiGScOLl9xIt87C7/iJrlzqNJYlYNmlqRlUilWf7nJ/RHV16M+qVOi2wJmLDevQKWfSBXJcM4qeGlNY36fhR1wd+GM/sqVM0hdcJSiw2QM4hFgGwJccF0qbeamzlI+rQKBHyq4gwW6VVG4HH9OT+ttI8ZllmEdHL8yahPNY7JRFKZlrWPzwkvthcZ9ovTmMJCwvwuZVPaCRCWOLNOGDVnHPZtvbyoLfBMoglIXKAwbO/06GmbmNAvQyMUr13bq1chFlS1/vM6uhUue+WisJ+QDao30X8SMm42rBcCYcXYX9VoD0B7oci7GHxKdj4h+0UqcfiJhHvI1zbONsY43aI/FHQVNhLH/IR3Wn8qOUbavu4xxSwSwiLcq1/sr7y+92igxcKrHrehKlrHFhEPvz8zv/st5YpRgcR3bgSrGGYGgW30HVQ7x3RIUAqmuj1il05LkZPUrvlpEFPBjLMFX72BWAcmE10ivAzCN4JBc6pQhkpouId6BliUSRUShvlez6eusMPGbSn3Thh3mEUKkDeyaHPf7CFqAvVlc149eEcQehNmsdj+ktpxXHYJAQ6x7k1gjJVcmTogRAIkq40KNsqCfIvgRq4eCto6qypYChtVFzZnQt5DR0sXb+CYq+AjOj4yVUEKC7u5pSHScMTaW8YojEUpoqtCTX+IJjYCE6wsoPyOBCuqYfxbgsbssS72b+1cZpXNBj17PmYdxFno7Zm8Jzk0AEz+ZPrd7HwjBTCi8zpjn8v+zx/HYd67Ex0OZosNTFZidQlfOyGr2TXbgXnzEjFs7vg5oWp2fSXVBDa/HLcEyljmqCuJnWaABBdpAF58C7OAetJIdpE8hqw732GvHw/cRkiYD6Gi508dZBjKUxa4sb9Y0UqKNSSH4vOB6WASlN+Avm7kLH+wPg5JnKHbJP0zcHLpWcbLb04DX1+v7Zg7lx2nwCtVAMN0pDLFC23RWXvv7jkczQAOiCdWrEERE/EKM4+tjG3u5Akq9mbpBFHGIPrylxfwCzGtP+wLGlRZHnnn7V1lWZIacoluG9kVZzli6B+udhHDyouAeyH6rlRN73dJY0mMiluDYJNJ9ullNGi9xeMrhPWzrXtLs8GVSxruOABgfAuoQbCnk0lE+9OipBRzRM6r1jZEOEfX5l0YmxBFHvbCulv3YQkh/vFMLEjXTx7ao3EYKaClF3YmSjQsKAKd/y5AkVKdscQt46bTtS2hrTU8bbciNjGiybK3J1XTODz+0cjhrgVs0i0rKwCeLTdjoujozYXfhQechrsvbBNEjC0vB1fYjqHQJIi9D7lIFaRj3Q6OhVnPP/g/OwMZbbEq/vQgk4ldrSupPV6qXAJCAoS039LzWvQ2RrWBZ/OiIdB/ouy1tMTcb4BCoAORI8+vI4Z9nWyz8vciAEIUK1YWLgb8zIVAKVp6GUq+CbQpZGgfWIdE+bp1tyBQ40zlWUlGMGwOVl5BH3AXM5ugW+gxn9+hMEyVBq+TZgUuFQafKsxUnJSIOTlNtLuodVBGU503sqQ0ONOeE7oU3i0mTDmvFvGmivkPTf6v9Jk986ExhWoNLyI32wtOnDuTJaf3nybmWhXWCT3FAjkYCmSRJ2R4uLm6cIizNcE1Q80iYcPluRtiWXbYdCMGkudLXJQcUrIyP4vX5eloxj12acj25y427na1M4sSSuNclbhxfEVWG/5CkffFS+2oknpS+9Q7lhVLx8jxkIQwTWPPQQNptrXa+qxzIijhF4wUdRZtr4MaBIWT9Q6rv37iGjLR/YKtNr5ZZxs+BvnWpPTtc0bLlIem62BnkvGoZhOdFOFP5LvPQq7fKppvl3Woxvu+CCx90G000paTa5iiKGpL9l7LisjLHpZVH9mK14LP3HiKbTJDx2Irtzd9kWyTd96os4Lh5hZMEvm/GISNqikrrZYf5+vu+htBRBPLHtox0L7SucnykVwqLE5CqVKeLk2+jKTZdotQ+2AwkNXRU3L2opSO+8DHf7MVAefsfG5LiknQnm5ZsQf0u077uTaAsL++ZcXr93plqfBHT7+PxRNqTwQEEOQYuTVsZ5MjVhF4PPijMdZDgwNSmdlRmPbGdvghFMKPbO4t/PG5HtxM/blEwej1HP/JAcdag4WDlpfunq4d9/heqQOlEF3/1vSDG7PpuMsv8ZOHdMvew+X/YPhLKvl+OtVptNcPMDH7SLTjhHOY/9QCK96pbqIPvX5jEvI3UzYlGhplLgyp2QGzJ23VKWiZu9lCHYKALNq64xSV8Zvr1/D73xcw7oqFuNm83LrLr7bOZlnj74+4Wru+znvgozmo0M2GdUGDDTDhD/WZJ6sK014/WNreEM+V0+W60OBMbkJavxZL8wV30rIjWy1aq361FpupVK+sMLsvjyRpcVHEzXHL6GG/PFtLP15a2hlduZYN6+FKzKQJhM0dNfuxYfxJh9czaoz3DgPS17+7xv2G58f16sQseUXkhqGBUXqp39uCUldy4PwOCH0dTCkYEJg0bfC4/u22U11NjuPgImMMYaUDvUZHT/9wq0QyParX93lp2FFbmcc9oAXPVxBBHhPlZADtDsySQYXlETobRCi4+0FSYRMuHWmstYFfV/IUAYnlnBI1+gua4ifcw7nQFH15naD13bv6UnV+4ao4gAeO8jkSLOlG5Sr/7ArGc2aPhfiPZbaxfq0IRPtikMGQLuZ69EqJ5SCSs28VAihbiGDMxLURwRi0MNYfM+vw09XQf7j5vvV4cpCrL8ipmwLoFus7k4ItdeDguEWhtHuaDgqsaZizi/jAh6QHP3A8l1RkuvauGPSOprhL6dxAQOK5tV2KRCqyMGV8WHvzhoFc/fmc+32nHodm3YPXc4NWoExkfVg1/TRlUICHqqsdYoFgA00GiZ+6oYXy+ZesfubDPG1UpuxSP6XLTAS9SLxoowtmqvwJH7ZP2ONtndDcA4AH0qLmn2XHhU47DSxqHK5xxVECcBnq77Jm6zS0VFgLQp5y23cmA3P4KzzLXfmUgt2WzLc9hhJ5xEwJJWruNsv3Iu5UN7tKXyazaNl37mIntqg3Mtl+ZCLuZ69uYzX/QVn0/djMhqz2rIdxGgMcW34cLSOLCWRWTl+4ZLC/r1X5oRIcsoYQOceYEdfhweusqCxB5W/14wtnSCi0fNPWVOm+oVoiAEyO0DDpzg9/nSI+kI4XUaoNZLBVGDmlZcf6BM74IXHlcpvTzqn4GJb79RGkNim127enL2SgBlNiBUeU9wq1JfBzC/cdZ3P0HI0tY3AYHd94U5QJOqtLdU5JZ1nACpuTwR1D6ya541n31aGdBzOTc4FLxY3noI2xrCxStHT1DFhm646DsMrVXy5H7uurJFFFJs1wk4WqnSOnkvFlHFss1eJNh4XSLGcDNw811v0kQDI/lY1XKUxapFnt8xeH46lFHT7yacBkwoLTW49gJwPKAlwzwZNyYNV6K+J67zQAhBxkz6TvVGNRsQ82L/8EVLDtcRIK16sVM1s6ZIGOcx8BBZsclvKJ1bPwid4m6L5fSRjAyYQJlLwmEm7aHjNnXbNzv6K394Il4Q0r1y/rmGfmgEDan24zBemL61moVdYUAYalYroKInicV1FUEfqaGwch1W2hHu/sLlFzBE1z9DnM/hK3fs+xnAmw1JlH/XP7nDqJ56ri4Vku9phwhRfDJge0nIJPFWGoMmEC1odNN5924fuf5AOBQLZft3mtRTfHAmzp2Jb5j0UADdTV+lHVoRM3vJ+NE0bmf6sVYpqx5F57YzfAJByJud5SqGXMtEOCGPyNjuehN1r2v28hqoOsv8DQzi0zQKRzqeeDkY82/7P/AcB7/mIQzbGXWiQsLjQG4i92XFqUTcRGfRUKonGStS8L6rmYDFm//rn49aQIBGCJHx8rxZxokP2ddB40O3nYlwj/ESTfwGaPABFdGD3Zuyb1a9EOHZkSXlhGao2/kX9zQBfdVZIhKmNhF+x1JG+IRt26acMEgsMJclPU2x04nyNG6IKqzcQqRCwXHvE0Ay2IXOd3eHLgUHcf8Pxn6joC2pbIbA37lr2tDnmtTWCOw7zw070PpC1nQx88dbVh4B4ZxHmda17HjBCdv3hxkAK0XtAYFfoBR7yaBSJGGCl33N6i3fldOHDMBW2U2qkb7aUHYERuLAFenHIcvHPMg3JKoFD5BztbKrMYkMqpCpbGBoEKlyMZVklUeGFZ1jc3sH3k6gGuSOrLDT6qiJ7F1BTgUwAfYbQgn+GfboxdFbeqBqfgjotcGegSc+1nogy5wpFpf+Kw4lConU4+KijAHGgBQO3HfPaYL4FTkhlKdf2b+37LP1ESBEO1S9aKlRukumMQaWRUp5xJoDgEZutTUuKyB3qCprjHP+JCnalqC1bfqoDUwbOwcSvBqj2zDZm/eHj+UtMT3NrD7caZ//xAuQk/wIOjEBL18MBCtqdxwJyruQvZvNTqOlTKddHMUtQNii6KSyrYxTPcCi5fMpC0NTFf164BzCYuykngcy93iJcwOhc7eS7c0jga/2oAYw6uRQrYBPwGKOVeQVWaZMTtq3UB2+OhIblrCJeb3LKJ3TRDqPnqpuuimHs6P1fWCUbAmNsNCEmgIWKi2m+oo909fyyCydpulpcKG7f/E3ZxY2rvCE3DmV8iwW7yozv2ZpbDT+J38xmkAS3exi6VH+FUQpqadNsGkfsXX5F5B2U+gy8beMhGW1815BqnaSb/I0ozhf9xcXnP4TyGzlOs5Xwnb+Gb+3GC08C1NScOMqW9i4GGOxQx/s+VuCOsoXpi1agxMVcGgQ4a4fyViTURMFERgt9FyRkfI1vKwWkooIyqEO1E5efdL6VFPDeLJsN0h7C/Dgqc9gPFm7p3ozHVkuUVDnULfZqBxPDBaZN+PIXXu0GV15Pj8du4wVqaeGyDdBzjtgiOgDuyYDjVOO0IfmT/fDbaYHtCjijJjenTNPoLsvrQGIIKmxf8YXU7vooHmCa326IDH8XgOuI04zQxh8+pO3SQNBxIwG7qnh3UhcR2t81KbLCIoS/f+3UCwOvnf7dlgf8LFB6yas12DB/EADkQ2PuazdZs2FP7ZxQJqyAGi43PYxp4lHmUHZMBN+/okLkf2PTfbNTdE/9bMhOezq7m5q1GBBHYHgNZdobqN4rM3H5RvmtGWZXwYJNAbLTYtblGHrqfBclQZ6vVL2+gFtRa3UOikb8tBP+Ui7zR90A/3TjhJ1caloI4AamPfieMWwIYtSnynSR/yKDtMzRAMtyHni0iaXS5q5GlBZx4soBhI+PNj8JesNK1K7r/qGPelSM8CgXCEyeGtp/xQUzEnEJORE1xh1AMsu77a4H0rCNHAs+SVSa93b1m6uWnaoBMN+GWIUne+junR1XwcH3xPmJ5VbJP5jxYo5gDZiWDoXEGadPC1+Ut3W05sGF+oiPJlZYkqJTze2uPfXhEA6lAn1Npx5z/D0Wst93XVIDujUrfgFnyWP90CDOyJUKhcDQnBsfHQFskJkkXYekQ2A9Q31F84fSb1KFAwjIDulNOh4RlHuGmQiYiw9OjqWHHGaQD//BkO2cLOvUTZRksHsonXlHQMWFK27hBSsbVgSX7lUKyWTlE5J+Gbaj87Yb5MMyp8Vh1+24JeJbS1O7CHL8EWgXZK7DDqTtBK14D9WuZYSDmsSnJXOG6ZPcYaUcEwaSqdytaVW/YXycTpeYQkAwGkuKR82w/NfvhUOaHKhNUTqEDgpHHNheg/1w+pcRzCM5KI6BpRgpw8F9cgdZXe4Ji0fiZQZioWAOku6Ut3tYwlED3d7VoovnGmv95/hnDxUTNcm4Lnof3dKYdxYb0LPNrhjpoGq7rtKo3HzJ7C4eHG/AZnQPw8dGewUPzbq2mrwTUmIvHVRWAmOouUVB+FDJPYmYMdR6+YKGK/LBpZrqlJB0977n/33Oo2lsIoOrCmSkjGylXXlfb7jrxul4ZJJwEYyT2deKhlOmeNZW70H0XO+64ICdOW4feAdTX1HFr3+iNo7DZhX4hUS3K4agc6X2vw09iP03Bu6U797tm03O4MGGRO0lnYDrmYhJ4FyMyNJfeUAO+c+4y0WdlXhhEo9zTVlaniWF27XxE2ZVoYY1H/E5q8dpo3pKXkuWBulZ5JCuZJLITJMwkF6hEZPMmtuoiTYw1lL0NbvnU7Z1l5zH3HoZdv+fpEMqsIZIVPyYvhdftrCZB0AFqCLnlEpwheXhrvUU+vQcn6vc5ygTtBm29ziGZPT/tzmhxe2eFAS+P68lp5v5AMzBj9YSH1MKYxxuyhuJ/etfWJGuE5Zix9O4hGmOWJwO9KxPJxhizSeChhiIRCGZ9EN8xeBVO45E80WgWkmA0oxPLPBXNonUjVbmU0Bzl42eH0lcxmctqvNLpe1+aQCcdkJoYWVdhr0jlkQqO/kn5NkLkqYaouih5pPtQhIPjCEOeAE5K0ZiddaVsRtpkkyDqXhAioSywq6VqISDaXzI3jkNxR0aOBaOE8WvtWZemzVMlfNIZu2A907Xx8ZZ9jjTWK7564NDvsZFgdplsuE+hsjl42MO7yCOEvm0mTSts9e7m56zHSPKQbh4fLFC+d5OCU3/s1WqnGGjYcyhagzSoUt88IsIDqbCI+V8TULjDhJTI9e2sJHgJC5c3YyaBK+fgAANR7D5QjozIGYNv3ujbZWfex+xxpq5kQYNUqIvuPmlAx+nnP3HsgzloShsWArzbaqIXIVaSpgE8Vv+0M8dh5lhoKEVDts4udeRKX79ARTZNdZT8HSTm/VdjFPTNA7Od8aBMwUVqAexCA+t8YGBrFToWknoGpYHQK4MqMz8m8fDDfXEEkajciD6BJxmY/2uZhDR1Gr+j6I3Nhc6bOj0TRF2q5XrHoyBO9mKarZBaeIwAYUjj2YFAlcX+i+jnuJkBJUr/ivbqYY0GopRi72FtZJBEpRM8Rvxpj0b0svOblk0WPNjuU1tQe/F49zS/P6pJHeho9udVbKh8H1S3s7AC5zoQ96Dg6yY0t7F+lb1hz3lLgWGF9KKyoqg/ue7d4KkrlZd5iK7uJWDKXNcRqooQq7QbjJ8JGhkb7uugL/9qMXTq3yajGnD6gHYmfCUhpxD7MV7o516+Umg9Oe/Ixhgfx5TNfoEmde57AksIH3IN6yAzkUg1NsFPRW8YycRCxz8gaAnhToVkvUr7sKKqUH6CN02ogk6+XLjrXmBu2dO2qwOYhQawrpgFWNn72xPh7IyikCwWY2c0GTLDIjTPvKV+cQXxlkyAC5OYsfQUHZcjDE+06pJ84VoghrSX5hmolqSmXT/mSSlqf4UgjVi4qBkjopPMhwVg/vmdafs0vhKmJp2wx2zBat5Cb0ZnaNtTmi5Xx3QZRYlUcu38uuzeaadwLu9moVlaBHtFxtTM+gjBG6Cd+j8E0JCRnanEHvWW6RY5xVinVS6kmcZuQw0bpIJ+q94FQuD5McsGLKe41kxjPucROkFXRdfASFK3UB/5Wd9ftS4B7LQngiOoiiUBB3CsE1wRZ2Y5MeRgf8K1clrZTgRbqQWMYix1ziKj9F20LQUA0uPETWoZAmB54gexeez2Halpalb2+efLI09PNSgrRAWzn4szek3WoST22Um8y7qG9QiGay+kRgDpvlzVyJ0jjuWvW1xhSSbMx87TnbT480yUvXmhnAS1fv3KlWeXsNFiYa0O35TQSkBF3aJAqFJkA88rO8OVlzYEsr9H+h7I1+rmjEczWp+jnuE/KS1Ii5mf7l+a1tRDgmcymo7EvKtO0P3L9q1rJBNP65G4UE7swiVCd6a1IrDRENP0/WE/aT37z2hXOsGMS7OnMfiRol2hx1LNTKQrFDbOKgYWMIe+0loBRCUrqnzSP2S+yyOnuGs8LOaZAGnzkkXs6vo7em2kuiT4QQRLdVj17e1w97XKe+p6BbBFFkOQBr6q8RyCkb56SVOiGZefBYlhhN0COj6zDHLCvmqgzOnTAAI/Ma4FPlyFy4qRZ23WDVX8qAPAUK2qHSrrvONHbW+mfxuSODbzDiZoKELr7HEXDsKtctYJBXxeXnLtZmBLxJfSQjLLTPznCjDlXU68yJcOCxIFR7wy8k5pmQzZgVMlV5O3qDy0T8+YcUUmKUgpS6mn+gE+bZWkMvUww3wWC0PW7uyNab5g7lN2qcgUQZPE5SOLQ4oRGVbbfdcsadrnhppp5cqAGiP5qZLsqUFiDNiSvTzOt3dk/jNiO3EkhhuZnkyhRh398h9xNyDHj+AZrKYy90JKvvNkGqG13Vhwd8SnplmexfH5Zcfa+J4mJ8hAHVg/QgA0Vgw8mj00NQmoFy/VDv8H+tQXjCoNr2eQp0rE6uz8T7kIyS/UT8dzjSSmxwNeo1zn62KCLvUOkKpA+nIgyMahRUz/YFzkT2lHkAnYc/MpcApuMti1iwn2z9KlMItnKs8P3hbf9qj/R5Q4bca/v5QlTZi70rN+B55XZNDiNyGxGuHudm8ti90ElP/jyxW2ufHJee7sLV8NeVviYJGOhbsQ7B9aP626AWt1IiyIhUs2VGHYEH4eHEmgMrGZVA2Y+yzCapQZqPDZ99QJmAdqE0n4o75nN6Cqw7mmK9+oj/AuiUD/1rNk3R2O95fHm/JYqS8JlG+1w+Io8DfOJ+//8Hh99tNFqaBxpktJJUpDSjeHaqqkA3HgrbgiiFxl9a9hBsqczzQyrlt8/pI1oVEWjPtsJct3zovRSza/u6MANP/YYQNU1wUmYMgueqwwK7A6fnQYuuWwXCTmMH8wXg4oE63bGQdGMLDh+DNREgb4gfjU39fd2BHbisbNSsdV8AzdbCzpz6lU82qYnmu04dI6RBqpJSPLcpJzVu9m1rL+3jAyNUZ0+oZiFB/RwrVWYVw7aI35+3VvEA8IZNEHmp/YIp/HRSt3OzkhHuHCjlcD6tEFijq0Wy5s+hbhFL19qSHysEjtJhx+duhKV3abtKy9Tbh5VapoVWJT6hmwBVKS0QB98xVwM/h1FdKj85YkSzTpwjEfpfcxApt/MfyA07VYIVkx6fn4txukQkf89sJGmHeH1pn5IjN7xptDmDs82U7K5fIjNHCwJCGFNJlpkJiuYAceUzyYsa7Qn6tZv0Bnld8inGu+PM2vAO/25mXAmYrNPGZyD1ukgD4uOziVPvnxt9YI/Jm3WS5D6q03AQWgpBnvRF0mGQ/fRlViJ4Qlxwa53OpPF0jN8sbxjDqoc0j8+AP2t9rEMughtIrIdL93NVUlLsyVKrcTneSxV66atv5/+X1X0bTBKyI8xrwlBkdxSC0c6aGv+ifBRwp6kjUCruJzU9i/2z62NW3whM6t3jTW1BqbgH3x3Ntz0gV4AsIle1Ifb5z4i4XuPgakIg6I19EzN8E1NU1MFet1g17JyPvArOqaeMkz3nNrRHSnRP6fLfvUmCV0ddnIISfVWFjBeTh1ykQ8rNdLAY8HEl+R/LetVaR0/gftMVx+Ct7vjBA6qGZKEhI5IV2tD6SGfQs+JZh9caVb4nm/cIJRltBR5s5dqV7FsMhjMfajoNkTUKSb657PcFSdepygxYzGJyex/P5T+m5V3eSdteDLsCmfUvsoqGkKh0YN0W7NKG/lQeQ+/hd4rAaXnApqgDA2w2M4H3UDReai+FR4boAFL0iCICnUW/AM1caRULXh0eJYH7Dz6x3wt1HxxiLmxyQHlMj8Ybj0aff+YJMg6YsLmIZ0ZtIOf5SlGjhxP50JKk9YuPkMfro7lcinechhvhw21otFXmcR2Hm6OnlMeNcKJ9RUxqRF+aHAmNOORAGCDzx++PtaddBVUJ6pmLAm0qLplXg7fAsaXRYtZ+mBqr32QGjIkus3ou/EIWsZZxgGDyoDXGLFENjiX0nB70H1gVny/Skx1QnM60dVOrjOIMixLHnCWf5GMnjnTpKkTwXtvGVIHAj5e08du0CFT0aZ8tU17i7mzQs79k91MyAEArFqIKqPMoVl5VjZEvBbCjBmZVuYCYVjn3xCykiwo+/aK342XmgPSiurf4Vx/ctGCo5KitOIIsqHoVY0bv3t32eSI3zdxXV7sHCJZhyVaSaNlOhtKZXEaeD6THetmLoJzTsWwtmZhaVj2VX65bpT5HDg04EcUF7rSlx8n5U0kmvwjWcYF+S/MgxkjRU6dF+ViUROIFINBsqG6HwHUjiH3O/V8LGMCApfWU81ZO5q1tg5g2th2NBMguFL5mH2eFVW9GnBCLEEXwEgUvxama/ocDUhBo8odltNYqFbI5bDmqw6nTkOiiLRhudhhDfPwVn4l+WGrIMCYsSzCj00njt25UV420NtDNhQlCtpfQym0Sg2eH0zbpSszU5gVw5WX94sXzghjx7R2Yw7shdT6SMWljeEt33xcMCEjBIKwKEopfmturF3zYhosTosVftAkGdLB5z9lcQQucxj9rBTjjczaaemNzUTHnhDpLTlGMMYpsQlRJFcr52OByd2CB/4QZ3DO8iJFFA2vguM+nzxxtki1eVw4xAdgMBMMEf81gESf4Qim3xDFYSLI2CcAF7OJqYN2C5OrAH5QgR72hk4dTFi7fRG2zevbA3FmqHNi2pIrRY4ZTY/WvkRYniBnX151WJYAKs/26HEcolX1YH5YFviGniXubHVbcvmMZ4Nw08v7k6AqxQxRIv2LIbKX0+10EhozKbP+XLNS8dUOo/TrK9Fs1N0bhPZlVEFu4uuggYopFGannONMzVURjDzEuHTJo0D+L2LkMcD2kjdasQ0+vhiRUAwgm32gp6h/YJjOuJDdJf+traVansus59Hy/8EiOMEyQSRHYujECy+ENOe/q3K7yn6yr3ur8csbE9/yPK47eLuNtAP+jW3F9FmnqqC58WMkYAjguY9zcnQ5P2YDMO59Nzpmyt0dVn1MYqZ1Vqvw5qPD31ph9QVE/L2OufGLb4uT6yP62WrDuHkZpfKzehGVPrvBEAAsCJ3TgB9YgfBzvjR3BuXDoe/Vl7/5l9w5+7F6Anr0E6OX5nhS5Cbz7dwwXO2fMSTWYI/iRVDlkfcv0wupAnNtjnL57NgSCa1CHvJT609IGODB8gdfj+wbzL54otLeZxkcX3/WICuYJx2DRqU3WOvMk5hgR7SqQBFf5eGANggkn8tsJXGbQFIUwY0nLr66T0oZF67aLh53aQ0+AgDvlxY7mVlZbXOlwQFNHck55GGwlJl8Cj03vMFYstKN4BD99O/cwIUgQ9Kqjz/ptuRBvXZ3Ah/qE3t0rzjtkLHNoZF+m6uvgXiLhMnMyC20IpEqwgW+w8SuUzOnKVxRycJq5zLT0mYCJMIqG/bRBhi6Rf0XDzFHC/Ey/kBUqQMG+bYGS2fxmjm1Xvs114iDQ3JS4AoM9eOgIAf6E7cuZ7vDKzxm4hpw4qpOTX2KkawM7xFoL6G0UABcHR/1mGWVtwmlNTLpi/HeLeJXuQrRl6AeNGmapp8BBnkk4w9b+hNTPmrwHz45JcIzsRdUJzA/jgN6Rz6vp9tiMuZoRcd5gLOeqEg4K26uDW7YUiPFkKgi2xZ1Ziwn7ceL4OSLcBOnzDFxWsvu+fP43amzUBgkTqnvcopoK7g3s9bf1+bAChVtTyo6X1A0D2Hqh10viEjvN6j4AM4b+t0VztGGuAWgId8JHYedhPu3PsZ+eS4udXdBhK4Os7eIBMv3cPaXS7KKQT0TZVgX4KwrUKNUOkJYtW6RRmClD2wmM1x8nDv6fUofMTuMQF++hybTQ7rZROprut3spWNw6FLO0dPwdLVBMtrIJGD6MBluFzzOzQj4t719rTYHqX3+mw0diRVtiBY33YVIyJTDeFytLzYpJ+vL1xlZ6UI+0ib/0cKFYeS1j2aHc5rYqOXpCHfs6iZPzwg6H9Z2pbjoAX6f0Ikcg08FaSVSX2Pnc94V1jCeSy3N9OWkTgFeY4X642zzPC21jn8OnDvisIMUVRbecCnb0lmLOoRo5U+omcslecgjGgOPMct5EpzDhhWzxW9HrWDuWEFukmPtX94xr2VUmRhGM7vMAojmrBTNONVKgX3GfO36AD5zzrCnjhcLoUJO7x500gO9bSCRGKAGCCpm5j4/aeTJ744kRscvCIShoeDBzzjN5pRc5oy8z6SA6UHi/MEbyV6Bu8+nKTLbiHt1mQESk4jUtx+PDc8xW/ufR4H1x3Di6WOiGKHrAm4N/toRAWk2JpD9N6WUlA+O2NLlfocOYT9+GOgwzmm1aNXF5tkiW0dA68v21pulofbLaAuV3qpkdLQOlYSRLrPS/PqWaypLKt0x+/QtV1A0wKq+r4Rlz5X19kwehfR0nC/7e71a7SLBSqeshJRse7V1i3agLhv6bs695w4DGnc1nNkhz1wJAsukzNl2hX42wzjFASYC03v/W6TwbsA+cmquYzlm4nA9ovLbOw6JbNttlykzUhqSl8QTMaGS5ak0X9vkHEYoVjZYXxkwj72WmyLHuHB58NcsmSAWHxNbhEhLqy38d6nMVghQGof3jdSi+7e0qdge/pPMjm/4LcWtqx5nVHSHNqbJWLo6+0GX69D2SzKm5EyBSsv7FLlnPHLOIQyS/TKuoztFzwwTvfwlvnJY4BlNRcxRDuEBcAWsQIe9f8bMTFMF+ye09+feyyxsTUN8EIxwEFtFC/BsFlFbPtwIfNByUa88YFRlOhNBwzDct1fbx7J4pmXHBigMc15aXsihqtxCdx6es5kqMPOejejWyeDUo2RSHD7NHRE5pE+LjjAExzGupyiI/5UOjizAXpEpeLV+HODpVyFUQeATs/Gv3kD3R3Q2u231uiSSZCgH38kETKNhSdBph9Dgjdy4PBi1ReHc1NUP0VsDPDgfKoF5hDj+WdUX+E0Imyr7MSE7hVcnc7k61Ea8sF8ERyUCn5rdETrtDYnqs2vhryxUXSRYMyf1AiyIYJLV+Aer59OY9M3BS0MZ4zOAVxFwTYYLS0NDsIfXJvp4a3XHpnqx7i+cqZpLqCz1qK3oZG/hTm8ViytRV3EPi4yhFAish2peoL+HXyCE97gVYls/Fochv6+85MESbLawZeMxnFQW1rOY3FQtly8aFijfyXJMHerSzHHHZVMef28NJfK1eVgwP3pn9iO6fvEUhK2/PMp8AEKF8bSGEQwL344D+sGILAaf43Tc0c2o+h3Nj7KTJSDeIJ3YieLwODGVyXIQxj/587AG2IR/VIFs2ZGNfXu0D34s9ljvW8fFeDhMLPj52SJWEQtwKcnqXubfCE/8wMXdF4gUBx7CG9NIy6JlT9vFa7ATnUsvKGQbDXzID7e7iLWGHiaHyT0j0UZtVxbTHym/hb49AIr8qx3sYe8dD5ynI5v32sjZ/DP+SL9Bli9yVKNsdLy1pqkULfqsAtlowF6Hs1WSeeoicB9TAhb5DI8mnYNIHWa2CvqFfRktEn7GJF1U1o1eq0dP2hfvuX1GvR6ndLET7I7b4qYoAz1rV7qk9YzIE/kAciBywWOtKG6m5EAJTgQVgAxDkveIS5dTfYfCmf1uzDUr+f2Wld8KljGeJZsbmuUYqF6u04ZUmf/L1/voSK9ATVBbf9ZUj0fiaLmaHJqImTMsvVJBpAkpnhzdXejKwUB/vR7s03K6maAmgbdQqmvBoFtdNZaCndvCIGyIVpwgI786R0no7e/XoomO/wEq8WcBD5h5LI1W78VfbSgh9r+IQ1J3S49YiwYKWsCl6GaBBOegeGo7hHclUqN2L8fLEICotGErKsAa0cXfjkY+w6VLTG2fb/B9gwTsMOx+RpiqK8IXce+C8S4qV0f1l18yljcdwcgxyKhX9bJW8BAs7uPEaQIV5UcwVCy86HO3SJympKgTZBVn5Ihdejfz0+5GwtadR1XjI0fl07Ujzek4bPch9kE5EG+ZU6ILB4rNQCZw76Ku3Wdl+54cNI9m+Oueb/1Ci9mZ0GGi6XlisSQwOpvT6Nq1GkqTBwZ1itkxLje3IxAHV0D2Vx3FGBr+lXYAtZ47hXfi0iCaXX8S792ImKkaHw7R3HvzrWlNdUTc4WOZWtujr1kUMns5n8AmvgUQovdtknRzAcdAaASkwHBSmcc6GVlI9W3j/eLBcHUV1RGEZ4eq+NZSSbnLfnBYB7/DsHn5H3txC0tH/c/Vzb4t9L44DXAO3Nq20RgRnDPW9x6/nM73xCGlmfhn9ENy24qT1zRZzGexPHp01Ee5oN6lS6qUq/XTXF71TPe0UKpaElk2lOfCEP7iZll3T0ix9yTxyq3gZX/ky764JXp8x8Ue+Pu1kN5d9q0KtXyKtly+Cek8RelK1TOcNbd1RAKCFvGZDxa/tkva02WPSV+imHcHIGQdWA7FAw/TR/KJQL3KScpEX4d92JxPaQDCtVWTvwYhlaiG2fTqMiH8Pd4URhWmo2P26ue92wrOg08skbnvl48caQx04f4wo4OCaD5xaSOl5qkpzmtSZyPGNcTsUROM96oCif3pZotD9TW1CzwmK7BOejm/4HKMPOq2fBZxoySdOzYOvq7HYHkFqXrUyvPv/KLaZsfbXdhU/wkCbcY+Ayy6qc+MU+Qc1yoluwVvSLXn3ASDnUewvNnUrKHuOJufcALuNGLWElYWD/NrGjx+Ok+m23DGVlAQ621ryeVQAx9AdFBiTa1X5F/hSVX86TgUOLDY84yBls700pdrAMm1JJ9jdEUc1sq2a/ZR+bewbjRcoGPl//T2eTidXE47C2qrbrcVPFslr1S6lwUnNqlOIxg/jfduGgEhZUbjgweRPw91SOtGa4ZmhnAGQDCeRNNXnSb1xG+WC2thRL8qMSHlRSPjdCdqed6zXAu2NW1EUlW0thpwyX9oc4VpJORiFDTREX/2uQP0iK55mKBBg1ePDXxhq88rnPLopQc59c8UI01i8AgvPgyuWv9Pyz9DSl9nD2WUpSawIntBPhvhoy2mFmZrzr/DJq5UsLGWfsHPW6UFZO36saDaR0jXtLNr1eUHInQhoSU6V9zSjAD4ZziFFGCH+oKLT8mmrbeDZXGdOlOvLRvzmbxIrLXHSYVGaN8n2XwDN7z/nOV/3FfY3dU7RhgFmpHgrJI+IOG8oF3QaDqVOVW8hBjDMRnIt8nBP14qT8O5AQEbMyvpe6ljUo+cBT/0MYIcreeHFODS3SSj0p0H7bYc77okAgs1J4Co/D7/Jo8NQ8V7fAdv+TOBjGmPC6I9IkinxfCogNzhr/7kOXdDaBq2/w9p+zRntJFus4sPDGXsG192D37Z72FeS4KuVujNmE7xphSuyNrNxOE0NAnFOlJmIpdqyL1iTPDEjpNRhRxhATv6iP2WEEc4dw31uau/tL5d5dNHKFMA/Fdd3CuCO9xfmHFQfguFWYn61y9wLnoqKFDFmzhJ3fqUoU9VJOZPH2XyC2dl1S8r3S9Woe5SfhGzQ05KqDQfxQ8TSw1AHDos5nUfcj3wua1OvsgfKTuiDBFAOss8nNNJIajKZ2hZZ+YN/mlUYPvRoYIIenKVbEIN05RWk72KMb9Mi0LjQpj1Rr1s6p0lpnePT9jRfCP9flJql6oSofAHD0j13t+XfnAUx0CJw0+ESr/GRezwZWoJ+eFJkr1cPetG+Yu5IVOj3G20ppwxomD21FjridYltXGSqJDsGPRVRq2TeG28sGkDG6Clo/C7ji2iPpw30jHNNV9npqzu8bmCTjoxWlHmUkofsN1xXebKLIBRfJnSr/g4sPggb7gi5Th1GZVjL/NhAP86iERRedlvu0/j2xwPTCbokd9z7GWIKiFyaR12UcDS9NxwvEXU7V2ZZ+uxgvefXSnoyA384UhQxJkDFU47lt4rmuLbUb/W2Az/RupJZH/2lUul9HPB0Hj5v/54fgO2awtPnCmUnpUmNt2V3VyldtTcbLVS890mTidZy3jcZWObwfpGHiXihanx93ojEAWvI45NcXeBEKJLBBueAudWtKWMJaMuFRfOQH+iNEqOXhbef2YdCR/B1ez0ozNRGJ+Y91sgS4bS+oQVQv5yqmOh8ux/0BnR3h0+okNZ+UeCkCiGbeGXxFZEA5v5eyyzOedNKKvG7HF2EohYbqiugwjqvEMJM3EgQW2X0ELTSObMOaPU1Y9bVVSngqa7CPUKqyEVZO0p7r47ylrmF1yphBvj3NST+2TWxytABJFQXvI6JqKUrYX6rppnqH/LmhRkzkNjRzY37UhbgS0DeNbhTIFyhIsOcY6zzL7wb2Mw/+rBVGYbhYbnkWCVfnDlue+t5ciHMErWeU3+0FVTyRjrw9vUiwdkOlEt1wRWP7d0+MNH1WYs9uD7vJY2Ips27zqwUQM/e809ciK8k1X39iOxP353SlFe7zP9aabiYUtQMvrjsNgFV7WhJIBh3GGojE79LgOkWEC9xLS5NQrYGcB1Mt8JLeb74uca3DwCmIen7xfMCmV2dEnXwSCa0wW1p/azHKD95xODwXqu7yQC6GpuvlkQTEhYHA5BrWEBeLj6JTyzoEjiWpINSwghThhOjZijLivURXrcJpraL4f1E03GBwkiFHpvEdhYOYKfkWVTwsEffK1u6hS2ibRXNl1kRMG1j2J9nI8S3kXu1c1K53Hdx2MqWIpeNcTdB0m/9FthEyYIZ2HCdZWaluqKL9aqADTvLAG/Gu4gw+s5StKIbILdjQCIULT0TlMKzVOWDODCcsYtl6b8v8ib6W62Zi9WP53ABfSAsK34oRCS7fKnrjzibYhWQIHC+8jGCmV+STSvKnGrbM6rVHgbmjY71fjzRKlCBVxwcryHnJSD5ubf0e7T911Ts+0UGaLntLrj+UKyLpkMeWpFKD/HbEXtGIWeFxjQPBt6N4ZNSycZdM8MRr9hMQxtZ5gH1KETkx5es9QCNaNKHV4KfaZXaexdWYo92cjMbHVS2tlhNRZUXeKYdg2OxV0mDw15K3sg8oRBoXDgZ/sg/frSBiUp+QCFi37fSeMFby8hJAaJqSlFsgas9eNyZwmzAtIty0DELdo2T+/OtQx2CnyLXL+pMrHXg+vTrqX1k3IguWysOk6D/e9yNGa+XAY5px59jnfW/pKQZPMASzpyWncO9OAdx2FfDlsfIbNtQK0FLKtErTCa/Kiu/tkdc+lUP1/Gv2Eqat7xoqTjmB3+ojLulgdEcmoYOvEohHngWkgqr8Wji96vaYUs7RHbfaWgbYp9E/wTRlq/6n1FwPTsHPEnD/j9su5acdawqw3NcmpT+y7VdG09PzBXaxomfYy1Nj7PEfPwNQO1cNl0891NeL3vCp/CtX4EpSi4t304hg15N6gWHj9dvDB1D4TQ36HWMpUHwdH72f/IUzibZB8l4VguM/AyvxUSjq/I9DUXSLyVfEuMBzMIzzf28Sx7syeH3p7gx9yjVe59PdJ6GdzpQ6pw5VycnObmXI2PPJ8Vtj4OSjVgB8Tj38BvzrfTuCLwf9Bs4xRrNdyTA9XqqmC5gaaQmgMjopgX/3PE7mQfUg84mcxDVxQ8nGFpod0UJgxAZHSa2TK0A9yC4fut0yLJ6oWqqjVtf3XzIALMIGsTSjcsfFRVu4IbuGnwadAKpUwyWqqXankvYLvHddA6tpkFUBmIn18iuezstKvPyrh1g4UKoxXA89nSYcm9KaFBpFOuoX0SzjDJyB1PxLaj6eK76JUURNW0oO/UCylqN8VbHICM7CCARHCei2cFjUv1rkhSqAqfHN1JJgLE/i7pPfxHcE68BFtOX2wuvnqUB70eCiwQNHNByulXygUk1VTOaimn5+yEVs0l7YSkwmGrmvvL8bye59TbugVBqKC3xUKzMlJ6xFADsEptrWLHc3qkYR3kmAIb6mfJnZYnWQAthwM06ZwvVLFa20iWbQexHCOUb8pYTcdcWDM5pjYCS4EPMuqOBjvssoy6q+oSZdyE+3M4pF4oF6gDyA0pv6bE280iX9u7R2S9GJkU90H9NB7eJNperm1tvBaEcckAzWawU4dmHpjNWEACCZvTnmUl6NtJx/c+TNWh/94NbkQI2G9nWKKMZ571UfiwbRDF5gfkEERxAI230UDQRWBHNZr9xs6E2uzNVuoslVsHMy/88NisptN+u70TcsQDMOntVCtzzLMUfNjMChTsqokJZj0qAm+iuCWFx/VTbeLLSeeavIbtEZlm2ziowfgqoK1QNV/IJ3JRxPwk6rCJGrqO13s4Mef/K0KMGAYEDvttovXhSVvQVCBtn7m7IWy49ug7aWBZ4dOaQu8BKmYImW42EgDIldFMUGXhNUp8gQ1l6QTIaoyOKe++kxZGyB9sldWqBy8WAdG2tT68SWt60ApcUkYctNKSgKIY9HiqGn88W9BAoVXZQ3Q0YET7Sr97F6ol+OqdOt6j0ZCFsU4tjSPLzfFzL96PP6v+MwBVPJxvLY1wKsx2oPHSPO//cls3f2fjYRJGdcy8ykB6aCICR8duKUxE96Zf6veNs/bV/JaWJrd91RWNlatw+SAlMbm/DX3SxEOO+Qxn2WNuzbsBV6hRy46+ptwL3YEMK9X40cEjP/0MZhdJNgYw9fUceQTLPfHtwGdK3Xdjfta5+7456Q9T+UxQBTkEwa7Eo4iPej068kf+sgRsJRNktglavKzCqVebIGlXuqfAouj/iWKwXbf6CXZGSUCGzG9OIOwBFvqk1MwX3MfHDslZWS7PPyr7uAWqUqB4VastlCmgF7tGm1yHy+8Nrg439wYFW5CeKcB3a1WXqyvYJhT/OfXPAhRiZ+WURzO77cq9l/J0GdhY3LB6acJybtJhK1Ocsgkt4aSCCwN4E8U/EDMhbEHBpEye5EeB0oniCwcCj7SY7jMQNNG1X41jB80UJfyE9r2l+kRMazmH4aASKpO/6A9NF+JmRY8GEGFo3abAWIYcHTNB9/2pMy+MpKozWhFNIYPgBf+MBt35uEd2JBbTX4qkcfi6ldUOT1SLtzqx0kPjij7lRtmta0w31upiiNNyavzgCFkVoPebqoHrPycaKD+uWnFNHt5foQaBZo1C87YRuqWSp9fGVDmKf6Y3ky1A6RtTLXvCaqpoaGmjJ5nJ6l4nJPgBQho6kFEylXRHSMfg+LNzOTRwJ6YGAO947mTP5nujXanUqccXsgSPaTAhfUvo44d4hErm7b1hULWP4jPn/OslhiyPs3tQ8wZdWvXSMKMIDe/Wscp0EB5bgXeyHoC1Ynz73usEvA+1A6xWC3A9Q5FcEHyB7+PZ8OZyBBhHWdh/rdn3sX0Tt188qZ3XRDHtTUEyR7qcddKkYkUsZPC/Fspmb5q/Z00fJSwy8be2GcyGan2WqFbBzI9F1b7KH4Anon/gyDcemTMn0oy8yEWUMpu8Q8g0x/BBdohw6FVcqRFyBhrxpczr3boE+odSUHIpMhqqzMV2Tk7HH+l5vcsyEiy0d7RzCIHJeIEHlFyvXMGa3o0x3x3oeXN1yNfnXGf/gCzEupjvGi8o6faSTVtjnExSlli2dryRf5ABeh+nvKw+mEeX9uYUuu7l5Uot71Cta5yvAyZLAT/IifufGmq5kPGzbZ33BlVRE93Abw3DlOjnQZRTloqUDDWy7IM6YZ6l5GY/qhsYP0oCWOM1j7KOJ6j9QBlDwGo67vrGDj8abTWbuBOnyMQRkYH65WfmlT/+H7lyxL010kxncQg3m4p7gu6T84xU1Wm2QHog/+k7P0w4+03i8L7vW3zH6o7pNU+1c+xmzVraqja+PDHQPPRpx63cNyrak8BLuwAsdlvZXaX78Hab1j7GT/PylGPYOqzOXel7PR/zqab7U5AYclLkX+isACUPXrGzWToV1onm5U1zxc47R2+50oyq03E5LCuuRdcOoECCc+07P1GIiRa1svMJMGUZwzaWK4DT0aYEdgYpj9KXJoE4eCxwRuqHIMWrH9Zuw9guX0Dp254djewvYBPmLBRS8Pou5auRmNnOp+6L99lrHqjwTxPIn8yd4oVOVjl+fRpiew/T6aq8Pr9o94Pgfr099Rg0ThpP8rQpY2kiYfwaGvTUsR7y+X62Dr7SvvWV17Q6HrGvHVmfEtiTeNl0Dc1fyJo73dBLk4qnxNyyLhExv23D6iCJU31cXucX6heSmy8NiLRp3Vql8NKaQ4EngEe0Rl8PRUYmrF+G6WDD3uNM1eaEcgUAqL8XYJYzlI3Xp888CVYv1DsMhTMEA9nau3/AseTmzrcufNYk8VE9BwRT+s+ph+9WwJGe8/9Yor6VJ9lX12BuVaRBGdj5njLyhkTEcBF6bZcUNn3PAu6KZkySXewUOShbRqokJj0BCq4nldZxN/H7svTDlO3hpI9Q9bL11NNnE9UB/6W5ODh26VAioPtQtL3JCKm3WI4fmrQQe8UdOdOSes/wi8k3xLcWJPAvFC+p02I33T9XyZBHmSzIQKjgwk48CjAvY8zzy/08/7s39auC2SBYTm/3kOZNk9d9LNI864A/9fKlZaWbuWlXqa0UV8W8L4UowZTbW1fCyB0QOHbOTfnGlK88lbh0MawLoOaq6yEwaQs5YGWfo4quvdCJRGsOW5NNA4qd7d6F2XH+bL2waWGNfIlIFoTAjE0d4ljHgph16yHrT57zGdwHj6Sx+4yNFd5JwnR6MHuE4M5YpotLEWeKEA/ITCansNP/JGAWx1zReGkkUV8OoiYs0jgpHsvQWOhyPGLvE84KVdD8IJl6YVl55/LOTJ2sRDhG7HKZlIsqf+e9F15M6ELm61yj5+KFyOWuqtuiRQnT8BU9jPM1eHzmvIG9LLFFNxI/d5BQjT1NX4Xe9BsUaDQAyF2PcPoHMXZET5Wz6QBb9SthlIyMxe2iHJM6Pwbe5hRnM18/vfuTiUEhNQcSYxmG8igmvtxS9D2t6vxhyOHTGO/N/UqUd7ciw5b6FdLH9Cv3aHBLqAGb4dEHwuhrTrcnG10w3zaqjoWywKn1pU4IqqO85xWb79jLBbKbsogp4W0qXSCw9tDCtpeAWTc9FZcmhw1ng+hCtvVve2tVnA+irf9sAEXe1bfThk2j1C+IrPqsvQEPiLd+5Qa5A+R8Lh95ScLGyUYrXl6DfqcU8p8f3CdePhsXOSqkpjiBhJnoXACnWcgVC/CPp4B1z4Pj0q5fLH3N38xIhTf/16oyoKgaeIxq9TTyGKdTaq3NVx1hpPheA/lwFCPnL71+G2xcM5X0g77Hc22Zt7OZ+PhBoLESifuUjmxjlDeEUaLvrnAU1N7PVgfm7E5vPsChegnkrO2l0gn3FkjBfYDPx7JgBg3iKvgS7h8xnge297LjUwy+kLTG3NnqerBIk2uFrVs8eiofQ3nt+cctxgU9ttrGEPoXi+Gk21w6bXxUjCYvpT2UayyecPmBbn35fX4FFbnBTh64q31XpD9qHQBTMy38oSi7rj4BmeQGG5fntFbTe2OTLhVU/95I2C+25qPrPJa9MnkQtuM/HAWYx8prKg7I5YKoM93h7L/uFu6FXm/sWXosqiawNXtvfsYzaz7A4zNpgTFPv41K6UnOFtKL966Ozy6RRRbvue02iy6PoXvltDHr/P4kNLLwlsGmtJEcR+XLzY+vF/s8Mqg8PsQjGO9KGtXuQABbGZC9gng0XAksdUXGeC23gFp8Btj3P9QQWdCg0LUUoYW5yXUU1jPSfHM2p85fNhEFmRIxCT1QElN5aUtkucDRjJpRWXUtUkbL7CR/CYONwGbn8RutgYgDEHKfsB9Nn2bDpc20y2MwTLJGiz5lyo+Bd4C0WQV//r+CZdmH/8KgFDaZrLpSuAqremQQDjnqTBN68hiJbW7r51m8DwJIi35IDwEd71l8Hsqex9u+SskseJaiA4DFHNAq0j63kOnW1HNFDQHuCFyA8DQEIfMrluxhxBzEgYJyo+qPm/I8uFRA4lgzh9GRojWngzhOUAJJ6vKqCdDL2LEQhP46OFQ+k2TQfb98lk9/EO0/zo24vlKHIlyy3RovyRGON3VlOJMVaggl52jfiZ1hCCLmJ6QXyk+4dlmg0yLaUcn2VqHZVQpdSrg2vZ/BbDgH8LswzlHl3CE9Drgvv0evYjUVxAg5dPLJYIrX8fT/VuEfkI4FbnhgqpW40futmYhpgwZB4K1DusP4CDED17sCPXbAyxROtrYfpS+TTB4NbmGBD73gCIFj1On/p509VuzLB3s5gPEm8K7Io75MImYFpxNpj0XY2msBR0wrf+FfzIWyBr6yIjdU+Cq3ZTyXXZoLjKN0K9ZZUHXdrl5/7QKu2aCfEj0dk13dbndXMgoou66P5M3uGpsMLJZodN0DEHsY66p2wF8fT6BKRZ5EuCa7Xzpq+Nt8LaEwA25Ob7wwmiXP2kmxwVTrHTzwz11rWZfy7QPkR9ADLtEpuKSygGbLzUsZcjrRYa68Tasg/d2g0R/0kQn2+6h5G67Pu8Idm4pm7qKK8dkC3I9CneKZ7MRsnlTd+ri9bYZY61w3wZNGjmQHAq2ExVyr13Jm7juQi8NCrbuUYliR9RxGb4V1ZETPTr/KTyGkYz4sIzCokYnpbubx2lVC+NmVEWZDozRaREOGKQjGPtPiDwg/ZaqeDrg3rSkTG6EI+DNgeUxuEwenTymh+1gdtqmTIB155JV5jQGHue6nIdLmwHKesqR5Uyd1oIx4z1icjpWUKSbX7hXf7Pstciicwvupdr2olWzTNyf0ORzjKOiGJAQ1Mm++xt9uK0G+oqMzEWC1jG6UCGXMSICY7w=\\\" id=\\\"__VIEWSTATE\\\"/>\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" value id=\\\"__VIEWSTATEENCRYPTED\\\"/>\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table style=\\\"text-align: left;\\\" border=\\\"0\\\" width=\\\"1016\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\" colspan=\\\"3\\\" height=\\\"40\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\"/><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/account_login.aspx\\\" id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\"/></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a style=\\\"color:#CE0000;\\\" href=\\\"/garden_center/cart.aspx\\\" id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\"/>(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\"/>\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" bgcolor=\\\"#F5F4E9\\\" height=\\\"134\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" width=\\\"100%\\\" border=\\\"0\\\"/></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td style=\\\"width:154;\\\" width=\\\"154\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" valign=\\\"top\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link href=\\\"/css/jquery.jdMenu.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n            <link href=\\\"/css/jquery.jdMenu2.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n<script src=\\\"/scripts/jquery.dimensions.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.positionBy.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.bgiframe.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu2.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br/><br/>SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br/>\\r\\n\\t<br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br/><br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations/growingminds.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"100%\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td colspan=\\\"6\\\" style=\\\"height:10px;\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    <div class=\\\"centercontent\\\" data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;_links&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_MainDataPanel\\\">\\r\\n\\t\\r\\n<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td><span class=\\\"breadcrumb\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumbActive\\\">Vegetables</a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\"/></div></td></tr></table>\\r\\n <table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCatNameLabel\\\"><b>Vegetables:</b></span>&nbsp;&nbsp;<span class=\\\"subhead\\\">Page <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCurrentPageNumberLabel\\\"><b>1</b></span> of <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopTotalPagesLabel\\\"><b>2</b></span></span> &nbsp;&nbsp;</span><br/><img src=\\\"/images/pixel.gif\\\" width=\\\"200\\\" height=\\\"1\\\"></td><td align=\\\"right\\\">               \\r\\n\\t\\t  <b>1</b> > <a href=\\\"/garden_center/browse_category.aspx?id=123&page_no=2\\\">2</a> |  <a href=\\\"/garden_center/browse_category.aspx?id=123&amp;page_no=2\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_NextHyperLinkTop\\\">Next</a>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</td></tr></table>\\r\\n\\t\\t\\r\\n <hr/>\\r\\n <span style=\\\"display:inline-block;\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList\\\"><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=195\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl00_NameLink\\\">Amaranth</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=199\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl02_NameLink\\\">Artichoke</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=124\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl04_NameLink\\\">Beans</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=133\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl06_NameLink\\\">Beets</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=134\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl08_NameLink\\\">Broccoli</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=136\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl10_NameLink\\\">Cabbage</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=137\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl12_NameLink\\\">Chinese Cabbage</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=138\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl14_NameLink\\\">Carrots</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=139\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl16_NameLink\\\">Cauliflower</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=140\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl18_NameLink\\\">Celery</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=141\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl20_NameLink\\\">Chard</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=548\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl22_NameLink\\\">Chicory</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=192\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl24_NameLink\\\">Collards</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=142\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl26_NameLink\\\">Corn</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=146\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl28_NameLink\\\">Cucumbers</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=147\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl30_NameLink\\\">Eggplant</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=562\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl32_NameLink\\\">Fennel</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=151\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl34_NameLink\\\">Gourds</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a href=\\\"/garden_center/browse_category.aspx?id=152\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl36_NameLink\\\">Kale</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a href=\\\"/garden_center/browse_category.aspx?id=571\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl38_NameLink\\\">Kohlrabi</a>\\r\\n            </span></span>\\r\\n<hr/>\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_LongDescriptionPanel\\\">\\r\\n\\t\\t\\r\\n<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n    <td>\\r\\n        <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_LongDescriptionLabel\\\"><p><b>&quot;Agriculture is our wisest pursuit, because it will in the end contribute most to real wealth, good morals and happiness&quot;</b> - Letter from Thomas Jefferson to George Washington (1787)</p>\\r\\n<p>We invite you to explore our offering of hundreds of varieties of organic vegetable seeds in 35 different crop groups. Choose from our selection of heirlooms, improved open-pollinated favorites, and productive hybrids. From zesty arugula to sweet Zefa Fino fennel, you&rsquo;re sure to find your personal favorites, as well as some new varieties to try for the first time. Freshly picked, home grown vegetables taste incredible and contain all of the vitamins and minerals that nature intended. Eat a rainbow assortment of fresh veggies every day to form the foundation of your healthy diet. &nbsp;</p>\\r\\n<p style=\\\"text-align: left\\\">&nbsp;</p></span>\\r\\n    </td>\\r\\n</tr>\\r\\n</table> \\r\\n<hr/>\\r\\n\\r\\n\\t</div>\\r\\n\\r\\n<p>\\r\\n\\r\\n\\r\\n\\r\\n<table cellpadding=\\\"0\\\" width=\\\"620\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=195\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGETAMAR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=195\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_MasterLink1\\\"><b>Amaranth:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS14902\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl00_NameLink1\\\">Hopi Red Dye Amaranth</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS11024\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl02_NameLink1\\\">Greek Amaranth</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15484\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl04_NameLink1\\\">Manna De Montana Amaranth</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15834\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl06_NameLink1\\\">Burgundy Amaranth</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10724\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl08_NameLink1\\\">Mercado Amaranth</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=199\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGART.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=199\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_MasterLink1\\\"><b>Artichoke:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20860\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_SubCatRepeater_ctl00_NameLink1\\\">Imperial Star Artichoke</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=124\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGBEANS.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=124\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_MasterLink1\\\"><b>Beans:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=558\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl00_NameLink1\\\">Green Bush</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=557\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl02_NameLink1\\\">Colorful Bush</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=126\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl04_NameLink1\\\">Pole Beans & Half-Runners</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=132\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl06_NameLink1\\\">Half Runners</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=125\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl08_NameLink1\\\">Dry Soup Bush</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=131\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl10_NameLink1\\\">Edamame Soybeans</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=133\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGBEETS.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=133\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_MasterLink1\\\"><b>Beets:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS23427\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl00_NameLink1\\\">Alvro Mono Beet</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS16658\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl02_NameLink1\\\">Pronto Beet</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17495\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl04_NameLink1\\\">Shiraz Tall Top Beet</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS06066\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl06_NameLink1\\\">Colorful Beet Mix</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=134\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGBROC.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=134\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_MasterLink1\\\"><b>Broccoli:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15949\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl00_NameLink1\\\">Nutri-Bud Broccoli</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15874\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl02_NameLink1\\\">Early Green Broccoli</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17524\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl04_NameLink1\\\">Fiesta F-1 Broccoli</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17504\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl06_NameLink1\\\">Belstar F-1 Broccoli</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15374\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl08_NameLink1\\\">Calabrese Broccoli</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15753\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl10_NameLink1\\\">Spring Broccoli Raab</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21804\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl12_NameLink1\\\">Santee Sprouting F-1 Broccoli</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=136\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCABB.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=136\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_MasterLink1\\\"><b>Cabbage:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17571\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl00_NameLink1\\\">Buscaro F-1 Cabbage</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS05749\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl02_NameLink1\\\">Red Acre Cabbage </a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21545\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl04_NameLink1\\\">Integro F-1 Cabbage</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17609\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl06_NameLink1\\\">Famosa F-1 Cabbage</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=137\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCHINCAB.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=137\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_MasterLink1\\\"><b>Chinese Cabbage:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17563\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_SubCatRepeater_ctl00_NameLink1\\\">Nikko F-1 Chinese Cabbage</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18276\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_SubCatRepeater_ctl02_NameLink1\\\">Bilko F-1 Chinese Cabbage</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=138\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCARR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=138\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_MasterLink1\\\"><b>Carrots:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17645\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl00_NameLink1\\\">Yaya F-1 Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17631\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl02_NameLink1\\\">Napoli F-1 Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15879\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl04_NameLink1\\\">Scarlet Nantes Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS06067\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl06_NameLink1\\\">Garden Carrot Mix</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15380\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl08_NameLink1\\\">Red Core Chantenay Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10975\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl10_NameLink1\\\">St. Valery Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17624\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl12_NameLink1\\\">Dragon Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17646\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl14_NameLink1\\\">Yellowstone Carrot</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=P107100\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl16_NameLink1\\\">White Satin F-1</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=139\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCAUL.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=139\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_MasterLink1\\\"><b>Cauliflower:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17652\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_SubCatRepeater_ctl00_NameLink1\\\">Skywalker F-1 Cauliflower</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17663\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_SubCatRepeater_ctl02_NameLink1\\\">Veronica F-1 Cauliflower</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=140\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCELERY.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=140\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_MasterLink1\\\"><b>Celery:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21005\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl00_NameLink1\\\">Mars F-1 Celeriac/Celery Root</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18225\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl02_NameLink1\\\">Tango Celery</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS14530\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl04_NameLink1\\\">Early Dell Celery</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS05768\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl06_NameLink1\\\">Red Venture Celery</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=141\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCHARD.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=141\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_MasterLink1\\\"><b>Chard:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS22519\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_SubCatRepeater_ctl00_NameLink1\\\">Fordhook Chard </a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=548\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/Eros.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=548\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_MasterLink1\\\"><b>Chicory:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17998\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl00_NameLink1\\\">Eros Escarole</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS16699\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl02_NameLink1\\\">Bellesque Endive</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10739\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl04_NameLink1\\\">Tr\\u00e9s Fin Maraichere (Fris\\u00e9e) Endive</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20509\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl06_NameLink1\\\">Rhodos Endive</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18019\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl08_NameLink1\\\">Leonardo Radicchio</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS11068\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl10_NameLink1\\\">Early Palla Rossa Radicchio</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18031\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl12_NameLink1\\\">Early Treviso Radicchio</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21045\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl14_NameLink1\\\">Catalogna Frastagliata Chicory</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=192\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCOLL.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=192\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_MasterLink1\\\"><b>Collards:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21293\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_SubCatRepeater_ctl00_NameLink1\\\">Vates Champion Collard</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS06070\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_SubCatRepeater_ctl02_NameLink1\\\">Collard Greens</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=142\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCORN.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=142\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_MasterLink1\\\"><b>Corn:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=143\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl00_NameLink1\\\">Sweet</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=144\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl02_NameLink1\\\">Parching</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=145\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl04_NameLink1\\\">Flour & Ornamental</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/browse_category.aspx?id=561\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl06_NameLink1\\\">Popcorn</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=146\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGCUCU.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=146\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_MasterLink1\\\"><b>Cucumbers:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18278\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl00_NameLink1\\\">Adam F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS06076\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl02_NameLink1\\\">Sumter Cucumber </a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20878\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl04_NameLink1\\\">Saber F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20447\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl06_NameLink1\\\">Akito F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15964\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl08_NameLink1\\\">Marketmore Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10630\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl10_NameLink1\\\">Bush Champion Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS16675\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl12_NameLink1\\\">Satsuki Midori Cucumber</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS17160\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl14_NameLink1\\\">Armenian Cucumber</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=147\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGEGGP.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=147\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_MasterLink1\\\"><b>Eggplant:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21861\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl00_NameLink1\\\">Vittoria Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15971\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl02_NameLink1\\\">Black Beauty Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15738\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl04_NameLink1\\\">Rosa Bianca Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10810\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl06_NameLink1\\\">Italian White Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10811\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl08_NameLink1\\\">Japanese Pickling Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20465\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl10_NameLink1\\\">Louisiana Long Green Eggplant</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21264\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl12_NameLink1\\\">Turkish Orange Eggplant</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=562\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/Perfection.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=562\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_MasterLink1\\\"><b>Fennel:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS10641\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_SubCatRepeater_ctl00_NameLink1\\\">Zefa Fino Fennel</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=151\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGGOUR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=151\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_MasterLink1\\\"><b>Gourds:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS15973\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_SubCatRepeater_ctl00_NameLink1\\\">Bird's Nest (Bottle) Gourd</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS14540\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_SubCatRepeater_ctl02_NameLink1\\\">Dinosaur Gourd</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=152\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/VEGKALE.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=152\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_MasterLink1\\\"><b>Kale:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS11200\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl00_NameLink1\\\">Red Russian Kale</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS20519\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl02_NameLink1\\\">True Siberian Kale</a>\\r\\n\\t:\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS21862\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl04_NameLink1\\\">Vates Blue Curled Kale</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td width=\\\"60\\\" valign=\\\"top\\\"><a href=\\\"/garden_center/browse_category.aspx?id=571\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_ImageHyperLink\\\" class=\\\"link\\\"><img src=\\\"/categories/Korist%20F-1%20Kohlrabi.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_CatImage\\\"/></a></td>\\r\\n\\t<td valign=\\\"top\\\">\\r\\n      \\r\\n        <a href=\\\"/garden_center/browse_category.aspx?id=571\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_MasterLink1\\\"><b>Kohlrabi:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a href=\\\"/garden_center/product_details.aspx?item_no=PS18274\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_SubCatRepeater_ctl00_NameLink1\\\">Korist F-1</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n</table>\\r\\n</p>\\r\\n<p>\\r\\n\\r\\n<span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatNameLabel\\\"><b>Vegetables:</b></span> <b>Page</b> <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CurrentPageNumberLabel\\\"><b>1</b></span> <b>of</b> <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TotalPagesLabel\\\"><b>2</b></span>&nbsp;&nbsp;\\r\\n  <b>1</b> > <a href=\\\"/garden_center/browse_category.aspx?id=123&page_no=2\\\">2</a> |  <a href=\\\"/garden_center/browse_category.aspx?id=123&amp;page_no=2\\\" id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_NextHyperLink\\\">Next</a>\\r\\n</p>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" style=\\\"width:1px;height:100%\\\" width=\\\"1px\\\" height=\\\"100%\\\"/></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" align=\\\"center\\\" height=\\\"100\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input style=\\\"width: 140px; margin-bottom: 11px;\\\" name=\\\"ctl00$SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\"/>\\r\\n\\t\\t<select style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\" name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input src style=\\\"margin-top: 11px; \\\" name=\\\"ctl00$SearchButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" id=\\\"ctl00_SearchButton\\\"/>\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br/><br/></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\"/></a>&nbsp;&nbsp;<a shape=\\\"rect\\\" href=\\\"http://twitter.com/#!/SeedsofChange\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\"/></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\"/></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=123\\\" class=\\\"linkbuttonfooter\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=29\\\" class=\\\"linkbuttonfooter\\\">Flower Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=77\\\" class=\\\"linkbuttonfooter\\\">Herb Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=336\\\" class=\\\"linkbuttonfooter\\\">Cover Crops</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\" class=\\\"linkbuttonfooter\\\">Trees</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\" class=\\\"linkbuttonfooter\\\">Seedlings</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=361\\\" class=\\\"linkbuttonfooter\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a href=\\\"/digging/garden_info.aspx\\\" class=\\\"linkbuttonfooter\\\">Gardening Information</a></div>\\r\\n\\t    <div><a href=\\\"/digging/glossary.aspx\\\" class=\\\"linkbuttonfooter\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\" class=\\\"linkbuttonfooter\\\">Succession Planting</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\" class=\\\"linkbuttonfooter\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\" class=\\\"linkbuttonfooter\\\">Seed Saving</a></div>\\r\\n\\t    <div><a href=\\\"/digging/zone_chart.aspx\\\" class=\\\"linkbuttonfooter\\\">Zone Chart</a></div>\\r\\n\\t    <div><a href=\\\"/planting_guide.pdf\\\" class=\\\"linkbuttonfooter\\\">Planting Guide</a></div>\\r\\n\\t    <div><a href=\\\"/soc-links.aspx\\\" class=\\\"linkbuttonfooter\\\">Resources</a></div>\\r\\n\\t    <div><a href=\\\"/Biodiversity.aspx\\\" class=\\\"linkbuttonfooter\\\">Biodiversity</a></div>\\r\\n\\t    <div><a href=\\\"/Sustainability.aspx\\\" class=\\\"linkbuttonfooter\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a href=\\\"/FAQ_seed.aspx\\\" class=\\\"linkbuttonfooter\\\">FAQs</a></div>\\r\\n\\t    <div><a href=\\\"/CustomerService.aspx\\\" class=\\\"linkbuttonfooter\\\">Customer Service</a></div>\\r\\n\\t    <div><a href=\\\"/contact_us.aspx\\\" class=\\\"linkbuttonfooter\\\">Contact Us</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"linkbuttonfooter\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a href=\\\"/about/our_guarantee.aspx\\\" class=\\\"linkbuttonfooter\\\">Guarantee</a></div>\\r\\n\\t    <div><a href=\\\"/about/safe_seed_pledge.aspx\\\" class=\\\"linkbuttonfooter\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a href=\\\"/SOC_OGCERT.pdf\\\" class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table style=\\\"text-align: left; margin-top:24px;\\\" border=\\\"0\\\" width=\\\"1000\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br/> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"url\": \"http://www.seedsofchange.com/garden_center/browse_category.aspx?id=123\",\n            \"original_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<title>Seeds of Change</title>\\r\\n<link rel=\\\"STYLESHEET\\\" type=\\\"text/css\\\" href=\\\"/css/soc.css\\\" />\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/master_scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"JavaScript\\\" type=\\\"text/javascript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script language=\\\"JavaScript1.2\\\" src=\\\"/scripts/HM_Loader.js\\\" type='text/javascript'></script>\\r\\n<script \\r\\n            src=\\\"/jquery/jquery-1.3.2.min.js\\\" \\r\\n            type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Vegetables\\r\\n</title></head>\\r\\n\\r\\n<body id=\\\"ctl00_MasterBody\\\" marginheight=\\\"0\\\" marginwidth=\\\"0\\\" leftmargin=\\\"0\\\" topmargin=\\\"0\\\" style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\">\\r\\n    <form name=\\\"aspnetForm\\\" method=\\\"post\\\" action=\\\"browse_category.aspx?id=123\\\" id=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"ebf3xj1HVqKVjY+06DJATt6Es58C8RRAHjf2DUfEFpeo2UtzZYM7p71m9jOb0vANKK5sHtxCfVaKL14RzLV+hz7psnQQS7d8pVbQcxG2fpOMwOGlRCWVyE9mA0YWMIOPA7SywHkZMCvAL+wlzSLLyieVrqLsk/93FiMu8RViO+07lNj6BApERVA0KkaSgDfCWvNNgpKHat8nXNSYMI8b6Aa4c/h8sa/C2d5tKU/33LVwNRWcYD2wlQ3y3c3mVKOs4SAerKqpPpNvGfD7bUnLarT/3Ri1XvT6erwZCsMr0jBv+br/v+G6qoAVCY1JCFi0FCROIbEnh7B4Mlbn2Npo4mWeLpR+YNfIrj8kjYEDDU+cq+0B1UkbWjypMLt1XKzdroNGMVIAeBlDPfmFgkYYOgJfmTOmBU1KAGR2eB5FC9+302v0kkr5HN+HJ1J5408qcES6GkPnzU/UJBIwpo3ANzC/wflJCqqB/ZDrabkTsfWeQRZDbGTfRfGrVg1DKLE0YRHnNbGjnEgL7Xyn34P0ijRVYIMalrctEkW1e0k/sKMBehRBIpmtpB/aLyH65K7oZiCA7p1+m5vPaGSrciHNmUBrAbeHmAITvKSbKPGuPs2IJWrIJzhWgWO2fN3Eiy3bqRXPGOc4yPVRSbJF75E9dhv4v8T7uBAmXLxlKXK0SBT0zK4fgOIoTdlDZI3LLbvdez9FGWKoj7yaPAqlXVlvKQT8Fz1uysvYezwy4125Wz2E9n0LHMv6ZSA66Z99Ci4GkR/gWMBm8AjLo7YviNtf6YDn9WGBh+uu9YtQXNjWCjOKyEXFtU/8RwSWks/4Id0ufW1wnoG0lQOuus4+denext6dIwMRpnxEV3z4m/JRubrQgv69CrltCKXeJd5BKutmu3shfNqFzwkCQhYNXR5amTDLg1wdaJzc/V86BLqUohnl905CO3soUsw0gZG7inBeSHbxTbRXvo/NP7qjNxPSQn2b1CeZrBpX7K29xw48lnIi6Jhr+ehQDiqwfQw3ui+tbQn/DJ0RV/S/2ymzjwLVEqCmPvjThsbmIT2k3cHnhUyJidHLBC72bnoxhCCemPWkcM2amFX6xu2nPkLPTNvhzTtVQzGdGG25VbbWiW2KUxkH4l9GROaAJWTqtrAh7sDvgh1GcLkSp5lxF9ZPi8BGolt7bHHkWbQbJ2RCKlO2bgWJ+tDQgO00xw8p4x1r8S8kbAJbr5G7vQwGdj/YS0g6v/+Gs9xZw9NZaW7jhcLuF6cLzjBihqEzBGgYN73xfLCcNR0csTudtX9DB5ciJE5JQS0fGpBIpLOfr885RHpE86sMdn5yGvJeW5BjYBVQzsi1ych1w9byp1tNAYpgWNs9TJAcGtNraIsCL4V7oGDzp6h63E12inVweb3KisegT9xnWsdX0utcjhIqB+3ecvYfRLHbcbVgbk/tQA7n+4vJOXoOZ5gF2xm75WBLKkiHHRN2pnbxNjYvP9P6V1KhN9ki05fTekwZVFGGT33Jkm0w7IKfBMxOERnlCvao4OI8YjziYjElLM5nFlWfrMAM0xLG0D7wKEmVYza9pPORNGu+ji7SIyLSgGFFDuXqD7uHhybt7HBTVs1J9ReA5MeoWZJit40bdDU1mxdB5TIF5zW5eQKn2ffXRDIgsPYtrf7prHjGkrSNaKYzdhrGbc6EEiWzeUj0UScMvHl7Limf7beRtJJpLWECbGXOA8DLYI0B+Cvbg4UNHWhQVhX9959X0+kmQ1ZSqrbYin0gLta/JuLabPIHXUgqENT9CCRx9wGOa/u6JevzP+pJFKBZkPAwZBGFtADw4T/DyvEdvrVJbukznDB2aXai2/ln8R3sHNhWii4230XXxF0fVyyQlDv5x9szeWuadh/n3KRPBBdco9iFCnwGtJBRYph/DXwXAY6cZTG/1ffmx4C9WvB/LvAucgD3l2qdOVuUB//hIbkOsCRXB9pMBy89cUXrPxDBkOz1CTBdKkbXnqmPILyO39c2wjkjAuhoxyyxCbkNiqXsT1zg4/uYKRiGoIuGSyqTDqafsF9LVHliMlW1dP8Sivz+BNPpJ7QxRQ3sHeWb1L91ugbN2gbSDuOUU01OVIyRDhAziFVJtuOELhu1NJLKGkpGemKMzWcrDKm8qhi+F8rYF8/YTBE8gGxBG+JgkmS0Gn5/tFQRJ1a8IH3n+l8gIXwyO16eqvLzP2W0VEJmZl/721zDai/URPBoQFoKxY5T1XafWZiG6RM34OBsIFJfCfwgSAFgHg8iACb4qahLmCBOLuJuQhpfL2/VPtLUks4P25n11ZR6CCqbJlD86gA4m9kVgLDauEK4esFVPRgGRpm1HAKD66wJrBcgTC5u644+jYjp7aBlbDrEfO+evkb23YXfet58SLjif/fEgfGhl/bSfG+FbLZxxr3BoLqlxLoYQnBZieOT1dSN+q3zdYW4iR2XeiXCWa+x3kPmmf2j6Gg0U4h+agnOb13Cqck9Nt7LpDU4LLvzcmGXiGScOLl9xIt87C7/iJrlzqNJYlYNmlqRlUilWf7nJ/RHV16M+qVOi2wJmLDevQKWfSBXJcM4qeGlNY36fhR1wd+GM/sqVM0hdcJSiw2QM4hFgGwJccF0qbeamzlI+rQKBHyq4gwW6VVG4HH9OT+ttI8ZllmEdHL8yahPNY7JRFKZlrWPzwkvthcZ9ovTmMJCwvwuZVPaCRCWOLNOGDVnHPZtvbyoLfBMoglIXKAwbO/06GmbmNAvQyMUr13bq1chFlS1/vM6uhUue+WisJ+QDao30X8SMm42rBcCYcXYX9VoD0B7oci7GHxKdj4h+0UqcfiJhHvI1zbONsY43aI/FHQVNhLH/IR3Wn8qOUbavu4xxSwSwiLcq1/sr7y+92igxcKrHrehKlrHFhEPvz8zv/st5YpRgcR3bgSrGGYGgW30HVQ7x3RIUAqmuj1il05LkZPUrvlpEFPBjLMFX72BWAcmE10ivAzCN4JBc6pQhkpouId6BliUSRUShvlez6eusMPGbSn3Thh3mEUKkDeyaHPf7CFqAvVlc149eEcQehNmsdj+ktpxXHYJAQ6x7k1gjJVcmTogRAIkq40KNsqCfIvgRq4eCto6qypYChtVFzZnQt5DR0sXb+CYq+AjOj4yVUEKC7u5pSHScMTaW8YojEUpoqtCTX+IJjYCE6wsoPyOBCuqYfxbgsbssS72b+1cZpXNBj17PmYdxFno7Zm8Jzk0AEz+ZPrd7HwjBTCi8zpjn8v+zx/HYd67Ex0OZosNTFZidQlfOyGr2TXbgXnzEjFs7vg5oWp2fSXVBDa/HLcEyljmqCuJnWaABBdpAF58C7OAetJIdpE8hqw732GvHw/cRkiYD6Gi508dZBjKUxa4sb9Y0UqKNSSH4vOB6WASlN+Avm7kLH+wPg5JnKHbJP0zcHLpWcbLb04DX1+v7Zg7lx2nwCtVAMN0pDLFC23RWXvv7jkczQAOiCdWrEERE/EKM4+tjG3u5Akq9mbpBFHGIPrylxfwCzGtP+wLGlRZHnnn7V1lWZIacoluG9kVZzli6B+udhHDyouAeyH6rlRN73dJY0mMiluDYJNJ9ullNGi9xeMrhPWzrXtLs8GVSxruOABgfAuoQbCnk0lE+9OipBRzRM6r1jZEOEfX5l0YmxBFHvbCulv3YQkh/vFMLEjXTx7ao3EYKaClF3YmSjQsKAKd/y5AkVKdscQt46bTtS2hrTU8bbciNjGiybK3J1XTODz+0cjhrgVs0i0rKwCeLTdjoujozYXfhQechrsvbBNEjC0vB1fYjqHQJIi9D7lIFaRj3Q6OhVnPP/g/OwMZbbEq/vQgk4ldrSupPV6qXAJCAoS039LzWvQ2RrWBZ/OiIdB/ouy1tMTcb4BCoAORI8+vI4Z9nWyz8vciAEIUK1YWLgb8zIVAKVp6GUq+CbQpZGgfWIdE+bp1tyBQ40zlWUlGMGwOVl5BH3AXM5ugW+gxn9+hMEyVBq+TZgUuFQafKsxUnJSIOTlNtLuodVBGU503sqQ0ONOeE7oU3i0mTDmvFvGmivkPTf6v9Jk986ExhWoNLyI32wtOnDuTJaf3nybmWhXWCT3FAjkYCmSRJ2R4uLm6cIizNcE1Q80iYcPluRtiWXbYdCMGkudLXJQcUrIyP4vX5eloxj12acj25y427na1M4sSSuNclbhxfEVWG/5CkffFS+2oknpS+9Q7lhVLx8jxkIQwTWPPQQNptrXa+qxzIijhF4wUdRZtr4MaBIWT9Q6rv37iGjLR/YKtNr5ZZxs+BvnWpPTtc0bLlIem62BnkvGoZhOdFOFP5LvPQq7fKppvl3Woxvu+CCx90G000paTa5iiKGpL9l7LisjLHpZVH9mK14LP3HiKbTJDx2Irtzd9kWyTd96os4Lh5hZMEvm/GISNqikrrZYf5+vu+htBRBPLHtox0L7SucnykVwqLE5CqVKeLk2+jKTZdotQ+2AwkNXRU3L2opSO+8DHf7MVAefsfG5LiknQnm5ZsQf0u077uTaAsL++ZcXr93plqfBHT7+PxRNqTwQEEOQYuTVsZ5MjVhF4PPijMdZDgwNSmdlRmPbGdvghFMKPbO4t/PG5HtxM/blEwej1HP/JAcdag4WDlpfunq4d9/heqQOlEF3/1vSDG7PpuMsv8ZOHdMvew+X/YPhLKvl+OtVptNcPMDH7SLTjhHOY/9QCK96pbqIPvX5jEvI3UzYlGhplLgyp2QGzJ23VKWiZu9lCHYKALNq64xSV8Zvr1/D73xcw7oqFuNm83LrLr7bOZlnj74+4Wru+znvgozmo0M2GdUGDDTDhD/WZJ6sK014/WNreEM+V0+W60OBMbkJavxZL8wV30rIjWy1aq361FpupVK+sMLsvjyRpcVHEzXHL6GG/PFtLP15a2hlduZYN6+FKzKQJhM0dNfuxYfxJh9czaoz3DgPS17+7xv2G58f16sQseUXkhqGBUXqp39uCUldy4PwOCH0dTCkYEJg0bfC4/u22U11NjuPgImMMYaUDvUZHT/9wq0QyParX93lp2FFbmcc9oAXPVxBBHhPlZADtDsySQYXlETobRCi4+0FSYRMuHWmstYFfV/IUAYnlnBI1+gua4ifcw7nQFH15naD13bv6UnV+4ao4gAeO8jkSLOlG5Sr/7ArGc2aPhfiPZbaxfq0IRPtikMGQLuZ69EqJ5SCSs28VAihbiGDMxLURwRi0MNYfM+vw09XQf7j5vvV4cpCrL8ipmwLoFus7k4ItdeDguEWhtHuaDgqsaZizi/jAh6QHP3A8l1RkuvauGPSOprhL6dxAQOK5tV2KRCqyMGV8WHvzhoFc/fmc+32nHodm3YPXc4NWoExkfVg1/TRlUICHqqsdYoFgA00GiZ+6oYXy+ZesfubDPG1UpuxSP6XLTAS9SLxoowtmqvwJH7ZP2ONtndDcA4AH0qLmn2XHhU47DSxqHK5xxVECcBnq77Jm6zS0VFgLQp5y23cmA3P4KzzLXfmUgt2WzLc9hhJ5xEwJJWruNsv3Iu5UN7tKXyazaNl37mIntqg3Mtl+ZCLuZ69uYzX/QVn0/djMhqz2rIdxGgMcW34cLSOLCWRWTl+4ZLC/r1X5oRIcsoYQOceYEdfhweusqCxB5W/14wtnSCi0fNPWVOm+oVoiAEyO0DDpzg9/nSI+kI4XUaoNZLBVGDmlZcf6BM74IXHlcpvTzqn4GJb79RGkNim127enL2SgBlNiBUeU9wq1JfBzC/cdZ3P0HI0tY3AYHd94U5QJOqtLdU5JZ1nACpuTwR1D6ya541n31aGdBzOTc4FLxY3noI2xrCxStHT1DFhm646DsMrVXy5H7uurJFFFJs1wk4WqnSOnkvFlHFss1eJNh4XSLGcDNw811v0kQDI/lY1XKUxapFnt8xeH46lFHT7yacBkwoLTW49gJwPKAlwzwZNyYNV6K+J67zQAhBxkz6TvVGNRsQ82L/8EVLDtcRIK16sVM1s6ZIGOcx8BBZsclvKJ1bPwid4m6L5fSRjAyYQJlLwmEm7aHjNnXbNzv6K394Il4Q0r1y/rmGfmgEDan24zBemL61moVdYUAYalYroKInicV1FUEfqaGwch1W2hHu/sLlFzBE1z9DnM/hK3fs+xnAmw1JlH/XP7nDqJ56ri4Vku9phwhRfDJge0nIJPFWGoMmEC1odNN5924fuf5AOBQLZft3mtRTfHAmzp2Jb5j0UADdTV+lHVoRM3vJ+NE0bmf6sVYpqx5F57YzfAJByJud5SqGXMtEOCGPyNjuehN1r2v28hqoOsv8DQzi0zQKRzqeeDkY82/7P/AcB7/mIQzbGXWiQsLjQG4i92XFqUTcRGfRUKonGStS8L6rmYDFm//rn49aQIBGCJHx8rxZxokP2ddB40O3nYlwj/ESTfwGaPABFdGD3Zuyb1a9EOHZkSXlhGao2/kX9zQBfdVZIhKmNhF+x1JG+IRt26acMEgsMJclPU2x04nyNG6IKqzcQqRCwXHvE0Ay2IXOd3eHLgUHcf8Pxn6joC2pbIbA37lr2tDnmtTWCOw7zw070PpC1nQx88dbVh4B4ZxHmda17HjBCdv3hxkAK0XtAYFfoBR7yaBSJGGCl33N6i3fldOHDMBW2U2qkb7aUHYERuLAFenHIcvHPMg3JKoFD5BztbKrMYkMqpCpbGBoEKlyMZVklUeGFZ1jc3sH3k6gGuSOrLDT6qiJ7F1BTgUwAfYbQgn+GfboxdFbeqBqfgjotcGegSc+1nogy5wpFpf+Kw4lConU4+KijAHGgBQO3HfPaYL4FTkhlKdf2b+37LP1ESBEO1S9aKlRukumMQaWRUp5xJoDgEZutTUuKyB3qCprjHP+JCnalqC1bfqoDUwbOwcSvBqj2zDZm/eHj+UtMT3NrD7caZ//xAuQk/wIOjEBL18MBCtqdxwJyruQvZvNTqOlTKddHMUtQNii6KSyrYxTPcCi5fMpC0NTFf164BzCYuykngcy93iJcwOhc7eS7c0jga/2oAYw6uRQrYBPwGKOVeQVWaZMTtq3UB2+OhIblrCJeb3LKJ3TRDqPnqpuuimHs6P1fWCUbAmNsNCEmgIWKi2m+oo909fyyCydpulpcKG7f/E3ZxY2rvCE3DmV8iwW7yozv2ZpbDT+J38xmkAS3exi6VH+FUQpqadNsGkfsXX5F5B2U+gy8beMhGW1815BqnaSb/I0ozhf9xcXnP4TyGzlOs5Xwnb+Gb+3GC08C1NScOMqW9i4GGOxQx/s+VuCOsoXpi1agxMVcGgQ4a4fyViTURMFERgt9FyRkfI1vKwWkooIyqEO1E5efdL6VFPDeLJsN0h7C/Dgqc9gPFm7p3ozHVkuUVDnULfZqBxPDBaZN+PIXXu0GV15Pj8du4wVqaeGyDdBzjtgiOgDuyYDjVOO0IfmT/fDbaYHtCjijJjenTNPoLsvrQGIIKmxf8YXU7vooHmCa326IDH8XgOuI04zQxh8+pO3SQNBxIwG7qnh3UhcR2t81KbLCIoS/f+3UCwOvnf7dlgf8LFB6yas12DB/EADkQ2PuazdZs2FP7ZxQJqyAGi43PYxp4lHmUHZMBN+/okLkf2PTfbNTdE/9bMhOezq7m5q1GBBHYHgNZdobqN4rM3H5RvmtGWZXwYJNAbLTYtblGHrqfBclQZ6vVL2+gFtRa3UOikb8tBP+Ui7zR90A/3TjhJ1caloI4AamPfieMWwIYtSnynSR/yKDtMzRAMtyHni0iaXS5q5GlBZx4soBhI+PNj8JesNK1K7r/qGPelSM8CgXCEyeGtp/xQUzEnEJORE1xh1AMsu77a4H0rCNHAs+SVSa93b1m6uWnaoBMN+GWIUne+junR1XwcH3xPmJ5VbJP5jxYo5gDZiWDoXEGadPC1+Ut3W05sGF+oiPJlZYkqJTze2uPfXhEA6lAn1Npx5z/D0Wst93XVIDujUrfgFnyWP90CDOyJUKhcDQnBsfHQFskJkkXYekQ2A9Q31F84fSb1KFAwjIDulNOh4RlHuGmQiYiw9OjqWHHGaQD//BkO2cLOvUTZRksHsonXlHQMWFK27hBSsbVgSX7lUKyWTlE5J+Gbaj87Yb5MMyp8Vh1+24JeJbS1O7CHL8EWgXZK7DDqTtBK14D9WuZYSDmsSnJXOG6ZPcYaUcEwaSqdytaVW/YXycTpeYQkAwGkuKR82w/NfvhUOaHKhNUTqEDgpHHNheg/1w+pcRzCM5KI6BpRgpw8F9cgdZXe4Ji0fiZQZioWAOku6Ut3tYwlED3d7VoovnGmv95/hnDxUTNcm4Lnof3dKYdxYb0LPNrhjpoGq7rtKo3HzJ7C4eHG/AZnQPw8dGewUPzbq2mrwTUmIvHVRWAmOouUVB+FDJPYmYMdR6+YKGK/LBpZrqlJB0977n/33Oo2lsIoOrCmSkjGylXXlfb7jrxul4ZJJwEYyT2deKhlOmeNZW70H0XO+64ICdOW4feAdTX1HFr3+iNo7DZhX4hUS3K4agc6X2vw09iP03Bu6U797tm03O4MGGRO0lnYDrmYhJ4FyMyNJfeUAO+c+4y0WdlXhhEo9zTVlaniWF27XxE2ZVoYY1H/E5q8dpo3pKXkuWBulZ5JCuZJLITJMwkF6hEZPMmtuoiTYw1lL0NbvnU7Z1l5zH3HoZdv+fpEMqsIZIVPyYvhdftrCZB0AFqCLnlEpwheXhrvUU+vQcn6vc5ygTtBm29ziGZPT/tzmhxe2eFAS+P68lp5v5AMzBj9YSH1MKYxxuyhuJ/etfWJGuE5Zix9O4hGmOWJwO9KxPJxhizSeChhiIRCGZ9EN8xeBVO45E80WgWkmA0oxPLPBXNonUjVbmU0Bzl42eH0lcxmctqvNLpe1+aQCcdkJoYWVdhr0jlkQqO/kn5NkLkqYaouih5pPtQhIPjCEOeAE5K0ZiddaVsRtpkkyDqXhAioSywq6VqISDaXzI3jkNxR0aOBaOE8WvtWZemzVMlfNIZu2A907Xx8ZZ9jjTWK7564NDvsZFgdplsuE+hsjl42MO7yCOEvm0mTSts9e7m56zHSPKQbh4fLFC+d5OCU3/s1WqnGGjYcyhagzSoUt88IsIDqbCI+V8TULjDhJTI9e2sJHgJC5c3YyaBK+fgAANR7D5QjozIGYNv3ujbZWfex+xxpq5kQYNUqIvuPmlAx+nnP3HsgzloShsWArzbaqIXIVaSpgE8Vv+0M8dh5lhoKEVDts4udeRKX79ARTZNdZT8HSTm/VdjFPTNA7Od8aBMwUVqAexCA+t8YGBrFToWknoGpYHQK4MqMz8m8fDDfXEEkajciD6BJxmY/2uZhDR1Gr+j6I3Nhc6bOj0TRF2q5XrHoyBO9mKarZBaeIwAYUjj2YFAlcX+i+jnuJkBJUr/ivbqYY0GopRi72FtZJBEpRM8Rvxpj0b0svOblk0WPNjuU1tQe/F49zS/P6pJHeho9udVbKh8H1S3s7AC5zoQ96Dg6yY0t7F+lb1hz3lLgWGF9KKyoqg/ue7d4KkrlZd5iK7uJWDKXNcRqooQq7QbjJ8JGhkb7uugL/9qMXTq3yajGnD6gHYmfCUhpxD7MV7o516+Umg9Oe/Ixhgfx5TNfoEmde57AksIH3IN6yAzkUg1NsFPRW8YycRCxz8gaAnhToVkvUr7sKKqUH6CN02ogk6+XLjrXmBu2dO2qwOYhQawrpgFWNn72xPh7IyikCwWY2c0GTLDIjTPvKV+cQXxlkyAC5OYsfQUHZcjDE+06pJ84VoghrSX5hmolqSmXT/mSSlqf4UgjVi4qBkjopPMhwVg/vmdafs0vhKmJp2wx2zBat5Cb0ZnaNtTmi5Xx3QZRYlUcu38uuzeaadwLu9moVlaBHtFxtTM+gjBG6Cd+j8E0JCRnanEHvWW6RY5xVinVS6kmcZuQw0bpIJ+q94FQuD5McsGLKe41kxjPucROkFXRdfASFK3UB/5Wd9ftS4B7LQngiOoiiUBB3CsE1wRZ2Y5MeRgf8K1clrZTgRbqQWMYix1ziKj9F20LQUA0uPETWoZAmB54gexeez2Halpalb2+efLI09PNSgrRAWzn4szek3WoST22Um8y7qG9QiGay+kRgDpvlzVyJ0jjuWvW1xhSSbMx87TnbT480yUvXmhnAS1fv3KlWeXsNFiYa0O35TQSkBF3aJAqFJkA88rO8OVlzYEsr9H+h7I1+rmjEczWp+jnuE/KS1Ii5mf7l+a1tRDgmcymo7EvKtO0P3L9q1rJBNP65G4UE7swiVCd6a1IrDRENP0/WE/aT37z2hXOsGMS7OnMfiRol2hx1LNTKQrFDbOKgYWMIe+0loBRCUrqnzSP2S+yyOnuGs8LOaZAGnzkkXs6vo7em2kuiT4QQRLdVj17e1w97XKe+p6BbBFFkOQBr6q8RyCkb56SVOiGZefBYlhhN0COj6zDHLCvmqgzOnTAAI/Ma4FPlyFy4qRZ23WDVX8qAPAUK2qHSrrvONHbW+mfxuSODbzDiZoKELr7HEXDsKtctYJBXxeXnLtZmBLxJfSQjLLTPznCjDlXU68yJcOCxIFR7wy8k5pmQzZgVMlV5O3qDy0T8+YcUUmKUgpS6mn+gE+bZWkMvUww3wWC0PW7uyNab5g7lN2qcgUQZPE5SOLQ4oRGVbbfdcsadrnhppp5cqAGiP5qZLsqUFiDNiSvTzOt3dk/jNiO3EkhhuZnkyhRh398h9xNyDHj+AZrKYy90JKvvNkGqG13Vhwd8SnplmexfH5Zcfa+J4mJ8hAHVg/QgA0Vgw8mj00NQmoFy/VDv8H+tQXjCoNr2eQp0rE6uz8T7kIyS/UT8dzjSSmxwNeo1zn62KCLvUOkKpA+nIgyMahRUz/YFzkT2lHkAnYc/MpcApuMti1iwn2z9KlMItnKs8P3hbf9qj/R5Q4bca/v5QlTZi70rN+B55XZNDiNyGxGuHudm8ti90ElP/jyxW2ufHJee7sLV8NeVviYJGOhbsQ7B9aP626AWt1IiyIhUs2VGHYEH4eHEmgMrGZVA2Y+yzCapQZqPDZ99QJmAdqE0n4o75nN6Cqw7mmK9+oj/AuiUD/1rNk3R2O95fHm/JYqS8JlG+1w+Io8DfOJ+//8Hh99tNFqaBxpktJJUpDSjeHaqqkA3HgrbgiiFxl9a9hBsqczzQyrlt8/pI1oVEWjPtsJct3zovRSza/u6MANP/YYQNU1wUmYMgueqwwK7A6fnQYuuWwXCTmMH8wXg4oE63bGQdGMLDh+DNREgb4gfjU39fd2BHbisbNSsdV8AzdbCzpz6lU82qYnmu04dI6RBqpJSPLcpJzVu9m1rL+3jAyNUZ0+oZiFB/RwrVWYVw7aI35+3VvEA8IZNEHmp/YIp/HRSt3OzkhHuHCjlcD6tEFijq0Wy5s+hbhFL19qSHysEjtJhx+duhKV3abtKy9Tbh5VapoVWJT6hmwBVKS0QB98xVwM/h1FdKj85YkSzTpwjEfpfcxApt/MfyA07VYIVkx6fn4txukQkf89sJGmHeH1pn5IjN7xptDmDs82U7K5fIjNHCwJCGFNJlpkJiuYAceUzyYsa7Qn6tZv0Bnld8inGu+PM2vAO/25mXAmYrNPGZyD1ukgD4uOziVPvnxt9YI/Jm3WS5D6q03AQWgpBnvRF0mGQ/fRlViJ4Qlxwa53OpPF0jN8sbxjDqoc0j8+AP2t9rEMughtIrIdL93NVUlLsyVKrcTneSxV66atv5/+X1X0bTBKyI8xrwlBkdxSC0c6aGv+ifBRwp6kjUCruJzU9i/2z62NW3whM6t3jTW1BqbgH3x3Ntz0gV4AsIle1Ifb5z4i4XuPgakIg6I19EzN8E1NU1MFet1g17JyPvArOqaeMkz3nNrRHSnRP6fLfvUmCV0ddnIISfVWFjBeTh1ykQ8rNdLAY8HEl+R/LetVaR0/gftMVx+Ct7vjBA6qGZKEhI5IV2tD6SGfQs+JZh9caVb4nm/cIJRltBR5s5dqV7FsMhjMfajoNkTUKSb657PcFSdepygxYzGJyex/P5T+m5V3eSdteDLsCmfUvsoqGkKh0YN0W7NKG/lQeQ+/hd4rAaXnApqgDA2w2M4H3UDReai+FR4boAFL0iCICnUW/AM1caRULXh0eJYH7Dz6x3wt1HxxiLmxyQHlMj8Ybj0aff+YJMg6YsLmIZ0ZtIOf5SlGjhxP50JKk9YuPkMfro7lcinechhvhw21otFXmcR2Hm6OnlMeNcKJ9RUxqRF+aHAmNOORAGCDzx++PtaddBVUJ6pmLAm0qLplXg7fAsaXRYtZ+mBqr32QGjIkus3ou/EIWsZZxgGDyoDXGLFENjiX0nB70H1gVny/Skx1QnM60dVOrjOIMixLHnCWf5GMnjnTpKkTwXtvGVIHAj5e08du0CFT0aZ8tU17i7mzQs79k91MyAEArFqIKqPMoVl5VjZEvBbCjBmZVuYCYVjn3xCykiwo+/aK342XmgPSiurf4Vx/ctGCo5KitOIIsqHoVY0bv3t32eSI3zdxXV7sHCJZhyVaSaNlOhtKZXEaeD6THetmLoJzTsWwtmZhaVj2VX65bpT5HDg04EcUF7rSlx8n5U0kmvwjWcYF+S/MgxkjRU6dF+ViUROIFINBsqG6HwHUjiH3O/V8LGMCApfWU81ZO5q1tg5g2th2NBMguFL5mH2eFVW9GnBCLEEXwEgUvxama/ocDUhBo8odltNYqFbI5bDmqw6nTkOiiLRhudhhDfPwVn4l+WGrIMCYsSzCj00njt25UV420NtDNhQlCtpfQym0Sg2eH0zbpSszU5gVw5WX94sXzghjx7R2Yw7shdT6SMWljeEt33xcMCEjBIKwKEopfmturF3zYhosTosVftAkGdLB5z9lcQQucxj9rBTjjczaaemNzUTHnhDpLTlGMMYpsQlRJFcr52OByd2CB/4QZ3DO8iJFFA2vguM+nzxxtki1eVw4xAdgMBMMEf81gESf4Qim3xDFYSLI2CcAF7OJqYN2C5OrAH5QgR72hk4dTFi7fRG2zevbA3FmqHNi2pIrRY4ZTY/WvkRYniBnX151WJYAKs/26HEcolX1YH5YFviGniXubHVbcvmMZ4Nw08v7k6AqxQxRIv2LIbKX0+10EhozKbP+XLNS8dUOo/TrK9Fs1N0bhPZlVEFu4uuggYopFGannONMzVURjDzEuHTJo0D+L2LkMcD2kjdasQ0+vhiRUAwgm32gp6h/YJjOuJDdJf+traVansus59Hy/8EiOMEyQSRHYujECy+ENOe/q3K7yn6yr3ur8csbE9/yPK47eLuNtAP+jW3F9FmnqqC58WMkYAjguY9zcnQ5P2YDMO59Nzpmyt0dVn1MYqZ1Vqvw5qPD31ph9QVE/L2OufGLb4uT6yP62WrDuHkZpfKzehGVPrvBEAAsCJ3TgB9YgfBzvjR3BuXDoe/Vl7/5l9w5+7F6Anr0E6OX5nhS5Cbz7dwwXO2fMSTWYI/iRVDlkfcv0wupAnNtjnL57NgSCa1CHvJT609IGODB8gdfj+wbzL54otLeZxkcX3/WICuYJx2DRqU3WOvMk5hgR7SqQBFf5eGANggkn8tsJXGbQFIUwY0nLr66T0oZF67aLh53aQ0+AgDvlxY7mVlZbXOlwQFNHck55GGwlJl8Cj03vMFYstKN4BD99O/cwIUgQ9Kqjz/ptuRBvXZ3Ah/qE3t0rzjtkLHNoZF+m6uvgXiLhMnMyC20IpEqwgW+w8SuUzOnKVxRycJq5zLT0mYCJMIqG/bRBhi6Rf0XDzFHC/Ey/kBUqQMG+bYGS2fxmjm1Xvs114iDQ3JS4AoM9eOgIAf6E7cuZ7vDKzxm4hpw4qpOTX2KkawM7xFoL6G0UABcHR/1mGWVtwmlNTLpi/HeLeJXuQrRl6AeNGmapp8BBnkk4w9b+hNTPmrwHz45JcIzsRdUJzA/jgN6Rz6vp9tiMuZoRcd5gLOeqEg4K26uDW7YUiPFkKgi2xZ1Ziwn7ceL4OSLcBOnzDFxWsvu+fP43amzUBgkTqnvcopoK7g3s9bf1+bAChVtTyo6X1A0D2Hqh10viEjvN6j4AM4b+t0VztGGuAWgId8JHYedhPu3PsZ+eS4udXdBhK4Os7eIBMv3cPaXS7KKQT0TZVgX4KwrUKNUOkJYtW6RRmClD2wmM1x8nDv6fUofMTuMQF++hybTQ7rZROprut3spWNw6FLO0dPwdLVBMtrIJGD6MBluFzzOzQj4t719rTYHqX3+mw0diRVtiBY33YVIyJTDeFytLzYpJ+vL1xlZ6UI+0ib/0cKFYeS1j2aHc5rYqOXpCHfs6iZPzwg6H9Z2pbjoAX6f0Ikcg08FaSVSX2Pnc94V1jCeSy3N9OWkTgFeY4X642zzPC21jn8OnDvisIMUVRbecCnb0lmLOoRo5U+omcslecgjGgOPMct5EpzDhhWzxW9HrWDuWEFukmPtX94xr2VUmRhGM7vMAojmrBTNONVKgX3GfO36AD5zzrCnjhcLoUJO7x500gO9bSCRGKAGCCpm5j4/aeTJ744kRscvCIShoeDBzzjN5pRc5oy8z6SA6UHi/MEbyV6Bu8+nKTLbiHt1mQESk4jUtx+PDc8xW/ufR4H1x3Di6WOiGKHrAm4N/toRAWk2JpD9N6WUlA+O2NLlfocOYT9+GOgwzmm1aNXF5tkiW0dA68v21pulofbLaAuV3qpkdLQOlYSRLrPS/PqWaypLKt0x+/QtV1A0wKq+r4Rlz5X19kwehfR0nC/7e71a7SLBSqeshJRse7V1i3agLhv6bs695w4DGnc1nNkhz1wJAsukzNl2hX42wzjFASYC03v/W6TwbsA+cmquYzlm4nA9ovLbOw6JbNttlykzUhqSl8QTMaGS5ak0X9vkHEYoVjZYXxkwj72WmyLHuHB58NcsmSAWHxNbhEhLqy38d6nMVghQGof3jdSi+7e0qdge/pPMjm/4LcWtqx5nVHSHNqbJWLo6+0GX69D2SzKm5EyBSsv7FLlnPHLOIQyS/TKuoztFzwwTvfwlvnJY4BlNRcxRDuEBcAWsQIe9f8bMTFMF+ye09+feyyxsTUN8EIxwEFtFC/BsFlFbPtwIfNByUa88YFRlOhNBwzDct1fbx7J4pmXHBigMc15aXsihqtxCdx6es5kqMPOejejWyeDUo2RSHD7NHRE5pE+LjjAExzGupyiI/5UOjizAXpEpeLV+HODpVyFUQeATs/Gv3kD3R3Q2u231uiSSZCgH38kETKNhSdBph9Dgjdy4PBi1ReHc1NUP0VsDPDgfKoF5hDj+WdUX+E0Imyr7MSE7hVcnc7k61Ea8sF8ERyUCn5rdETrtDYnqs2vhryxUXSRYMyf1AiyIYJLV+Aer59OY9M3BS0MZ4zOAVxFwTYYLS0NDsIfXJvp4a3XHpnqx7i+cqZpLqCz1qK3oZG/hTm8ViytRV3EPi4yhFAish2peoL+HXyCE97gVYls/Fochv6+85MESbLawZeMxnFQW1rOY3FQtly8aFijfyXJMHerSzHHHZVMef28NJfK1eVgwP3pn9iO6fvEUhK2/PMp8AEKF8bSGEQwL344D+sGILAaf43Tc0c2o+h3Nj7KTJSDeIJ3YieLwODGVyXIQxj/587AG2IR/VIFs2ZGNfXu0D34s9ljvW8fFeDhMLPj52SJWEQtwKcnqXubfCE/8wMXdF4gUBx7CG9NIy6JlT9vFa7ATnUsvKGQbDXzID7e7iLWGHiaHyT0j0UZtVxbTHym/hb49AIr8qx3sYe8dD5ynI5v32sjZ/DP+SL9Bli9yVKNsdLy1pqkULfqsAtlowF6Hs1WSeeoicB9TAhb5DI8mnYNIHWa2CvqFfRktEn7GJF1U1o1eq0dP2hfvuX1GvR6ndLET7I7b4qYoAz1rV7qk9YzIE/kAciBywWOtKG6m5EAJTgQVgAxDkveIS5dTfYfCmf1uzDUr+f2Wld8KljGeJZsbmuUYqF6u04ZUmf/L1/voSK9ATVBbf9ZUj0fiaLmaHJqImTMsvVJBpAkpnhzdXejKwUB/vR7s03K6maAmgbdQqmvBoFtdNZaCndvCIGyIVpwgI786R0no7e/XoomO/wEq8WcBD5h5LI1W78VfbSgh9r+IQ1J3S49YiwYKWsCl6GaBBOegeGo7hHclUqN2L8fLEICotGErKsAa0cXfjkY+w6VLTG2fb/B9gwTsMOx+RpiqK8IXce+C8S4qV0f1l18yljcdwcgxyKhX9bJW8BAs7uPEaQIV5UcwVCy86HO3SJympKgTZBVn5Ihdejfz0+5GwtadR1XjI0fl07Ujzek4bPch9kE5EG+ZU6ILB4rNQCZw76Ku3Wdl+54cNI9m+Oueb/1Ci9mZ0GGi6XlisSQwOpvT6Nq1GkqTBwZ1itkxLje3IxAHV0D2Vx3FGBr+lXYAtZ47hXfi0iCaXX8S792ImKkaHw7R3HvzrWlNdUTc4WOZWtujr1kUMns5n8AmvgUQovdtknRzAcdAaASkwHBSmcc6GVlI9W3j/eLBcHUV1RGEZ4eq+NZSSbnLfnBYB7/DsHn5H3txC0tH/c/Vzb4t9L44DXAO3Nq20RgRnDPW9x6/nM73xCGlmfhn9ENy24qT1zRZzGexPHp01Ee5oN6lS6qUq/XTXF71TPe0UKpaElk2lOfCEP7iZll3T0ix9yTxyq3gZX/ky764JXp8x8Ue+Pu1kN5d9q0KtXyKtly+Cek8RelK1TOcNbd1RAKCFvGZDxa/tkva02WPSV+imHcHIGQdWA7FAw/TR/KJQL3KScpEX4d92JxPaQDCtVWTvwYhlaiG2fTqMiH8Pd4URhWmo2P26ue92wrOg08skbnvl48caQx04f4wo4OCaD5xaSOl5qkpzmtSZyPGNcTsUROM96oCif3pZotD9TW1CzwmK7BOejm/4HKMPOq2fBZxoySdOzYOvq7HYHkFqXrUyvPv/KLaZsfbXdhU/wkCbcY+Ayy6qc+MU+Qc1yoluwVvSLXn3ASDnUewvNnUrKHuOJufcALuNGLWElYWD/NrGjx+Ok+m23DGVlAQ621ryeVQAx9AdFBiTa1X5F/hSVX86TgUOLDY84yBls700pdrAMm1JJ9jdEUc1sq2a/ZR+bewbjRcoGPl//T2eTidXE47C2qrbrcVPFslr1S6lwUnNqlOIxg/jfduGgEhZUbjgweRPw91SOtGa4ZmhnAGQDCeRNNXnSb1xG+WC2thRL8qMSHlRSPjdCdqed6zXAu2NW1EUlW0thpwyX9oc4VpJORiFDTREX/2uQP0iK55mKBBg1ePDXxhq88rnPLopQc59c8UI01i8AgvPgyuWv9Pyz9DSl9nD2WUpSawIntBPhvhoy2mFmZrzr/DJq5UsLGWfsHPW6UFZO36saDaR0jXtLNr1eUHInQhoSU6V9zSjAD4ZziFFGCH+oKLT8mmrbeDZXGdOlOvLRvzmbxIrLXHSYVGaN8n2XwDN7z/nOV/3FfY3dU7RhgFmpHgrJI+IOG8oF3QaDqVOVW8hBjDMRnIt8nBP14qT8O5AQEbMyvpe6ljUo+cBT/0MYIcreeHFODS3SSj0p0H7bYc77okAgs1J4Co/D7/Jo8NQ8V7fAdv+TOBjGmPC6I9IkinxfCogNzhr/7kOXdDaBq2/w9p+zRntJFus4sPDGXsG192D37Z72FeS4KuVujNmE7xphSuyNrNxOE0NAnFOlJmIpdqyL1iTPDEjpNRhRxhATv6iP2WEEc4dw31uau/tL5d5dNHKFMA/Fdd3CuCO9xfmHFQfguFWYn61y9wLnoqKFDFmzhJ3fqUoU9VJOZPH2XyC2dl1S8r3S9Woe5SfhGzQ05KqDQfxQ8TSw1AHDos5nUfcj3wua1OvsgfKTuiDBFAOss8nNNJIajKZ2hZZ+YN/mlUYPvRoYIIenKVbEIN05RWk72KMb9Mi0LjQpj1Rr1s6p0lpnePT9jRfCP9flJql6oSofAHD0j13t+XfnAUx0CJw0+ESr/GRezwZWoJ+eFJkr1cPetG+Yu5IVOj3G20ppwxomD21FjridYltXGSqJDsGPRVRq2TeG28sGkDG6Clo/C7ji2iPpw30jHNNV9npqzu8bmCTjoxWlHmUkofsN1xXebKLIBRfJnSr/g4sPggb7gi5Th1GZVjL/NhAP86iERRedlvu0/j2xwPTCbokd9z7GWIKiFyaR12UcDS9NxwvEXU7V2ZZ+uxgvefXSnoyA384UhQxJkDFU47lt4rmuLbUb/W2Az/RupJZH/2lUul9HPB0Hj5v/54fgO2awtPnCmUnpUmNt2V3VyldtTcbLVS890mTidZy3jcZWObwfpGHiXihanx93ojEAWvI45NcXeBEKJLBBueAudWtKWMJaMuFRfOQH+iNEqOXhbef2YdCR/B1ez0ozNRGJ+Y91sgS4bS+oQVQv5yqmOh8ux/0BnR3h0+okNZ+UeCkCiGbeGXxFZEA5v5eyyzOedNKKvG7HF2EohYbqiugwjqvEMJM3EgQW2X0ELTSObMOaPU1Y9bVVSngqa7CPUKqyEVZO0p7r47ylrmF1yphBvj3NST+2TWxytABJFQXvI6JqKUrYX6rppnqH/LmhRkzkNjRzY37UhbgS0DeNbhTIFyhIsOcY6zzL7wb2Mw/+rBVGYbhYbnkWCVfnDlue+t5ciHMErWeU3+0FVTyRjrw9vUiwdkOlEt1wRWP7d0+MNH1WYs9uD7vJY2Ips27zqwUQM/e809ciK8k1X39iOxP353SlFe7zP9aabiYUtQMvrjsNgFV7WhJIBh3GGojE79LgOkWEC9xLS5NQrYGcB1Mt8JLeb74uca3DwCmIen7xfMCmV2dEnXwSCa0wW1p/azHKD95xODwXqu7yQC6GpuvlkQTEhYHA5BrWEBeLj6JTyzoEjiWpINSwghThhOjZijLivURXrcJpraL4f1E03GBwkiFHpvEdhYOYKfkWVTwsEffK1u6hS2ibRXNl1kRMG1j2J9nI8S3kXu1c1K53Hdx2MqWIpeNcTdB0m/9FthEyYIZ2HCdZWaluqKL9aqADTvLAG/Gu4gw+s5StKIbILdjQCIULT0TlMKzVOWDODCcsYtl6b8v8ib6W62Zi9WP53ABfSAsK34oRCS7fKnrjzibYhWQIHC+8jGCmV+STSvKnGrbM6rVHgbmjY71fjzRKlCBVxwcryHnJSD5ubf0e7T911Ts+0UGaLntLrj+UKyLpkMeWpFKD/HbEXtGIWeFxjQPBt6N4ZNSycZdM8MRr9hMQxtZ5gH1KETkx5es9QCNaNKHV4KfaZXaexdWYo92cjMbHVS2tlhNRZUXeKYdg2OxV0mDw15K3sg8oRBoXDgZ/sg/frSBiUp+QCFi37fSeMFby8hJAaJqSlFsgas9eNyZwmzAtIty0DELdo2T+/OtQx2CnyLXL+pMrHXg+vTrqX1k3IguWysOk6D/e9yNGa+XAY5px59jnfW/pKQZPMASzpyWncO9OAdx2FfDlsfIbNtQK0FLKtErTCa/Kiu/tkdc+lUP1/Gv2Eqat7xoqTjmB3+ojLulgdEcmoYOvEohHngWkgqr8Wji96vaYUs7RHbfaWgbYp9E/wTRlq/6n1FwPTsHPEnD/j9su5acdawqw3NcmpT+y7VdG09PzBXaxomfYy1Nj7PEfPwNQO1cNl0891NeL3vCp/CtX4EpSi4t304hg15N6gWHj9dvDB1D4TQ36HWMpUHwdH72f/IUzibZB8l4VguM/AyvxUSjq/I9DUXSLyVfEuMBzMIzzf28Sx7syeH3p7gx9yjVe59PdJ6GdzpQ6pw5VycnObmXI2PPJ8Vtj4OSjVgB8Tj38BvzrfTuCLwf9Bs4xRrNdyTA9XqqmC5gaaQmgMjopgX/3PE7mQfUg84mcxDVxQ8nGFpod0UJgxAZHSa2TK0A9yC4fut0yLJ6oWqqjVtf3XzIALMIGsTSjcsfFRVu4IbuGnwadAKpUwyWqqXankvYLvHddA6tpkFUBmIn18iuezstKvPyrh1g4UKoxXA89nSYcm9KaFBpFOuoX0SzjDJyB1PxLaj6eK76JUURNW0oO/UCylqN8VbHICM7CCARHCei2cFjUv1rkhSqAqfHN1JJgLE/i7pPfxHcE68BFtOX2wuvnqUB70eCiwQNHNByulXygUk1VTOaimn5+yEVs0l7YSkwmGrmvvL8bye59TbugVBqKC3xUKzMlJ6xFADsEptrWLHc3qkYR3kmAIb6mfJnZYnWQAthwM06ZwvVLFa20iWbQexHCOUb8pYTcdcWDM5pjYCS4EPMuqOBjvssoy6q+oSZdyE+3M4pF4oF6gDyA0pv6bE280iX9u7R2S9GJkU90H9NB7eJNperm1tvBaEcckAzWawU4dmHpjNWEACCZvTnmUl6NtJx/c+TNWh/94NbkQI2G9nWKKMZ571UfiwbRDF5gfkEERxAI230UDQRWBHNZr9xs6E2uzNVuoslVsHMy/88NisptN+u70TcsQDMOntVCtzzLMUfNjMChTsqokJZj0qAm+iuCWFx/VTbeLLSeeavIbtEZlm2ziowfgqoK1QNV/IJ3JRxPwk6rCJGrqO13s4Mef/K0KMGAYEDvttovXhSVvQVCBtn7m7IWy49ug7aWBZ4dOaQu8BKmYImW42EgDIldFMUGXhNUp8gQ1l6QTIaoyOKe++kxZGyB9sldWqBy8WAdG2tT68SWt60ApcUkYctNKSgKIY9HiqGn88W9BAoVXZQ3Q0YET7Sr97F6ol+OqdOt6j0ZCFsU4tjSPLzfFzL96PP6v+MwBVPJxvLY1wKsx2oPHSPO//cls3f2fjYRJGdcy8ykB6aCICR8duKUxE96Zf6veNs/bV/JaWJrd91RWNlatw+SAlMbm/DX3SxEOO+Qxn2WNuzbsBV6hRy46+ptwL3YEMK9X40cEjP/0MZhdJNgYw9fUceQTLPfHtwGdK3Xdjfta5+7456Q9T+UxQBTkEwa7Eo4iPej068kf+sgRsJRNktglavKzCqVebIGlXuqfAouj/iWKwXbf6CXZGSUCGzG9OIOwBFvqk1MwX3MfHDslZWS7PPyr7uAWqUqB4VastlCmgF7tGm1yHy+8Nrg439wYFW5CeKcB3a1WXqyvYJhT/OfXPAhRiZ+WURzO77cq9l/J0GdhY3LB6acJybtJhK1Ocsgkt4aSCCwN4E8U/EDMhbEHBpEye5EeB0oniCwcCj7SY7jMQNNG1X41jB80UJfyE9r2l+kRMazmH4aASKpO/6A9NF+JmRY8GEGFo3abAWIYcHTNB9/2pMy+MpKozWhFNIYPgBf+MBt35uEd2JBbTX4qkcfi6ldUOT1SLtzqx0kPjij7lRtmta0w31upiiNNyavzgCFkVoPebqoHrPycaKD+uWnFNHt5foQaBZo1C87YRuqWSp9fGVDmKf6Y3ky1A6RtTLXvCaqpoaGmjJ5nJ6l4nJPgBQho6kFEylXRHSMfg+LNzOTRwJ6YGAO947mTP5nujXanUqccXsgSPaTAhfUvo44d4hErm7b1hULWP4jPn/OslhiyPs3tQ8wZdWvXSMKMIDe/Wscp0EB5bgXeyHoC1Ynz73usEvA+1A6xWC3A9Q5FcEHyB7+PZ8OZyBBhHWdh/rdn3sX0Tt188qZ3XRDHtTUEyR7qcddKkYkUsZPC/Fspmb5q/Z00fJSwy8be2GcyGan2WqFbBzI9F1b7KH4Anon/gyDcemTMn0oy8yEWUMpu8Q8g0x/BBdohw6FVcqRFyBhrxpczr3boE+odSUHIpMhqqzMV2Tk7HH+l5vcsyEiy0d7RzCIHJeIEHlFyvXMGa3o0x3x3oeXN1yNfnXGf/gCzEupjvGi8o6faSTVtjnExSlli2dryRf5ABeh+nvKw+mEeX9uYUuu7l5Uot71Cta5yvAyZLAT/IifufGmq5kPGzbZ33BlVRE93Abw3DlOjnQZRTloqUDDWy7IM6YZ6l5GY/qhsYP0oCWOM1j7KOJ6j9QBlDwGo67vrGDj8abTWbuBOnyMQRkYH65WfmlT/+H7lyxL010kxncQg3m4p7gu6T84xU1Wm2QHog/+k7P0w4+03i8L7vW3zH6o7pNU+1c+xmzVraqja+PDHQPPRpx63cNyrak8BLuwAsdlvZXaX78Hab1j7GT/PylGPYOqzOXel7PR/zqab7U5AYclLkX+isACUPXrGzWToV1onm5U1zxc47R2+50oyq03E5LCuuRdcOoECCc+07P1GIiRa1svMJMGUZwzaWK4DT0aYEdgYpj9KXJoE4eCxwRuqHIMWrH9Zuw9guX0Dp254djewvYBPmLBRS8Pou5auRmNnOp+6L99lrHqjwTxPIn8yd4oVOVjl+fRpiew/T6aq8Pr9o94Pgfr099Rg0ThpP8rQpY2kiYfwaGvTUsR7y+X62Dr7SvvWV17Q6HrGvHVmfEtiTeNl0Dc1fyJo73dBLk4qnxNyyLhExv23D6iCJU31cXucX6heSmy8NiLRp3Vql8NKaQ4EngEe0Rl8PRUYmrF+G6WDD3uNM1eaEcgUAqL8XYJYzlI3Xp888CVYv1DsMhTMEA9nau3/AseTmzrcufNYk8VE9BwRT+s+ph+9WwJGe8/9Yor6VJ9lX12BuVaRBGdj5njLyhkTEcBF6bZcUNn3PAu6KZkySXewUOShbRqokJj0BCq4nldZxN/H7svTDlO3hpI9Q9bL11NNnE9UB/6W5ODh26VAioPtQtL3JCKm3WI4fmrQQe8UdOdOSes/wi8k3xLcWJPAvFC+p02I33T9XyZBHmSzIQKjgwk48CjAvY8zzy/08/7s39auC2SBYTm/3kOZNk9d9LNI864A/9fKlZaWbuWlXqa0UV8W8L4UowZTbW1fCyB0QOHbOTfnGlK88lbh0MawLoOaq6yEwaQs5YGWfo4quvdCJRGsOW5NNA4qd7d6F2XH+bL2waWGNfIlIFoTAjE0d4ljHgph16yHrT57zGdwHj6Sx+4yNFd5JwnR6MHuE4M5YpotLEWeKEA/ITCansNP/JGAWx1zReGkkUV8OoiYs0jgpHsvQWOhyPGLvE84KVdD8IJl6YVl55/LOTJ2sRDhG7HKZlIsqf+e9F15M6ELm61yj5+KFyOWuqtuiRQnT8BU9jPM1eHzmvIG9LLFFNxI/d5BQjT1NX4Xe9BsUaDQAyF2PcPoHMXZET5Wz6QBb9SthlIyMxe2iHJM6Pwbe5hRnM18/vfuTiUEhNQcSYxmG8igmvtxS9D2t6vxhyOHTGO/N/UqUd7ciw5b6FdLH9Cv3aHBLqAGb4dEHwuhrTrcnG10w3zaqjoWywKn1pU4IqqO85xWb79jLBbKbsogp4W0qXSCw9tDCtpeAWTc9FZcmhw1ng+hCtvVve2tVnA+irf9sAEXe1bfThk2j1C+IrPqsvQEPiLd+5Qa5A+R8Lh95ScLGyUYrXl6DfqcU8p8f3CdePhsXOSqkpjiBhJnoXACnWcgVC/CPp4B1z4Pj0q5fLH3N38xIhTf/16oyoKgaeIxq9TTyGKdTaq3NVx1hpPheA/lwFCPnL71+G2xcM5X0g77Hc22Zt7OZ+PhBoLESifuUjmxjlDeEUaLvrnAU1N7PVgfm7E5vPsChegnkrO2l0gn3FkjBfYDPx7JgBg3iKvgS7h8xnge297LjUwy+kLTG3NnqerBIk2uFrVs8eiofQ3nt+cctxgU9ttrGEPoXi+Gk21w6bXxUjCYvpT2UayyecPmBbn35fX4FFbnBTh64q31XpD9qHQBTMy38oSi7rj4BmeQGG5fntFbTe2OTLhVU/95I2C+25qPrPJa9MnkQtuM/HAWYx8prKg7I5YKoM93h7L/uFu6FXm/sWXosqiawNXtvfsYzaz7A4zNpgTFPv41K6UnOFtKL966Ozy6RRRbvue02iy6PoXvltDHr/P4kNLLwlsGmtJEcR+XLzY+vF/s8Mqg8PsQjGO9KGtXuQABbGZC9gng0XAksdUXGeC23gFp8Btj3P9QQWdCg0LUUoYW5yXUU1jPSfHM2p85fNhEFmRIxCT1QElN5aUtkucDRjJpRWXUtUkbL7CR/CYONwGbn8RutgYgDEHKfsB9Nn2bDpc20y2MwTLJGiz5lyo+Bd4C0WQV//r+CZdmH/8KgFDaZrLpSuAqremQQDjnqTBN68hiJbW7r51m8DwJIi35IDwEd71l8Hsqex9u+SskseJaiA4DFHNAq0j63kOnW1HNFDQHuCFyA8DQEIfMrluxhxBzEgYJyo+qPm/I8uFRA4lgzh9GRojWngzhOUAJJ6vKqCdDL2LEQhP46OFQ+k2TQfb98lk9/EO0/zo24vlKHIlyy3RovyRGON3VlOJMVaggl52jfiZ1hCCLmJ6QXyk+4dlmg0yLaUcn2VqHZVQpdSrg2vZ/BbDgH8LswzlHl3CE9Drgvv0evYjUVxAg5dPLJYIrX8fT/VuEfkI4FbnhgqpW40futmYhpgwZB4K1DusP4CDED17sCPXbAyxROtrYfpS+TTB4NbmGBD73gCIFj1On/p509VuzLB3s5gPEm8K7Io75MImYFpxNpj0XY2msBR0wrf+FfzIWyBr6yIjdU+Cq3ZTyXXZoLjKN0K9ZZUHXdrl5/7QKu2aCfEj0dk13dbndXMgoou66P5M3uGpsMLJZodN0DEHsY66p2wF8fT6BKRZ5EuCa7Xzpq+Nt8LaEwA25Ob7wwmiXP2kmxwVTrHTzwz11rWZfy7QPkR9ADLtEpuKSygGbLzUsZcjrRYa68Tasg/d2g0R/0kQn2+6h5G67Pu8Idm4pm7qKK8dkC3I9CneKZ7MRsnlTd+ri9bYZY61w3wZNGjmQHAq2ExVyr13Jm7juQi8NCrbuUYliR9RxGb4V1ZETPTr/KTyGkYz4sIzCokYnpbubx2lVC+NmVEWZDozRaREOGKQjGPtPiDwg/ZaqeDrg3rSkTG6EI+DNgeUxuEwenTymh+1gdtqmTIB155JV5jQGHue6nIdLmwHKesqR5Uyd1oIx4z1icjpWUKSbX7hXf7Pstciicwvupdr2olWzTNyf0ORzjKOiGJAQ1Mm++xt9uK0G+oqMzEWC1jG6UCGXMSICY7w=\\\" />\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" id=\\\"__VIEWSTATEENCRYPTED\\\" value=\\\"\\\" />\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1016\\\" style=\\\"text-align: left;\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" colspan=\\\"3\\\" height=\\\"40\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\" /><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/account_login.aspx\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\" /></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/cart.aspx\\\" style=\\\"color:#CE0000;\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\" />(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\" />\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" height=\\\"134\\\" bgcolor=\\\"#F5F4E9\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" width=\\\"100%\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" border=\\\"0\\\" /></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td width=\\\"154\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" style=\\\"width:154;\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu.css\\\">\\r\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu2.css\\\">\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.dimensions.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.positionBy.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.bgiframe.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu2.js\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br /><br />SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br />\\r\\n\\t<br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br /><br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations/growingminds.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table width=\\\"100%\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\" ><td style=\\\"height:10px;\\\" colspan=\\\"6\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    <div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_MainDataPanel\\\" class=\\\"centercontent\\\">\\r\\n\\t\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td><span class=\\\"breadcrumb\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumbActive\\\">Vegetables</a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\" /></div></td></tr></table>\\r\\n <table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCatNameLabel\\\"><b>Vegetables:</b></span>&nbsp;&nbsp;<span class=\\\"subhead\\\">Page <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCurrentPageNumberLabel\\\"><b>1</b></span> of <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopTotalPagesLabel\\\"><b>2</b></span></span> &nbsp;&nbsp;</span><br /><img src=\\\"/images/pixel.gif\\\" width=\\\"200\\\" height=\\\"1\\\"></td><td align=\\\"right\\\">               \\r\\n\\t\\t  <b>1</b> > <a href=\\\"/garden_center/browse_category.aspx?id=123&page_no=2\\\">2</a> |  <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_NextHyperLinkTop\\\" href=\\\"/garden_center/browse_category.aspx?id=123&amp;page_no=2\\\">Next</a>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</td></tr></table>\\r\\n\\t\\t\\r\\n <hr />\\r\\n <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList\\\" style=\\\"display:inline-block;\\\"><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl00_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=195\\\">Amaranth</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl02_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=199\\\">Artichoke</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl04_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=124\\\">Beans</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl06_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=133\\\">Beets</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl08_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=134\\\">Broccoli</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl10_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=136\\\">Cabbage</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl12_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=137\\\">Chinese Cabbage</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl14_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=138\\\">Carrots</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl16_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=139\\\">Cauliflower</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl18_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=140\\\">Celery</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl20_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=141\\\">Chard</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl22_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=548\\\">Chicory</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl24_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=192\\\">Collards</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl26_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=142\\\">Corn</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl28_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=146\\\">Cucumbers</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl30_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=147\\\">Eggplant</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl32_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=562\\\">Fennel</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl34_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=151\\\">Gourds</a>\\r\\n            </span><span> : </span><span>\\r\\n                <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl36_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=152\\\">Kale</a>\\r\\n            </span><span> : </span><span>\\r\\n            <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TopCategoryDisplayDataList_ctl38_NameLink\\\" href=\\\"/garden_center/browse_category.aspx?id=571\\\">Kohlrabi</a>\\r\\n            </span></span>\\r\\n<hr />\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_LongDescriptionPanel\\\">\\r\\n\\t\\t\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n    <td>\\r\\n        <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_LongDescriptionLabel\\\"><p><b>&quot;Agriculture is our wisest pursuit, because it will in the end contribute most to real wealth, good morals and happiness&quot;</b> - Letter from Thomas Jefferson to George Washington (1787)</p>\\r\\n<p>We invite you to explore our offering of hundreds of varieties of organic vegetable seeds in 35 different crop groups. Choose from our selection of heirlooms, improved open-pollinated favorites, and productive hybrids. From zesty arugula to sweet Zefa Fino fennel, you&rsquo;re sure to find your personal favorites, as well as some new varieties to try for the first time. Freshly picked, home grown vegetables taste incredible and contain all of the vitamins and minerals that nature intended. Eat a rainbow assortment of fresh veggies every day to form the foundation of your healthy diet. &nbsp;</p>\\r\\n<p style=\\\"text-align: left\\\">&nbsp;</p></span>\\r\\n    </td>\\r\\n</tr>\\r\\n</table> \\r\\n<hr />\\r\\n\\r\\n\\t</div>\\r\\n\\r\\n<p>\\r\\n\\r\\n\\r\\n\\r\\n<table border=\\\"0\\\" width=\\\"620\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\">\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=195\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_CatImage\\\" src=\\\"/categories/VEGETAMAR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=195\\\"><b>Amaranth:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS14902\\\">Hopi Red Dye Amaranth</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS11024\\\">Greek Amaranth</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15484\\\">Manna De Montana Amaranth</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15834\\\">Burgundy Amaranth</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl01_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10724\\\">Mercado Amaranth</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=199\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_CatImage\\\" src=\\\"/categories/VEGART.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=199\\\"><b>Artichoke:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl02_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20860\\\">Imperial Star Artichoke</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=124\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_CatImage\\\" src=\\\"/categories/VEGBEANS.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=124\\\"><b>Beans:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=558\\\">Green Bush</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=557\\\">Colorful Bush</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=126\\\">Pole Beans & Half-Runners</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=132\\\">Half Runners</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=125\\\">Dry Soup Bush</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl03_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=131\\\">Edamame Soybeans</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=133\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_CatImage\\\" src=\\\"/categories/VEGBEETS.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=133\\\"><b>Beets:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS23427\\\">Alvro Mono Beet</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS16658\\\">Pronto Beet</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17495\\\">Shiraz Tall Top Beet</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl04_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS06066\\\">Colorful Beet Mix</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=134\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_CatImage\\\" src=\\\"/categories/VEGBROC.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=134\\\"><b>Broccoli:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15949\\\">Nutri-Bud Broccoli</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15874\\\">Early Green Broccoli</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17524\\\">Fiesta F-1 Broccoli</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17504\\\">Belstar F-1 Broccoli</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15374\\\">Calabrese Broccoli</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15753\\\">Spring Broccoli Raab</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl05_SubCatRepeater_ctl12_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21804\\\">Santee Sprouting F-1 Broccoli</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=136\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_CatImage\\\" src=\\\"/categories/VEGCABB.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=136\\\"><b>Cabbage:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17571\\\">Buscaro F-1 Cabbage</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS05749\\\">Red Acre Cabbage </a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21545\\\">Integro F-1 Cabbage</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl06_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17609\\\">Famosa F-1 Cabbage</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=137\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_CatImage\\\" src=\\\"/categories/VEGCHINCAB.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=137\\\"><b>Chinese Cabbage:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17563\\\">Nikko F-1 Chinese Cabbage</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl07_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18276\\\">Bilko F-1 Chinese Cabbage</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=138\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_CatImage\\\" src=\\\"/categories/VEGCARR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=138\\\"><b>Carrots:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17645\\\">Yaya F-1 Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17631\\\">Napoli F-1 Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15879\\\">Scarlet Nantes Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS06067\\\">Garden Carrot Mix</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15380\\\">Red Core Chantenay Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10975\\\">St. Valery Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl12_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17624\\\">Dragon Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl14_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17646\\\">Yellowstone Carrot</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl08_SubCatRepeater_ctl16_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=P107100\\\">White Satin F-1</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=139\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_CatImage\\\" src=\\\"/categories/VEGCAUL.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=139\\\"><b>Cauliflower:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17652\\\">Skywalker F-1 Cauliflower</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl09_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17663\\\">Veronica F-1 Cauliflower</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=140\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_CatImage\\\" src=\\\"/categories/VEGCELERY.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=140\\\"><b>Celery:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21005\\\">Mars F-1 Celeriac/Celery Root</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18225\\\">Tango Celery</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS14530\\\">Early Dell Celery</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl10_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS05768\\\">Red Venture Celery</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=141\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_CatImage\\\" src=\\\"/categories/VEGCHARD.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=141\\\"><b>Chard:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl11_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS22519\\\">Fordhook Chard </a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=548\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_CatImage\\\" src=\\\"/categories/Eros.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=548\\\"><b>Chicory:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17998\\\">Eros Escarole</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS16699\\\">Bellesque Endive</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10739\\\">Tr\\u00e9s Fin Maraichere (Fris\\u00e9e) Endive</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20509\\\">Rhodos Endive</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18019\\\">Leonardo Radicchio</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS11068\\\">Early Palla Rossa Radicchio</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl12_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18031\\\">Early Treviso Radicchio</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl12_SubCatRepeater_ctl14_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21045\\\">Catalogna Frastagliata Chicory</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=192\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_CatImage\\\" src=\\\"/categories/VEGCOLL.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=192\\\"><b>Collards:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21293\\\">Vates Champion Collard</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl13_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS06070\\\">Collard Greens</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=142\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_CatImage\\\" src=\\\"/categories/VEGCORN.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=142\\\"><b>Corn:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=143\\\">Sweet</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=144\\\">Parching</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=145\\\">Flour & Ornamental</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl14_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=561\\\">Popcorn</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=146\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_CatImage\\\" src=\\\"/categories/VEGCUCU.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=146\\\"><b>Cucumbers:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18278\\\">Adam F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS06076\\\">Sumter Cucumber </a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20878\\\">Saber F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20447\\\">Akito F-1 Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15964\\\">Marketmore Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10630\\\">Bush Champion Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl12_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS16675\\\">Satsuki Midori Cucumber</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl15_SubCatRepeater_ctl14_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS17160\\\">Armenian Cucumber</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=147\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_CatImage\\\" src=\\\"/categories/VEGEGGP.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=147\\\"><b>Eggplant:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21861\\\">Vittoria Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15971\\\">Black Beauty Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15738\\\">Rosa Bianca Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl06_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10810\\\">Italian White Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl08_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10811\\\">Japanese Pickling Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl10_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20465\\\">Louisiana Long Green Eggplant</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl16_SubCatRepeater_ctl12_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21264\\\">Turkish Orange Eggplant</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=562\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_CatImage\\\" src=\\\"/categories/Perfection.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=562\\\"><b>Fennel:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl17_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS10641\\\">Zefa Fino Fennel</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=151\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_CatImage\\\" src=\\\"/categories/VEGGOUR.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=151\\\"><b>Gourds:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS15973\\\">Bird's Nest (Bottle) Gourd</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl18_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS14540\\\">Dinosaur Gourd</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=152\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_CatImage\\\" src=\\\"/categories/VEGKALE.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=152\\\"><b>Kale:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS11200\\\">Red Russian Kale</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl02_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS20519\\\">True Siberian Kale</a>\\r\\n\\t:\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl19_SubCatRepeater_ctl04_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS21862\\\">Vates Blue Curled Kale</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t<div id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_CatPanel\\\">\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\">\\r\\n\\t<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr>\\r\\n\\t<td valign=\\\"top\\\" width=\\\"60\\\"><a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_ImageHyperLink\\\" class=\\\"link\\\" href=\\\"/garden_center/browse_category.aspx?id=571\\\"><img id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_CatImage\\\" src=\\\"/categories/Korist%20F-1%20Kohlrabi.jpg\\\" height=\\\"50\\\" width=\\\"50\\\" border=\\\"0\\\" /></a></td>\\r\\n\\t<td  valign=\\\"top\\\">\\r\\n      \\r\\n        <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_MasterLink1\\\" href=\\\"/garden_center/browse_category.aspx?id=571\\\"><b>Kohlrabi:</b></a>\\r\\n        \\r\\n\\t\\r\\n\\t\\r\\n\\t<a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatRepeater_ctl20_SubCatRepeater_ctl00_NameLink1\\\" href=\\\"/garden_center/product_details.aspx?item_no=PS18274\\\">Korist F-1</a>\\r\\n\\t \\r\\n                \\r\\n\\t\\r\\n\\t\\r\\n\\t\\r\\n\\t</td></tr></table></td>\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t<td colspan=\\\"10\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"></td>\\r\\n\\t</tr>\\r\\n\\t\\r\\n\\t</div>\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n</table>\\r\\n</p>\\r\\n<p>\\r\\n\\r\\n<span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CatNameLabel\\\"><b>Vegetables:</b></span> <b>Page</b> <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_CurrentPageNumberLabel\\\"><b>1</b></span> <b>of</b> <span id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_TotalPagesLabel\\\"><b>2</b></span>&nbsp;&nbsp;\\r\\n  <b>1</b> > <a href=\\\"/garden_center/browse_category.aspx?id=123&page_no=2\\\">2</a> |  <a id=\\\"ctl00_MainContentPlaceHolder_CategoryDisplay1_NextHyperLink\\\" href=\\\"/garden_center/browse_category.aspx?id=123&amp;page_no=2\\\">Next</a>\\r\\n</p>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" width=\\\"1px\\\" height=\\\"100%\\\" style=\\\"width:1px;height:100%\\\" /></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" height=\\\"100\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#F5F4E9\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input name=\\\"ctl00$SearchTB\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" style=\\\"width: 140px; margin-bottom: 11px;\\\" />\\r\\n\\t\\t<select name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\" style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input type=\\\"image\\\" name=\\\"ctl00$SearchButton\\\" id=\\\"ctl00_SearchButton\\\" src=\\\"/images/layout/buttons/btn_search_off.gif\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" src=\\\"\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" style=\\\"margin-top: 11px; \\\" />\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br /><br /></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\" /></a>&nbsp;&nbsp;<a \\r\\n                href=\\\"http://twitter.com/#!/SeedsofChange\\\" shape=\\\"rect\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\" /></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\" /></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flower Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herb Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\">Trees</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\">Seedlings</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/planting_guide.pdf\\\">Planting Guide</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/soc-links.aspx\\\">Resources</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Biodiversity.aspx\\\">Biodiversity</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Sustainability.aspx\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/FAQ_seed.aspx\\\">FAQs</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/CustomerService.aspx\\\">Customer Service</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/contact_us.aspx\\\">Contact Us</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/catalog_request.aspx\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/our_guarantee.aspx\\\">Guarantee</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\" href=\\\"/SOC_OGCERT.pdf\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1000\\\" style=\\\"text-align: left; margin-top:24px;\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br /> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"scrapes\": \"default\",\n            \"page_type\": \"links\",\n            \"page_id\": \"4fad2fb3688f920bcf000000\",\n            \"version\": \"0.13.0\"\n        },\n        {\n            \"extractors\": {\n                \"product_id\": [\n                    \"4fad3762688f920d76000000\"\n                ]\n            },\n            \"annotated_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link href=\\\"/css/soc.css\\\" type=\\\"text/css\\\" rel=\\\"STYLESHEET\\\"/>\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script src=\\\"/scripts/master_scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script src=\\\"/scripts/scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script type=\\\"text/javascript\\\" language=\\\"JavaScript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script src=\\\"/scripts/HM_Loader.js\\\" type=\\\"text/javascript\\\" language=\\\"JavaScript1.2\\\"></script>\\r\\n<script src=\\\"/jquery/jquery-1.3.2.min.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\" topmargin=\\\"0\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\" id=\\\"ctl00_MasterBody\\\" leftmargin=\\\"0\\\">\\r\\n    <form action=\\\"product_details.aspx?item_no=PS14165\\\" method=\\\"post\\\" id=\\\"aspnetForm\\\" name=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" value=\\\"mN6xmTfxY8t2jPXW3Aie4yzPt81GrJ7HBWxqq+yDyKBUwQuFR0DaMCdvErAWQa2j/1gS5qygfvQejUovckDLSHYwphTpVxPJ5jYj6gox+8oam03tTACB+giZuOPRDySFvq3pUjBrZZxyeNcqv5+BduH5CXtG9U9v4Y1fI+2aSm4olYeetJLQuRIkCq+ynaqWb6dHa23oNsyVVwiSXYC7z0Zxou2092/i6gOLWq69owvWtmXpePianIRBvB1sFrwDRgCJBEp4FNPWLagmAqnDDmF81O5cDEiyyUzXzKAE4d/glUu8jduveP3t/3H/cJCT1a8BMwn/jV9PKBFdttKt1QTLEm55dkBa/YRjgH5AUvRjM8zSLMi2IHIA95vydp3xkbY/txv5L8Eu+Y0UHteG8vbiYddhVr6Kw9nSjqbjW2v2UyAbBpCRtwlEtcyDiaeCKkCRSELCyQfPa3ebxxeESf0+07jNqDY2QguF8gJJX2P8xHRPIr0ZAgXU2d/H6cTMjYqEYTr4xSDnhIkftEuXk361h2k8heaLZNuo6Pi4lKuZfAAeeDC5efm7ckgz2IHzN88xggBNdYCnPiQkhDXZsejvE5BRCa1dQ5k+NKpLvMo9/Te/jrIjNcOqGnnYQgLudJZ+KFd2aXmgKloptaIgc+pMfLTVYKpunC5SaJaXiWubyNjwZCAD5XFPivY/fXtbcasxzs3Tt1P3Z24+q5r5TL97YJyOBCc8l/sVSIEnxC2AJhmCV9ecUZGrnMZNDvl+wbOe1e+S/GXgto2mnchnwIMfbgmi6O4xL/sSiketqUN0jYj8+6/y4dHcQPC7FKfzrHLQWOdtcLnQTTHy2LB6Idmvy76KFRzS1n8zE45tVSKmK3Srref57NWcuoCBf3i/b5VGvPjwRnR3Ic0uZkcKM1zqZZMRNEWUxMP3K0o7U//pDH5LAD5cWNJBqniqWXvXOJRUPQFdGjuWzO4jErCFLnD3U7uzlkjSXbdx4vkK5TblFeS+y5EvtwRb7cig4CFOBf0MFXddncHLwYg2IIjli5kfbpKXtOz6OsMQE2XAgqeTsNqbrVseE9nyqtFRMVAPy97j+YS7Ke6t1Hz22m5X0kJq2EFYqKUd2URIdLWG5K2I8AVbR586yUxE1KUaBZwtd6OruVcLqjbfc8OehU901AZaZSz0/hjSn1frqQWfBeUcWghmmqYiCO3dIyjm9OQuf2cQ2KveG3hvH3fGakOkVbzAQHm5XQZIGXx7OKf2/8/5RDKfxJXrmCXz/VwpIzUKk96rqMhAtxcbdiy5yJhAffCNziXOJLz9ov+F0h5T2UQs0Sw3H2GI3gj+zSl0k51VLuSkSJcThim3p3qqFu85tBnv/5C5cZwa5H++kdGwTtVw+e+4DO38M+dXHo8UzECkjyvt8cu39OOxx8B9w+3MBVX7kCyLGAm/fUbRQoM//HBaHn8JIpCpijMmBmVy3tfzEljzrAKb+kwQ4biDr287cLSp+UxZZCEDwmsiLRfZi6mEhNx0byzmGtdiVTgtfoUcQ7uszRSSiJINx5UO2a6E6ixJryF5dQCEkWe20lZVDlkxlHDYVftb0ueYEVnuqvYwPEcAgdbVbWfLusIhLqtbGr+QWDE20APZgc9a9ShyAVeiVxG8m6U/OOdA+hgcvLmW5GW8NC9uSI6yVaq5HjQZ1rHe/Gp5JnipmGZhBs09hBVUui8jTE+d+u9rAiX86X4KUx7BA7g+MRGP2lYk43N+mNHLkbU/AihvGTWYTzR9p+23HFErIGsi4hI8oVGcklztTOtnLSG5eNt4ptSLNxDcM0oLppbM2XABRZwV1rnLCOw9h6Hgr/Rw8AwRYTW7UGJcO/vL1+RMOA0wtrqTPfxwKockVgIbFLdRCrDNnl0ooLCfgq0il4ayq2VotAYJUVXzytkbSa5sSyJvRXEtXeELd9XhvhijpFgRHNjpOP9NWmRVvOgo0C/FU6ejw8NcomyHaX5Witkb6x4n0OV1yNXMsu6ds9Vj3e5nxgncyPIkffo04VtIzxKdNVpuKeKLW/fQIcG01n89zXqj5/hbO8kiVtozxRrjx5FU0glG9P7eZkclOWRDIg7UPER5xfkOeLPi4VUfCIMSkzlchkbwuTJZRJcGaqsp9vaKa29b/pAWMglK/WjMZZzFdLKU3E1sBXXemBzyF3lrKs36RpbCmBaSo8n86s7qutnqJzZhENNPwBpLljKEQM3DGB9hEPWzeNrqHFKTY6D16XNPh0uZXO3ye//MOKNvkhOee0vGRIBD22421UbwbUbsjZdk7Jd4WEnFlcRgojI1Wf4jkCA7nnDG5sK7b2qA9rHVYpzDJUuP1+HkmHAh0qtYJQ4pfakMhUBKjocdVuWDPQaJ+QSfNnGmu5Jtmvwl/hLACl/kYY/KaK0CCMkbQTUbLIRsmlwBfrZAXOIOqvPwbDcDAVwShM8hMYkc6tRQeeWdavGv4jE8/eevXTNBpzqQUspBFnHSVCJHn3wmznXR1ghEEi2nXzvGE6Nv/a7esYuxZJypg2MSukxKtmBsSEGkuy9ZUhVbQj3u3c9mlf7tRA8GXA8f2+ENw1vqQfvLLtHGOBvd0fA4TQsLJuoEItdnhJqptrj8ozAj4jCvkaKB2yO6MX/AeICyNDepyY5Rec/0e1apzAtFg7BrZGALgou8faoJtH/VQKMMQIpZudcT7+NWADQhd36VmUlheACUetABzsxRwnLt3w7gGwkdFO7ZWzPi7O6ofX/7mJofSQ5UzT3iMy8UjJ2F7ERlWan8IvYbzjBmuDR7uM5ToLDf1t/0opExNKmFDAXnWFqDDVcMTK5xSAdUVXPe+/r4XnChvmOV61P47Ebynny/c7bYDwGcr+YJy1cOQNfB8w9aMB8Oatv+MigsJu3pFD7WTmcGTQoNBiIsklDWBh0CTKzyv1rjCqmaOJznqlcmwQpn++7/IL2Xere0nHEnrRPFgSYPuOqizoatSzLsIFNdC21oSh4uvdRtmrjM34IRRv9HBEIE2FJRaGwVYFAS1HPFLq2kx2jV9k4py32+fvPzr+q1o1t6shQOY8JcZqIPVnJrIcKoO1BvYl7Jtj8+X2JPgunrGrQkedhgTE+CXzRSP5x2N+x/KF7e4MRYx/kIOlOcqrP4tI/MJOaMMU5aG0YW6HZ5TdUOAF8bO0mqp4TOEBaZNx2FNTQz4JfVnx5gNI0B1KRkGIFxmDc/pnud0bBN8w/byMH63jkFdgBfc6LA+T4/7n7gN15RgIyCgFVdcyee68ata9mm9X5jQgfL2EnSnfJJ9qZPa6aq+tvptabIPJBkKxXQt9DvQ0g86d634q9H9Lkf+EGuW2MnbWPW1LHIYJ+BkGxuFUg3BzLaMkkYn6bM4lygu5gQ+2wZxnJ5UgAxzOP2wo0KdxeXlCnknhzv0pku454r2vOWYGdJcZoPgjR+uJ9m3ag9+IW36pPTh7fjOczk9NsalW/QNB1kOB4OinKqQ1hArkHrFnjWDMJdup7tehV84xxfrG2jNeKKsOYy2w7O+63Kz7dcds5DgiqGQ545Vr0ODQ4bfWcPOQL9jJdDodTALtGvxjSgFhsgdTSLHs5G6C8QnytsrNJ/rNgzd+1KVanR5W+nPxUZoUmTZM9uH4QGUMmwirJ1rdc+6zPLCjpkwQCeSF2dwOcJ5FgRnpqJxe1hOxnr3rhk7H81GyHttDYZ7dDL4dMq4guy4hU7pLiGhCu5EmCoI+KKMsyePWslVwzVh4tTSpCoubhxWO+sWgknhLaLeCvhCcXUY2VAYAlMC3pv4Tkp3feJMEFee7hGuvXFwgGJ0H97NnWPpYoeQ3EgK0wfBRPS6BStbM1qminBZwdvicq+ttobZK56kFsJjYJDVNxdUlkU8ITeUIw7SYtBb+CISAdLI2BuWo5MxGC0/hyZ0gPiPfJBMicHl+F14/x9PRw+jUQa6dy71sqC4TZRKPZb4fHdzFcHLOJBrZqqwVWDt6UqA/UYm3qTYkq6oB4AG1/nnWek6Ar72UMoXehxQ+5XzdZ8bv3NQBHEomt4E8L0bVO/zB8MuNTWdFdyjt9hiGfpPzbDuvDK7EAO7UIcxlE8rtyX6M16vA55kKoTZoPPGlUgYni8VYGDg2uLPkmjU4se/eXwufpVBXP10HAmGbDCMHnxzukmNckKzbonv9lYpmK7J/F0rIoILPnhf9piE7CljKShgR3qmrwf3jWxh5GTEy3NbBLJtGYKE4N5aXPXkeW/O/5N+mRHd9VQbxjkvlDlxeqHsRuh3ZMRXaFtArPuTC1BC3mKJKzgzUGaOOtTHilVhdP1yb0w4MOoJVrj+NIG1ccJ/EDNuyE0SmnZaiRznfixL5ngEAvzr+JtlAUzI04Crd3+oke1IOzI0G7WKd4pqK9mwMMD79xT9LtgsmCAPI/aLeWDNyIgR+UHg7hyZzHV+vGroZZi8vau/Rbc1OiElP4WIxb8eiN10vXQDuHb/YJgBAhZHCuVbdxIYdUM8RWETxVhFTx0BX1thO/q4gEETRICP6lmtcTy43f+YOSb81gCHDYz/LpCH2v8bT7M6+N1mmYclbkyUdzKfjXOwwmIBkg9MBz6EITAjWfWNFkM9OEHvY1q63wDVLDQZve7suF2yENs5y/k4NgtI+IZlB5/zDipVyg9lZxKUwv3VV1JhRAiQlbftdmzpKqsAFHftXZzMHUD3ClFKiFseiPcljJt12KrC0Avvp5k8cnNFmz9rhoOGtnxY4flhsbIE5tJyEFkrxZpr0q9yE94bpzLrahX2DL+lDOoLciUPHb/LM63EbsTvyyO76yYfyNlxE7liOooBv9hMGg3x3Uai128mKVHF6jQLaE8y0nq+GKALN4hd59RY0dzHoxrDVFomiLgXk1m3MAA7HANK8mGVFSPQ31+wnkTRV58DZbKi5UMOPy8Qh57z3zqqlgYRxBA53jlikivXVzQDQQDfi6nmcWbMtfGtY0+sjPk8pBTt33NshvIWxqTC3A1hi+GPlEc/tWKVvp0xrZ/6srxiMnUo4Rpu6WXXIfqiSUrztBvBv92iNmrs2XRyf8nj/PQHPaen+TN2mHWbWYy4hQPkNThFU7jCauuQtU8/4Jmgn8wCvt2qtWFYMdWRE90NrpIlbTPgxfhV5Sq8P+zT+6foQqO2bCyZXdeNvGgKNof7Q+IU4IapugCIe5X+M7MIM886LWnx56Vaj17EHd6yVV8HlncGFrPR66LMYcBlm3gVlgxiCiOA9Q2VhpgmOeb7oynil6UK/2KFwbc8sOnPxtuBQQiLTFZ7DC3w7B9JMjB86Pc0ZMwDigp2PHzTML4BGjcwCdqfu1qBvz+H5bsnKWZjWgrBkJR3OAjJrJd3mgAJBz/1ZjAHL1m/2V3brWK+WbFhhRumiykM3iUXiTsaTK9KkRjNXzMEMeIVYki6CTrZ+5ocDYFKpaJPPq4XZDX9oeexDX/wM04jujLwIi1PLsz7jNUj5cMw5swgiYHwqJQ8S+aWt3ykaM9QrP8Y+sqDMiyJf/0udLTKgN5ZRdbmZxCzgI5X3W07vp+oIGUS8V/Cg3bLX3QmaaEcopo9Edj2cniKvZXugoPJihWqOEqkVOFTtfLmA/oPTsQlNNY9OBbA+r4sKcKgpB3vcf7EEQkrM3E89O405KWG7o7DwYo+YT7P6WWk0v4AcKyflCR4YzqzZoYX7+9yMNe2kouk67goS0xWd9xHMhb8Rrb7Ok+zl2qQHGhQlP8pybu9uHyudD3y6fyQ9nKfCONyywEjFdVhwqdt9tzv2RmBDIBigAiliO6pn008oXhu67tnWnYeHXqu+9sSMeOTMrYuPtw6Q8MAhwJiMvy9l447xkLs/ePvLPU1kfltj3x44bcZQ+UpKZomShFirPe7hpUXFki7yi4RfoM5blnjvKTHUoTHJCK7bfGrl/bbaWpBhFvAxhg2hrsidh4966g92zvGQu4ryFIacoHmWJpKvDyw07MpgRtU6i5RcWbOe8XonrQhH+lL3YISPtzCPmfwXjYu7a68aim+q6s+foxuLub54xNAwtM7YsvFRwk/DfIpQyk5a1KeD+Ysige+AKg+ln4yKxEGwKRzH54qQwDOJlbmueYNKq9jSi2j+I5Bf7EaDCyHE6Q1yCF7XnQctuIrxOVOvN+GI7Yboq2FU9+S1O+V5ntLp89EMY6Qdo1uWXGY9hoDh9UsWgNdnVAGuZxkYHZkBWjAneiMKDeZFSF/MKg1mxhwKyu9Qv/ZVkY6x6gfrkSKTr/uXr3Ms4C7xZ7/HR4/l4YhdH6LTcPzXY4saxajUcYa1iRll1nijyE/+SHArCS5mswsUIyJzmgZ/kMg9tSh8GLKbsRC8XNNWOHi6G8NpoaoKjnCvtOzQ0qlHjGJ2e6RzxVnuEyWESQVFd0gkwTmF+2TcPCd5WdYOq51NRJd6oHir1/H/Aw9qGbl4fVy5uMjRIvRT0LX8i6TdQKR+nhVEw0hToyJWv9JbPqkabtHfRuC6NyZzGsr7wtISkUwwY/kEK7wVld1SCEH23WxIIv3cQ3HSMerOqM4JSvpTER1YmpiQYVSt+5qZG9vBpHME5p5q4Z84LnbPdXGic9YV0TubZrcX/UWUf884Ef/AMnvzsOOQ1lTl/bOC6zg76Rr4/IMCmTl6ep1orms05E6hwzBoA7VtKHiBzq9t8Ho5SpQl3u5t+RAWqVLd2+GVnMsTh/bH4gQjVcEQrGQwrWJXcPl5TnYWXE5CAvSpKNErWgmkNgJfhmxKQXtIRPuetHX28PXB1jgxnQ51mI9bE9NemsfY89K5wMtoCB+HoNc4cBIIwHc+4LlXmQZtoqiQBO1Ma74Zwg/H7/y4XKNsmUcAUEpKW2jI4H1ZaW2er9fyuS7IXrN8irD4/7lAKKzzQLJ/aAn+60ECeL9RlrY7fGY3uP8Cp0I6Fj5ax+53cUWhMt2OwRx1Q0ABJT/r4d3/+/kWFJzCpqEhGCcKzXkohVihR4z3TbcNNxZd+hBUuWNLhdq4nnjkykuYNg/BkTrNVDWeqUfDj2sIE8lYaFXtH4dr6bzlqs5J6b7awOQwkEJU68HjrldmFdqqh42c+rUVOnVN7/hv1dhHMKdoDupEY6kjv1RFsdTRAmSc15EUiT+xMiVtOeUfvyJ7GKFL/UaKUhKjmbOww8cv3PufOU4bTIBsrt3emxb296/Ppl33jxIrLkppK7bjcimJ5u89sws23xWhI5tx6MOK6ARkrlPCt7C4e44E9dWP2QbwPIdmG2mSCG4P1amcQMFCbJ/aanyvsmq0Xzd6YMNbjvucvqBTd4tGRp/BDWnTEHzkgkPTO09c0oo1O3aL0QQNhqCNHMKf1bS+NBmNkKRJS1xpA7vdaJnqqEEUdvhkcgJ52t/9U4AtiG27Qa4o7UATOceb1dpf5W5y6skLOTy83FVmHhvv2YGHV74HwUIQ5EujuJTRKrPtY1vaG6YVNMnoleotTs8NCiRr7MAjySqvaOG17spwiBiZ8dgF8yqkbQZHOaHbuzMJ7YBL75UZKeZ6b5WIzljuZEYeO7auz1Wctb2apRZFLqrHIMIisuEeu0gsau4QYsf3/O0Hb7BIFlmnWtdUQB/C/1JH1bBF3ucKLfQ5KKe1fT1qpegH0WrvIkgmtWv3M2YyjX7yy505IUTqmRDDXcm+I5w+02r+QYl6WG9N1zy9Ul6AUPMDqWANrvmbAh5/esyLggzZF1Ti3Nx5g9u7Jbs0wN7usU/WJk1AZPJEu/in2OyCZqmbLzBiHNpQqJ4sIGQgT5iyFd2+O+rc0LHBDOwn6nPHqMOVP0s0GKFTuz81G7s6UXrrpV94VK9lz/KZtM71lclgRRGUBxMAUI2NsKHoNXKt2tby5QiSZxqSAkN1hSw35mb//TIKfWvBSJZVxhc1PW6amGoqfRQf8R2POIlTIuz52C094ytoltW6AfDNENQnhClOU7TACucSetiiRjb/1RYKPZCYyZQTj2WV0q/XA5xqiAN+EZIuNlmzcCxh5tG8p/EQmzJEDFKM37gPgw3oQW9Jd5tzu6QJudXq2npjrd6HbENrd1OQM1+A6d8IyOYiomxYFcatVaA8GNxyzvX41d/fzRjS174IjHg9GGd36WP//C7esqAKT2hLGQW67ShkAQfuejql7e2KSdH0KywMv2b9/17ncWAZ6Z9KSqT7y3DMqeqoLT9OC7tcH6FP5Y0rETA1rIBd8sic6ROECXBRi67s28OBwx2Qkp75VuGHrqM6vrRQBwz9D/f2d0UMMstbGpl3+SMQEqNtY26If5W72lmCncsQyWzYhJ9fJu/tBfI9CL4B1BpR5hurOQa9zqdSLPzzRH0FQtBISJn3zh+lplm9+RTLEX0IVyvLbJm8dIKDK4E2UpxIWfqNVk\\\" id=\\\"__VIEWSTATE\\\"/>\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" value id=\\\"__VIEWSTATEENCRYPTED\\\"/>\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table style=\\\"text-align: left;\\\" border=\\\"0\\\" width=\\\"1016\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\" colspan=\\\"3\\\" height=\\\"40\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\"/><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/account_login.aspx\\\" id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\"/></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a style=\\\"color:#CE0000;\\\" href=\\\"/garden_center/cart.aspx\\\" id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\"/>(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\"/>\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" bgcolor=\\\"#F5F4E9\\\" height=\\\"134\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" width=\\\"100%\\\" border=\\\"0\\\"/></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td style=\\\"width:154;\\\" width=\\\"154\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" valign=\\\"top\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link href=\\\"/css/jquery.jdMenu.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n            <link href=\\\"/css/jquery.jdMenu2.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n<script src=\\\"/scripts/jquery.dimensions.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.positionBy.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.bgiframe.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu2.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br/><br/>SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br/>\\r\\n\\t<br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br/><br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"100%\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td colspan=\\\"6\\\" style=\\\"height:10px;\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\" id=\\\"modal\\\">\\r\\n\\t\\r\\n\\t<iframe src=\\\"/modalblank.aspx\\\" name=\\\"PopUpIFrame\\\" height=\\\"140\\\" width=\\\"290\\\" scrolling=\\\"no\\\" id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\"/>\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=180\\\" class=\\\"breadcrumb\\\">Squash & Pumpkins</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=183\\\" class=\\\"breadcrumbActive\\\"><b data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;category&quot;}}\\\">Winter Squash</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\"/></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;name&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Gold Nugget</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"/>\\r\\n\\t\\t<br/><br/>\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"570\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img src=\\\"/images/product_shots/PPS14165B.jpg\\\" height=\\\"176\\\" width=\\\"176\\\" alt=\\\"Product PS14165\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\"/></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Gold Nugget</span></span><br/>\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><em data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;species&quot;}}\\\">Cucurbita maxima<br/>\\r\\n</em><ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;lifecycle&quot;}, &quot;generated&quot;: true}\\\" class id=\\\"anonymous_element_18\\\">Tender&nbsp;Annual</ins><br/>\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span class=\\\"content\\\" data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;}, &quot;generated&quot;: false}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\"><ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;weight&quot;}, &quot;generated&quot;: true}\\\" style class id=\\\"anonymous_element_20\\\">1-2 lbs.</ins> (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a href=\\\"/tellafriend.aspx?Item_No=PS14165\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 1&quot;<br/>\\r\\nSoil Temp. for Germ.: 70-90&deg;F<br/>\\r\\nDays to Germ.: 7-10<br/>\\r\\nPlant Spacing: 3'-4'Apart<br/>\\nDays to Maturity: <ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;days&quot;}, &quot;generated&quot;: true}\\\" class id=\\\"anonymous_element_16\\\">75-95</ins><br/>\\r\\nFull Sun<br/>\\r\\nModerate Water<br/>\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br/>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"620\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\" valign=\\\"top\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\"/></div>Choose a Size:<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span style=\\\"display:inline-block;\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#FFFBC4\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Squash, Winter, Gold Nugget- Pack of 20</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#:<span style=\\\"font-weight: bold;\\\"> <span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;product_id&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01593</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" value=\\\"957\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" value=\\\"957\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" value=\\\"Squash, Winter, Gold Nugget- Pack of 20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\"/>\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#E2E2B9\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Gold Nugget Winter Squash- Pack of 250</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06696</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" value=\\\"7564\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" value=\\\"7564\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" value=\\\"Gold Nugget Winter Squash- Pack of 250\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\"/>\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#B9B999\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" align=\\\"right\\\" valign=\\\"top\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br/><br/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br/><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br/><br/></td>\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\">\\r\\n                            <input maxlength=\\\"15\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\"/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"bottom\\\">\\r\\n                            <input src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onclick=\\\"return CheckQty(1,0);\\\" alt=\\\"Add to Your Cart\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\"/>\\r\\n                            <br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"/></div><br/>\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a href=\\\"/garden_center/browse_category.aspx?id=406\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"middle\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onclick=\\\"return CheckQty(2,0);\\\" alt=\\\"Proceed To Checkout\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\"/>\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" style=\\\"width:1px;height:100%\\\" width=\\\"1px\\\" height=\\\"100%\\\"/></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" align=\\\"center\\\" height=\\\"100\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input style=\\\"width: 140px; margin-bottom: 11px;\\\" name=\\\"ctl00$SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\"/>\\r\\n\\t\\t<select style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\" name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input src style=\\\"margin-top: 11px; \\\" name=\\\"ctl00$SearchButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" id=\\\"ctl00_SearchButton\\\"/>\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br/><br/></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\"/></a>&nbsp;&nbsp;<a shape=\\\"rect\\\" href=\\\"http://twitter.com/#!/SeedsofChange\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\"/></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\"/></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=123\\\" class=\\\"linkbuttonfooter\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=29\\\" class=\\\"linkbuttonfooter\\\">Flower Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=77\\\" class=\\\"linkbuttonfooter\\\">Herb Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=336\\\" class=\\\"linkbuttonfooter\\\">Cover Crops</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\" class=\\\"linkbuttonfooter\\\">Trees</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\" class=\\\"linkbuttonfooter\\\">Seedlings</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=361\\\" class=\\\"linkbuttonfooter\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a href=\\\"/digging/garden_info.aspx\\\" class=\\\"linkbuttonfooter\\\">Gardening Information</a></div>\\r\\n\\t    <div><a href=\\\"/digging/glossary.aspx\\\" class=\\\"linkbuttonfooter\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\" class=\\\"linkbuttonfooter\\\">Succession Planting</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\" class=\\\"linkbuttonfooter\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\" class=\\\"linkbuttonfooter\\\">Seed Saving</a></div>\\r\\n\\t    <div><a href=\\\"/digging/zone_chart.aspx\\\" class=\\\"linkbuttonfooter\\\">Zone Chart</a></div>\\r\\n\\t    <div><a href=\\\"/planting_guide.pdf\\\" class=\\\"linkbuttonfooter\\\">Planting Guide</a></div>\\r\\n\\t    <div><a href=\\\"/soc-links.aspx\\\" class=\\\"linkbuttonfooter\\\">Resources</a></div>\\r\\n\\t    <div><a href=\\\"/Biodiversity.aspx\\\" class=\\\"linkbuttonfooter\\\">Biodiversity</a></div>\\r\\n\\t    <div><a href=\\\"/Sustainability.aspx\\\" class=\\\"linkbuttonfooter\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a href=\\\"/FAQ_seed.aspx\\\" class=\\\"linkbuttonfooter\\\">FAQs</a></div>\\r\\n\\t    <div><a href=\\\"/CustomerService.aspx\\\" class=\\\"linkbuttonfooter\\\">Customer Service</a></div>\\r\\n\\t    <div><a href=\\\"/contact_us.aspx\\\" class=\\\"linkbuttonfooter\\\">Contact Us</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"linkbuttonfooter\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a href=\\\"/about/our_guarantee.aspx\\\" class=\\\"linkbuttonfooter\\\">Guarantee</a></div>\\r\\n\\t    <div><a href=\\\"/about/safe_seed_pledge.aspx\\\" class=\\\"linkbuttonfooter\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a href=\\\"/SOC_OGCERT.pdf\\\" class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table style=\\\"text-align: left; margin-top:24px;\\\" border=\\\"0\\\" width=\\\"1000\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br/> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"url\": \"http://www.seedsofchange.com/garden_center/product_details.aspx?item_no=PS14165\",\n            \"original_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link rel=\\\"STYLESHEET\\\" type=\\\"text/css\\\" href=\\\"/css/soc.css\\\" />\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/master_scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"JavaScript\\\" type=\\\"text/javascript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script language=\\\"JavaScript1.2\\\" src=\\\"/scripts/HM_Loader.js\\\" type='text/javascript'></script>\\r\\n<script \\r\\n            src=\\\"/jquery/jquery-1.3.2.min.js\\\" \\r\\n            type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body id=\\\"ctl00_MasterBody\\\" marginheight=\\\"0\\\" marginwidth=\\\"0\\\" leftmargin=\\\"0\\\" topmargin=\\\"0\\\" style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\">\\r\\n    <form name=\\\"aspnetForm\\\" method=\\\"post\\\" action=\\\"product_details.aspx?item_no=PS14165\\\" id=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"mN6xmTfxY8t2jPXW3Aie4yzPt81GrJ7HBWxqq+yDyKBUwQuFR0DaMCdvErAWQa2j/1gS5qygfvQejUovckDLSHYwphTpVxPJ5jYj6gox+8oam03tTACB+giZuOPRDySFvq3pUjBrZZxyeNcqv5+BduH5CXtG9U9v4Y1fI+2aSm4olYeetJLQuRIkCq+ynaqWb6dHa23oNsyVVwiSXYC7z0Zxou2092/i6gOLWq69owvWtmXpePianIRBvB1sFrwDRgCJBEp4FNPWLagmAqnDDmF81O5cDEiyyUzXzKAE4d/glUu8jduveP3t/3H/cJCT1a8BMwn/jV9PKBFdttKt1QTLEm55dkBa/YRjgH5AUvRjM8zSLMi2IHIA95vydp3xkbY/txv5L8Eu+Y0UHteG8vbiYddhVr6Kw9nSjqbjW2v2UyAbBpCRtwlEtcyDiaeCKkCRSELCyQfPa3ebxxeESf0+07jNqDY2QguF8gJJX2P8xHRPIr0ZAgXU2d/H6cTMjYqEYTr4xSDnhIkftEuXk361h2k8heaLZNuo6Pi4lKuZfAAeeDC5efm7ckgz2IHzN88xggBNdYCnPiQkhDXZsejvE5BRCa1dQ5k+NKpLvMo9/Te/jrIjNcOqGnnYQgLudJZ+KFd2aXmgKloptaIgc+pMfLTVYKpunC5SaJaXiWubyNjwZCAD5XFPivY/fXtbcasxzs3Tt1P3Z24+q5r5TL97YJyOBCc8l/sVSIEnxC2AJhmCV9ecUZGrnMZNDvl+wbOe1e+S/GXgto2mnchnwIMfbgmi6O4xL/sSiketqUN0jYj8+6/y4dHcQPC7FKfzrHLQWOdtcLnQTTHy2LB6Idmvy76KFRzS1n8zE45tVSKmK3Srref57NWcuoCBf3i/b5VGvPjwRnR3Ic0uZkcKM1zqZZMRNEWUxMP3K0o7U//pDH5LAD5cWNJBqniqWXvXOJRUPQFdGjuWzO4jErCFLnD3U7uzlkjSXbdx4vkK5TblFeS+y5EvtwRb7cig4CFOBf0MFXddncHLwYg2IIjli5kfbpKXtOz6OsMQE2XAgqeTsNqbrVseE9nyqtFRMVAPy97j+YS7Ke6t1Hz22m5X0kJq2EFYqKUd2URIdLWG5K2I8AVbR586yUxE1KUaBZwtd6OruVcLqjbfc8OehU901AZaZSz0/hjSn1frqQWfBeUcWghmmqYiCO3dIyjm9OQuf2cQ2KveG3hvH3fGakOkVbzAQHm5XQZIGXx7OKf2/8/5RDKfxJXrmCXz/VwpIzUKk96rqMhAtxcbdiy5yJhAffCNziXOJLz9ov+F0h5T2UQs0Sw3H2GI3gj+zSl0k51VLuSkSJcThim3p3qqFu85tBnv/5C5cZwa5H++kdGwTtVw+e+4DO38M+dXHo8UzECkjyvt8cu39OOxx8B9w+3MBVX7kCyLGAm/fUbRQoM//HBaHn8JIpCpijMmBmVy3tfzEljzrAKb+kwQ4biDr287cLSp+UxZZCEDwmsiLRfZi6mEhNx0byzmGtdiVTgtfoUcQ7uszRSSiJINx5UO2a6E6ixJryF5dQCEkWe20lZVDlkxlHDYVftb0ueYEVnuqvYwPEcAgdbVbWfLusIhLqtbGr+QWDE20APZgc9a9ShyAVeiVxG8m6U/OOdA+hgcvLmW5GW8NC9uSI6yVaq5HjQZ1rHe/Gp5JnipmGZhBs09hBVUui8jTE+d+u9rAiX86X4KUx7BA7g+MRGP2lYk43N+mNHLkbU/AihvGTWYTzR9p+23HFErIGsi4hI8oVGcklztTOtnLSG5eNt4ptSLNxDcM0oLppbM2XABRZwV1rnLCOw9h6Hgr/Rw8AwRYTW7UGJcO/vL1+RMOA0wtrqTPfxwKockVgIbFLdRCrDNnl0ooLCfgq0il4ayq2VotAYJUVXzytkbSa5sSyJvRXEtXeELd9XhvhijpFgRHNjpOP9NWmRVvOgo0C/FU6ejw8NcomyHaX5Witkb6x4n0OV1yNXMsu6ds9Vj3e5nxgncyPIkffo04VtIzxKdNVpuKeKLW/fQIcG01n89zXqj5/hbO8kiVtozxRrjx5FU0glG9P7eZkclOWRDIg7UPER5xfkOeLPi4VUfCIMSkzlchkbwuTJZRJcGaqsp9vaKa29b/pAWMglK/WjMZZzFdLKU3E1sBXXemBzyF3lrKs36RpbCmBaSo8n86s7qutnqJzZhENNPwBpLljKEQM3DGB9hEPWzeNrqHFKTY6D16XNPh0uZXO3ye//MOKNvkhOee0vGRIBD22421UbwbUbsjZdk7Jd4WEnFlcRgojI1Wf4jkCA7nnDG5sK7b2qA9rHVYpzDJUuP1+HkmHAh0qtYJQ4pfakMhUBKjocdVuWDPQaJ+QSfNnGmu5Jtmvwl/hLACl/kYY/KaK0CCMkbQTUbLIRsmlwBfrZAXOIOqvPwbDcDAVwShM8hMYkc6tRQeeWdavGv4jE8/eevXTNBpzqQUspBFnHSVCJHn3wmznXR1ghEEi2nXzvGE6Nv/a7esYuxZJypg2MSukxKtmBsSEGkuy9ZUhVbQj3u3c9mlf7tRA8GXA8f2+ENw1vqQfvLLtHGOBvd0fA4TQsLJuoEItdnhJqptrj8ozAj4jCvkaKB2yO6MX/AeICyNDepyY5Rec/0e1apzAtFg7BrZGALgou8faoJtH/VQKMMQIpZudcT7+NWADQhd36VmUlheACUetABzsxRwnLt3w7gGwkdFO7ZWzPi7O6ofX/7mJofSQ5UzT3iMy8UjJ2F7ERlWan8IvYbzjBmuDR7uM5ToLDf1t/0opExNKmFDAXnWFqDDVcMTK5xSAdUVXPe+/r4XnChvmOV61P47Ebynny/c7bYDwGcr+YJy1cOQNfB8w9aMB8Oatv+MigsJu3pFD7WTmcGTQoNBiIsklDWBh0CTKzyv1rjCqmaOJznqlcmwQpn++7/IL2Xere0nHEnrRPFgSYPuOqizoatSzLsIFNdC21oSh4uvdRtmrjM34IRRv9HBEIE2FJRaGwVYFAS1HPFLq2kx2jV9k4py32+fvPzr+q1o1t6shQOY8JcZqIPVnJrIcKoO1BvYl7Jtj8+X2JPgunrGrQkedhgTE+CXzRSP5x2N+x/KF7e4MRYx/kIOlOcqrP4tI/MJOaMMU5aG0YW6HZ5TdUOAF8bO0mqp4TOEBaZNx2FNTQz4JfVnx5gNI0B1KRkGIFxmDc/pnud0bBN8w/byMH63jkFdgBfc6LA+T4/7n7gN15RgIyCgFVdcyee68ata9mm9X5jQgfL2EnSnfJJ9qZPa6aq+tvptabIPJBkKxXQt9DvQ0g86d634q9H9Lkf+EGuW2MnbWPW1LHIYJ+BkGxuFUg3BzLaMkkYn6bM4lygu5gQ+2wZxnJ5UgAxzOP2wo0KdxeXlCnknhzv0pku454r2vOWYGdJcZoPgjR+uJ9m3ag9+IW36pPTh7fjOczk9NsalW/QNB1kOB4OinKqQ1hArkHrFnjWDMJdup7tehV84xxfrG2jNeKKsOYy2w7O+63Kz7dcds5DgiqGQ545Vr0ODQ4bfWcPOQL9jJdDodTALtGvxjSgFhsgdTSLHs5G6C8QnytsrNJ/rNgzd+1KVanR5W+nPxUZoUmTZM9uH4QGUMmwirJ1rdc+6zPLCjpkwQCeSF2dwOcJ5FgRnpqJxe1hOxnr3rhk7H81GyHttDYZ7dDL4dMq4guy4hU7pLiGhCu5EmCoI+KKMsyePWslVwzVh4tTSpCoubhxWO+sWgknhLaLeCvhCcXUY2VAYAlMC3pv4Tkp3feJMEFee7hGuvXFwgGJ0H97NnWPpYoeQ3EgK0wfBRPS6BStbM1qminBZwdvicq+ttobZK56kFsJjYJDVNxdUlkU8ITeUIw7SYtBb+CISAdLI2BuWo5MxGC0/hyZ0gPiPfJBMicHl+F14/x9PRw+jUQa6dy71sqC4TZRKPZb4fHdzFcHLOJBrZqqwVWDt6UqA/UYm3qTYkq6oB4AG1/nnWek6Ar72UMoXehxQ+5XzdZ8bv3NQBHEomt4E8L0bVO/zB8MuNTWdFdyjt9hiGfpPzbDuvDK7EAO7UIcxlE8rtyX6M16vA55kKoTZoPPGlUgYni8VYGDg2uLPkmjU4se/eXwufpVBXP10HAmGbDCMHnxzukmNckKzbonv9lYpmK7J/F0rIoILPnhf9piE7CljKShgR3qmrwf3jWxh5GTEy3NbBLJtGYKE4N5aXPXkeW/O/5N+mRHd9VQbxjkvlDlxeqHsRuh3ZMRXaFtArPuTC1BC3mKJKzgzUGaOOtTHilVhdP1yb0w4MOoJVrj+NIG1ccJ/EDNuyE0SmnZaiRznfixL5ngEAvzr+JtlAUzI04Crd3+oke1IOzI0G7WKd4pqK9mwMMD79xT9LtgsmCAPI/aLeWDNyIgR+UHg7hyZzHV+vGroZZi8vau/Rbc1OiElP4WIxb8eiN10vXQDuHb/YJgBAhZHCuVbdxIYdUM8RWETxVhFTx0BX1thO/q4gEETRICP6lmtcTy43f+YOSb81gCHDYz/LpCH2v8bT7M6+N1mmYclbkyUdzKfjXOwwmIBkg9MBz6EITAjWfWNFkM9OEHvY1q63wDVLDQZve7suF2yENs5y/k4NgtI+IZlB5/zDipVyg9lZxKUwv3VV1JhRAiQlbftdmzpKqsAFHftXZzMHUD3ClFKiFseiPcljJt12KrC0Avvp5k8cnNFmz9rhoOGtnxY4flhsbIE5tJyEFkrxZpr0q9yE94bpzLrahX2DL+lDOoLciUPHb/LM63EbsTvyyO76yYfyNlxE7liOooBv9hMGg3x3Uai128mKVHF6jQLaE8y0nq+GKALN4hd59RY0dzHoxrDVFomiLgXk1m3MAA7HANK8mGVFSPQ31+wnkTRV58DZbKi5UMOPy8Qh57z3zqqlgYRxBA53jlikivXVzQDQQDfi6nmcWbMtfGtY0+sjPk8pBTt33NshvIWxqTC3A1hi+GPlEc/tWKVvp0xrZ/6srxiMnUo4Rpu6WXXIfqiSUrztBvBv92iNmrs2XRyf8nj/PQHPaen+TN2mHWbWYy4hQPkNThFU7jCauuQtU8/4Jmgn8wCvt2qtWFYMdWRE90NrpIlbTPgxfhV5Sq8P+zT+6foQqO2bCyZXdeNvGgKNof7Q+IU4IapugCIe5X+M7MIM886LWnx56Vaj17EHd6yVV8HlncGFrPR66LMYcBlm3gVlgxiCiOA9Q2VhpgmOeb7oynil6UK/2KFwbc8sOnPxtuBQQiLTFZ7DC3w7B9JMjB86Pc0ZMwDigp2PHzTML4BGjcwCdqfu1qBvz+H5bsnKWZjWgrBkJR3OAjJrJd3mgAJBz/1ZjAHL1m/2V3brWK+WbFhhRumiykM3iUXiTsaTK9KkRjNXzMEMeIVYki6CTrZ+5ocDYFKpaJPPq4XZDX9oeexDX/wM04jujLwIi1PLsz7jNUj5cMw5swgiYHwqJQ8S+aWt3ykaM9QrP8Y+sqDMiyJf/0udLTKgN5ZRdbmZxCzgI5X3W07vp+oIGUS8V/Cg3bLX3QmaaEcopo9Edj2cniKvZXugoPJihWqOEqkVOFTtfLmA/oPTsQlNNY9OBbA+r4sKcKgpB3vcf7EEQkrM3E89O405KWG7o7DwYo+YT7P6WWk0v4AcKyflCR4YzqzZoYX7+9yMNe2kouk67goS0xWd9xHMhb8Rrb7Ok+zl2qQHGhQlP8pybu9uHyudD3y6fyQ9nKfCONyywEjFdVhwqdt9tzv2RmBDIBigAiliO6pn008oXhu67tnWnYeHXqu+9sSMeOTMrYuPtw6Q8MAhwJiMvy9l447xkLs/ePvLPU1kfltj3x44bcZQ+UpKZomShFirPe7hpUXFki7yi4RfoM5blnjvKTHUoTHJCK7bfGrl/bbaWpBhFvAxhg2hrsidh4966g92zvGQu4ryFIacoHmWJpKvDyw07MpgRtU6i5RcWbOe8XonrQhH+lL3YISPtzCPmfwXjYu7a68aim+q6s+foxuLub54xNAwtM7YsvFRwk/DfIpQyk5a1KeD+Ysige+AKg+ln4yKxEGwKRzH54qQwDOJlbmueYNKq9jSi2j+I5Bf7EaDCyHE6Q1yCF7XnQctuIrxOVOvN+GI7Yboq2FU9+S1O+V5ntLp89EMY6Qdo1uWXGY9hoDh9UsWgNdnVAGuZxkYHZkBWjAneiMKDeZFSF/MKg1mxhwKyu9Qv/ZVkY6x6gfrkSKTr/uXr3Ms4C7xZ7/HR4/l4YhdH6LTcPzXY4saxajUcYa1iRll1nijyE/+SHArCS5mswsUIyJzmgZ/kMg9tSh8GLKbsRC8XNNWOHi6G8NpoaoKjnCvtOzQ0qlHjGJ2e6RzxVnuEyWESQVFd0gkwTmF+2TcPCd5WdYOq51NRJd6oHir1/H/Aw9qGbl4fVy5uMjRIvRT0LX8i6TdQKR+nhVEw0hToyJWv9JbPqkabtHfRuC6NyZzGsr7wtISkUwwY/kEK7wVld1SCEH23WxIIv3cQ3HSMerOqM4JSvpTER1YmpiQYVSt+5qZG9vBpHME5p5q4Z84LnbPdXGic9YV0TubZrcX/UWUf884Ef/AMnvzsOOQ1lTl/bOC6zg76Rr4/IMCmTl6ep1orms05E6hwzBoA7VtKHiBzq9t8Ho5SpQl3u5t+RAWqVLd2+GVnMsTh/bH4gQjVcEQrGQwrWJXcPl5TnYWXE5CAvSpKNErWgmkNgJfhmxKQXtIRPuetHX28PXB1jgxnQ51mI9bE9NemsfY89K5wMtoCB+HoNc4cBIIwHc+4LlXmQZtoqiQBO1Ma74Zwg/H7/y4XKNsmUcAUEpKW2jI4H1ZaW2er9fyuS7IXrN8irD4/7lAKKzzQLJ/aAn+60ECeL9RlrY7fGY3uP8Cp0I6Fj5ax+53cUWhMt2OwRx1Q0ABJT/r4d3/+/kWFJzCpqEhGCcKzXkohVihR4z3TbcNNxZd+hBUuWNLhdq4nnjkykuYNg/BkTrNVDWeqUfDj2sIE8lYaFXtH4dr6bzlqs5J6b7awOQwkEJU68HjrldmFdqqh42c+rUVOnVN7/hv1dhHMKdoDupEY6kjv1RFsdTRAmSc15EUiT+xMiVtOeUfvyJ7GKFL/UaKUhKjmbOww8cv3PufOU4bTIBsrt3emxb296/Ppl33jxIrLkppK7bjcimJ5u89sws23xWhI5tx6MOK6ARkrlPCt7C4e44E9dWP2QbwPIdmG2mSCG4P1amcQMFCbJ/aanyvsmq0Xzd6YMNbjvucvqBTd4tGRp/BDWnTEHzkgkPTO09c0oo1O3aL0QQNhqCNHMKf1bS+NBmNkKRJS1xpA7vdaJnqqEEUdvhkcgJ52t/9U4AtiG27Qa4o7UATOceb1dpf5W5y6skLOTy83FVmHhvv2YGHV74HwUIQ5EujuJTRKrPtY1vaG6YVNMnoleotTs8NCiRr7MAjySqvaOG17spwiBiZ8dgF8yqkbQZHOaHbuzMJ7YBL75UZKeZ6b5WIzljuZEYeO7auz1Wctb2apRZFLqrHIMIisuEeu0gsau4QYsf3/O0Hb7BIFlmnWtdUQB/C/1JH1bBF3ucKLfQ5KKe1fT1qpegH0WrvIkgmtWv3M2YyjX7yy505IUTqmRDDXcm+I5w+02r+QYl6WG9N1zy9Ul6AUPMDqWANrvmbAh5/esyLggzZF1Ti3Nx5g9u7Jbs0wN7usU/WJk1AZPJEu/in2OyCZqmbLzBiHNpQqJ4sIGQgT5iyFd2+O+rc0LHBDOwn6nPHqMOVP0s0GKFTuz81G7s6UXrrpV94VK9lz/KZtM71lclgRRGUBxMAUI2NsKHoNXKt2tby5QiSZxqSAkN1hSw35mb//TIKfWvBSJZVxhc1PW6amGoqfRQf8R2POIlTIuz52C094ytoltW6AfDNENQnhClOU7TACucSetiiRjb/1RYKPZCYyZQTj2WV0q/XA5xqiAN+EZIuNlmzcCxh5tG8p/EQmzJEDFKM37gPgw3oQW9Jd5tzu6QJudXq2npjrd6HbENrd1OQM1+A6d8IyOYiomxYFcatVaA8GNxyzvX41d/fzRjS174IjHg9GGd36WP//C7esqAKT2hLGQW67ShkAQfuejql7e2KSdH0KywMv2b9/17ncWAZ6Z9KSqT7y3DMqeqoLT9OC7tcH6FP5Y0rETA1rIBd8sic6ROECXBRi67s28OBwx2Qkp75VuGHrqM6vrRQBwz9D/f2d0UMMstbGpl3+SMQEqNtY26If5W72lmCncsQyWzYhJ9fJu/tBfI9CL4B1BpR5hurOQa9zqdSLPzzRH0FQtBISJn3zh+lplm9+RTLEX0IVyvLbJm8dIKDK4E2UpxIWfqNVk\\\" />\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" id=\\\"__VIEWSTATEENCRYPTED\\\" value=\\\"\\\" />\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1016\\\" style=\\\"text-align: left;\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" colspan=\\\"3\\\" height=\\\"40\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\" /><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/account_login.aspx\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\" /></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/cart.aspx\\\" style=\\\"color:#CE0000;\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\" />(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\" />\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" height=\\\"134\\\" bgcolor=\\\"#F5F4E9\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" width=\\\"100%\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" border=\\\"0\\\" /></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td width=\\\"154\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" style=\\\"width:154;\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu.css\\\">\\r\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu2.css\\\">\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.dimensions.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.positionBy.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.bgiframe.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu2.js\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br /><br />SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br />\\r\\n\\t<br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br /><br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table width=\\\"100%\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\" ><td style=\\\"height:10px;\\\" colspan=\\\"6\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div id=\\\"modal\\\" style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\">\\r\\n\\t\\r\\n\\t<iframe id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" name=\\\"PopUpIFrame\\\" src=\\\"/modalblank.aspx\\\" width=\\\"290\\\" height=\\\"140\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\" />\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=180\\\" class=\\\"breadcrumb\\\">Squash & Pumpkins</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=183\\\" class=\\\"breadcrumbActive\\\"><b>Winter Squash</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\" /></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Gold Nugget</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"\\t\\t/>\\r\\n\\t\\t<br /><br />\\r\\n\\t\\t<table width=\\\"570\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\" alt=\\\"Item Photo\\\" border=\\\"0\\\" src=\\\"/images/product_shots/PPS14165B.jpg\\\" alt=\\\"Product PS14165\\\" height=\\\"176\\\" width=\\\"176\\\" border=\\\"0\\\" /></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\" src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Gold Nugget</span></span><br />\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><em>Cucurbita maxima<br />\\r\\n</em>Tender&nbsp;Annual<br />\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\" class=\\\"content\\\">1-2 lbs. (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\" href=\\\"/tellafriend.aspx?Item_No=PS14165\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\" src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 1&quot;<br />\\r\\nSoil Temp. for Germ.: 70-90&deg;F<br />\\r\\nDays to Germ.: 7-10<br />\\r\\nPlant Spacing: 3'-4'Apart<br />\\r\\nDays to Maturity: 75-95<br />\\r\\nFull Sun<br />\\r\\nModerate Water<br />\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br />\\r\\n\\t\\t\\r\\n\\t\\t<table width=\\\"620\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" \\r\\n                            height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td valign=\\\"top\\\" bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\" /></div>Choose a Size:<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\" style=\\\"display:inline-block;\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#FFFBC4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Squash, Winter, Gold Nugget- Pack of 20</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#:<span style=\\\"font-weight: bold;\\\"> <span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01593</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\" value=\\\"957\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\" value=\\\"957\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\" value=\\\"Squash, Winter, Gold Nugget- Pack of 20\\\" />\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#E2E2B9\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Gold Nugget Winter Squash- Pack of 250</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06696</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\" value=\\\"7564\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\" value=\\\"7564\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\" value=\\\"Gold Nugget Winter Squash- Pack of 250\\\" />\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\" >\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#B9B999\\\"><br />\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" valign=\\\"top\\\" align=\\\"right\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br /><br /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br /><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br /><br /></td>\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\">\\r\\n                            <input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\" type=\\\"text\\\" maxlength=\\\"15\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#D7D79E\\\"><br />\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"bottom\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n                            <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" alt=\\\"Add to Your Cart\\\" onclick=\\\"return CheckQty(1,0);\\\" border=\\\"0\\\" />\\r\\n                            <br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\" /></div><br />\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\" href=\\\"/garden_center/browse_category.aspx?id=406\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"middle\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" alt=\\\"Proceed To Checkout\\\" src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" onclick=\\\"return CheckQty(2,0);\\\" border=\\\"0\\\" />\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" width=\\\"1px\\\" height=\\\"100%\\\" style=\\\"width:1px;height:100%\\\" /></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" height=\\\"100\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#F5F4E9\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input name=\\\"ctl00$SearchTB\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" style=\\\"width: 140px; margin-bottom: 11px;\\\" />\\r\\n\\t\\t<select name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\" style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input type=\\\"image\\\" name=\\\"ctl00$SearchButton\\\" id=\\\"ctl00_SearchButton\\\" src=\\\"/images/layout/buttons/btn_search_off.gif\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" src=\\\"\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" style=\\\"margin-top: 11px; \\\" />\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br /><br /></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\" /></a>&nbsp;&nbsp;<a \\r\\n                href=\\\"http://twitter.com/#!/SeedsofChange\\\" shape=\\\"rect\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\" /></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\" /></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flower Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herb Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\">Trees</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\">Seedlings</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/planting_guide.pdf\\\">Planting Guide</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/soc-links.aspx\\\">Resources</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Biodiversity.aspx\\\">Biodiversity</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Sustainability.aspx\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/FAQ_seed.aspx\\\">FAQs</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/CustomerService.aspx\\\">Customer Service</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/contact_us.aspx\\\">Contact Us</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/catalog_request.aspx\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/our_guarantee.aspx\\\">Guarantee</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\" href=\\\"/SOC_OGCERT.pdf\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1000\\\" style=\\\"text-align: left; margin-top:24px;\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br /> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"scrapes\": \"default\",\n            \"page_type\": \"item\",\n            \"page_id\": \"4fac3b47688f920c7800000f\",\n            \"version\": \"0.13.0\",\n            \"selectors\": {\n                \"breadcrumbs\": {\n                    \"type\": \"css\",\n                    \"selector\": \".subhead a.breadcrumb\"\n                },\n                \"image\": {\n                    \"type\": \"xpath\",\n                    \"selector\": \"//img[@id='ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage']/@src\"\n                }\n            }\n        }\n    ],\n    \"start_urls\": [\n        \"http://www.seedsofchange.com/garden_center/browse_category.aspx?id=123\"\n    ],\n    \"name\": \"seedsofchange\",\n    \"exclude_patterns\": [\n        \"/tellafriend.aspx.+\"\n    ],\n    \"follow_patterns\": [\n        \"/garden_center/browse_category.aspx.+\",\n        \"/garden_center/detailedCategoryDisplay.aspx.+\",\n        \"/garden_center/product_details.aspx.+\"\n    ],\n    \"links_to_follow\": \"patterns\",\n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/seedsofchange2.json",
    "content": "{\n    \"templates\": [\n        {\n            \"extractors\": {},\n            \"annotated_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link href=\\\"/css/soc.css\\\" type=\\\"text/css\\\" rel=\\\"STYLESHEET\\\"/>\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script src=\\\"/scripts/master_scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script src=\\\"/scripts/scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script type=\\\"text/javascript\\\" language=\\\"JavaScript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script src=\\\"/scripts/HM_Loader.js\\\" type=\\\"text/javascript\\\" language=\\\"JavaScript1.2\\\"></script>\\r\\n<script src=\\\"/jquery/jquery-1.3.2.min.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\" topmargin=\\\"0\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\" id=\\\"ctl00_MasterBody\\\" leftmargin=\\\"0\\\">\\r\\n    <form action=\\\"product_details.aspx?item_no=PS15978\\\" method=\\\"post\\\" id=\\\"aspnetForm\\\" name=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" value=\\\"/73Vsoki2CsUrjI+fTiSh7iZLwuxq+72OPy+l2+Zr4II8UEcce9zN4WH9nc5klSOs0FZcfyB/XQpbZI8Gg6ak4bQF6wuS9J0nmSJ+8MlACqFwFfToPq4sqcrNAp0ZUQl3wRDT5HzpfnzW9jccdFwrEHffyeXRU0IghsXuo2DMKf+/Xnf+q0M25qOqF9tJq9bVO1T84aYrVL4ofOJPRPeG9pduMfeVASYe5LoAsVCWAUMTFt/FQKfH9eeYSVciDxt6gYcVfqS4DRNJu1l0gy4Tes9Rtw/Jeb+PQ38Iik/kFVp6G+ap2tHKr2VLZeziPc2fwP1DYSsKRDvzvApozbjG5KUYZYV3g3Gn2N/qeVijv27dDk9skmdcxsiRcC0SLDdg/tjh5VybRsVTCFAwklV8a7Ug84DhM9eI5FKPm29D+2kTHAfQ95QnLIMkHxEjkCdVuqngQDY2iq+R+q771XilKzXfek8VNZJqq3RbDHdvG+pQFUPUPJGvyAcOSmaEiiMMjmfv4/pUkxYiDckd4T1ET4F/dFOQUGTlos90yvtrMuZs0Rtx1IKXxZCnm2IwyY5y5VD85/atmKIDfhSfGM41UliiR+LZYfDXwqqurCxznY0x/Az+28mEFYmVBWcaJ0lNBOdly0CqTuTqW7MAye3VqLUqajieH5KcrRcCHz3mEUOUY8d5bjz4Kpjcb0mxO+TpJxOHrGFvi8rx1nyNFx25EQ+3z7o9Kv059qik/NPIaM/Z9+A+I1HYSH8+XhMWwAyudpVutjeh13LFjZPTQBTmDQWkI1PrG3NhTR+oReymfD8kG8k2yyCE6kiViVageKSV2TnD6ApJy+xHJ+BaRjYxOzepKES/QnODJHc8eXpTxoUtLqxUIk6zxCLvCwjk7pdEz2s/pMBN0iQiXL+NkwVJbygcNm4Hr/4qpa5+EvXz7gKp5MomhJOLmzoTDsbCOICcjLO6ulwrkRRpjSGXNij/ct8QKsCVF2v0P61pIPQQxXGnBipqm3nhDv0Qz31i8Mk98KApt2zS98bRFX8OaGnZtBspIBc6nsr6WMloSblSClmvMGKXHsUFMAHRIJI6zWkk4bFUyJqkyFXZHLbFZE+yqmnmBz8T8mS12P6oVeVxxNpBv4j0zVPHNkM0OWygvYmNWxNsRjH9+309MoZZ/XsGrI86iL2q2a5CG8aEzS6SuEkNRBOsbonGI9msAiBO20s0VXYVuFTUp5VLTDNkGc+nIG++iaP592JQqP1F/wlVTB+U34e9buyJbntWQHko+/ZN/hvYlruz2zB8msxX0IR1OO4gZDdfbXA4xK+ossQSYrsKjMIstIsFudnHqzCfNMNA26qzt5VBSbLVbpinew3NuVVTsMvSrcCDbmA5yJjwbTPidW/wg7wFx4J1C4VhHdF84/Xvu8uq8+8vRP6M1+6x1ZgF6X8xZHqPCIyYwAUfK1/crDsUaQeBikeP3LTCUMcGYhbdtKmbmVq7iM9R04guavDYGK+Vp3J3GjZne3k2KUNQgs4qqO51QiK577jSSW5V0QXqMccSJiSmiKsrcpM0z4J0ot43pEn8PhVJNlBhCuLEpvUjYHEc4l4MdobzogN2MYnmoxBZjDX+Nq4mCFJInqGC/xvXxLroji9kjBg1Z4NaypSmuZxBJ8l2AjEzzYwRRJfwmzNz4uplbe8uc+MkFNSiyvoF3QoxhySCt9iAyyXVLg/v6d88cYd9gbzFPRhBC36e+IQgtzeGZ34yFqr7F67Fa1WrNIZhUb0HD2aiaRXqfvuAOliSt/AhWJxNonhLQwfnPxH1ywxJNoWr9p9hEKiICSVr7HeXcIJju1FkL9WCw5+c6mVr1+swTvzTzv9XZR2Q5K4OJMbtBoktZByLgArs91pNCksQyx6XyL9B3HQrBcdCShoZOfGTAtYlPglEFM9E4onM2CLyTS88yz+4Rtep2+8oO9PPXfqHtLWPBpVCuORudNeocAdwsVBg2eYJPUUxEEsjOjZjYo57a9NAEPqBagaeMdzPzQH7vAtyxcAd2q6XZpnbReOt0HHPixLOEiUqWjZBMn9R0s9vgZ74AtKa0GE+ABo42Uko4ya3xl4dGx5zHZ0L9WN7/A3WifHRlUgiD04AqUYdTrvIjQau3gMCSvF5F4+1Q9lje+PIQPvoz3T0c3xm/CXYwlywlRPieA8L6vwOs6bhiWFT6KnQnZVRrOUeezaZqYCs4c7kRP2APQUS4RSjQhV9W04SCPtmLfKU3c8GJYRhjobquyLRBUy0rwCxbeeLPSVUjAlS11yKkTWGi1DiJRUkVJ+EXAYtEwJki9uh4kbbiR/ffZRuHGcezMPmoAFitb0BcIQwNS742RvRrriWA1K7Qrc1cQxSFEWS+RDJjxUMjSk3DSeTQEl4MlMMMjgij7zHQBtUf23ebdSxc6ci0Ia+0auGvHyEX8gSPcVyBzlve5FacAfeP+zkODwzX4W15Yw6wQ5Yh06E+Iew/d45A5f4NLKwefBrqPRd9vJXPasOLTxlF12cGDcGn/gsbrpqKEpkaicyuA+jAK+xnlHTG5ssXcXyrGjsCYbxFgJcdFTDfhBdAAIMJ+u0vTQOcMjB95DY8DTznE2K1f4Xc5qItHsJdgEdF1JgD1Y9X4D5UdNAKTW2KmjxecV65PK0ONBojvtjnpkHY6pPDhXJh9CO3aKU3A+ecVJveNoCkmClA5K4itvC4piVHskb6utyjYz6wqexonF6pNshZ5eMW9TD5Z4w7ZeeET0pDi4bpAECKqpAXtQpQOCJUwb40C419XYbHoAcSq7+EX+0VrrBGhyntxaewSv3PMZV5en5mkOiFIO1/A9/eZGjghpK7xesW5dWq2gmNqYf768SNGk/I//78IQWaaJujxeAZIXmlVVDucubq+szfiE1Zk+U+1Ix4kiCIxJ5xjj3SjmG10Ji9koXNIPlS8yAUgVqo0kM20qSrZVJLGou/kXTlrvZxpipeqGyFV+FnB+H8scaZgCWREizHL4OuZILdyAI5D9qy7se1mABFkgWwmJA84NXs18DROpk1dFUdLdgP4eZqj8fEYhux6IWK8+KGpluXnY8B4QEJOqXUfP6HF0OaBsfFFguPYjJZik22H7SNtKkTepQM1VCXoXeBvD0AvQLyztXaIpOFu7vDBETec+laRapr8am2smzQmEeN0trnRl4b1OWYYxER3v74VuTcK5enFXJME5kXBZzXxhbKpdq+prhvqBchA40NzIF2aV0WF45Q499F+q6ZqPC6s2irAWJ7b5PqTfCT5sEs1JXOQW8PjbaHrgvxKVatbZZrohLxPyTl2nW0d7ITJVpFenhevQb0b5ChcB7e0zKZlFvdN6iHBeo/8C/MXN8fQeUGjdWl2SGP25UEN4NaK5eWj2Ayn9a4FC/lDEsJPw+w0V6VP6Tlalyyj0/reatzaHjILK5jF0bLH2XnPQQ8sc5J7DcMrzMYrdn0sIa8ELbS/cbiufpVoSjyUm+xGNA5U5Nqx8XJ4gjToMbKEBg6yoZeGvEaEsrTicuU6P4ZBUsDcXbL0lnCb3bQOKRaIsU9TnMNHRxv+di8buuvsU3HU3etR3bKZqen9jqWpAHqx9bm0AVE0SX+kjbrEEpTvWK7O/v+xoTkYWyNHcuf7R81p6gKhe/gUpb4LXEdm172IXEe8vdlw/oqH+jUg5BLqSzLscBxBcUb8c7T3bp9hWxpytXv7+yf7K5jYgJ5U7EV7Yv0kjt9Bmu+YgYYt3A0gBTsOljkA0+DAxsURV/ofJSBQMdse+BUS0p/ylsLHTbvTVGWe8anyWzUKhngauH6OMFlieyYBLf4qV+PAj6osJ+Jo55AvX7GrHTUWulaVQk8mqg9gz6zzzQ1prJcN9J9RMVXqDkeMuiXX+xdR2YMKX8DQS9ZzxJC6c/VmIs4H4DbVxLQ8TWbWIplqjQplN/okPwesZMJPfZ3XDf8ZW91Fpv47tegPVG08XRm0HCZ1uiFFhWZlUpafz3BDoZFKagIL9jyhQW8by7TLUJ5dF3xlXe6Yco7ew7OQ5S/OAlU+DgF0ig8jeB4OHTldrFoCwwTobLZ6aVcUZaqrMV5jvibUbKL0/kxucgK87Zr2ckShIbpedOT6sgB/oObkIK8Toew1FS3AyNoOgTSJzHk4Go8Hon7Z5rh83gb1J/bbLZ2Iv0OSlu1DmOb5TodJwCg2kALlOhXGRsSka1lCQksA6omM0hW5wTSpZy4GXA7Dqbq80D0klXLDOb82KNmwslruYUwvZPOySnl4yAw38E9MAq78ffUbaCnX3rJOI3kPCYeFRMy2Vtv8V2dq8k299X4LPCKhube2ouuCbG6ssEHZEXJIr/cvA+SELaN6LDZZIP/B7F5pf2wSSPuTQ+CrCaV0mN0VKN8BWK39i6bG+oLm8m0adhyjXwg4VM5C6W2RFLtbJ/xzJNM7z7D8XIJ0n41mpQM4uZWDzTb6UpKCR7wGLheHnc7nGD00m7j3skbKfaWOEzqieNwED0YnXJ3RaAdOxiU3NJA5TgmAWMSbJjgen1wVI5mrw5davgURcwHvCNn4n2E/c1x5okyU9hDov0sUpd1xafej1Aax9d44vjh7yFtPpOBt4erKsuIEJ82syIgdbdt5VsVb3xPB9ZyGTOhYOzDX1lh8NR2QJgC4uEwPAgqMAMAb+BOT9VygFsrVH9yTShfDG4gU5yzISkv5YhPpwJl7tElMR1cIrA8/nfhwf0TjTHi0xZ4M81oZlZS15R9kLy4MfViZgVciJhy4nwMwCH4gruJEhW/TYyTECEbUHQqOSayW0VSYXgQLIUlROqEmCthdCtv8gVEcE6ApoSOuFBUYG3tvHbOWFaeT2VlN/LhKIzKr6ZTazBfBtJSjWamH0E6n59aeRgMqZDOsOoYpuUsDKoMRDVITkJWuXQbNPHhdcOGx+EkoyGPa6k96sVaXHZvhu9xjR5joCojahibpoxQrrGnK6oS6L2QoTzDTTyEDmzxIKoBj06pal6er1MbcXQkByZ+vt8PBWRRJbstf8btY0tKomO4wMhGefXIGg6sAU2uvulpj0h6ZIKoRY3r7K77SEh1Yj3B+CaMjIeKEqBjVA7nNGJLR9QHrdAKyTVx6DGFV6y1cpn6B2V8/rShM1c+HhhWiHdi3UvccD1WV3eTeBs6FgX08XP9Ih08CDdb4NftpNoF0WuFAUY4DrcxCsf+9DTMY+6Owheiq51M+T+3xvOfZrTFcA47OS5fE9XfN/8SFIVANYzjTBE0ZM7WepRJ7mK6+zuvmE3USWp9N5Yx6UpeuSEf6RSj5TzfCDkOXl2Bf/jOob/KjSclBd8jyAZb/4TTuRG/UMvYuuKoAPw1ACQMMnPqIdFxflVmcav2EdG8feD5xnkbqfcY8nN2erHMfWSta3SVxbL+WHvJO2lGisspF457CjCD4URIyXiA3CTnA/aExY0yBf+isrDHNZlbxdrCtjcceOKnAj0tkdCAB7bJZ8NRcYfAh+t8FkY616KIYbQkW5UtFvd0u/oiyJbQwGzSlBTcjyG6cXqRI8guRxIqI8CQUSCUBk0amMm/IMjVVY3LRsgTu7jzX4akIe6YTr5I5Ud0dof3k1KLhE9LVt38k6x/s8CoUXHmb0dTplXRPt8RnvPTsvz0LXgOXZc53llZBquH3mUfXju5QoL1dq/Hi/QhqpBPw14aBrUAwHJ9c5VBafQiFOROtK5G0i1iXtzAzOvq0bb1fCLRaafKl1U0Z0ntaeGLim3E11rJDCAo2k1DE8sA8+yXixpg40N45Dd31GYlzlrcusdk76pm6MQQCeKCOjHrJPboa2jaOddJ6eRlXkNFbXftO9ZkB5UrkQp4R0x/3jQgcwJeFb+yXAGpjvvpTlEBhCcHBxOkKpH/qwmKUGS8DaTjWQ+KeqVSkVY3cYmaSsClYsNerUt4QeVbEtr0BQ2Tl+JjwIxV09g31lfzf5Z6r25Du3AeTuG271TxLmQh5iRZZcFB7w89FxiwBoRMaKuGOnt3zMWIpXabZeB55Qjkv/4Xv3uh0KXFgfjESJyzz01czaEd6LdGoLy0OIsTUqtjKBWE1dB694SwhyYKjvuqdKUhaqCPvtYyeaBTFSEfFHMFoRAaLXDU21P9H5ECrGZx3vRDMuNVKTPT5YoclQC4+Qwm2i4w3KvJmHHZNw1wAr6RvX1dVAQ5i8R3/AanMyms0sCMbmqTtezetc0occSb86DGCRTmCwkYVYjp81KhVLN7b3ok+1i9jsL8xE2axnQtCUZKIPGkmXZeX7QvHjP7Sh7UgoNo3IIxj98clVV8lQFobr8TJXjd1vGY3+J9bQ6DdwaUA51YLlqqUjYmBH7V3RWy9/kd3/2ZNPAt5gUSYPA43eVaz3xAw+TvsnIAAxhp/cpCIo0Zh58S5ythBJt2+PqCx6ojXzxUPU3JdAt1dCI6iHpTi4Cdg9xRMNBcCLbZTIhSiGkhuTJAXOSHDRArt0uDKw5fckDvCA57lAr5iuoZCD9mkopDRNS5jlcmW9jvCGcvAx6s79pFZHxipJxeCM9c/3fTfCxVtOUaMHzcAOzcjp+fNkcMzYNG7CESqqux5KSpys35iP+EdXcFLAHwFT7eKtMV+dCeadNCURQ9PjMQSyDJb3QnfkbphR9Ygvv2WPFKOX5X8KKPQpj4VR3Tk3DF0Q3GJf/jIxMXVhzqa9eoIGeIlGRhO7exfmKrVaEgDVcKieYZX1FRKCWiMPR6gPZ27FwAU1dFopEedKV+hw8786D2LID76jtgc0GtWOBrQb/WvImxtt9iSwVGu3f8Nv3LWahGeogoF7gBxr7oCawHTHyuLfETeHCcZtm8HPLsAUTFO0d46wBfKymHWHbHb8mTn8toZngdPapiXDl4eRGUxzmEkd5Yj2q8sd90kqvm9ACEcptHqRiFsA+mK+DCQQCCHDuN/GJnyjxfdEg59TCYOwuDKyLh0+6tb1ACVAsRiGANvGHS/qjhqX0ybr+XWOBMkjdyH3936NdQp7olZpqG2BpONnbgOwCpKTWdfJ7JzDh8Z+2Vl9NSy65P8sTeT5DBiEc2cmD1thXwajyJZDNAYgYykwDa5JgInhgppOiG3+giBFWFCuFX+AMzxWbLbhuQASqESOb+arTqUDqbvi37UydjIcz7ABWKNxBpObqiaOZ3FhZ+paeMnS8L153uTrwACs6siTOIrIp2MBJDVRuLh3PKt2ziRsEjJ6WOXF5JfEBaeLf77eyoNMZ0ozRy3sB+tWoX2iZVyl1+pqXJyVsO0XoLjAJuaaURYJEpYexWv4y65Et1ZlCEiV4RGSxNiG+OBMrVj2zm+NEc65SqlX/0NPXaDWreXCzaS5pDG9VOPiV8KZ5o83St6zsvysN+78M4+OY4Oj1nCRHG3BjUQ4ZqM3Dws/hrszuj2JChHHxUMwpF1mbaEAnII9b2LUF5CxZo9mCtjg8wARljLmPrSnph6ZV3tme16SzNu3Fl2vfM9Oicroe1CdLhBemGk6KzUu6/f/3+vExWLfSulSXqJACxUatHA80HaJ5c4w3p5Xhm8RTMoJUXlVYovX0pzUx0jiVyt96NGWC8vEG8vtV126k34iz8md9vM/enNO+6Zi4FKu8CLavtw0g5IgFSIMZbiSIqrHCxpK8Y/m73ovdaVGwMqTBTumI1H1LL3xRFBQ0veiVFaE2OjTUSSz9icf8ZCHXlTCDnBvY782SjvuqPd2Q8zTYeSWOad3/N1ZhHXHhTREyy1n8IaO4jU8QtTRkf6rcO43Vnaxl+3GdcIAbPVTYYxr8Pzk4HTD6nAer3hUQbMsO2T7g7sF8/y39cAbiJhtf/M0YYFwW/TiqCkMrMWTn9knz8CjrrP5PHAz8KF0yFH3Jd8KpuiBi3S+a6Xtpd4DNyoUp50mlucIU2Ibe9Tvw9YZ73NcsSiSYRf8v/ZWlbgoEW+Sm3yQ3Q4wL4Ar9bw/HSDIzUNgnHmzfq1WaYbDhiZy9ei76Cqh0P3Dnj2WFCaQqfNG2L4CocfudWwOJ7m8NSRmyP3FBqWnq7eD2agVz4wR1uxzeaY7cLr/b9BPMpuMq71ZAg25xauc0dsYV0LysYImn2kwBl0uThMr1VSYcAyH6Vk5fxx2GEHajR5Zt9pub5mmUSL2r+DSe5itor3cqksznX/Rl9zY9e74b89F3K5JucITcvjvT7Y4mQptlRg12lXf+NphY7ibE3I2EIXrv3DSPb6DwXn8aCvdxrYI8AmLoLowwXz1daCmL5VHTlybX7rSk3R5GIFBSmG/zFR79eU9uWqAfYOLlNwe8t5d8LBBtyryARFhxJJTHUuW5aeEzO5/N8EaxlD2AYriAh0CIL8RgP9wsMIzV9Q/EhaWcwQvkyhXPKwHfsFvDZFCpcYa4YrAYv5Yqa+FlSBvYjflDh8JDBCHS/iz8rCtPOQGp3tvtl9OQQGamXhZyT5TJ0Kf8n9gkZWZeCEYsgTbpsTsAqs8GA==\\\" id=\\\"__VIEWSTATE\\\"/>\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" value id=\\\"__VIEWSTATEENCRYPTED\\\"/>\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table style=\\\"text-align: left;\\\" border=\\\"0\\\" width=\\\"1016\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\" colspan=\\\"3\\\" height=\\\"40\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\"/><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/account_login.aspx\\\" id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\"/></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a style=\\\"color:#CE0000;\\\" href=\\\"/garden_center/cart.aspx\\\" id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\"/>(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\"/>\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" bgcolor=\\\"#F5F4E9\\\" height=\\\"134\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" width=\\\"100%\\\" border=\\\"0\\\"/></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td style=\\\"width:154;\\\" width=\\\"154\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" valign=\\\"top\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link href=\\\"/css/jquery.jdMenu.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n            <link href=\\\"/css/jquery.jdMenu2.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n<script src=\\\"/scripts/jquery.dimensions.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.positionBy.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.bgiframe.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu2.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br/><br/>SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br/>\\r\\n\\t<br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br/><br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"100%\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td colspan=\\\"6\\\" style=\\\"height:10px;\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\" id=\\\"modal\\\">\\r\\n\\t\\r\\n\\t<iframe src=\\\"/modalblank.aspx\\\" name=\\\"PopUpIFrame\\\" height=\\\"140\\\" width=\\\"290\\\" scrolling=\\\"no\\\" id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\"/>\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=166\\\" class=\\\"breadcrumbActive\\\"><b data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;category&quot;}}\\\">Onions</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\"/></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;name&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Rossa Di Milano Onion</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"/>\\r\\n\\t\\t<br/><br/>\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"570\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img src=\\\"/images/product_shots/PPS15978B.jpg\\\" height=\\\"176\\\" width=\\\"176\\\" alt=\\\"Product PS15978\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\"/></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Rossa Di Milano Onion</span></span><br/>\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><i data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;species&quot;}}\\\">Alium cepa</i><br/>\\nHeirloom/Rare\\nHardy Biennial<br/>\\r\\nHardy Biennial<br/>\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span class=\\\"content\\\" data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\">(110-120 days)&nbsp; Midsized Italian variety.&nbsp; Long to intermediate day red onion that tolerates cool climates.&nbsp; Excellent keeper.&nbsp; We have grown out thousands of bulbs and re-selected this variety to be the top quality variety that it once was.&nbsp; 4-5&quot; bulbs are top-shaped, uniformly colored, and have tight skins.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a href=\\\"/tellafriend.aspx?Item_No=PS15978\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 3/4-1&quot;<br/>\\r\\nSoil Temp. for Germ.: 50-85&deg;F<br/>\\r\\nDays to Germ.: 3-8<br/>\\r\\nAvg. Spacing: 10-15 seeds/ft. in rows 12-18&quot; apart<br/>\\r\\nAvg. Seeding Rate: 4-6 lbs./acre<br/>\\nDays to Maturity: <ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;days&quot;}, &quot;generated&quot;: true}\\\" class id=\\\"anonymous_element_15\\\">110-120</ins><br/>\\r\\nFull Sun<br/>\\r\\nWater Often<br/>\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br/>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"620\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\" valign=\\\"top\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\"/></div>Choose a Size:<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span style=\\\"display:inline-block;\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#FFFBC4\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Onion, Rossa Di Milano- Pack of 350</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#:<span style=\\\"font-weight: bold;\\\"> <span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01585</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" value=\\\"318\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" value=\\\"318\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" value=\\\"Onion, Rossa Di Milano- Pack of 350\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\"/>\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#E2E2B9\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Rossa Di Milano Onion- Pack of 3500</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06654</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" value=\\\"7566\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" value=\\\"7566\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" value=\\\"Rossa Di Milano Onion- Pack of 3500\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\"/>\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#B9B999\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" align=\\\"right\\\" valign=\\\"top\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br/><br/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br/><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br/><br/></td>\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\">\\r\\n                            <input maxlength=\\\"15\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\"/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"bottom\\\">\\r\\n                            <input src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onclick=\\\"return CheckQty(1,0);\\\" alt=\\\"Add to Your Cart\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\"/>\\r\\n                            <br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"/></div><br/>\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a href=\\\"/garden_center/browse_category.aspx?id=25\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"middle\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onclick=\\\"return CheckQty(2,0);\\\" alt=\\\"Proceed To Checkout\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\"/>\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" style=\\\"width:1px;height:100%\\\" width=\\\"1px\\\" height=\\\"100%\\\"/></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" align=\\\"center\\\" height=\\\"100\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input style=\\\"width: 140px; margin-bottom: 11px;\\\" name=\\\"ctl00$SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\"/>\\r\\n\\t\\t<select style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\" name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input src style=\\\"margin-top: 11px; \\\" name=\\\"ctl00$SearchButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" id=\\\"ctl00_SearchButton\\\"/>\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br/><br/></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\"/></a>&nbsp;&nbsp;<a shape=\\\"rect\\\" href=\\\"http://twitter.com/#!/SeedsofChange\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\"/></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\"/></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=123\\\" class=\\\"linkbuttonfooter\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=29\\\" class=\\\"linkbuttonfooter\\\">Flower Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=77\\\" class=\\\"linkbuttonfooter\\\">Herb Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=336\\\" class=\\\"linkbuttonfooter\\\">Cover Crops</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\" class=\\\"linkbuttonfooter\\\">Trees</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\" class=\\\"linkbuttonfooter\\\">Seedlings</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=361\\\" class=\\\"linkbuttonfooter\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a href=\\\"/digging/garden_info.aspx\\\" class=\\\"linkbuttonfooter\\\">Gardening Information</a></div>\\r\\n\\t    <div><a href=\\\"/digging/glossary.aspx\\\" class=\\\"linkbuttonfooter\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\" class=\\\"linkbuttonfooter\\\">Succession Planting</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\" class=\\\"linkbuttonfooter\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\" class=\\\"linkbuttonfooter\\\">Seed Saving</a></div>\\r\\n\\t    <div><a href=\\\"/digging/zone_chart.aspx\\\" class=\\\"linkbuttonfooter\\\">Zone Chart</a></div>\\r\\n\\t    <div><a href=\\\"/planting_guide.pdf\\\" class=\\\"linkbuttonfooter\\\">Planting Guide</a></div>\\r\\n\\t    <div><a href=\\\"/soc-links.aspx\\\" class=\\\"linkbuttonfooter\\\">Resources</a></div>\\r\\n\\t    <div><a href=\\\"/Biodiversity.aspx\\\" class=\\\"linkbuttonfooter\\\">Biodiversity</a></div>\\r\\n\\t    <div><a href=\\\"/Sustainability.aspx\\\" class=\\\"linkbuttonfooter\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a href=\\\"/FAQ_seed.aspx\\\" class=\\\"linkbuttonfooter\\\">FAQs</a></div>\\r\\n\\t    <div><a href=\\\"/CustomerService.aspx\\\" class=\\\"linkbuttonfooter\\\">Customer Service</a></div>\\r\\n\\t    <div><a href=\\\"/contact_us.aspx\\\" class=\\\"linkbuttonfooter\\\">Contact Us</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"linkbuttonfooter\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a href=\\\"/about/our_guarantee.aspx\\\" class=\\\"linkbuttonfooter\\\">Guarantee</a></div>\\r\\n\\t    <div><a href=\\\"/about/safe_seed_pledge.aspx\\\" class=\\\"linkbuttonfooter\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a href=\\\"/SOC_OGCERT.pdf\\\" class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table style=\\\"text-align: left; margin-top:24px;\\\" border=\\\"0\\\" width=\\\"1000\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br/> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"url\": \"http://www.seedsofchange.com/garden_center/product_details.aspx?item_no=PS15978\",\n            \"original_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link rel=\\\"STYLESHEET\\\" type=\\\"text/css\\\" href=\\\"/css/soc.css\\\" />\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/master_scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"JavaScript\\\" type=\\\"text/javascript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script language=\\\"JavaScript1.2\\\" src=\\\"/scripts/HM_Loader.js\\\" type='text/javascript'></script>\\r\\n<script \\r\\n            src=\\\"/jquery/jquery-1.3.2.min.js\\\" \\r\\n            type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body id=\\\"ctl00_MasterBody\\\" marginheight=\\\"0\\\" marginwidth=\\\"0\\\" leftmargin=\\\"0\\\" topmargin=\\\"0\\\" style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\">\\r\\n    <form name=\\\"aspnetForm\\\" method=\\\"post\\\" action=\\\"product_details.aspx?item_no=PS15978\\\" id=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"/73Vsoki2CsUrjI+fTiSh7iZLwuxq+72OPy+l2+Zr4II8UEcce9zN4WH9nc5klSOs0FZcfyB/XQpbZI8Gg6ak4bQF6wuS9J0nmSJ+8MlACqFwFfToPq4sqcrNAp0ZUQl3wRDT5HzpfnzW9jccdFwrEHffyeXRU0IghsXuo2DMKf+/Xnf+q0M25qOqF9tJq9bVO1T84aYrVL4ofOJPRPeG9pduMfeVASYe5LoAsVCWAUMTFt/FQKfH9eeYSVciDxt6gYcVfqS4DRNJu1l0gy4Tes9Rtw/Jeb+PQ38Iik/kFVp6G+ap2tHKr2VLZeziPc2fwP1DYSsKRDvzvApozbjG5KUYZYV3g3Gn2N/qeVijv27dDk9skmdcxsiRcC0SLDdg/tjh5VybRsVTCFAwklV8a7Ug84DhM9eI5FKPm29D+2kTHAfQ95QnLIMkHxEjkCdVuqngQDY2iq+R+q771XilKzXfek8VNZJqq3RbDHdvG+pQFUPUPJGvyAcOSmaEiiMMjmfv4/pUkxYiDckd4T1ET4F/dFOQUGTlos90yvtrMuZs0Rtx1IKXxZCnm2IwyY5y5VD85/atmKIDfhSfGM41UliiR+LZYfDXwqqurCxznY0x/Az+28mEFYmVBWcaJ0lNBOdly0CqTuTqW7MAye3VqLUqajieH5KcrRcCHz3mEUOUY8d5bjz4Kpjcb0mxO+TpJxOHrGFvi8rx1nyNFx25EQ+3z7o9Kv059qik/NPIaM/Z9+A+I1HYSH8+XhMWwAyudpVutjeh13LFjZPTQBTmDQWkI1PrG3NhTR+oReymfD8kG8k2yyCE6kiViVageKSV2TnD6ApJy+xHJ+BaRjYxOzepKES/QnODJHc8eXpTxoUtLqxUIk6zxCLvCwjk7pdEz2s/pMBN0iQiXL+NkwVJbygcNm4Hr/4qpa5+EvXz7gKp5MomhJOLmzoTDsbCOICcjLO6ulwrkRRpjSGXNij/ct8QKsCVF2v0P61pIPQQxXGnBipqm3nhDv0Qz31i8Mk98KApt2zS98bRFX8OaGnZtBspIBc6nsr6WMloSblSClmvMGKXHsUFMAHRIJI6zWkk4bFUyJqkyFXZHLbFZE+yqmnmBz8T8mS12P6oVeVxxNpBv4j0zVPHNkM0OWygvYmNWxNsRjH9+309MoZZ/XsGrI86iL2q2a5CG8aEzS6SuEkNRBOsbonGI9msAiBO20s0VXYVuFTUp5VLTDNkGc+nIG++iaP592JQqP1F/wlVTB+U34e9buyJbntWQHko+/ZN/hvYlruz2zB8msxX0IR1OO4gZDdfbXA4xK+ossQSYrsKjMIstIsFudnHqzCfNMNA26qzt5VBSbLVbpinew3NuVVTsMvSrcCDbmA5yJjwbTPidW/wg7wFx4J1C4VhHdF84/Xvu8uq8+8vRP6M1+6x1ZgF6X8xZHqPCIyYwAUfK1/crDsUaQeBikeP3LTCUMcGYhbdtKmbmVq7iM9R04guavDYGK+Vp3J3GjZne3k2KUNQgs4qqO51QiK577jSSW5V0QXqMccSJiSmiKsrcpM0z4J0ot43pEn8PhVJNlBhCuLEpvUjYHEc4l4MdobzogN2MYnmoxBZjDX+Nq4mCFJInqGC/xvXxLroji9kjBg1Z4NaypSmuZxBJ8l2AjEzzYwRRJfwmzNz4uplbe8uc+MkFNSiyvoF3QoxhySCt9iAyyXVLg/v6d88cYd9gbzFPRhBC36e+IQgtzeGZ34yFqr7F67Fa1WrNIZhUb0HD2aiaRXqfvuAOliSt/AhWJxNonhLQwfnPxH1ywxJNoWr9p9hEKiICSVr7HeXcIJju1FkL9WCw5+c6mVr1+swTvzTzv9XZR2Q5K4OJMbtBoktZByLgArs91pNCksQyx6XyL9B3HQrBcdCShoZOfGTAtYlPglEFM9E4onM2CLyTS88yz+4Rtep2+8oO9PPXfqHtLWPBpVCuORudNeocAdwsVBg2eYJPUUxEEsjOjZjYo57a9NAEPqBagaeMdzPzQH7vAtyxcAd2q6XZpnbReOt0HHPixLOEiUqWjZBMn9R0s9vgZ74AtKa0GE+ABo42Uko4ya3xl4dGx5zHZ0L9WN7/A3WifHRlUgiD04AqUYdTrvIjQau3gMCSvF5F4+1Q9lje+PIQPvoz3T0c3xm/CXYwlywlRPieA8L6vwOs6bhiWFT6KnQnZVRrOUeezaZqYCs4c7kRP2APQUS4RSjQhV9W04SCPtmLfKU3c8GJYRhjobquyLRBUy0rwCxbeeLPSVUjAlS11yKkTWGi1DiJRUkVJ+EXAYtEwJki9uh4kbbiR/ffZRuHGcezMPmoAFitb0BcIQwNS742RvRrriWA1K7Qrc1cQxSFEWS+RDJjxUMjSk3DSeTQEl4MlMMMjgij7zHQBtUf23ebdSxc6ci0Ia+0auGvHyEX8gSPcVyBzlve5FacAfeP+zkODwzX4W15Yw6wQ5Yh06E+Iew/d45A5f4NLKwefBrqPRd9vJXPasOLTxlF12cGDcGn/gsbrpqKEpkaicyuA+jAK+xnlHTG5ssXcXyrGjsCYbxFgJcdFTDfhBdAAIMJ+u0vTQOcMjB95DY8DTznE2K1f4Xc5qItHsJdgEdF1JgD1Y9X4D5UdNAKTW2KmjxecV65PK0ONBojvtjnpkHY6pPDhXJh9CO3aKU3A+ecVJveNoCkmClA5K4itvC4piVHskb6utyjYz6wqexonF6pNshZ5eMW9TD5Z4w7ZeeET0pDi4bpAECKqpAXtQpQOCJUwb40C419XYbHoAcSq7+EX+0VrrBGhyntxaewSv3PMZV5en5mkOiFIO1/A9/eZGjghpK7xesW5dWq2gmNqYf768SNGk/I//78IQWaaJujxeAZIXmlVVDucubq+szfiE1Zk+U+1Ix4kiCIxJ5xjj3SjmG10Ji9koXNIPlS8yAUgVqo0kM20qSrZVJLGou/kXTlrvZxpipeqGyFV+FnB+H8scaZgCWREizHL4OuZILdyAI5D9qy7se1mABFkgWwmJA84NXs18DROpk1dFUdLdgP4eZqj8fEYhux6IWK8+KGpluXnY8B4QEJOqXUfP6HF0OaBsfFFguPYjJZik22H7SNtKkTepQM1VCXoXeBvD0AvQLyztXaIpOFu7vDBETec+laRapr8am2smzQmEeN0trnRl4b1OWYYxER3v74VuTcK5enFXJME5kXBZzXxhbKpdq+prhvqBchA40NzIF2aV0WF45Q499F+q6ZqPC6s2irAWJ7b5PqTfCT5sEs1JXOQW8PjbaHrgvxKVatbZZrohLxPyTl2nW0d7ITJVpFenhevQb0b5ChcB7e0zKZlFvdN6iHBeo/8C/MXN8fQeUGjdWl2SGP25UEN4NaK5eWj2Ayn9a4FC/lDEsJPw+w0V6VP6Tlalyyj0/reatzaHjILK5jF0bLH2XnPQQ8sc5J7DcMrzMYrdn0sIa8ELbS/cbiufpVoSjyUm+xGNA5U5Nqx8XJ4gjToMbKEBg6yoZeGvEaEsrTicuU6P4ZBUsDcXbL0lnCb3bQOKRaIsU9TnMNHRxv+di8buuvsU3HU3etR3bKZqen9jqWpAHqx9bm0AVE0SX+kjbrEEpTvWK7O/v+xoTkYWyNHcuf7R81p6gKhe/gUpb4LXEdm172IXEe8vdlw/oqH+jUg5BLqSzLscBxBcUb8c7T3bp9hWxpytXv7+yf7K5jYgJ5U7EV7Yv0kjt9Bmu+YgYYt3A0gBTsOljkA0+DAxsURV/ofJSBQMdse+BUS0p/ylsLHTbvTVGWe8anyWzUKhngauH6OMFlieyYBLf4qV+PAj6osJ+Jo55AvX7GrHTUWulaVQk8mqg9gz6zzzQ1prJcN9J9RMVXqDkeMuiXX+xdR2YMKX8DQS9ZzxJC6c/VmIs4H4DbVxLQ8TWbWIplqjQplN/okPwesZMJPfZ3XDf8ZW91Fpv47tegPVG08XRm0HCZ1uiFFhWZlUpafz3BDoZFKagIL9jyhQW8by7TLUJ5dF3xlXe6Yco7ew7OQ5S/OAlU+DgF0ig8jeB4OHTldrFoCwwTobLZ6aVcUZaqrMV5jvibUbKL0/kxucgK87Zr2ckShIbpedOT6sgB/oObkIK8Toew1FS3AyNoOgTSJzHk4Go8Hon7Z5rh83gb1J/bbLZ2Iv0OSlu1DmOb5TodJwCg2kALlOhXGRsSka1lCQksA6omM0hW5wTSpZy4GXA7Dqbq80D0klXLDOb82KNmwslruYUwvZPOySnl4yAw38E9MAq78ffUbaCnX3rJOI3kPCYeFRMy2Vtv8V2dq8k299X4LPCKhube2ouuCbG6ssEHZEXJIr/cvA+SELaN6LDZZIP/B7F5pf2wSSPuTQ+CrCaV0mN0VKN8BWK39i6bG+oLm8m0adhyjXwg4VM5C6W2RFLtbJ/xzJNM7z7D8XIJ0n41mpQM4uZWDzTb6UpKCR7wGLheHnc7nGD00m7j3skbKfaWOEzqieNwED0YnXJ3RaAdOxiU3NJA5TgmAWMSbJjgen1wVI5mrw5davgURcwHvCNn4n2E/c1x5okyU9hDov0sUpd1xafej1Aax9d44vjh7yFtPpOBt4erKsuIEJ82syIgdbdt5VsVb3xPB9ZyGTOhYOzDX1lh8NR2QJgC4uEwPAgqMAMAb+BOT9VygFsrVH9yTShfDG4gU5yzISkv5YhPpwJl7tElMR1cIrA8/nfhwf0TjTHi0xZ4M81oZlZS15R9kLy4MfViZgVciJhy4nwMwCH4gruJEhW/TYyTECEbUHQqOSayW0VSYXgQLIUlROqEmCthdCtv8gVEcE6ApoSOuFBUYG3tvHbOWFaeT2VlN/LhKIzKr6ZTazBfBtJSjWamH0E6n59aeRgMqZDOsOoYpuUsDKoMRDVITkJWuXQbNPHhdcOGx+EkoyGPa6k96sVaXHZvhu9xjR5joCojahibpoxQrrGnK6oS6L2QoTzDTTyEDmzxIKoBj06pal6er1MbcXQkByZ+vt8PBWRRJbstf8btY0tKomO4wMhGefXIGg6sAU2uvulpj0h6ZIKoRY3r7K77SEh1Yj3B+CaMjIeKEqBjVA7nNGJLR9QHrdAKyTVx6DGFV6y1cpn6B2V8/rShM1c+HhhWiHdi3UvccD1WV3eTeBs6FgX08XP9Ih08CDdb4NftpNoF0WuFAUY4DrcxCsf+9DTMY+6Owheiq51M+T+3xvOfZrTFcA47OS5fE9XfN/8SFIVANYzjTBE0ZM7WepRJ7mK6+zuvmE3USWp9N5Yx6UpeuSEf6RSj5TzfCDkOXl2Bf/jOob/KjSclBd8jyAZb/4TTuRG/UMvYuuKoAPw1ACQMMnPqIdFxflVmcav2EdG8feD5xnkbqfcY8nN2erHMfWSta3SVxbL+WHvJO2lGisspF457CjCD4URIyXiA3CTnA/aExY0yBf+isrDHNZlbxdrCtjcceOKnAj0tkdCAB7bJZ8NRcYfAh+t8FkY616KIYbQkW5UtFvd0u/oiyJbQwGzSlBTcjyG6cXqRI8guRxIqI8CQUSCUBk0amMm/IMjVVY3LRsgTu7jzX4akIe6YTr5I5Ud0dof3k1KLhE9LVt38k6x/s8CoUXHmb0dTplXRPt8RnvPTsvz0LXgOXZc53llZBquH3mUfXju5QoL1dq/Hi/QhqpBPw14aBrUAwHJ9c5VBafQiFOROtK5G0i1iXtzAzOvq0bb1fCLRaafKl1U0Z0ntaeGLim3E11rJDCAo2k1DE8sA8+yXixpg40N45Dd31GYlzlrcusdk76pm6MQQCeKCOjHrJPboa2jaOddJ6eRlXkNFbXftO9ZkB5UrkQp4R0x/3jQgcwJeFb+yXAGpjvvpTlEBhCcHBxOkKpH/qwmKUGS8DaTjWQ+KeqVSkVY3cYmaSsClYsNerUt4QeVbEtr0BQ2Tl+JjwIxV09g31lfzf5Z6r25Du3AeTuG271TxLmQh5iRZZcFB7w89FxiwBoRMaKuGOnt3zMWIpXabZeB55Qjkv/4Xv3uh0KXFgfjESJyzz01czaEd6LdGoLy0OIsTUqtjKBWE1dB694SwhyYKjvuqdKUhaqCPvtYyeaBTFSEfFHMFoRAaLXDU21P9H5ECrGZx3vRDMuNVKTPT5YoclQC4+Qwm2i4w3KvJmHHZNw1wAr6RvX1dVAQ5i8R3/AanMyms0sCMbmqTtezetc0occSb86DGCRTmCwkYVYjp81KhVLN7b3ok+1i9jsL8xE2axnQtCUZKIPGkmXZeX7QvHjP7Sh7UgoNo3IIxj98clVV8lQFobr8TJXjd1vGY3+J9bQ6DdwaUA51YLlqqUjYmBH7V3RWy9/kd3/2ZNPAt5gUSYPA43eVaz3xAw+TvsnIAAxhp/cpCIo0Zh58S5ythBJt2+PqCx6ojXzxUPU3JdAt1dCI6iHpTi4Cdg9xRMNBcCLbZTIhSiGkhuTJAXOSHDRArt0uDKw5fckDvCA57lAr5iuoZCD9mkopDRNS5jlcmW9jvCGcvAx6s79pFZHxipJxeCM9c/3fTfCxVtOUaMHzcAOzcjp+fNkcMzYNG7CESqqux5KSpys35iP+EdXcFLAHwFT7eKtMV+dCeadNCURQ9PjMQSyDJb3QnfkbphR9Ygvv2WPFKOX5X8KKPQpj4VR3Tk3DF0Q3GJf/jIxMXVhzqa9eoIGeIlGRhO7exfmKrVaEgDVcKieYZX1FRKCWiMPR6gPZ27FwAU1dFopEedKV+hw8786D2LID76jtgc0GtWOBrQb/WvImxtt9iSwVGu3f8Nv3LWahGeogoF7gBxr7oCawHTHyuLfETeHCcZtm8HPLsAUTFO0d46wBfKymHWHbHb8mTn8toZngdPapiXDl4eRGUxzmEkd5Yj2q8sd90kqvm9ACEcptHqRiFsA+mK+DCQQCCHDuN/GJnyjxfdEg59TCYOwuDKyLh0+6tb1ACVAsRiGANvGHS/qjhqX0ybr+XWOBMkjdyH3936NdQp7olZpqG2BpONnbgOwCpKTWdfJ7JzDh8Z+2Vl9NSy65P8sTeT5DBiEc2cmD1thXwajyJZDNAYgYykwDa5JgInhgppOiG3+giBFWFCuFX+AMzxWbLbhuQASqESOb+arTqUDqbvi37UydjIcz7ABWKNxBpObqiaOZ3FhZ+paeMnS8L153uTrwACs6siTOIrIp2MBJDVRuLh3PKt2ziRsEjJ6WOXF5JfEBaeLf77eyoNMZ0ozRy3sB+tWoX2iZVyl1+pqXJyVsO0XoLjAJuaaURYJEpYexWv4y65Et1ZlCEiV4RGSxNiG+OBMrVj2zm+NEc65SqlX/0NPXaDWreXCzaS5pDG9VOPiV8KZ5o83St6zsvysN+78M4+OY4Oj1nCRHG3BjUQ4ZqM3Dws/hrszuj2JChHHxUMwpF1mbaEAnII9b2LUF5CxZo9mCtjg8wARljLmPrSnph6ZV3tme16SzNu3Fl2vfM9Oicroe1CdLhBemGk6KzUu6/f/3+vExWLfSulSXqJACxUatHA80HaJ5c4w3p5Xhm8RTMoJUXlVYovX0pzUx0jiVyt96NGWC8vEG8vtV126k34iz8md9vM/enNO+6Zi4FKu8CLavtw0g5IgFSIMZbiSIqrHCxpK8Y/m73ovdaVGwMqTBTumI1H1LL3xRFBQ0veiVFaE2OjTUSSz9icf8ZCHXlTCDnBvY782SjvuqPd2Q8zTYeSWOad3/N1ZhHXHhTREyy1n8IaO4jU8QtTRkf6rcO43Vnaxl+3GdcIAbPVTYYxr8Pzk4HTD6nAer3hUQbMsO2T7g7sF8/y39cAbiJhtf/M0YYFwW/TiqCkMrMWTn9knz8CjrrP5PHAz8KF0yFH3Jd8KpuiBi3S+a6Xtpd4DNyoUp50mlucIU2Ibe9Tvw9YZ73NcsSiSYRf8v/ZWlbgoEW+Sm3yQ3Q4wL4Ar9bw/HSDIzUNgnHmzfq1WaYbDhiZy9ei76Cqh0P3Dnj2WFCaQqfNG2L4CocfudWwOJ7m8NSRmyP3FBqWnq7eD2agVz4wR1uxzeaY7cLr/b9BPMpuMq71ZAg25xauc0dsYV0LysYImn2kwBl0uThMr1VSYcAyH6Vk5fxx2GEHajR5Zt9pub5mmUSL2r+DSe5itor3cqksznX/Rl9zY9e74b89F3K5JucITcvjvT7Y4mQptlRg12lXf+NphY7ibE3I2EIXrv3DSPb6DwXn8aCvdxrYI8AmLoLowwXz1daCmL5VHTlybX7rSk3R5GIFBSmG/zFR79eU9uWqAfYOLlNwe8t5d8LBBtyryARFhxJJTHUuW5aeEzO5/N8EaxlD2AYriAh0CIL8RgP9wsMIzV9Q/EhaWcwQvkyhXPKwHfsFvDZFCpcYa4YrAYv5Yqa+FlSBvYjflDh8JDBCHS/iz8rCtPOQGp3tvtl9OQQGamXhZyT5TJ0Kf8n9gkZWZeCEYsgTbpsTsAqs8GA==\\\" />\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" id=\\\"__VIEWSTATEENCRYPTED\\\" value=\\\"\\\" />\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1016\\\" style=\\\"text-align: left;\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" colspan=\\\"3\\\" height=\\\"40\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\" /><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/account_login.aspx\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\" /></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/cart.aspx\\\" style=\\\"color:#CE0000;\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\" />(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\" />\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" height=\\\"134\\\" bgcolor=\\\"#F5F4E9\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" width=\\\"100%\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" border=\\\"0\\\" /></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td width=\\\"154\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" style=\\\"width:154;\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu.css\\\">\\r\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu2.css\\\">\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.dimensions.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.positionBy.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.bgiframe.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu2.js\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br /><br />SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br />\\r\\n\\t<br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br /><br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table width=\\\"100%\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\" ><td style=\\\"height:10px;\\\" colspan=\\\"6\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div id=\\\"modal\\\" style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\">\\r\\n\\t\\r\\n\\t<iframe id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" name=\\\"PopUpIFrame\\\" src=\\\"/modalblank.aspx\\\" width=\\\"290\\\" height=\\\"140\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\" />\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=166\\\" class=\\\"breadcrumbActive\\\"><b>Onions</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\" /></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Rossa Di Milano Onion</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"\\t\\t/>\\r\\n\\t\\t<br /><br />\\r\\n\\t\\t<table width=\\\"570\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\" alt=\\\"Item Photo\\\" border=\\\"0\\\" src=\\\"/images/product_shots/PPS15978B.jpg\\\" alt=\\\"Product PS15978\\\" height=\\\"176\\\" width=\\\"176\\\" border=\\\"0\\\" /></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\" src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Rossa Di Milano Onion</span></span><br />\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><i>Alium cepa</i><br />\\r\\nHeirloom/Rare<br />\\r\\nHardy Biennial<br />\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\" class=\\\"content\\\">(110-120 days)&nbsp; Midsized Italian variety.&nbsp; Long to intermediate day red onion that tolerates cool climates.&nbsp; Excellent keeper.&nbsp; We have grown out thousands of bulbs and re-selected this variety to be the top quality variety that it once was.&nbsp; 4-5&quot; bulbs are top-shaped, uniformly colored, and have tight skins.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\" href=\\\"/tellafriend.aspx?Item_No=PS15978\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\" src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 3/4-1&quot;<br />\\r\\nSoil Temp. for Germ.: 50-85&deg;F<br />\\r\\nDays to Germ.: 3-8<br />\\r\\nAvg. Spacing: 10-15 seeds/ft. in rows 12-18&quot; apart<br />\\r\\nAvg. Seeding Rate: 4-6 lbs./acre<br />\\r\\nDays to Maturity: 110-120<br />\\r\\nFull Sun<br />\\r\\nWater Often<br />\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br />\\r\\n\\t\\t\\r\\n\\t\\t<table width=\\\"620\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" \\r\\n                            height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td valign=\\\"top\\\" bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\" /></div>Choose a Size:<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\" style=\\\"display:inline-block;\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#FFFBC4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Onion, Rossa Di Milano- Pack of 350</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#:<span style=\\\"font-weight: bold;\\\"> <span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01585</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\" value=\\\"318\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\" value=\\\"318\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\" value=\\\"Onion, Rossa Di Milano- Pack of 350\\\" />\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#E2E2B9\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Rossa Di Milano Onion- Pack of 3500</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06654</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\" value=\\\"7566\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\" value=\\\"7566\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\" value=\\\"Rossa Di Milano Onion- Pack of 3500\\\" />\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\" >\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#B9B999\\\"><br />\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" valign=\\\"top\\\" align=\\\"right\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br /><br /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br /><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br /><br /></td>\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\">\\r\\n                            <input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\" type=\\\"text\\\" maxlength=\\\"15\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#D7D79E\\\"><br />\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"bottom\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n                            <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" alt=\\\"Add to Your Cart\\\" onclick=\\\"return CheckQty(1,0);\\\" border=\\\"0\\\" />\\r\\n                            <br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\" /></div><br />\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\" href=\\\"/garden_center/browse_category.aspx?id=25\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"middle\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" alt=\\\"Proceed To Checkout\\\" src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" onclick=\\\"return CheckQty(2,0);\\\" border=\\\"0\\\" />\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" width=\\\"1px\\\" height=\\\"100%\\\" style=\\\"width:1px;height:100%\\\" /></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" height=\\\"100\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#F5F4E9\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input name=\\\"ctl00$SearchTB\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" style=\\\"width: 140px; margin-bottom: 11px;\\\" />\\r\\n\\t\\t<select name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\" style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input type=\\\"image\\\" name=\\\"ctl00$SearchButton\\\" id=\\\"ctl00_SearchButton\\\" src=\\\"/images/layout/buttons/btn_search_off.gif\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" src=\\\"\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" style=\\\"margin-top: 11px; \\\" />\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br /><br /></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\" /></a>&nbsp;&nbsp;<a \\r\\n                href=\\\"http://twitter.com/#!/SeedsofChange\\\" shape=\\\"rect\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\" /></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\" /></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flower Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herb Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\">Trees</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\">Seedlings</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/planting_guide.pdf\\\">Planting Guide</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/soc-links.aspx\\\">Resources</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Biodiversity.aspx\\\">Biodiversity</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Sustainability.aspx\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/FAQ_seed.aspx\\\">FAQs</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/CustomerService.aspx\\\">Customer Service</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/contact_us.aspx\\\">Contact Us</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/catalog_request.aspx\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/our_guarantee.aspx\\\">Guarantee</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\" href=\\\"/SOC_OGCERT.pdf\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1000\\\" style=\\\"text-align: left; margin-top:24px;\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br /> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"scrapes\": \"default\",\n            \"page_type\": \"item\",\n            \"page_id\": \"4fad6a7c688f922437000014\",\n            \"version\": \"0.13.0\"\n        },\n        {\n            \"extractors\": {},\n            \"annotated_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link href=\\\"/css/soc.css\\\" type=\\\"text/css\\\" rel=\\\"STYLESHEET\\\"/>\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script src=\\\"/scripts/master_scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script src=\\\"/scripts/scripts.js\\\" type=\\\"text/javascript\\\" language=\\\"Javascript1.2\\\"></script>\\r\\n\\r\\n    <script type=\\\"text/javascript\\\" language=\\\"JavaScript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script src=\\\"/scripts/HM_Loader.js\\\" type=\\\"text/javascript\\\" language=\\\"JavaScript1.2\\\"></script>\\r\\n<script src=\\\"/jquery/jquery-1.3.2.min.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\" topmargin=\\\"0\\\" marginwidth=\\\"0\\\" marginheight=\\\"0\\\" id=\\\"ctl00_MasterBody\\\" leftmargin=\\\"0\\\">\\r\\n    <form action=\\\"product_details.aspx?item_no=PS14165\\\" method=\\\"post\\\" id=\\\"aspnetForm\\\" name=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" value=\\\"mN6xmTfxY8t2jPXW3Aie4yzPt81GrJ7HBWxqq+yDyKBUwQuFR0DaMCdvErAWQa2j/1gS5qygfvQejUovckDLSHYwphTpVxPJ5jYj6gox+8oam03tTACB+giZuOPRDySFvq3pUjBrZZxyeNcqv5+BduH5CXtG9U9v4Y1fI+2aSm4olYeetJLQuRIkCq+ynaqWb6dHa23oNsyVVwiSXYC7z0Zxou2092/i6gOLWq69owvWtmXpePianIRBvB1sFrwDRgCJBEp4FNPWLagmAqnDDmF81O5cDEiyyUzXzKAE4d/glUu8jduveP3t/3H/cJCT1a8BMwn/jV9PKBFdttKt1QTLEm55dkBa/YRjgH5AUvRjM8zSLMi2IHIA95vydp3xkbY/txv5L8Eu+Y0UHteG8vbiYddhVr6Kw9nSjqbjW2v2UyAbBpCRtwlEtcyDiaeCKkCRSELCyQfPa3ebxxeESf0+07jNqDY2QguF8gJJX2P8xHRPIr0ZAgXU2d/H6cTMjYqEYTr4xSDnhIkftEuXk361h2k8heaLZNuo6Pi4lKuZfAAeeDC5efm7ckgz2IHzN88xggBNdYCnPiQkhDXZsejvE5BRCa1dQ5k+NKpLvMo9/Te/jrIjNcOqGnnYQgLudJZ+KFd2aXmgKloptaIgc+pMfLTVYKpunC5SaJaXiWubyNjwZCAD5XFPivY/fXtbcasxzs3Tt1P3Z24+q5r5TL97YJyOBCc8l/sVSIEnxC2AJhmCV9ecUZGrnMZNDvl+wbOe1e+S/GXgto2mnchnwIMfbgmi6O4xL/sSiketqUN0jYj8+6/y4dHcQPC7FKfzrHLQWOdtcLnQTTHy2LB6Idmvy76KFRzS1n8zE45tVSKmK3Srref57NWcuoCBf3i/b5VGvPjwRnR3Ic0uZkcKM1zqZZMRNEWUxMP3K0o7U//pDH5LAD5cWNJBqniqWXvXOJRUPQFdGjuWzO4jErCFLnD3U7uzlkjSXbdx4vkK5TblFeS+y5EvtwRb7cig4CFOBf0MFXddncHLwYg2IIjli5kfbpKXtOz6OsMQE2XAgqeTsNqbrVseE9nyqtFRMVAPy97j+YS7Ke6t1Hz22m5X0kJq2EFYqKUd2URIdLWG5K2I8AVbR586yUxE1KUaBZwtd6OruVcLqjbfc8OehU901AZaZSz0/hjSn1frqQWfBeUcWghmmqYiCO3dIyjm9OQuf2cQ2KveG3hvH3fGakOkVbzAQHm5XQZIGXx7OKf2/8/5RDKfxJXrmCXz/VwpIzUKk96rqMhAtxcbdiy5yJhAffCNziXOJLz9ov+F0h5T2UQs0Sw3H2GI3gj+zSl0k51VLuSkSJcThim3p3qqFu85tBnv/5C5cZwa5H++kdGwTtVw+e+4DO38M+dXHo8UzECkjyvt8cu39OOxx8B9w+3MBVX7kCyLGAm/fUbRQoM//HBaHn8JIpCpijMmBmVy3tfzEljzrAKb+kwQ4biDr287cLSp+UxZZCEDwmsiLRfZi6mEhNx0byzmGtdiVTgtfoUcQ7uszRSSiJINx5UO2a6E6ixJryF5dQCEkWe20lZVDlkxlHDYVftb0ueYEVnuqvYwPEcAgdbVbWfLusIhLqtbGr+QWDE20APZgc9a9ShyAVeiVxG8m6U/OOdA+hgcvLmW5GW8NC9uSI6yVaq5HjQZ1rHe/Gp5JnipmGZhBs09hBVUui8jTE+d+u9rAiX86X4KUx7BA7g+MRGP2lYk43N+mNHLkbU/AihvGTWYTzR9p+23HFErIGsi4hI8oVGcklztTOtnLSG5eNt4ptSLNxDcM0oLppbM2XABRZwV1rnLCOw9h6Hgr/Rw8AwRYTW7UGJcO/vL1+RMOA0wtrqTPfxwKockVgIbFLdRCrDNnl0ooLCfgq0il4ayq2VotAYJUVXzytkbSa5sSyJvRXEtXeELd9XhvhijpFgRHNjpOP9NWmRVvOgo0C/FU6ejw8NcomyHaX5Witkb6x4n0OV1yNXMsu6ds9Vj3e5nxgncyPIkffo04VtIzxKdNVpuKeKLW/fQIcG01n89zXqj5/hbO8kiVtozxRrjx5FU0glG9P7eZkclOWRDIg7UPER5xfkOeLPi4VUfCIMSkzlchkbwuTJZRJcGaqsp9vaKa29b/pAWMglK/WjMZZzFdLKU3E1sBXXemBzyF3lrKs36RpbCmBaSo8n86s7qutnqJzZhENNPwBpLljKEQM3DGB9hEPWzeNrqHFKTY6D16XNPh0uZXO3ye//MOKNvkhOee0vGRIBD22421UbwbUbsjZdk7Jd4WEnFlcRgojI1Wf4jkCA7nnDG5sK7b2qA9rHVYpzDJUuP1+HkmHAh0qtYJQ4pfakMhUBKjocdVuWDPQaJ+QSfNnGmu5Jtmvwl/hLACl/kYY/KaK0CCMkbQTUbLIRsmlwBfrZAXOIOqvPwbDcDAVwShM8hMYkc6tRQeeWdavGv4jE8/eevXTNBpzqQUspBFnHSVCJHn3wmznXR1ghEEi2nXzvGE6Nv/a7esYuxZJypg2MSukxKtmBsSEGkuy9ZUhVbQj3u3c9mlf7tRA8GXA8f2+ENw1vqQfvLLtHGOBvd0fA4TQsLJuoEItdnhJqptrj8ozAj4jCvkaKB2yO6MX/AeICyNDepyY5Rec/0e1apzAtFg7BrZGALgou8faoJtH/VQKMMQIpZudcT7+NWADQhd36VmUlheACUetABzsxRwnLt3w7gGwkdFO7ZWzPi7O6ofX/7mJofSQ5UzT3iMy8UjJ2F7ERlWan8IvYbzjBmuDR7uM5ToLDf1t/0opExNKmFDAXnWFqDDVcMTK5xSAdUVXPe+/r4XnChvmOV61P47Ebynny/c7bYDwGcr+YJy1cOQNfB8w9aMB8Oatv+MigsJu3pFD7WTmcGTQoNBiIsklDWBh0CTKzyv1rjCqmaOJznqlcmwQpn++7/IL2Xere0nHEnrRPFgSYPuOqizoatSzLsIFNdC21oSh4uvdRtmrjM34IRRv9HBEIE2FJRaGwVYFAS1HPFLq2kx2jV9k4py32+fvPzr+q1o1t6shQOY8JcZqIPVnJrIcKoO1BvYl7Jtj8+X2JPgunrGrQkedhgTE+CXzRSP5x2N+x/KF7e4MRYx/kIOlOcqrP4tI/MJOaMMU5aG0YW6HZ5TdUOAF8bO0mqp4TOEBaZNx2FNTQz4JfVnx5gNI0B1KRkGIFxmDc/pnud0bBN8w/byMH63jkFdgBfc6LA+T4/7n7gN15RgIyCgFVdcyee68ata9mm9X5jQgfL2EnSnfJJ9qZPa6aq+tvptabIPJBkKxXQt9DvQ0g86d634q9H9Lkf+EGuW2MnbWPW1LHIYJ+BkGxuFUg3BzLaMkkYn6bM4lygu5gQ+2wZxnJ5UgAxzOP2wo0KdxeXlCnknhzv0pku454r2vOWYGdJcZoPgjR+uJ9m3ag9+IW36pPTh7fjOczk9NsalW/QNB1kOB4OinKqQ1hArkHrFnjWDMJdup7tehV84xxfrG2jNeKKsOYy2w7O+63Kz7dcds5DgiqGQ545Vr0ODQ4bfWcPOQL9jJdDodTALtGvxjSgFhsgdTSLHs5G6C8QnytsrNJ/rNgzd+1KVanR5W+nPxUZoUmTZM9uH4QGUMmwirJ1rdc+6zPLCjpkwQCeSF2dwOcJ5FgRnpqJxe1hOxnr3rhk7H81GyHttDYZ7dDL4dMq4guy4hU7pLiGhCu5EmCoI+KKMsyePWslVwzVh4tTSpCoubhxWO+sWgknhLaLeCvhCcXUY2VAYAlMC3pv4Tkp3feJMEFee7hGuvXFwgGJ0H97NnWPpYoeQ3EgK0wfBRPS6BStbM1qminBZwdvicq+ttobZK56kFsJjYJDVNxdUlkU8ITeUIw7SYtBb+CISAdLI2BuWo5MxGC0/hyZ0gPiPfJBMicHl+F14/x9PRw+jUQa6dy71sqC4TZRKPZb4fHdzFcHLOJBrZqqwVWDt6UqA/UYm3qTYkq6oB4AG1/nnWek6Ar72UMoXehxQ+5XzdZ8bv3NQBHEomt4E8L0bVO/zB8MuNTWdFdyjt9hiGfpPzbDuvDK7EAO7UIcxlE8rtyX6M16vA55kKoTZoPPGlUgYni8VYGDg2uLPkmjU4se/eXwufpVBXP10HAmGbDCMHnxzukmNckKzbonv9lYpmK7J/F0rIoILPnhf9piE7CljKShgR3qmrwf3jWxh5GTEy3NbBLJtGYKE4N5aXPXkeW/O/5N+mRHd9VQbxjkvlDlxeqHsRuh3ZMRXaFtArPuTC1BC3mKJKzgzUGaOOtTHilVhdP1yb0w4MOoJVrj+NIG1ccJ/EDNuyE0SmnZaiRznfixL5ngEAvzr+JtlAUzI04Crd3+oke1IOzI0G7WKd4pqK9mwMMD79xT9LtgsmCAPI/aLeWDNyIgR+UHg7hyZzHV+vGroZZi8vau/Rbc1OiElP4WIxb8eiN10vXQDuHb/YJgBAhZHCuVbdxIYdUM8RWETxVhFTx0BX1thO/q4gEETRICP6lmtcTy43f+YOSb81gCHDYz/LpCH2v8bT7M6+N1mmYclbkyUdzKfjXOwwmIBkg9MBz6EITAjWfWNFkM9OEHvY1q63wDVLDQZve7suF2yENs5y/k4NgtI+IZlB5/zDipVyg9lZxKUwv3VV1JhRAiQlbftdmzpKqsAFHftXZzMHUD3ClFKiFseiPcljJt12KrC0Avvp5k8cnNFmz9rhoOGtnxY4flhsbIE5tJyEFkrxZpr0q9yE94bpzLrahX2DL+lDOoLciUPHb/LM63EbsTvyyO76yYfyNlxE7liOooBv9hMGg3x3Uai128mKVHF6jQLaE8y0nq+GKALN4hd59RY0dzHoxrDVFomiLgXk1m3MAA7HANK8mGVFSPQ31+wnkTRV58DZbKi5UMOPy8Qh57z3zqqlgYRxBA53jlikivXVzQDQQDfi6nmcWbMtfGtY0+sjPk8pBTt33NshvIWxqTC3A1hi+GPlEc/tWKVvp0xrZ/6srxiMnUo4Rpu6WXXIfqiSUrztBvBv92iNmrs2XRyf8nj/PQHPaen+TN2mHWbWYy4hQPkNThFU7jCauuQtU8/4Jmgn8wCvt2qtWFYMdWRE90NrpIlbTPgxfhV5Sq8P+zT+6foQqO2bCyZXdeNvGgKNof7Q+IU4IapugCIe5X+M7MIM886LWnx56Vaj17EHd6yVV8HlncGFrPR66LMYcBlm3gVlgxiCiOA9Q2VhpgmOeb7oynil6UK/2KFwbc8sOnPxtuBQQiLTFZ7DC3w7B9JMjB86Pc0ZMwDigp2PHzTML4BGjcwCdqfu1qBvz+H5bsnKWZjWgrBkJR3OAjJrJd3mgAJBz/1ZjAHL1m/2V3brWK+WbFhhRumiykM3iUXiTsaTK9KkRjNXzMEMeIVYki6CTrZ+5ocDYFKpaJPPq4XZDX9oeexDX/wM04jujLwIi1PLsz7jNUj5cMw5swgiYHwqJQ8S+aWt3ykaM9QrP8Y+sqDMiyJf/0udLTKgN5ZRdbmZxCzgI5X3W07vp+oIGUS8V/Cg3bLX3QmaaEcopo9Edj2cniKvZXugoPJihWqOEqkVOFTtfLmA/oPTsQlNNY9OBbA+r4sKcKgpB3vcf7EEQkrM3E89O405KWG7o7DwYo+YT7P6WWk0v4AcKyflCR4YzqzZoYX7+9yMNe2kouk67goS0xWd9xHMhb8Rrb7Ok+zl2qQHGhQlP8pybu9uHyudD3y6fyQ9nKfCONyywEjFdVhwqdt9tzv2RmBDIBigAiliO6pn008oXhu67tnWnYeHXqu+9sSMeOTMrYuPtw6Q8MAhwJiMvy9l447xkLs/ePvLPU1kfltj3x44bcZQ+UpKZomShFirPe7hpUXFki7yi4RfoM5blnjvKTHUoTHJCK7bfGrl/bbaWpBhFvAxhg2hrsidh4966g92zvGQu4ryFIacoHmWJpKvDyw07MpgRtU6i5RcWbOe8XonrQhH+lL3YISPtzCPmfwXjYu7a68aim+q6s+foxuLub54xNAwtM7YsvFRwk/DfIpQyk5a1KeD+Ysige+AKg+ln4yKxEGwKRzH54qQwDOJlbmueYNKq9jSi2j+I5Bf7EaDCyHE6Q1yCF7XnQctuIrxOVOvN+GI7Yboq2FU9+S1O+V5ntLp89EMY6Qdo1uWXGY9hoDh9UsWgNdnVAGuZxkYHZkBWjAneiMKDeZFSF/MKg1mxhwKyu9Qv/ZVkY6x6gfrkSKTr/uXr3Ms4C7xZ7/HR4/l4YhdH6LTcPzXY4saxajUcYa1iRll1nijyE/+SHArCS5mswsUIyJzmgZ/kMg9tSh8GLKbsRC8XNNWOHi6G8NpoaoKjnCvtOzQ0qlHjGJ2e6RzxVnuEyWESQVFd0gkwTmF+2TcPCd5WdYOq51NRJd6oHir1/H/Aw9qGbl4fVy5uMjRIvRT0LX8i6TdQKR+nhVEw0hToyJWv9JbPqkabtHfRuC6NyZzGsr7wtISkUwwY/kEK7wVld1SCEH23WxIIv3cQ3HSMerOqM4JSvpTER1YmpiQYVSt+5qZG9vBpHME5p5q4Z84LnbPdXGic9YV0TubZrcX/UWUf884Ef/AMnvzsOOQ1lTl/bOC6zg76Rr4/IMCmTl6ep1orms05E6hwzBoA7VtKHiBzq9t8Ho5SpQl3u5t+RAWqVLd2+GVnMsTh/bH4gQjVcEQrGQwrWJXcPl5TnYWXE5CAvSpKNErWgmkNgJfhmxKQXtIRPuetHX28PXB1jgxnQ51mI9bE9NemsfY89K5wMtoCB+HoNc4cBIIwHc+4LlXmQZtoqiQBO1Ma74Zwg/H7/y4XKNsmUcAUEpKW2jI4H1ZaW2er9fyuS7IXrN8irD4/7lAKKzzQLJ/aAn+60ECeL9RlrY7fGY3uP8Cp0I6Fj5ax+53cUWhMt2OwRx1Q0ABJT/r4d3/+/kWFJzCpqEhGCcKzXkohVihR4z3TbcNNxZd+hBUuWNLhdq4nnjkykuYNg/BkTrNVDWeqUfDj2sIE8lYaFXtH4dr6bzlqs5J6b7awOQwkEJU68HjrldmFdqqh42c+rUVOnVN7/hv1dhHMKdoDupEY6kjv1RFsdTRAmSc15EUiT+xMiVtOeUfvyJ7GKFL/UaKUhKjmbOww8cv3PufOU4bTIBsrt3emxb296/Ppl33jxIrLkppK7bjcimJ5u89sws23xWhI5tx6MOK6ARkrlPCt7C4e44E9dWP2QbwPIdmG2mSCG4P1amcQMFCbJ/aanyvsmq0Xzd6YMNbjvucvqBTd4tGRp/BDWnTEHzkgkPTO09c0oo1O3aL0QQNhqCNHMKf1bS+NBmNkKRJS1xpA7vdaJnqqEEUdvhkcgJ52t/9U4AtiG27Qa4o7UATOceb1dpf5W5y6skLOTy83FVmHhvv2YGHV74HwUIQ5EujuJTRKrPtY1vaG6YVNMnoleotTs8NCiRr7MAjySqvaOG17spwiBiZ8dgF8yqkbQZHOaHbuzMJ7YBL75UZKeZ6b5WIzljuZEYeO7auz1Wctb2apRZFLqrHIMIisuEeu0gsau4QYsf3/O0Hb7BIFlmnWtdUQB/C/1JH1bBF3ucKLfQ5KKe1fT1qpegH0WrvIkgmtWv3M2YyjX7yy505IUTqmRDDXcm+I5w+02r+QYl6WG9N1zy9Ul6AUPMDqWANrvmbAh5/esyLggzZF1Ti3Nx5g9u7Jbs0wN7usU/WJk1AZPJEu/in2OyCZqmbLzBiHNpQqJ4sIGQgT5iyFd2+O+rc0LHBDOwn6nPHqMOVP0s0GKFTuz81G7s6UXrrpV94VK9lz/KZtM71lclgRRGUBxMAUI2NsKHoNXKt2tby5QiSZxqSAkN1hSw35mb//TIKfWvBSJZVxhc1PW6amGoqfRQf8R2POIlTIuz52C094ytoltW6AfDNENQnhClOU7TACucSetiiRjb/1RYKPZCYyZQTj2WV0q/XA5xqiAN+EZIuNlmzcCxh5tG8p/EQmzJEDFKM37gPgw3oQW9Jd5tzu6QJudXq2npjrd6HbENrd1OQM1+A6d8IyOYiomxYFcatVaA8GNxyzvX41d/fzRjS174IjHg9GGd36WP//C7esqAKT2hLGQW67ShkAQfuejql7e2KSdH0KywMv2b9/17ncWAZ6Z9KSqT7y3DMqeqoLT9OC7tcH6FP5Y0rETA1rIBd8sic6ROECXBRi67s28OBwx2Qkp75VuGHrqM6vrRQBwz9D/f2d0UMMstbGpl3+SMQEqNtY26If5W72lmCncsQyWzYhJ9fJu/tBfI9CL4B1BpR5hurOQa9zqdSLPzzRH0FQtBISJn3zh+lplm9+RTLEX0IVyvLbJm8dIKDK4E2UpxIWfqNVk\\\" id=\\\"__VIEWSTATE\\\"/>\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" value id=\\\"__VIEWSTATEENCRYPTED\\\"/>\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table style=\\\"text-align: left;\\\" border=\\\"0\\\" width=\\\"1016\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\" colspan=\\\"3\\\" height=\\\"40\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\"/><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/>|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\"/><a href=\\\"/garden_center/account_login.aspx\\\" id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\"/></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a style=\\\"color:#CE0000;\\\" href=\\\"/garden_center/cart.aspx\\\" id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\"/>(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\"/>\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\" rowspan=\\\"5\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" bgcolor=\\\"#F5F4E9\\\" height=\\\"134\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" width=\\\"100%\\\" border=\\\"0\\\"/></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td style=\\\"width:154;\\\" bgcolor=\\\"#BAB38F\\\" data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;_links&quot;}}\\\" width=\\\"154\\\" valign=\\\"top\\\" align=\\\"center\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link href=\\\"/css/jquery.jdMenu.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n            <link href=\\\"/css/jquery.jdMenu2.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\">\\r\\n<script src=\\\"/scripts/jquery.dimensions.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.positionBy.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.bgiframe.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script src=\\\"/scripts/jquery.jdMenu2.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br/><br/>SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br/>\\r\\n\\t<br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br/><br/>\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"100%\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td colspan=\\\"6\\\" style=\\\"height:10px;\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\" id=\\\"modal\\\">\\r\\n\\t\\r\\n\\t<iframe src=\\\"/modalblank.aspx\\\" name=\\\"PopUpIFrame\\\" height=\\\"140\\\" width=\\\"290\\\" scrolling=\\\"no\\\" id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\"/>\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=180\\\" class=\\\"breadcrumb\\\">Squash & Pumpkins</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=183\\\" class=\\\"breadcrumbActive\\\"><b data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;category&quot;}}\\\">Winter Squash</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\"/></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;name&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Gold Nugget</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"/>\\r\\n\\t\\t<br/><br/>\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"570\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img src=\\\"/images/product_shots/PPS14165B.jpg\\\" height=\\\"176\\\" width=\\\"176\\\" alt=\\\"Product PS14165\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\"/></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Gold Nugget</span></span><br/>\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><em data-scrapy-annotate=\\\"{&quot;required&quot;: [&quot;species&quot;], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;species&quot;}}\\\">Cucurbita maxima<br/>\\r\\n</em><ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;lifecycle&quot;}, &quot;generated&quot;: true}\\\" class id=\\\"anonymous_element_18\\\">Tender&nbsp;Annual</ins><br/>\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span class=\\\"content\\\" data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;}, &quot;generated&quot;: false}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\"><ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;weight&quot;}, &quot;generated&quot;: true}\\\" style class id=\\\"anonymous_element_20\\\">1-2 lbs.</ins> (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a href=\\\"/tellafriend.aspx?Item_No=PS14165\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 1&quot;<br/>\\r\\nSoil Temp. for Germ.: 70-90&deg;F<br/>\\r\\nDays to Germ.: 7-10<br/>\\r\\nPlant Spacing: 3'-4'Apart<br/>\\nDays to Maturity: <ins data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;days&quot;}, &quot;generated&quot;: true}\\\" class id=\\\"anonymous_element_16\\\">75-95</ins><br/>\\r\\nFull Sun<br/>\\r\\nModerate Water<br/>\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br/>\\r\\n\\t\\t\\r\\n\\t\\t<table cellpadding=\\\"0\\\" width=\\\"620\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\" valign=\\\"top\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\"/></div>Choose a Size:<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span style=\\\"display:inline-block;\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#FFFBC4\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Squash, Winter, Gold Nugget- Pack of 20</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#:<span style=\\\"font-weight: bold;\\\"> <span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01593</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" value=\\\"957\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span data-scrapy-annotate=\\\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;}}\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" value=\\\"957\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" value=\\\"Squash, Winter, Gold Nugget- Pack of 20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\"/>\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#E2E2B9\\\" align=\\\"left\\\" valign=\\\"bottom\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td colspan=\\\"8\\\" height=\\\"15\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Gold Nugget Winter Squash- Pack of 250</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" align=\\\"right\\\" nowrap>Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06696</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" value=\\\"7564\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\"/>Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"60\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\">Quantity: &nbsp;<br/><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"20\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" value=\\\"0\\\" maxlength=\\\"4\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" value=\\\"7564\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" value=\\\"1\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\"/><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" value=\\\"Gold Nugget Winter Squash- Pack of 250\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\"/>\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#B9B999\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" align=\\\"right\\\" valign=\\\"top\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br/><br/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br/><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br/><br/></td>\\r\\n\\t\\t\\t\\t\\t\\t<td align=\\\"right\\\" valign=\\\"top\\\">\\r\\n                            <input maxlength=\\\"15\\\" type=\\\"text\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\"/></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td bgcolor=\\\"#D7D79E\\\" align=\\\"center\\\"><br/>\\r\\n\\t\\t\\t\\t<table cellpadding=\\\"0\\\" width=\\\"594\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"bottom\\\">\\r\\n                            <input src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onclick=\\\"return CheckQty(1,0);\\\" alt=\\\"Add to Your Cart\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\"/>\\r\\n                            <br/><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\"/></div><br/>\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a href=\\\"/garden_center/browse_category.aspx?id=406\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\" valign=\\\"middle\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onclick=\\\"return CheckQty(2,0);\\\" alt=\\\"Proceed To Checkout\\\" border=\\\"0\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\"/>\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_lft_gr.gif\\\" valign=\\\"top\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\"/></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" background=\\\"/images/bg_box_rt_gr.gif\\\" valign=\\\"top\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\"/></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" style=\\\"width:1px;height:100%\\\" width=\\\"1px\\\" height=\\\"100%\\\"/></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" align=\\\"center\\\" height=\\\"100\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input style=\\\"width: 140px; margin-bottom: 11px;\\\" name=\\\"ctl00$SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\"/>\\r\\n\\t\\t<select style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\" name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input src style=\\\"margin-top: 11px; \\\" name=\\\"ctl00$SearchButton\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" type=\\\"image\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" id=\\\"ctl00_SearchButton\\\"/>\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table cellpadding=\\\"0\\\" border=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br/><br/></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\"/></a>&nbsp;&nbsp;<a shape=\\\"rect\\\" href=\\\"http://twitter.com/#!/SeedsofChange\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\"/></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\"/></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=123\\\" class=\\\"linkbuttonfooter\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=29\\\" class=\\\"linkbuttonfooter\\\">Flower Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=77\\\" class=\\\"linkbuttonfooter\\\">Herb Seed</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=336\\\" class=\\\"linkbuttonfooter\\\">Cover Crops</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\" class=\\\"linkbuttonfooter\\\">Trees</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\" class=\\\"linkbuttonfooter\\\">Seedlings</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/browse_category.aspx?id=361\\\" class=\\\"linkbuttonfooter\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a href=\\\"/digging/garden_info.aspx\\\" class=\\\"linkbuttonfooter\\\">Gardening Information</a></div>\\r\\n\\t    <div><a href=\\\"/digging/glossary.aspx\\\" class=\\\"linkbuttonfooter\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\" class=\\\"linkbuttonfooter\\\">Succession Planting</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\" class=\\\"linkbuttonfooter\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\" class=\\\"linkbuttonfooter\\\">Seed Saving</a></div>\\r\\n\\t    <div><a href=\\\"/digging/zone_chart.aspx\\\" class=\\\"linkbuttonfooter\\\">Zone Chart</a></div>\\r\\n\\t    <div><a href=\\\"/planting_guide.pdf\\\" class=\\\"linkbuttonfooter\\\">Planting Guide</a></div>\\r\\n\\t    <div><a href=\\\"/soc-links.aspx\\\" class=\\\"linkbuttonfooter\\\">Resources</a></div>\\r\\n\\t    <div><a href=\\\"/Biodiversity.aspx\\\" class=\\\"linkbuttonfooter\\\">Biodiversity</a></div>\\r\\n\\t    <div><a href=\\\"/Sustainability.aspx\\\" class=\\\"linkbuttonfooter\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a href=\\\"/FAQ_seed.aspx\\\" class=\\\"linkbuttonfooter\\\">FAQs</a></div>\\r\\n\\t    <div><a href=\\\"/CustomerService.aspx\\\" class=\\\"linkbuttonfooter\\\">Customer Service</a></div>\\r\\n\\t    <div><a href=\\\"/contact_us.aspx\\\" class=\\\"linkbuttonfooter\\\">Contact Us</a></div>\\r\\n\\t    <div><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"linkbuttonfooter\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a href=\\\"/about/our_guarantee.aspx\\\" class=\\\"linkbuttonfooter\\\">Guarantee</a></div>\\r\\n\\t    <div><a href=\\\"/about/safe_seed_pledge.aspx\\\" class=\\\"linkbuttonfooter\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a href=\\\"/SOC_OGCERT.pdf\\\" class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table style=\\\"text-align: left; margin-top:24px;\\\" border=\\\"0\\\" width=\\\"1000\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br/> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"url\": \"http://www.seedsofchange.com/garden_center/product_details.aspx?item_no=PS14165\",\n            \"original_body\": \"\\r\\n\\r\\n<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\r\\n  \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\r\\n\\r\\n\\r\\n<html>\\r\\n<head>\\r\\n<link rel=\\\"STYLESHEET\\\" type=\\\"text/css\\\" href=\\\"/css/soc.css\\\" />\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n    var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n function checkKeycode(e) {\\r\\n               var keycode;\\r\\n               \\r\\n               if (window.event) // IE\\r\\n                    keycode = e.keyCode;\\r\\n               else if (e.which) // Netscape/Firefox/Opera\\r\\n                    keycode = e.which;\\r\\n               if (keycode==13) \\r\\n               {\\r\\n                  CallSearch();\\r\\n                  \\r\\n                  return false;\\r\\n               }\\r\\n               return true;\\r\\n           }\\r\\n         \\r\\n         function CallSearch()\\r\\n           {\\r\\n           \\r\\n              var objsearchText = document.getElementById('ctl00_SearchTB');\\r\\n              var searchText;\\r\\n              var searchType = document.getElementById(\\\"ctl00_SearchTypeDD\\\");\\r\\n               //alert(searchType[searchType.selectedIndex].value);\\r\\n              // document.form1.select2[document.form1.select1.selectedIndex].value);\\r\\n               \\r\\n               if ((objsearchText!=null))\\r\\n               {\\r\\n                   searchText = objsearchText.value;\\r\\n                   \\r\\n                   searchText = searchText.replace(/>/gi, \\\" >\\\");\\r\\n                   searchText = searchText.replace(/</gi, \\\"< \\\");\\r\\n                   objsearchText.value = searchText;\\r\\n               }\\r\\n              \\r\\n             document.location=\\\"http://www.seedsofchange.com/SearchResults.aspx?searchTB=\\\" + searchText + \\\"&SearchTypeDD=\\\" + searchType[searchType.selectedIndex].value;                 \\r\\n           \\r\\n           } \\r\\n \\r\\nfunction ec_replace(needle, stack, str) {\\r\\n\\tvar i = stack.indexOf(needle);\\r\\n\\tif (i != -1) {\\r\\n\\t\\treturn stack.substring(0,i) + str + stack.substring(i + needle.length, stack.length);\\r\\n\\t} else {\\r\\n\\t\\treturn stack;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ec_tag(str) {\\r\\n\\treturn ec_replace(\\\"!+UID!\\\", str, UID);\\r\\n}\\r\\n</script>\\r\\n\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n\\r\\n  var winLocationH = window.parent.location.href.toLowerCase();\\r\\n\\r\\n    if (winLocationH != null) {\\r\\n        if (winLocationH.indexOf('https') == 0) {\\r\\n            if (winLocationH.indexOf('/garden_center/') == -1) {\\r\\n                window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n            } else {\\r\\n\\r\\n                if (winLocationH.indexOf('/garden_center/browse_category.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.aspx') > 0 || winLocationH.indexOf('/garden_center/cart.aspx') > 0 || winLocationH.indexOf('/garden_center/product_detailsnew.aspx') > 0 || winLocationH.indexOf('/garden_center/catalog_request.aspx') > 0 || winLocationH.indexOf('/garden_center/quick_order.aspx') > 0 || winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') > 0 || winLocationH.indexOf('/garden_center/tellafriend.aspx') > 0 || winLocationH.indexOf('/garden_center/product_details.asp') > 0 || winLocationH.indexOf('/garden_center/browse_category.asp') > 0 || winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') > 0)\\r\\n                    window.location.href = winLocationH.replace(\\\"https\\\", \\\"http\\\");\\r\\n                \\r\\n            }\\r\\n        } else {\\r\\n            if (winLocationH.indexOf('/garden_center/') > 0) {\\r\\n                if (winLocationH.indexOf('https') == -1) {\\r\\n                    if (winLocationH.indexOf('/garden_center/browse_category.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.aspx') == -1 && winLocationH.indexOf('/garden_center/cart.aspx') == -1 && winLocationH.indexOf('/garden_center/product_detailsnew.aspx') == -1 && winLocationH.indexOf('/garden_center/catalog_request.aspx') == -1 && winLocationH.indexOf('/garden_center/quick_order.aspx') == -1 && winLocationH.indexOf('/garden_center/ship_multiple_locals.aspx') == -1 && winLocationH.indexOf('/garden_center/tellafriend.aspx') == -1 && winLocationH.indexOf('/garden_center/product_details.asp') == -1 && winLocationH.indexOf('/garden_center/browse_category.asp') == -1 && winLocationH.indexOf('/garden_center/detailedcategorydisplay.aspx') == -1)\\r\\n                        window.location.href = winLocationH.replace(\\\"http\\\", \\\"https\\\");\\r\\n                }\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n\\r\\n</script>\\r\\n\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/master_scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"Javascript1.2\\\" type=\\\"text/javascript\\\" src=\\\"/scripts/scripts.js\\\"></script>\\r\\n\\r\\n    <script language=\\\"JavaScript\\\" type=\\\"text/javascript\\\">\\r\\n//<!--\\r\\nif(window.event + \\\"\\\" == \\\"undefined\\\") event = null;\\r\\nfunction HM_f_PopUp(){return false};\\r\\nfunction HM_f_PopDown(){return false};\\r\\npopUp = HM_f_PopUp;\\r\\npopDown = HM_f_PopDown;\\r\\n//-->\\r\\n</script>\\r\\n\\r\\n<script language=\\\"JavaScript1.2\\\" src=\\\"/scripts/HM_Loader.js\\\" type='text/javascript'></script>\\r\\n<script \\r\\n            src=\\\"/jquery/jquery-1.3.2.min.js\\\" \\r\\n            type=\\\"text/javascript\\\"></script>\\r\\n\\r\\n<title>\\r\\n\\tSeeds of Change | Item Detail\\r\\n</title></head>\\r\\n\\r\\n<body id=\\\"ctl00_MasterBody\\\" marginheight=\\\"0\\\" marginwidth=\\\"0\\\" leftmargin=\\\"0\\\" topmargin=\\\"0\\\" style=\\\"height:100%; background-image:url(/images/layout/SoC_Pattern.jpg); background-color:#F0F0EE; background-repeat:repeat-x; \\\">\\r\\n    <form name=\\\"aspnetForm\\\" method=\\\"post\\\" action=\\\"product_details.aspx?item_no=PS14165\\\" id=\\\"aspnetForm\\\">\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATE\\\" id=\\\"__VIEWSTATE\\\" value=\\\"mN6xmTfxY8t2jPXW3Aie4yzPt81GrJ7HBWxqq+yDyKBUwQuFR0DaMCdvErAWQa2j/1gS5qygfvQejUovckDLSHYwphTpVxPJ5jYj6gox+8oam03tTACB+giZuOPRDySFvq3pUjBrZZxyeNcqv5+BduH5CXtG9U9v4Y1fI+2aSm4olYeetJLQuRIkCq+ynaqWb6dHa23oNsyVVwiSXYC7z0Zxou2092/i6gOLWq69owvWtmXpePianIRBvB1sFrwDRgCJBEp4FNPWLagmAqnDDmF81O5cDEiyyUzXzKAE4d/glUu8jduveP3t/3H/cJCT1a8BMwn/jV9PKBFdttKt1QTLEm55dkBa/YRjgH5AUvRjM8zSLMi2IHIA95vydp3xkbY/txv5L8Eu+Y0UHteG8vbiYddhVr6Kw9nSjqbjW2v2UyAbBpCRtwlEtcyDiaeCKkCRSELCyQfPa3ebxxeESf0+07jNqDY2QguF8gJJX2P8xHRPIr0ZAgXU2d/H6cTMjYqEYTr4xSDnhIkftEuXk361h2k8heaLZNuo6Pi4lKuZfAAeeDC5efm7ckgz2IHzN88xggBNdYCnPiQkhDXZsejvE5BRCa1dQ5k+NKpLvMo9/Te/jrIjNcOqGnnYQgLudJZ+KFd2aXmgKloptaIgc+pMfLTVYKpunC5SaJaXiWubyNjwZCAD5XFPivY/fXtbcasxzs3Tt1P3Z24+q5r5TL97YJyOBCc8l/sVSIEnxC2AJhmCV9ecUZGrnMZNDvl+wbOe1e+S/GXgto2mnchnwIMfbgmi6O4xL/sSiketqUN0jYj8+6/y4dHcQPC7FKfzrHLQWOdtcLnQTTHy2LB6Idmvy76KFRzS1n8zE45tVSKmK3Srref57NWcuoCBf3i/b5VGvPjwRnR3Ic0uZkcKM1zqZZMRNEWUxMP3K0o7U//pDH5LAD5cWNJBqniqWXvXOJRUPQFdGjuWzO4jErCFLnD3U7uzlkjSXbdx4vkK5TblFeS+y5EvtwRb7cig4CFOBf0MFXddncHLwYg2IIjli5kfbpKXtOz6OsMQE2XAgqeTsNqbrVseE9nyqtFRMVAPy97j+YS7Ke6t1Hz22m5X0kJq2EFYqKUd2URIdLWG5K2I8AVbR586yUxE1KUaBZwtd6OruVcLqjbfc8OehU901AZaZSz0/hjSn1frqQWfBeUcWghmmqYiCO3dIyjm9OQuf2cQ2KveG3hvH3fGakOkVbzAQHm5XQZIGXx7OKf2/8/5RDKfxJXrmCXz/VwpIzUKk96rqMhAtxcbdiy5yJhAffCNziXOJLz9ov+F0h5T2UQs0Sw3H2GI3gj+zSl0k51VLuSkSJcThim3p3qqFu85tBnv/5C5cZwa5H++kdGwTtVw+e+4DO38M+dXHo8UzECkjyvt8cu39OOxx8B9w+3MBVX7kCyLGAm/fUbRQoM//HBaHn8JIpCpijMmBmVy3tfzEljzrAKb+kwQ4biDr287cLSp+UxZZCEDwmsiLRfZi6mEhNx0byzmGtdiVTgtfoUcQ7uszRSSiJINx5UO2a6E6ixJryF5dQCEkWe20lZVDlkxlHDYVftb0ueYEVnuqvYwPEcAgdbVbWfLusIhLqtbGr+QWDE20APZgc9a9ShyAVeiVxG8m6U/OOdA+hgcvLmW5GW8NC9uSI6yVaq5HjQZ1rHe/Gp5JnipmGZhBs09hBVUui8jTE+d+u9rAiX86X4KUx7BA7g+MRGP2lYk43N+mNHLkbU/AihvGTWYTzR9p+23HFErIGsi4hI8oVGcklztTOtnLSG5eNt4ptSLNxDcM0oLppbM2XABRZwV1rnLCOw9h6Hgr/Rw8AwRYTW7UGJcO/vL1+RMOA0wtrqTPfxwKockVgIbFLdRCrDNnl0ooLCfgq0il4ayq2VotAYJUVXzytkbSa5sSyJvRXEtXeELd9XhvhijpFgRHNjpOP9NWmRVvOgo0C/FU6ejw8NcomyHaX5Witkb6x4n0OV1yNXMsu6ds9Vj3e5nxgncyPIkffo04VtIzxKdNVpuKeKLW/fQIcG01n89zXqj5/hbO8kiVtozxRrjx5FU0glG9P7eZkclOWRDIg7UPER5xfkOeLPi4VUfCIMSkzlchkbwuTJZRJcGaqsp9vaKa29b/pAWMglK/WjMZZzFdLKU3E1sBXXemBzyF3lrKs36RpbCmBaSo8n86s7qutnqJzZhENNPwBpLljKEQM3DGB9hEPWzeNrqHFKTY6D16XNPh0uZXO3ye//MOKNvkhOee0vGRIBD22421UbwbUbsjZdk7Jd4WEnFlcRgojI1Wf4jkCA7nnDG5sK7b2qA9rHVYpzDJUuP1+HkmHAh0qtYJQ4pfakMhUBKjocdVuWDPQaJ+QSfNnGmu5Jtmvwl/hLACl/kYY/KaK0CCMkbQTUbLIRsmlwBfrZAXOIOqvPwbDcDAVwShM8hMYkc6tRQeeWdavGv4jE8/eevXTNBpzqQUspBFnHSVCJHn3wmznXR1ghEEi2nXzvGE6Nv/a7esYuxZJypg2MSukxKtmBsSEGkuy9ZUhVbQj3u3c9mlf7tRA8GXA8f2+ENw1vqQfvLLtHGOBvd0fA4TQsLJuoEItdnhJqptrj8ozAj4jCvkaKB2yO6MX/AeICyNDepyY5Rec/0e1apzAtFg7BrZGALgou8faoJtH/VQKMMQIpZudcT7+NWADQhd36VmUlheACUetABzsxRwnLt3w7gGwkdFO7ZWzPi7O6ofX/7mJofSQ5UzT3iMy8UjJ2F7ERlWan8IvYbzjBmuDR7uM5ToLDf1t/0opExNKmFDAXnWFqDDVcMTK5xSAdUVXPe+/r4XnChvmOV61P47Ebynny/c7bYDwGcr+YJy1cOQNfB8w9aMB8Oatv+MigsJu3pFD7WTmcGTQoNBiIsklDWBh0CTKzyv1rjCqmaOJznqlcmwQpn++7/IL2Xere0nHEnrRPFgSYPuOqizoatSzLsIFNdC21oSh4uvdRtmrjM34IRRv9HBEIE2FJRaGwVYFAS1HPFLq2kx2jV9k4py32+fvPzr+q1o1t6shQOY8JcZqIPVnJrIcKoO1BvYl7Jtj8+X2JPgunrGrQkedhgTE+CXzRSP5x2N+x/KF7e4MRYx/kIOlOcqrP4tI/MJOaMMU5aG0YW6HZ5TdUOAF8bO0mqp4TOEBaZNx2FNTQz4JfVnx5gNI0B1KRkGIFxmDc/pnud0bBN8w/byMH63jkFdgBfc6LA+T4/7n7gN15RgIyCgFVdcyee68ata9mm9X5jQgfL2EnSnfJJ9qZPa6aq+tvptabIPJBkKxXQt9DvQ0g86d634q9H9Lkf+EGuW2MnbWPW1LHIYJ+BkGxuFUg3BzLaMkkYn6bM4lygu5gQ+2wZxnJ5UgAxzOP2wo0KdxeXlCnknhzv0pku454r2vOWYGdJcZoPgjR+uJ9m3ag9+IW36pPTh7fjOczk9NsalW/QNB1kOB4OinKqQ1hArkHrFnjWDMJdup7tehV84xxfrG2jNeKKsOYy2w7O+63Kz7dcds5DgiqGQ545Vr0ODQ4bfWcPOQL9jJdDodTALtGvxjSgFhsgdTSLHs5G6C8QnytsrNJ/rNgzd+1KVanR5W+nPxUZoUmTZM9uH4QGUMmwirJ1rdc+6zPLCjpkwQCeSF2dwOcJ5FgRnpqJxe1hOxnr3rhk7H81GyHttDYZ7dDL4dMq4guy4hU7pLiGhCu5EmCoI+KKMsyePWslVwzVh4tTSpCoubhxWO+sWgknhLaLeCvhCcXUY2VAYAlMC3pv4Tkp3feJMEFee7hGuvXFwgGJ0H97NnWPpYoeQ3EgK0wfBRPS6BStbM1qminBZwdvicq+ttobZK56kFsJjYJDVNxdUlkU8ITeUIw7SYtBb+CISAdLI2BuWo5MxGC0/hyZ0gPiPfJBMicHl+F14/x9PRw+jUQa6dy71sqC4TZRKPZb4fHdzFcHLOJBrZqqwVWDt6UqA/UYm3qTYkq6oB4AG1/nnWek6Ar72UMoXehxQ+5XzdZ8bv3NQBHEomt4E8L0bVO/zB8MuNTWdFdyjt9hiGfpPzbDuvDK7EAO7UIcxlE8rtyX6M16vA55kKoTZoPPGlUgYni8VYGDg2uLPkmjU4se/eXwufpVBXP10HAmGbDCMHnxzukmNckKzbonv9lYpmK7J/F0rIoILPnhf9piE7CljKShgR3qmrwf3jWxh5GTEy3NbBLJtGYKE4N5aXPXkeW/O/5N+mRHd9VQbxjkvlDlxeqHsRuh3ZMRXaFtArPuTC1BC3mKJKzgzUGaOOtTHilVhdP1yb0w4MOoJVrj+NIG1ccJ/EDNuyE0SmnZaiRznfixL5ngEAvzr+JtlAUzI04Crd3+oke1IOzI0G7WKd4pqK9mwMMD79xT9LtgsmCAPI/aLeWDNyIgR+UHg7hyZzHV+vGroZZi8vau/Rbc1OiElP4WIxb8eiN10vXQDuHb/YJgBAhZHCuVbdxIYdUM8RWETxVhFTx0BX1thO/q4gEETRICP6lmtcTy43f+YOSb81gCHDYz/LpCH2v8bT7M6+N1mmYclbkyUdzKfjXOwwmIBkg9MBz6EITAjWfWNFkM9OEHvY1q63wDVLDQZve7suF2yENs5y/k4NgtI+IZlB5/zDipVyg9lZxKUwv3VV1JhRAiQlbftdmzpKqsAFHftXZzMHUD3ClFKiFseiPcljJt12KrC0Avvp5k8cnNFmz9rhoOGtnxY4flhsbIE5tJyEFkrxZpr0q9yE94bpzLrahX2DL+lDOoLciUPHb/LM63EbsTvyyO76yYfyNlxE7liOooBv9hMGg3x3Uai128mKVHF6jQLaE8y0nq+GKALN4hd59RY0dzHoxrDVFomiLgXk1m3MAA7HANK8mGVFSPQ31+wnkTRV58DZbKi5UMOPy8Qh57z3zqqlgYRxBA53jlikivXVzQDQQDfi6nmcWbMtfGtY0+sjPk8pBTt33NshvIWxqTC3A1hi+GPlEc/tWKVvp0xrZ/6srxiMnUo4Rpu6WXXIfqiSUrztBvBv92iNmrs2XRyf8nj/PQHPaen+TN2mHWbWYy4hQPkNThFU7jCauuQtU8/4Jmgn8wCvt2qtWFYMdWRE90NrpIlbTPgxfhV5Sq8P+zT+6foQqO2bCyZXdeNvGgKNof7Q+IU4IapugCIe5X+M7MIM886LWnx56Vaj17EHd6yVV8HlncGFrPR66LMYcBlm3gVlgxiCiOA9Q2VhpgmOeb7oynil6UK/2KFwbc8sOnPxtuBQQiLTFZ7DC3w7B9JMjB86Pc0ZMwDigp2PHzTML4BGjcwCdqfu1qBvz+H5bsnKWZjWgrBkJR3OAjJrJd3mgAJBz/1ZjAHL1m/2V3brWK+WbFhhRumiykM3iUXiTsaTK9KkRjNXzMEMeIVYki6CTrZ+5ocDYFKpaJPPq4XZDX9oeexDX/wM04jujLwIi1PLsz7jNUj5cMw5swgiYHwqJQ8S+aWt3ykaM9QrP8Y+sqDMiyJf/0udLTKgN5ZRdbmZxCzgI5X3W07vp+oIGUS8V/Cg3bLX3QmaaEcopo9Edj2cniKvZXugoPJihWqOEqkVOFTtfLmA/oPTsQlNNY9OBbA+r4sKcKgpB3vcf7EEQkrM3E89O405KWG7o7DwYo+YT7P6WWk0v4AcKyflCR4YzqzZoYX7+9yMNe2kouk67goS0xWd9xHMhb8Rrb7Ok+zl2qQHGhQlP8pybu9uHyudD3y6fyQ9nKfCONyywEjFdVhwqdt9tzv2RmBDIBigAiliO6pn008oXhu67tnWnYeHXqu+9sSMeOTMrYuPtw6Q8MAhwJiMvy9l447xkLs/ePvLPU1kfltj3x44bcZQ+UpKZomShFirPe7hpUXFki7yi4RfoM5blnjvKTHUoTHJCK7bfGrl/bbaWpBhFvAxhg2hrsidh4966g92zvGQu4ryFIacoHmWJpKvDyw07MpgRtU6i5RcWbOe8XonrQhH+lL3YISPtzCPmfwXjYu7a68aim+q6s+foxuLub54xNAwtM7YsvFRwk/DfIpQyk5a1KeD+Ysige+AKg+ln4yKxEGwKRzH54qQwDOJlbmueYNKq9jSi2j+I5Bf7EaDCyHE6Q1yCF7XnQctuIrxOVOvN+GI7Yboq2FU9+S1O+V5ntLp89EMY6Qdo1uWXGY9hoDh9UsWgNdnVAGuZxkYHZkBWjAneiMKDeZFSF/MKg1mxhwKyu9Qv/ZVkY6x6gfrkSKTr/uXr3Ms4C7xZ7/HR4/l4YhdH6LTcPzXY4saxajUcYa1iRll1nijyE/+SHArCS5mswsUIyJzmgZ/kMg9tSh8GLKbsRC8XNNWOHi6G8NpoaoKjnCvtOzQ0qlHjGJ2e6RzxVnuEyWESQVFd0gkwTmF+2TcPCd5WdYOq51NRJd6oHir1/H/Aw9qGbl4fVy5uMjRIvRT0LX8i6TdQKR+nhVEw0hToyJWv9JbPqkabtHfRuC6NyZzGsr7wtISkUwwY/kEK7wVld1SCEH23WxIIv3cQ3HSMerOqM4JSvpTER1YmpiQYVSt+5qZG9vBpHME5p5q4Z84LnbPdXGic9YV0TubZrcX/UWUf884Ef/AMnvzsOOQ1lTl/bOC6zg76Rr4/IMCmTl6ep1orms05E6hwzBoA7VtKHiBzq9t8Ho5SpQl3u5t+RAWqVLd2+GVnMsTh/bH4gQjVcEQrGQwrWJXcPl5TnYWXE5CAvSpKNErWgmkNgJfhmxKQXtIRPuetHX28PXB1jgxnQ51mI9bE9NemsfY89K5wMtoCB+HoNc4cBIIwHc+4LlXmQZtoqiQBO1Ma74Zwg/H7/y4XKNsmUcAUEpKW2jI4H1ZaW2er9fyuS7IXrN8irD4/7lAKKzzQLJ/aAn+60ECeL9RlrY7fGY3uP8Cp0I6Fj5ax+53cUWhMt2OwRx1Q0ABJT/r4d3/+/kWFJzCpqEhGCcKzXkohVihR4z3TbcNNxZd+hBUuWNLhdq4nnjkykuYNg/BkTrNVDWeqUfDj2sIE8lYaFXtH4dr6bzlqs5J6b7awOQwkEJU68HjrldmFdqqh42c+rUVOnVN7/hv1dhHMKdoDupEY6kjv1RFsdTRAmSc15EUiT+xMiVtOeUfvyJ7GKFL/UaKUhKjmbOww8cv3PufOU4bTIBsrt3emxb296/Ppl33jxIrLkppK7bjcimJ5u89sws23xWhI5tx6MOK6ARkrlPCt7C4e44E9dWP2QbwPIdmG2mSCG4P1amcQMFCbJ/aanyvsmq0Xzd6YMNbjvucvqBTd4tGRp/BDWnTEHzkgkPTO09c0oo1O3aL0QQNhqCNHMKf1bS+NBmNkKRJS1xpA7vdaJnqqEEUdvhkcgJ52t/9U4AtiG27Qa4o7UATOceb1dpf5W5y6skLOTy83FVmHhvv2YGHV74HwUIQ5EujuJTRKrPtY1vaG6YVNMnoleotTs8NCiRr7MAjySqvaOG17spwiBiZ8dgF8yqkbQZHOaHbuzMJ7YBL75UZKeZ6b5WIzljuZEYeO7auz1Wctb2apRZFLqrHIMIisuEeu0gsau4QYsf3/O0Hb7BIFlmnWtdUQB/C/1JH1bBF3ucKLfQ5KKe1fT1qpegH0WrvIkgmtWv3M2YyjX7yy505IUTqmRDDXcm+I5w+02r+QYl6WG9N1zy9Ul6AUPMDqWANrvmbAh5/esyLggzZF1Ti3Nx5g9u7Jbs0wN7usU/WJk1AZPJEu/in2OyCZqmbLzBiHNpQqJ4sIGQgT5iyFd2+O+rc0LHBDOwn6nPHqMOVP0s0GKFTuz81G7s6UXrrpV94VK9lz/KZtM71lclgRRGUBxMAUI2NsKHoNXKt2tby5QiSZxqSAkN1hSw35mb//TIKfWvBSJZVxhc1PW6amGoqfRQf8R2POIlTIuz52C094ytoltW6AfDNENQnhClOU7TACucSetiiRjb/1RYKPZCYyZQTj2WV0q/XA5xqiAN+EZIuNlmzcCxh5tG8p/EQmzJEDFKM37gPgw3oQW9Jd5tzu6QJudXq2npjrd6HbENrd1OQM1+A6d8IyOYiomxYFcatVaA8GNxyzvX41d/fzRjS174IjHg9GGd36WP//C7esqAKT2hLGQW67ShkAQfuejql7e2KSdH0KywMv2b9/17ncWAZ6Z9KSqT7y3DMqeqoLT9OC7tcH6FP5Y0rETA1rIBd8sic6ROECXBRi67s28OBwx2Qkp75VuGHrqM6vrRQBwz9D/f2d0UMMstbGpl3+SMQEqNtY26If5W72lmCncsQyWzYhJ9fJu/tBfI9CL4B1BpR5hurOQa9zqdSLPzzRH0FQtBISJn3zh+lplm9+RTLEX0IVyvLbJm8dIKDK4E2UpxIWfqNVk\\\" />\\r\\n\\r\\n\\r\\n<script src=\\\"/ScriptResource.axd?d=RfE00ynGtHnkZQ3YO8yF4jISgSjq0bD48rjhcrsbMzJdszKsXMUCMJ5e2jjc8H239zJ76Xr-aibPelGNokfZIc2feqmxE9zENc9U9nG6dQg30E-Nc8OMw2pTZkcBdrO68QtjbfxMUDKxIPUQnB_hyC2Qy_81&amp;t=634236073882013951\\\" type=\\\"text/javascript\\\"></script>\\r\\n<input type=\\\"hidden\\\" name=\\\"__VIEWSTATEENCRYPTED\\\" id=\\\"__VIEWSTATEENCRYPTED\\\" value=\\\"\\\" />\\r\\n    \\r\\n<div style=\\\"text-align: center; margin: auto; width: 1016px;\\\">\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1016\\\" style=\\\"text-align: left;\\\">\\r\\n\\t<tr>\\r\\n\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_left.png)\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t\\t<!--------------- Start Global Nav ------------- -->\\r\\n\\t\\t<!--<td width=\\\"1000\\\" colspan=\\\"3\\\" align=\\\"right\\\" height=\\\"20\\\" background=\\\"/images/bg_global_nav.jpg\\\"><a href=\\\"/default.asp\\\" class=\\\"nav_global\\\">Home</a> &nbsp; | &nbsp; <a href=\\\"/contact_us.asp\\\" class=\\\"nav_global\\\">Customer Service</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Order by Catalog</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/quick_order.asp\\\" class=\\\"nav_global\\\">Quick Order</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/my_account.asp\\\" class=\\\"nav_global\\\">My Account</a> &nbsp; | &nbsp; <a href=\\\"/garden_center/shopping_cart.asp\\\" class=\\\"nav_global\\\">View Cart: </a><span style=\\\"color: #b21c03;\\\">3 Items ()</span>&nbsp;<a href=\\\"/garden_center/account_login.asp\\\" class=\\\"nav_global\\\">Log In</a><img src=\\\"/images/pixel.gif\\\" width=\\\"19\\\" height=\\\"1\\\" /></td>-->\\r\\n<td width=\\\"1000\\\" colspan=\\\"3\\\" height=\\\"40\\\" style=\\\"background-color:#FFFFFF; height:20px;\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\"><tr>\\r\\n<td align=\\\"left\\\" style=\\\"padding-top:17px; padding-bottom:13px;\\\">\\r\\n<img src=\\\"/images/pixel.gif\\\" width=\\\"22\\\" height=\\\"1\\\" /><a href=\\\"/default.aspx\\\" class=\\\"nav_top\\\">HOME</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/WhyOrganic.aspx\\\" class=\\\"nav_top\\\">WHY ORGANIC?</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/catalog_request.aspx\\\" class=\\\"nav_top\\\">DOWNLOAD A CATALOG</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a href=\\\"/garden_center/my_account.aspx\\\" class=\\\"nav_top\\\">MY ACCOUNT</a><img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" />|<img src=\\\"/images/pixel.gif\\\" width=\\\"14\\\" height=\\\"1\\\" /><a id=\\\"ctl00_LoginSummary1_NotLoggedInHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/account_login.aspx\\\">LOGIN</a>\\r\\n\\r\\n</td>\\r\\n<td align=\\\"right\\\">\\r\\n<table cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\">\\r\\n    <tr>\\r\\n    <td style=\\\"text-align:right; padding-top:5px; padding-bottom:5px;\\\"><img src=\\\"/images/layout/soc_icon_ViewBasket.png\\\" /></td>\\r\\n    <td style=\\\"padding-left:5px; padding-right:0px; text-align:right; padding-top:17px; padding-bottom:13px;\\\"><span id=\\\"ctl00_cartSummaryUpdatePanel\\\"><a id=\\\"ctl00_CartSummary1_CartHyperLink\\\" class=\\\"nav_top\\\" href=\\\"/garden_center/cart.aspx\\\" style=\\\"color:#CE0000;\\\">VIEW BASKET:</a> <span style=\\\"color: #CE0000; font-weight:normal;\\\" class=\\\"nav_top\\\"><span id=\\\"ctl00_CartSummary1_NumberOfItemsLabel\\\">0</span> ITEMS<img src=\\\"/images/pixel.gif\\\" width=\\\"4\\\" height=\\\"1\\\" />(<span id=\\\"ctl00_CartSummary1_SubTotalLabel\\\">$0.00</span>)</span></span></td>\\r\\n    <td>\\r\\n        <img src=\\\"/images/pixel.gif\\\" width=\\\"21\\\" height=\\\"1\\\" />\\r\\n    </td>\\r\\n    </tr>\\r\\n</table>\\r\\n</td></tr></table>\\r\\n\\r\\n\\r\\n</td>\\r\\n\\t\\t<!--------------- End Global Nav ------------- -->\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n<td rowspan=\\\"5\\\" style=\\\"width:8px; background-image:url(/images/layout/soc_shadow_right.png);\\\">&nbsp;&nbsp;</td>\\r\\n\\r\\n\\r\\n\\t</tr>\\r\\n\\t<tr><!--------------- Start Logo/Tagline ------------- -->\\r\\n\\t\\t<td colspan=\\\"2\\\" valign=\\\"top\\\" height=\\\"134\\\" bgcolor=\\\"#F5F4E9\\\"><div style=\\\"height: 134px; width:100%; text-align: left;\\\"><a style=\\\"width:100%\\\" href=\\\"/\\\"><img src=\\\"/images/top.png\\\" width=\\\"100%\\\" style=\\\"width:100%;\\\" height=\\\"134\\\" border=\\\"0\\\" /></a></div></td>\\r\\n\\t\\t<!--------------- End Logo/Tagline ------------- -->\\r\\n\\t\\t\\r\\n\\t</tr>\\r\\n\\t<tr>\\r\\n\\t\\t<td width=\\\"154\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#BAB38F\\\" style=\\\"width:154;\\\"><div style=\\\" border-style:solid; border-width:1px; border-color:#BAB38F\\\">\\r\\n\\t\\t<!-- Start Dynamic Nav -->\\r\\n\\t\\t\\t<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu.css\\\">\\r\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/css/jquery.jdMenu2.css\\\">\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.dimensions.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.positionBy.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.bgiframe.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu.js\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" src=\\\"/scripts/jquery.jdMenu2.js\\\"></script>\\r\\n    \\r\\n\\t<div class=\\\"menu_header1\\\"><br /><br />SEEDS &amp; SUPPLIES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu jd_menu_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=1\\\">Seeds</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=2\\\">New Introductions</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetables</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herbs</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flowers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=200\\\">Live Plants</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=201\\\">Apple Trees</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=341\\\">Seedlings</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=202\\\">Asparagus Crowns</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=203\\\">Garlic</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=404\\\">Potatoes</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=206\\\">Rhubarb</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=629\\\">Horseradish</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools & Supplies</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=362\\\">Getting Started</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=375\\\">Four Season Growing</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=365\\\">Season Extenders</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=379\\\">Soil & Composting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=386\\\">Cultivating Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=381\\\">Greenhouses</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=385\\\">Hand Tools</a>&nbsp;</li>\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=376\\\">Watering</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\t</ul>\\r\\n\\t\\t\\r\\n\\t<br />\\r\\n\\t<br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">INFORMATION&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=395\\\">Urban Gardening</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Four Season Growing</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/garden_center/browse_category.aspx?id=107\\\">Gourmet Greens</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#Extension\\\">Season Extension</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx\\\">Summer Sowing For Fall Harvest</a>&nbsp;</li>\\r\\n<li><a href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a>&nbsp;</li>\\r\\n<li><a href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/digging/default.aspx\\\">Gardening How-To</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a>&nbsp;</li>\\r\\n<li><a href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a>&nbsp;</li>\\r\\n<li><a href=\\\"/planting_guide.pdf\\\" target=\\\"_blank\\\">Planting Guide</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/about/default.aspx\\\">About Us</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/about/organic_seeds.aspx\\\">Our Organic Seeds</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/our_guarantee.aspx\\\">Our Guarantee</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-events.aspx\\\">Events</a>&nbsp;</li>\\r\\n<li><a href=\\\"/about/job_opportunities.aspx\\\">Job Opportunities</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t</ul>\\r\\n\\t<br /><br />\\r\\n\\t<div class=\\\"jd_menu2 menu_header\\\">SERVICES&nbsp;</div>\\r\\n\\t<ul class=\\\"jd_menu2 jd_menu2_vertical\\\">\\r\\n\\t\\r\\n<li><a href=\\\"/donations.aspx\\\">Donation Program</a>&nbsp;\\r\\n</li>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Resources</a>&nbsp;\\r\\n<ul>\\r\\n\\r\\n<li><a href=\\\"/soc-links.aspx\\\">Farming &amp; Gardening Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Environment\\\">Environment, Community &amp; Health Resources</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Ecology\\\">Ecology-Minded Companies & Publishers</a>&nbsp;</li>\\r\\n<li><a href=\\\"/soc-links.aspx#Sustainable\\\">Farmers' Markets & Sustainable Cuisine</a>&nbsp;</li>\\r\\n</ul>\\r\\n\\r\\n</li>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t<li><a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" target=\\\"_blank\\\">Seeds of Change Food&nbsp;</a></li>\\r\\n\\t</ul>\\r\\n\\r\\n\\t\\t<!-- End Dynamic Nav -->\\r\\n\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"846\\\" bgcolor=\\\"#F5F4E9\\\" valign=\\\"top\\\">\\r\\n\\t\\t<table width=\\\"100%\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:10px;\\\" ><td style=\\\"height:10px;\\\" colspan=\\\"6\\\">&nbsp;</td></tr>\\r\\n\\t\\t<tr><td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"660\\\" valign=\\\"top\\\">\\r\\n\\t\\t\\r\\n        \\r\\n        <!-- Begin Content Area -->\\r\\n\\t\\r\\n    \\r\\n\\r\\n<script src=\\\"/scripts/popup.js\\\" type=\\\"text/javascript\\\"></script>\\r\\n<script type=\\\"text/javascript\\\" language=\\\"javascript\\\">\\r\\n//<!--\\r\\n\\r\\nvar hasFutureShipDate = true;\\r\\nfunction LaunchModal(prodid)\\r\\n{\\r\\n\\r\\nvar currentShipTo = \\\"Myself\\\";\\r\\n\\r\\nif(!hasFutureShipDate)\\r\\n{\\r\\n    return true;\\r\\n}\\r\\n\\r\\nvar shiptoname = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nif(shiptoname.length > 0)\\r\\n{\\r\\n    currentShipTo=shiptoname;\\r\\n} else\\r\\n{\\r\\n    var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n    currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n}\\r\\n\\r\\n//var currentShipTo = \\\"Myself\\\";\\r\\n\\r\\n//var shipToDD = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD')\\r\\n\\r\\n//currentShipTo = shipToDD.options[shipToDD.selectedIndex].value\\r\\n\\r\\n//alert(currentShipTo);\\r\\n\\r\\n//if(document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value.length > 0)\\r\\n//  currentShipTo = document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB').value\\r\\n\\r\\nvar myShipTos = [];\\r\\n\\r\\n\\r\\n\\r\\nvar found = false;\\r\\n\\r\\nfor (x in myShipTos)\\r\\n{\\r\\nif(myShipTos[x] == currentShipTo)\\r\\n    found = true;\\r\\n}\\r\\n\\r\\n//alert(found);\\r\\n\\r\\n//if(found)\\r\\n    //return true;\\r\\n    \\r\\n\\r\\n     \\r\\nmodalActive=true;\\r\\ndocument.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=true;\\r\\n\\r\\nPopup.showModal('modal');\\r\\n\\r\\nvar iframe1\\r\\niframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n//iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo;\\r\\ndocument.getElementById('PopUpIFrame').src=\\\"/modalcontroller.aspx?shipto=\\\" + currentShipTo+ \\\"&productId=\\\" + prodid;;\\r\\n\\r\\n//document.getElementById('PopUpIFrame').document.location.reload();\\r\\n//document.getElementById('PopUpIFrame').contentWindow.setValues(\\\"john\\\"); \\r\\n\\r\\n//iframe1.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n\\r\\n//alert(document.getElementById('PopUpIFrame').document.getElementById('zipcodeText').value);\\r\\n//document.frames(0).getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n////document.PopUpIFrame.getElementById(\\\"zipcodeText\\\").focus();\\r\\n// var eyeframe; \\r\\n//            modalframe = document.getElementById('PopUpIFrame'); \\r\\n//                                     \\r\\n//            var modalframedoc; \\r\\n//            modalframedoc = modalframe.contentWindow ? modalframe.contentWindow.document: modalframe.contentDocument; \\r\\n//            var textbox =  modalframedoc.getElementbyId(\\\"zipcodeText\\\")\\r\\n//            textbox.focus();\\r\\n//            textbox.value = \\\"\\\";\\r\\n            \\r\\n            //modalframedoc.getElementbyId(\\\"zipcodeText\\\").focus();\\r\\n\\r\\nreturn false;\\r\\n\\r\\n}\\r\\n\\r\\nfunction CloseModal(zip, shipto, postFlag)\\r\\n{\\r\\n    \\r\\n \\r\\n    //var val = document.getElementById(\\\"zipcodeText\\\").value;\\r\\n    \\r\\n    var iframe1\\r\\n    iframe1 = document.getElementById(\\\"PopUpIFrame\\\");\\r\\n    //iframe1.document.getElementById(\\\"zipcodeText\\\").focus();\\r\\n\\r\\n    //var val = document.getElementById('PopUpIFrame').contentWindow.myOtherFunc(); \\r\\n\\r\\n \\r\\n    if (zip.length == 5  && IsNumeric(zip))\\r\\n    {\\r\\n        //alert(document.getElementById('').value);\\r\\n        //aspnetForm.submit()\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n        //alert(\\\"Zip code: \\\" + zip);\\r\\n        //alert(\\\"Ship to: \\\" + shipto);\\r\\n        document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden').value = zip;\\r\\n        //alert(zip);\\r\\n        Popup.hide('modal'); \\r\\n        modalActive=false;\\r\\n        if(postFlag)\\r\\n            __doPostBack('AddtoCartButton',zip);\\r\\n    } else\\r\\n    {\\r\\n        if(postFlag)\\r\\n        {\\r\\n            alert(\\\"Please enter a valid zip code.\\\");\\r\\n        }\\r\\n        else {\\r\\n                  Popup.hide('modal'); \\r\\n                  modalActive=false;\\r\\n                  document.getElementById('ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton').disabled=false;\\r\\n            \\r\\n            }\\r\\n    }\\r\\n   \\r\\n   \\r\\n    \\r\\n}\\r\\n\\r\\n\\r\\nfunction IsNumeric(sText)\\r\\n{\\r\\n   var ValidChars = \\\"0123456789\\\";\\r\\n   var IsNumber=true;\\r\\n   var Char;\\r\\n\\r\\n \\r\\n   for (i = 0; i < sText.length && IsNumber == true; i++) \\r\\n      { \\r\\n      Char = sText.charAt(i); \\r\\n      if (ValidChars.indexOf(Char) == -1) \\r\\n         {\\r\\n         IsNumber = false;\\r\\n         }\\r\\n      }\\r\\n   return IsNumber;\\r\\n   \\r\\n}\\r\\n\\r\\nfunction CheckRecipient(newVar,currentVar)\\r\\n{\\r\\n    if(document.getElementById(currentVar).value == document.getElementById(newVar).value || document.getElementById(newVar).value == '')\\r\\n    {\\r\\n        if(document.getElementById(newVar).value == '')\\r\\n            alert(\\\"Please enter a recipient name.\\\");\\r\\n        else\\r\\n            alert(\\\"You already have a recipient named \\\" +  document.getElementById(currentVar).value);\\r\\n        \\r\\n        return false;\\r\\n    }else\\r\\n        return true;\\r\\n    \\r\\n}\\r\\n\\r\\nfunction CheckQty(mode, cartqty)\\r\\n{\\r\\n\\r\\n    var allfields = document.getElementsByTagName(\\\"input\\\");\\r\\n    var qtyFlag = false\\r\\n    var futureShipProdId = \\\"\\\";\\r\\n    for (var i=0; i<allfields.length; i++){\\r\\n        var field = allfields[i];\\r\\n        if ((field.getAttribute(\\\"type\\\") == \\\"text\\\") &&  (field.getAttribute(\\\"Id\\\").indexOf(\\\"Qty\\\") > 0) && (field.getAttribute(\\\"Id\\\").indexOf(\\\"QtyTBMin\\\") == -1)) \\r\\n        {\\r\\n            var currentFieldName = field.getAttribute(\\\"Id\\\");\\r\\n            //alert(currentFieldName+'Min');\\r\\n            if(!IsNumeric(field.value))\\r\\n            {\\r\\n                alert(\\\"Please enter a valid quantity!\\\")\\r\\n                field.select();\\r\\n                field.focus();\\r\\n                \\r\\n                return false;\\r\\n            }\\r\\n                                \\r\\n            if(field.value > 0)\\r\\n            {\\r\\n               // alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'HiddenProdId').value);\\r\\n                if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                    futureShipProdId = document.getElementById(currentFieldName+'HiddenProdId').value;  \\r\\n                    \\r\\n                if(field.value < document.getElementById(currentFieldName+'Min').value)\\r\\n                {                       \\r\\n                    alert(\\\"Min value for \\\" + document.getElementById(currentFieldName+'MinName').value + \\\" is \\\" + document.getElementById(currentFieldName+'Min').value);\\r\\n                    field.select();\\r\\n                    field.focus();\\r\\n                    return false;                \\r\\n                }\\r\\n                qtyFlag = true;\\r\\n           }\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    \\r\\n    if(!qtyFlag)\\r\\n    {\\r\\n        if(mode==1)\\r\\n        {\\r\\n            alert(\\\"Please enter quantity of item(s) you wish to order!\\\");\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            if(cartqty < 1)\\r\\n                alert(\\\"Your cart is currently empty.\\\\n\\\\nPlease enter quantity of item(s) you wish to order!\\\");\\r\\n            else\\r\\n                qtyFlag = true;\\r\\n        }\\r\\n        \\r\\n    }\\r\\n       if(qtyFlag)\\r\\n       {\\r\\n        if(futureShipProdId.indexOf(\\\"Y\\\") == -1)\\r\\n                return true;\\r\\n                \\r\\n         return LaunchModal(futureShipProdId);\\r\\n           \\r\\n       }\\r\\n            \\r\\n    \\r\\n    return qtyFlag;\\r\\n}\\r\\n//-->\\r\\n</script>\\r\\n<link href=\\\"/jquery/main.css\\\" type=\\\"text/css\\\" rel=\\\"stylesheet\\\"/>\\r\\n\\t\\r\\n<div id=\\\"modal\\\" style=\\\" width:250px; height:100px; border:1px solid black; background-color:#304c05; padding:25px; color:#FFFFFF; font-size:150%; text-align:center; display:none;\\\">\\r\\n\\t\\r\\n\\t<iframe id=\\\"PopUpIFrame\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\" name=\\\"PopUpIFrame\\\" src=\\\"/modalblank.aspx\\\" width=\\\"290\\\" height=\\\"140\\\"></iframe>\\r\\n\\t\\r\\n    \\r\\n    <input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$zipcodeHidden\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_zipcodeHidden\\\" />\\r\\n</div>\\r\\n\\r\\n<div id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsPanel\\\">\\r\\n\\t\\t\\r\\n<div class=\\\"centercontent\\\">\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"620\\\"><tr><td valign=\\\"top\\\"><span class=\\\"subhead\\\"><a href=\\\"/default.aspx\\\" class=\\\"breadcrumb\\\">Seeds &amp; Supplies</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=1\\\" class=\\\"breadcrumb\\\">Seeds</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=123\\\" class=\\\"breadcrumb\\\">Vegetables</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=180\\\" class=\\\"breadcrumb\\\">Squash & Pumpkins</a> <span class=\\\"breadcrumb\\\">&gt;</span> <a href=\\\"browse_category.aspx?id=183\\\" class=\\\"breadcrumbActive\\\"><b>Winter Squash</b></a></span></td><td><div style=\\\"height: 41px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"41\\\" /></div></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr><td><span class=\\\"header\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_HeaderLabel\\\">Gold Nugget</span></span></td></tr></table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n        <hr style=\\\"border:none;border-top:dotted 1px #6C5729;\\\"\\t\\t/>\\r\\n\\t\\t<br /><br />\\r\\n\\t\\t<table width=\\\"570\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"176\\\" valign=\\\"top\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductImage\\\" alt=\\\"Item Photo\\\" border=\\\"0\\\" src=\\\"/images/product_shots/PPS14165B.jpg\\\" alt=\\\"Product PS14165\\\" height=\\\"176\\\" width=\\\"176\\\" border=\\\"0\\\" /></td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image2\\\" src=\\\"/images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"194\\\" valign=\\\"top\\\"><span class=\\\"contenthead\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TopNameLabel\\\">Gold Nugget</span></span><br />\\r\\n\\t\\t\\t\\t<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_SubTitleLabel\\\" class=\\\"contentsubhead\\\"><em>Cucurbita maxima<br />\\r\\n</em>Tender&nbsp;Annual<br />\\r\\n&nbsp;</span>\\r\\n\\t\\t\\t\\t<p><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_DescriptionLabel\\\" class=\\\"content\\\">1-2 lbs. (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.</span></p>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<p><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_TellaFriendHyperLink\\\" class=\\\"linkbutton\\\" href=\\\"/tellafriend.aspx?Item_No=PS14165\\\">SHOW THIS ITEM TO OTHERS</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></p>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td width=\\\"15\\\"><div style=\\\"height: 1px;\\\"><img id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_image1\\\" src=\\\"../images/pixel.gif\\\" height=\\\"1\\\" width=\\\"15\\\" border=\\\"0\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"170\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_RightColumnLabel\\\"><b>Planting Depth: 1&quot;<br />\\r\\nSoil Temp. for Germ.: 70-90&deg;F<br />\\r\\nDays to Germ.: 7-10<br />\\r\\nPlant Spacing: 3'-4'Apart<br />\\r\\nDays to Maturity: 75-95<br />\\r\\nFull Sun<br />\\r\\nModerate Water<br />\\r\\n&nbsp;</b></span>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table><br />\\r\\n\\t\\t\\r\\n\\t\\t<table width=\\\"620\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t<tr>\\r\\n              \\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_top_lft.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"594\\\" background=\\\"/images/bg_box_top.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 594px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" \\r\\n                            height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_top_rt.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td valign=\\\"top\\\" bgcolor=\\\"#D7D79E\\\" class=\\\"subhead\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"28\\\" height=\\\"1\\\" /></div>Choose a Size:<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"594\\\" height=\\\"5\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n        \\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\r\\n<span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList\\\" style=\\\"display:inline-block;\\\"><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#FFFBC4\\\">\\r\\n\\t\\t\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNameLabel\\\">Squash, Winter, Gold Nugget- Pack of 20</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#:<span style=\\\"font-weight: bold;\\\"> <span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemNumberLabel\\\">01593</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_HiddenProdId\\\" value=\\\"957\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_ItemPriceLabel\\\">$3.49</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBHiddenProdId\\\" value=\\\"957\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl00$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl00_QtyTBMinName\\\" value=\\\"Squash, Winter, Gold Nugget- Pack of 20\\\" />\\r\\n                           </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_lt.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n</span><span>\\r\\n<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"left\\\" valign=\\\"bottom\\\" bgcolor=\\\"#E2E2B9\\\">\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td height=\\\"15\\\" colspan=\\\"8\\\"><span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNameLabel\\\">Gold Nugget Winter Squash- Pack of 250</span></span></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\" height=\\\"15\\\">&nbsp;<br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"50\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"150\\\" nowrap align=\\\"right\\\">Item#: <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemNumberLabel\\\">06696</span></span> </td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"130\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp; &nbsp; </td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"188\\\" align=\\\"center\\\"><span style=\\\"font-weight: normal;\\\"><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$HiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_HiddenProdId\\\" value=\\\"7564\\\" />Price:</span> <span style=\\\"font-weight: bold;\\\"><span id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_ItemPriceLabel\\\">$19.99</span></span><br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"188\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"15\\\"> &nbsp;&nbsp; </td>\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTD\\\" width=\\\"60\\\">Quantity: &nbsp;<br /><img src=\\\"/images/pixel.gif\\\" width=\\\"60\\\" height=\\\"1\\\"></td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\t\\t<td id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_qtyTextTD\\\" width=\\\"20\\\" valign=\\\"middle\\\"><input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTB\\\" type=\\\"text\\\" value=\\\"0\\\" maxlength=\\\"4\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTB\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBHiddenProdId\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBHiddenProdId\\\" value=\\\"7564\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMin\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMin\\\" value=\\\"1\\\" /><input type=\\\"hidden\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ProductDetailsDataList$ctl01$QtyTBMinName\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ProductDetailsDataList_ctl01_QtyTBMinName\\\" value=\\\"Gold Nugget Winter Squash- Pack of 250\\\" />\\r\\n                       </td>\\r\\n\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_dk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\r\\n</span></span>\\r\\n\\r\\n\\r\\n\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr style=\\\"display:none;\\\" >\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#B9B999\\\"><br />\\r\\n\\t\\t\\t\\t<!-- Recipient Info -->\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"227\\\" rowspan=\\\"2\\\"></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"215\\\" valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">Select \\\"Ship To\\\" Recipient:</span></td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"112\\\" valign=\\\"top\\\" align=\\\"right\\\">\\r\\n\\t\\t    <select name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToDD\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToDD\\\">\\r\\n\\t\\t<option value=\\\"Myself\\\">Myself</option>\\r\\n\\r\\n\\t</select>\\r\\n           <br /><br /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t\\t<tr style=\\\"display:none;\\\">\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\"><span style=\\\"font-weight: bold;\\\">New Recipient Name:</span><br /><span style=\\\"font-style: italic; font-weight: normal;\\\">Enter the recipient's first name only. We'll ask for the recipient's full name and address later.</span><br /><br /></td>\\r\\n\\t\\t\\t\\t\\t\\t<td valign=\\\"top\\\" align=\\\"right\\\">\\r\\n                            <input name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$ShipToFirstNameTB\\\" type=\\\"text\\\" maxlength=\\\"15\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ShipToFirstNameTB\\\" /></td>\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_drk.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"620\\\" colspan=\\\"3\\\" bgcolor=\\\"#330000\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"620\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_lft_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></div></td>\\r\\n\\t\\t\\t\\t<!-- Add to Cart Buttons -->\\r\\n\\t\\t\\t\\t<td align=\\\"center\\\" bgcolor=\\\"#D7D79E\\\"><br />\\r\\n\\t\\t\\t\\t<table width=\\\"594\\\" border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"bottom\\\">&nbsp;</td>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"bottom\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n                            <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$AddtoCartButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_AddtoCartButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_add_basket_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_add_basket_off.gif';\\\" src=\\\"/images/layout/buttons/btn_add_basket_off.gif\\\" alt=\\\"Add to Your Cart\\\" onclick=\\\"return CheckQty(1,0);\\\" border=\\\"0\\\" />\\r\\n                            <br /><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"1\\\" height=\\\"5\\\" /></div><br />\\r\\n                        </td>\\r\\n                    </tr>\\r\\n                    <tr>\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"344\\\" valign=\\\"middle\\\"><a id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_ContinueShoppingHyperLink\\\" class=\\\"linkbuttongreen\\\" href=\\\"/garden_center/browse_category.aspx?id=406\\\">CONTINUE SHOPPING</a><span class=\\\"linkbuttonarrow\\\">&nbsp;&#9658;</span></td>\\r\\n\\r\\n\\t\\t\\t\\t\\t\\t<td width=\\\"139\\\" valign=\\\"middle\\\" align=\\\"right\\\" style=\\\"text-align:right;\\\">\\r\\n\\t\\t\\t\\t\\t\\t    <input type=\\\"image\\\" name=\\\"ctl00$MainContentPlaceHolder$ProductDetails1$CheckoutButton\\\" id=\\\"ctl00_MainContentPlaceHolder_ProductDetails1_CheckoutButton\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_checkout_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_checkout_off.gif';\\\" alt=\\\"Proceed To Checkout\\\" src=\\\"/images/layout/buttons/btn_checkout_off.gif\\\" onclick=\\\"return CheckQty(2,0);\\\" border=\\\"0\\\" />\\r\\n                            \\r\\n\\t\\t\\t\\t\\t\\t</td>\\r\\n\\r\\n\\t\\t\\t\\t\\t</tr>\\r\\n\\t\\t\\t\\t</table>\\r\\n\\t\\t\\t\\t</td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"13\\\" height=\\\"1\\\"></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t\\t<tr>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_lft_gr.gif\\\">\\r\\n                    <div style=\\\"height: 13px; width: 12px;\\\"><img src=\\\"/images/corner_box_bot_lft.gif\\\" \\r\\n                            width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td background=\\\"/images/bg_box_bot.gif\\\"><div style=\\\"height: 1px;\\\"><img src=\\\"/images/pixel.gif\\\" width=\\\"544\\\" height=\\\"1\\\" /></div></td>\\r\\n\\t\\t\\t\\t<td width=\\\"13\\\" valign=\\\"top\\\" background=\\\"/images/bg_box_rt_gr.gif\\\"><div style=\\\"height: 13px;\\\">\\r\\n                    <img src=\\\"/images/corner_box_bot_rt.gif\\\" width=\\\"13\\\" height=\\\"13\\\" /></div></td>\\r\\n\\t\\t\\t</tr>\\r\\n\\t\\t</table>\\r\\n\\t\\t\\r\\n    \\r\\n\\r\\n\\t\\r\\n</div>\\r\\n<div class=\\\"headline\\\">\\r\\n    <p class=\\\"copytitle\\\">Supporting Sustainable Organic Agriculture Since 1989</p>\\r\\n    <p class=\\\"copycontent\\\">In 1989, Seeds of Change began with a simple mission: to preserve biodiversity and promote sustainable, organic agriculture. By cultivating and sharing an extensive range of organically grown vegetable, flower, herb and cover crop seeds, we have honored that mission for almost 25 years.</p>\\r\\n</div>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n        <!-- End Content Area -->\\r\\n\\t<!--\\r\\n\\t\\t<p></p>\\r\\n<div style=\\\"text-align: center;\\\">\\r\\n\\t\\t<img src=\\\"/images/pix_dk_green.gif\\\" width=\\\"640\\\" height=\\\"1\\\" /><br /><br />\\r\\n\\t\\t</div>\\r\\n\\t\\t<div style=\\\"text-align: center;\\\">\\r\\n    <a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"/privacy.aspx\\\" class=\\\"nav_global\\\">Privacy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a>\\r\\n\\t<br /><br />\\r\\n\\tGardener Customer Service is available 24/7 at 1-888-762-7333.\\r\\n\\t<br />\\r\\n\\tOrders can only be accepted for U.S. and Canadian addresses.\\r\\n\\t<br /><br />\\r\\n\\t&reg;/&trade; Trademark &copy; 2010 Seeds of Change..\\r\\n\\t<br /><br />\\r\\n</div>\\r\\n-->\\r\\n\\t\\t</td>\\r\\n\\t\\t<td width=\\\"10\\\">&nbsp;</td>\\r\\n\\t\\t<td width=\\\"1\\\" style=\\\"background-color:#C1BD95;\\\"><img src=\\\"/images/layout/line.gif\\\" width=\\\"1px\\\" height=\\\"100%\\\" style=\\\"width:1px;height:100%\\\" /></td>\\r\\n\\t\\t\\r\\n\\t\\t<td width=\\\"165\\\" height=\\\"100\\\" valign=\\\"top\\\" align=\\\"center\\\" bgcolor=\\\"#F5F4E9\\\">\\r\\n\\t\\t<div style=\\\"padding-left:10px; \\\">\\r\\n\\t\\t<div align=\\\"left\\\" style=\\\"margin-top:1px;\\\">\\r\\n\\t\\t\\t\\t\\t<!-- ---- Start Search ---- -->\\r\\n        <div class=\\\"menuheadright\\\">SEARCH</div>\\r\\n\\t\\t<input name=\\\"ctl00$SearchTB\\\" type=\\\"text\\\" id=\\\"ctl00_SearchTB\\\" onkeypress=\\\"return checkKeycode(event);\\\" style=\\\"width: 140px; margin-bottom: 11px;\\\" />\\r\\n\\t\\t<select name=\\\"ctl00$SearchTypeDD\\\" id=\\\"ctl00_SearchTypeDD\\\" style=\\\"width: 145px; font-family:Arial; font-size:11px; color:#000\\\">\\r\\n\\t<option value=\\\"1\\\">Products</option>\\r\\n\\t<option value=\\\"2\\\">eNewsletters</option>\\r\\n\\t<option selected=\\\"selected\\\" value=\\\"3\\\">Entire Site</option>\\r\\n\\r\\n</select>                      \\r\\n\\t\\t  <input type=\\\"image\\\" name=\\\"ctl00$SearchButton\\\" id=\\\"ctl00_SearchButton\\\" src=\\\"/images/layout/buttons/btn_search_off.gif\\\" onmouseover=\\\"this.src='/images/layout/buttons/btn_search_on.gif';\\\" onmouseout=\\\"this.src='/images/layout/buttons/btn_search_off.gif';\\\" src=\\\"\\\" onclick=\\\"CallSearch();return false;\\\" border=\\\"0\\\" style=\\\"margin-top: 11px; \\\" />\\r\\n\\t\\t\\t\\t<!------ End Search ---- -->\\r\\n\\r\\n\\t\\t</div>\\r\\n\\t\\t\\t\\t  \\r\\n\\t\\t\\t\\r\\n\\t\\t<!------ Start Food Area  ------>\\r\\n        <table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\">\\r\\n\\t\\t<tr style=\\\"height:17px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">HOW TO ORDER</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/browse_category.aspx?id=1\\\" class=\\\"menucon1\\\">Order Seeds Online</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/garden_center/quick_order.aspx\\\" class=\\\"menucon1\\\">Catalog Quick Order</a></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright1\\\"><a href=\\\"/contact_us.aspx\\\" class=\\\"menucon1\\\">Contact Us</a><br /><br /></td></tr>\\r\\n\\t\\t\\r\\n\\t\\t<tr style=\\\"height:10px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" class=\\\"menuheadright\\\">FOLLOW US ON</td></tr>\\r\\n\\t\\t<tr><td align=\\\"left\\\" style=\\\"padding-top:2px;\\\"><a href=\\\"https://www.facebook.com/seedsofchange\\\">\\r\\n            <img src=\\\"/images/layout/soc_icon_facebook.png\\\" border=\\\"0\\\" /></a>&nbsp;&nbsp;<a \\r\\n                href=\\\"http://twitter.com/#!/SeedsofChange\\\" shape=\\\"rect\\\"><img src=\\\"/images/layout/soc_icon_twitter.png\\\" border=\\\"0\\\" /></a></td></tr>\\r\\n\\t\\t<tr style=\\\"height:18px;\\\"><td></td></tr>\\r\\n\\t\\t<tr style=\\\"height:1px;\\\"><td align=\\\"left\\\"><img src=\\\"/images/row.jpg\\\" width=\\\"145px\\\"/></td></tr>\\r\\n\\t\\t<tr style=\\\"height:23px;\\\"><td></td></tr>\\r\\n\\t\\t<tr><td align=\\\"center\\\"><img src=\\\"/images/layout/soc_icon_USDA_organic.png\\\" /></td></tr>\\r\\n\\t\\t<tr><td style=\\\"padding-top:10px;\\\" align=\\\"center\\\"><a href=\\\"/about/organic_seeds.aspx\\\">Always certified organic</a></td></tr>\\r\\n        </table>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t<table><tr><td height=\\\"15\\\"></td></tr></table>\\r\\n\\t    \\r\\n\\t\\t<!------ End Food Area  ------>\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t\\t\\t<!-- end right side bar -->\\r\\n\\t\\t\\t</div>\\r\\n\\t\\t</td>\\r\\n\\t\\t\\r\\n\\t\\t\\r\\n\\t\\t</tr></table>\\r\\n\\t\\t</td>\\r\\n\\t\\t<!--------------- End Main Content ------------- -->\\r\\n\\t</tr>\\r\\n\\t<tr><td colspan=\\\"2\\\" style=\\\"background-color:White;\\\">\\r\\n\\t\\r\\n<table style=\\\"margin-left:180px;margin-top:24px; margin-bottom:24px;\\\">\\r\\n\\t<tr>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333\\\">PRODUCTS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=123\\\">Vegetable Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=29\\\">Flower Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=77\\\">Herb Seed</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=336\\\">Cover Crops</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=201\\\">Trees</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/detailedCategoryDisplay.aspx?id=209\\\">Seedlings</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/browse_category.aspx?id=361\\\">Tools &amp; Supplies</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">GROWING TIPS</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/garden_info.aspx\\\">Gardening Information</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/glossary.aspx\\\">Glossary of Terms</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/enewsletter/issue_68/successionplanting.aspx#Succession\\\">Succession Planting</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#CoverCopping\\\">Cover Cropping</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/fall_gardening/default.aspx#SeedSaving\\\">Seed Saving</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/digging/zone_chart.aspx\\\">Zone Chart</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/planting_guide.pdf\\\">Planting Guide</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/soc-links.aspx\\\">Resources</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Biodiversity.aspx\\\">Biodiversity</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/Sustainability.aspx\\\">Sustainability</a></div>\\r\\n\\t</td>\\r\\n\\t<td style=\\\"width:229px; vertical-align:top;\\\">\\r\\n\\t    <div style=\\\"font-family:Arial; font-weight:bold; font-size:11px; color:#333333;\\\">CUSTOMER SERVICE</div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/FAQ_seed.aspx\\\">FAQs</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/CustomerService.aspx\\\">Customer Service</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/contact_us.aspx\\\">Contact Us</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/garden_center/catalog_request.aspx\\\">Download a Catalog</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/our_guarantee.aspx\\\">Guarantee</a></div>\\r\\n\\t    <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/about/safe_seed_pledge.aspx\\\">Safe Seed Pledge</a></div>\\r\\n        <div><a class=\\\"linkbuttonfooter\\\" target=\\\"_blank\\\" href=\\\"/SOC_OGCERT.pdf\\\">Organic Certification</a></div>\\r\\n\\t    <!-- <div><a class=\\\"linkbuttonfooter\\\" href=\\\"/retailers/quick_order.pdf\\\">Wholesale Order Form</a></div> -->\\r\\n\\t</td>\\r\\n\\t</tr>\\r\\n</table>\\r\\n\\t</td></tr>\\r\\n</table>\\r\\n\\r\\n<table border=\\\"0\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" width=\\\"1000\\\" style=\\\"text-align: left; margin-top:24px;\\\">\\r\\n<tr>\\r\\n<td align=\\\"center\\\">\\r\\n    <table>\\r\\n        <tr><td style=\\\"text-align:left; color:#7F9263;font-family:Arial; font-weight:bold; font-size:11px;\\\"><a href=\\\"/shipping_info.aspx\\\" class=\\\"nav_global\\\">Shipping Info</a>|<a href=\\\"/contact_us.aspx\\\" class=\\\"nav_global\\\">Contact Us</a>|<a href=\\\"http://www.mars.com/global/policies/privacy/pp-english.aspx\\\" target=\\\"_blank\\\" class=\\\"nav_global\\\">Privacy Policy</a>|<a href=\\\"/sitemap.aspx\\\" class=\\\"nav_global\\\">Site Map</a>|<a href=\\\"/about/organic_seeds.aspx\\\" class=\\\"nav_global\\\">Organic Certification</a>|<a href=\\\"http://www.seedsofchangefoods.com/our_foods/\\\" class=\\\"nav_global\\\">Our Foods</a></td></tr> \\r\\n        \\r\\n        <tr><td style=\\\"text-align:left; padding-top:18px; font-family:Arial; font-weight:normal; font-size:11px; color:#333333\\\">&reg;/TM Trademark &copy; 2012 Seeds of Change..</td></tr> \\r\\n    </table>\\r\\n</td>\\r\\n</tr>\\r\\n</table>\\r\\n\\r\\n</div>\\r\\n<br /> \\r\\n\\r\\n\\r\\n    \\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\n//<![CDATA[\\r\\nSys.Application.initialize();\\r\\n//]]>\\r\\n</script>\\r\\n</form>\\r\\n\\r\\n<!-- GOOGLE ANALYTICS -->\\r\\n\\r\\n<script type=\\\"text/javascript\\\">\\r\\nvar gaJsHost = ((\\\"https:\\\" == document.location.protocol) ? \\\"https://ssl.\\\" : \\\"http://www.\\\");\\r\\ndocument.write(unescape(\\\"%3Cscript src='\\\" + gaJsHost + \\\"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\\\"));\\r\\n</script>\\r\\n<script type=\\\"text/javascript\\\">\\r\\ntry {\\r\\nvar pageTracker = _gat._getTracker(\\\"UA-8172924-1\\\");\\r\\npageTracker._trackPageview();\\r\\n} catch(err) {}</script>\\r\\n</body>\\r\\n</html>\\r\\n\\r\\n\",\n            \"scrapes\": \"default\",\n            \"page_type\": \"item\",\n            \"page_id\": \"4fad6a7d688f922437000017\",\n            \"version\": \"0.13.0\"\n        }\n    ],\n    \"start_urls\": [\n        \"http://www.seedsofchange.com/garden_center/browse_category.aspx?id=123\"\n    ],\n    \"name\": \"seedsofchange2\",\n    \"exclude_patterns\": [\n        \"/tellafriend.aspx.+\"\n    ],\n    \"follow_patterns\": [\n        \"/garden_center/browse_category.aspx.+\",\n        \"/garden_center/detailedCategoryDisplay.aspx.+\",\n        \"/garden_center/product_details.aspx.+\"\n    ],\n    \"links_to_follow\": \"patterns\",\n    \"respect_nofollow\": true\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/SampleProject/spiders/sitemaps.json",
    "content": "{\n    \"templates\": [\n    ], \n    \"start_urls\": [\n    ], \n    \"exclude_patterns\": [\n    ], \n    \"follow_patterns\": [\n    ],\n    \"allowed_domains\": [\n        \"webupd8.org\",\n        \"siliconrepublic.com\"\n    ],\n    \"links_to_follow\": \"patterns\", \n    \"respect_nofollow\": false\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/atom_sample.xml",
    "content": "<?xml version='1.0' encoding='UTF-8'?>\n    <feed xmlns=\"http://www.w3.org/2005/Atom\">\n       <title>Webupd8 Posts</title>\n       <entry>\n         <link href=\"http://www.webupd8.org/sitemap.xml?page=1\"/>\n       </entry>\n       <entry>\n         <link href=\"http://www.webupd8.org/sitemap.xml?page=2\"/>\n       </entry>\n       <entry>\n         <link href=\"http://www.webupd8.org/sitemap.xml?page=3\"/>\n       </entry>\n\n    </feed>\n"
  },
  {
    "path": "slybot/slybot/tests/data/ebay_advanced_search.html",
    "content": "<!DOCTYPE html>\n<!-- saved from url=(0044)http://www.ebay.com/sch/ebayadvsearch/?rt=nc -->\n<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n\t\n\t<title>eBay Search: Advanced Search</title>\n\t\n\t<link href=\"./ebay_advanced_search_files/3r1qlcz05izihkerhj1lbxcvc.css\" type=\"text/css\" rel=\"stylesheet\"><link rel=\"stylesheet\" type=\"text/css\" href=\"./ebay_advanced_search_files/all.min\"><!--[if lt IE 8]>\n\t<![endif]-->\n\t<!--[if IE]>\n\t<![endif]-->\n\t<style type=\"text/css\"></style></head>\n<body class=\"sz1200\"><div id=\"gh-gb\"></div>\n\t<div id=\"Head\"></div>\n\t<div id=\"Body\">\n\t\t<div id=\"Top\"><div id=\"TopPanel\"><a class=\"gh-hdn\" href=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc#mainContent\">Skip to main content</a><div id=\"gh\" class=\"gh-w gh-site-136\"><table class=\"gh-tbl\"><tbody><tr><td class=\"gh-td\"><a id=\"gh-la\" _sp=\"m570.l2586\" class=\"iclg\" href=\"http://www.ebay.com/\">eBay<img alt=\"\" src=\"./ebay_advanced_search_files/s.gif\" id=\"gh-logo\" class=\"gspr iclg\" border=\"0\"></a></td><td id=\"gh-title\">Advanced Search</td></tr></tbody></table><div id=\"gh-top\"><noscript class=\"gh-t\" id=\"_nkw\">Welcome, (&lt;a class=\"gh-a\" href=\"https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&amp;_trksid=m570.l3348\"&gt;Sign in&lt;/a&gt; to bid or buy)</noscript><ul id=\"gh-topl\" style=\"display: block;\"><li id=\"gh-eb-u\" class=\"gh-t\"><span id=\"gh-ug\">Hi! <a _sp=\"m570.l1524\" href=\"https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&ru=http%3A%2F%2Fwww.ebay.com%2Fsch%2Febayadvsearch%2F%3Frt%3Dnc\" rel=\"nofollow\">Sign in</a> or <a _sp=\"m570.l2621\" href=\"https://scgi.ebay.com/ws/eBayISAPI.dll?RegisterEnterInfo&ru=http%3A%2F%2Fwww.ebay.com%2Fsch%2Febayadvsearch%2F%3Frt%3Dnc\" id=\"registerLink\" rel=\"nofollow\">register</a></span></li><li class=\"gh-t\"><a id=\"gh-p1\" _sp=\"m570.l2615\" href=\"http://pages.ebay.com/coverage/index.html\">eBay Buyer Protection</a></li></ul><ul id=\"gh-eb\" class=\"gh-clearfix\"><li class=\"gh-eb-li\" id=\"gh-eb-My\"><a _sp=\"m570.l2919\" class=\"gh-eb-li-a\" href=\"http://my.ebay.com/\">My eBay</a></li><li class=\"gh-eb-li\" id=\"gh-eb-Cust\"><a _sp=\"m570.l1545\" class=\"gh-eb-li-a\" href=\"http://ocs.ebay.com/ws/eBayISAPI.dll?CustomerSupport\">Customer Support</a></li><li class=\"gh-eb-li\" id=\"gh-cart\"><a _sp=\"m570.l2633\" class=\"gh-eb-li-a\" href=\"http://cart.payments.ebay.com/sc/view\"><i class=\"gspr icsc\"></i>Cart</a></li></ul></div></div><a name=\"mainContent\"></a> <!--ts:2012.11.11.21:04--><!--rq:--><div id=\"AreaNavigation\" class=\"bbc-in bbc bbc-nav\">\n\t<ul class=\"in\">\n\t\t<li><a href=\"http://www.ebay.com/\">Home</a> <span>&gt;</span>\n\t\t</li>\n\t\t<li><a href=\"http://www.ebay.com/sch/allcategories/all-categories\">Buy</a> <span>&gt;</span>\n\t\t</li>\n\t\t<li><b class=\"bbc-nav\">Advanced Search</b>\n\t\t</li>\n\t</ul>\n</div>\n\n<div id=\"AreaTitle\">\n\t<div class=\"advex_header\">\n\t\t<div class=\"advance_search_page_title2\">Advanced Search</div>\n\t\t<div>\n\t\t\t<div class=\"advex_favsearch\">\n\t\t\t\t<a href=\"https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&ru=http://www.ebay.com/sch/ebayadvsearch\">Sign in</a> to see your favorite searches.<a class=\"learnmore\" target=\"_self\" href=\"http://pages.ebay.com/help/find/search_favorites.html?fromFeature=Advanced%20Search\">Learn more.</a>\n\t\t\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"advex_clear\"></div>\n\t</div>\n</div>\n</div></div>\n\t\t<div id=\"Left\"><div id=\"LeftPanel\"><div class=\"sbx-c\">\n\t\t<h2 class=\"sbx-sh rct-hm rct-bg\">Items</h2>\n\t\t<div class=\"sbx-b rct-c\">\n\t\t\t<ul class=\"adv l-adv\">\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=0\" class=\"selected\">Find items</a></li>\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=2\">By seller</a></li>\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=3\">By bidder</a></li>\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=4\">By item number</a></li>\n\t\t\t\t\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\n\t<div class=\"sbx-c\">\n\t\t<h2 class=\"sbx-sh rct-hm rct-bg\">Stores</h2>\n\t\t<div class=\"sbx-b rct-c\">\n\t\t\t<ul class=\"adv l-adv\">\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=5\">Items in stores</a></li>\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=7\">Find Stores</a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\t\t\n\t<div class=\"sbx-c\">\n\t\t<h2 class=\"sbx-sh rct-hm rct-bg\">Members</h2>\n\t\t<div class=\"sbx-b rct-c rct-bb\">\n\t\t\t<ul class=\"adv l-adv\">\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch/?_sofindtype=25\">Find a member</a></li>\n\t\t\t\t<li><a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=9\">Find contact information</a></li>\n\t\t\t\t<!-- INTL CONFIG -->\n\t\t\t\t<li><a href=\"http://tradingassistant.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=TradingAssistant\">Find a Trading Assistant</a></li>\n\t\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\t\t\n</div></div>\n\t\t<div id=\"Right\" style=\"width:0px\"><div id=\"RightPanel\"></div></div>\t\t\n\t\t<div id=\"Center\"><div id=\"CenterPanel\"><div class=\"sbx-c\">\n\t\t<h2 class=\"sbx-h rct-hm rct-bg\">Find Items</h2>\n<div class=\"sbx-b rct-c rct-bb\">\n\t<div class=\"cont\">\n\t\t<form id=\"adv_search_from\" name=\"adv_search_from\" action=\"http://www.ebay.com/sch/i.html\" method=\"get\" _sp=\"p2045576.m1710\">\n\t\t\n\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"fl\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li class=\"ttl\"><label for=\"_nkw\">Enter keywords or item number</label></li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input type=\"text\" name=\"_nkw\" id=\"_nkw\" size=\"50\" maxlength=\"300\" value=\"\" placeholder=\"Enter keywords or item number\">\n\t\t\t\t\t\t\t\t<select name=\"_in_kw\" id=\"_in_kw\" size=\"1\">\n\t\t\t\t\t\t\t\t\t<option value=\"1\" selected=\"selected\">All words, any order</option>\n\t\t\t\t\t\t\t\t\t<option value=\"2\">Any words, any order</option>\n\t\t\t\t\t\t\t\t\t<option value=\"3\">Exact words, exact order</option>\n\t\t\t\t\t\t\t\t\t<option value=\"4\">Exact words, any order</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<label for=\"_ex_kw\">Exclude words from your search</label>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input type=\"text\" name=\"_ex_kw\" id=\"_ex_kw\" size=\"50\" maxlength=\"300\" value=\"\">\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tSee general <a class=\"learnmore\" href=\"http://pages.ebay.com/help/buy/contextual/search_tips.html\">search tips</a> or <a class=\"learnmore\" href=\"http://pages.ebay.com/help/find/searchby-options.html\">using advanced search options</a></li>\n\t\t\t\t\t\t\t<li class=\"ttl\">\n\t\t\t\t\t\t\t\t<label for=\"e1-1\" \"=\"\">In this category:</label>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<select name=\"_sacat\" id=\"e1-1\">\n\t\t\t\t\t\t\t\t\t\t<option value=\"0\">All Categories</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"20081\">Antiques</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"550\">Art</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"2984\">Baby</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"267\">Books</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"12576\">Business &amp; Industrial</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"625\">Cameras &amp; Photo</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"15032\">Cell Phones &amp; Accessories</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"11450\">Clothing, Shoes &amp; Accessories</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"11116\">Coins &amp; Paper Money</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"1\">Collectibles</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"58058\">Computers/Tablets &amp; Networking</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"293\">Consumer Electronics</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"14339\">Crafts</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"237\">Dolls &amp; Bears</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"11232\">DVDs &amp; Movies</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"45100\">Entertainment Memorabilia</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"99\">Everything Else</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"172008\">Gift Cards &amp; Coupons</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"26395\">Health &amp; Beauty</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"11700\">Home &amp; Garden</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"281\">Jewelry &amp; Watches</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"11233\">Music</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"619\">Musical Instruments &amp; Gear</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"1281\">Pet Supplies</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"870\">Pottery &amp; Glass</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"10542\">Real Estate</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"316\">Specialty Services</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"382\">Sporting Goods</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"64482\">Sports Mem, Cards &amp; Fan Shop</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"260\">Stamps</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"220\">Toys &amp; Hobbies</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"3252\">Travel</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"1249\">Video Games &amp; Consoles</option>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"fl srch\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li class=\"ttl\">&nbsp;</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<span class=\"mb\"><span class=\"aBtn-btn aBtn-noLeft\" id=\"searchBtnUpperAnc\"><a href=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc#\" id=\"searchBtnUpperLnk\" class=\"btnPointerCur\" onclick=\"return false;\"><span class=\"aBtn-b1\"><span class=\"aBtn-b2\"><span class=\"aBtn-bTxt\">Search&nbsp;</span></span></span></a></span><span id=\"searchBtnUpperNoScript\" style=\"display: none;\"><input type=\"submit\" class=\"aBtn-sB\" value=\"Search\"></span></span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input id=\"saveon\" class=\"cbx\" name=\"saveon\" value=\"2\" type=\"checkbox\">\n\t\t\t\t\t\t\t\t<label for=\"saveon\">Save this search to My eBay</label>\n\t\t\t\t\t\t\t\t<input id=\"_okw\" type=\"hidden\" name=\"_okw\">\n\t\t\t\t\t\t\t\t<input id=\"_oexkw\" type=\"hidden\" name=\"_oexkw\">\n\t\t\t\t\t\t\t\t<input type=\"hidden\" value=\"1\" name=\"_adv\">\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li><hr size=\"1\" noshade=\"noshade\" class=\"seperator\"></li>\n\t\t\t</ul>\t\n\t\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Search including</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" class=\"basic_aspect_chbx\" id=\"LH_TitleDesc\" name=\"LH_TitleDesc\" value=\"1\">\n\t\t\t\t\t<label for=\"LH_TitleDesc\">Title and description</label>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" class=\"basic_aspect_chbx\" id=\"LH_Complete\" name=\"LH_Complete\" value=\"1\">\n\t\t\t\t\t<label for=\"LH_Complete\">Completed listings</label>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<hr size=\"1\" noshade=\"noshade\" class=\"seperator\">\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Price</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" id=\"_mPrRngCbx\" name=\"_mPrRngCbx\" value=\"1\">\n\t\t\t\t\tShow items priced from $ <input class=\"price\" type=\"text\" name=\"_udlo\" placehoder=\"All Categories\" value=\"\"> to $ <input class=\"price\" type=\"text\" name=\"_udhi\" maxlength=\"13\" value=\"\">\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<hr size=\"1\" noshade=\"noshade\" class=\"seperator\">\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Buying formats</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" id=\"LH_Auction\" name=\"LH_Auction\" value=\"1\">\n\t\t\t\t\t<label for=\"LH_Auction\">Auction</label>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" id=\"LH_BIN\" name=\"LH_BIN\" value=\"1\">\n\t\t\t\t\t<label for=\"LH_BIN\">Buy It Now</label>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t\t<hr size=\"1\" noshade=\"noshade\" class=\"seperator\">\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Show results</li>\n\t\t\t\t\t  <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_Time\" name=\"LH_Time\" value=\"1\">\n\t\t                  Listings <select name=\"_ftrt\"><option value=\"901\">Ending within</option><option value=\"902\">Ending in more than</option><option value=\"903\">Started within</option></select> <select name=\"_ftrv\"><option value=\"1\">1 hour</option><option value=\"2\">2 hours</option><option value=\"3\">3 hours</option><option value=\"4\">4 hours</option><option value=\"5\">5 hours</option><option value=\"12\">12 hours</option><option value=\"24\">24 hours</option><option value=\"48\">2 days</option><option value=\"72\">3 days</option><option value=\"96\">4 days</option><option value=\"120\">5 days</option><option value=\"144\">6 days</option><option value=\"168\">7 days</option></select></li>\n\t\t              <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_NOB\" name=\"LH_NOB\" value=\"1\">\n\t\t                   \tNumber of bids from: <input type=\"text\" size=\"3\" id=\"_sabdlo\" name=\"_sabdlo\"> to: <input type=\"text\" size=\"3\" id=\"_sabdhi\" name=\"_sabdhi\"></li>\n\t\t              <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_MIL\" name=\"LH_MIL\" value=\"1\">\n\t\t                  Multiple item listings from: <input type=\"text\" size=\"3\" id=\"_samilow\" name=\"_samilow\"> to: <input type=\"text\" size=\"3\" id=\"_samihi\" name=\"_samihi\"></li>\n\t\t              <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_Lots\" name=\"LH_Lots\" value=\"1\">\n\t\t                  <label for=\"LH_Lots\">Items listed as lots</label>\n\t\t                  <a class=\"learnmore\" href=\"http://pages.ebay.com/help/sell/contextual/lots.html\">Learn more.</a>\n\t\t              </li>\n\t\t              <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_SaleItems\" name=\"LH_SaleItems\" value=\"1\">\n\t\t                  <label for=\"LH_SaleItems\">Sale items</label>\n\t\t              </li>\n\t\t              <li>\n\t\t                  <input type=\"checkbox\" id=\"LH_BO\" name=\"LH_BO\" value=\"1\">\n\t\t                  <label for=\"LH_BO\">Best offer</label>\n\t\t                  <a class=\"learnmore\" href=\"http://pages.ebay.com/help/buy/best-offer.html\">Learn more.</a>\n\t\t              </li>\n\t\t              <li>\n\t\t\t                  <input type=\"checkbox\" id=\"LH_Charity\" name=\"LH_Charity\" value=\"1\">\n\t\t\t                  <label class=\"basic_aspect_chbx_lable_charity\" for=\"LH_Charity\">eBay Giving Works</label>\n\t\t\t                  <a class=\"learnmore\" href=\"http://pages.ebay.com/help/buy/buying-nonprofit.html\">Learn more.</a>\n\t\t\t              </li>\n\t\t              <li>\n\t\t                  <ul class=\"s-adv\">\n\t\t                      <li>Shipping options</li>\n\t\t                      <li>\n\t\t                          <input type=\"checkbox\" id=\"LH_FS\" name=\"LH_FS\" value=\"1\">\n\t\t                          <label for=\"LH_FS\">Free shipping</label>\n\t\t                      </li>\n\t\t                      </ul>\n\t\t              </li>\n\t\t              <li><hr size=\"1\" noshade=\"noshade\" class=\"seperator\"></li>\n\t\t\t</ul>\n\t\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t<li class=\"ttl\">Location</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" id=\"LH_SubLocation\" name=\"LH_SubLocation\" value=\"1\">\n\t\t\t\t\t<div class=\"c-cont\">\n\t\t\t\t\t\t<label for=\"LH_SubLocation\">Only show items:</label>\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tbody><tr>\n\t\t\t\t\t\t\t\t<td class=\"loc_option_title\">\n\t\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"LH_LocatedInRadio\" name=\"_fsradio2\" value=\"&amp;LH_LocatedIn=1\" disabled=\"disabled\">\n\t\t\t\t\t\t\t\t\tLocated in</label>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"loc_option_select\">\n\t\t\t\t\t\t\t\t<select id=\"_salicSelect\" name=\"_salic\" disabled=\"disabled\">\n\t\t\t\t\t\t\t\t\t<option selected=\"selected\" value=\"1\">United States</option><option value=\"15\">Australia</option><option value=\"2\">Canada</option><option value=\"3\">United Kingdom</option><option value=\"4\">Afghanistan</option><option value=\"5\">Albania</option><option value=\"6\">Algeria</option><option value=\"7\">American Samoa</option><option value=\"8\">Andorra</option><option value=\"9\">Angola</option><option value=\"10\">Anguilla</option><option value=\"11\">Antigua and Barbuda</option><option value=\"12\">Argentina</option><option value=\"13\">Armenia</option><option value=\"14\">Aruba</option><option value=\"15\">Australia</option><option value=\"16\">Austria</option><option value=\"17\">Azerbaijan Republic</option><option value=\"18\">Bahamas</option><option value=\"19\">Bahrain</option><option value=\"20\">Bangladesh</option><option value=\"21\">Barbados</option><option value=\"22\">Belarus</option><option value=\"23\">Belgium</option><option value=\"24\">Belize</option><option value=\"25\">Benin</option><option value=\"26\">Bermuda</option><option value=\"27\">Bhutan</option><option value=\"28\">Bolivia</option><option value=\"29\">Bosnia and Herzegovina</option><option value=\"30\">Botswana</option><option value=\"31\">Brazil</option><option value=\"32\">British Virgin Islands</option><option value=\"33\">Brunei Darussalam</option><option value=\"34\">Bulgaria</option><option value=\"35\">Burkina Faso</option><option value=\"36\">Burma</option><option value=\"37\">Burundi</option><option value=\"38\">Cambodia</option><option value=\"39\">Cameroon</option><option value=\"2\">Canada</option><option value=\"40\">Cape Verde Islands</option><option value=\"41\">Cayman Islands</option><option value=\"42\">Central African Republic</option><option value=\"43\">Chad</option><option value=\"44\">Chile</option><option value=\"45\">China</option><option value=\"46\">Colombia</option><option value=\"47\">Comoros</option><option value=\"48\">Congo, Democratic Republic of the</option><option value=\"49\">Congo, Republic of the</option><option value=\"50\">Cook Islands</option><option value=\"51\">Costa Rica</option><option value=\"52\">Cote d Ivoire (Ivory Coast)</option><option value=\"53\">Croatia, Republic of</option><option value=\"55\">Cyprus</option><option value=\"56\">Czech Republic</option><option value=\"57\">Denmark</option><option value=\"58\">Djibouti</option><option value=\"59\">Dominica</option><option value=\"60\">Dominican Republic</option><option value=\"61\">Ecuador</option><option value=\"62\">Egypt</option><option value=\"63\">El Salvador</option><option value=\"64\">Equatorial Guinea</option><option value=\"65\">Eritrea</option><option value=\"66\">Estonia</option><option value=\"67\">Ethiopia</option><option value=\"68\">Falkland Islands (Islas Malvinas)</option><option value=\"69\">Fiji</option><option value=\"70\">Finland</option><option value=\"71\">France</option><option value=\"72\">French Guiana</option><option value=\"73\">French Polynesia</option><option value=\"74\">Gabon Republic</option><option value=\"75\">Gambia</option><option value=\"76\">Georgia</option><option value=\"77\">Germany</option><option value=\"78\">Ghana</option><option value=\"79\">Gibraltar</option><option value=\"80\">Greece</option><option value=\"81\">Greenland</option><option value=\"82\">Grenada</option><option value=\"83\">Guadeloupe</option><option value=\"84\">Guam</option><option value=\"85\">Guatemala</option><option value=\"86\">Guernsey</option><option value=\"87\">Guinea</option><option value=\"88\">Guinea-Bissau</option><option value=\"89\">Guyana</option><option value=\"90\">Haiti</option><option value=\"91\">Honduras</option><option value=\"92\">Hong Kong</option><option value=\"93\">Hungary</option><option value=\"94\">Iceland</option><option value=\"95\">India</option><option value=\"96\">Indonesia</option><option value=\"97\">Iran</option><option value=\"99\">Ireland</option><option value=\"100\">Israel</option><option value=\"101\">Italy</option><option value=\"102\">Jamaica</option><option value=\"104\">Japan</option><option value=\"105\">Jersey</option><option value=\"106\">Jordan</option><option value=\"107\">Kazakhstan</option><option value=\"108\">Kenya</option><option value=\"109\">Kiribati</option><option value=\"111\">Korea, South</option><option value=\"112\">Kuwait</option><option value=\"113\">Kyrgyzstan</option><option value=\"114\">Laos</option><option value=\"115\">Latvia</option><option value=\"116\">Lebanon</option><option value=\"120\">Liechtenstein</option><option value=\"121\">Lithuania</option><option value=\"122\">Luxembourg</option><option value=\"123\">Macau</option><option value=\"124\">Macedonia</option><option value=\"125\">Madagascar</option><option value=\"126\">Malawi</option><option value=\"127\">Malaysia</option><option value=\"128\">Maldives</option><option value=\"129\">Mali</option><option value=\"130\">Malta</option><option value=\"131\">Marshall Islands</option><option value=\"132\">Martinique</option><option value=\"133\">Mauritania</option><option value=\"134\">Mauritius</option><option value=\"135\">Mayotte</option><option value=\"136\">Mexico</option><option value=\"226\">Micronesia</option><option value=\"137\">Moldova</option><option value=\"138\">Monaco</option><option value=\"139\">Mongolia</option><option value=\"228\">Montenegro</option><option value=\"140\">Montserrat</option><option value=\"141\">Morocco</option><option value=\"142\">Mozambique</option><option value=\"143\">Namibia</option><option value=\"144\">Nauru</option><option value=\"145\">Nepal</option><option value=\"146\">Netherlands</option><option value=\"147\">Netherlands Antilles</option><option value=\"148\">New Caledonia</option><option value=\"149\">New Zealand</option><option value=\"150\">Nicaragua</option><option value=\"151\">Niger</option><option value=\"152\">Nigeria</option><option value=\"153\">Niue</option><option value=\"154\">Norway</option><option value=\"155\">Oman</option><option value=\"156\">Pakistan</option><option value=\"157\">Palau</option><option value=\"158\">Panama</option><option value=\"159\">Papua New Guinea</option><option value=\"160\">Paraguay</option><option value=\"161\">Peru</option><option value=\"162\">Philippines</option><option value=\"163\">Poland</option><option value=\"164\">Portugal</option><option value=\"165\">Puerto Rico</option><option value=\"166\">Qatar</option><option value=\"227\">Reunion</option><option value=\"167\">Romania</option><option value=\"168\">Russian Federation</option><option value=\"169\">Rwanda</option><option value=\"170\">Saint Helena</option><option value=\"171\">Saint Kitts-Nevis</option><option value=\"172\">Saint Lucia</option><option value=\"173\">Saint Pierre and Miquelon</option><option value=\"174\">Saint Vincent and the Grenadines</option><option value=\"175\">San Marino</option><option value=\"176\">Saudi Arabia</option><option value=\"177\">Senegal</option><option value=\"229\">Serbia</option><option value=\"178\">Seychelles</option><option value=\"179\">Sierra Leone</option><option value=\"180\">Singapore</option><option value=\"181\">Slovakia</option><option value=\"182\">Slovenia</option><option value=\"183\">Solomon Islands</option><option value=\"184\">Somalia</option><option value=\"185\">South Africa</option><option value=\"186\">Spain</option><option value=\"187\">Sri Lanka</option><option value=\"189\">Suriname</option><option value=\"191\">Swaziland</option><option value=\"192\">Sweden</option><option value=\"193\">Switzerland</option><option value=\"194\">Syria</option><option value=\"196\">Taiwan</option><option value=\"197\">Tajikistan</option><option value=\"198\">Tanzania</option><option value=\"199\">Thailand</option><option value=\"200\">Togo</option><option value=\"201\">Tonga</option><option value=\"202\">Trinidad and Tobago</option><option value=\"203\">Tunisia</option><option value=\"204\">Turkey</option><option value=\"205\">Turkmenistan</option><option value=\"206\">Turks and Caicos Islands</option><option value=\"207\">Tuvalu</option><option value=\"208\">Uganda</option><option value=\"209\">Ukraine</option><option value=\"210\">United Arab Emirates</option><option value=\"3\">United Kingdom</option><option selected=\"selected\" value=\"1\">United States</option><option value=\"211\">Uruguay</option><option value=\"212\">Uzbekistan</option><option value=\"213\">Vanuatu</option><option value=\"214\">Vatican City State</option><option value=\"215\">Venezuela</option><option value=\"216\">Vietnam</option><option value=\"217\">Virgin Islands (U.S)</option><option value=\"218\">Wallis and Futuna</option><option value=\"219\">Western Sahara</option><option value=\"220\">Western Samoa</option><option value=\"221\">Yemen</option><option value=\"223\">Zambia</option><option value=\"224\">Zimbabwe</option></select>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t\t<div class=\"advex_clear loc-asp-lnk\">\n\t\t\t\t\t\t<a class=\"learnmore\" href=\"http://pages.ebay.com/help/find/contextual/search-item-location.html\" id=\"location_learnmore\">Learn more.</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li><hr size=\"1\" noshade=\"noshade\" class=\"seperator\"></li>\n\t\t\t</ul>\n\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Sellers</li>\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"checkbox\" class=\"basic_aspect_chbx\" id=\"_fss\" name=\"_fss\" value=\"1\">\n\t\t\t\t\t<div class=\"c-cont\">\n\t\t\t\t\t\t<label for=\"_fss\">Only show items from:</label>\n\t\t\t\t\t\t<ul class=\"s-adv\">\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input type=\"radio\" disabled=\"disabled\" class=\"from_sellers_aspect_chbx\" checked=\"checked\" id=\"LH_SpecificSeller_id\" name=\"_fsradio\" value=\"&amp;LH_SpecificSeller=1\">\n\t\t\t\t\t\t\t\t<label for=\"LH_SpecificSeller_id\">Specific sellers (enter seller's user IDs)</label>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<select class=\"from_sellers_aspect_select\" disabled=\"disabled\" id=\"_saslop\" name=\"_saslop\">\n\t\t\t\t\t\t\t\t\t<option value=\"1\">Include</option>\n\t\t\t\t\t\t\t\t\t<option value=\"2\">Exclude</option>\n\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t<input type=\"text\" class=\"from_sellers_aspect_textarea\" disabled=\"disabled\" id=\"_sasl\" name=\"_sasl\" value=\"\">\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"LH_FavSellers_id\" disabled=\"disabled\" name=\"_fsradio\" value=\"LH_FavSellers=1\">\n\t\t\t\t\t\t\t\t<label for=\"LH_FavSellers_id\">My Saved Sellers list</label>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"LH_SellerWithStore_id\" disabled=\"disabled\" name=\"_fsradio\" value=\"LH_SellerWithStore=1\"> \n\t\t\t\t\t\t\t\t<label for=\"LH_SellerWithStore_id\">Sellers with eBay stores</label>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li id=\"outlet_sellers_radio\" style=\"display: none;\">\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" id=\"LH_OUTLETMALLSELLERS_id\" disabled=\"disabled\" name=\"_fsradio\" value=\"LH_OUTLETMALLSELLERS=1\">\n\t\t\t\t\t\t\t\t\t<label for=\"LH_OUTLETMALLSELLERS_id\">eBay Outlet sellers</label>\n\t\t\t\t\t\t\t\t</li>\t\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t\t<li><hr size=\"1\" noshade=\"noshade\" class=\"seperator\"></li>\n\t\t\t</ul>\n\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li class=\"ttl\">Sort by</li>\n\t\t\t\t<li>\n\t\t\t\t\t<select name=\"_sop\">\n\t\t\t\t\t\t\t<option value=\"12\" selected=\"selected\">Best Match</option>\n\t\t\t\t\t\t\t\t\t<option value=\"1\">Time: ending soonest</option>\n\t\t\t\t\t\t\t\t\t<option value=\"10\">Time: newly listed</option>\n\t\t\t\t\t\t\t\t\t<option value=\"15\">Price + Shipping: lowest first</option>\n\t\t\t\t\t\t\t\t\t<option value=\"16\">Price + Shipping: highest first</option>\n\t\t\t\t\t\t\t\t\t<option value=\"3\">Price: highest first</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"ttl\">View results</li>\n\t\t\t\t<li>\n\t\t\t\t<select name=\"_dmd\">\n\t\t\t\t\t<option selected=\"selected\" value=\"1\">All items</option>\n\t\t\t\t\t<option value=\"2\">Picture Gallery</option>\n\t\t\t\t\t<option value=\"7\">Show item numbers</option>\n\t\t\t\t</select>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"ttl\">Results per page</li>\n\t\t\t\t<li>\n\t\t\t\t<select name=\"_ipg\">\n\t\t\t\t\t<option value=\"25\">25</option>\n\t\t\t\t\t<option selected=\"selected\" value=\"50\">50</option>\n\t\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t\t<option value=\"200\">200</option>\n\t\t\t\t</select>\n\t\t\t\t</li>\n\t\t\t\t<li><hr size=\"1\" noshade=\"noshade\" class=\"seperator\"></li>\n\t\t\t</ul>\n\t\t\n\t\t\t<ul class=\"adv r-adv\">\n\t\t\t\t<li>\n\t\t\t\t\t<span class=\"mb\"><span class=\"aBtn-btn aBtn-noLeft\" id=\"searchBtnUpperAnc\"><a href=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc#\" id=\"searchBtnUpperLnk\" class=\"btnPointerCur\" onclick=\"return false;\"><span class=\"aBtn-b1\"><span class=\"aBtn-b2\"><span class=\"aBtn-bTxt\">Search&nbsp;</span></span></span></a></span></span>\n\t\t\t\t\t<a href=\"http://www.ebay.com/sch/ebayadvsearch?_sofindtype=0\">Clear options&nbsp;</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\n\t\t</form>\n\t</div>\t\n</div>\n</div>\n\t</div></div>\n\t\t<div id=\"Bottom\"><div id=\"BottomPanel\"><div id=\"glbfooter\" class=\"gh-w\"><div><div id=\"rtm_html_1650\" style=\"height: 0px; display: none;\"></div><div id=\"rtm_html_1651\" style=\"height: 0px; display: none;\"></div></div><table class=\"gf-BIG-t\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tbody><tr><td class=\"g-pipe\" colspan=\"2\"><a _sp=\"m571.l2602\" class=\"thrd\" href=\"http://www.ebayinc.com/\">About eBay</a> | <a _sp=\"m571.l3329\" class=\"thrd\" href=\"http://community.ebay.com/index.jspa\">Community</a> | <a _sp=\"m571.l3330\" class=\"thrd\" href=\"http://announcements.ebay.com/\">Announcements</a> | <a _sp=\"m571.l2616\" class=\"thrd\" href=\"http://pages.ebay.com/securitycenter/index.html\">Security Center</a> | <a _sp=\"m571.l2603\" class=\"thrd\" href=\"http://pages.ebay.com/buy/tools.html\">Buyer Tools</a> | <a _sp=\"m571.l2604\" class=\"thrd\" href=\"http://pages.ebay.com/help/policies/overview.html\">Policies</a> | <a _sp=\"m571.l2605\" class=\"thrd\" href=\"http://stores.ebay.com/\">Stores</a> | <a _sp=\"m571.l2898\" class=\"thrd\" href=\"http://my.ebay.com/wishlistsearch\">eBay Wish list</a> | <a _sp=\"m571.l1625\" class=\"thrd\" href=\"http://pages.ebay.com/sitemap.html\">Site Map</a> | <a _sp=\"m571.l2606\" class=\"thrd\" href=\"http://viv.ebay.com/ws/eBayISAPI.dll?EbayTime\">eBay official time</a> | <a _sp=\"m571.l1617\" class=\"thrd\" href=\"http://garden.ebay.com/\">Preview new features</a> | <a id=\"gh-surveyLink\" _sp=\"m571.l2628\" target=\"eBaySurvey\" class=\"thrd\" rel=\"nofollow\" href=\"http://qu.ebay.com/survey?srvName=GBH+%28gbh-home%29\">Tell us what you think</a><form class=\"gh-hdn g-hdn\" target=\"eBaySurvey\" method=\"post\" id=\"gh-surveyForm\" action=\"http://qu.ebay.com/survey?srvName=GBH+%28gbh-home%29\"><input value=\"\" name=\"domContent\"></form></td></tr><tr valign=\"top\"><td class=\"gf-legal\">Copyright © 1995-2012 eBay Inc. All Rights Reserved. Designated trademarks and brands are the property of their respective owners. Use of this Web site constitutes acceptance of the eBay <a _sp=\"m571.l2612\" href=\"http://pages.ebay.com/help/policies/user-agreement.html?rt=nc\">User Agreement</a> and <a _sp=\"m571.l2613\" href=\"http://pages.ebay.com/help/policies/privacy-policy.html?rt=nc\">Privacy Policy</a>.</td></tr></tbody></table>\n<div id=\"cobrandFooter\"></div></div><!--ts:2012.11.11.21:04--><!--rq:--></div></div>\n\t</div>\n\t<div id=\"Foot\"></div>\n\t<script src=\"./ebay_advanced_search_files/a0x1ei2z4m21tcvwqxutpfblz.js\" type=\"text/javascript\"></script><script type=\"text/javascript\" src=\"./ebay_advanced_search_files/rpt.min\"></script><script type=\"text/javascript\"> if (typeof GH != \"undefined\" && GH) { GH_config = { siteId:\"136\", algo:\"0\", catId:\"0\", geoLang:[],sin:0,pageId:2045576,notifCfg:{\"d\":1,\"n\":0}};GH.init();}\n$(\"form[name='select_saved_search']\").submit(function(){\n\twindow.location.href = $(\"select[name='saved_search_list']\").val();\n\treturn false;\n});\t\t\n\n\traptor.require('search.advancedsearch.AdvancedSearchPage').trackingId = \"p2045576.m1710\";\n\n\tvar advancedSearchPage = raptor.require('search.advancedsearch.AdvancedSearchPage');\n\tadvancedSearchPage.setOutletSellerConfig({hideOnNonCSA : 'true', \n\tcatIdsToShow : [11450], \n\toutletSellerId : 'outlet_sellers_radio'});\n\n(function() {\nvar Context = raptor.require('ebay.context.Context');\nContext.call(Context,{\"site\":0,\"errors\":{\"enabled\":false},\"app\":\"raptor\",\"domain\":\".ebay.com\",\"pool\":\"production\",\"cobrand\":0,\"locale\":\"en_US_MAIN\",\"features\":{},\"pid\":2045576});\n})();\n\n(function() {\nvar Resources = raptor.require('ebay.resources.Resources');\nResources.call(Resources,{\"css\":\"p10h54fioqz01n21h34j2w4ssyg\",\"js\":\"lgloa2ilzy0qtgetserwug4ydml\",\"id\":\"1\"});\n})();\nnew (raptor.require('raptor.tracking.core.Tracker'))({\"psi\":\"AyzIiAAE*\",\"rover\":{\"clk\":\"/roverclk/0/0/9\",\"imp\":\"/roverimp/0/0/9\",\"uri\":\"http://rover.ebay.com\"},\"pid\":\"p2045576\"});raptor.require('raptor.tracking.idmap.IdMap').roverService(\"http://rover.ebay.com/idmap/0?footer\");</script>\n<!-- RcmdId _srp-jsp,RlogId t6pwehq%60%3C%3Dpie3a57d.g%3Eff4g-13af6cb3268-0x8c -->\n\n\n</body></html>"
  },
  {
    "path": "slybot/slybot/tests/data/pinterest.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" class=\"en\">\n    <head>\n        <title>Pinterest / Login</title>\n        <script type=\"text/javascript\">var P_TIMER_START = new Date();</script>\n        \n        <meta name=\"google-site-verification\" content=\"NvDayNupl7R0MDceeuRcs7xUf9yqUsxg6WGjEeRdAnc\" />\n        <meta name=\"application-name\" content=\"Pinterest\" />\n<meta name=\"msapplication-TileColor\" content=\"#ffffff\" />\n<meta name=\"msapplication-TileImage\" content=\"https://s-passets-ec.pinimg.com/images/logo_trans_144x144.png\" />\n        <link rel=\"icon\" href=\"https://s-passets-ec.pinimg.com/images/favicon.png\" type=\"image/x-icon\" />\n        <link rel=\"apple-touch-icon-precomposed\" href=\"https://s-passets-ec.pinimg.com/images/ipad_touch_icon.png\" />\n        <link rel=\"stylesheet\" href=\"https://s-passets-ec.pinimg.com/css/pinboard_b501f6a0.css\" type=\"text/css\" media=\"all\"/>\n        <!--[if (gt IE 6)&(lt IE 9)]><link rel=\"stylesheet\" href=\"https://s-passets-ec.pinimg.com/css/ie7-and-up_b9dbb00c.css\" type=\"text/css\" media=\"all\" /><![endif]-->\n        <script type=\"text/javascript\">var _sf_startpt=(new Date()).getTime()</script>\n        <script type=\"text/javascript\">if (!window.console) { window.console = {log: function(){}} };</script>\n        <script type=\"text/javascript\">window.userIsAuthenticated = false;\n        </script>\n        <script type=\"text/javascript\" src=\"//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js\"></script>\n        <script src=\"https://s-passets-ec.pinimg.com/js/bundle_pin_c326859f.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n        \n        \n        <script>\n    var P = window.P || {};\n    P.SEARCH_FILTER_TYPES = JSON.parse('{\"TAG_FACEBOOK_PINNER\": \"c\", \"TAG_TWITTER_PINNER\": \"d\", \"TAG_MUTUAL_FOLLOW\": \"a\", \"TAG_FACEBOOK_NON_PINNER\": \"e\", \"TAG_BOARD\": \"g\", \"TAG_TWITTER_NON_PINNER\": \"f\", \"TAG_FOLLOWEE\": \"b\"}');\n    P.SEARCH_LOADING = \"https://s-passets-ec.pinimg.com/images/loading-typeahead.gif\";\n    P.IS_AUTHENTICATED = false;\n    \n</script>\n        \n    </head>\n    <noscript>\n    <div id=\"NoScript\">\n        <h1>You need to enable Javascript.</h1>\n    </div>\n</noscript>\n    \n\n    <h1 id=\"login_logo\"><a href=\"/\"></a></h1>\n\n    <div class=\"social_buttons\">\n        <div class=\"inset\">\n            <a class=\"fb login_button\" href=\"/facebook/login/\">\n                <div class=\"logo_wrapper\"><span class=\"logo\"></span></div>\n                <span>Login with Facebook</span>\n            </a>\n        </div>\n        <div class=\"inset\">\n            <a class=\"tw login_button\" href=\"/twitter/\">\n                <div class=\"logo_wrapper\"><span class=\"logo\"></span></div>\n                <span>Login with Twitter</span>\n            </a>\n        </div>\n    </div>\n\n    <img class=\"login_bar\" src=\"https://s-passets-ec.pinimg.com/images/login_bar.png\" alt=\"Horizontal Rule\" />\n\n    \n    \n    <form id=\"AuthForm\" class=\"Form FancyForm AuthForm\" action=\"/login/?next=%2F\" method=\"POST\" accept-charset=\"utf-8\">\n        <ul class=\"ControlGroups\">\n\n            <li>\n                <input id=\"id_email\" name=\"email\" type=\"text\" />\n                <label>Email</label>\n                <span class=\"fff\"></span>\n\n                \n            </li>\n\n            <li>\n                <input id=\"id_password\" name=\"password\" type=\"password\" />\n                <label>Password</label>\n                <span class=\"fff\"></span>\n\n                \n            </li>\n\n            \n\n            <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='nLZy3NMzhTswZvweHJ4KVmq9UjzaZGn3' /></div><div style='display:none'><input type='hidden' name='_ch' value='ecnwmar2' /></div>\n\n        </ul>\n\n        <div class=\"non_inputs\">\n            <button type=\"submit\" class=\"Button WhiteButton Button18\">Login</button>\n            <a id=\"resetPassword\" class=\"colorless\" href=\"/password/reset/\">Forgot your password?</a>\n        </div>\n\n    </form><!-- .Form.FancyForm.AuthForm -->\n\n    <form id=\"ResetForm\" class=\"Form FancyForm AuthForm ResetForm\" action=\"/password/reset/\" method=\"POST\" accept-charset=\"utf-8\">\n        <ul class=\"ControlGroups\">\n\n            <li>\n                <input id=\"id_email_2\" name=\"email\" type=\"text\" />\n                <label>Email Address</label>\n                <span class=\"fff\"></span>\n            </li>\n\n            <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='nLZy3NMzhTswZvweHJ4KVmq9UjzaZGn3' /></div><div style='display:none'><input type='hidden' name='_ch' value='ecnwmar2' /></div>\n\n        </ul>\n\n        <div class=\"non_inputs\">\n            <button type=\"submit\" class=\"Button WhiteButton Button18\">Reset</button>\n            <a id=\"backToLogin\" class=\"colorless\" href=\"\">Back to Login?</a>\n        </div>\n\n    </form><!-- .Form.FancyForm.AuthForm.ResetForm -->\n\n    <script type=\"text/javascript\">\n        $(document).ready(function() {\n            Login.setup();\n            FancyForm.setup();\n        });\n    </script>\n\n\n    <div id=\"SearchAutocompleteHolder\"></div>\n    <button id=\"ScrollToTop\" class=\"Button WhiteButton Offscreen Indicator\" type=\"button\">\n    Scroll to Top\n</button>\n    \n        <script type=\"text/javascript\">\n$(document).ready(function() {\n    \n    if (top != self) {\n        $('body').html('<h1>Unauthorized</h1>')\n    }\n});\n</script>\n    \n    \n<script type=\"text/javascript\">\n\t(function (){\n\t\t\tvar footer = new Image();\n\t\t\tfooter.src = '/_ch/5oezslym';\n\t})();\n</script>\n\n    \n<script type=\"text/javascript\">\n\t$('html').ajaxSend(function(event, xhr, settings) {\n\t\txhr.setRequestHeader(\"X-CH\", 'ecnwmar2');\n\t});\n</script>\n\n    <script type=\"text/javascript\">\n    function trackGAEvent(category, action, label, value) {\n    _gaq = _gaq || []\n\n\n        // Event\n    _gaq.push(['_trackEvent', category, action, label, value]);\n\n    // Virtual Page\n        virtual_page = '_event_';\n    virtual_page += \"/\" + category;\n\n    if(!action) action = '_';\n        virtual_page+=\"/\" + action;\n    if(label) virtual_page+= \"/\" + label;\n\n    _gaq.push(['_trackPageview', virtual_page]);\n\n        \n    }\n\n    var _gaq = _gaq || [];\n    _gaq.push(['_setAccount', 'UA-12967896-1']);\n    _gaq.push(['_setCustomVar', 1, 'is_logged_in', 'logged out', 2]);\n    _gaq.push(['_setCustomVar', 2, 'page_name', 'login_screen', 1]);\n\n    \n\n    \n    \n        _gaq.push(['_trackPageview']);\n    \n\n    (function() {\n      var ga = document.createElement('script'); ga.type='text/javascript'; ga.async=true;\n      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);\n    })();\n\n</script>\n\n\n    \n<script type=\"text/javascript\">\n    var autoLoginFbook = function(response) {\n        if (response.status !== 'connected') {\n            return;\n        }\n        var uid = response.authResponse.userID;\n        var accessToken = response.authResponse.accessToken;\n        $.post(\"/login/facebook/\", {\n            access_token: accessToken,\n            fb_id: uid},\n            function(resp) {\n                if (resp.status === \"success\") {\n                    window.location.reload()\n                }\n            });\n    };\n    window.fbAsyncInit = function() {\n        FB.init({\n            appId: 274266067164,\n            cookie: true\n        });\n        FB.getLoginStatus(autoLoginFbook);\n    };\n    (function() {\n        var e = document.createElement('script');\n        e.async = true;\n        e.src = document.location.protocol +\n        '//connect.facebook.net/en_US/all.js';\n        var scriptTag = document.getElementsByTagName('script')[0];\n        scriptTag.parentNode.appendChild(e);\n    } ());\n</script>\n\n\n    <div id=\"ErrorDialog\" class=\"ModalContainer alertBox\">\n    <div class=\"modal\">\n        <div class=\"closeBtn closeButton\">&nbsp;</div>\n        <h2>Sorry!</h2>\n        <div class=\"message\"></div>\n        <div class=\"footer\">\n          <button class=\"Button RedButton Button18 closeButton\" type=\"button\">Ok</button>\n        </div>\n    </div>\n    <div class=\"overlay\"></div>\n</div>\n\n<div id=\"ConfirmationDialog\" class=\"ModalContainer alertBox\">\n    <div class=\"modal\">\n        <div class=\"closeBtn closeButton\">&nbsp;</div>\n        <h2>Confirmation</h2>\n        <div class=\"message\"></div>\n        <div class=\"footer\">\n          <button class=\"Button RedButton Button18 okButton confOkButton\" type=\"button\">Ok</button>\n          <button class=\"Button RedButton Button18 okButton confOkButton2 hidden\" type=\"button\"></button>\n          <button class=\"Button WhiteButton Button18 closeButton confCloseButton\" type=\"button\">Cancel</button>\n        </div>\n    </div>\n    <div class=\"overlay\"></div>\n</div>\n\n\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/rss_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:taxo=\"http://purl.org/rss/1.0/modules/taxonomy/\" version=\"2.0\">\n  <channel>\n    <title>CarGurus: Alfa Romeo GT Updates</title>\n    <link>http://www.cargurus.com/Cars/Alfa-Romeo-GT-Overview-d1100</link>\n    <description>Alfa Romeo GT Reviews, Discussions and Pictures</description>\n    <pubDate>Wed, 19 Dec 2012 13:37:17 GMT</pubDate>\n    <dc:creator>CarGurus.com</dc:creator>\n    <dc:date>2012-12-19T13:37:17Z</dc:date>\n    <item>\n      <title>2005 Alfa Romeo GT Review: An alternative choice and a good choice</title>\n      <link>http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r177377</link>\n      <description>Beautiful car. Good economy from 1.9 litre turbo diesel engine, very refined cruiser &lt;br /&gt;also than ... &lt;a href=\"http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r177377\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10013\"&gt;Driven a 2005 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Mon, 30 Jul 2012 22:56:59 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r177377</guid>\n      <dc:creator>LSS_1265</dc:creator>\n      <dc:date>2012-07-30T22:56:59Z</dc:date>\n    </item>\n    <item>\n      <title>2007 Alfa Romeo GT Review: Best car I've ever owned!</title>\n      <link>http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r174050</link>\n      <description>I wanted a car that looks good and sporty, but needed the space to carry 2 &lt;br /&gt;adults and 3 childr ... &lt;a href=\"http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r174050\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10015\"&gt;Driven a 2007 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Thu, 03 Nov 2011 15:05:45 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r174050</guid>\n      <dc:creator>Matt922</dc:creator>\n      <dc:date>2011-11-03T15:05:45Z</dc:date>\n    </item>\n    <item>\n      <title>2004 Alfa Romeo GT Review: 2004 Alfa Romeo GT</title>\n      <link>http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r154159</link>\n      <description>the Perforce on my car is amazing, the best is the handling it handles so well round the cornes and  ... &lt;a href=\"http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r154159\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10012\"&gt;Driven a 2004 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Fri, 18 Jun 2010 14:47:16 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r154159</guid>\n      <dc:creator>FXX_1051</dc:creator>\n      <dc:date>2010-06-18T14:47:16Z</dc:date>\n    </item>\n    <item>\n      <title>2005 Alfa Romeo GT Review: do you really want to drive an ugly but reliable c ...</title>\n      <link>http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r148162</link>\n      <description>looks great, drives ok, reliability is rubbish. Like - the appearence, fuel ecconomy. &lt;br /&gt;Hate - r ... &lt;a href=\"http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r148162\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10013\"&gt;Driven a 2005 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Sun, 21 Aug 2011 03:38:58 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r148162</guid>\n      <dc:creator>Laurie101</dc:creator>\n      <dc:date>2011-08-21T03:38:58Z</dc:date>\n    </item>\n    <item>\n      <title>2007 Alfa Romeo GT Review: My Car</title>\n      <link>http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r143611</link>\n      <description>Makes the driver feel special, loads of low range torque, &lt;br /&gt;quiet, reserved and great sound syst ... &lt;a href=\"http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r143611\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10015\"&gt;Driven a 2007 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Mon, 25 Jan 2010 23:51:49 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015#rid:r143611</guid>\n      <dc:creator>Thomas2104</dc:creator>\n      <dc:date>2010-01-25T23:51:49Z</dc:date>\n    </item>\n    <item>\n      <title>2004 Alfa Romeo GT Review: Bella Donna</title>\n      <link>http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r97599</link>\n      <description>It's an Alfa Romeo. The only car I want more is a Maserati Granturismo&lt;br /&gt;    *  Performance – It' ... &lt;a href=\"http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r97599\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10012\"&gt;Driven a 2004 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Sat, 13 Dec 2008 00:41:52 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r97599</guid>\n      <dc:creator>Martin44</dc:creator>\n      <dc:date>2008-12-13T00:41:52Z</dc:date>\n    </item>\n    <item>\n      <title>2005 Alfa Romeo GT Review: 100% Italian</title>\n      <link>http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r97012</link>\n      <description>Quite simply the best looking car in its class/pricerange. The diesel purrs like a little kitten and ... &lt;a href=\"http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r97012\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10013\"&gt;Driven a 2005 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Wed, 03 Dec 2008 13:15:51 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013#rid:r97012</guid>\n      <dc:creator>Chris13952</dc:creator>\n      <dc:date>2008-12-03T13:15:51Z</dc:date>\n    </item>\n    <item>\n      <title>2004 Alfa Romeo GT Review: love it</title>\n      <link>http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r86476</link>\n      <description>fun car to drive, the performance is very good with a nice engine sound.&lt;br /&gt;the car is gorgeous to ... &lt;a href=\"http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r86476\"&gt;More&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=\"http://www.cargurus.com/Cars/writeCarUserReview.action?entity=c10012\"&gt;Driven a 2004 Alfa Romeo GT? Rate it!&lt;/a&gt;</description>\n      <pubDate>Tue, 19 Aug 2008 20:36:27 GMT</pubDate>\n      <guid isPermaLink=\"false\">http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012#rid:r86476</guid>\n      <dc:creator>Stijn41</dc:creator>\n      <dc:date>2008-08-19T20:36:27Z</dc:date>\n    </item>\n  </channel>\n</rss>\n\n"
  },
  {
    "path": "slybot/slybot/tests/data/sitemap_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <?xml-stylesheet type=\"text/xsl\" href=\"//www.siliconrepublic.com/main-sitemap.xsl\"?>\n        <sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n            <sitemap>\n                <loc>https://www.siliconrepublic.com/post-sitemap1.xml</loc>\n                <lastmod>2003-06-04T10:46:42+01:00</lastmod>\n            </sitemap>\n            <sitemap>\n                <loc>https://www.siliconrepublic.com/post-sitemap2.xml</loc>\n                <lastmod>2004-02-11T12:29:08+00:00</lastmod>\n            </sitemap>\n            <sitemap>\n                <loc>https://www.siliconrepublic.com/post-sitemap3.xml</loc>\n                <lastmod>2004-09-10T09:48:13+01:00</lastmod>\n            </sitemap>\n        </sitemapindex>\n        <!-- XML Sitemap generated by Yoast SEO -->\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/411_list.json",
    "content": "{\n  \"extractors\": {},\n  \"scrapes\": \"default\",\n  \"version\": \"0.13.0\",\n  \"name\": \"person-list\",\n  \"plugins\": {\n    \"annotations-plugin\": {\n      \"extracts\": [\n        {\n          \"tagid\": 131,\n          \"container_id\": \"repeated\",\n          \"id\": \"annotation1\",\n          \"selector\": \"p.name\",\n          \"data\": {\n            \"1\": {\n              \"extractors\": [],\n              \"attribute\": \"content\",\n              \"required\": false,\n              \"field\": \"full_name\"\n            },\n            \"2\": {\n              \"extractors\": [\n                \"1\"\n              ],\n              \"attribute\": \"content\",\n              \"required\": false,\n              \"field\": \"first_name\"\n            },\n            \"3\": {\n              \"extractors\": [\n                \"2\"\n              ],\n              \"attribute\": \"content\",\n              \"required\": false,\n              \"field\": \"last_name\"\n            }\n          },\n          \"annotations\": {\n            \"content\": [\n              {\n                \"extractors\": [],\n                \"attribute\": \"content\",\n                \"required\": false,\n                \"field\": \"full_name\"\n              },\n              {\n                \"extractors\": [\n                  \"1\"\n                ],\n                \"attribute\": \"content\",\n                \"required\": false,\n                \"field\": \"first_name\"\n              },\n              {\n                \"extractors\": [\n                  \"2\"\n                ],\n                \"attribute\": \"content\",\n                \"required\": false,\n                \"field\": \"last_name\"\n              }\n            ]\n          }\n        },\n        {\n          \"tagid\": 151,\n          \"container_id\": \"repeated\",\n          \"id\": \"annotation2\",\n          \"selector\": \"div.address\",\n          \"data\": {\n            \"1\": {\n              \"extractors\": [],\n              \"attribute\": \"content\",\n              \"required\": false,\n              \"field\": \"address\"\n            }\n          },\n          \"annotations\": {\n            \"content\": [\n              {\n                \"extractors\": [],\n                \"attribute\": \"content\",\n                \"required\": false,\n                \"field\": \"address\"\n              }\n            ]\n          }\n        },\n        {\n          \"item_container\": true,\n          \"tagid\": 126,\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"repeated\": true,\n          \"text-content\": \"#portia-content\",\n          \"selector\": \".serp-list-item\",\n          \"id\": \"repeated\",\n          \"container_id\": \"repeated#parent\"\n        },\n        {\n          \"item_container\": true,\n          \"tagid\": 125,\n          \"id\": \"repeated#parent\",\n          \"text-content\": \"#portia-content\",\n          \"selector\": \".serp-list\",\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          }\n        }\n      ]\n    }\n  },\n  \"url\": \"http://www.411.com/name/joe-smith\",\n  \"original_body\": \"<!DOCTYPE html>\\n<html class=\\\"no-js\\\">\\n  <head>\\n    <meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge,chrome=1\\\">\\n    <title>Joe Smith | 411</title>\\n<meta name=\\\"description\\\" content=\\\"View Joe Smith&#39;s phone number, address and more on 411. Find 100 listings for Joe Smith in the US/Canada. 411 is the largest and most trusted directory, and has contact information for over 90% of all US adults.\\\">\\n<meta name=\\\"keywords\\\" content=\\\"white pages, free people search, phone directory number, Joe, Smith\\\">\\n\\n\\n\\n<link rel=\\\"canonical\\\" href=\\\"http://www.411.com/name/Joe-Smith\\\" />\\n  <link rel=\\\"next\\\" href=\\\"http://www.411.com/name/Joe-Smith/2\\\" />\\n\\n    \\n    \\n    <meta http-equiv=\\\"cleartype\\\" content=\\\"on\\\">\\n    <meta content='True' name='HandheldFriendly' />\\n    <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\\\" />\\n    <link href='http://fonts.googleapis.com/css?family=Roboto:500,400,100,300' rel='stylesheet' type='text/css'>\\n    <link href=\\\"https://cdn411.global.ssl.fastly.net/assets/favicon-cffafb795744d74e5fd3aa4c6b5146d8.ico\\\" rel=\\\"shortcut icon\\\" type=\\\"image/vnd.microsoft.icon\\\" />\\n\\n    <link href=\\\"https://cdn411.global.ssl.fastly.net/assets/application-c43fe81dc6f461fe4366a769b58b85b6.css\\\" media=\\\"screen\\\" rel=\\\"stylesheet\\\" />\\n\\n\\n    <![if gt IE 9]>\\n      <style> #footer iframe { width: 302px; } </style>\\n    <![endif]>\\n\\n    <link href=\\\"https://cdn411.global.ssl.fastly.net/assets/print-05923db86ca7f645fa89660ab99d4dd0.css\\\" media=\\\"print\\\" rel=\\\"stylesheet\\\" />\\n\\n    <!-- Respond.js proxy on external server -->\\n    <link href=\\\"https://cdn411.global.ssl.fastly.net/respond-proxy.html\\\" id=\\\"respond-proxy\\\" rel=\\\"respond-proxy\\\" />\\n    <link href=\\\"/respond.proxy.gif\\\" id=\\\"respond-redirect\\\" rel=\\\"respond-redirect\\\" />\\n    <link href=\\\"/3rdr/assets/stylesheets/endemics.css?90057163697\\\" media=\\\"screen\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\">\\n    <!--[if lt IE 9]>\\n      <link href=\\\"/3rdr/assets/stylesheets/endemics-ie.css?75351354055\\\" media=\\\"screen\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\">\\n    <![endif]-->\\n    <style type=\\\"text/css\\\">#d__fFH{position:absolute;top:-5000px;left:-5000px}#d__fF{font-family:serif;font-size:200px;visibility:hidden}#qqxvfsbe{display:none!important}</style></head>\\n  <body class=\\\"dynamic serp-page person\\\" >\\n    <div class=\\\"header-wrapper\\\">\\n      <div id=\\\"header\\\" class=\\\"\\\">\\n  <div class=\\\"logo-wrapper pull-left\\\">\\n    <a class=\\\"pull-left\\\" href=\\\"/\\\" title=\\\"411 Home\\\">\\n      <span class=\\\"logo-icon pull-left\\\"></span>\\n</a><div style=\\\"display: none;\\\"><a href=\\\"tqyfrdwtbqarubbebcfctq.html\\\" id=\\\"qqxvfsbe\\\" rel=\\\"file\\\">rqacdeeusdau</a></div>  </div>\\n\\n  \\n  <div class=\\\"primary-nav-wrap\\\" role=\\\"navigation\\\">\\n    \\n    \\n\\n    <div class=\\\"mobile-menu pull-right hidden-fullsize\\\" data-toggle=\\\"collapse\\\" data-target=\\\".nav-collapse\\\">\\n      <p class=\\\"mobile-menu-text no-margin\\\">\\n        <span class=\\\"mobile-menu-icon\\\"></span>\\n        <span class=\\\"close-menu\\\">×</span>\\n        <span class=\\\"mobile-menu-label hide\\\">Search</span>\\n      </p>\\n    </div>\\n\\n    <div class=\\\"nav-collapse collapse\\\">\\n  <ul class=\\\"primary-nav unstyled\\\">\\n        <li>\\n          <a class=\\\"person current no-text-decoration\\\" data-gaaction=\\\"person\\\" data-gaevent=\\\"navbar\\\" data-galabel=\\\"click\\\" data-search=\\\"person_railcar\\\" href=\\\"/person\\\" title=\\\"Find People\\\">\\n            <span>People</span>\\n</a>        </li>\\n        <li>\\n          <a class=\\\"person  no-text-decoration\\\" data-gaaction=\\\"person\\\" data-gaevent=\\\"navbar\\\" data-galabel=\\\"click\\\" data-search=\\\"phone_railcar\\\" href=\\\"/reverse_phone\\\" title=\\\"Find a Business\\\">\\n            <span>Phone</span>\\n</a>        </li>\\n        <li>\\n          <a class=\\\"person  no-text-decoration\\\" data-gaaction=\\\"person\\\" data-gaevent=\\\"navbar\\\" data-galabel=\\\"click\\\" data-search=\\\"business_railcar\\\" href=\\\"/business\\\" title=\\\"Reverse Phone\\\">\\n            <span>Business</span>\\n</a>        </li>\\n        <li>\\n          <a class=\\\"person  no-text-decoration\\\" data-gaaction=\\\"person\\\" data-gaevent=\\\"navbar\\\" data-galabel=\\\"click\\\" data-search=\\\"address_railcar\\\" href=\\\"/reverse_address\\\" title=\\\"Address Search\\\">\\n            <span>Address</span>\\n</a>        </li>\\n  </ul>\\n    <div class=\\\"nav-search fade  address_railcar\\\">\\n      \\n<div class=\\\"form-joined-wrapper no-overflow\\\">\\n  <form accept-charset=\\\"UTF-8\\\" action=\\\"/search/FindNearby\\\" class=\\\"form-joined subheader\\\" method=\\\"get\\\" role=\\\"search\\\"><div style=\\\"display:none\\\"><input name=\\\"utf8\\\" type=\\\"hidden\\\" value=\\\"&#x2713;\\\" /></div>\\n    <ul class=\\\"unstyled no-margin no-overflow\\\">\\n      <li class=\\\"half-width first\\\">\\n        <label class=\\\"hide\\\" for=\\\"street\\\">e.g. 1234 Main St</label>\\n        <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" data-gaaction=\\\"address\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-required=\\\"Address (Required)\\\" id=\\\"street\\\" name=\\\"street\\\" placeholder=\\\"e.g. 1234 Main St\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" />\\n      </li>\\n      <li class=\\\"half-width last has-button\\\">\\n        <span class=\\\"locator-icon locater\\\"></span>\\n        <label class=\\\"hide\\\" for=\\\"where\\\">City, State or Zip</label>\\n        <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" class=\\\"city-typeahead location-field has-expandable-btn\\\" data-gaaction=\\\"address_location\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-location-display=\\\"city-state\\\" data-required=\\\"City, State or Zip (Required)\\\" id=\\\"where\\\" maxlength=\\\"100\\\" name=\\\"where\\\" placeholder=\\\"City, State or Zip\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" />\\n        <button class=\\\"btn btn-primary inset expandable\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"address\\\" data-galabel=\\\"click\\\" id=\\\"search-icon\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n      <li class=\\\"search-button\\\">\\n        <button class=\\\"btn\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"business\\\" data-galabel=\\\"click\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n    </ul>\\n</form></div>\\n\\n\\n  </div>\\n  <div class=\\\"nav-search fade in person_railcar\\\">\\n        <div class=\\\"form-joined-wrapper no-overflow\\\">\\n  <form accept-charset=\\\"UTF-8\\\" action=\\\"/search/FindPerson\\\" class=\\\"people_search form-joined subheader\\\" method=\\\"get\\\" role=\\\"search\\\"><div style=\\\"display:none\\\"><input name=\\\"utf8\\\" type=\\\"hidden\\\" value=\\\"&#x2713;\\\" /></div>\\n    <ul class=\\\"unstyled no-margin no-overflow\\\">\\n      <li class=\\\"half-width first has-icon\\\">\\n        <span class=\\\"people-icon\\\"></span>\\n        <label class=\\\"hide\\\" for=\\\"who\\\">First and Last Name</label>\\n        <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" data-gaaction=\\\"people_name\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-required=\\\"Last Name (Required)\\\" id=\\\"who\\\" name=\\\"who\\\" placeholder=\\\"First and Last Name\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" value=\\\"joe smith\\\" />\\n      </li>\\n      <li class=\\\"half-width last locatable has-button has-icon\\\">\\n        <div>\\n          <label class=\\\"hide\\\" for=\\\"where\\\">City, State or ZIP</label>\\n          <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" class=\\\"city-typeahead location-field has-expandable-btn\\\" data-gaaction=\\\"people_location\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-location-display=\\\"city-state\\\" id=\\\"where\\\" maxlength=\\\"100\\\" name=\\\"where\\\" placeholder=\\\"City, State or ZIP\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" />\\n        </div>\\n        <button class=\\\"submit btn btn-primary inset expandable\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"person\\\" data-galabel=\\\"click\\\" id=\\\"search-icon\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n      <li class=\\\"search-button\\\">\\n        <button class=\\\"btn\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"business\\\" data-galabel=\\\"click\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n    </ul>\\n</form></div>\\n\\n\\n  </div>\\n  <div class=\\\"nav-search fade  business_railcar\\\">\\n      <div class=\\\"form-joined-wrapper no-overflow\\\">\\n  <form accept-charset=\\\"UTF-8\\\" action=\\\"/business\\\" class=\\\"form-joined subheader business\\\" method=\\\"get\\\" role=\\\"search\\\"><div style=\\\"display:none\\\"><input name=\\\"utf8\\\" type=\\\"hidden\\\" value=\\\"&#x2713;\\\" /></div>\\n    \\n    <ul class=\\\"unstyled no-overflow no-margin\\\">\\n      <li class=\\\"half-width first has-icon\\\">\\n        <span class=\\\"business-icon\\\"></span>\\n        <label class=\\\"hide\\\" for=\\\"key\\\">Name or Category</label>\\n        <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" class=\\\"business-typeahead\\\" data-gaaction=\\\"business_category_or_name\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-required=\\\"Category or name (Required)\\\" data-submit=\\\"typeahead-no-submit\\\" id=\\\"key\\\" name=\\\"key\\\" placeholder=\\\"Name or Category\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" />\\n      </li>\\n      <li class=\\\"half-width last locatable has-button has-icon\\\">\\n        <div>\\n          <label class=\\\"hide\\\" for=\\\"where\\\">City, State or Zip</label>\\n          <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" class=\\\"city-typeahead location-field has-expandable-btn\\\" data-gaaction=\\\"business_location\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-location-display=\\\"city-state\\\" id=\\\"where\\\" maxlength=\\\"100\\\" name=\\\"where\\\" placeholder=\\\"City, State or Zip\\\" spellcheck=\\\"false\\\" type=\\\"text\\\" />\\n          <button class=\\\"btn btn-primary expandable inset\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"business\\\" data-galabel=\\\"click\\\" id=\\\"search-icon\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n      <li class=\\\"search-button\\\">\\n        <button class=\\\"btn\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"business\\\" data-galabel=\\\"click\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n    </ul>\\n</form></div>\\n  </div>\\n  <div class=\\\"nav-search fade  phone_railcar\\\">\\n      <div class=\\\"form-joined-wrapper no-overflow\\\">\\n  <form accept-charset=\\\"UTF-8\\\" action=\\\"/search/ReversePhone\\\" class=\\\"form-joined subheader phone_search\\\" method=\\\"get\\\" role=\\\"search\\\"><div style=\\\"display:none\\\"><input name=\\\"utf8\\\" type=\\\"hidden\\\" value=\\\"&#x2713;\\\" /></div>\\n    <input id=\\\"country_code\\\" name=\\\"country_code\\\" type=\\\"hidden\\\" value=\\\"1\\\" />\\n    <ul class=\\\"unstyled no-margin no-overflow\\\">\\n      <li class=\\\"full-width has-icon has-button\\\">\\n        <label class=\\\"hide\\\" for=\\\"full_phone\\\">e.g. 206-555-1234</label>\\n        <input autocomplete=\\\"off\\\" autocorrect=\\\"off\\\" class=\\\"has-expandable-btn phone-placeholder-text\\\" data-gaaction=\\\"phone\\\" data-gaevent=\\\"search_box\\\" data-galabel=\\\"focus\\\" data-required=\\\"Phone number (Required)\\\" id=\\\"full_phone\\\" name=\\\"full_phone\\\" placeholder=\\\"e.g. 206-555-1234\\\" spellcheck=\\\"false\\\" type=\\\"tel\\\" />\\n        <button class=\\\"btn btn-primary inset expandable\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"phone\\\" data-galabel=\\\"click\\\" id=\\\"search-icon\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n      <li class=\\\"search-button\\\">\\n        <button class=\\\"btn\\\" data-gaaction=\\\"search\\\" data-gaevent=\\\"business\\\" data-galabel=\\\"click\\\" type=\\\"submit\\\">Search</button>\\n      </li>\\n    </ul>\\n</form></div>\\n\\n  </div>\\n\\n</div>\\n\\n  </div><!-- end .primary-nav-wrap -->\\n</div><!-- end #header -->\\n\\n    </div>\\n    <div class=\\\"landing-wrapper\\\">\\n      \\n      <div id=\\\"banner\\\" role=\\\"banner\\\" class=\\\"visible-desktop\\\">\\n      <div id=\\\"div-gpt-ad-5315018097585-0\\\" class=\\\"dfp-ad top-ad visible-desktop\\\">\\n  </div>\\n\\n</div>\\n\\n\\n      <div id=\\\"wrap\\\">\\n        <div class=\\\"modal-backdrop mobile fade\\\"></div>\\n        <div id=\\\"pop-ads\\\" style=\\\"display: none;\\\">\\n          \\n        </div>\\n        <div id=\\\"homepage-skin\\\">\\n            <div id=\\\"div-gpt-ad-776676175107-0\\\" class=\\\"dfp-ad \\\">\\n  </div>\\n\\n        </div>\\n\\n\\n              <div class=\\\"mobile-text-ad hidden-desktop\\\">\\n          <div id=\\\"div-gpt-ad-9521077994790-0\\\" class=\\\"dfp-ad \\\">\\n  </div>\\n\\n      </div>\\n\\n\\n\\n        <div id=\\\"main\\\" class=\\\"row-fluid\\\">\\n          \\n\\n\\n<div id=\\\"left\\\">\\n  <div class=\\\"serp-options no-overflow\\\">\\n    <h1 class=\\\"serp-results dark-grey pull-left no-margin no-margin-top\\\">\\n            We found 100 exact matches for Joe Smith.\\n    </h1>\\n\\n  </div>\\n  <ul class=\\\"serp-list unstyled\\\">\\n    <li id=\\\"endemic_speed_bump_no_exact_container\\\"\\n        class=\\\"serp-list-item endemic-test first no-overflow endemic-click-tracking\\\"\\n        style=\\\"display:none\\\"></li>\\n    <li id=\\\"endemic_speed_bump_no_exact_container_two\\\"\\n        class=\\\"serp-list-item endemic-test last no-overflow endemic-click-tracking\\\"\\n        style=\\\"display:none\\\"></li>\\n\\n    <li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"0\\\" data-gaaction=\\\"people_serp_0\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-H-Smith-Jr./Ashland-VA/87qgeav\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"additionalName\\\">H</span> <span itemprop=\\\"familyName\\\">Smith</span> <span itemprop=\\\"honorificSuffix\\\">Jr.</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>45-49</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Dina C Smith, Joseph Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 12145 Heath Pond Dr, Ashland, VA 23005\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Dina C Smith, Joseph Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"1\\\" data-gaaction=\\\"people_serp_1\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/Rochester-MN/bfe3iri\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>50-54</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Pamela S Smith, Nathan R Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 4714 Manor Brook Dr NW, Rochester, MN 55901\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Pamela S Smith, Nathan R Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"2\\\" data-gaaction=\\\"people_serp_2\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/Nashville-TN/6dev0bz\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>60-64</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>No known associations</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 1019 Patricia Dr Apt L9, Nashville, TN 37217\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>No known associations</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"3\\\" data-gaaction=\\\"people_serp_3\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/San-Francisco-CA/brefbie\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>45-49</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>John P Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 431 Allison St, San Francisco, CA 94112\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>John P Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n\\n\\n    <li id=\\\"endemic_speed_bump_exact_container\\\"\\n        class=\\\"serp-list-item endemic-test first no-overflow endemic-click-tracking\\\"\\n        style=\\\"display:none\\\"></li>\\n    <li id=\\\"endemic_speed_bump_exact_container_two\\\"\\n        class=\\\"serp-list-item endemic-test last no-overflow endemic-click-tracking\\\"\\n        style=\\\"display:none\\\"></li>\\n\\n    <li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"4\\\" data-gaaction=\\\"people_serp_0\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/Palm-Coast-FL/5cnrjn6\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span>Unknown</span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Elliot J Campbell, Charles W Bradberry, Jacquelin Oconnor, Melanie H Campbell</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 8 Squadron Pl, Palm Coast, FL 32164\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Elliot J Campbell, Charles W Bradberry, Jacquelin Oconnor, Melanie H Campbell</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"5\\\" data-gaaction=\\\"people_serp_1\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/Yuba-City-CA/art7b18\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>40-44</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Amber L Smith, Dustin Smith, Brian C Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 325 Gurdas Ct, Yuba City, CA 95993\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Amber L Smith, Dustin Smith, Brian C Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View More Details\\\" class=\\\"serp-list-item organic no-overflow  \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"6\\\" data-gaaction=\\\"people_serp_2\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-Smith/-/bhq2is1\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-no-location-wrapper\\\">\\n          <span class='has-no-location-icon'></span>\\n          <span class=\\\"icon-text light-grey\\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-no-phone-wrapper\\\">\\n          <span class='has-no-phone-icon'></span>\\n          <span class=\\\"icon-text light-grey\\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span>Unknown</span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>No known associations</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> Unknown\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>No known associations</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View More Details</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address\\\" class=\\\"serp-list-item organic no-overflow has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"7\\\" data-gaaction=\\\"people_serp_3\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-H-Smith-I/Lexington-SC/i593g86\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"additionalName\\\">H</span> <span itemprop=\\\"familyName\\\">Smith</span> <span itemprop=\\\"honorificSuffix\\\">I</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-no-phone-wrapper\\\">\\n          <span class='has-no-phone-icon'></span>\\n          <span class=\\\"icon-text light-grey\\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>50-54</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Jesse O Boot, Ashley N Smith, Cyndi C Boot, Jesse O Boot</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 318 Cumbre Ct, Lexington, SC 29073\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Jesse O Boot, Ashley N Smith, Cyndi C Boot, Jesse O Boot</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address &amp; Phone Number\\\" class=\\\"serp-list-item organic no-overflow has_phone has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"8\\\" data-gaaction=\\\"people_serp_4\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-B-Smith-Jr./Cherryville-NC/atqi1e3\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"additionalName\\\">B</span> <span itemprop=\\\"familyName\\\">Smith</span> <span itemprop=\\\"honorificSuffix\\\">Jr.</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-phone-wrapper\\\">\\n          <span class='has-phone-icon'></span>\\n          <span class=\\\"icon-text \\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>55-59</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Deborah S Morris, Steve Morgan, Steven R Morris, Annie H Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 208 Milo Neal Rd, Cherryville, NC 28021\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Deborah S Morris, Steve Morgan, Steven R Morris, Annie H Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address &amp; Phone Number</span>\\n    </div>\\n</a></li>\\n<li itemscope itemtype=\\\"http://schema.org/Person\\\" title=\\\"View Address\\\" class=\\\"serp-list-item organic no-overflow has_address \\\">\\n    <a class=\\\"clickstream-link\\\" data-clickstream-record-number=\\\"9\\\" data-gaaction=\\\"people_serp_5\\\" data-gaevent=\\\"people\\\" data-galabel=\\\"click\\\" href=\\\"/name/Joe-L-Smith/Visalia-CA/3qnygaf\\\" itemprop=\\\"url\\\" rel=\\\"nofollow\\\">\\n    <div class=\\\"primary-content\\\">\\n      <p class=\\\"name\\\"><span itemprop=\\\"name\\\"><span itemprop=\\\"givenName\\\">Joe</span> <span itemprop=\\\"additionalName\\\">L</span> <span itemprop=\\\"familyName\\\">Smith</span></span></p>\\n      <div class=\\\"icon-group\\\">\\n        <div class=\\\"icon-wrapper pull-left has-location-wrapper\\\">\\n          <span class='has-location-icon'></span>\\n          <span class=\\\"icon-text \\\">Address</span>\\n        </div>\\n        <div class=\\\"icon-wrapper pull-left has-no-phone-wrapper\\\">\\n          <span class='has-no-phone-icon'></span>\\n          <span class=\\\"icon-text light-grey\\\">Phone</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"secondary-content\\\">\\n      <div class=\\\"age\\\">\\n        <span class=\\\"title med-grey\\\">Age: </span> \\n        <span><span itemprop='ageRange'>65+</span></span>\\n      </div>\\n      <div class=\\\"knows\\\"><span class='title med-grey'>Knows: </span>Marsha A Smith, Marsha L Brooks, Marsha L Brooks-Smith, C Smith, Karen C Smith</div>\\n      <div class=\\\"address\\\">\\n        <span itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\" class=\\\"address no-margin\\\">\\n          <span class=\\\"med-grey title\\\">Lives at:  </span> 3301 W Howard Ave, Visalia, CA 93277\\n        </span>\\n      </div>\\n      <div class=\\\"knows-mobile\\\"><span class='title med-grey'>Knows: </span>Marsha A Smith, Marsha L Brooks, Marsha L Brooks-Smith, C Smith, Karen C Smith</div>\\n    </div>\\n\\n    <div class=\\\"cta-wrapper visible-small-tablet\\\">\\n      <span class=\\\"cta-text visible-small-tablet\\\">View Full Profile</span>\\n      <span class=\\\"cta-text hidden-small-tablet\\\">View Address</span>\\n    </div>\\n</a></li>\\n\\n  </ul>\\n  <div class=\\\"hide\\\">\\n      <div id=\\\"div-gpt-ad-7135195639061-0\\\" class=\\\"dfp-ad hide\\\">\\n    <script>\\n      dfp_ad_set.push({\\n  baseUri: \\\"/6794/\\\" + WP.adUnit(\\\"endemic.speed_bump_no_exact\\\"),\\n  sizes: [[644, 147]],\\n  divId: \\\"div-gpt-ad-7135195639061-0\\\",\\n  outOfPage: false,\\n  isRefreshable: true,\\n  targetParams: {\\n    eb: (monster.get('eb') || ''),\\ndiv: \\\"endemic_speed_bump_no_exact_container\\\",\\nhtml_class: \\\"hide\\\"\\n  },\\n  restrictions: {\\n    \\n  }\\n});\\n\\n      \\n    </script>\\n  </div>\\n\\n      <div id=\\\"div-gpt-ad-9936676533126-0\\\" class=\\\"dfp-ad hide\\\">\\n    <script>\\n      dfp_ad_set.push({\\n  baseUri: \\\"/6794/\\\" + WP.adUnit(\\\"endemic.speed_bump_exact\\\"),\\n  sizes: [[644, 147]],\\n  divId: \\\"div-gpt-ad-9936676533126-0\\\",\\n  outOfPage: false,\\n  isRefreshable: true,\\n  targetParams: {\\n    eb: (monster.get('eb') || ''),\\ndiv: \\\"endemic_speed_bump_exact_container\\\",\\nhtml_class: \\\"hide\\\"\\n  },\\n  restrictions: {\\n    \\n  }\\n});\\n\\n      \\n    </script>\\n  </div>\\n\\n  </div>\\n\\n   <div class=\\\"serp-pagination\\\">\\n    <span class='inactive'>Prev</span>\\n\\n  <ol class=\\\"pagination unstyled no-margin\\\">\\n      <li class =\\\"current\\\">\\n          <span><a href=\\\"/name/joe-smith\\\">1</a></span>\\n      </li>\\n      <li class =\\\"\\\">\\n          <a href=\\\"/name/joe-smith/2\\\">2</a>\\n      </li>\\n      <li class =\\\"\\\">\\n          <a href=\\\"/name/joe-smith/3\\\">3</a>\\n      </li>\\n      <li class =\\\"ellipsis\\\">\\n          <span><a href=\\\"/name/joe-smith/4\\\">4</a></span>\\n      </li>\\n      <li class =\\\"hide\\\">\\n          <span><a href=\\\"/name/joe-smith/5\\\">5</a></span>\\n      </li>\\n      <li class =\\\"hide\\\">\\n          <span><a href=\\\"/name/joe-smith/6\\\">6</a></span>\\n      </li>\\n      <li class =\\\"hide\\\">\\n          <span><a href=\\\"/name/joe-smith/7\\\">7</a></span>\\n      </li>\\n      <li class =\\\"hide\\\">\\n          <span><a href=\\\"/name/joe-smith/8\\\">8</a></span>\\n      </li>\\n      <li class =\\\"hide\\\">\\n          <span><a href=\\\"/name/joe-smith/9\\\">9</a></span>\\n      </li>\\n      <li class =\\\"\\\">\\n          <a href=\\\"/name/joe-smith/10\\\">10</a>\\n      </li>\\n  </ol>\\n\\n    <a class=\\\"next\\\" href=\\\"/name/joe-smith/2\\\">Next</a>\\n</div>\\n\\n\\n  <div class=\\\"endemic-wrapper\\\">\\n    <div class=\\\"endemic-click-tracking\\\" id=\\\"endemic_panel_one_container\\\"></div>  <div id=\\\"div-gpt-ad-3161540440693-0\\\" class=\\\"dfp-ad hide\\\">\\n  </div>\\n\\n    <div class=\\\"endemic-click-tracking\\\" id=\\\"endemic_panel_two_container\\\"></div>  <div id=\\\"div-gpt-ad-7404127600036-0\\\" class=\\\"dfp-ad hide\\\">\\n  </div>\\n\\n    <div class=\\\"endemic-click-tracking\\\" id=\\\"endemic_panel_three_container\\\"></div>  <div id=\\\"div-gpt-ad-6455237192759-0\\\" class=\\\"dfp-ad hide\\\">\\n    <script>\\n      dfp_ad_set.push({\\n  baseUri: \\\"/6794/\\\" + WP.adUnit(\\\"endemic.panel3\\\"),\\n  sizes: [[680, 200]],\\n  divId: \\\"div-gpt-ad-6455237192759-0\\\",\\n  outOfPage: false,\\n  isRefreshable: true,\\n  targetParams: {\\n    eb: (monster.get('eb') || ''),\\ndiv: \\\"endemic_panel_three_container\\\",\\nhtml_class: \\\"hide\\\"\\n  },\\n  restrictions: {\\n    \\n  }\\n});\\n\\n      \\n    </script>\\n  </div>\\n\\n  </div>\\n</div>\\n\\n<div id=\\\"right\\\" class=\\\"span4\\\">\\n  <div class=\\\"endemic-click-tracking\\\" id=\\\"people_serp_right_rail\\\"></div>  <div id=\\\"div-gpt-ad-3999438603301-0\\\" class=\\\"dfp-ad people-serp-right-rail\\\">\\n  </div>\\n\\n</div>\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n        </div>\\n      </div><!-- end #wrap -->\\n\\n            <div class=\\\"mobile-text-ad last hidden-desktop fade in\\\" id=\\\"mobile-footer-ad\\\">\\n          <div id=\\\"div-gpt-ad-654405177903-0\\\" class=\\\"dfp-ad \\\">\\n  </div>\\n\\n      </div>\\n\\n    </div>\\n    <div class=\\\"footer-wrapper clear-all\\\">\\n  <div id=\\\"footer\\\" class=\\\"no-overflow\\\">\\n\\n\\n    <div class=\\\"alpha-list visible-fullsize\\\">\\n      <ul class=\\\"horizontal-list horizontal-list-pipes\\\">\\n        <li class=\\\"people-letters\\\">\\n          <span>Search People:</span>\\n          <ul class=\\\"horizontal-list\\\">\\n              <li><a href=\\\"/ind/a\\\">\\n                  A\\n</a>              </li>\\n              <li><a href=\\\"/ind/b\\\">\\n                  B\\n</a>              </li>\\n              <li><a href=\\\"/ind/c\\\">\\n                  C\\n</a>              </li>\\n              <li><a href=\\\"/ind/d\\\">\\n                  D\\n</a>              </li>\\n              <li><a href=\\\"/ind/e\\\">\\n                  E\\n</a>              </li>\\n              <li><a href=\\\"/ind/f\\\">\\n                  F\\n</a>              </li>\\n              <li><a href=\\\"/ind/g\\\">\\n                  G\\n</a>              </li>\\n              <li><a href=\\\"/ind/h\\\">\\n                  H\\n</a>              </li>\\n              <li><a href=\\\"/ind/i\\\">\\n                  I\\n</a>              </li>\\n              <li><a href=\\\"/ind/j\\\">\\n                  J\\n</a>              </li>\\n              <li><a href=\\\"/ind/k\\\">\\n                  K\\n</a>              </li>\\n              <li><a href=\\\"/ind/l\\\">\\n                  L\\n</a>              </li>\\n              <li><a href=\\\"/ind/m\\\">\\n                  M\\n</a>              </li>\\n              <li><a href=\\\"/ind/n\\\">\\n                  N\\n</a>              </li>\\n              <li><a href=\\\"/ind/o\\\">\\n                  O\\n</a>              </li>\\n              <li><a href=\\\"/ind/p\\\">\\n                  P\\n</a>              </li>\\n              <li><a href=\\\"/ind/q\\\">\\n                  Q\\n</a>              </li>\\n              <li><a href=\\\"/ind/r\\\">\\n                  R\\n</a>              </li>\\n              <li><a href=\\\"/ind/s\\\">\\n                  S\\n</a>              </li>\\n              <li><a href=\\\"/ind/t\\\">\\n                  T\\n</a>              </li>\\n              <li><a href=\\\"/ind/u\\\">\\n                  U\\n</a>              </li>\\n              <li><a href=\\\"/ind/v\\\">\\n                  V\\n</a>              </li>\\n              <li><a href=\\\"/ind/w\\\">\\n                  W\\n</a>              </li>\\n              <li><a href=\\\"/ind/x\\\">\\n                  X\\n</a>              </li>\\n              <li><a href=\\\"/ind/y\\\">\\n                  Y\\n</a>              </li>\\n              <li><a href=\\\"/ind/z\\\">\\n                  Z\\n</a>              </li>\\n          </ul>\\n        </li>\\n      </ul>\\n    </div>\\n\\n    <div class=\\\"links-and-ads\\\">\\n\\n      <div class=\\\"list-wrapper no-overflow first-footer-link\\\">\\n        <div class=\\\"list\\\">\\n          <strong class=\\\"title block\\\">LEARN MORE</strong>\\n          <ul class=\\\"unstyled\\\" role=\\\"navigation\\\">\\n            <li><a href=\\\"http://www.whitepagesinc.com/about/\\\" title=\\\"About Us\\\">\\n                About Us</a></li>\\n            <li><a href=\\\"http://www.whitepagesinc.com/advertise/\\\" rel=\\\"nofollow\\\" title=\\\"Advertise\\\">Advertise</a></li>\\n            <li><a href=\\\"http://www.whitepagesinc.com/careers/\\\" rel=\\\"nofollow\\\" title=\\\"Jobs\\\">Jobs</a></li>\\n            <li><a href=\\\"http://pro.whitepages.com\\\" rel=\\\"nofollow\\\" title=\\\"Whitepages Pro\\\">Whitepages Pro</a></li>\\n            <li><a href=\\\"http://pro.whitepages.com/developer\\\" rel=\\\"nofollow\\\" title=\\\"Developers\\\">Developers</a></li>\\n          </ul>\\n        </div>\\n\\n        <div class=\\\"list directories\\\">\\n          <strong class=\\\"title block\\\">DIRECTORIES</strong>\\n          <ul class=\\\"unstyled\\\" role=\\\"navigation\\\">\\n            <li><a href=\\\"/reverse_phone\\\">Phone Number Browsing</a></li>\\n            <li><a href=\\\"http://names.whitepages.com/\\\" title=\\\"Name Popularity\\\">First and Last Names</a></li>\\n          </ul>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"list-wrapper no-overflow\\\">\\n        <div class=\\\"list\\\">\\n          <strong class=\\\"title block\\\">SEARCHES</strong>\\n          <ul class=\\\"unstyled\\\" role=\\\"navigation\\\">\\n            <li><a href=\\\"/person\\\">People Search</a></li>\\n            <li><a href=\\\"/business\\\">Yellow Pages</a></li>\\n            <li><a href=\\\"/reverse_phone\\\">Reverse Phone</a></li>\\n            <li><a href=\\\"/reverse_address\\\">Reverse Address</a></li>\\n            <li><a href=\\\"/area-codes\\\">Area Codes</a></li>\\n            <li><a href=\\\"/more_searches\\\">ZIP Codes</a></li>\\n          </ul>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"list-wrapper desktop-only\\\">\\n        <div id=\\\"left\\\" class=\\\"span4\\\">\\n            <div id=\\\"div-gpt-ad-473129667153-0\\\" class=\\\"dfp-ad padded-top visible-desktop pull-left footer-ad\\\">\\n  </div>\\n\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"footer-additional\\\">\\n    <p id=\\\"footer-legal\\\" class=\\\"footer-legal centered no-margin\\\" role=\\\"contentinfo\\\">\\n      <span>&copy; 1998-2016 411.com All Rights Reserved. </span>\\n      <a data-gaaction=\\\"privacy\\\" data-gaevent=\\\"footer\\\" data-galabel=\\\"click\\\" href=\\\"http://www.whitepagescustomers.com/data-policy/\\\" rel=\\\"nofollow\\\" target=\\\"help\\\" title=\\\"Privacy\\\">Privacy</a> and <a data-gaaction=\\\"terms\\\" data-gaevent=\\\"footer\\\" data-galabel=\\\"click\\\" href=\\\"http://www.whitepagescustomers.com/terms-of-service-and-use-agreement/\\\" rel=\\\"nofollow\\\" target=\\\"help\\\" title=\\\"Terms of Use\\\">Terms of Use</a>\\n    </p>\\n        <div class=\\\"bottom-ad visible-desktop\\\">\\n        <div id=\\\"div-gpt-ad-6766234243079-0\\\" class=\\\"dfp-ad \\\">\\n  </div>\\n\\n    </div>\\n\\n  </div>\\n</div>\\n\\n    <div id=\\\"pro-dfp-upsell-modal\\\" class=\\\"modal hide fade\\\" tabindex=\\\"-1\\\" role=\\\"dialog\\\" data-backdrop=\\\"static\\\" data-keyboard=\\\"false\\\">\\n  <div class=\\\"modal-header hide\\\">\\n    <div class='upsell-close close-upsell-modal'>\\n      <a href='#' data-wait-msg=\\\"Skip in # seconds\\\" data-dismiss=\\\"modal\\\" aria-hidden=\\\"true\\\"><img alt=\\\"Upsell closex\\\" src=\\\"https://cdn411.global.ssl.fastly.net/assets/upsell-closeX-590c7c54d7490994523cc6f2b1c5eac2.png\\\" /></a>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal-body\\\">\\n      <div id=\\\"div-gpt-ad-4916216409193-0\\\" class=\\\"dfp-ad \\\">\\n  </div>\\n\\n  </div>\\n</div>\\n    <div id=\\\"fb-root\\\"></div>\\n  </body>\\n</html>\\n\",\n  \"page_id\": \"1\",\n  \"page_type\": \"item\"\n}"
  },
  {
    "path": "slybot/slybot/tests/data/templates/autoevolution.html",
    "content": "<!DOCTYPE html>\n<html data-ember-extension=\"1\" lang=\"en-us\"><head>\n<meta name=\"language\" content=\"english\"><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"><meta name=\"robots\" content=\"NOODP\"><meta name=\"viewport\" content=\"width=980\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<link rel=\"apple-touch-icon\" href=\"http://www.autoevolution.com/_img/favicon_512.png\"><meta name=\"msapplication-TileImage\" content=\"/_img/favicon_512.png\"><link rel=\"mask-icon\" sizes=\"any\" href=\"http://s1.cdn.autoevolution.com/_img/aefavicon.svg\" color=\"#000000\">\n<link rel=\"icon\" type=\"image/x-icon\" href=\"http://s1.cdn.autoevolution.com/_img/favicon.ico?v=2016\"><link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://s1.cdn.autoevolution.com/_img/favicon.ico?v=2016\">\n<link rel=\"alternate\" type=\"application/rss+xml\" title=\"autoevolution news\" href=\"http://www.autoevolution.com/rss/backend.xml\">\n<title>Cars and Automakers Database - autoevolution</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"autoevolution_files/a.css\">\n<meta name=\"description\" content=\"A comprehensive database of automakers, cars, models and engines with full specifications and photo galleries\">\n<meta name=\"keywords\" content=\"automakers, brands, cars, models, engines, specifications, photos, galleries\">\n<link rel=\"canonical\" href=\"http://www.autoevolution.com/cars/\">\n<script src=\"autoevolution_files/ti.js\"></script><script async=\"\" src=\"autoevolution_files/analytics.js\"></script><script>\nwindow.google_analytics_uacct = \"UA-61277-6\";\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\nga('create', 'UA-61277-6', 'auto');\nga('require', 'displayfeatures');\nga('send', 'pageview');\nvar gats_scrolled=0;\nsetTimeout(function(){if(!gats_scrolled){ gats_scrolled=1; ga('send','event','No-Bounce','Page-Read'); }}, 30000);\nsetTimeout(function(){window.addEventListener ? window.addEventListener('scroll', ga_scroll, false) : window.attachEvent('onScroll', ga_scroll)}, 5000);\nfunction ga_scroll(){ if(!gats_scrolled) { gats_scrolled=1; ga('send','event','No-Bounce','Scrolled'); }}\n</script>\n<!-- BEGIN 33Across SiteCTRL Script --><script type=\"text/javascript\">if(document.location.protocol=='http:'){ var Tynt=Tynt||[];Tynt.push('dzK18g1myr5ABnrkHcnlKl'); (function(){var h,s=document.createElement('script');s.src='http://cdn.tynt.com/ti.js'; h=document.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);})();}</script><!-- END 33Across SiteCTRL Script -->\n<!--ORIEL<script async type=\"text/javascript\" src=\"//yu987.com/ej95lqt1ozh20buluenb361psc.js\"></script>-->\n<style type=\"text/css\">\n:root .leaderheight,\n:root .adsbygoogle,\n:root .ad300x600,\n:root .ad.super,\n:root .ad970x90\n{ display: none !important; }\n:root *[vmhltul][hidden] { display: none !important; }</style><style type=\"text/css\">\n:root .ad300x250\n{ display: none !important; }</style></head>\n<body>\n\n<div id=\"topbar\"><div class=\"container2\">\n<i class=\"fa fa-bars\" id=\"topmenubtn\"></i>\n<a id=\"autoevolution\" href=\"http://www.autoevolution.com/\" title=\"autoevolution\">autoevolution</a>\n<div id=\"topmenu\" style=\"display:none;\">\n<ul class=\"m1 clearfix\">\n\t<li><a href=\"http://www.autoevolution.com/cars/\" title=\"Car models and specifications database\">cars</a></li>\n\t<li><a href=\"http://www.autoevolution.com/moto/\" title=\"Motorcycle models and specifications database\">moto</a></li>\n\t<li><a href=\"http://www.autoevolution.com/news/\" title=\"Latest news\">news</a></li>\n\t<li><a href=\"http://www.autoevolution.com/cars/reviews/\" title=\"Car reviews\">car reviews</a></li>\n\t<li><a href=\"http://www.autoevolution.com/spyshots/\" title=\"Car spyshots and scoops\">spyshots</a></li>\n\t<li><a href=\"http://www.autoevolution.com/news/driven/\" title=\"Driven Cars\">driven cars</a></li>\n\t<li class=\"newspaper\"><a href=\"http://www.autoevolution.com/newspaper/\" title=\"Newspaper\">newspaper <span></span></a></li>\n\t<li><a href=\"http://www.autoevolution.com/green/\" title=\"Green news\">green</a></li>\n</ul>\n<ul class=\"m2 clearfix\">\n\t<li><a href=\"http://www.autoevolution.com/carcompare.php\" title=\"Compare cars\">Compare Cars <i class=\"fa fa-car col-red fsz13\"></i><i class=\"fa fa-car col-red fsz13 faded\"></i></a></li>\n\t<li><a href=\"http://www.autoevolution.com/bac/\" title=\"Blood Alcohol Level Calculator\">BAC Calculator &nbsp;<i class=\"fa fa-flask col-red2\"></i></a></li>\n\t<li><a href=\"http://www.autoevolution.com/editorial/\" title=\"autoevolution editorials\">Editorial</a></li>\n\t<li><a href=\"http://www.autoevolution.com/coverstory/\" title=\"autoevolution coverstories\">Coverstory</a></li>\n\t<li><a href=\"http://www.autoevolution.com/news/motorsport\" title=\"Motorsport news\">Motorsport</a></li>\n\t<li><a href=\"http://www.autoevolution.com/reviews/\" title=\"Testdrives archive\">Testdrives archive</a></li>\n\t<li><a href=\"http://www.autoevolution.com/auto-moto-shows/\" title=\"Auto shows coverage index\">Auto Shows</a></li>\n\t<li><a href=\"http://www.autoevolution.com/news/tuning/\" title=\"Auto tuning news\">Tuning</a></li>\n\t<li><a href=\"http://www.autoevolution.com/carfinder/\" title=\"Car Finder\">Car Finder</a></li>\n\t<li><a href=\"http://www.autoevolution.com/newstag/pic%20of%20the%20day/\" title=\"Photo of the Day\">Photo of the Day</a></li>\n\t<li class=\"long\"><a href=\"http://www.autoevolution.com/auto-glossary/\" title=\"Automotive terms and acronyms database\">Glossary of automotive terms</a></li>\n\t<div class=\"clearfix\"></div>\n</ul>\n<ul class=\"m3 clearfix\">\n\t<li><a href=\"http://www.autoevolution.com/editors/\" title=\"Meet the autoevolution writers and editors\">Masthead</a></li>\n\t<li><a href=\"http://www.autoevolution.com/rss-channels/\" title=\"Follow autoevolution via RSS\">RSS Feeds</a></li>\n</ul>\n</div>\n\n<div id=\"topsearch\" class=\"xsgrad1\"><form method=\"get\" action=\"/search.php\">\n<input name=\"s\" value=\"Search here_\" data-defl=\"Search here_\" xplaceholder=\"Search here_\" type=\"text\"><button type=\"submit\" class=\"fa fa-search\"></button>\n</form></div>\n\n<div id=\"rtopmenu\" class=\"fr\">\n\t<a href=\"http://www.autoevolution.com/sendtip/\" title=\"Have a news tip? Let us know!\"><i class=\"fa fa-tip col-white\"></i></a>\n\t<i class=\"fa fa-newspaper rtm-paper col-gold posrel \" title=\"Customize and read your newspaper\">\n\t\t</i>\n\t<!--<i class=\"fa fa-share-alt rtm-share\"></i>-->\n\t<i class=\"fa fa-heart rtm-like\" title=\"Follow us on social media\"></i>\n\t<i class=\"fa fa-info-circle rtm-info\" title=\"Useful information\"></i>\n</div>\n\n</div></div>\n<div class=\"container2\"><div id=\"topwhite\" class=\"padtop40\"></div></div>\n<div id=\"pagewrapper\" style=\"position:relative;\"><div class=\"container2 adcont970 rev\"><div class=\"ad970x90\" vmhltul=\"\" hidden=\"\"><script async=\"\" src=\"autoevolution_files/adsbygoogle.js\"></script><ins class=\"adsbygoogle\" style=\"display:inline-block;width:970px;height:90px; display: none !important;\" data-ad-client=\"ca-pub-7668878252976156\" data-ad-slot=\"3944680237\" vmhltul=\"\" hidden=\"\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div></div>\n\n<div class=\"container2 clearfix\">\n<div id=\"newscol1\"><h1 class=\"newstitle\">Cars and Automakers Database</h1>\n<a href=\"http://www.autoevolution.com/carfinder/\" class=\"redblk1 fr mgtop_5\"><span class=\"opac75\">tip:</span>&nbsp; try the car finder</a></div>\n<div id=\"newscol2\" class=\"col2width minh0\">\n<div class=\"breadcrumb2\"><span itemscope=\"\" itemtype=\"http://schema.org/BreadcrumbList\"><span itemscope=\"\" itemtype=\"http://schema.org/ListItem\" itemprop=\"itemListElement\"><a href=\"http://www.autoevolution.com/\" itemprop=\"item\" title=\"autoevolution Home\">/ <span itemprop=\"name\">Home</span></a> </span><span itemscope=\"\" itemtype=\"http://schema.org/ListItem\" itemprop=\"itemListElement\"><span itemprop=\"item\">/ <span itemprop=\"name\">Cars</span></span> </span></span><div class=\"time fr\">2 Nov 2016, 9:41 UTC</div></div>\n<div class=\"carpages col23width\"><a href=\"#letterA\">A</a><a href=\"#letterB\">B</a><a href=\"#letterC\">C</a><a href=\"#letterD\">D</a><a href=\"#letterE\">E</a><a href=\"#letterF\">F</a><a href=\"#letterG\">G</a><a href=\"#letterH\">H</a><a href=\"#letterI\">I</a><a href=\"#letterJ\">J</a><a href=\"#letterK\">K</a><a href=\"#letterL\">L</a><a href=\"#letterM\">M</a><a href=\"#letterN\">N</a><a href=\"#letterO\">O</a><a href=\"#letterP\">P</a><a href=\"#letterQ\">Q</a><a href=\"#letterR\">R</a><a href=\"#letterS\">S</a><a href=\"#letterT\">T</a><a href=\"#letterU\">U</a><a href=\"#letterV\">V</a><a href=\"#letterW\">W</a><a href=\"#letterX\">X</a><a href=\"#letterY\">Y</a><a href=\"#letterZ\">Z</a></div>\n</div>\n<div id=\"newscol3\" class=\"col3width carbrnum\"><b>101</b> brands</div>\n</div>\n\n<div class=\"container carlist clearfix\">\n<div class=\"col1width col1mg fl top5line\"><h4 id=\"letterA\" class=\"cirlabel1\"><span>A</span></h4><div class=\"ad300x250 adclass2\" vmhltul=\"\" hidden=\"\"><script async=\"\" src=\"autoevolution_files/adsbygoogle.js\"></script><ins class=\"adsbygoogle\" style=\"display:inline-block;width:300px;height:250px; display: none !important;\" data-ad-client=\"ca-pub-7668878252976156\" data-ad-slot=\"2467947031\" vmhltul=\"\" hidden=\"\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/acura-sm.jpg\" alt=\"ACURA logo\" title=\"ACURA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/acura/\"><span itemprop=\"name\">ACURA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/acura/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/acura-mdx-2016.html\">ACURA MDX</a> · <a href=\"http://www.autoevolution.com/cars/acura-nsx-2016.html\">ACURA NSX</a> · <a href=\"http://www.autoevolution.com/cars/acura-ilx-2016.html\">ACURA ILX</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">36</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/alfa-romeo-sm.jpg\" alt=\"ALFA ROMEO logo\" title=\"ALFA ROMEO logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/alfa-romeo/\"><span itemprop=\"name\">ALFA ROMEO</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/alfa-romeo/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/alfa-romeo-alfasud-giardinetta-1978.html\">ALFA ROMEO Alfasud Giardinetta</a> · <a href=\"http://www.autoevolution.com/cars/alfa-romeo-giulietta-2016.html\">ALFA ROMEO Giulietta</a> · <a href=\"http://www.autoevolution.com/cars/alfa-romeo-giulia-2016.html\">ALFA ROMEO Giulia</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">80</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ariel-sm.jpg\" alt=\"ARIEL logo\" title=\"ARIEL logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ariel/\"><span itemprop=\"name\">ARIEL</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ariel/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ariel-atom-3-2008.html\">ARIEL Atom 3</a> · <a href=\"http://www.autoevolution.com/cars/ariel-atom-500-v8-2011.html\">ARIEL Atom 500 V8</a> · <a href=\"http://www.autoevolution.com/cars/ariel-nomad-2015.html\">ARIEL Nomad</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">2</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/aro-sm.jpg\" alt=\"ARO logo\" title=\"ARO logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/aro/\"><span itemprop=\"name\">ARO</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/aro/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/aro-m59-1959.html\">ARO M59</a> · <a href=\"http://www.autoevolution.com/cars/aro-m-461-1963.html\">ARO M 461</a> · <a href=\"http://www.autoevolution.com/cars/aro-24-1972.html\">ARO 24</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">6</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/aston-martin-sm.jpg\" alt=\"ASTON MARTIN logo\" title=\"ASTON MARTIN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/aston-martin/\"><span itemprop=\"name\">ASTON MARTIN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/aston-martin/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/aston-martin-vantage-gt8-2016.html\">ASTON MARTIN Vantage GT8</a> · <a href=\"http://www.autoevolution.com/cars/aston-martin-vantage-gt12-2015.html\">ASTON MARTIN Vantage GT12</a> · <a href=\"http://www.autoevolution.com/cars/aston-martin-vulcan-2016.html\">ASTON MARTIN Vulcan</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">18</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">43</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/audi-sm.jpg\" alt=\"AUDI logo\" title=\"AUDI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/audi/\"><span itemprop=\"name\">AUDI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/audi/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/audi-a3-sedan-2016.html\">AUDI A3 Sedan</a> · <a href=\"http://www.autoevolution.com/cars/audi-a3-cabriolet-2016.html\">AUDI A3 Cabriolet</a> · <a href=\"http://www.autoevolution.com/cars/audi-s3-2016.html\">AUDI S3</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">59</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">145</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterB\" class=\"cirlabel1\"><span>B</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/bentley-sm.jpg\" alt=\"BENTLEY logo\" title=\"BENTLEY logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/bentley/\"><span itemprop=\"name\">BENTLEY</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/bentley/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/bentley-continental-gt-2015.html\">BENTLEY Continental GT</a> · <a href=\"http://www.autoevolution.com/cars/bentley-continental-gtc-2015.html\">BENTLEY Continental GTC</a> · <a href=\"http://www.autoevolution.com/cars/bentley-bentayga-2015.html\">BENTLEY Bentayga</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">27</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/bmw-sm.jpg\" alt=\"BMW logo\" title=\"BMW logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/bmw/\"><span itemprop=\"name\">BMW</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/bmw/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/bmw-3-series-gran-turismo-lci-f34-2016.html\">BMW 3 Series Gran Turismo LCI (F34)</a> · <a href=\"http://www.autoevolution.com/cars/bmw-m4-gts-f82-2015.html\">BMW M4 GTS (F82)</a> · <a href=\"http://www.autoevolution.com/cars/bmw-5-series-2016.html\">BMW 5 Series (G30)</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">39</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">145</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/bristol-sm.jpg\" alt=\"BRISTOL logo\" title=\"BRISTOL logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/bristol/\"><span itemprop=\"name\">BRISTOL</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/bristol/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/bristol-fighter-t-2006.html\">BRISTOL Fighter T</a> · <a href=\"http://www.autoevolution.com/cars/bristol-serie-6-2000.html\">BRISTOL Series 6</a> · <a href=\"http://www.autoevolution.com/cars/bristol-bullet-2017.html\">BRISTOL Bullet</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">2</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">20</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/bufori-sm.jpg\" alt=\"BUFORI logo\" title=\"BUFORI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/bufori/\"><span itemprop=\"name\">BUFORI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/bufori/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/bufori-mk-i-1988.html\">BUFORI MK I</a> · <a href=\"http://www.autoevolution.com/cars/bufori-mk-ii-1992.html\">BUFORI MK II</a> · <a href=\"http://www.autoevolution.com/cars/bufori-v6i-1992.html\">BUFORI V6i</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">2</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">3</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/bugatti-sm.jpg\" alt=\"BUGATTI logo\" title=\"BUGATTI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/bugatti/\"><span itemprop=\"name\">BUGATTI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/bugatti/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/bugatti-super-sport-2010.html\">BUGATTI Super Sport</a> · <a href=\"http://www.autoevolution.com/cars/bugatti-grand-sport-vitesse-2012.html\">BUGATTI Grand Sport Vitesse</a> · <a href=\"http://www.autoevolution.com/cars/bugatti-chiron-2016.html\">BUGATTI Chiron</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">26</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/buick-sm.jpg\" alt=\"BUICK logo\" title=\"BUICK logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/buick/\"><span itemprop=\"name\">BUICK</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/buick/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/buick-enclave-2012.html\">BUICK Enclave</a> · <a href=\"http://www.autoevolution.com/cars/buick-lacrosse-2016.html\">BUICK LaCrosse</a> · <a href=\"http://www.autoevolution.com/cars/buick-cascada-2016.html\">BUICK Cascada</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">33</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterC\" class=\"cirlabel1\"><span>C</span></h4><div class=\"ad300x250 adclass2\" vmhltul=\"\" hidden=\"\"><script async=\"\" src=\"autoevolution_files/adsbygoogle.js\"></script><ins class=\"adsbygoogle\" style=\"display:inline-block;width:300px;height:250px; display: none !important;\" data-ad-client=\"ca-pub-7668878252976156\" data-ad-slot=\"2467947031\" vmhltul=\"\" hidden=\"\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/cadillac-sm.jpg\" alt=\"CADILLAC logo\" title=\"CADILLAC logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/cadillac/\"><span itemprop=\"name\">CADILLAC</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/cadillac/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/cadillac-ct6-2016.html\">CADILLAC CT6</a> · <a href=\"http://www.autoevolution.com/cars/cadillac-elr-2016.html\">CADILLAC ELR</a> · <a href=\"http://www.autoevolution.com/cars/cadillac-xt5-2016.html\">CADILLAC XT5</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">16</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">37</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/caterham-sm.jpg\" alt=\"CATERHAM logo\" title=\"CATERHAM logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/caterham/\"><span itemprop=\"name\">CATERHAM</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/caterham/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/caterham-supersport-2012.html\">CATERHAM Supersport</a> · <a href=\"http://www.autoevolution.com/cars/caterham-superlight-2013.html\">CATERHAM Superlight</a> · <a href=\"http://www.autoevolution.com/cars/caterham-seven-620-r-2013.html\">CATERHAM Seven 620 R</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/chevrolet-sm.jpg\" alt=\"CHEVROLET logo\" title=\"CHEVROLET logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/chevrolet/\"><span itemprop=\"name\">CHEVROLET</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/chevrolet/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/chevrolet-camaro-zl1-convertible-2016.html\">CHEVROLET Camaro ZL1 Convertible</a> · <a href=\"http://www.autoevolution.com/cars/chevrolet-camaro-zl1-2016.html\">CHEVROLET Camaro ZL1</a> · <a href=\"http://www.autoevolution.com/cars/chevrolet-bolt-2016.html\">CHEVROLET Bolt</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">56</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">133</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/chrysler-sm.jpg\" alt=\"CHRYSLER logo\" title=\"CHRYSLER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/chrysler/\"><span itemprop=\"name\">CHRYSLER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/chrysler/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/chrysler-town-country-2007.html\">CHRYSLER Town &amp; Country</a> · <a href=\"http://www.autoevolution.com/cars/chrysler-200-2014.html\">CHRYSLER 200</a> · <a href=\"http://www.autoevolution.com/cars/chrysler-300-2015.html\">CHRYSLER 300</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">45</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/citroen-sm.jpg\" alt=\"CITROEN logo\" title=\"CITROEN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/citroen/\"><span itemprop=\"name\">CITROEN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/citroen/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/citroen-c1-5-doors-2012.html\">CITROEN C1 5 doors</a> · <a href=\"http://www.autoevolution.com/cars/citroen-c1-3-doors-2012.html\">CITROEN C1 3 doors</a> · <a href=\"http://www.autoevolution.com/cars/citroen-c3-2005.html\">CITROEN C3</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">21</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">112</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterD\" class=\"cirlabel1\"><span>D</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/dacia-sm.jpg\" alt=\"DACIA logo\" title=\"DACIA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/dacia/\"><span itemprop=\"name\">DACIA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/dacia/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/dacia-1310-break-1984.html\">DACIA 1310 Break</a> · <a href=\"http://www.autoevolution.com/cars/dacia-1310-break-1994.html\">DACIA 1310 Break</a> · <a href=\"http://www.autoevolution.com/cars/dacia-1310-break-1999.html\">DACIA 1310 Break</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">27</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/daewoo-sm.jpg\" alt=\"DAEWOO logo\" title=\"DAEWOO logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/daewoo/\"><span itemprop=\"name\">DAEWOO</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/daewoo/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/daewoo-nubira-estate-1997.html\">DAEWOO Nubira Estate</a> · <a href=\"http://www.autoevolution.com/cars/daewoo-nubira-hatchback-1997.html\">DAEWOO Nubira Hatchback</a> · <a href=\"http://www.autoevolution.com/cars/daewoo-matiz-2001.html\">DAEWOO Matiz</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">30</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/daihatsu-sm.jpg\" alt=\"DAIHATSU logo\" title=\"DAIHATSU logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/daihatsu/\"><span itemprop=\"name\">DAIHATSU</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/daihatsu/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/daihatsu-cuore-2007.html\">DAIHATSU Cuore</a> · <a href=\"http://www.autoevolution.com/cars/daihatsu-ayla-2013.html\">DAIHATSU Ayla</a> · <a href=\"http://www.autoevolution.com/cars/daihatsu-sirion-2010.html\">DAIHATSU Sirion</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">17</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/datsun-sm.jpg\" alt=\"DATSUN logo\" title=\"DATSUN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/datsun/\"><span itemprop=\"name\">DATSUN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/datsun/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/datsun-go-2013-1.html\">DATSUN GO+</a> · <a href=\"http://www.autoevolution.com/cars/datsun-on-do-2014.html\">DATSUN on-Do</a> · <a href=\"http://www.autoevolution.com/cars/datsun-mi-do-2014.html\">DATSUN Mi-Do</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/dmc-sm.jpg\" alt=\"DMC logo\" title=\"DMC logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/dmc/\"><span itemprop=\"name\">DMC</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/dmc/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/dmc-delorean-1981.html\">DMC Delorean</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">1</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/dodge-sm.jpg\" alt=\"DODGE logo\" title=\"DODGE logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/dodge/\"><span itemprop=\"name\">DODGE</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/dodge/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/dodge-charger-2015.html\">DODGE Charger</a> · <a href=\"http://www.autoevolution.com/cars/dodge-charger-srt-2015.html\">DODGE Charger SRT</a> · <a href=\"http://www.autoevolution.com/cars/dodge-avenger-2010.html\">DODGE Avenger</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">10</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">50</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/donkervoort-sm.jpg\" alt=\"DONKERVOORT logo\" title=\"DONKERVOORT logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/donkervoort/\"><span itemprop=\"name\">DONKERVOORT</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/donkervoort/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/donkervoort-d8-1993.html\">DONKERVOORT D8</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">1</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/dr-motor-sm.jpg\" alt=\"DR MOTOR logo\" title=\"DR MOTOR logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/dr-motor/\"><span itemprop=\"name\">DR MOTOR</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/dr-motor/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/dr-motor-dr2-2010.html\">DR MOTOR dr2</a> · <a href=\"http://www.autoevolution.com/cars/dr-motor-dr5-2007.html\">DR MOTOR dr5</a> · <a href=\"http://www.autoevolution.com/cars/dr-motor-dr-citycross-2013.html\">DR MOTOR dr CityCross</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterF\" class=\"cirlabel1\"><span>F</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ferrari-sm.jpg\" alt=\"FERRARI logo\" title=\"FERRARI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ferrari/\"><span itemprop=\"name\">FERRARI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ferrari/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ferrari-f12tdf-2015.html\">FERRARI F12tdf</a> · <a href=\"http://www.autoevolution.com/cars/ferrari-gtc4lusso-2016.html\">FERRARI GTC4Lusso</a> · <a href=\"http://www.autoevolution.com/cars/ferrari-laferrari-aperta-2016.html\">FERRARI LaFerrari Aperta</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">12</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">75</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/fiat-sm.jpg\" alt=\"FIAT logo\" title=\"FIAT logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/fiat/\"><span itemprop=\"name\">FIAT</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/fiat/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/fiat-595c-abarth-2016.html\">FIAT 595C Abarth</a> · <a href=\"http://www.autoevolution.com/cars/fiat-124-spider-2016.html\">FIAT 124 Spider</a> · <a href=\"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\">FIAT 124 Abarth Spider</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">36</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">158</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/fisker-sm.jpg\" alt=\"FISKER logo\" title=\"FISKER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/fisker/\"><span itemprop=\"name\">FISKER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/fisker/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/fisker-karma-2011.html\">FISKER Karma</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">1</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ford-sm.jpg\" alt=\"FORD logo\" title=\"FORD logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ford/\"><span itemprop=\"name\">FORD</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ford/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ford-f-150-super-crew-2009.html\">FORD F-150 Super Crew</a> · <a href=\"http://www.autoevolution.com/cars/ford-f-150-raptor-svt-2009.html\">FORD F-150 Raptor SVT</a> · <a href=\"http://www.autoevolution.com/cars/ford-taurus-2010.html\">FORD Taurus</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">53</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">217</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/fso-sm.jpg\" alt=\"FSO logo\" title=\"FSO logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/fso/\"><span itemprop=\"name\">FSO</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/fso/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/fso-polonez-caro-1991.html\">FSO Polonez Caro</a> · <a href=\"http://www.autoevolution.com/cars/fso-polonez-kombi-1999.html\">FSO Polonez Kombi</a> · <a href=\"http://www.autoevolution.com/cars/fso-prima-1988.html\">FSO Prima</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">6</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterG\" class=\"cirlabel1\"><span>G</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/geely-sm.jpg\" alt=\"GEELY logo\" title=\"GEELY logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/geely/\"><span itemprop=\"name\">GEELY</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/geely/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/geely-ck-2005.html\">GEELY CK</a> · <a href=\"http://www.autoevolution.com/cars/geely-mk2-hatch-2010.html\">GEELY MK2 (Hatch)</a> · <a href=\"http://www.autoevolution.com/cars/geely-emgrand-ec718-2009.html\">GEELY Emgrand EC718</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">6</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/gmc-sm.jpg\" alt=\"GMC logo\" title=\"GMC logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/gmc/\"><span itemprop=\"name\">GMC</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/gmc/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/gmc-acadia-2012.html\">GMC Acadia</a> · <a href=\"http://www.autoevolution.com/cars/gmc-terrain-2016.html\">GMC Terrain</a> · <a href=\"http://www.autoevolution.com/cars/gmc-acadia-2016.html\">GMC Acadia</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">14</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">28</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/gta-motor-sm.jpg\" alt=\"GTA Motor logo\" title=\"GTA Motor logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/gta-motor/\"><span itemprop=\"name\">GTA Motor</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/gta-motor/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/gta-motor-gta-spano-2012.html\">GTA Motor GTA Spano</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">1</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterH\" class=\"cirlabel1\"><span>H</span></h4><div class=\"ad300x250 adclass2\" vmhltul=\"\" hidden=\"\"><script async=\"\" src=\"autoevolution_files/adsbygoogle.js\"></script><ins class=\"adsbygoogle\" style=\"display:inline-block;width:300px;height:250px; display: none !important;\" data-ad-client=\"ca-pub-7668878252976156\" data-ad-slot=\"2467947031\" vmhltul=\"\" hidden=\"\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/hindustan-sm.jpg\" alt=\"HINDUSTAN logo\" title=\"HINDUSTAN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/hindustan/\"><span itemprop=\"name\">HINDUSTAN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/hindustan/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/hindustan-ambassador-1959.html\">HINDUSTAN Ambassador</a> · <a href=\"http://www.autoevolution.com/cars/hindustan-pushpaktrekker-1999.html\">HINDUSTAN Pushpak/Trekker</a> · <a href=\"http://www.autoevolution.com/cars/hindustan-rtvranger-1998.html\">HINDUSTAN RTV/Ranger</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/holden-sm.jpg\" alt=\"HOLDEN logo\" title=\"HOLDEN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/holden/\"><span itemprop=\"name\">HOLDEN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/holden/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/holden-commodore-sedan-2015.html\">HOLDEN Commodore Sedan</a> · <a href=\"http://www.autoevolution.com/cars/holden-commodore-sedan-2016.html\">HOLDEN Commodore Wagon</a> · <a href=\"http://www.autoevolution.com/cars/holden-commodore-sedan-2014.html\">HOLDEN Commodore Wagon</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">18</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">44</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/honda-sm.jpg\" alt=\"HONDA logo\" title=\"HONDA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/honda/\"><span itemprop=\"name\">HONDA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/honda/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/honda-accord-coupe-2015.html\">HONDA Accord Coupe</a> · <a href=\"http://www.autoevolution.com/cars/honda-ridgeline-2016.html\">HONDA Ridgeline</a> · <a href=\"http://www.autoevolution.com/cars/honda-nsx-2016.html\">HONDA NSX</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">30</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">132</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/hummer-sm.jpg\" alt=\"HUMMER logo\" title=\"HUMMER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/hummer/\"><span itemprop=\"name\">HUMMER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/hummer/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/hummer-h2-sut-2004.html\">HUMMER H2 SUT</a> · <a href=\"http://www.autoevolution.com/cars/hummer-h3-2005.html\">HUMMER H3</a> · <a href=\"http://www.autoevolution.com/cars/hummer-h3-alpha-2007.html\">HUMMER H3 Alpha</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">8</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/hyundai-sm.jpg\" alt=\"HYUNDAI logo\" title=\"HYUNDAI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/hyundai/\"><span itemprop=\"name\">HYUNDAI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/hyundai/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/hyundai-ioniq-2016.html\">HYUNDAI Ioniq</a> · <a href=\"http://www.autoevolution.com/cars/hyundai-i20-active-2015.html\">HYUNDAI i20 Active</a> · <a href=\"http://www.autoevolution.com/cars/hyundai-i30-2016.html\">HYUNDAI i30</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">32</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">73</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterI\" class=\"cirlabel1\"><span>I</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/infiniti-sm.jpg\" alt=\"INFINITI logo\" title=\"INFINITI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/infiniti/\"><span itemprop=\"name\">INFINITI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/infiniti/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/infiniti-q30-2015.html\">INFINITI Q30</a> · <a href=\"http://www.autoevolution.com/cars/infiniti-q60-2016.html\">INFINITI Q60</a> · <a href=\"http://www.autoevolution.com/cars/infiniti-q50-2016.html\">INFINITI Q50</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">13</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">32</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/isuzu-sm.jpg\" alt=\"ISUZU logo\" title=\"ISUZU logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/isuzu/\"><span itemprop=\"name\">ISUZU</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/isuzu/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/isuzu-mu-7-2004.html\">ISUZU MU-7</a> · <a href=\"http://www.autoevolution.com/cars/isuzu-d-max-2015.html\">ISUZU D-Max Double Cab</a> · <a href=\"http://www.autoevolution.com/cars/isuzu-d-max-arctic-trucks-at35-2016.html\">ISUZU D-Max Arctic Trucks AT35</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">13</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterJ\" class=\"cirlabel1\"><span>J</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/jaguar-sm.jpg\" alt=\"JAGUAR logo\" title=\"JAGUAR logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/jaguar/\"><span itemprop=\"name\">JAGUAR</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/jaguar/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/jaguar-f-pace-2015.html\">JAGUAR F-Pace</a> · <a href=\"http://www.autoevolution.com/cars/jaguar-f-type-svr-coupe-2016.html\">JAGUAR F-Type SVR Coupe</a> · <a href=\"http://www.autoevolution.com/cars/jaguar-f-type-svr-2016.html\">JAGUAR F-Type SVR</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">11</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">39</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/jeep-sm.jpg\" alt=\"JEEP logo\" title=\"JEEP logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/jeep/\"><span itemprop=\"name\">JEEP</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/jeep/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/jeep-cherokee-2013.html\">JEEP Cherokee</a> · <a href=\"http://www.autoevolution.com/cars/jeep-grand-cherokee-srt-2013.html\">JEEP Grand Cherokee SRT</a> · <a href=\"http://www.autoevolution.com/cars/jeep-renegade-2014.html\">JEEP Renegade</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">10</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">20</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterK\" class=\"cirlabel1\"><span>K</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/kia-sm.jpg\" alt=\"KIA logo\" title=\"KIA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/kia/\"><span itemprop=\"name\">KIA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/kia/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/kia-venga-2014.html\">KIA Venga</a> · <a href=\"http://www.autoevolution.com/cars/kia-k7-cadenza-2016.html\">KIA K7 / Cadenza</a> · <a href=\"http://www.autoevolution.com/cars/kia-niro-2016.html\">KIA Niro</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">26</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">41</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/koenigsegg-sm.jpg\" alt=\"KOENIGSEGG logo\" title=\"KOENIGSEGG logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/koenigsegg/\"><span itemprop=\"name\">KOENIGSEGG</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/koenigsegg/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/koenigsegg-agera-s-2013.html\">KOENIGSEGG Agera S</a> · <a href=\"http://www.autoevolution.com/cars/koenigsegg-agera-one1-2014.html\">KOENIGSEGG One:1</a> · <a href=\"http://www.autoevolution.com/cars/koenigsegg-agera-rs-2015.html\">KOENIGSEGG Agera RS</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">2</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">8</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ktm-sm.jpg\" alt=\"KTM logo\" title=\"KTM logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ktm/\"><span itemprop=\"name\">KTM</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ktm/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ktm-x-bow-r-2011.html\">KTM X-Bow R</a> · <a href=\"http://www.autoevolution.com/cars/ktm-x-bow-rr-2012.html\">KTM X-Bow RR</a> · <a href=\"http://www.autoevolution.com/cars/ktm-x-bow-gt-2013.html\">KTM X-Bow GT</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterL\" class=\"cirlabel1\"><span>L</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lada-sm.jpg\" alt=\"LADA logo\" title=\"LADA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lada/\"><span itemprop=\"name\">LADA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lada/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lada-kalina-sedan-2006.html\">LADA Kalina Sedan</a> · <a href=\"http://www.autoevolution.com/cars/lada-kalina-hatchback-2007.html\">LADA Kalina Hatchback</a> · <a href=\"http://www.autoevolution.com/cars/lada-priora-2008.html\">LADA Priora</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">7</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lamborghini-sm.jpg\" alt=\"LAMBORGHINI logo\" title=\"LAMBORGHINI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lamborghini/\"><span itemprop=\"name\">LAMBORGHINI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lamborghini/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lamborghini-aventador-lp750-4-sv-2015.html\">LAMBORGHINI Aventador LP750-4 SV</a> · <a href=\"http://www.autoevolution.com/cars/lamborghini-huracan-lp610-4-spyder-2015.html\">LAMBORGHINI Huracan LP610-4 Spyder</a> · <a href=\"http://www.autoevolution.com/cars/lamborghini-aventador-lp750-4-sv-roadster-2015.html\">LAMBORGHINI Aventador LP750-4 SV Roadster</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">44</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lancia-sm.jpg\" alt=\"LANCIA logo\" title=\"LANCIA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lancia/\"><span itemprop=\"name\">LANCIA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lancia/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lancia-ypsilon-2011.html\">LANCIA Ypsilon</a> · <a href=\"http://www.autoevolution.com/cars/lancia-delta-2013.html\">LANCIA Delta</a> · <a href=\"http://www.autoevolution.com/cars/lancia-ypsilon-2015.html\">LANCIA Ypsilon</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">56</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/land-rover-sm.jpg\" alt=\"LAND ROVER logo\" title=\"LAND ROVER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/land-rover/\"><span itemprop=\"name\">LAND ROVER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/land-rover/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/land-rover-range-rover-evoque-5-door-2015.html\">LAND ROVER Range Rover Evoque 5 Door</a> · <a href=\"http://www.autoevolution.com/cars/land-rover-range-rover-evoque-3-door-2015.html\">LAND ROVER Range Rover Evoque 3 Door</a> · <a href=\"http://www.autoevolution.com/cars/land-rover-range-rover-evoque-convertible-2016.html\">LAND ROVER Range Rover Evoque Convertible</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">29</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lexus-sm.jpg\" alt=\"LEXUS logo\" title=\"LEXUS logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lexus/\"><span itemprop=\"name\">LEXUS</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lexus/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lexus-lx-2015.html\">LEXUS LX</a> · <a href=\"http://www.autoevolution.com/cars/lexus-lc-2016.html\">LEXUS LC</a> · <a href=\"http://www.autoevolution.com/cars/lexus-gs-2015.html\">LEXUS GS</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">17</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">34</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lincoln-sm.jpg\" alt=\"LINCOLN logo\" title=\"LINCOLN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lincoln/\"><span itemprop=\"name\">LINCOLN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lincoln/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lincoln-continental-1970.html\">LINCOLN Continental</a> · <a href=\"http://www.autoevolution.com/cars/lincoln-continental-1961.html\">LINCOLN Continental</a> · <a href=\"http://www.autoevolution.com/cars/lincoln-continental-1958.html\">LINCOLN Continental</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">11</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">23</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/lotus-sm.jpg\" alt=\"LOTUS logo\" title=\"LOTUS logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/lotus/\"><span itemprop=\"name\">LOTUS</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/lotus/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/lotus-elise-2010.html\">LOTUS Elise</a> · <a href=\"http://www.autoevolution.com/cars/lotus-exige-2012.html\">LOTUS Exige</a> · <a href=\"http://www.autoevolution.com/cars/lotus-evora-400-2015.html\">LOTUS Evora 400</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">15</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterM\" class=\"cirlabel1\"><span>M</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mahindra-sm.jpg\" alt=\"Mahindra logo\" title=\"Mahindra logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mahindra/\"><span itemprop=\"name\">Mahindra</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mahindra/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mahindra-bolero-2011.html\">Mahindra Bolero</a> · <a href=\"http://www.autoevolution.com/cars/mahindra-thar-2010.html\">Mahindra Thar</a> · <a href=\"http://www.autoevolution.com/cars/mahindra-verito-2012.html\">Mahindra Verito</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/marussia-sm.jpg\" alt=\"MARUSSIA logo\" title=\"MARUSSIA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/marussia-motors/\"><span itemprop=\"name\">MARUSSIA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/marussia-motors/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/marussia-b1-2010.html\">MARUSSIA B1</a> · <a href=\"http://www.autoevolution.com/cars/marussia-b2-2010.html\">MARUSSIA B2</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">2</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/maruti-suzuki-sm.jpg\" alt=\"MARUTI SUZUKI logo\" title=\"MARUTI SUZUKI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/maruti-suzuki/\"><span itemprop=\"name\">MARUTI SUZUKI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/maruti-suzuki/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/maruti-suzuki-wagon-r-2005.html\">MARUTI SUZUKI Wagon R</a> · <a href=\"http://www.autoevolution.com/cars/maruti-suzuki-zen-estilo-2006.html\">MARUTI SUZUKI Zen Estilo</a> · <a href=\"http://www.autoevolution.com/cars/maruti-suzuki-ciaz-2014.html\">MARUTI SUZUKI Ciaz</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">4</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/maserati-sm.jpg\" alt=\"MASERATI logo\" title=\"MASERATI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/maserati/\"><span itemprop=\"name\">MASERATI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/maserati/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/maserati-ghibli-2013.html\">MASERATI Ghibli</a> · <a href=\"http://www.autoevolution.com/cars/maserati-levante-2016.html\">MASERATI Levante</a> · <a href=\"http://www.autoevolution.com/cars/maserati-quattroporte-2016.html\">MASERATI Quattroporte VI</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">6</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">19</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/maybach-sm.jpg\" alt=\"MAYBACH logo\" title=\"MAYBACH logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/maybach/\"><span itemprop=\"name\">MAYBACH</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/maybach/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/maybach-57-zeppelin-2009.html\">MAYBACH 57 Zeppelin</a> · <a href=\"http://www.autoevolution.com/cars/maybach-62-zeppelin-2009.html\">MAYBACH 62 Zeppelin</a> · <a href=\"http://www.autoevolution.com/cars/maybach-landaulet-2008.html\">MAYBACH Landaulet</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">36</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mazda-sm.jpg\" alt=\"MAZDA logo\" title=\"MAZDA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mazda/\"><span itemprop=\"name\">MAZDA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mazda/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mazda-bt-50-2015.html\">MAZDA BT-50</a> · <a href=\"http://www.autoevolution.com/cars/mazda-mx-5-miata-rf-2016.html\">MAZDA MX-5 / Miata RF</a> · <a href=\"http://www.autoevolution.com/cars/mazda-mx-5-miata-roadster-coupe-2012.html\">MAZDA MX-5 / Miata Roadster Coupe</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">19</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">62</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mclaren-sm.jpg\" alt=\"MCLAREN logo\" title=\"MCLAREN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mclaren/\"><span itemprop=\"name\">MCLAREN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mclaren/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mclaren-675lt-2015.html\">MCLAREN 675LT</a> · <a href=\"http://www.autoevolution.com/cars/mclaren-540c-2015.html\">MCLAREN 540C</a> · <a href=\"http://www.autoevolution.com/cars/mclaren-570gt-2016.html\">MCLAREN 570GT</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">9</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">3</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mercedes-benz-sm.jpg\" alt=\"MERCEDES BENZ logo\" title=\"MERCEDES BENZ logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mercedes-benz/\"><span itemprop=\"name\">MERCEDES BENZ</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mercedes-benz/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mercedes-benz-ml-klasse-w164-2008.html\">MERCEDES BENZ ML-Klasse (W164)</a> · <a href=\"http://www.autoevolution.com/cars/mercedes-benz-ml-63-amg-w164-2008.html\">MERCEDES BENZ ML 63 AMG (W164)</a> · <a href=\"http://www.autoevolution.com/cars/mercedes-benz-sl-65-amg-black-series-2008.html\">MERCEDES BENZ SL 65 AMG Black Series</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">68</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">342</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mercury-sm.jpg\" alt=\"MERCURY logo\" title=\"MERCURY logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mercury/\"><span itemprop=\"name\">MERCURY</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mercury/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mercury-milan-2009.html\">MERCURY Milan</a> · <a href=\"http://www.autoevolution.com/cars/mercury-grand-marquis-2008.html\">MERCURY Grand Marquis</a> · <a href=\"http://www.autoevolution.com/cars/mercury-mariner-2008.html\">MERCURY Mariner</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">15</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mg-sm.jpg\" alt=\"MG logo\" title=\"MG logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mg/\"><span itemprop=\"name\">MG</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mg/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mg-mg6-gt-2011.html\">MG MG6 GT</a> · <a href=\"http://www.autoevolution.com/cars/mg-mg6-magnette-2011.html\">MG MG6 Magnette</a> · <a href=\"http://www.autoevolution.com/cars/mg-mg3-2013.html\">MG MG3</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">15</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mini-sm.jpg\" alt=\"MINI logo\" title=\"MINI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mini/\"><span itemprop=\"name\">MINI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mini/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mini-clubman-2016.html\">MINI Clubman</a> · <a href=\"http://www.autoevolution.com/cars/mini-convertible-2015.html\">MINI Convertible</a> · <a href=\"http://www.autoevolution.com/cars/mini-countryman-2016.html\">MINI Countryman</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">11</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/mitsubishi-sm.jpg\" alt=\"MITSUBISHI logo\" title=\"MITSUBISHI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/mitsubishi/\"><span itemprop=\"name\">MITSUBISHI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/mitsubishi/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/mitsubishi-l200-club-cab-2015.html\">MITSUBISHI L200 Club Cab</a> · <a href=\"http://www.autoevolution.com/cars/mitsubishi-mirage-g4-2016.html\">MITSUBISHI Mirage G4</a> · <a href=\"http://www.autoevolution.com/cars/mitsubishi-outlander-phev-2016.html\">MITSUBISHI Outlander PHEV</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">20</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">79</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/morgan-sm.jpg\" alt=\"MORGAN logo\" title=\"MORGAN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/morgan/\"><span itemprop=\"name\">MORGAN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/morgan/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/morgan-roadster-4-seater-2006.html\">MORGAN Roadster 4 seater</a> · <a href=\"http://www.autoevolution.com/cars/morgan-3-wheeler-2011.html\">MORGAN 3 wheeler</a> · <a href=\"http://www.autoevolution.com/cars/morgan-aero-8-2015.html\">MORGAN Aero 8</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">10</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">5</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterN\" class=\"cirlabel1\"><span>N</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/nissan-sm.jpg\" alt=\"NISSAN logo\" title=\"NISSAN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/nissan/\"><span itemprop=\"name\">NISSAN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/nissan/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/nissan-navara-np300-double-cab-2015.html\">NISSAN Navara NP300 Double Cab</a> · <a href=\"http://www.autoevolution.com/cars/nissan-pathfinder-2016.html\">NISSAN Pathfinder</a> · <a href=\"http://www.autoevolution.com/cars/nissan-patrol-2014.html\">NISSAN Patrol</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">46</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">128</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterO\" class=\"cirlabel1\"><span>O</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/oldsmobile-sm.jpg\" alt=\"OLDSMOBILE logo\" title=\"OLDSMOBILE logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/oldsmobile/\"><span itemprop=\"name\">OLDSMOBILE</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/oldsmobile/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/oldsmobile-aurora-1994.html\">OLDSMOBILE Aurora</a> · <a href=\"http://www.autoevolution.com/cars/oldsmobile-aurora-2000.html\">OLDSMOBILE Aurora</a> · <a href=\"http://www.autoevolution.com/cars/oldsmobile-intrigue-1997.html\">OLDSMOBILE Intrigue</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">16</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/opel-sm.jpg\" alt=\"OPEL logo\" title=\"OPEL logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/opel/\"><span itemprop=\"name\">OPEL</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/opel/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/opel-corsa-opc-2015.html\">OPEL Corsa OPC</a> · <a href=\"http://www.autoevolution.com/cars/opel-karl-2015.html\">OPEL Karl</a> · <a href=\"http://www.autoevolution.com/cars/opel-astra-5-doors-2015.html\">OPEL Astra 5 Doors</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">28</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">106</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterP\" class=\"cirlabel1\"><span>P</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/pagani-sm.jpg\" alt=\"PAGANI logo\" title=\"PAGANI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/pagani/\"><span itemprop=\"name\">PAGANI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/pagani/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/pagani-zonda-cinque-roadster-2009.html\">PAGANI Zonda Cinque Roadster</a> · <a href=\"http://www.autoevolution.com/cars/pagani-zonda-cinque-2008.html\">PAGANI Zonda Cinque</a> · <a href=\"http://www.autoevolution.com/cars/pagani-huayra-2012.html\">PAGANI Huayra</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">2</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">5</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/panoz-sm.jpg\" alt=\"PANOZ logo\" title=\"PANOZ logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/panoz/\"><span itemprop=\"name\">PANOZ</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/panoz/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/panoz-esperante-1999.html\">PANOZ Esperante</a> · <a href=\"http://www.autoevolution.com/cars/panoz-esperante-gt-2002.html\">PANOZ Esperante GT</a> · <a href=\"http://www.autoevolution.com/cars/panoz-esperante-gtlm-2004.html\">PANOZ Esperante GTLM</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">1</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">2</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/perodua-sm.jpg\" alt=\"PERODUA logo\" title=\"PERODUA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/perodua/\"><span itemprop=\"name\">PERODUA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/perodua/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/perodua-myvi-2015.html\">PERODUA Myvi</a> · <a href=\"http://www.autoevolution.com/cars/perodua-alza-2014.html\">PERODUA Alza</a> · <a href=\"http://www.autoevolution.com/cars/perodua-axia-2014.html\">PERODUA Axia</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/peugeot-sm.jpg\" alt=\"PEUGEOT logo\" title=\"PEUGEOT logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/peugeot/\"><span itemprop=\"name\">PEUGEOT</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/peugeot/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/peugeot-308-cc-2011.html\">PEUGEOT 308 CC</a> · <a href=\"http://www.autoevolution.com/cars/peugeot-306-gti-6-1996.html\">PEUGEOT 306 GTi-6</a> · <a href=\"http://www.autoevolution.com/cars/peugeot-2008-2016.html\">PEUGEOT 2008</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">29</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">87</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/pontiac-sm.jpg\" alt=\"PONTIAC logo\" title=\"PONTIAC logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/pontiac/\"><span itemprop=\"name\">PONTIAC</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/pontiac/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/pontiac-solstice-coupe-2008.html\">PONTIAC Solstice Coupe</a> · <a href=\"http://www.autoevolution.com/cars/pontiac-vibe-gt-2008.html\">PONTIAC Vibe GT</a> · <a href=\"http://www.autoevolution.com/cars/pontiac-vibe-2008.html\">PONTIAC Vibe</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">47</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/porsche-sm.jpg\" alt=\"PORSCHE logo\" title=\"PORSCHE logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/porsche/\"><span itemprop=\"name\">PORSCHE</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/porsche/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/porsche-panamera-4-970-2013.html\">PORSCHE Panamera 4 (970)</a> · <a href=\"http://www.autoevolution.com/cars/porsche-panamera-s-970-2013.html\">PORSCHE Panamera S (970)</a> · <a href=\"http://www.autoevolution.com/cars/porsche-4-e-hybrid-2016.html\">PORSCHE 4 E-Hybrid</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">48</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">151</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/proton-sm.jpg\" alt=\"PROTON logo\" title=\"PROTON logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/proton/\"><span itemprop=\"name\">PROTON</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/proton/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/proton-saga-flx-2011.html\">PROTON Saga FLX</a> · <a href=\"http://www.autoevolution.com/cars/proton-inspira-2010.html\">PROTON Inspira</a> · <a href=\"http://www.autoevolution.com/cars/proton-persona-2007.html\">PROTON Persona</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">8</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">4</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterQ\" class=\"cirlabel1\"><span>Q</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/qoros-sm.jpg\" alt=\"QOROS logo\" title=\"QOROS logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/qoros/\"><span itemprop=\"name\">QOROS</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/qoros/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/qoros-3-hatchbach-2014.html\">QOROS 3 Hatchbach</a> · <a href=\"http://www.autoevolution.com/cars/qoros-3-city-suv-2015.html\">QOROS 3 City SUV</a> · <a href=\"http://www.autoevolution.com/cars/qoros-5-2016.html\">QOROS 5</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterR\" class=\"cirlabel1\"><span>R</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ram-trucks-sm.jpg\" alt=\"RAM Trucks logo\" title=\"RAM Trucks logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ram-trucks/\"><span itemprop=\"name\">RAM Trucks</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ram-trucks/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ram-trucks-3500-regular-cab-2016.html\">RAM Trucks 3500 Regular Cab</a> · <a href=\"http://www.autoevolution.com/cars/ram-trucks-3500-crew-cab-2016.html\">RAM Trucks 3500 Crew Cab</a> · <a href=\"http://www.autoevolution.com/cars/ram-trucks-3500-mega-cab-2016.html\">RAM Trucks 3500 Mega Cab</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">9</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">9</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/renault-sm.jpg\" alt=\"RENAULT logo\" title=\"RENAULT logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/renault/\"><span itemprop=\"name\">RENAULT</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/renault/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/renault-megane-estate-2016.html\">RENAULT Megane Estate</a> · <a href=\"http://www.autoevolution.com/cars/renault-megane-sedan-2016.html\">RENAULT Megane Sedan</a> · <a href=\"http://www.autoevolution.com/cars/renault-twingo-gt-2016.html\">RENAULT Twingo GT</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">35</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">139</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/rolls-royce-sm.jpg\" alt=\"ROLLS-ROYCE logo\" title=\"ROLLS-ROYCE logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/rolls-royce/\"><span itemprop=\"name\">ROLLS-ROYCE</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/rolls-royce/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/rolls-royce-wraith-2013.html\">ROLLS-ROYCE Wraith</a> · <a href=\"http://www.autoevolution.com/cars/rolls-royce-ghost-ii-2014.html\">ROLLS-ROYCE Ghost II</a> · <a href=\"http://www.autoevolution.com/cars/rolls-royce-dawn-2016.html\">ROLLS-ROYCE Dawn</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">20</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterS\" class=\"cirlabel1\"><span>S</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/saab-sm.jpg\" alt=\"SAAB logo\" title=\"SAAB logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/saab/\"><span itemprop=\"name\">SAAB</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/saab/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/saab-9-3-aero-2014.html\">SAAB 9-3 Aero</a> · <a href=\"http://www.autoevolution.com/cars/saab-9-5-1997.html\">SAAB 9-5</a> · <a href=\"http://www.autoevolution.com/cars/saab-95-sportcombi-1998.html\">SAAB 9-5 SportCombi</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">1</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">31</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/saleen-sm.jpg\" alt=\"SALEEN logo\" title=\"SALEEN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/saleen/\"><span itemprop=\"name\">SALEEN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/saleen/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/saleen-s7-2000.html\">SALEEN S7</a> · <a href=\"http://www.autoevolution.com/cars/saleen-s7-2005.html\">SALEEN S7</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">2</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/samsung-sm.jpg\" alt=\"SAMSUNG logo\" title=\"SAMSUNG logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/samsung/\"><span itemprop=\"name\">SAMSUNG</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/samsung/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/samsung-sm-5-1998.html\">SAMSUNG SM 5</a> · <a href=\"http://www.autoevolution.com/cars/samsung-sm-5-2004.html\">SAMSUNG SM 5</a> · <a href=\"http://www.autoevolution.com/cars/samsung-sm-7-2005.html\">SAMSUNG SM 7</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">1</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/santana-sm.jpg\" alt=\"SANTANA logo\" title=\"SANTANA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/santana/\"><span itemprop=\"name\">SANTANA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/santana/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/santana-ps-10-pickup-2003.html\">SANTANA PS 10 Pickup</a> · <a href=\"http://www.autoevolution.com/cars/santana-ps-10-shortline-2006.html\">SANTANA PS 10 Shortline</a> · <a href=\"http://www.autoevolution.com/cars/santana-300-350-2005.html\">SANTANA 300 - 350</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">4</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/saturn-sm.jpg\" alt=\"SATURN logo\" title=\"SATURN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/saturn/\"><span itemprop=\"name\">SATURN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/saturn/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/saturn-astra-5-doors-2008.html\">SATURN Astra (5 Doors)</a> · <a href=\"http://www.autoevolution.com/cars/saturn-aura-2006.html\">SATURN Aura</a> · <a href=\"http://www.autoevolution.com/cars/saturn-outlook-2006.html\">SATURN Outlook</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">11</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/scion-sm.jpg\" alt=\"SCION logo\" title=\"SCION logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/scion/\"><span itemprop=\"name\">SCION</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/scion/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/scion-iq-2011.html\">SCION iQ</a> · <a href=\"http://www.autoevolution.com/cars/scion-ia-2016.html\">SCION iA</a> · <a href=\"http://www.autoevolution.com/cars/scion-im-2016.html\">SCION iM</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">5</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/seat-sm.jpg\" alt=\"SEAT logo\" title=\"SEAT logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/seat/\"><span itemprop=\"name\">SEAT</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/seat/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/seat-altea-freetrack-2009.html\">SEAT Altea Freetrack</a> · <a href=\"http://www.autoevolution.com/cars/seat-altea-xl-2009.html\">SEAT Altea XL</a> · <a href=\"http://www.autoevolution.com/cars/seat-ateca-2016.html\">SEAT Ateca</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">20</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">47</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/skoda-sm.jpg\" alt=\"SKODA logo\" title=\"SKODA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/skoda/\"><span itemprop=\"name\">SKODA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/skoda/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/skoda-superb-2006.html\">SKODA Superb</a> · <a href=\"http://www.autoevolution.com/cars/skoda-octavia-scout-2009.html\">SKODA Octavia Scout</a> · <a href=\"http://www.autoevolution.com/cars/skoda-octavia-scout-2015.html\">SKODA Octavia Scout</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">17</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">35</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/smart-sm.jpg\" alt=\"SMART logo\" title=\"SMART logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/smart/\"><span itemprop=\"name\">SMART</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/smart/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/smart-fortwo-electric-drive-2016.html\">SMART fortwo Electric Drive</a> · <a href=\"http://www.autoevolution.com/cars/smart-fortwo-cabrio-electric-drive-2016.html\">SMART fortwo Cabrio Electric Drive</a> · <a href=\"http://www.autoevolution.com/cars/smart-forfour-electric-drive-2016.html\">SMART forfour Electric Drive</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">9</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">20</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/spyker-sm.jpg\" alt=\"SPYKER logo\" title=\"SPYKER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/spyker/\"><span itemprop=\"name\">SPYKER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/spyker/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/spyker-c8-double-12-s-2002.html\">SPYKER C8 Double 12 S</a> · <a href=\"http://www.autoevolution.com/cars/spyker-c12-laturbie-2006.html\">SPYKER C12 LaTurbie</a> · <a href=\"http://www.autoevolution.com/cars/spyker-c8-preliator-2016.html\">SPYKER C8 Preliator</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">5</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">0</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/ssangyong-sm.jpg\" alt=\"SSANGYONG logo\" title=\"SSANGYONG logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/ssang-yong/\"><span itemprop=\"name\">SSANGYONG</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/ssang-yong/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/ssangyong-korando-2010.html\">SSANGYONG Korando</a> · <a href=\"http://www.autoevolution.com/cars/ssangyong-korando-c-2013.html\">SSANGYONG Korando C</a> · <a href=\"http://www.autoevolution.com/cars/ssangyong-tivoli-2015.html\">SSANGYONG Tivoli</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">6</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">7</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/subaru-sm.jpg\" alt=\"SUBARU logo\" title=\"SUBARU logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/subaru/\"><span itemprop=\"name\">SUBARU</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/subaru/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/subaru-wrx-2014.html\">SUBARU WRX</a> · <a href=\"http://www.autoevolution.com/cars/subaru-outback-2014.html\">SUBARU Outback</a> · <a href=\"http://www.autoevolution.com/cars/subaru-wrx-sti-2014.html\">SUBARU WRX STI</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">14</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">50</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/suzuki-sm.jpg\" alt=\"SUZUKI logo\" title=\"SUZUKI logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/suzuki/\"><span itemprop=\"name\">SUZUKI</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/suzuki/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/suzuki-vitara-2014.html\">SUZUKI Vitara</a> · <a href=\"http://www.autoevolution.com/cars/suzuki-jimny-2012.html\">SUZUKI Jimny</a> · <a href=\"http://www.autoevolution.com/cars/suzuki-baleno-2016.html\">SUZUKI Baleno</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">16</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">34</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterT\" class=\"cirlabel1\"><span>T</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/tata-motors-sm.jpg\" alt=\"TATA MOTORS logo\" title=\"TATA MOTORS logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/tata-motors/\"><span itemprop=\"name\">TATA MOTORS</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/tata-motors/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/tata-motors-sumo-2008.html\">TATA MOTORS Sumo</a> · <a href=\"http://www.autoevolution.com/cars/tata-motors-safari-storme-2012.html\">TATA MOTORS Safari Storme</a> · <a href=\"http://www.autoevolution.com/cars/tata-motors-aria-2010.html\">TATA MOTORS Aria</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">9</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">3</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/tesla-motors-sm.jpg\" alt=\"TESLA MOTORS logo\" title=\"TESLA MOTORS logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/tesla-motors/\"><span itemprop=\"name\">TESLA MOTORS</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/tesla-motors/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/tesla-motors-model-x-2015.html\">TESLA MOTORS Model X</a> · <a href=\"http://www.autoevolution.com/cars/tesla-motors-model-3-2017.html\">TESLA MOTORS Model 3</a> · <a href=\"http://www.autoevolution.com/cars/tesla-motors-model-s-2016.html\">TESLA MOTORS Model S</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">3</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">3</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/toyota-sm.jpg\" alt=\"TOYOTA logo\" title=\"TOYOTA logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/toyota/\"><span itemprop=\"name\">TOYOTA</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/toyota/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/toyota-hilux-extra-cab-2015.html\">TOYOTA Hilux Extra Cab</a> · <a href=\"http://www.autoevolution.com/cars/toyota-hilux-double-cab-2015.html\">TOYOTA Hilux Double Cab</a> · <a href=\"http://www.autoevolution.com/cars/toyota-mirai-2015.html\">TOYOTA Mirai</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">52</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">149</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/tvr-sm.jpg\" alt=\"TVR logo\" title=\"TVR logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/tvr/\"><span itemprop=\"name\">TVR</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/tvr/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/tvr-griffith-1992.html\">TVR Griffith</a> · <a href=\"http://www.autoevolution.com/cars/tvr-chimaera-1992.html\">TVR Chimaera</a> · <a href=\"http://www.autoevolution.com/cars/tvr-280i-350i-convertible-1983.html\">TVR 280i/ 350i Convertible</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">14</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterV\" class=\"cirlabel1\"><span>V</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/vauxhall-sm.jpg\" alt=\"VAUXHALL logo\" title=\"VAUXHALL logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/vauxhall/\"><span itemprop=\"name\">VAUXHALL</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/vauxhall/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/vauxhall-zafira-tourer-2011.html\">VAUXHALL Zafira Tourer</a> · <a href=\"http://www.autoevolution.com/cars/vauxhall-astra-sports-tourer-2015.html\">VAUXHALL Astra Sports Tourer</a> · <a href=\"http://www.autoevolution.com/cars/vauxhall-astra-sports-tourer-2012.html\">VAUXHALL Astra Sports Tourer</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">20</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">29</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/volkswagen-sm.jpg\" alt=\"VOLKSWAGEN logo\" title=\"VOLKSWAGEN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/volkswagen/\"><span itemprop=\"name\">VOLKSWAGEN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/volkswagen/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/volkswagen-tiguan-2016.html\">VOLKSWAGEN Tiguan</a> · <a href=\"http://www.autoevolution.com/cars/volkswagen-amarok-double-cab-2016.html\">VOLKSWAGEN Amarok Double Cab</a> · <a href=\"http://www.autoevolution.com/cars/volkswagen-transporter-kombi-t6-2015.html\">VOLKSWAGEN Transporter Kombi (T6)</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">58</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">116</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl\">&nbsp;</div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/volvo-sm.jpg\" alt=\"VOLVO logo\" title=\"VOLVO logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/volvo/\"><span itemprop=\"name\">VOLVO</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/volvo/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/volvo-s60-cross-country-2015.html\">VOLVO S60 Cross Country</a> · <a href=\"http://www.autoevolution.com/cars/volvo-s90-2016.html\">VOLVO S90</a> · <a href=\"http://www.autoevolution.com/cars/volvo-v90-2016.html\">VOLVO V90</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">12</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">66</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterW\" class=\"cirlabel1\"><span>W</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/wiesmann-sm.jpg\" alt=\"WIESMANN logo\" title=\"WIESMANN logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/wiesmann/\"><span itemprop=\"name\">WIESMANN</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/wiesmann/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/wiesmann-gt-mf4-cs-2013.html\">WIESMANN GT MF4-CS</a> · <a href=\"http://www.autoevolution.com/cars/wiesmann-mf5-roadster-2012.html\">WIESMANN MF5 Roadster</a> · <a href=\"http://www.autoevolution.com/cars/wiesmann-gt-mf5-2011.html\">WIESMANN GT MF5</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">7</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">4</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div><div class=\"col1width col1mg fl top5line\"><h4 id=\"letterZ\" class=\"cirlabel1\"><span>Z</span></h4></div><div class=\"col2width fl bcol-white carman\" itemscope=\"\" itemtype=\"https://schema.org/Brand\"><img class=\"jhref\" src=\"autoevolution_files/zender-sm.jpg\" alt=\"ZENDER logo\" title=\"ZENDER logo\" itemprop=\"logo\" width=\"120\" height=\"120\"><h5><a href=\"http://www.autoevolution.com/zender/\"><span itemprop=\"name\">ZENDER</span></a></h5><meta itemprop=\"url\" content=\"http://www.autoevolution.com/zender/\"><div class=\"models\"><a href=\"http://www.autoevolution.com/cars/zender-thirty-7-1999.html\">ZENDER Thirty 7</a> · <a href=\"http://www.autoevolution.com/cars/zender-escape-6-2000.html\">ZENDER Escape 6</a> · <a href=\"http://www.autoevolution.com/cars/zender-straight-8-2001.html\">ZENDER Straight 8</a> </div></div><div class=\"col3width fl carnums\"><p><b class=\"col-green2\">0</b> <i class=\"fa fa-car\"></i><br>in production</p><p><b class=\"col-red\">6</b> <i class=\"fa fa-car\"></i><br>discontinued</p></div></div>\n\n<div class=\"container2 clearfix top2line2\"><div class=\"col1width fl col1mg\"><a href=\"http://www.autoevolution.com/carfinder/\" class=\"redblk1 fr mgtop_40\">try the car finder</a></div>\n<div class=\"col2width fl bcol-white\">\n<div class=\"carpages col23width mgtop_35\"><a href=\"#letterA\">A</a><a href=\"#letterB\">B</a><a href=\"#letterC\">C</a><a href=\"#letterD\">D</a><a href=\"#letterE\">E</a><a href=\"#letterF\">F</a><a href=\"#letterG\">G</a><a href=\"#letterH\">H</a><a href=\"#letterI\">I</a><a href=\"#letterJ\">J</a><a href=\"#letterK\">K</a><a href=\"#letterL\">L</a><a href=\"#letterM\">M</a><a href=\"#letterN\">N</a><a href=\"#letterO\">O</a><a href=\"#letterP\">P</a><a href=\"#letterQ\">Q</a><a href=\"#letterR\">R</a><a href=\"#letterS\">S</a><a href=\"#letterT\">T</a><a href=\"#letterU\">U</a><a href=\"#letterV\">V</a><a href=\"#letterW\">W</a><a href=\"#letterX\">X</a><a href=\"#letterY\">Y</a><a href=\"#letterZ\">Z</a></div>\n</div>\n</div>\n</div><!-- pagewrapper -->\n<div id=\"footer\"><div class=\"container\">\n<div id=\"footcol1\"><a href=\"#rss\" class=\"fa fa-rss fl col-red\"></a><a href=\"http://www.autoevolution.com/\" id=\"footauto\">autoevolution</a><a href=\"http://www.autoevolution.com/static/privacy.html\" id=\"footprivacyl\">Privacy Policy</a></div>\n<div id=\"footcol2\"><ul><li><a href=\"http://www.autoevolution.com/cars/\">cars</a></li>\n<li><a href=\"http://www.autoevolution.com/moto/\">moto</a></li>\n<li><a href=\"http://www.autoevolution.com/news/\">news</a></li>\n<li><a href=\"http://www.autoevolution.com/cars/reviews/\">reviews</a></li>\n<li><a href=\"http://www.autoevolution.com/editorial/\">editorial</a></li>\n<li><a href=\"http://www.autoevolution.com/coverstory/\">coverstory</a></li>\n<li><a href=\"http://www.autoevolution.com/auto-guide/\">auto how-to</a></li>\n<li><a href=\"http://www.autoevolution.com/auto-glossary/\">glossary</a></li>\n<li><a href=\"http://www.autoevolution.com/carfinder/\">car finder</a></li></ul>\n<p>© 2008-2016 SoftNews NET. All rights reserved. autoevolution® and the autoevolution® logo are registered trademarks.</p>\n</div>\n</div></div>\n\n<script type=\"application/ld+json\">\n{\n\t\"@context\": \"http://schema.org\", \"@type\": \"Organization\", \"url\": \"http://www.autoevolution.com/\", \"logo\": \"http://www.autoevolution.com/_img/autoevolution_logo_2016_ldjs.png\", \"name\": \"autoevolution\",  \"sameAs\" : [\n\t\t\"https://www.facebook.com/autoevolution\",\n\t\t\"https://twitter.com/_autoevolution_\",\n\t\t\"https://plus.google.com/+autoevolutioncom/\",\n\t\t\"https://autoevolution.tumblr.com/\",\n\t\t\"https://flipboard.com/@autoevolution/autoevolution-e4m5gpaay\",\n\t\t\"https://ro.pinterest.com/autoevolution/\"\n\t]\n}\n</script>\n<script type=\"application/ld+json\">{ \"@context\": \"http://schema.org\", \"@type\": \"WebSite\", \"name\": \"autoevolution\", \"url\": \"http://www.autoevolution.com/\" }</script>\n\n<script type=\"text/javascript\" src=\"autoevolution_files/a\"></script>\n\n<script>\nwindow.aegal_cty = 'IE';\n\nfunction rmnu_open(ww)\n{\n\t$(\"#rtopmenu\").append('<div id=\"trmnu\" data-which=\"'+ww+'\">&nbsp;</div>');\n\n\tif(typeof window[\"rmnupop-\"+ww]!=='undefined') {\n\t\t$(\"#trmnu\").html(window[\"rmnupop-\"+ww]);\n\t\t$(\"#rtopmenu i.rtm-\"+ww).removeClass(\"active\").addClass(\"active\");\n\t\treturn;\n\t}\n\n\t$(\"#trmnu\").load(\"/xm.php\", {'m':ww, 'u':'http://www.autoevolution.com/cars/'}, function() {\n\t\t$(\"#rtopmenu i.rtm-\"+ww).removeClass(\"active\").addClass(\"active\");\n\t\twindow[\"rmnupop-\"+ww]=$(\"#trmnu\").html();\n\t});\n}\n\nfunction rmnu_close()\n{\n\t$(\"#trmnu\").remove();\n\t$(\"#rtopmenu i.active\").removeClass(\"active\");\n}\n\nfunction rmnu_toggle(ev)\n{\n\t$(\"#topmenu\").hide();\n\t$(\"#topmenubtn\").removeClass(\"active\");\n\n\tvar aa, ww;\n\n\tif($(ev.currentTarget).hasClass('fa-share-alt')) ww='share';\n\telse if($(ev.currentTarget).hasClass('fa-heart')) ww='like';\n\telse if($(ev.currentTarget).hasClass('fa-info-circle')) ww='info';\n\telse if($(ev.currentTarget).hasClass('fa-newspaper')) ww='paper';\n\telse return;\n\n\tif($(\"#trmnu\").length) {\n\t\tvar aa=$(\"#trmnu\").attr(\"data-which\");\n\t\trmnu_close();\n\t\tif(aa==ww) return;\n\t}\n\n\tev.preventDefault(); ev.stopPropagation();\n\trmnu_open(ww);\n}\n\nfunction aetopmenu_toggle(ev)\n{\n\tev.preventDefault(); ev.stopPropagation();\n\trmnu_close();\n\t$(\"#topmenu\").toggle();\n\t$(\"#topmenubtn\").toggleClass(\"active\");\n}\n\nfunction aeclosemenus1(ev)\n{\n\trmnu_close();\n\n\tif($(\"#topmenubtn\").hasClass(\"active\")) {\n\t\t$(\"#topmenu\").toggle();\n\t\t$(\"#topmenubtn\").removeClass(\"active\");\n\t}\n}\n\nwindow.onload=function() {\n\t//if(typeof aerunstartup==\"function\") aerunstartup();\n\t$(window).on(\"click\", aeclosemenus1);\n\t$(\"#topmenubtn\").on(\"click\", aetopmenu_toggle);\n\t$(\"#rtopmenu i.fa\").on(\"click\", rmnu_toggle);\n};\n\twindow.aegal_xdsect='cars';\nif(typeof aerunstartup==\"function\") aerunstartup();\naeinputdefaults('input[type=\"text\"]');\n</script>\n\n\n</body></html>\n<!-- cars-main -->"
  },
  {
    "path": "slybot/slybot/tests/data/templates/autoevolution.json",
    "content": "{\n    \"extractors\": {},\n    \"id\": \"f608-48fc-9420\",\n    \"name\": \"car\",\n    \"original_body\": \"<!DOCTYPE html>\\n<html lang=\\\"en-us\\\">\\n<head profile=\\\"http://www.w3.org/2005/10/profile\\\" id=\\\"head\\\" prefix=\\\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#\\\">\\n<title>HONDA Civic 5 Doors (2005 - 2008)</title>\\n<meta name=\\\"language\\\" content=\\\"en\\\"><meta name=\\\"robots\\\" content=\\\"noodp\\\">\\n<meta name=\\\"description\\\" content=\\\"General information, engines and tech specifications for HONDA Civic 5 Doors (2005, 2006, 2007, 2008)\\\">\\n<meta name=\\\"keywords\\\" content=\\\"HONDA, HONDA Civic 5 Doors, HONDA Civic 5 Doors (2005 - 2008), engines, specifications, specs, technical specs\\\">\\n<meta property=\\\"fb:app_id\\\" content=\\\"111790708909959\\\">\\n<meta property=\\\"og:type\\\" content=\\\"article\\\">\\n<meta property=\\\"og:url\\\" content=\\\"http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html\\\">\\n<meta property=\\\"og:title\\\" content=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\">\\n<meta property=\\\"og:description\\\" content=\\\"In 2005 Honda introduced the eighth generation Civic, with a different approach for the European market compared to the American/Japa...\\\">\\n<meta property=\\\"article:publisher\\\" content=\\\"https://www.facebook.com/autoevolution\\\">\\n<meta property=\\\"og:site_name\\\" content=\\\"autoevolution\\\">\\n<meta property=\\\"og:image\\\" content=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_1.jpg\\\">\\n<meta property=\\\"twitter:card\\\" content=\\\"summary\\\">\\n<meta property=\\\"twitter:site\\\" content=\\\"@_autoevolution_\\\">\\n<meta property=\\\"twitter:creator\\\" content=\\\"@_autoevolution_\\\">\\n<meta property=\\\"twitter:url\\\" content=\\\"http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html\\\">\\n<meta property=\\\"twitter:title\\\" content=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\">\\n<meta property=\\\"twitter:description\\\" content=\\\"In 2005 Honda introduced the eighth generation Civic, with a different approach for the European market compared to the American/Japa...\\\">\\n<meta property=\\\"twitter:image\\\" content=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_1.jpg\\\">\\n<link href=\\\"http://s1.cdn.autoevolution.com/_min/?g=cssblog&amp;v=2016_28\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\">\\n<!--[if IE]><link href=\\\"http://s1.cdn.autoevolution.com/_css/style_ie.css?v=1188\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"><![endif]-->\\n<link rel=\\\"icon\\\" type=\\\"image/x-icon\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/favicon.ico\\\"><link rel=\\\"mask-icon\\\" sizes=\\\"any\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/aefavicon.svg\\\" color=\\\"#000000\\\">\\n<link rel=\\\"apple-touch-icon\\\" sizes=\\\"57x57\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/touch-icon-57.png\\\">\\n<link rel=\\\"apple-touch-icon\\\" sizes=\\\"72x72\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/touch-icon-72.png\\\">\\n<link rel=\\\"apple-touch-icon\\\" sizes=\\\"114x114\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/touch-icon-114.png\\\">\\n<link rel=\\\"alternate\\\" type=\\\"application/rss+xml\\\" title=\\\"autoevolution news\\\" href=\\\"http://www.autoevolution.com/rss/backend.xml\\\">\\n<link rel=\\\"publisher\\\" href=\\\"https://plus.google.com/+autoevolutioncom\\\">\\n<link rel=\\\"canonical\\\" href=\\\"http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html\\\">\\n<script>\\nwindow.google_analytics_uacct = \\\"UA-61277-6\\\";\\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\\nga('create', 'UA-61277-6', 'autoevolution.com');\\nga('require', 'displayfeatures');\\nga('send', 'pageview');\\nvar gats_scrolled=0;\\nsetTimeout(function(){if(!gats_scrolled){ gats_scrolled=1; ga('send','event','No-Bounce','Page-Read'); }}, 30000);\\nsetTimeout(function(){window.addEventListener ? window.addEventListener('scroll', ga_scroll, false) : window.attachEvent('onScroll', ga_scroll)}, 5000);\\nfunction ga_scroll(){ if(!gats_scrolled) { gats_scrolled=1; ga('send','event','No-Bounce','Scrolled'); }}\\n</script>\\n<script src=\\\"http://s1.cdn.autoevolution.com/_min/?g=js_jquery&amp;v=2016_16\\\"></script>\\n\\n<!-- BEGIN 33Across SiteCTRL Script -->\\n<script type='text/javascript'>if(document.location.protocol=='http:'){ var Tynt=Tynt||[];Tynt.push('dzK18g1myr5ABnrkHcnlKl'); (function(){var h,s=document.createElement('script');s.src='http://cdn.tynt.com/ti.js'; h=document.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);})();}</script>\\n<!-- END 33Across SiteCTRL Script -->\\n\\n\\n</head>\\n<body id=\\\"body\\\" itemscope itemtype=\\\"http://schema.org/Organization\\\">\\n\\t<div class=\\\"header-bg\\\">\\n\\t\\t<div class=\\\"header\\\" id=\\\"header\\\">\\n\\t\\t\\t\\t\\t\\t<a class=\\\"logo logov\\\" href=\\\"http://www.autoevolution.com/\\\" alt=\\\"autoevolution\\\" title=\\\"autoevolution\\\" itemprop=\\\"url\\\">autoevolution</a>\\n\\t\\t\\t<div class=\\\"headermenu\\\">\\n\\t\\t\\t\\t<a  href=\\\"http://www.autoevolution.com/news/\\\" title=\\\"Automotive news and rumors\\\">News</a>\\n\\t\\t\\t\\t<a class=\\\"active\\\" href=\\\"http://www.autoevolution.com/cars/\\\" title=\\\"Car manufacturer and models database\\\">Cars</a>\\n\\t\\t\\t\\t<a  href=\\\"http://www.autoevolution.com/moto/\\\" title=\\\"Motorcycle manufacturer and models database\\\">Moto</a>\\n\\t\\t\\t\\t<a  href=\\\"http://www.autoevolution.com/reviews/\\\" title=\\\"Car reviews by autoevolution\\\">Reviews</a>\\n\\t\\t\\t\\t<a  href=\\\"http://www.autoevolution.com/spyshots/\\\" title=\\\"Spyshots and car illustrations\\\">Spyshots</a>\\n\\t\\t\\t\\t<a  id=\\\"green\\\" href=\\\"http://www.autoevolution.com/green/\\\" title=\\\"The greener side of the automotive industry\\\">Green</a>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"searchbox\\\"><span class=\\\"glyph\\\">&#x2315;</span><form action=\\\"/search.php?t=news\\\" method=\\\"post\\\"><input type=\\\"text\\\" name=\\\"s\\\" value=\\\"Search here...\\\" onclick=\\\"if(this.value=='Search here...') this.value=''\\\" onblur=\\\"if(this.value=='') this.value='Search here...'\\\"></form></div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"topbar-bg\\\">\\n\\t\\t<div class=\\\"topbar topbar_home\\\" id=\\\"topbar\\\">\\n\\t\\t\\t<p class=\\\"boldd\\\">main topics:</p>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/editorial/\\\" title=\\\"Editorial\\\">EDITORIAL</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/coverstory/\\\" title=\\\"Coverstory\\\">COVERSTORY</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/auto-moto-shows/\\\" title=\\\"Auto Shows\\\">AUTO SHOWS</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/news/stars-cars/\\\" title=\\\"Stars & Cars\\\">STARS &amp; CARS</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/news/tuning/\\\" title=\\\"Tuning News\\\">TUNING</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/auto-guide/\\\" title=\\\"Auto Guides & How-Tos\\\">AUTO HOW-TO</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/bac/\\\" title=\\\"Blood Alcohol Concentration Calculator\\\">BAC CALCULATOR</a>\\n\\t\\t\\t<span class=\\\"bull\\\">&bull;</span>\\n\\t\\t\\t<a class=\\\"boldd col-bmw\\\" href=\\\"http://www.autoevolution.com/bmw-blog/\\\" title=\\\"BMW Blog\\\">BMW</a>\\n\\t\\t\\t<a class=\\\"boldd col-toyota\\\" href=\\\"http://www.autoevolution.com/toyota-blog/\\\" title=\\\"Toyota Blog\\\">TOYOTA</a>\\n\\t\\t\\t<a class=\\\"boldd col-mercedes\\\" href=\\\"http://www.autoevolution.com/mercedes-blog/\\\" title=\\\"Mercedes Blog\\\">MERCEDES</a>\\n\\t\\t\\t<span class=\\\"expander glyph jhrefb\\\" id=\\\"expander\\\" onclick=\\\"slidetop()\\\">... &#x25bc;</span>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"topbar\\\" id=\\\"topbar2\\\">\\n\\t\\t\\t<p class=\\\"boldd\\\">don't miss:</p>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/newstag/pic+of+the+day/\\\" title=\\\"Photo of the Day Series\\\">PHOTO OF THE DAY</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/news/tech-toys\\\" title=\\\"Auto Gadgets & Toys\\\">TECH TOYS</A>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/news/safety/\\\" title=\\\"Safety News\\\">SAFETY</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/news/motorsport\\\" title=\\\"Motorsport\\\">MOTORSPORT</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/carfinder/\\\" title=\\\"Car Finder\\\">CAR FINDER</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/moto-how-to/\\\" title=\\\"Moto Guides & How-Tos\\\">MOTO HOW-TO</a>\\n\\t\\t\\t<a class=\\\"nopad\\\" href=\\\"http://www.autoevolution.com/auto-glossary/\\\" title=\\\"Glossary\\\">GLOSSARY</a>\\n\\t\\t</div>\\n\\t</div>\\n<div class=\\\"maincontent\\\">\\n\\t<div class=\\\"content fullsize\\\">\\n\\t\\t<h1 class=\\\"nofloat\\\"><img class=\\\"nomgleft\\\" alt=\\\"HONDA\\\" title=\\\"HONDA\\\" src=\\\"http://s1.cdn.autoevolution.com/images/producers/honda-50.jpg\\\" width=\\\"32\\\" height=\\\"32\\\" /> HONDA Civic 5 Doors <span class=\\\"faded\\\">2005 - 2008</span></h1>\\n\\t\\t\\t\\t<div style=\\\"font-size: 115%; margin-top:8px;\\\">\\n\\t\\t<a href=\\\"http://www.autoevolution.com/\\\" title=\\\"autoevolution home\\\">Home</a>\\n\\t &gt; <a href=\\\"http://www.autoevolution.com/cars/\\\" title=\\\"Cars\\\">Cars</a>  &gt; <a href=\\\"http://www.autoevolution.com/honda/\\\" title=\\\"HONDA\\\">HONDA</a>  &gt; <a href=\\\"http://www.autoevolution.com/honda/civic-5-doors/\\\" title=\\\"Civic 5 Doors\\\">Civic 5 Doors</a>  &gt; <a href=\\\"http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html\\\" title=\\\"Civic 5 Doors 2005 - 2008\\\">Civic 5 Doors 2005 - 2008</a> \\t\\t</div>\\n\\t\\t\\t<div class=\\\"brk\\\"></div>\\n\\n\\t\\t<div class=\\\"box leaderheight long ad\\\"><script async src=\\\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script><ins class=\\\"adsbygoogle\\\" style=\\\"display:inline-block;width:728px;height:90px\\\" data-ad-client=\\\"ca-pub-7668878252976156\\\" data-ad-slot=\\\"3944680237\\\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>\\n\\n\\t\\t<div class=\\\"modelbox\\\">\\n\\t\\t\\t<div class=\\\"newstext fr\\\">\\n\\t\\t\\t\\t<strong class=\\\"intro\\\">In 2005 Honda introduced the eighth generation Civic, with a different approach for the European market compared to the American/Japanese market.</strong> A year after it presented the Civic Concept, the production version rolled out, marking a staggering and unprecedented resemblance between the two. The car introduced a new and unconventional design inside and out. With the focus clearly on looks, Honda tried to answer complains of boring design from the previous generation and develop a compact addressed to a younger consumer segment. The engines behind the new Civic are both fuel efficient and thrifty with a 1.4-liter i-DSI, a 1.8-liter i-VTEC petrol unit and a 2.2-liter i-CTDi diesel.\\t\\t\\t\\t<div class=\\\"sharebox half\\\">\\n\\t\\t\\t\\t\\t<span>share: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>\\n\\t\\t\\t\\t\\t<a href=\\\"#\\\" onclick=\\\"window.open('https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.autoevolution.com%2Fcars%2Fhonda-civic-5-doors-2005.html','', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600'); return false;\\\" rel=\\\"nofollow\\\" title=\\\"Share this page on Facebook\\\" class=\\\"fb\\\"><span class=\\\"glyph\\\">&#xf083;</span> share</a>\\n\\t\\t\\t\\t\\t<a href=\\\"https://plus.google.com/share?url=http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html\\\" rel=\\\"nofollow\\\" target=\\\"_blank\\\" title=\\\"Share this page on Google Plus\\\" class=\\\"gplus\\\" onclick=\\\"window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600'); return false;\\\"><span class=\\\"glyph\\\">&#xf086;</span> share</a>\\n\\t\\t\\t\\t\\t<a href=\\\"http://twitter.com/intent/tweet?related=_autoevolution_&via=_autoevolution_&text=&url=http%3A%2F%2Fwww.autoevolution.com%2Fcars%2Fhonda-civic-5-doors-2005.html\\\" target=\\\"_blank\\\" rel=\\\"nofollow\\\" title=\\\"Share this page on Twitter\\\" class=\\\"twitter\\\" onclick=\\\"window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600'); return false;\\\"><span class=\\\"glyph\\\">&#xf084;</span> tweet</a>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<p class=\\\"more-news mgtop11\\\"><b>see also: &nbsp;</b>\\n\\t\\t\\t\\t\\t<a href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_1.jpg\\\" target=\\\"_blank\\\" onclick=\\\"return open_lght();\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008) photo gallery\\\">photo gallery</a>\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t\\t<div class=\\\"modelphoto modelphoto_wg fl\\\">\\n\\t\\t\\t\\t<a title=\\\"HONDA Civic 5 Doors (2005 - 2008) photo gallery\\\" target=\\\"_blank\\\" onclick=\\\"return open_lght();\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_1.jpg\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/models/HONDA_Civic-5-Doors-2005_main.jpg\\\" width=\\\"270\\\" height=\\\"180\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\"></a>\\n\\t\\t\\t\\t<span class=\\\"glyph magglass3 jhref\\\" onclick=\\\"open_lght()\\\">&#x2316;</span>\\n\\t\\t\\t\\t<div class=\\\"glyph galtitle jhrefb\\\" onclick=\\\"open_lght()\\\">13 photos</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t\\n\\t\\t\\t<div class=\\\"brk\\\"></div>\\n\\t\\t</div>\\n\\n\\t\\t\\t\\t<h2 class=\\\"nofloat mgtop22\\\" id=\\\"engines\\\">Engines <img src=\\\"http://s1.cdn.autoevolution.com/_img/icon-engine.png\\\" align=\\\"absmiddle\\\" width=\\\"44\\\" height=\\\"28\\\" alt=\\\"engines\\\" hspace=\\\"5\\\" /></h2>\\n\\n\\t\\t<div style=\\\"font-size: 18px; line-height: 33px; height: 33px; text-transform: uppercase; margin-top: 22px;\\\" class=\\\"\\\" id=\\\"compare\\\">compare selected engine with:\\n\\t\\t\\t<select name=\\\"cmp1\\\" onchange=\\\"cmp_setbrand(this.value)\\\"><option value=\\\"0\\\">pick brand...</option><option value=\\\"10\\\" >ACURA</option><option value=\\\"11\\\" >ALFA ROMEO</option><option value=\\\"100\\\" >ARIEL</option><option value=\\\"12\\\" >ARO</option><option value=\\\"13\\\" >ASTON MARTIN</option><option value=\\\"14\\\" >AUDI</option><option value=\\\"15\\\" >BENTLEY</option><option value=\\\"16\\\" >BMW</option><option value=\\\"17\\\" >BRISTOL</option><option value=\\\"109\\\" >BUFORI</option><option value=\\\"19\\\" >BUGATTI</option><option value=\\\"20\\\" >BUICK</option><option value=\\\"21\\\" >CADILLAC</option><option value=\\\"101\\\" >CATERHAM</option><option value=\\\"22\\\" >CHEVROLET</option><option value=\\\"23\\\" >CHRYSLER</option><option value=\\\"24\\\" >CITROEN</option><option value=\\\"25\\\" >DACIA</option><option value=\\\"26\\\" >DAEWOO</option><option value=\\\"27\\\" >DAIHATSU</option><option value=\\\"112\\\" >DATSUN</option><option value=\\\"28\\\" >DMC</option><option value=\\\"29\\\" >DODGE</option><option value=\\\"91\\\" >DONKERVOORT</option><option value=\\\"113\\\" >DR MOTOR</option><option value=\\\"30\\\" >FERRARI</option><option value=\\\"31\\\" >FIAT</option><option value=\\\"104\\\" >FISKER</option><option value=\\\"32\\\" >FORD</option><option value=\\\"92\\\" >FSO</option><option value=\\\"103\\\" >GEELY</option><option value=\\\"33\\\" >GMC</option><option value=\\\"106\\\" >GTA Motor</option><option value=\\\"35\\\" >HINDUSTAN</option><option value=\\\"36\\\" >HOLDEN</option><option value=\\\"37\\\" >HONDA</option><option value=\\\"38\\\" >HUMMER</option><option value=\\\"39\\\" >HYUNDAI</option><option value=\\\"40\\\" >INFINITI</option><option value=\\\"41\\\" >ISUZU</option><option value=\\\"42\\\" >JAGUAR</option><option value=\\\"43\\\" >JEEP</option><option value=\\\"44\\\" >KIA</option><option value=\\\"99\\\" >KOENIGSEGG</option><option value=\\\"97\\\" >KTM</option><option value=\\\"45\\\" >LADA</option><option value=\\\"46\\\" >LAMBORGHINI</option><option value=\\\"48\\\" >LANCIA</option><option value=\\\"47\\\" >LAND ROVER</option><option value=\\\"49\\\" >LEXUS</option><option value=\\\"51\\\" >LINCOLN</option><option value=\\\"50\\\" >LOTUS</option><option value=\\\"107\\\" >Mahindra</option><option value=\\\"105\\\" >MARUSSIA</option><option value=\\\"93\\\" >MARUTI SUZUKI</option><option value=\\\"53\\\" >MASERATI</option><option value=\\\"54\\\" >MAYBACH</option><option value=\\\"52\\\" >MAZDA</option><option value=\\\"89\\\" >MCLAREN</option><option value=\\\"55\\\" >MERCEDES BENZ</option><option value=\\\"57\\\" >MERCURY</option><option value=\\\"56\\\" >MG</option><option value=\\\"58\\\" >MINI</option><option value=\\\"59\\\" >MITSUBISHI</option><option value=\\\"60\\\" >MORGAN</option><option value=\\\"61\\\" >NISSAN</option><option value=\\\"62\\\" >OLDSMOBILE</option><option value=\\\"63\\\" >OPEL</option><option value=\\\"67\\\" >PAGANI</option><option value=\\\"69\\\" >PANOZ</option><option value=\\\"114\\\" >PERODUA</option><option value=\\\"64\\\" >PEUGEOT</option><option value=\\\"65\\\" >PONTIAC</option><option value=\\\"66\\\" >PORSCHE</option><option value=\\\"68\\\" >PROTON</option><option value=\\\"110\\\" >QOROS</option><option value=\\\"108\\\" >RAM Trucks</option><option value=\\\"70\\\" >RENAULT</option><option value=\\\"71\\\" >ROLLS-ROYCE</option><option value=\\\"111\\\" >ROVER</option><option value=\\\"72\\\" >SAAB</option><option value=\\\"80\\\" >SALEEN</option><option value=\\\"94\\\" >SAMSUNG</option><option value=\\\"90\\\" >SANTANA</option><option value=\\\"73\\\" >SATURN</option><option value=\\\"75\\\" >SCION</option><option value=\\\"74\\\" >SEAT</option><option value=\\\"76\\\" >SKODA</option><option value=\\\"77\\\" >SMART</option><option value=\\\"79\\\" >SPYKER</option><option value=\\\"78\\\" >SSANGYONG</option><option value=\\\"81\\\" >SUBARU</option><option value=\\\"82\\\" >SUZUKI</option><option value=\\\"95\\\" >TATA MOTORS</option><option value=\\\"96\\\" >TESLA MOTORS</option><option value=\\\"83\\\" >TOYOTA</option><option value=\\\"85\\\" >TVR</option><option value=\\\"84\\\" >VAUXHALL</option><option value=\\\"86\\\" >VOLKSWAGEN</option><option value=\\\"87\\\" >VOLVO</option><option value=\\\"102\\\" >WIESMANN</option><option value=\\\"88\\\" >ZENDER</option></select>\\n\\t\\t\\t<span id=\\\"cmp2\\\"></span>\\n\\t\\t\\t<span id=\\\"cmp3\\\"></span>\\n\\t\\t\\t<span id=\\\"cmp4\\\"></span>\\n\\t\\t\\t<script type=\\\"text/javascript\\\">window.first_id = 0;</script>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"enginesbox nobg\\\">\\n\\t\\t\\t<div class=\\\"fl enginesleft\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<h4>Gasoline engines</h4>\\n\\t\\t\\t\\t\\t<ul class=\\\"list\\\"><li id=\\\"li_eng_honda-civic-5-doors-2005-14-i-dsi\\\" class=\\\"ellip\\\" onclick=\\\"engine_show('eng_honda-civic-5-doors-2005-14-i-dsi'); document.getElementById('_wlts2a').contentDocument.location.reload(true);\\\" title=\\\"HONDA Civic 5 Doors 1.4 i-DSI 2005 - 2008\\\">1.4 i-DSI</li><li id=\\\"li_eng_honda-civic-5-doors-2005-18-i-vtec\\\" class=\\\"ellip\\\" onclick=\\\"engine_show('eng_honda-civic-5-doors-2005-18-i-vtec'); document.getElementById('_wlts2a').contentDocument.location.reload(true);\\\" title=\\\"HONDA Civic 5 Doors 1.8 i-VTEC 2005 - 2008\\\">1.8 i-VTEC</li></ul>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<h4>Diesel engines</h4>\\n\\t\\t\\t\\t\\t<ul class=\\\"list\\\"><li id=\\\"li_eng_honda-civic-5-doors-2005-22-i-ctdi\\\" class=\\\"ellip\\\" onclick=\\\"engine_show('eng_honda-civic-5-doors-2005-22-i-ctdi'); document.getElementById('_wlts2a').contentDocument.location.reload(true);\\\" title=\\\"HONDA Civic 5 Doors 2.2 i-CTDi 2005 - 2008\\\">2.2 i-CTDi</li></ul>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"fr enginesright posrel\\\">\\n\\t\\t\\t\\t<div id=\\\"eng_honda-civic-5-doors-2005-14-i-dsi\\\" data-engid=\\\"2857\\\" class=\\\"engine-block\\\"><h3><span class=\\\"red2\\\">HONDA Civic 5 Doors 1.4 i-DSI</span> - technical specs</h3><div class=\\\"enginedata engine-inline\\\"><h3>engine specifications</h3><dl title=\\\"General Specs\\\" class=\\\"grspec\\\"><dt>Cylinders</dt><dd>L4 </dd><dt>Displacement</dt><dd>1339 cm3</dd><dt>Power</dt><dd>61 KW @ 5700 RPM<br/>83 HP @ 5700 RPM<br/>82 BHP @ 5700 RPM<dt>Torque</dt><dd>87.8 lb-ft @ 2800 RPM<br/>119 Nm @ 2800 RPM<dt>Fuel System</dt><dd>Multipoint Injection </dd><dt>Fuel</dt><dd>Gasoline </dd><dt>CO2 Emissions</dt><dd>139 g/km</dd><div class=\\\"brk\\\"></div></dl><h3>performance specifications</h3><dl title=\\\"Performance Specs\\\" ><dt>Top Speed</dt><dd>105.6 mph <b>OR</b> 170 km/h</dd><dt>Acceleration 0-62 Mph (0-100 kph)</dt><dd>14.6 s</dd><div class=\\\"brk\\\"></div></dl><h3>fuel consumption specifications</h3><dl title=\\\"Fuel Consumption Specs\\\" ><dt>City</dt><dd>30.9 mpg US <b>OR</b> 7.6 L/100Km</dd><dt>Highway</dt><dd>48 mpg US <b>OR</b> 4.9 L/100Km</dd><dt>Combined</dt><dd>39.9 mpg US <b>OR</b> 5.9 L/100Km</dd><div class=\\\"brk\\\"></div></dl><h3>transmission specifications</h3><dl title=\\\"Transmission Specs\\\" ><dt>Drive Type</dt><dd>Front Wheel Drive </dd><dt>Gearbox</dt><dd>Manual, 6 Speed </dd><div class=\\\"brk\\\"></div></dl><h3>brakes specifications</h3><dl title=\\\"Brakes Specs\\\" ><dt>Front</dt><dd>Ventilated Discs </dd><dt>Rear</dt><dd>Discs </dd><div class=\\\"brk\\\"></div></dl><h3>tires specifications</h3><dl title=\\\"Tires Specs\\\" ><dt>Tire Size</dt><dd>205/55R16 </dd><div class=\\\"brk\\\"></div></dl><h3>dimensions specifications</h3><dl title=\\\"Dimensions Specs\\\" ><dt>Length</dt><dd>167.3 in <b>OR</b> 4249 mm</dd><dt>Width</dt><dd>69.3 in <b>OR</b> 1760 mm</dd><dt>Height</dt><dd>57.5 in <b>OR</b> 1461 mm</dd><dt>Front/rear Track</dt><dd>59.1/59.4 in <b>OR</b> 1,501/1,509 mm</dd><dt>Wheelbase</dt><dd>103.9 in <b>OR</b> 2639 mm</dd><dt>Ground Clearance</dt><dd>- </dd><dt>Cargo Volume</dt><dd>17.1 cuFT <b>OR</b> 484 L</dd><dt>Cd</dt><dd>- </dd><div class=\\\"brk\\\"></div></dl><h3>weight specifications</h3><dl title=\\\"Weight Specs\\\" ><dt>Unladen Weight</dt><dd>2513.3 lbs <b>OR</b> 1140 kg</dd><dt>Gross Weight Limit</dt><dd>3637.6 lbs <b>OR</b> 1650 kg</dd><div class=\\\"brk\\\"></div></dl></div></div><div id=\\\"eng_honda-civic-5-doors-2005-18-i-vtec\\\" data-engid=\\\"10832\\\" class=\\\"engine-block\\\"><h3><span class=\\\"red2\\\">HONDA Civic 5 Doors 1.8 i-VTEC</span> - technical specs</h3><div class=\\\"enginedata engine-inline\\\"><h3>engine specifications</h3><dl title=\\\"General Specs\\\" class=\\\"grspec\\\"><dt>Cylinders</dt><dd>L4 </dd><dt>Displacement</dt><dd>1799 cm3</dd><dt>Power</dt><dd>103 KW @ 6300 RPM<br/>140 HP @ 6300 RPM<br/>138 BHP @ 6300 RPM<dt>Torque</dt><dd>128.3 lb-ft @ 4300 RPM<br/>174 Nm @ 4300 RPM<dt>Fuel System</dt><dd>Multipoint Injection </dd><dt>Fuel</dt><dd>Gasoline </dd><dt>CO2 Emissions</dt><dd>152 g/km</dd><div class=\\\"brk\\\"></div></dl><h3>performance specifications</h3><dl title=\\\"Performance Specs\\\" ><dt>Top Speed</dt><dd>127.4 mph <b>OR</b> 205 km/h</dd><dt>Acceleration 0-62 Mph (0-100 kph)</dt><dd>8.9 s</dd><div class=\\\"brk\\\"></div></dl><h3>fuel consumption specifications</h3><dl title=\\\"Fuel Consumption Specs\\\" ><dt>City</dt><dd>28.7 mpg US <b>OR</b> 8.2 L/100Km</dd><dt>Highway</dt><dd>45.2 mpg US <b>OR</b> 5.2 L/100Km</dd><dt>Combined</dt><dd>36.8 mpg US <b>OR</b> 6.4 L/100Km</dd><div class=\\\"brk\\\"></div></dl><h3>transmission specifications</h3><dl title=\\\"Transmission Specs\\\" ><dt>Drive Type</dt><dd>Front Wheel Drive </dd><dt>Gearbox</dt><dd>Manual, 6 Speed </dd><div class=\\\"brk\\\"></div></dl><h3>brakes specifications</h3><dl title=\\\"Brakes Specs\\\" ><dt>Front</dt><dd>Ventilated Discs </dd><dt>Rear</dt><dd>Discs </dd><div class=\\\"brk\\\"></div></dl><h3>tires specifications</h3><dl title=\\\"Tires Specs\\\" ><dt>Tire Size</dt><dd>205/55R16 </dd><div class=\\\"brk\\\"></div></dl><h3>dimensions specifications</h3><dl title=\\\"Dimensions Specs\\\" ><dt>Length</dt><dd>167.3 in <b>OR</b> 4249 mm</dd><dt>Width</dt><dd>69.3 in <b>OR</b> 1760 mm</dd><dt>Height</dt><dd>57.5 in <b>OR</b> 1461 mm</dd><dt>Front/rear Track</dt><dd>59.1/59.4 in <b>OR</b> 1,501/1,509 mm</dd><dt>Wheelbase</dt><dd>103.9 in <b>OR</b> 2639 mm</dd><dt>Ground Clearance</dt><dd>- </dd><dt>Cargo Volume</dt><dd>17.1 cuFT <b>OR</b> 484 L</dd><dt>Cd</dt><dd>- </dd><div class=\\\"brk\\\"></div></dl><h3>weight specifications</h3><dl title=\\\"Weight Specs\\\" ><dt>Unladen Weight</dt><dd>2568.4 lbs <b>OR</b> 1165 kg</dd><dt>Gross Weight Limit</dt><dd>3858.1 lbs <b>OR</b> 1750 kg</dd><div class=\\\"brk\\\"></div></dl></div></div><div id=\\\"eng_honda-civic-5-doors-2005-22-i-ctdi\\\" data-engid=\\\"10833\\\" class=\\\"engine-block\\\"><h3><span class=\\\"red2\\\">HONDA Civic 5 Doors 2.2 i-CTDi</span> - technical specs</h3><div class=\\\"enginedata engine-inline\\\"><h3>engine specifications</h3><dl title=\\\"General Specs\\\" class=\\\"grspec\\\"><dt>Cylinders</dt><dd>L4 </dd><dt>Displacement</dt><dd>2204 cm3</dd><dt>Power</dt><dd>103 KW @ 4000 RPM<br/>140 HP @ 4000 RPM<br/>138 BHP @ 4000 RPM<dt>Torque</dt><dd>250.8 lb-ft @ 2000 RPM<br/>340 Nm @ 2000 RPM<dt>Fuel System</dt><dd>Common Rail </dd><dt>Fuel</dt><dd>Diesel </dd><dt>CO2 Emissions</dt><dd>135 g/km</dd><div class=\\\"brk\\\"></div></dl><h3>performance specifications</h3><dl title=\\\"Performance Specs\\\" ><dt>Top Speed</dt><dd>127.4 mph <b>OR</b> 205 km/h</dd><dt>Acceleration 0-62 Mph (0-100 kph)</dt><dd>8.6 s</dd><div class=\\\"brk\\\"></div></dl><h3>fuel consumption specifications</h3><dl title=\\\"Fuel Consumption Specs\\\" ><dt>City</dt><dd>35.6 mpg US <b>OR</b> 6.6 L/100Km</dd><dt>Highway</dt><dd>54.7 mpg US <b>OR</b> 4.3 L/100Km</dd><dt>Combined</dt><dd>46.1 mpg US <b>OR</b> 5.1 L/100Km</dd><div class=\\\"brk\\\"></div></dl><h3>transmission specifications</h3><dl title=\\\"Transmission Specs\\\" ><dt>Drive Type</dt><dd>Front Wheel Drive </dd><dt>Gearbox</dt><dd>Manual, 6 Speed </dd><div class=\\\"brk\\\"></div></dl><h3>brakes specifications</h3><dl title=\\\"Brakes Specs\\\" ><dt>Front</dt><dd>Ventilated Discs </dd><dt>Rear</dt><dd>Discs </dd><div class=\\\"brk\\\"></div></dl><h3>tires specifications</h3><dl title=\\\"Tires Specs\\\" ><dt>Tire Size</dt><dd>205/55R16 </dd><div class=\\\"brk\\\"></div></dl><h3>dimensions specifications</h3><dl title=\\\"Dimensions Specs\\\" ><dt>Length</dt><dd>167.3 in <b>OR</b> 4249 mm</dd><dt>Width</dt><dd>69.3 in <b>OR</b> 1760 mm</dd><dt>Height</dt><dd>57.5 in <b>OR</b> 1461 mm</dd><dt>Front/rear Track</dt><dd>59.1/59.4 in <b>OR</b> 1,501/1,509 mm</dd><dt>Wheelbase</dt><dd>103.9 in <b>OR</b> 2639 mm</dd><dt>Ground Clearance</dt><dd>- </dd><dt>Cargo Volume</dt><dd>17.1 cuFT <b>OR</b> 484 L</dd><dt>Cd</dt><dd>- </dd><div class=\\\"brk\\\"></div></dl><h3>weight specifications</h3><dl title=\\\"Weight Specs\\\" ><dt>Unladen Weight</dt><dd>2914.5 lbs <b>OR</b> 1322 kg</dd><dt>Gross Weight Limit</dt><dd>4166.7 lbs <b>OR</b> 1890 kg</dd><div class=\\\"brk\\\"></div></dl></div></div>\\t\\t\\t\\t<div class=\\\"ad enginesrightad\\\" id=\\\"_wlts2\\\"><iframe id=\\\"_wlts2a\\\" src=\\\"/yd.php\\\" width=\\\"300\\\" height=\\\"250\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\"></iframe></div>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"brk\\\"></div>\\n\\t\\t</div>\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\t<h2 class=\\\"nofloat mgtop22\\\" id=\\\"photo_gallery\\\">Photo Gallery</h2>\\n\\t\\t<div id=\\\"galleria_ds\\\">\\n\\t\\t<div class=\\\"enginesbox\\\" style=\\\"padding:5px;\\\"><div class=\\\"photogal\\\" style=\\\"width:990px;\\\"><h4>exterior</h4><ul><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_1.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_0\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_1.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20538\\\" data-gidx=\\\"0\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_2.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_1\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_2.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20539\\\" data-gidx=\\\"1\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_3.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_2\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_3.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20540\\\" data-gidx=\\\"2\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_4.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_3\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_4.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20541\\\" data-gidx=\\\"3\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_5.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_4\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_5.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20542\\\" data-gidx=\\\"4\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_6.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_5\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_6.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20543\\\" data-gidx=\\\"5\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_7.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_6\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_7.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20544\\\" data-gidx=\\\"6\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_8.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_7\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_8.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20545\\\" data-gidx=\\\"7\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_9.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_8\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_9.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20546\\\" data-gidx=\\\"8\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div></ul></div><div class=\\\"brk\\\"></div></div><div class=\\\"enginesbox\\\" style=\\\"padding:5px;\\\"><div class=\\\"photogal\\\" style=\\\"width:990px;\\\"><h4>interior</h4><ul><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_10.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_9\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_10.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20547\\\" data-gidx=\\\"9\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_11.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_10\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_11.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20548\\\" data-gidx=\\\"10\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_12.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_11\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_12.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20549\\\" data-gidx=\\\"11\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div><div><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/HONDACivic5Doors-888_13.jpg\\\" title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" id=\\\"aegal_12\\\"><img src=\\\"http://s1.cdn.autoevolution.com/images/gallery/thumbs/HONDACivic5Doors-thumbnail-888_13.jpg\\\" data-title=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" data-description=\\\"Photo credits: HONDA\\\" data-gidm=\\\"20550\\\" data-gidx=\\\"12\\\" height=\\\"60\\\" alt=\\\"HONDA Civic 5 Doors (2005 - 2008)\\\" /></a></div></ul></div><div class=\\\"brk\\\"></div></div>\\t\\t</div>\\n\\t\\t<div class=\\\"brk\\\"></div>\\n\\t\\t\\n\\t\\t<div class=\\\"mgtop22\\\" id=\\\"prcontainer\\\"></div>\\n\\t</div>\\n</div>\\n<div class=\\\"brk\\\"></div>\\n<div class=\\\"footer-bg\\\" id=\\\"footer\\\">\\n\\t<div class=\\\"footer\\\">\\n\\t\\t<a href=\\\"http://www.autoevolution.com/\\\" title=\\\"autoevolution\\\" class=\\\"logof\\\">autoevolution</a>\\n\\t\\t<ul>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9jYXJzLw==')\\\"  title=\\\"Cars and Manufacturers Database\\\">cars</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9tb3RvLw==')\\\"  title=\\\"Motorcycle and Manufacturers Database\\\">moto</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9uZXdzLw==')\\\"  title=\\\"Latest Automotive News\\\">news</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9yZXZpZXdzLw==')\\\"  title=\\\"autoevolution reviews\\\">reviews</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9lZGl0b3JpYWwv')\\\"  title=\\\"Editorial\\\">editorial</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9jb3ZlcnN0b3J5Lw==')\\\"  title=\\\"Coverstory\\\">coverstory</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9hdXRvLWd1aWRlLw==')\\\"  title=\\\"Auto How-To\\\">auto how-to</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9hdXRvLWdsb3NzYXJ5Lw==')\\\"  title=\\\"Technical Term Glossary\\\">glossary</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9jYXJmaW5kZXIv')\\\"  title=\\\"Car Finder\\\">car finder</li>\\n\\t\\t\\t<li class=\\\"jhref\\\"  class=\\\"jhref\\\" onclick=\\\"ae_jjmp('aHR0cDovL3d3dy5hdXRvZXZvbHV0aW9uLmNvbS9yc3MtY2hhbm5lbHMv')\\\"  title=\\\"RSS Feeds\\\">rss</li>\\n\\t\\t</ul>\\n\\t\\t<p>\\n\\t\\t\\t&copy; 2008-2016 SoftNews NET. All rights reserved. <span itemprop=\\\"name\\\">autoevolution</span>&reg; and the autoevolution&reg; logo are registered trademarks.\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/static/copyright.html\\\" rel=\\\"nofollow\\\" title=\\\"Copyright Information\\\">Copyright information</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/static/privacy.html\\\" rel=\\\"nofollow\\\" title=\\\"Privacy Policy\\\">Privacy Policy</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/static/terms.html\\\" rel=\\\"nofollow\\\" title=\\\"Terms of Use\\\">Terms of Use</a>\\n\\t\\t\\t<a href=\\\"http://www.autoevolution.com/contact/\\\" rel=\\\"nofollow\\\" title=\\\"Contact Us\\\">Contact Us</a>\\n\\t\\t</p>\\n\\t</div>\\n</div>\\n\\n<script src=\\\"http://s1.cdn.autoevolution.com/_min/?g=js_swipebox&amp;v=2016_21\\\"></script>\\n<script>\\n$(window).ready(function(){\\n\\twindow.aegal_cty = 'IE';\\n\\twindow.aegal_xdsect='cars';\\n\\twindow.aegal_imgr='cars';\\n\\t$('a.s_gallery, a.extragal').swipebox();\\n\\t$('.videospot a').swipebox();\\n\\tvar rgx=/^#*agal_/g; if(window.location.hash && rgx.test(window.location.hash)) $('#ae'+window.location.hash.replace('#', '').substr(1)).click();\\n});\\n</script>\\n\\n<script>\\n\\nvar eng_active='';\\n$(window).ready(function(){\\n\\tvar rgx=/^#*aeng_/g;\\n\\tif(window.location.hash && rgx.test(window.location.hash)) engine_show(window.location.hash.replace('#', '').substr(1), true);\\n\\telse /*if(window.location.hash=='' || window.location.hash=='#')*/ engine_show_first(); });\\n\\n</script>\\n\\n\\n\\n\\n<script>\\nif($('#revtx')) { $('#revtx').on('focus', function (event) { NAV_OK = false; }); $('#revtx').on('blur', function (event) { NAV_OK = true; }); }\\nif($('#sendtxt')) { $('#sendtxt').on('focus', function (event) { NAV_OK = false; }); $('#sendtxt').on('blur', function (event) { NAV_OK = true; }); }\\n</script>\\n<script>\\n//$(document).ready(function(){ $(\\\".news-item img\\\").unveil(); $(\\\"#sidebar1 img\\\").unveil(); $(\\\"#tdnews-container img\\\").unveil(); $('.photogal img').unveil(); });\\n$('#sidebar1 .box').on('mouseenter', function(){ $(this).find('img').each(function(i){ if($(this).attr('src') === undefined || $(this).attr('src') == '') return; $(this).attr('src', $(this).attr('src').replace('/images-bw/', '/images/')); }); }).on('mouseleave', function(){ $(this).find('img').each(function(i){ if($(this).attr('src') === undefined || $(this).attr('src') == '') return; $(this).attr('src', $(this).attr('src').replace('/images/', '/images-bw/')); }); });\\nvar ae__apid='37';</script>\\n\\n<script>\\n$(document).ready(function(){\\n\\tif(!$.cookie('ae_cookie_notif')){\\n\\t\\t$('body').append('<div id=\\\"prajiturele\\\" style=\\\"z-index:1000; text-align: center; width: 100%; position: fixed; left: 0; top: 0; height: 22px; line-height: 22px; background-color: #aaaaaa;\\\">This site uses cookies to offer you a complete experience. <a href=\\\"http://www.autoevolution.com/static/privacy.html\\\" target=\\\"_blank\\\" title=\\\"Privacy and Cookies\\\"><u>Find out more</u></a> or <span class=\\\"jhrefb\\\" onclick=\\\"cookienotif_ack()\\\"><u>close</u> <b>(x)</b></span> this notification permanently.</div>');\\n\\t\\t$('.header-bg').css('top', '+=22');$('body').css('padding-top', '+=22');$('.topbar-bg').css('top', '+=22');\\n}});\\n</script>\\n\\n\\n<script>\\nif(typeof adsbygoogle !== \\\"undefined\\\") {\\n  window.addEventListener('load', function() {\\n    if(typeof adsbygoogle.loaded === \\\"undefined\\\" && typeof ga !== \\\"undefined\\\") {\\n      ga('send', 'event', 'AdSense', 'Ads blocked', { \\\"nonInteraction\\\": 1 });\\n    }\\n  }, false);\\n}\\n</script>\\n\\n</body>\\n</html>\\n\",\n    \"page_id\": \"f9595b583d2b1640b443722777d8225a9406bb80\",\n    \"page_type\": \"item\",\n    \"plugins\": {\n        \"annotations-plugin\": {\n            \"extracts\": [\n                {\n                    \"accept_selectors\": [\n                        \".content\"\n                    ],\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": null,\n                    \"id\": \"3573-47a6-9c1e\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"schema_id\": \"3e48-4f1d-a25a\",\n                    \"selector\": \".content\",\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > .grspec > dd:nth-child(2)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"5663-4902-92ef\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"3d6c-406b-ada0\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"1ca6-4f38-b451\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > .grspec > dd:nth-child(2)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > .grspec > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"35da-4a50-873d\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"715d-44f0-8610\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"ac64-4442-bcaa\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > .grspec > dd:nth-child(4)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > .grspec > dd:nth-child(10)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"a37e-4d0b-821a\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"f875-47f9-b433\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"712b-4ce9-aadb\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > .grspec > dd:nth-child(10)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > .grspec > dd:nth-child(12)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"c6ec-4034-854d\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"7b14-4c51-9d8d\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"fb80-48c1-bc5b\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > .grspec > dd:nth-child(12)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > .grspec > dd:nth-child(14)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"42d5-487f-bc4c\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"5c91-4055-9cd0\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"6729-4724-b57e\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > .grspec > dd:nth-child(14)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(4) > dd:nth-child(2)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"f633-4b45-b2a9\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"2237-4b60-94ff\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"303d-48a0-a8ff\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(4) > dd:nth-child(2)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(4) > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"13fe-404d-8cc2\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"b12f-4593-bb1e\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"12e0-445d-9cce\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(4) > dd:nth-child(4)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(6) > dd:nth-child(2)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"bad5-4796-8a59\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"1bc1-4326-958c\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"5ccb-4aa0-a9e9\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(6) > dd:nth-child(2)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(6) > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"c6db-4dc2-a7d5\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"809c-4921-aaec\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"a431-4d34-9839\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(6) > dd:nth-child(4)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(6) > dd:nth-child(6)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"0dfd-476d-9dc7\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"74ca-4687-a998\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"8fd4-45d2-a940\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(6) > dd:nth-child(6)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(12) > dd\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"1dc7-44cc-8238\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"de5d-4a74-bbbe\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"886e-434b-b7cf\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(12) > dd\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(2)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"3dc6-43c1-ae78\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"ae56-4514-979d\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"afb8-4b73-a408\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(2)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"ea8c-446b-a40e\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"15f8-456a-b398\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"5569-4726-9dce\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(4)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(6)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"606e-4a53-a71a\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"81d2-4e34-afce\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"bb8b-432a-9a83\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(6)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(8)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"c334-49ad-b939\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"3848-45fc-8bbd\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"1347-4b1f-999e\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(8)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(10)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"32d0-4928-8163\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"c151-43ac-a996\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"4e9b-48eb-9d3d\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(10)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(12)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"ce45-411d-a244\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"edc5-44d4-8a37\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"be26-4d19-95d5\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(12)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(14) > dd:nth-child(14)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"b56c-4062-bbed\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"97df-4068-b152\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"e334-4bff-87d5\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(14) > dd:nth-child(14)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(16) > dd:nth-child(2)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"1a1f-4d4c-ab95\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"eb01-487c-aabc\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"901f-43ed-abf2\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(16) > dd:nth-child(2)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_honda-civic-5-doors-2005-14-i-dsi > .enginedata > dl:nth-child(16) > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"b89f-47ed-a5ce\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"cb72-40f4-be48\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"a182-4128-95e2\",\n                    \"selector\": \".content > .enginesbox > .fr > div:nth-child(1) > .enginedata > dl:nth-child(16) > dd:nth-child(4)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".modelphoto > a > img\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"e246-499f-8ca9\": {\n                            \"attribute\": \"src\",\n                            \"extractors\": {},\n                            \"field\": \"5a2c-4dde-a064\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"e680-4782-9973\",\n                    \"selector\": \".content > .modelbox > .modelphoto > a > img\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".newstext\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"43ea-4e95-9eea\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"bf29-49d0-8d32\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"cfeb-4ede-8028\",\n                    \"selector\": \".content > .modelbox > .newstext\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#li_eng_honda-civic-5-doors-2005-14-i-dsi\",\n                        \"#li_eng_honda-civic-5-doors-2005-18-i-vtec\",\n                        \"#li_eng_honda-civic-5-doors-2005-22-i-ctdi\"\n                    ],\n                    \"container_id\": \"3573-47a6-9c1e\",\n                    \"data\": {\n                        \"d036-4600-a8e2\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"2dc2-45d8-9bfc\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"1cd2-473f-9c04\",\n                    \"repeated\": true,\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".content > .enginesbox > .fl > .list > .ellip\"\n                }\n            ]\n        }\n    },\n    \"scrapes\": \"3e48-4f1d-a25a\",\n    \"spider\": \"www.autoevolution.com\",\n    \"url\": \"http://www.autoevolution.com/cars/honda-civic-5-doors-2005.html#aeng_honda-civic-5-doors-2005-14-i-dsi\",\n    \"version\": \"0.13.0b20\",\n    \"results\": [\n        {\n            \"fuel_effiency_city\": [\n                \"39.9 mpg US OR 5.9 L/100Km\"\n            ],\n            \"image\": [\n                \"http://s1.cdn.autoevolution.com/images/models/HONDA_Civic-5-Doors-2005_main.jpg\"\n            ],\n            \"cyclinders\": [\n                \"L4\"\n            ],\n            \"height\": [\n                \"59.1/59.4 in OR 1,501/1,509 mm\"\n            ],\n            \"_template\": \"f9595b583d2b1640b443722777d8225a9406bb80\",\n            \"top_speed\": [\n                \"105.6 mph OR 170 km/h\"\n            ],\n            \"engines\": [\n                \"1.4 i-DSI\",\n                \"1.8 i-VTEC\",\n                \"2.2 i-CTDi\"\n            ],\n            \"fuel_type\": [\n                \"Gasoline\"\n            ],\n            \"fuel_efficiency\": [\n                \"30.9 mpg US OR 7.6 L/100Km\"\n            ],\n            \"width\": [\n                \"57.5 in OR 1461 mm\"\n            ],\n            \"unladen_weight\": [\n                \"2513.3 lbs OR 1140 kg\"\n            ],\n            \"total_length\": [\n                \"167.3 in OR 4249 mm\"\n            ],\n            \"?\": [\n                \"-\"\n            ],\n            \"fuel_effiency_highway\": [\n                \"48 mpg US OR 4.9 L/100Km\"\n            ],\n            \"_type\": \"car\",\n            \"description\": [\n                \"In 2005 Honda introduced the eighth generation Civic, with a different approach for the European market compared to the American/Japanese market. A year after it presented the Civic Concept, the production version rolled out, marking a staggering and unprecedented resemblance between the two. The car introduced a new and unconventional design inside and out. With the focus clearly on looks, Honda tried to answer complains of boring design from the previous generation and develop a compact addressed to a younger consumer segment. The engines behind the new Civic are both fuel efficient and thrifty with a 1.4-liter i-DSI, a 1.8-liter i-VTEC petrol unit and a 2.2-liter i-CTDi diesel. share: \\uf083 share \\uf086 share \\uf084 tweet see also: photo gallery\"\n            ],\n            \"engine_displacement\": [\n                \"1339 cm3\"\n            ],\n            \"f875-47f9-b433\": [\n                \"Multipoint Injection \"\n            ],\n            \"tyres\": [\n                \"205/55R16\"\n            ],\n            \"gross_weight\": [\n                \"3637.6 lbs OR 1650 kg\"\n            ],\n            \"0-100km/h\": [\n                \"14.6 s\"\n            ],\n            \"luggage\": [\n                \"17.1 cuFT OR 484 L\"\n            ],\n            \"url\": \"http://url\",\n            \"wheelbase\": [\n                \"103.9 in OR 2639 mm\"\n            ],\n            \"length\": [\n                \"69.3 in OR 1760 mm\"\n            ],\n            \"emissions\": [\n                \"139 g/km\"\n            ]\n        }\n    ],\n    \"schemas\": {\n        \"3e48-4f1d-a25a\": {\n            \"name\": \"car\",\n            \"fields\": {\n                \"15f8-456a-b398\": {\n                    \"name\": \"length\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"1bc1-4326-958c\": {\n                    \"name\": \"fuel_efficiency\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"2dc2-45d8-9bfc\": {\n                    \"name\": \"engines\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"3848-45fc-8bbd\": {\n                    \"name\": \"height\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"5a2c-4dde-a064\": {\n                    \"name\": \"image\",\n                    \"type\": \"image\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"5c91-4055-9cd0\": {\n                    \"name\": \"emissions\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"81d2-4e34-afce\": {\n                    \"name\": \"width\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"97df-4068-b152\": {\n                    \"name\": \"luggage\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"b12f-4593-bb1e\": {\n                    \"name\": \"0-100km/h\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"bf29-49d0-8d32\": {\n                    \"name\": \"description\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"eb01-487c-aabc\": {\n                    \"name\": \"unladen_weight\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"max_weight\": {\n                    \"name\": \"max_weight\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"de5d-4a74-bbbe\": {\n                    \"name\": \"tyres\",\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false\n                },\n                \"edc5-44d4-8a37\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"?\"\n                },\n                \"715d-44f0-8610\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"engine_displacement\"\n                },\n                \"c151-43ac-a996\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"wheelbase\"\n                },\n                \"cb72-40f4-be48\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"gross_weight\"\n                },\n                \"74ca-4687-a998\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"fuel_effiency_city\"\n                },\n                \"3d6c-406b-ada0\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"cyclinders\"\n                },\n                \"ae56-4514-979d\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"total_length\"\n                },\n                \"7b14-4c51-9d8d\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"fuel_type\"\n                },\n                \"2237-4b60-94ff\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"top_speed\"\n                },\n                \"809c-4921-aaec\": {\n                    \"type\": \"text\",\n                    \"required\": false,\n                    \"vary\": false,\n                    \"name\": \"fuel_effiency_highway\"\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/autoevolution2.json",
    "content": "{\n    \"annotated_body\": \"\",\n    \"body\": \"original_body\",\n    \"extractors\": {},\n    \"id\": \"2341-45eb-904a\",\n    \"name\": \"FIAT Abarth Spider - - autoevolution\",\n    \"original_body\": \"<!DOCTYPE html>\\n<html lang=\\\"en-us\\\">\\n<head>\\n<meta name=\\\"language\\\" content=\\\"english\\\" /><meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" /><meta name=\\\"robots\\\" content=\\\"NOODP\\\" /><meta name=\\\"viewport\\\" content=\\\"width=980\\\" /><meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\" />\\n<link rel=\\\"apple-touch-icon\\\" href=\\\"/_img/favicon_512.png\\\" /><meta name=\\\"msapplication-TileImage\\\" content=\\\"/_img/favicon_512.png\\\" /><link rel=\\\"mask-icon\\\" sizes=\\\"any\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/aefavicon.svg\\\" color=\\\"#000000\\\">\\n<link rel=\\\"icon\\\" type=\\\"image/x-icon\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/favicon.ico?v=2016\\\"><link rel=\\\"shortcut icon\\\" type=\\\"image/x-icon\\\" href=\\\"http://s1.cdn.autoevolution.com/_img/favicon.ico?v=2016\\\">\\n<link rel=\\\"alternate\\\" type=\\\"application/rss+xml\\\" title=\\\"autoevolution news\\\" href=\\\"http://www.autoevolution.com/rss/backend.xml\\\">\\n<title>FIAT 124 Abarth Spider - 2017 - autoevolution</title>\\n<link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"http://s1.cdn.autoevolution.com/_min/?g=css&amp;vv=70\\\">\\n<meta name=\\\"description\\\" content=\\\"General information, photos, engines and tech specifications for FIAT 124 Abarth Spider - 2017\\\">\\n<meta name=\\\"keywords\\\" content=\\\"FIAT, FIAT 124 Abarth Spider, FIAT 124 Abarth Spider - 2017, engines, photos, specifications, specs, technical specs\\\">\\n<meta property=\\\"fb:app_id\\\" content=\\\"111790708909959\\\">\\n<meta property=\\\"og:type\\\" content=\\\"article\\\">\\n<meta property=\\\"og:url\\\" content=\\\"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\\\">\\n<meta property=\\\"og:title\\\" content=\\\"FIAT 124 Abarth Spider - 2017\\\">\\n<meta property=\\\"og:description\\\" content=\\\"Based on the reborn Fiat 124, the Abarth 124 Spider was gifted with more performance features in order to be the best driving machine the Italian house has to offer in 2016. First off, the looks have ...\\\">\\n<meta property=\\\"article:publisher\\\" content=\\\"https://www.facebook.com/autoevolution\\\">\\n<meta property=\\\"og:site_name\\\" content=\\\"autoevolution\\\">\\n<meta property=\\\"og:image\\\" content=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_9.jpg\\\">\\n<meta property=\\\"twitter:card\\\" content=\\\"summary\\\">\\n<meta property=\\\"twitter:site\\\" content=\\\"@_autoevolution_\\\">\\n<meta property=\\\"twitter:creator\\\" content=\\\"@_autoevolution_\\\">\\n<meta property=\\\"twitter:url\\\" content=\\\"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\\\">\\n<meta property=\\\"twitter:title\\\" content=\\\"FIAT 124 Abarth Spider - 2017\\\">\\n<meta property=\\\"twitter:description\\\" content=\\\"Based on the reborn Fiat 124, the Abarth 124 Spider was gifted with more performance features in order to be the best driving machine the Italian house has to offer in 2016. First off, the looks have ...\\\">\\n<meta property=\\\"twitter:image\\\" content=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_9.jpg\\\">\\n<link rel=\\\"canonical\\\" href=\\\"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\\\">\\n<script>\\nwindow.google_analytics_uacct = \\\"UA-61277-6\\\";\\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\\nga('create', 'UA-61277-6', 'auto');\\nga('require', 'displayfeatures');\\nga('send', 'pageview');\\nvar gats_scrolled=0;\\nsetTimeout(function(){if(!gats_scrolled){ gats_scrolled=1; ga('send','event','No-Bounce','Page-Read'); }}, 30000);\\nsetTimeout(function(){window.addEventListener ? window.addEventListener('scroll', ga_scroll, false) : window.attachEvent('onScroll', ga_scroll)}, 5000);\\nfunction ga_scroll(){ if(!gats_scrolled) { gats_scrolled=1; ga('send','event','No-Bounce','Scrolled'); }}\\n</script>\\n<!-- BEGIN 33Across SiteCTRL Script --><script type='text/javascript'>if(document.location.protocol=='http:'){ var Tynt=Tynt||[];Tynt.push('dzK18g1myr5ABnrkHcnlKl'); (function(){var h,s=document.createElement('script');s.src='http://cdn.tynt.com/ti.js'; h=document.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);})();}</script><!-- END 33Across SiteCTRL Script -->\\n<!--ORIEL<script async type=\\\"text/javascript\\\" src=\\\"//yu987.com/ej95lqt1ozh20buluenb361psc.js\\\"></script>-->\\n</head>\\n<body>\\n\\n<div id=\\\"topbar\\\"><div class=\\\"container2\\\">\\n<i class=\\\"fa fa-bars\\\" id=\\\"topmenubtn\\\"></i>\\n<a id=\\\"autoevolution\\\" href=\\\"http://www.autoevolution.com/\\\" title=\\\"autoevolution\\\">autoevolution</a>\\n<div id=\\\"topmenu\\\" style=\\\"display:none;\\\">\\n<ul class=\\\"m1 clearfix\\\">\\n\\t<li><a href=\\\"http://www.autoevolution.com/cars/\\\" title=\\\"Car models and specifications database\\\">cars</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/moto/\\\" title=\\\"Motorcycle models and specifications database\\\">moto</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/news/\\\" title=\\\"Latest news\\\">news</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/cars/reviews/\\\" title=\\\"Car reviews\\\">car reviews</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/spyshots/\\\" title=\\\"Car spyshots and scoops\\\">spyshots</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/news/driven/\\\" title=\\\"Driven Cars\\\">driven cars</a></li>\\n\\t<li class=\\\"newspaper\\\"><a href=\\\"http://www.autoevolution.com/newspaper/\\\" title=\\\"Newspaper\\\">newspaper <span></span></a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/green/\\\" title=\\\"Green news\\\">green</a></li>\\n</ul>\\n<ul class=\\\"m2 clearfix\\\">\\n\\t<li><a href=\\\"http://www.autoevolution.com/carcompare.php\\\" title=\\\"Compare cars\\\">Compare Cars <i class=\\\"fa fa-car col-red fsz13\\\"></i><i class=\\\"fa fa-car col-red fsz13 faded\\\"></i></a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/bac/\\\" title=\\\"Blood Alcohol Level Calculator\\\">BAC Calculator &nbsp;<i class=\\\"fa fa-flask col-red2\\\"></i></a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/editorial/\\\" title=\\\"autoevolution editorials\\\">Editorial</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/coverstory/\\\" title=\\\"autoevolution coverstories\\\">Coverstory</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/news/motorsport\\\" title=\\\"Motorsport news\\\">Motorsport</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/reviews/\\\" title=\\\"Testdrives archive\\\">Testdrives archive</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/auto-moto-shows/\\\" title=\\\"Auto shows coverage index\\\">Auto Shows</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/news/tuning/\\\" title=\\\"Auto tuning news\\\">Tuning</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/carfinder/\\\" title=\\\"Car Finder\\\">Car Finder</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/newstag/pic%20of%20the%20day/\\\" title=\\\"Photo of the Day\\\">Photo of the Day</a></li>\\n\\t<li class=\\\"long\\\"><a href=\\\"http://www.autoevolution.com/auto-glossary/\\\" title=\\\"Automotive terms and acronyms database\\\">Glossary of automotive terms</a></li>\\n\\t<div class=\\\"clearfix\\\"></div>\\n</ul>\\n<ul class=\\\"m3 clearfix\\\">\\n\\t<li><a href=\\\"http://www.autoevolution.com/editors/\\\" title=\\\"Meet the autoevolution writers and editors\\\">Masthead</a></li>\\n\\t<li><a href=\\\"http://www.autoevolution.com/rss-channels/\\\" title=\\\"Follow autoevolution via RSS\\\">RSS Feeds</a></li>\\n</ul>\\n</div>\\n\\n<div id=\\\"topsearch\\\" class=\\\"xsgrad1\\\"><form method=\\\"get\\\" action=\\\"/search.php\\\">\\n<input type=\\\"text\\\" name=\\\"s\\\" value=\\\"Search here_\\\" data-defl=\\\"Search here_\\\" xplaceholder=\\\"Search here_\\\" /><button type=\\\"submit\\\" class=\\\"fa fa-search\\\"></button>\\n</form></div>\\n\\n<div id=\\\"rtopmenu\\\" class=\\\"fr\\\">\\n\\t<a href=\\\"http://www.autoevolution.com/sendtip/\\\" title=\\\"Have a news tip? Let us know!\\\"><i class=\\\"fa fa-tip col-white\\\"></i></a>\\n\\t<i class=\\\"fa fa-newspaper rtm-paper col-gold posrel \\\" title=\\\"Customize and read your newspaper\\\">\\n\\t\\t</i>\\n\\t<!--<i class=\\\"fa fa-share-alt rtm-share\\\"></i>-->\\n\\t<i class=\\\"fa fa-heart rtm-like\\\" title=\\\"Follow us on social media\\\"></i>\\n\\t<i class=\\\"fa fa-info-circle rtm-info\\\" title=\\\"Useful information\\\"></i>\\n</div>\\n\\n</div></div>\\n<div class=\\\"container2\\\"><div id=\\\"topwhite\\\" class=\\\"padtop40\\\"></div></div>\\n<div id=\\\"pagewrapper\\\" style=\\\"position:relative;\\\"><div class=\\\"container2 adcont970 rev\\\"><div class=\\\"ad970x90\\\"><script async src=\\\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script><ins class=\\\"adsbygoogle\\\" style=\\\"display:inline-block;width:970px;height:90px\\\" data-ad-client=\\\"ca-pub-7668878252976156\\\" data-ad-slot=\\\"3944680237\\\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div></div>\\n\\n<div class=\\\"container2 clearfix\\\">\\n\\t<div id=\\\"newscol1\\\">\\n\\t\\t<h1 class=\\\"seriestitle\\\"><a href=\\\"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\\\" title=\\\"FIAT 124 Abarth Spider 2017 - Present\\\">FIAT 124 Abarth Spider <span class=\\\"nowrap\\\">2017 - Present</span></a></h1>\\n\\t\\t<div class=\\\"newsgal revgal carsgal\\\"><span class=\\\"title bcol-black col-grey8\\\"><i class=\\\"fa fa-camera\\\"></i> Photo gallery (43)</span><div class=\\\"overhide height172\\\"><div class=\\\"vslide\\\" style=\\\"height:1892px;\\\"><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_9.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_0\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_9.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147171\\\" data-gidx=\\\"0\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_10.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_1\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_10.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147172\\\" data-gidx=\\\"1\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_11.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_2\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_11.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147173\\\" data-gidx=\\\"2\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_12.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_3\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_12.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147174\\\" data-gidx=\\\"3\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_13.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_4\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_13.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147175\\\" data-gidx=\\\"4\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_14.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_5\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_14.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147176\\\" data-gidx=\\\"5\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_15.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_6\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_15.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147177\\\" data-gidx=\\\"6\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_16.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_7\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_16.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147178\\\" data-gidx=\\\"7\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_17.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_8\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_17.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147179\\\" data-gidx=\\\"8\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_18.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_9\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_18.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147180\\\" data-gidx=\\\"9\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_19.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_10\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_19.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147181\\\" data-gidx=\\\"10\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_20.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_11\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_20.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147182\\\" data-gidx=\\\"11\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_21.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_12\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_21.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147183\\\" data-gidx=\\\"12\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_22.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_13\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_22.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147184\\\" data-gidx=\\\"13\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_23.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_14\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_23.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147185\\\" data-gidx=\\\"14\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_24.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_15\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_24.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147186\\\" data-gidx=\\\"15\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_25.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_16\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_25.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147187\\\" data-gidx=\\\"16\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_26.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_17\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_26.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147188\\\" data-gidx=\\\"17\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_27.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_18\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_27.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147189\\\" data-gidx=\\\"18\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_28.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_19\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_28.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147190\\\" data-gidx=\\\"19\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_29.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_20\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_29.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147191\\\" data-gidx=\\\"20\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_30.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_21\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_30.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147192\\\" data-gidx=\\\"21\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_31.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_22\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_31.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147193\\\" data-gidx=\\\"22\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_32.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_23\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_32.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147194\\\" data-gidx=\\\"23\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_33.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_24\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_33.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147195\\\" data-gidx=\\\"24\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_34.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_25\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_34.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147196\\\" data-gidx=\\\"25\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_35.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_26\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_35.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147197\\\" data-gidx=\\\"26\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_36.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_27\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_36.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147198\\\" data-gidx=\\\"27\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_37.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_28\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_37.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147199\\\" data-gidx=\\\"28\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_38.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_29\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_38.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147200\\\" data-gidx=\\\"29\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_39.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_30\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_39.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147201\\\" data-gidx=\\\"30\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_40.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_31\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_40.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147202\\\" data-gidx=\\\"31\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_41.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_32\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_41.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147203\\\" data-gidx=\\\"32\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_42.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_33\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_42.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147204\\\" data-gidx=\\\"33\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_43.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_34\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_43.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147205\\\" data-gidx=\\\"34\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_1.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_35\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_1.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147163\\\" data-gidx=\\\"35\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_2.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_36\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_2.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147164\\\" data-gidx=\\\"36\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_3.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_37\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_3.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147165\\\" data-gidx=\\\"37\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_4.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_38\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_4.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147166\\\" data-gidx=\\\"38\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_5.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_39\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_5.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147167\\\" data-gidx=\\\"39\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_6.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_40\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_6.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147168\\\" data-gidx=\\\"40\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_7.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_41\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_7.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147169\\\" data-gidx=\\\"41\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a><a class=\\\"s_gallery\\\" target=\\\"_blank\\\" href=\\\"http://s1.cdn.autoevolution.com/images/gallery/FIAT-124-Abarth-Spider-5767_8.jpg\\\" title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" id=\\\"aegal_42\\\"><img src=\\\"http://www.autoevolution.com/images/cars-gallery-260x/FIAT-124-Abarth-Spider-thumbnail-5767_8.jpg\\\" data-title=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" data-description=\\\"Photo credits: FIAT\\\" data-gidm=\\\"147170\\\" data-gidx=\\\"42\\\" alt=\\\"FIAT 124 Abarth Spider (2017 - Present)\\\" /></a></div></div><div class=\\\"arrows\\\"><button class=\\\"fa fa-long-arrow-up disabled nousersel\\\" onclick=\\\"aerev_slide(-1, '.newsgal');\\\"></button><button class=\\\"fa fa-long-arrow-down enabled nousersel\\\" onclick=\\\"aerev_slide(1, '.newsgal');\\\"></button></div></div>\\t</div>\\n\\n\\t<div id=\\\"newscol2\\\" class=\\\"col2width agatasort clearfix short\\\">\\n\\t\\t<div class=\\\"breadcrumb2 slim\\\"><span itemscope itemtype=\\\"http://schema.org/BreadcrumbList\\\"><span itemscope itemtype=\\\"http://schema.org/ListItem\\\" itemprop=\\\"itemListElement\\\"><a href=\\\"/\\\" itemprop=\\\"item\\\" title=\\\"autoevolution Home\\\">/ <span itemprop=\\\"name\\\">Home</span></a> </span><span itemscope itemtype=\\\"http://schema.org/ListItem\\\" itemprop=\\\"itemListElement\\\"><a href=\\\"/cars/\\\" itemprop=\\\"item\\\" title=\\\"Cars\\\">/ <span itemprop=\\\"name\\\">Cars</span></a> </span><span itemscope itemtype=\\\"http://schema.org/ListItem\\\" itemprop=\\\"itemListElement\\\"><a href=\\\"http://www.autoevolution.com/fiat/\\\" itemprop=\\\"item\\\" title=\\\"FIAT\\\">/ <span itemprop=\\\"name\\\">FIAT</span></a> </span><span itemscope itemtype=\\\"http://schema.org/ListItem\\\" itemprop=\\\"itemListElement\\\"><span itemprop=\\\"item\\\">/ <span itemprop=\\\"name\\\">124 Abarth Spider</span></span> </span></span></div>\\n\\t</div>\\n\\n\\t<div id=\\\"newscol3\\\" class=\\\"col3width bcol-white agatasort height89 bot2line2\\\"><div class=\\\"social right clearfix bgfix1 mgright_20 nousersel\\\">\\n<a href=\\\"http://reddit.com/submit?url=http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html&amp;title=\\\" target=\\\"_blank\\\" class=\\\"fa fa-reddit col-reddit\\\" title=\\\"Share on Reddit\\\"></a>\\n<a href=\\\"#\\\" rel=\\\"nofollow\\\" class=\\\"fa fa-facebook col-facebook\\\" onclick=\\\"window.open('https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.autoevolution.com%2Fcars%2Ffiat-124-abarth-spider-2017.html','', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600'); return false;\\\" rel=\\\"nofollow\\\" title=\\\"Share this page on Facebook\\\"></a>\\n<a href=\\\"http://twitter.com/intent/tweet?related=_autoevolution_&via=_autoevolution_&text=&url=http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\\\" target=\\\"_blank\\\" rel=\\\"nofollow\\\" class=\\\"fa fa-twitter col-twitter\\\" title=\\\"Share this page on Twitter\\\"></a>\\n<a href=\\\"http://www.tumblr.com/share/photo?source=&caption=&clickthru=\\\" target=\\\"_blank\\\" rel=\\\"nofollow\\\" class=\\\"fa fa-tumblr col-tumblr\\\" title=\\\"Share this page on Tumblr\\\"></a>\\n<a href=\\\"https://share.flipboard.com/bookmarklet/popout?v=2&title=&url=http%3A%2F%2Fwww.autoevolution.com%2Fcars%2Ffiat-124-abarth-spider-2017.html&t=1476784043&urlm_campaign=widgets&utm_medium=web&utm_source=flipit&utm_content=www.autoevolution.com\\\" class=\\\"fa fa-flipboard col-flipboard\\\" title=\\\"Flip this article in your magazine\\\" rel=\\\"nofollow\\\" target=\\\"_blank\\\"></a>\\n</div>\\n</div>\\n\\n\\t<div class=\\\"col23width fr bcol-white agatasort\\\">\\n\\t\\t<div class=\\\"newstext modelbox mgtop_30 mgbot_30\\\"><strong class=\\\"intro\\\">Based on the reborn Fiat 124, the Abarth 124 Spider was gifted with more performance features in order to be the best driving machine the Italian house has to offer in 2016.</strong> First off, the looks have been altered to look fiercer through a new front grille, gaping lower intake, bigger rims, sport rear bumper with quad exhaust tips and a lip spoiler on the trunk. The interior got Alcantara trimmings, different seats and a contrast stitched steering wheel with a viewfinder. The engine makes more power, there&#039;s and optional automatic transmission on the list and the suspension has been modified a bit for sharper response.</div>\\n\\n\\t\\t\\t\\t<div class=\\\"newspressbar clearfix mgtop_20\\\" onclick=\\\"aeshowpress(5767, 'pr_cars');\\\">\\n\\t\\t\\t<button class=\\\"btnred1 grey fr left1line\\\" id=\\\"prbutton\\\"><i class=\\\"fa fa-long-arrow-down\\\"></i><span>load</span></button>\\n\\t\\t\\t<i class=\\\"fa fa-file-text-o\\\"></i> press release\\n\\t\\t</div>\\n\\t\\t\\t</div>\\n\\n</div>\\n\\n<div class=\\\"container cartech\\\">\\n<div class=\\\"col123width top5line\\\">\\n\\n<div class=\\\"col1width fl\\\">\\n\\t<div class=\\\"sbox10\\\">\\n\\t<div class=\\\"tt\\\"><i class=\\\"fa fa-car\\\"></i>&nbsp; 2 Gasoline engines</div><ul><li id=\\\"li_eng_fiat-124-abarth-spider-2017-14-6at-170-hp\\\" class=\\\"ellip\\\" onclick=\\\"engine_show('eng_fiat-124-abarth-spider-2017-14-6at-170-hp')\\\" title=\\\"FIAT 124 Abarth Spider 1.4 6AT (170 HP) 2017 - Present\\\">1.4 6AT (170 HP)</li><li id=\\\"li_eng_fiat-124-abarth-spider-2017-14-6mt-170-hp\\\" class=\\\"ellip\\\" onclick=\\\"engine_show('eng_fiat-124-abarth-spider-2017-14-6mt-170-hp')\\\" title=\\\"FIAT 124 Abarth Spider 1.4 6MT (170 HP) 2017 - Present\\\">1.4 6MT (170 HP)</li></ul>\\t</div>\\n\\n\\t<div class=\\\"brosuri mgtop_60\\\"><div class=\\\"titletype2 upcase top5line\\\">brochures (download)</div><a href=\\\"http://www.autoevolution.com/_mozpdfjs/web/viewer.php?file=http://www.autoevolution.com/pdf/auto/783f0bcc0615c6e4bdd1ca0858fb7e3a/5805f0d7/fiat-124-abarth-spider-brochure.pdf&title=RklBVCAxMjQgQWJhcnRoIFNwaWRlciBCcm9jaHVyZQ==\\\" target=\\\"_blank\\\"><!--<span>00 MB</span>--><i class=\\\"fa fa-long-arrow-down col-red fr\\\"></i>FIAT 124 Abarth Spider Brochure</a></div>\\n\\t<div class=\\\"sbox11 mgtop_60 scarcmp\\\"><h5>compare</h5>\\n\\t<p>Compare selected engine with...</p>\\n\\t<div class=\\\"aedrop2 mgbot_15\\\" data-opt=\\\"brand\\\"><div class=\\\"vis\\\"><i class=\\\"fa fa-caret-down\\\"></i><span>Pick brand</span></div><ul><li data-opt=\\\"10\\\">ACURA</li><li data-opt=\\\"11\\\">ALFA ROMEO</li><li data-opt=\\\"100\\\">ARIEL</li><li data-opt=\\\"12\\\">ARO</li><li data-opt=\\\"13\\\">ASTON MARTIN</li><li data-opt=\\\"14\\\">AUDI</li><li data-opt=\\\"15\\\">BENTLEY</li><li data-opt=\\\"16\\\">BMW</li><li data-opt=\\\"17\\\">BRISTOL</li><li data-opt=\\\"109\\\">BUFORI</li><li data-opt=\\\"19\\\">BUGATTI</li><li data-opt=\\\"20\\\">BUICK</li><li data-opt=\\\"21\\\">CADILLAC</li><li data-opt=\\\"101\\\">CATERHAM</li><li data-opt=\\\"22\\\">CHEVROLET</li><li data-opt=\\\"23\\\">CHRYSLER</li><li data-opt=\\\"24\\\">CITROEN</li><li data-opt=\\\"25\\\">DACIA</li><li data-opt=\\\"26\\\">DAEWOO</li><li data-opt=\\\"27\\\">DAIHATSU</li><li data-opt=\\\"112\\\">DATSUN</li><li data-opt=\\\"28\\\">DMC</li><li data-opt=\\\"29\\\">DODGE</li><li data-opt=\\\"91\\\">DONKERVOORT</li><li data-opt=\\\"113\\\">DR MOTOR</li><li data-opt=\\\"30\\\">FERRARI</li><li data-opt=\\\"31\\\">FIAT</li><li data-opt=\\\"104\\\">FISKER</li><li data-opt=\\\"32\\\">FORD</li><li data-opt=\\\"92\\\">FSO</li><li data-opt=\\\"103\\\">GEELY</li><li data-opt=\\\"33\\\">GMC</li><li data-opt=\\\"106\\\">GTA Motor</li><li data-opt=\\\"35\\\">HINDUSTAN</li><li data-opt=\\\"36\\\">HOLDEN</li><li data-opt=\\\"37\\\">HONDA</li><li data-opt=\\\"38\\\">HUMMER</li><li data-opt=\\\"39\\\">HYUNDAI</li><li data-opt=\\\"40\\\">INFINITI</li><li data-opt=\\\"41\\\">ISUZU</li><li data-opt=\\\"42\\\">JAGUAR</li><li data-opt=\\\"43\\\">JEEP</li><li data-opt=\\\"44\\\">KIA</li><li data-opt=\\\"99\\\">KOENIGSEGG</li><li data-opt=\\\"97\\\">KTM</li><li data-opt=\\\"45\\\">LADA</li><li data-opt=\\\"46\\\">LAMBORGHINI</li><li data-opt=\\\"48\\\">LANCIA</li><li data-opt=\\\"47\\\">LAND ROVER</li><li data-opt=\\\"49\\\">LEXUS</li><li data-opt=\\\"51\\\">LINCOLN</li><li data-opt=\\\"50\\\">LOTUS</li><li data-opt=\\\"107\\\">Mahindra</li><li data-opt=\\\"105\\\">MARUSSIA</li><li data-opt=\\\"93\\\">MARUTI SUZUKI</li><li data-opt=\\\"53\\\">MASERATI</li><li data-opt=\\\"54\\\">MAYBACH</li><li data-opt=\\\"52\\\">MAZDA</li><li data-opt=\\\"89\\\">MCLAREN</li><li data-opt=\\\"55\\\">MERCEDES BENZ</li><li data-opt=\\\"57\\\">MERCURY</li><li data-opt=\\\"56\\\">MG</li><li data-opt=\\\"58\\\">MINI</li><li data-opt=\\\"59\\\">MITSUBISHI</li><li data-opt=\\\"60\\\">MORGAN</li><li data-opt=\\\"61\\\">NISSAN</li><li data-opt=\\\"62\\\">OLDSMOBILE</li><li data-opt=\\\"63\\\">OPEL</li><li data-opt=\\\"67\\\">PAGANI</li><li data-opt=\\\"69\\\">PANOZ</li><li data-opt=\\\"114\\\">PERODUA</li><li data-opt=\\\"64\\\">PEUGEOT</li><li data-opt=\\\"65\\\">PONTIAC</li><li data-opt=\\\"66\\\">PORSCHE</li><li data-opt=\\\"68\\\">PROTON</li><li data-opt=\\\"110\\\">QOROS</li><li data-opt=\\\"108\\\">RAM Trucks</li><li data-opt=\\\"70\\\">RENAULT</li><li data-opt=\\\"71\\\">ROLLS-ROYCE</li><li data-opt=\\\"72\\\">SAAB</li><li data-opt=\\\"80\\\">SALEEN</li><li data-opt=\\\"94\\\">SAMSUNG</li><li data-opt=\\\"90\\\">SANTANA</li><li data-opt=\\\"73\\\">SATURN</li><li data-opt=\\\"75\\\">SCION</li><li data-opt=\\\"74\\\">SEAT</li><li data-opt=\\\"76\\\">SKODA</li><li data-opt=\\\"77\\\">SMART</li><li data-opt=\\\"79\\\">SPYKER</li><li data-opt=\\\"78\\\">SSANGYONG</li><li data-opt=\\\"81\\\">SUBARU</li><li data-opt=\\\"82\\\">SUZUKI</li><li data-opt=\\\"95\\\">TATA MOTORS</li><li data-opt=\\\"96\\\">TESLA MOTORS</li><li data-opt=\\\"83\\\">TOYOTA</li><li data-opt=\\\"85\\\">TVR</li><li data-opt=\\\"84\\\">VAUXHALL</li><li data-opt=\\\"86\\\">VOLKSWAGEN</li><li data-opt=\\\"87\\\">VOLVO</li><li data-opt=\\\"102\\\">WIESMANN</li><li data-opt=\\\"88\\\">ZENDER</li></ul></div><div id=\\\"carcmptt\\\"></div>\\t</div>\\n\\n\\t<div class=\\\"ad300x250 mgtop_60 mgbot_30\\\"><script async src=\\\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script><ins class=\\\"adsbygoogle\\\" style=\\\"display:inline-block;width:300px;height:250px\\\" data-ad-client=\\\"ca-pub-7668878252976156\\\" data-ad-slot=\\\"2467947031\\\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>\\n</div>\\n\\n<div class=\\\"col23width fl bcol-white pdbot_60\\\">\\n\\t<div class=\\\"adclass1\\\">\\n\\t\\t<div class=\\\"fl posrel\\\" id=\\\"leankare\\\"></div>\\n\\t\\t<div class=\\\"ad300x600 mgtop_20\\\" id=\\\"_wlts\\\"><script async src=\\\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script><ins class=\\\"adsbygoogle\\\" style=\\\"display:inline-block;width:300px;height:600px\\\" data-ad-client=\\\"ca-pub-7668878252976156\\\" data-ad-slot=\\\"2467947031\\\"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>\\n\\t</div>\\n\\t<div id=\\\"eng_fiat-124-abarth-spider-2017-14-6at-170-hp\\\" data-engid=\\\"25734\\\" class=\\\"engine-block\\\"><h3>FIAT 124 Abarth Spider <span class=\\\"col-red\\\">1.4 6AT (170 HP)</span></h3><div class=\\\"enginedata engine-inline\\\"><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>engine specifications &nbsp;&ndash;&nbsp; <span class=\\\"col-green2\\\">1.4 6AT (170 HP)</span></div></div><dl title=\\\"General Specs\\\" class=\\\"grspec table1w clearfix\\\"><dt><em>Cylinders</em></dt><dd>L4 </dd><dt><em>Displacement</em></dt><dd>1368 cm3</dd><dt><em>Power</em></dt><dd>125.1 KW @ 5500 RPM<br/>170 HP @ 5500 RPM<br/>168 BHP @ 5500 RPM<dt><em>Torque</em></dt><dd>184 lb-ft @ 2500 RPM<br/>250 Nm @ 2500 RPM<dt><em>Fuel System</em></dt><dd>Turbocharged Multipoint Injection </dd><dt><em>Fuel</em></dt><dd>Gasoline </dd><dt><em>CO2 Emissions</em></dt><dd>153 g/km</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>performance specifications</div></div><dl title=\\\"Performance Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Top Speed</em></dt><dd>142 mph <b>OR</b> 229 km/h</dd><dt><em>Acceleration 0-62 Mph (0-100 kph)</em></dt><dd>6.9 s</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>fuel consumption specifications</div></div><dl title=\\\"Fuel Consumption Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>City</em></dt><dd>25.8 mpg US <b>OR</b> 9.1 L/100Km</dd><dt><em>Highway</em></dt><dd>45.2 mpg US <b>OR</b> 5.2 L/100Km</dd><dt><em>Combined</em></dt><dd>35.6 mpg US <b>OR</b> 6.6 L/100Km</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>transmission specifications</div></div><dl title=\\\"Transmission Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Drive Type</em></dt><dd>Rear Wheel Drive </dd><dt><em>Gearbox</em></dt><dd>6-speed automatic </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>brakes specifications</div></div><dl title=\\\"Brakes Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Front</em></dt><dd>Ventilated Discs </dd><dt><em>Rear</em></dt><dd>Discs </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>tires specifications</div></div><dl title=\\\"Tires Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Tire Size</em></dt><dd>205/45 R17 W84 </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>dimensions specifications</div></div><dl title=\\\"Dimensions Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Length</em></dt><dd>159.6 in <b>OR</b> 4054 mm</dd><dt><em>Width</em></dt><dd>68.5 in <b>OR</b> 1740 mm</dd><dt><em>Height</em></dt><dd>48.5 in <b>OR</b> 1232 mm</dd><dt><em>Front/rear Track</em></dt><dd>58.9/59.2 in <b>OR</b> 1,496/1,504 mm</dd><dt><em>Wheelbase</em></dt><dd>90.9 in <b>OR</b> 2309 mm</dd><dt><em>Ground Clearance</em></dt><dd>4.7 in <b>OR</b> 119 mm</dd><dt><em>Cargo Volume</em></dt><dd>4.9 cuFT <b>OR</b> 139 L</dd><dt><em>Cd</em></dt><dd>- </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>weight specifications</div></div><dl title=\\\"Weight Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Unladen Weight</em></dt><dd>2381 lbs <b>OR</b> 1080 kg</dd><dt><em>Gross Weight Limit</em></dt><dd>- </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --></div></div><div id=\\\"eng_fiat-124-abarth-spider-2017-14-6mt-170-hp\\\" data-engid=\\\"25733\\\" class=\\\"engine-block\\\"><h3>FIAT 124 Abarth Spider <span class=\\\"col-red\\\">1.4 6MT (170 HP)</span></h3><div class=\\\"enginedata engine-inline\\\"><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>engine specifications &nbsp;&ndash;&nbsp; <span class=\\\"col-green2\\\">1.4 6MT (170 HP)</span></div></div><dl title=\\\"General Specs\\\" class=\\\"grspec table1w clearfix\\\"><dt><em>Cylinders</em></dt><dd>L4 </dd><dt><em>Displacement</em></dt><dd>1368 cm3</dd><dt><em>Power</em></dt><dd>125.1 KW @ 5500 RPM<br/>170 HP @ 5500 RPM<br/>168 BHP @ 5500 RPM<dt><em>Torque</em></dt><dd>184 lb-ft @ 2500 RPM<br/>250 Nm @ 2500 RPM<dt><em>Fuel System</em></dt><dd>Turbocharged Multipoint Injection </dd><dt><em>Fuel</em></dt><dd>Gasoline </dd><dt><em>CO2 Emissions</em></dt><dd>148 g/km</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>performance specifications</div></div><dl title=\\\"Performance Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Top Speed</em></dt><dd>144 mph <b>OR</b> 232 km/h</dd><dt><em>Acceleration 0-62 Mph (0-100 kph)</em></dt><dd>6.8 s</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>fuel consumption specifications</div></div><dl title=\\\"Fuel Consumption Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>City</em></dt><dd>27.7 mpg US <b>OR</b> 8.5 L/100Km</dd><dt><em>Highway</em></dt><dd>46.1 mpg US <b>OR</b> 5.1 L/100Km</dd><dt><em>Combined</em></dt><dd>36.8 mpg US <b>OR</b> 6.4 L/100Km</dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>transmission specifications</div></div><dl title=\\\"Transmission Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Drive Type</em></dt><dd>Rear Wheel Drive </dd><dt><em>Gearbox</em></dt><dd>6-speed manual </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>brakes specifications</div></div><dl title=\\\"Brakes Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Front</em></dt><dd>Ventilated Discs </dd><dt><em>Rear</em></dt><dd>Discs </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>tires specifications</div></div><dl title=\\\"Tires Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Tire Size</em></dt><dd>205/45 R17 W84 </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>dimensions specifications</div></div><dl title=\\\"Dimensions Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Length</em></dt><dd>159.6 in <b>OR</b> 4054 mm</dd><dt><em>Width</em></dt><dd>68.5 in <b>OR</b> 1740 mm</dd><dt><em>Height</em></dt><dd>48.5 in <b>OR</b> 1232 mm</dd><dt><em>Front/rear Track</em></dt><dd>58.9/59.2 in <b>OR</b> 1,496/1,504 mm</dd><dt><em>Wheelbase</em></dt><dd>90.9 in <b>OR</b> 2309 mm</dd><dt><em>Ground Clearance</em></dt><dd>4.7 in <b>OR</b> 119 mm</dd><dt><em>Cargo Volume</em></dt><dd>4.9 cuFT <b>OR</b> 139 L</dd><dt><em>Cd</em></dt><dd>- </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --><div class=\\\"techdata\\\"><div class=\\\"title\\\"><div>weight specifications</div></div><dl title=\\\"Weight Specs\\\" class=\\\"table1w clearfix\\\"><dt><em>Unladen Weight</em></dt><dd>2337 lbs <b>OR</b> 1060 kg</dd><dt><em>Gross Weight Limit</em></dt><dd>- </dd><div class=\\\"brk\\\"></div></dl></div><!-- techdata --></div></div>\\t<a class=\\\"mgleft_20 mgtop_20 dispblock upcase semibold fsz16\\\" onmouseover=\\\"if(!window.fgset){ window.fgset=1; $(this).attr('href', $(this).attr('href')+escape(window.location.hash)); }\\\" rel=\\\"nofollow\\\" title=\\\"Report a mistake\\\" href=\\\"http://www.autoevolution.com/contact/?_s=Specifications%20mistake%20report&_m=URL:%20http%3A%2F%2Fwww.autoevolution.com%2Fcars%2Ffiat-124-abarth-spider-2017.html\\\"><i class=\\\"fa fa-warning col-red\\\"></i>&nbsp; report a mistake on this page &nbsp;<i class=\\\"fa fa-long-arrow-right\\\"></i></a>\\n\\t<div id=\\\"carmodelbottommarker\\\">&nbsp;</div>\\n</div>\\n</div></div>\\n\\n<iframe class=\\\"artr\\\" src=\\\"http://www.autoevolution.com/rhh.php?k=artr&art=1&se=cars\\\" width=\\\"0\\\" height=\\\"0\\\"><noframes><img src=\\\"http://www.autoevolution.com/rhh.php?k=artr&art=1&se=cars\\\" width=\\\"1\\\" height=\\\"1\\\" /></noframes></iframe>\\n<script>\\nfunction aerunstartup()\\n{\\n\\tvar crengine;\\n\\n\\tif(location.hash.length==0) {\\n\\t\\tcrengine=$(\\\".engine-block\\\").first().attr(\\\"id\\\");\\n\\t} else if(location.hash.substr(1, 5)==\\\"aegal\\\") {\\n\\t\\t\\tsetTimeout(function() { open_lght(location.hash.substr(7)); }, 100);\\n\\t\\t\\tcrengine=$(\\\".engine-block\\\").first().attr(\\\"id\\\");\\n\\t} else crengine=location.hash.substr(2);\\n\\n\\tengine_show(crengine);\\n\\n\\t$('.aedrop2[data-opt=\\\"brand\\\"]').aeSelect({'onSelect':compare_select_brand});\\n\\n\\t$(\\\".newsgal a\\\").swipebox();\\n\\n\\tif($('#leankare').length>0) $(document).ready(function() { $(window).scroll(leankare_stick); leankare_stick(); });\\n}\\n\\n</script></div><!-- pagewrapper -->\\n<div id=\\\"footer\\\"><div class=\\\"container\\\">\\n<div id=\\\"footcol1\\\"><a href=\\\"#rss\\\" class=\\\"fa fa-rss fl col-red\\\"></a><a href=\\\"/\\\" id=\\\"footauto\\\">autoevolution</a><a href=\\\"/static/privacy.html\\\" id=\\\"footprivacyl\\\">Privacy Policy</a></div>\\n<div id=\\\"footcol2\\\"><ul><li><a href=\\\"/cars/\\\">cars</a></li>\\n<li><a href=\\\"/moto/\\\">moto</a></li>\\n<li><a href=\\\"/news/\\\">news</a></li>\\n<li><a href=\\\"/cars/reviews/\\\">reviews</a></li>\\n<li><a href=\\\"/editorial/\\\">editorial</a></li>\\n<li><a href=\\\"/coverstory/\\\">coverstory</a></li>\\n<li><a href=\\\"/auto-guide/\\\">auto how-to</a></li>\\n<li><a href=\\\"/auto-glossary/\\\">glossary</a></li>\\n<li><a href=\\\"/carfinder/\\\">car finder</a></li></ul>\\n<p>&copy; 2008-2016 SoftNews NET. All rights reserved. autoevolution&reg; and the autoevolution&reg; logo are registered trademarks.</p>\\n</div>\\n</div></div>\\n\\n<script type=\\\"application/ld+json\\\">\\n{\\n\\t\\\"@context\\\": \\\"http://schema.org\\\", \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"http://www.autoevolution.com/\\\", \\\"logo\\\": \\\"http://www.autoevolution.com/_img/autoevolution_logo_2016_ldjs.png\\\", \\\"name\\\": \\\"autoevolution\\\",  \\\"sameAs\\\" : [\\n\\t\\t\\\"https://www.facebook.com/autoevolution\\\",\\n\\t\\t\\\"https://twitter.com/_autoevolution_\\\",\\n\\t\\t\\\"https://plus.google.com/+autoevolutioncom/\\\",\\n\\t\\t\\\"https://autoevolution.tumblr.com/\\\",\\n\\t\\t\\\"https://flipboard.com/@autoevolution/autoevolution-e4m5gpaay\\\",\\n\\t\\t\\\"https://ro.pinterest.com/autoevolution/\\\"\\n\\t]\\n}\\n</script>\\n<script type=\\\"application/ld+json\\\">{ \\\"@context\\\": \\\"http://schema.org\\\", \\\"@type\\\": \\\"WebSite\\\", \\\"name\\\": \\\"autoevolution\\\", \\\"url\\\": \\\"http://www.autoevolution.com/\\\" }</script>\\n\\n<script type=\\\"text/javascript\\\" src=\\\"http://s1.cdn.autoevolution.com/_min/?g=js&amp;vv=53\\\"></script>\\n<script type=\\\"text/javascript\\\" src=\\\"http://s1.cdn.autoevolution.com/_min/?g=swipebox&amp;vv=53\\\"></script>\\n<script>\\nwindow.aegal_cty = 'IE';\\n\\nfunction rmnu_open(ww)\\n{\\n\\t$(\\\"#rtopmenu\\\").append('<div id=\\\"trmnu\\\" data-which=\\\"'+ww+'\\\">&nbsp;</div>');\\n\\n\\tif(typeof window[\\\"rmnupop-\\\"+ww]!=='undefined') {\\n\\t\\t$(\\\"#trmnu\\\").html(window[\\\"rmnupop-\\\"+ww]);\\n\\t\\t$(\\\"#rtopmenu i.rtm-\\\"+ww).removeClass(\\\"active\\\").addClass(\\\"active\\\");\\n\\t\\treturn;\\n\\t}\\n\\n\\t$(\\\"#trmnu\\\").load(\\\"/xm.php\\\", {'m':ww, 'u':'http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html'}, function() {\\n\\t\\t$(\\\"#rtopmenu i.rtm-\\\"+ww).removeClass(\\\"active\\\").addClass(\\\"active\\\");\\n\\t\\twindow[\\\"rmnupop-\\\"+ww]=$(\\\"#trmnu\\\").html();\\n\\t});\\n}\\n\\nfunction rmnu_close()\\n{\\n\\t$(\\\"#trmnu\\\").remove();\\n\\t$(\\\"#rtopmenu i.active\\\").removeClass(\\\"active\\\");\\n}\\n\\nfunction rmnu_toggle(ev)\\n{\\n\\t$(\\\"#topmenu\\\").hide();\\n\\t$(\\\"#topmenubtn\\\").removeClass(\\\"active\\\");\\n\\n\\tvar aa, ww;\\n\\n\\tif($(ev.currentTarget).hasClass('fa-share-alt')) ww='share';\\n\\telse if($(ev.currentTarget).hasClass('fa-heart')) ww='like';\\n\\telse if($(ev.currentTarget).hasClass('fa-info-circle')) ww='info';\\n\\telse if($(ev.currentTarget).hasClass('fa-newspaper')) ww='paper';\\n\\telse return;\\n\\n\\tif($(\\\"#trmnu\\\").length) {\\n\\t\\tvar aa=$(\\\"#trmnu\\\").attr(\\\"data-which\\\");\\n\\t\\trmnu_close();\\n\\t\\tif(aa==ww) return;\\n\\t}\\n\\n\\tev.preventDefault(); ev.stopPropagation();\\n\\trmnu_open(ww);\\n}\\n\\nfunction aetopmenu_toggle(ev)\\n{\\n\\tev.preventDefault(); ev.stopPropagation();\\n\\trmnu_close();\\n\\t$(\\\"#topmenu\\\").toggle();\\n\\t$(\\\"#topmenubtn\\\").toggleClass(\\\"active\\\");\\n}\\n\\nfunction aeclosemenus1(ev)\\n{\\n\\trmnu_close();\\n\\n\\tif($(\\\"#topmenubtn\\\").hasClass(\\\"active\\\")) {\\n\\t\\t$(\\\"#topmenu\\\").toggle();\\n\\t\\t$(\\\"#topmenubtn\\\").removeClass(\\\"active\\\");\\n\\t}\\n}\\n\\nwindow.onload=function() {\\n\\t//if(typeof aerunstartup==\\\"function\\\") aerunstartup();\\n\\t$(window).on(\\\"click\\\", aeclosemenus1);\\n\\t$(\\\"#topmenubtn\\\").on(\\\"click\\\", aetopmenu_toggle);\\n\\t$(\\\"#rtopmenu i.fa\\\").on(\\\"click\\\", rmnu_toggle);\\n};\\n\\twindow.aegal_xdsect='cars';\\nwindow.ae__apid='31';if(typeof aerunstartup==\\\"function\\\") aerunstartup();\\naeinputdefaults('input[type=\\\"text\\\"]');\\n</script>\\n</body>\\n</html><!-- cars-model -->\\n\",\n    \"page_id\": \"\",\n    \"page_type\": \"item\",\n    \"plugins\": {\n        \"annotations-plugin\": {\n            \"extracts\": [\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": null,\n                    \"id\": \"0d9b-4cb8-89e5\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"schema_id\": \"9387-4bba-bf61\",\n                    \"selector\": \"#pagewrapper\",\n                    \"siblings\": 1,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".seriestitle > a\"\n                    ],\n                    \"container_id\": \"0d9b-4cb8-89e5\",\n                    \"data\": {\n                        \"3828-4882-8cbb\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"19b7-40f6-83df\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"80cc-4979-bf27\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \"#pagewrapper > .clearfix > div:nth-child(1) > .seriestitle > a\",\n                    \"tagid\": null,\n                    \"xpath\": \"//*[@id=\\\"pagewrapper\\\"]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" clearfix \\\")]/div[1]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" seriestitle \\\")]/a\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"#eng_fiat-124-abarth-spider-2017-14-6at-170-hp > .enginedata > div:nth-child(1) > .grspec > dd:nth-child(2)\",\n                        \"#eng_fiat-124-abarth-spider-2017-14-6at-170-hp > .enginedata > div:nth-child(3) > .table1w > dd:nth-child(4)\"\n                    ],\n                    \"container_id\": \"0d9b-4cb8-89e5\",\n                    \"data\": {\n                        \"a681-4645-8fea\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"0028-4c08-8b11\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"4113-4f23-8708\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \"#pagewrapper > .container > .col123width > .col23width > div:nth-child(2) > .enginedata > .techdata > .table1w > dd\",\n                    \"tagid\": null,\n                    \"xpath\": \"//*[@id=\\\"pagewrapper\\\"]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" container \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" col123width \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" col23width \\\")]/div[2]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" enginedata \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" techdata \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" table1w \\\")]/dd\"\n                }\n            ]\n        }\n    },\n    \"schemas\": {\n        \"9387-4bba-bf61\": {\n            \"fields\": {\n                \"1e52-4a32-aa5f\": {\n                    \"id\": \"1e52-4a32-aa5f\",\n                    \"name\": \"description\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"19b7-40f6-83df\": {\n                    \"id\": \"19b7-40f6-83df\",\n                    \"name\": \"name\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"3833-4fc1-a70d\": {\n                    \"id\": \"3833-4fc1-a70d\",\n                    \"name\": \"make\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"c0de-45f7-808e\": {\n                    \"id\": \"c0de-45f7-808e\",\n                    \"name\": \"model\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"ed65-4790-abfe\": {\n                    \"id\": \"ed65-4790-abfe\",\n                    \"name\": \"engine\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"59d5-4c10-a2dc\": {\n                    \"id\": \"59d5-4c10-a2dc\",\n                    \"name\": \"cyclinders\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"24f4-485d-8af6\": {\n                    \"id\": \"24f4-485d-8af6\",\n                    \"name\": \"displacement\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"ca84-4bc4-a4e3\": {\n                    \"id\": \"ca84-4bc4-a4e3\",\n                    \"name\": \"power\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"0028-4c08-8b11\": {\n                    \"id\": \"0028-4c08-8b11\",\n                    \"name\": \"info\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"FIAT Abarth Spider - - autoevolution\"\n        }\n    },\n    \"results\": [{\n            \"_template\": \"2341-45eb-904a\",\n            \"info\": [\n                \"L4\",\n                \"1368 cm3\",\n                \"125.1 KW @ 5500 RPM 170 HP @ 5500 RPM 168 BHP @ 5500 RPM Torque 184 lb-ft @ 2500 RPM 250 Nm @ 2500 RPM Fuel System Turbocharged Multipoint Injection\",\n                \"Gasoline\",\n                \"153 g/km\",\n                \"142 mph OR 229 km/h\",\n                \"6.9 s\",\n                \"25.8 mpg US OR 9.1 L/100Km\",\n                \"45.2 mpg US OR 5.2 L/100Km\",\n                \"35.6 mpg US OR 6.6 L/100Km\",\n                \"Rear Wheel Drive\",\n                \"6-speed automatic\",\n                \"Ventilated Discs\",\n                \"Discs\",\n                \"205/45 R17 W84\",\n                \"159.6 in OR 4054 mm\",\n                \"68.5 in OR 1740 mm\",\n                \"48.5 in OR 1232 mm\",\n                \"58.9/59.2 in OR 1,496/1,504 mm\",\n                \"90.9 in OR 2309 mm\",\n                \"4.7 in OR 119 mm\",\n                \"4.9 cuFT OR 139 L\",\n                \"-\",\n                \"2381 lbs OR 1080 kg\",\n                \"-\"\n            ],\n            \"_type\": \"FIAT Abarth Spider - - autoevolution\",\n            \"url\": \"http://url\",\n            \"name\": [\n                \"FIAT 124 Abarth Spider 2017 - Present\"\n            ]\n        }\n    ],\n    \"scrapes\": \"9387-4bba-bf61\",\n    \"spider\": \"www.autoevolution.com\",\n    \"url\": \"http://www.autoevolution.com/cars/fiat-124-abarth-spider-2017.html\",\n    \"version\": \"0.13.0b23\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/cars.com.json",
    "content": "{\n  \"annotated_body\": \"\",\n  \"body\": \"original_body\",\n  \"extractors\": {},\n  \"id\": \"42a6-42fa-958e\",\n  \"name\": \"1\",\n  \"original_body\": \"<!doctype html>\\n<html>\\n\\n<head>\\n    <script>if (window.performance && window.performance.clearMarks) {window.performance.clearMarks();}</script>\\n    <script>if (window.performance && window.performance.mark) {window.performance.mark(\\\"pageLoadStart\\\");}</script>\\n        <link rel=\\\"preconnect\\\" href=\\\"https://cstatic-images.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://cstatic-graphics.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://vcu.collserve.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://s.btstatic.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://fonts.googleapis.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://fonts.gstatic.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://securepubads.g.doubleclick.net\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://pagead2.googlesyndication.com\\\" />\\n    <title>2016 Chevrolet Colorado Reviews, Specs and Prices | Cars.com</title>\\n    <meta charset=\\\"UTF-8\\\">\\n    <meta name=\\\"viewport\\\"\\n          content=\\\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\">\\n    <meta name=\\\"viewport\\\" content=\\\"initial-scale=1.0,user-scalable=no,maximum-scale=1\\\" media=\\\"(device-height: 568px)\\\"/>\\n    <meta property=\\\"fb:app_id\\\" content=\\\"290349283473\\\"/>\\n    <meta property=\\\"og:title\\\" content=\\\"News\\\"/>\\n    <meta property=\\\"og:site_name\\\" content=\\\"Cars.com\\\"/>\\n    <meta property=\\\"og:image\\\" content=\\\"//graphics.cars.com/images/core/logo.png\\\"/>\\n    <meta name=\\\"ROBOTS\\\" content=\\\"INDEX, FOLLOW\\\">\\n    <meta name=\\\"description\\\" content=\\\"Research and compare the 2016 Chevrolet Colorado and get MSRP, invoice price, used car book values, expert reviews, photos, features, pros and cons, equipment, specs, options and more.\\\">\\n    <link rel=\\\"canonical\\\" type=\\\"\\\" href=\\\"https://www.cars.com/research/chevrolet-colorado-2016/\\\" title=\\\"\\\" media=\\\"\\\">\\n    <script type=\\\"application/ld+json\\\">{\\\"@context\\\":\\\"http://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/\\\",\\\"name\\\":\\\"Cars.com\\\"}},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/chevrolet-colorado-2016/\\\",\\\"name\\\":\\\"2016\\\"}},{},{},{\\\"@type\\\":\\\"ListItem\\\",\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/chevrolet/\\\",\\\"name\\\":\\\"Chevrolet\\\"},\\\"position\\\":3},{\\\"@type\\\":\\\"ListItem\\\",\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/chevrolet-colorado/\\\",\\\"name\\\":\\\"Colorado\\\"},\\\"position\\\":4}]}</script>\\n    <script>\\n        window.carsStatic = \\\"/static/www/fd0021bad117\\\";\\n    </script>\\n\\n\\n\\n\\n        <link href=\\\"/static/www/fd0021bad117/app/bundles/common.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"/>\\n\\n    <!--[if IE 9]>\\n    <link href=\\\"/static/www/fd0021bad117/app/bundles/ie9.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"/>\\n    <![endif]-->\\n\\n    <script src=\\\"//cdn.optimizely.com/js/7544042.js\\\"></script>\\n\\n    <script type=\\\"text/javascript\\\">\\n        // TEMP flag used by static SRP apiBootstrapper\\n        if (!window.CARS) window.CARS = {};\\n        window.CARS.isServerSideRendered = true;\\n    </script>\\n    <script src=\\\"/static/www/fd0021bad117/app/js/init.js\\\"></script>\\n\\n\\n    <script src=\\\"//assets.adobedtm.com/36e159fa28ebd11f42c753477615b777373ed969/satelliteLib-d02c51728c29ecf9a3db1b01abbed2ea57be2e3c.js\\\"></script>\\n\\n\\n\\n    <meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\">\\n\\n</head>\\n\\n<!-- Per XD guidelines, we should never use anything but no-margin page layout -->\\n<body cars-common ng-class=\\\"currentBreakpoint\\\" class=\\\"onecol-layout-no-margin \\\">\\n\\n<div class=\\\"page\\\">\\n\\n    <div class=\\\"main-header\\\">\\n<cars-feature-flags if-not-flag=\\\"profCioAvatar\\\" ng-cloak>\\n      <cars-global-sticky-header>\\n        <cars-global-navigation hide-settings=\\\"\\\">\\n            <cars-global-navigation-item tracking-name=\\\"header-buy\\\" item-name=\\\"Buy\\\" dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-buy\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-search-cars\\\" url=\\\"https://www.cars.com/shop/#forSale\\\" child-name=\\\"Find Cars for Sale\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-search-cars\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-research-cars\\\" url=\\\"https://www.cars.com/shop/#research\\\" child-name=\\\"Research Car Models\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-research-cars\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-reviews\\\" url=\\\"/reviews/\\\" child-name=\\\"Review a Car\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-reviews\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-find-a-dealer\\\" url=\\\"/dealers/buy/\\\" child-name=\\\"Find a Dealer\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-find-a-dealer\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-dealer-reviews\\\" url=\\\"/dealers/buy/\\\" child-name=\\\"Review a Dealer\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-dealer-reviews\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-book-values-buy\\\" url=\\\"/sell/book-value/\\\" child-name=\\\"Estimate Used Car Values\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-book-values-buy\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-finance\\\" url=\\\"/finance/\\\" child-name=\\\"Estimate Your Payments\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-finance\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-cpo\\\" url=\\\"https://www.cars.com/shop/cpo/\\\" child-name=\\\"Certified Pre-Owned Cars\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-cpo\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-sell\\\" item-name=\\\"Sell &amp; Trade\\\" dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-sell\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-sell-your-car\\\" url=\\\"/sell/\\\" child-name=\\\"Sell Your Car\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-sell-your-car\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-book-values-sell\\\" url=\\\"/sell/book-value/\\\" child-name=\\\"Find Your Car&#x27;s Value\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-book-values-sell\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-selling-tips\\\" url=\\\"/sell/how-to/\\\" child-name=\\\"How to Sell Your Car\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-selling-tips\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-my-sell-ad\\\" url=\\\"/sell/profile\\\" child-name=\\\"My Cars.com Listing\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-my-sell-ad\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-service\\\" item-name=\\\"Service &amp; Repair\\\" dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-service\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-service-estimate\\\" url=\\\"/auto-repair/\\\" child-name=\\\"Get a Service Estimate\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-estimate\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-service-shop\\\" url=\\\"/auto-repair/#rpc-details\\\" child-name=\\\"Find a Service Center\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-shop\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-expert-tips\\\" url=\\\"/auto-repair/expert-tips/\\\" child-name=\\\"Service &amp; Repair Advice\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-tips\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-get-recalls\\\" url=\\\"/recalls/\\\" child-name=\\\"Safety &amp; Recall Notices\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-maintenance\\\" url=\\\"/news/maintenance-101/ \\\" child-name=\\\"Car Maintenance 101\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-maintenance\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-news\\\" item-name=\\\"News\\\" dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-news\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-news\\\" url=\\\"/news/\\\" child-name=\\\"Latest Car News\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-news\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-latest-reviews\\\" url=\\\"/news/Car-Reviews\\\" child-name=\\\"Latest Car Reviews\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-latest-reviews\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-latest-videos\\\" url=\\\"/news/Video\\\" child-name=\\\"Latest Videos\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-latest-videos\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-awards\\\" url=\\\"/awards\\\" child-name=\\\"Awards\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-awards\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-multi-car-comparisons\\\" url=\\\"/news/Multi-Car-Comparison/\\\" child-name=\\\"Multi-Car Comparisons\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-multi-car-comparisons\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-updates-trends\\\" url=\\\"/news/Car-Buying/\\\" child-name=\\\"Updates &amp; Trends\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-updates-trends\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-first-time\\\" url=\\\"/news/First-Time-Buyers/\\\" child-name=\\\"Help for First-Time Buyers\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-first-time\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-seat-check\\\" url=\\\"/news/Car-Seat-Check/\\\" child-name=\\\"Child Car Seat Checks\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-seat-check\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-det\\\" url=\\\"/news/Detroit-Auto-Show/\\\" child-name=\\\"Detroit Auto Show\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-det\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-chi\\\" url=\\\"/news/Chicago-Auto-Show/\\\" child-name=\\\"Chicago Auto Show\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-chi\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-ny\\\" url=\\\"/news/new-york-auto-show\\\" child-name=\\\"New York Auto Show\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-ny\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-la\\\" url=\\\"/news/LA-Auto-Show/\\\" child-name=\\\"LA Auto Show\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-la\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n        </cars-global-navigation>\\n      </cars-global-sticky-header>\\n      <noscript>\\n        <div class=\\\"col-group\\\">\\n          <div class=\\\"col-mb-12\\\">\\n            <div class=\\\"alert-message warning\\\">\\n              <p>For best performance, please check your browser settings for blocked content.</p>\\n            </div>\\n          </div>\\n        </div>\\n      </noscript>\\n\\n</cars-feature-flags>\\n\\n<cars-feature-flags if-flag=\\\"profCioAvatar\\\">\\n\\n        <cars-global-sticky-header>\\n\\n            <div class=\\\"cars-global-navigation-beta\\\" ng-controller=\\\"globalHeaderNavigation\\\">\\n                <div class=\\\"global-nav\\\" ng-class=\\\"{'mobile-nav-menu-open': mobileNavMenuOpen, 'mobile-profile-menu-open': mobileProfileMenuOpen}\\\">\\n                    <div class=\\\"fixed-container\\\" ng-style=\\\"{'top': (mobileProfileMenuOpen || mobileNavMenuOpen) ? headerViewportY + 'px' : 0}\\\" ng-class=\\\"{'undocked': sticky, 'hide': hidden}\\\">\\n                        <div class=\\\"background-container\\\">\\n                            <div class=\\\"max-width-container\\\">\\n                                <a class=\\\"logo\\\" href=\\\"/\\\" name=\\\"&lid=header-home\\\" ng-class=\\\"{'simple': smallLogo}\\\" target=\\\"_self\\\" data-linkname=\\\"header-home\\\">\\n                                    <svg class=\\\"cars-logo\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" version=\\\"1.1\\\" x=\\\"0px\\\" y=\\\"0px\\\" width=\\\"165px\\\" height=\\\"70px\\\" viewBox=\\\"0 0 165 70\\\" enable-background=\\\"new 0 0 165 70\\\" xml:space=\\\"preserve\\\">\\n<g id=\\\"Layer_1\\\">\\n\\n        <radialGradient id=\\\"SVGID_1_\\\" cx=\\\"41.1323\\\" cy=\\\"-3.0356\\\" r=\\\"116.9038\\\" gradientTransform=\\\"matrix(-0.8303 0.5574 -0.4031 -0.6005 74.0593 -27.7844)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.3086\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.392\\\" style=\\\"stop-color:#9E9E9E\\\"/>\\n        <stop offset=\\\"0.522\\\" style=\\\"stop-color:#3F3F3F\\\"/>\\n        <stop offset=\\\"0.5807\\\" style=\\\"stop-color:#1A1A1A\\\"/>\\n        <stop offset=\\\"0.6089\\\" style=\\\"stop-color:#202020\\\"/>\\n        <stop offset=\\\"0.8339\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path fill=\\\"url(#SVGID_1_)\\\" d=\\\"M15.588,31.615c0-13.049,17.466-24.389,43.138-30.146C24.623,5.791-0.233,19.167-0.233,35   c0,19.331,37.041,35,82.733,35c20.445,0,39.154-3.139,53.592-8.337c-11.565,2.632-24.818,4.127-38.906,4.127   C52.121,65.79,15.588,50.489,15.588,31.615z\\\"/>\\n    <radialGradient id=\\\"SVGID_2_\\\" cx=\\\"81.9243\\\" cy=\\\"-57.5869\\\" r=\\\"132.8217\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.6091\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.6587\\\" style=\\\"stop-color:#BFBFBF\\\"/>\\n        <stop offset=\\\"0.7675\\\" style=\\\"stop-color:#717171\\\"/>\\n        <stop offset=\\\"0.8957\\\" style=\\\"stop-color:#0D0D0D\\\"/>\\n        <stop offset=\\\"0.9081\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.9255\\\" style=\\\"stop-color:#262626\\\"/>\\n        <stop offset=\\\"0.9459\\\" style=\\\"stop-color:#444444\\\"/>\\n        <stop offset=\\\"0.9509\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path fill=\\\"url(#SVGID_2_)\\\" d=\\\"M165.233,35c0-19.33-37.041-35-82.733-35c-8.265,0-16.244,0.515-23.774,1.469   C33.054,7.227,15.588,18.566,15.588,31.615c0,18.874,36.533,34.175,81.598,34.175c14.088,0,27.341-1.496,38.906-4.127   C153.92,55.243,165.233,45.681,165.233,35z\\\"/>\\n    <ellipse fill=\\\"#490F71\\\" cx=\\\"82.436\\\" cy=\\\"34.952\\\" rx=\\\"69.584\\\" ry=\\\"29.481\\\"/>\\n\\n        <radialGradient id=\\\"eyebrow_shadow_right_1_\\\" cx=\\\"125.0479\\\" cy=\\\"23.3047\\\" r=\\\"21.2997\\\" fx=\\\"125.0368\\\" fy=\\\"23.3045\\\" gradientTransform=\\\"matrix(-0.0169 -0.9999 1.6456 -0.0279 88.8154 148.9841)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#000000;stop-opacity:0.3\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#000000;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"eyebrow_shadow_right_2_\\\" fill=\\\"url(#eyebrow_shadow_right_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"lower_left_rim_shadow_1_\\\" cx=\\\"634.3643\\\" cy=\\\"-1092.1196\\\" r=\\\"38.0094\\\" fx=\\\"627.7449\\\" fy=\\\"-1071.3595\\\" gradientTransform=\\\"matrix(0.0031 1 2.5435 -0.0079 2877.6846 -615.2505)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9571\\\" style=\\\"stop-color:#000000;stop-opacity:0\\\"/>\\n        <stop offset=\\\"0.99\\\" style=\\\"stop-color:#000000;stop-opacity:0.33\\\"/>\\n    </radialGradient>\\n    <path id=\\\"lower_left_rim_shadow\\\" fill=\\\"url(#lower_left_rim_shadow_1_)\\\" d=\\\"M98.452,59.999c11.041,0,20.702-1.422,28.978-3.72   c-11.938,4.297-27.547,6.901-44.631,6.901c-37.517,0-67.931-12.554-67.931-28.039c0-1.927,0.471-3.808,1.368-5.626   C16.896,50.93,61.83,59.999,98.452,59.999z\\\"/>\\n\\n        <radialGradient id=\\\"bottom_right_glow_1_\\\" cx=\\\"119.7432\\\" cy=\\\"67.3354\\\" r=\\\"36.8928\\\" gradientTransform=\\\"matrix(-9.633738e-04 -1 2.0465 -0.002 -17.9434 187.2113)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#FFCCFF;stop-opacity:0.2\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFCCFF;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"bottom_right_glow_2_\\\" fill=\\\"url(#bottom_right_glow_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"lower_right_rim_light_1_\\\" cx=\\\"98.0234\\\" cy=\\\"-1097.168\\\" r=\\\"32.7298\\\" fx=\\\"92.3235\\\" fy=\\\"-1079.2915\\\" gradientTransform=\\\"matrix(-0.0031 1 -2.5435 -0.0079 -2720.1831 -73.9038)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9702\\\" style=\\\"stop-color:#FFF2FF;stop-opacity:0\\\"/>\\n        <stop offset=\\\"0.99\\\" style=\\\"stop-color:#FFF2FF;stop-opacity:0.5\\\"/>\\n    </radialGradient>\\n    <path id=\\\"lower_right_rim_light\\\" fill=\\\"url(#lower_right_rim_light_1_)\\\" d=\\\"M67.145,59.999c-11.041,0-20.702-1.422-28.977-3.72   c11.937,4.297,27.547,6.901,44.631,6.901c37.517,0,67.931-12.554,67.931-28.039c0-1.927-0.471-3.808-1.368-5.626   C148.701,50.93,103.767,59.999,67.145,59.999z\\\"/>\\n\\n        <radialGradient id=\\\"top_left_glow_circle_1_\\\" cx=\\\"49.4507\\\" cy=\\\"15.042\\\" r=\\\"40.9061\\\" fx=\\\"46.4286\\\" fy=\\\"14.5953\\\" gradientTransform=\\\"matrix(0.0214 0.9998 -1.9051 0.0408 77.0485 -35.011)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#9042C1\\\"/>\\n        <stop offset=\\\"0.1864\\\" style=\\\"stop-color:#8A3DBD;stop-opacity:0.8605\\\"/>\\n        <stop offset=\\\"0.4302\\\" style=\\\"stop-color:#7A2FB1;stop-opacity:0.678\\\"/>\\n        <stop offset=\\\"0.6012\\\" style=\\\"stop-color:#6A22A6;stop-opacity:0.55\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#6A22A6;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"top_left_glow_circle_2_\\\" fill=\\\"url(#top_left_glow_circle_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"top_left_rim_eyebrow_1_\\\" cx=\\\"91.5225\\\" cy=\\\"39.4033\\\" r=\\\"33.0635\\\" fx=\\\"81.1644\\\" fy=\\\"43.4248\\\" gradientTransform=\\\"matrix(0.0031 -1 2.514 0.0078 -7.8206 130.6176)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.8847\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0.7\\\"/>\\n    </radialGradient>\\n    <path id=\\\"top_left_rim_eyebrow\\\" fill=\\\"url(#top_left_rim_eyebrow_1_)\\\" d=\\\"M98.646,10.284c11.04,0,20.7,1.421,28.976,3.72   c-11.936-4.298-27.546-6.902-44.63-6.902c-37.518,0-67.931,12.554-67.931,28.04c0,1.927,0.472,3.808,1.369,5.625   C17.089,19.353,62.023,10.284,98.646,10.284z\\\"/>\\n    <path opacity=\\\"0.4\\\" d=\\\"M30.641,27.752c2.059,0,4.017,0.573,5.874,1.754l-1.586,3.965c-1.292-0.981-2.534-1.47-3.747-1.47   c-2.801,0-4.625,1.922-4.625,4.012c0,2.192,1.484,3.643,3.512,3.643c1.382,0,2.597-0.438,3.981-1.281l0.812,4.202   c-1.958,0.945-3.714,1.451-5.537,1.451c-4.659,0-7.832-3.059-7.832-7.439C21.493,31.665,25.308,27.752,30.641,27.752z    M95.544,32.001c1.213,0,2.456,0.489,3.746,1.47l1.586-3.965c-1.855-1.181-3.815-1.754-5.873-1.754   c-5.334,0-9.148,3.913-9.148,8.836c0,4.38,3.175,7.439,7.832,7.439c1.823,0,3.578-0.505,5.537-1.451l-0.812-4.202   c-1.384,0.843-2.6,1.281-3.983,1.281c-2.024,0-3.511-1.45-3.511-3.643C90.918,33.923,92.741,32.001,95.544,32.001z M53.607,28.46   l-2.6,14.826h-5.165l0.269-1.546c-1.519,1.411-2.902,2.119-4.455,2.119c-3.006,0-5.131-2.487-5.131-6.497   c0-5.461,3.173-9.441,7.325-9.441c1.688,0,2.971,0.64,4.354,2.058l0.235-1.519H53.607z M47.632,33.113   c-0.54-1.079-1.282-1.584-2.296-1.584c-1.991,0-3.78,2.292-3.78,5.699c0,1.72,0.91,2.832,2.295,2.832   c1.553,0,2.801-1.348,3.274-3.945L47.632,33.113z M64.327,28.022c-1.654,0-3.003,1.112-4.219,3.338l0.506-2.9h-4.692l-2.633,14.826   h5.232l0.979-5.72c0.507-2.901,1.519-4.318,3.68-4.318c0.473,0,1.013,0.068,1.687,0.236l0.947-5.226   C65.273,28.09,64.766,28.022,64.327,28.022z M73.288,31.09c1.079,0,2.531,0.506,4.219,1.55l1.384-2.999   c-1.959-1.248-3.883-1.855-5.976-1.855c-3.679,0-6.043,2.124-6.043,4.788c0,1.989,1.148,3.54,3.41,4.62l0.98,0.472   c1.248,0.573,1.923,0.944,1.923,1.72c0,0.673-0.675,1.281-1.789,1.281c-1.25,0-2.87-0.54-4.861-1.686l-1.351,3.161   c1.958,1.211,4.085,1.817,6.347,1.817c3.916,0,6.312-2.119,6.312-4.946c0-1.887-1.182-3.539-3.208-4.416l-0.912-0.372   c-1.518-0.64-2.262-1.044-2.262-1.854C71.463,31.665,72.139,31.09,73.288,31.09z M82.047,38.105c-1.519,0-2.803,1.248-2.803,2.798   c0,1.473,1.284,2.788,2.803,2.788c1.591,0,2.813-1.281,2.813-2.788C84.86,39.318,83.638,38.105,82.047,38.105z M117.391,35.103   c0,4.992-3.849,8.857-8.71,8.857c-4.727,0-7.831-3.025-7.831-7.407c0-4.888,3.814-8.801,8.911-8.801   C114.252,27.752,117.391,30.754,117.391,35.103z M112.09,35.171c0-2.158-1.08-3.506-2.565-3.506c-1.721,0-3.376,2.056-3.376,4.888   c0,2.158,1.147,3.542,2.634,3.542C110.537,40.095,112.09,38.037,112.09,35.171z M139.018,28.022c-1.957,0-3.655,1.012-5.227,3.103   c-0.481-1.957-1.957-3.103-4.04-3.103c-1.799,0-3.4,0.911-4.845,2.665l0.354-2.227h-4.843l-2.502,14.826h4.906l1.254-7.272   c0.447-2.663,2.019-3.878,3.366-3.878c0.834,0,1.347,0.574,1.347,1.451c0,0.337-0.063,0.774-0.161,1.28l-1.41,8.419h4.905   l1.251-7.272c0.449-2.663,2.021-3.878,3.368-3.878c0.832,0,1.314,0.574,1.314,1.451c0,0.337-0.034,0.774-0.131,1.281l-1.408,8.418   h4.873l1.702-9.936c0.062-0.372,0.095-0.71,0.095-1.046C143.187,29.742,141.55,28.022,139.018,28.022z\\\"/>\\n    <g>\\n        <linearGradient id=\\\"SVGID_3_\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"81.6675\\\" y1=\\\"26.8882\\\" x2=\\\"81.6675\\\" y2=\\\"43.1636\\\">\\n            <stop offset=\\\"0.6107\\\" style=\\\"stop-color:#FFFFFF\\\"/>\\n            <stop offset=\\\"0.791\\\" style=\\\"stop-color:#E0E0E0\\\"/>\\n        </linearGradient>\\n        <path fill=\\\"url(#SVGID_3_)\\\" d=\\\"M29.969,26.888c2.059,0,4.017,0.574,5.874,1.754l-1.586,3.965c-1.292-0.98-2.535-1.47-3.748-1.47    c-2.801,0-4.625,1.922-4.625,4.012c0,2.193,1.484,3.643,3.512,3.643c1.383,0,2.598-0.438,3.981-1.282l0.812,4.202    c-1.958,0.945-3.714,1.451-5.537,1.451c-4.659,0-7.832-3.059-7.832-7.44C20.821,30.801,24.636,26.888,29.969,26.888z     M94.872,31.138c1.213,0,2.456,0.489,3.746,1.47l1.586-3.965c-1.855-1.18-3.815-1.754-5.873-1.754    c-5.334,0-9.148,3.913-9.148,8.835c0,4.381,3.175,7.44,7.832,7.44c1.823,0,3.578-0.506,5.537-1.451l-0.812-4.202    c-1.384,0.843-2.6,1.282-3.983,1.282c-2.024,0-3.511-1.45-3.511-3.643C90.246,33.06,92.069,31.138,94.872,31.138z M52.936,27.597    l-2.6,14.826h-5.164l0.269-1.546c-1.519,1.411-2.902,2.119-4.455,2.119c-3.006,0-5.131-2.487-5.131-6.497    c0-5.461,3.173-9.441,7.325-9.441c1.688,0,2.971,0.641,4.354,2.058l0.236-1.518H52.936z M46.96,32.25    c-0.54-1.079-1.281-1.584-2.295-1.584c-1.991,0-3.78,2.292-3.78,5.699c0,1.72,0.91,2.832,2.295,2.832    c1.553,0,2.801-1.348,3.274-3.946L46.96,32.25z M63.655,27.158c-1.654,0-3.003,1.112-4.219,3.338l0.506-2.9H55.25l-2.633,14.826    h5.232l0.979-5.72c0.507-2.901,1.519-4.318,3.68-4.318c0.473,0,1.013,0.068,1.687,0.236l0.947-5.226    C64.601,27.226,64.094,27.158,63.655,27.158z M72.616,30.227c1.079,0,2.532,0.505,4.219,1.55l1.385-2.999    c-1.959-1.249-3.883-1.855-5.976-1.855c-3.679,0-6.043,2.124-6.043,4.788c0,1.99,1.149,3.54,3.41,4.62l0.98,0.472    c1.248,0.574,1.923,0.944,1.923,1.721c0,0.673-0.676,1.281-1.789,1.281c-1.25,0-2.87-0.54-4.861-1.686l-1.351,3.161    c1.958,1.211,4.085,1.817,6.347,1.817c3.916,0,6.312-2.12,6.312-4.946c0-1.887-1.182-3.539-3.208-4.416l-0.911-0.372    c-1.518-0.64-2.263-1.045-2.263-1.854C70.791,30.801,71.467,30.227,72.616,30.227z M81.375,37.241    c-1.519,0-2.803,1.248-2.803,2.798c0,1.473,1.284,2.788,2.803,2.788c1.591,0,2.813-1.281,2.813-2.788    C84.188,38.455,82.966,37.241,81.375,37.241z M116.719,34.239c0,4.992-3.849,8.857-8.71,8.857c-4.727,0-7.831-3.025-7.831-7.407    c0-4.888,3.814-8.801,8.911-8.801C113.58,26.888,116.719,29.89,116.719,34.239z M111.418,34.307c0-2.158-1.08-3.506-2.565-3.506    c-1.721,0-3.376,2.056-3.376,4.888c0,2.158,1.147,3.542,2.634,3.542C109.865,39.231,111.418,37.173,111.418,34.307z     M138.346,27.158c-1.956,0-3.655,1.013-5.227,3.104c-0.481-1.957-1.957-3.104-4.04-3.104c-1.799,0-3.4,0.911-4.845,2.665    l0.354-2.227h-4.843l-2.502,14.826h4.906l1.253-7.272c0.448-2.664,2.02-3.878,3.367-3.878c0.834,0,1.347,0.574,1.347,1.451    c0,0.337-0.063,0.774-0.161,1.28l-1.41,8.419h4.905l1.251-7.272c0.449-2.664,2.021-3.878,3.368-3.878    c0.832,0,1.314,0.574,1.314,1.451c0,0.337-0.034,0.774-0.131,1.281l-1.408,8.418h4.873l1.702-9.936    c0.062-0.372,0.095-0.709,0.095-1.045C142.515,28.878,140.878,27.158,138.346,27.158z\\\"/>\\n    </g>\\n    <linearGradient id=\\\"SVGID_4_\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"111.6357\\\" y1=\\\"72.6943\\\" x2=\\\"66.992\\\" y2=\\\"14.9904\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#231F20;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#231F20;stop-opacity:0.3\\\"/>\\n    </linearGradient>\\n    <path fill=\\\"url(#SVGID_4_)\\\" d=\\\"M151.828,34.952c0,16.176-31.068,29.29-69.392,29.29c-38.325,0-69.393-13.113-69.393-29.29   s31.068-29.29,69.393-29.29C120.76,5.663,151.828,18.776,151.828,34.952z M82.875,7.102c-37.506,0-67.912,12.55-67.912,28.032   c0,15.48,30.405,28.031,67.912,28.031c37.507,0,67.912-12.551,67.912-28.031C150.787,19.652,120.382,7.102,82.875,7.102z\\\"/>\\n    <g>\\n        <path d=\\\"M151.854,59.417h-0.999v-0.405h2.459v0.405h-0.999v2.809h-0.461V59.417z\\\"/>\\n        <path d=\\\"M153.78,59.013h0.76l1.008,2.67l0.99-2.67h0.76v3.213h-0.46v-2.781h-0.011l-1.062,2.781h-0.451l-1.063-2.781h-0.01v2.781    h-0.46V59.013z\\\"/>\\n    </g>\\n\\n        <radialGradient id=\\\"inner_ring-gradient_1_\\\" cx=\\\"81.9575\\\" cy=\\\"24.9375\\\" r=\\\"94.0247\\\" fx=\\\"82.9614\\\" fy=\\\"24.0574\\\" gradientTransform=\\\"matrix(-0.9953 0.0623 -0.0317 -0.5032 164.2916 28.9651)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.3018\\\" style=\\\"stop-color:#666666\\\"/>\\n        <stop offset=\\\"0.4761\\\" style=\\\"stop-color:#626262\\\"/>\\n        <stop offset=\\\"0.6463\\\" style=\\\"stop-color:#565656\\\"/>\\n        <stop offset=\\\"0.7397\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n        <stop offset=\\\"0.7494\\\" style=\\\"stop-color:#424242\\\"/>\\n        <stop offset=\\\"0.7815\\\" style=\\\"stop-color:#252525\\\"/>\\n        <stop offset=\\\"0.8092\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.8292\\\" style=\\\"stop-color:#0D0D0D\\\"/>\\n        <stop offset=\\\"0.8404\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.8558\\\" style=\\\"stop-color:#252525\\\"/>\\n        <stop offset=\\\"0.8736\\\" style=\\\"stop-color:#424242\\\"/>\\n        <stop offset=\\\"0.8931\\\" style=\\\"stop-color:#6A6A6A\\\"/>\\n        <stop offset=\\\"0.9124\\\" style=\\\"stop-color:#999999\\\"/>\\n        <stop offset=\\\"0.9442\\\" style=\\\"stop-color:#B8B8B8\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#F7F7F7\\\"/>\\n    </radialGradient>\\n    <path id=\\\"inner_ring-gradient\\\" fill=\\\"url(#inner_ring-gradient_1_)\\\" d=\\\"M82.436,67.025c41.769,0,75.631-14.36,75.631-32.073   c0-17.714-33.862-32.073-75.631-32.073c-41.77,0-75.631,14.359-75.631,32.073C6.805,52.666,40.667,67.025,82.436,67.025z    M153.46,34.952c0,16.441-31.799,29.77-71.024,29.77c-39.226,0-71.024-13.329-71.024-29.77c0-16.441,31.798-29.77,71.024-29.77   C121.661,5.183,153.46,18.511,153.46,34.952z\\\"/>\\n\\n        <radialGradient id=\\\"outer_ring-rim_shadow_1_\\\" cx=\\\"83.8438\\\" cy=\\\"34.3604\\\" r=\\\"90.2415\\\" fx=\\\"79.642\\\" fy=\\\"25.7344\\\" gradientTransform=\\\"matrix(0.9999 -0.0167 0.0066 0.396 -0.2153 22.1524)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.8978\\\" style=\\\"stop-color:#4D4D4D;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path id=\\\"outer_ring-rim_shadow\\\" fill=\\\"url(#outer_ring-rim_shadow_1_)\\\" d=\\\"M165.233,35c0,19.331-37.041,35-82.733,35   S-0.233,54.331-0.233,35c0-19.33,37.041-35,82.733-35S165.233,15.67,165.233,35z M5.558,34.84c0,18.234,34.505,33.017,77.07,33.017   c42.564,0,77.07-14.782,77.07-33.017S125.192,1.824,82.628,1.824C40.063,1.824,5.558,16.605,5.558,34.84z\\\"/>\\n\\n        <radialGradient id=\\\"outer_ring-rim_highlight_1_\\\" cx=\\\"81.9883\\\" cy=\\\"34.3604\\\" r=\\\"79.7596\\\" fx=\\\"65.3702\\\" fy=\\\"8.8593\\\" gradientTransform=\\\"matrix(1 0.0011 -4.740664e-04 0.4252 0.0165 19.659)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9406\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0.8\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <path id=\\\"outer_ring-rim_highlight\\\" fill=\\\"url(#outer_ring-rim_highlight_1_)\\\" d=\\\"M165.233,35c0,19.331-37.041,35-82.733,35   S-0.233,54.331-0.233,35c0-19.33,37.041-35,82.733-35S165.233,15.67,165.233,35z M5.558,34.84c0,18.234,34.505,33.017,77.07,33.017   c42.564,0,77.07-14.782,77.07-33.017S125.192,1.824,82.628,1.824C40.063,1.824,5.558,16.605,5.558,34.84z\\\"/>\\n    <path fill=\\\"#CCCCCC\\\" d=\\\"M153.651,34.952c0,16.547-31.884,29.962-71.215,29.962c-39.331,0-71.216-13.415-71.216-29.962   S43.105,4.991,82.436,4.991C121.768,4.991,153.651,18.405,153.651,34.952z M82.436,5.663c-38.325,0-69.393,13.113-69.393,29.29   s31.068,29.29,69.393,29.29c38.324,0,69.392-13.113,69.392-29.29S120.76,5.663,82.436,5.663z\\\"/>\\n    <path fill=\\\"#FFFFFF\\\" d=\\\"M82.628,1.824c42.564,0,77.07,14.782,77.07,33.016s-34.506,33.017-77.07,33.017   c-42.565,0-77.07-14.782-77.07-33.017S40.063,1.824,82.628,1.824z M82.436,66.833c41.664,0,75.44-14.274,75.44-31.881   c0-17.607-33.776-31.881-75.44-31.881c-41.664,0-75.439,14.273-75.439,31.881C6.997,52.559,40.772,66.833,82.436,66.833z\\\"/>\\n</g>\\n<g id=\\\"Layer_2\\\">\\n</g>\\n</svg>\\n                                </a>\\n\\n\\n                                    <ul class=\\\"no-space\\\" ng-hide=\\\"hideSettings\\\">\\n                                    <ul class=\\\"navbar-list drawer-menu mobile-menu-page\\\">\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Buy\\\" menu-name=\\\"Buy\\\" target-class-name=\\\"navbar-item-link\\\"  dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-buy\\\"><span class=\\\"navbar-item-label\\\">Buy</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Buy\\\" men-name=\\\"Buy\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-search-cars\\\">\\n                                                                                <a name=\\\"&lid=header-search-cars\\\" ng-href=\\\"https://www.cars.com/shop/#forSale\\\" target=\\\"_self\\\" title=\\\"Find Cars for Sale\\\">Find Cars for Sale</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-research-cars\\\">\\n                                                                                <a name=\\\"&lid=header-research-cars\\\" ng-href=\\\"https://www.cars.com/shop/#research\\\" target=\\\"_self\\\" title=\\\"Research Car Models\\\">Research Car Models</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-car-reviews\\\" ng-href=\\\"/reviews/\\\" target=\\\"_self\\\" title=\\\"Review a Car\\\">Review a Car</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-find-a-dealer\\\">\\n                                                                                <a name=\\\"&lid=header-find-a-dealer\\\" ng-href=\\\"/dealers/buy/\\\" target=\\\"_self\\\" title=\\\"Find a Dealer\\\">Find a Dealer</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-dealer-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-dealer-reviews\\\" ng-href=\\\"/dealers/buy/\\\" target=\\\"_self\\\" title=\\\"Review a Dealer\\\">Review a Dealer</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-book-values-buy\\\">\\n                                                                                <a name=\\\"&lid=header-book-values-buy\\\" ng-href=\\\"/sell/book-value/\\\" target=\\\"_self\\\" title=\\\"Estimate Used Car Values\\\">Estimate Used Car Values</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-finance\\\">\\n                                                                                <a name=\\\"&lid=header-finance\\\" ng-href=\\\"/finance/\\\" target=\\\"_self\\\" title=\\\"Estimate Your Payments\\\">Estimate Your Payments</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-cpo\\\">\\n                                                                                <a name=\\\"&lid=header-cpo\\\" ng-href=\\\"https://www.cars.com/shop/cpo/\\\" target=\\\"_self\\\" title=\\\"Certified Pre-Owned Cars\\\">Certified Pre-Owned Cars</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Sell\\\" menu-name=\\\"Sell\\\" target-class-name=\\\"navbar-item-link\\\"  dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-sell\\\"><span class=\\\"navbar-item-label\\\">Sell &amp; Trade</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Sell\\\" men-name=\\\"Sell\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-sell-your-car\\\">\\n                                                                                <a name=\\\"&lid=header-sell-your-car\\\" ng-href=\\\"/sell/\\\" target=\\\"_self\\\" title=\\\"Sell Your Car\\\">Sell Your Car</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-book-values-sell\\\">\\n                                                                                <a name=\\\"&lid=header-book-values-sell\\\" ng-href=\\\"/sell/book-value/\\\" target=\\\"_self\\\" title=\\\"Find Your Car&#x27;s Value\\\">Find Your Car&#x27;s Value</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-selling-tips\\\">\\n                                                                                <a name=\\\"&lid=header-selling-tips\\\" ng-href=\\\"/sell/how-to/\\\" target=\\\"_self\\\" title=\\\"How to Sell Your Car\\\">How to Sell Your Car</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-my-sell-ad\\\">\\n                                                                                <a name=\\\"&lid=header-my-sell-ad\\\" ng-href=\\\"/sell/profile\\\" target=\\\"_self\\\" title=\\\"My Cars.com Listing\\\">My Cars.com Listing</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Service\\\" menu-name=\\\"Service\\\" target-class-name=\\\"navbar-item-link\\\"  dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-service\\\"><span class=\\\"navbar-item-label\\\">Service &amp; Repair</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Service\\\" men-name=\\\"Service\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-estimate\\\">\\n                                                                                <a name=\\\"&lid=header-service-estimate\\\" ng-href=\\\"/auto-repair/\\\" target=\\\"_self\\\" title=\\\"Get a Service Estimate\\\">Get a Service Estimate</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-shop\\\">\\n                                                                                <a name=\\\"&lid=header-service-shop\\\" ng-href=\\\"/auto-repair/#rpc-details\\\" target=\\\"_self\\\" title=\\\"Find a Service Center\\\">Find a Service Center</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-service-tips\\\">\\n                                                                                <a name=\\\"&lid=header-expert-tips\\\" ng-href=\\\"/auto-repair/expert-tips/\\\" target=\\\"_self\\\" title=\\\"Service &amp; Repair Advice\\\">Service &amp; Repair Advice</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                                                                                <a name=\\\"&lid=header-get-recalls\\\" ng-href=\\\"/recalls/\\\" target=\\\"_self\\\" title=\\\"Safety &amp; Recall Notices\\\">Safety &amp; Recall Notices</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-maintenance\\\">\\n                                                                                <a name=\\\"&lid=header-car-maintenance\\\" ng-href=\\\"/news/maintenance-101/ \\\" target=\\\"_self\\\" title=\\\"Car Maintenance 101\\\">Car Maintenance 101</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"News Landing Page\\\" menu-name=\\\"News Landing Page\\\" target-class-name=\\\"navbar-item-link\\\"  dtm-data-custom-link=\\\"click\\\" dtm-data-link-name=\\\"header-news\\\"><span class=\\\"navbar-item-label\\\">News</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"News Landing Page\\\" men-name=\\\"News Landing Page\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-car-news\\\">\\n                                                                                <a name=\\\"&lid=header-car-news\\\" ng-href=\\\"/news/\\\" target=\\\"_self\\\" title=\\\"Latest Car News\\\">Latest Car News</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-latest-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-latest-reviews\\\" ng-href=\\\"/news/Car-Reviews\\\" target=\\\"_self\\\" title=\\\"Latest Car Reviews\\\">Latest Car Reviews</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-latest-videos\\\">\\n                                                                                <a name=\\\"&lid=header-latest-videos\\\" ng-href=\\\"/news/Video\\\" target=\\\"_self\\\" title=\\\"Latest Videos\\\">Latest Videos</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-awards\\\">\\n                                                                                <a name=\\\"&lid=header-awards\\\" ng-href=\\\"/awards\\\" target=\\\"_self\\\" title=\\\"Awards\\\">Awards</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-multi-car-comparisons\\\">\\n                                                                                <a name=\\\"&lid=header-multi-car-comparisons\\\" ng-href=\\\"/news/Multi-Car-Comparison/\\\" target=\\\"_self\\\" title=\\\"Multi-Car Comparisons\\\">Multi-Car Comparisons</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-updates-trends\\\">\\n                                                                                <a name=\\\"&lid=header-updates-trends\\\" ng-href=\\\"/news/Car-Buying/\\\" target=\\\"_self\\\" title=\\\"Updates &amp; Trends\\\">Updates &amp; Trends</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-first-time\\\">\\n                                                                                <a name=\\\"&lid=header-first-time\\\" ng-href=\\\"/news/First-Time-Buyers/\\\" target=\\\"_self\\\" title=\\\"Help for First-Time Buyers\\\">Help for First-Time Buyers</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-seat-check\\\">\\n                                                                                <a name=\\\"&lid=header-seat-check\\\" ng-href=\\\"/news/Car-Seat-Check/\\\" target=\\\"_self\\\" title=\\\"Child Car Seat Checks\\\">Child Car Seat Checks</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-det\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-det\\\" ng-href=\\\"/news/Detroit-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"Detroit Auto Show\\\">Detroit Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-chi\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-chi\\\" ng-href=\\\"/news/Chicago-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"Chicago Auto Show\\\">Chicago Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-ny\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-ny\\\" ng-href=\\\"/news/new-york-auto-show\\\" target=\\\"_self\\\" title=\\\"New York Auto Show\\\">New York Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"header-auto-show-la\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-la\\\" ng-href=\\\"/news/LA-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"LA Auto Show\\\">LA Auto Show</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n                                        <li class=\\\"navbar-item mobile\\\"><a href=\\\"https://secure.opinionlab.com/ccc01/o.asp?id=VuvIfpRR\\\" target=\\\"_blank\\\" class=\\\"navbar-item-link\\\">[+] Feedback</a></li>\\n                                        </ul>\\n\\n                                    <ul class=\\\"navbar-list menu-bg user-prof-settings\\\">\\n                                        <cars-nav-user-settings></cars-nav-user-settings>\\n                                    </ul>\\n                                    <ul class=\\\"navbar-list mobile-menu-icon-container\\\">\\n                                        <li class=\\\"navbar-item mobile-menu-icon\\\">\\n                                            <a class=\\\"navbar-item-link\\\" href=\\\"javascript:void(0)\\\" ng-click=\\\"toggleMobileNavMenu()\\\" item-name=\\\"settings\\\">\\n                                                <div class=\\\"mobile-menu-icon-render\\\"><span></span></div>\\n                                            </a>\\n                                        </li>\\n                                    </ul>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n</cars-global-sticky-header>\\n\\n     <noscript>\\n        <div class=\\\"col-group\\\">\\n          <div class=\\\"col-mb-12\\\">\\n            <div class=\\\"alert-message warning\\\">\\n              <p>For best performance, please check your browser settings for blocked content.</p>\\n            </div>\\n          </div>\\n        </div>\\n      </noscript>\\n\\n</cars-feature-flags>\\n\\n</div>\\n\\n\\n\\n    <div class=\\\"page-body\\\">\\n        <div class=\\\"clearfix\\\"></div>\\n        <div itemscope itemtype=\\\"http://schema.org/Car\\\"><!--vehicle schema-->\\n\\n            \\n\\n            <script>ignition.modules.register('researchMmy');</script>\\n<cars-set-ad-cat-info key=\\\"map\\\" value=\\\"{&quot;make&quot;:&quot;Chevrolet&quot;,&quot;model&quot;:&quot;Colorado&quot;,&quot;makeId&quot;:20053,&quot;modelId&quot;:20856,&quot;adCatInfo&quot;:&quot;chevrolet|colorado|truck_compact&quot;}\\\"></cars-set-ad-cat-info>\\n\\n<div class=\\\"mmy-header\\\">\\n    <div class=\\\"mmy-header__title\\\">\\n        <div class=\\\"mmy-header__title-year\\\">\\n            <h1 itemprop=\\\"name\\\" class=\\\"cui-alpha\\\">2016 Chevrolet Colorado</h1>\\n            <meta itemprop=\\\"model\\\" content=\\\"chevrolet colorado\\\">\\n\\n            <a class=\\\"mmy-header__otheryears\\\" href=\\\"\\\" cars-modal-launch=\\\"other-years-modal\\\" >Change Year</a>\\n            <cars-modal-beta ng-cloak  name=\\\"other-years-modal\\\">\\n                <div class=\\\"dialog-mmy-viewotheryears\\\">\\n                    <h2 class=\\\"cui-beta\\\">Other Years</h2>\\n                    <ul class=\\\"mmy-otheryears__list\\\">\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2016/\\\"> 2016</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2015/\\\"> 2015</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2012/\\\"> 2012</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2011/\\\"> 2011</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2010/\\\"> 2010</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2009/\\\"> 2009</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2008/\\\"> 2008</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2007/\\\"> 2007</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2006/\\\"> 2006</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2005/\\\"> 2005</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/research/chevrolet-colorado-2004/\\\"> 2004</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </cars-modal-beta>\\n        </div>\\n            <div itemprop=\\\"aggregateRating\\\" itemscope itemtype=\\\"http://schema.org/AggregateRating\\\" class=\\\"mmy-header__stars\\\">\\n                <meta itemprop=\\\"ratingValue\\\" content=\\\"4.5\\\">\\n                <meta itemprop=\\\"bestRating\\\" content=\\\"5.0\\\">\\n                <meta itemprop=\\\"worstRating\\\" content=\\\"0.0\\\">\\n                <cars-star-rating  itemprop=\\\"ratingValue\\\" rating=\\\"4.5\\\" show-count=\\\"true\\\"></cars-star-rating>\\n                <noscript>4.5 out of 5.0 stars</noscript>\\n                <a href=\\\"consumer-reviews\\\" class=\\\"rating-link\\\"><span itemprop=\\\"reviewCount\\\">17</span> reviews</a>\\n            </div>\\n\\n\\n\\n        <div ng-if=\\\"false\\\" class=\\\"hero-slider-wrapper\\\" cars-standard-link=\\\"view-photo-gallery-hero\\\" cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\">\\n            <div class=\\\"hero-slider-clearfix\\\">\\n                <img class=\\\"placeholder-image\\\" src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.png\\\"/>\\n            </div>\\n        </div>\\n\\n        <cui-carousel ng-cloak\\n                      class=\\\"mmy-carousel-dt\\\"\\n                      per-page=\\\"1\\\"\\n                      unlimited-scroll=\\\"true\\\"\\n                      enable-nav-circles=\\\"true\\\"\\n                      max-items=\\\"3\\\"\\n                      animation-type=\\\"fade\\\"\\n                      scrollable-card-class=\\\"hero-slider-wrapper\\\">\\n\\n                <div class=\\\"hero-slider-wrapper\\\" cars-standard-link=\\\"view-photo-gallery-hero\\\" cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\">\\n                    <div class=\\\"hero-slider-clearfix\\\">\\n                        <img itemprop=\\\"image\\\" class=\\\"slide nonDraggableImage\\\"\\n                             src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.png\\\"/>\\n                    </div>\\n                </div>\\n\\n        </cui-carousel>\\n\\n            <div class=\\\"mmy-header__gallery\\\">\\n                <div class=\\\"gallery__link\\\" cars-standard-link=\\\"view-photo-gallery-text\\\"\\n                     cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\" cars-photo-lightbox-layout=\\\"list\\\">\\n                    <div class=\\\"gallery__link-icon\\\">\\n                        <cui-icon name=\\\"gallery\\\"></cui-icon>\\n                        <b>1<noscript> photos</noscript></b>\\n                    </div>\\n                    <span>View Gallery</span>\\n                </div>\\n            </div>\\n\\n        <script>if (window.performance && window.performance.mark) {window.performance.mark(\\\"mmyLoadEnd\\\");}</script>\\n        <script>if (window.performance && window.performance.measure) {window.performance.measure(\\\"mmyLoad\\\", \\\"pageLoadStart\\\", \\\"mmyLoadEnd\\\");}</script>\\n\\n    </div>\\n\\n</div>\\n\\n<cars-photo-lightbox name=\\\"mmy-gallery-lightbox\\\"\\n                     tracking-page-name=\\\"New Cars/Research/MMY/multi_photo_popup\\\"\\n                     photo-ads=\\\"[{ position: 3, size: 'cube', slot: '6427/buy.research/ymm.photo.iab' }]\\\"\\n                     images=\\\"[&quot;http://www.cstatic-images.com/stock/900x600/1436821675489.jpg&quot;]\\\"\\n                     videos=\\\"\\\"\\n                     views=\\\"[{&quot;locationInterior&quot;:&quot;http://multimedia.cars.com/evox/interior/10553_sm.swf&quot;,&quot;locationExterior&quot;:&quot;http://multimedia.cars.com/evox/exterior/10553_ex036_640.swf&quot;}]\\\">\\n</cars-photo-lightbox>\\n\\n<section class=\\\"mmy-dashboard\\\" id=\\\"mmyDashboard\\\">\\n\\n    <div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\">\\n        <meta itemprop=\\\"name\\\" content=\\\"Chevrolet Colorado\\\">\\n        <div class=\\\"card container\\\">\\n                    <span class=\\\"mmy-info__msrp\\\" content=\\\"20055-35450\\\" itemprop=\\\"priceSpecification\\\" itemscope itemtype=\\\"http://schema.org/PriceSpecification\\\">\\n                        <b>MSRP Range</b>\\n                        <em itemprop=\\\"priceCurrency\\\" content=\\\"USD\\\">$</em><em itemprop=\\\"price\\\" content=\\\"20055\\\">20,055</em>-<em itemprop=\\\"maxPrice\\\" content=\\\"35450\\\">$35,450</em>\\n                    </span>\\n\\n                <span class=\\\"mmy-info__range\\\"><b>Trims</b>19</span>\\n\\n                <span class=\\\"mmy-info__mpg\\\"><b>Combined MPG</b> 20-23 </span>\\n\\n                <span class=\\\"mmy-info__seating\\\"><b>Seats</b> 2-5 </span>\\n        </div>\\n    </div>\\n</section>\\n\\n<div class=\\\"forSale-container\\\" ng-if=\\\"false\\\" style=\\\"max-width: 1170px; margin: 0 auto; position: relative;\\\">\\n    <div class=\\\"mmy-forSale\\\" style=\\\"padding: 1.6rem; text-align: center;\\\">\\n        <div style=\\\"box-sizing: border-box;\\\">\\n            <a href=\\\"/shopping/chevrolet-colorado-2016/\\\">\\n                <button class=\\\"cui-button\\\" style=\\\"line-height: 1; margin-bottom: 1.6rem; display: block; @media(min-width: 1024px){width: auto; position: absolute; right: 0; margin-top: -220px;}\\\">\\n                    Cars for Sale\\n                </button>\\n            </a>\\n        </div>\\n    </div>\\n</div>\\n\\n\\n<div ng-cloak class=\\\"container forSale-container\\\">\\n    <div class=\\\"mmy-forSale\\\">\\n        <div class=\\\"mmy-forSale__left\\\">\\n            <cars-link-to-search ods-make-id=\\\"20053\\\" ods-model-id=\\\"20856\\\" ods-year-id=\\\"58487\\\" tracking-name=\\\"cars-for-sale\\\" slug=\\\"chevrolet-colorado-2016\\\" expand-search=true></cars-link-to-search>\\n        </div>\\n    </div>\\n</div>\\n\\n<cars-jump-nav></cars-jump-nav>\\n\\n    <div ng-cloak id=\\\"mmy-our-take\\\" class=\\\"mmy-section mmy-overview add-to-jump-nav\\\" data-name=\\\"Our Take\\\">\\n        <cars-ad class=\\\"mmy-ads\\\" slot=\\\"6427/buy.research/ymm.iab.10\\\" size=\\\"research-leader\\\" targeting=\\\"{&quot;make&quot;:&quot;chevrolet&quot;,&quot;model&quot;:&quot;colorado&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;truck_compact&quot;}\\\"></cars-ad>\\n\\n        <h2 class=\\\"overview-title cui-beta at-least-tablet\\\">Our Take on the 2016 Chevrolet Colorado</h2>\\n        <h2 class=\\\"cui-beta only-mb\\\">Our Take</h2>\\n\\n\\n        <div class=\\\"ad-contain--cube\\\">\\n            <cars-ad class=\\\"cube-ad\\\" slot=\\\"6427/buy.research/ymm.iab.20\\\" size=\\\"cube-desktop\\\" targeting=\\\"{&quot;make&quot;:&quot;chevrolet&quot;,&quot;model&quot;:&quot;colorado&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;truck_compact&quot;}\\\"></cars-ad>\\n            <cars-mmy-logo-text-ad slot=\\\"'6427/buy.research/ymm.reg.short'\\\" ad-params=\\\"{&quot;make&quot;:&quot;chevrolet&quot;,&quot;model&quot;:&quot;colorado&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;truck_compact&quot;}\\\"></cars-mmy-logo-text-ad>\\n        </div>\\n\\n        <div>\\n            <p class=\\\"article-byline__author\\\">By <strong>Cars.com Editors</strong></p>\\n\\n            <p class=\\\"mmy-overview__desc\\\">  With the Chevrolet Colorado, which was new last year, GM is hoping to appeal to more pickup buyers by offering a smaller and more affordable truck that fits in a garage and can navigate narrow str... <a href=\\\"../chevrolet-colorado-2016/whats-new/\\\" cars-common-omniture-standard=\\\"read-full-report\\\">Read Full Report</a> </p>\\n        </div>\\n\\n        <div class=\\\"mmy-overview__lists\\\">\\n            <div class=\\\"mmy-overview__like\\\">\\n                <cui-icon name=\\\"thumbs-up\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta\\\">What We Like</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>Strong, balanced power (gas V-6 and diesel)</li>\\n                    <li>Front-seat headroom</li>\\n                    <li>Crew cab has adult-friendly backseat</li>\\n                    <li>Connectivity and multimedia options</li>\\n                    <li>Appealing base price</li>\\n                    <li>Towing capability (diesel)</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"mmy-overview__dontlike\\\">\\n                <cui-icon name=\\\"thumbs-up\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta\\\">What We Don't Like</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>Sluggish acceleration (gas four-cylinder)</li>\\n                    <li>Choppy two-wheel-drive ride</li>\\n                    <li>Rough, long-throw manual transmission</li>\\n                    <li>No automatic four-wheel-drive option</li>\\n                    <li>Some cheap cabin materials</li>\\n                    <li>Mediocre fuel economy (gas engines)</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"mmy-overview__features\\\">\\n                <cui-icon name=\\\"features\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta features-header\\\">Notable Features</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>Turbo-diesel 2.8-liter four-cylinder (late availability)</li>\\n                    <li>MyLink multimedia system with Apple CarPlay integration available</li>\\n                    <li>Four-door crew- and extended-cab models</li>\\n                    <li>Two cargo box lengths</li>\\n                    <li>Forward collision alert, lane departure warning available</li>\\n                </ul>\\n            </div>\\n        </div>\\n    </div>\\n<div ng-cloak id=\\\"mmy-reviews\\\"class=\\\"mmy-section mmy-reviews add-to-jump-nav\\\" data-name=\\\"Reviews\\\">\\n    <h2 class=\\\"cui-beta\\\">Reviews</h2>\\n    <div class=\\\"mmy-reviews__container\\\">\\n        <div itemprop=\\\"review\\\" itemscope itemtype=\\\"http://schema.org/Review\\\" class=\\\"mmy-reviews__ours\\\">\\n        <h3 class=\\\"cui-delta\\\">Our Expert Reviews</h3>\\n        <div class=\\\"mmy-reviews__attrib\\\">\\n            <meta itemprop=\\\"datePublished\\\" content=\\\"20151210\\\">\\n                <div class=\\\"mmy-reviews__expert\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/stock/64x64/3/img1177874057-1461768788503.jpg\\\" class=\\\"image-expert\\\">\\n                </div>\\n                <div itemprop=\\\"author\\\" itemscope itemtype=\\\"http://schema.org/Person\\\" class=\\\"article-byline\\\">\\n                    <p class=\\\"article-byline__author\\\">By <strong><span itemprop=\\\"name\\\">Aaron Bragman</span></strong></p>\\n                    <p class=\\\"article-byline__date\\\"></p>\\n                </div>\\n            <div class=\\\"clearfix\\\"></div>\\n        </div>\\n        <div itemprop=\\\"reviewBody\\\" class=\\\"mmy-reviews__blurb\\\">\\n            <p>With the addition of the powerful, efficient, beautifully integrated Duramax diesel powertrain, the 2016 Chevrolet Colorado becomes quite possibly the world&apos;s perfect pickup truck.The 2015 Chevrolet Colorado won our Best Pickup of 2015 award, and deservedly so &mdash; it&apos;s a fantastic combination of big-truck ability, useful interior technology and decent fuel economy all wrapped up i...<a href=\\\"/reviews/our-view-2016-chevrolet-colorado-1420689358245/\\\" cars-common-omniture-standard=\\\"read-full-expert-review\\\"> Read Full Review</a></p></div>\\n        <a href=\\\"/research/chevrolet-colorado-2016/expert-reviews/\\\" class=\\\"button secondary\\\">Read All Expert Reviews</a>\\n\\n        <span itemprop=\\\"publisher\\\" itemscope itemtype=\\\"http://schema.org/Organization\\\">\\n         <meta itemprop=\\\"name\\\" content=\\\"Cars.com\\\">\\n       </span>\\n    </div>\\n\\n        <div class=\\\"mmy-reviews__consumer\\\">\\n    \\t<h3 class=\\\"cui-delta\\\">Consumer Reviews</h3>\\n        <div class=\\\"mmy-reviews__average\\\">\\n            <cars-star-rating class=\\\"large\\\" rating=\\\"4.5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n            <p><b>4.5<i> out of </i>5<noscript> stars</noscript></b></p>\\n            <p>Based on 17 reviews</p>\\n        </div>\\n        <div class=\\\"mmy-reviews__stars\\\">\\n            <noscript>5 out of 5 stars</noscript>\\n            <cars-star-rating rating=\\\"5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n        </div>\\n\\n        <h4 class=\\\"cui-zeta\\\">Best midsize truck available</h4>\\n        <div class=\\\"mmy-reviews__meta\\\">by <span >PeteM143 </span> from Mays Landing, NJ\\n            <span class=\\\"mmy-reviews__date\\\">on September 4, 2016</span>\\n        </div>\\n        <div class=\\\"mmy-reviews__blurb\\\">\\n            <p>I just took delivery of my Colorado LT, 2.5 2wd, extended cab. I bought it out of state and drove it home across 6 states over 2 days. The trip allowed me to get familiar with the truck quickly and fr...\\n                    <a href=\\\"/research/chevrolet-colorado-2016/consumer-reviews/#72881779\\\" cars-common-omniture-standard=\\\"read-full-consumer-review\\\">\\n                        Read Full Review\\n                    </a>\\n            </p>\\n        </div>\\n\\n            <div>\\n                <a href=\\\"/research/chevrolet-colorado-2016/consumer-reviews/\\\" class=\\\"button secondary\\\">Read All Consumer Reviews</a>\\n            </div>\\n    </div>\\n\\n<!---->\\n\\n    </div>\\n</div>\\n\\n<div id=\\\"mmy-trims\\\" class=\\\"mmy-section mmy-trims add-to-jump-nav\\\" data-name=\\\"Trims\\\">\\n    <h2 class=\\\"cui-beta\\\">19 Trims Available</h2>\\n\\n    <noscript>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Base\\n                            <span class=\\\"trim_listing__description\\\">4x2 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>20055</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>22 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed manual w/OD</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>22925</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed manual w/OD</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>25480</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT351B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>26470</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>23 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>27000</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>27695</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>28410</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT352C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x2 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>29005</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>23 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>29930</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT351B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>30180</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>22 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>30515</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">WT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>30815</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>30925</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x2 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>32160</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>26 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x2</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT352C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x4 Extended Cab 6 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>32590</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>22 MPG Combined</span>\\n                        <span>200-hp, 2.5-liter I-4 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>33045</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">LT\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>33345</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 5 ft. box 128.3 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>35150</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n                <div class=\\\"trim_listing__image\\\">\\n                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg\\\">\\n                </div>\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Z71\\n                            <span class=\\\"trim_listing__description\\\">4x4 Crew Cab 6 ft. box 140.5 in. WB</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>35450</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>24 MPG Combined</span>\\n                        <span>305-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>4x4</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </noscript>\\n\\n    <cars-mmy-trim-compare trim-results=\\\"{&quot;aCode&quot;:&quot;USC60CHT351A0&quot;,&quot;aCodeTrim&quot;:&quot;Base&quot;,&quot;trimSummaryCount&quot;:19,&quot;modelInfo&quot;:{&quot;make&quot;:&quot;Chevrolet&quot;,&quot;model&quot;:&quot;Colorado&quot;,&quot;year&quot;:&quot;2016&quot;,&quot;minMsrp&quot;:20055,&quot;maxMsrp&quot;:35450,&quot;seats&quot;:&quot;2-5&quot;,&quot;defaultPhoto&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT355A021001&quot;,&quot;defaultPhotoDesc&quot;:&quot;2016 Chevrolet Colorado 4x2 Crew Cab 6&#x27; box 140.5\\\\&quot; WB&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;bodyStyle&quot;:&quot;Regular Side&quot;},&quot;bestBet&quot;:false,&quot;fuelEconomy&quot;:{&quot;cityMin&quot;:17,&quot;cityMax&quot;:20,&quot;hwyMin&quot;:24,&quot;hwyMax&quot;:27,&quot;combinedMin&quot;:20,&quot;combinedMax&quot;:23},&quot;defaultImage&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.png&quot;,&quot;trimSummary&quot;:[{&quot;aCode&quot;:&quot;USC60CHT351A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Base&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:19,&quot;hwyMpg&quot;:26,&quot;combinedMpg&quot;:22,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:20055,&quot;invoice&quot;:19954.73,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;2&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:20995,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed manual w/OD&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed manual w/OD&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT351B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:22925,&quot;invoice&quot;:22008,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;2-4&quot;,&quot;transmissionsCount&quot;:2,&quot;smartTargetPrice&quot;:22948,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;6-speed manual w/OD&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed manual w/OD&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;]},{&quot;aCode&quot;:&quot;USC60CHT353A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:25480,&quot;invoice&quot;:24206,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:25146,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT351C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:27,&quot;combinedMpg&quot;:23,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT351B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT351B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:26470,&quot;invoice&quot;:25146.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;4&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:26086.5,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT355A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:27000,&quot;invoice&quot;:25650,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:26590,&quot;engine&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT352A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT351B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:27695,&quot;invoice&quot;:26587.2,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;2-4&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:27527.2,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT353B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:28410,&quot;invoice&quot;:26989.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:3,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:27929.5,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT351D0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:27,&quot;combinedMpg&quot;:23,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT352C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT352C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:29005,&quot;invoice&quot;:27554.75,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;4&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:28494.75,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT355B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:29930,&quot;invoice&quot;:28433.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:29373.5,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT352B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:19,&quot;hwyMpg&quot;:25,&quot;combinedMpg&quot;:22,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT351B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT351B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:30180,&quot;invoice&quot;:28671,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;4&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:29611,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT354A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:30515,&quot;invoice&quot;:28989.25,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:29929.25,&quot;engine&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT356A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;WT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT355A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:30815,&quot;invoice&quot;:29274.25,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:30214.25,&quot;engine&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT353C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:30925,&quot;invoice&quot;:29378.75,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:3,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:30318.75,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT355C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x2 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:22,&quot;hwyMpg&quot;:31,&quot;combinedMpg&quot;:26,&quot;driveTrain&quot;:&quot;4x2&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:32160,&quot;invoice&quot;:30552,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:31492,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT352C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Extended Cab 6 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:4,&quot;cityMpg&quot;:19,&quot;hwyMpg&quot;:25,&quot;combinedMpg&quot;:22,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT352C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT352C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:32590,&quot;invoice&quot;:30960.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;4&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:31900.5,&quot;engine&quot;:[&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;200-hp, 2.5-liter I-4 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT354B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:33045,&quot;invoice&quot;:31392.75,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:32332.75,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT356B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;LT&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC50CHT356B021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:33345,&quot;invoice&quot;:31677.75,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:32617.75,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT354C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 5 ft. box 128.3 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:35150,&quot;invoice&quot;:33392.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:34332.5,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60CHT356C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Z71&quot;,&quot;trimExtendedDesc&quot;:&quot;4x4 Crew Cab 6 ft. box 140.5 in. WB&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:20,&quot;hwyMpg&quot;:29,&quot;combinedMpg&quot;:24,&quot;driveTrain&quot;:&quot;4x4&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60CHT353C021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:35450,&quot;invoice&quot;:33677.5,&quot;destinationCharge&quot;:940,&quot;enginesCount&quot;:2,&quot;seats&quot;:&quot;5&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:34617.5,&quot;engine&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;,&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;305-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[&quot;181-hp, 2.8-liter I-4 (diesel)&quot;],&quot;optionalTransmissions&quot;:[]}],&quot;mmySlug&quot;:&quot;chevrolet-colorado-2016&quot;}\\\"></cars-mmy-trim-compare>\\n\\n    <div class=\\\"info--notify\\\">\\n        <cui-icon name=\\\"icon-lightbulb\\\"></cui-icon>\\n        <p>A trim is a style of a vehicle model. Each higher trim has different or upgraded features from the previous trim along with a price increase. <a href=\\\"\\\" cars-modal-launch=\\\"learnMoreTrimsModal\\\" class=\\\"info__link ng-binding\\\">Learn more about trims</a></p>\\n    </div>\\n\\n    <cars-modal-beta ng-cloak name=\\\"learnMoreTrimsModal\\\" width-class=\\\"medium\\\" class=\\\"mmy-warranty-modal\\\">\\u2028\\n        <div class=\\\"dialog__content\\\">\\n            <div class=\\\"dialog__content-body\\\">\\n                <h2 class=\\\"cui-beta\\\">Trims Explained</h2>\\n                <p>When talking about cars, “trims” is a way of differentiating between different versions of the same model. Typically, most start with a no-frills, or “base” trim, and as features are added, or a different engine, drivetrain (gas vs. hybrid, for example) or transmission are included, trim names change and prices go up. It’s important to carefully check the trims of the car you’re interested in to make sure that you’re getting the features you want, or that you’re not overpaying for features you don’t want.</p>\\n            </div>\\n        </div>\\n    </cars-modal-beta>\\n\\n</div>\\n\\n\\n<div id=\\\"mmy-safety\\\" class=\\\"safety-module mmy-safety mmy-section add-to-jump-nav\\\" data-name=\\\"Safety\\\">\\n    <h2 class=\\\"cui-beta\\\">Safety</h2>\\n\\n    <div class=\\\"mmy-safety__ratings\\\">\\n        <h3 class=\\\"cui-delta subtitle\\\">Crash-Test Reports</h3>\\n\\n        \\n\\n        <div class=\\\"mmy-safety__rating nhtsa-module col-12\\\">\\n  <h4 class=\\\"cui-epsilon\\\">NHTSA Ratings</h4>\\n    <p class=\\\"mmy-safety__desc\\\">Based on Chevrolet Colorado Base</p>\\n    <dl class=\\\"mmy-safety__ratingslist\\\">\\n            <dt>Overall</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>4 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Front</dt>\\n            <dd><cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>4 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Side</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>5 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Rollover Rating</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"3\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>3 out of 5 stars</span></noscript>\\n            </dd>\\n    </dl>\\n\\n   <button class=\\\"cui-button--secondary js-nhtsa\\\" type=\\\"button\\\" cars-custom-link=\\\"view-NHTSA-rating-breakdown\\\" cars-modal-launch=\\\"safety-nhtsa-modal\\\">View NHTSA Rating Breakdown</button>\\n\\n    <cars-modal-beta ng-cloak name=\\\"safety-nhtsa-modal\\\" width-class=\\\"medium\\\" class=\\\"mmy-warranty-modal\\\">\\u2028\\n    <div class=\\\"mmy-nhtsa-modal\\\">\\n     \\n      <div class=\\\"dialog__content\\\">\\n        <div class=\\\"dialog__content-body\\\">\\n          <h2 class=\\\"cui-beta\\\">NHTSA Ratings</h2>\\n          <p class=\\\"mmy-safety__modaldesc\\\">Based on Chevrolet Colorado Base</p>\\n          <div class=\\\"mmy-safety__ratingslist\\\">\\n              <dl class=\\\"mmy-safety__ratingslist\\\">\\n                      <dt>Overall</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>4 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt>Overall Front</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>4 out of 5 stars</span></noscript>\\n                      </dd>\\n\\n                      <dt>Overall Side</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt>Overall Rollover Rating</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"3\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>3 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Driver&#x27;s </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Passenger&#x27;s </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>4 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier Rating Driver </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier Rating Passenger Rear Seat </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole Barrier combined (Front) </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole Barrier combined (Rear) </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n              </dl>\\n          </div>\\n          <div class=\\\"disclaimer\\\">\\n            <small>National Highway Traffic Safety Administration (NHTSA) is part of the U.S. Department of Transportation. NHTSA provides vehicle safety information such as front- and side-crash ratings and rollover ratings. Vehicles are rated using a star rating system from 1-5 stars, with 5 being the highest.</small>\\n          </div>\\n        </div> \\n      </div>\\n     </div> \\n    </cars-modal-beta>\\n</div>\\n\\n    </div>\\n    <div class=\\\"clearfix\\\"></div>\\n    <div class=\\\"mmy-safety__recalls\\\">\\n        <div class=\\\"recalls\\\">\\n    <h3 class=\\\"cui-delta\\\">Recalls</h3>\\n    <div class=\\\"mmy-safety__recalls\\\">\\n\\n\\n                <p class=\\\"mmy-safety__recallscount\\\">\\n                    There are currently <a cars-standard-link=\\\"recalls-total\\\" href=\\\"/recalls/chevrolet-colorado-2016/\\\"><b>2</b> recalls</a> for this car.\\n                </p>\\n\\n\\n            <div class=\\\"mmy-safety__learn\\\">\\n                <cui-icon name=\\\"icon-lightbulb\\\"></cui-icon>\\n                <p>Safety defects and recalls are relatively common. Stay informed and know what to do ahead of time.</p>\\n                <p><a cars-standard-link=\\\"recalls-explained\\\" href=\\\"/recalls/\\\">Safety defects and recalls explained</a></p>\\n            </div>\\n    </div>\\n    <div class=\\\"clearfix\\\"></div>\\n\\n</div>\\n\\n    </div>\\n\\n    <div class=\\\"clearfix\\\"></div>\\n</div>\\n\\n\\n<section ng-cloak class=\\\"mmy-section mmy-similar\\\" id=\\\"mmySimilar\\\">\\n    <h2 class=\\\"cui-beta\\\">Similar Models</h2>\\n    <div class=\\\"slider\\\">\\n        <cars-select-container max-selections=\\\"3\\\" cars-modal-listener=\\\"{ 'similarCompareMax': 'cars:selection:max-selected' }\\\">\\n            <cui-carousel ng-class=\\\"{'mmy-carousel-dt': desktopClass, 'tablet': tabletClass}\\\"\\n                          per-page=\\\"4\\\"\\n                          per-page-tablet=\\\"3\\\"\\n                          right-scroll-omniture-name=\\\"collab-right-scroll\\\"\\n                          left-scroll-omniture-name=\\\"collab-left-scroll\\\"\\n                          animation-type=\\\"none\\\"\\n                          unlimited-scroll=\\\"false\\\"\\n                          scrollable-card-class=\\\"mmy-similar__vehicle\\\">\\n\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('nissan-frontier-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('nissan-frontier-2016', 'nissan-frontier-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/nissan-frontier-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60NIT124C121001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Nissan Frontier</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">9 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $18,290 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n\\n                <cars-mmy-compare-spotlight-ad class=\\\"no-ad-data\\\"\\n                                               slot=\\\"6427/buy.research/ymm.spons.vehicle\\\"\\n                                               ad-params='{\\\"canonicMakeName\\\": \\\"chevrolet\\\", \\\"canonicModelName\\\": \\\"colorado\\\", \\\"year\\\": \\\"2016\\\", \\\"adCategoryInfo\\\": \\\"truck_compact\\\"}'\\n                                               is-selected=\\\"ctrl.isSelected('AD')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('AD', $slug)\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                </cars-mmy-compare-spotlight-ad>\\n\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('toyota-tacoma-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('toyota-tacoma-2016', 'toyota-tacoma-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/toyota-tacoma-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60TOT096D021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Toyota Tacoma</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.3\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">30 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $23,660 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('gmc-canyon-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('gmc-canyon-2016', 'gmc-canyon-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/gmc-canyon-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMT223B021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 GMC Canyon</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.3\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">9 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $20,940 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n            </cui-carousel>\\n            <div ng-show=\\\"anySelected\\\">\\n                <div class=\\\"compare-button-trim center_align\\\">\\n                    <button ng-click=\\\"cancel()\\\" class=\\\"cui-button--secondary\\\">Cancel</button>\\n                    <a ng-href=\\\"../compare/?vehicles={{selectedValues.join(',')}}\\\" class=\\\"cui-button\\\">Compare Now</a>\\n                </div>\\n            </div>\\n\\n            <cars-modal-beta name=\\\"similarCompareMax\\\" close-on-back-button=\\\"true\\\" is-small=\\\"true\\\" ng-cloak>\\n\\n\\n                <h2 class=\\\"cui-beta\\\">You have selected maximum of 3 cars</h2>\\n                <p>Remove one of these cars to add others or compare the below cars now.</p>\\n                <div class=\\\"button-sticky\\\">\\n                    <a ng-href=\\\"../compare/?vehicles={{selectedValues.join(',')}}\\\" class=\\\"cui-button\\\">Compare Now</a>\\n                </div>\\n            </cars-modal-beta>\\n\\n        </cars-select-container>\\n\\n    </div>\\n</section>\\n\\n\\t<div class=\\\"mmy-section mmy-other-years at-least-desktop\\\">\\n\\t\\t<h2 class=\\\"cui-beta\\\">Other Years</h2>\\n\\t\\t<ul class=\\\"mmy-other-years__list\\\" style=\\\"overflow:hidden;\\\">\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2016/\\\"> 2016 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2015/\\\"> 2015 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2012/\\\"> 2012 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2011/\\\"> 2011 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2010/\\\"> 2010 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2009/\\\"> 2009 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2008/\\\"> 2008 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2007/\\\"> 2007 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2006/\\\"> 2006 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2005/\\\"> 2005 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a cars-standard-link=\\\"other-years\\\" href=\\\"/research/chevrolet-colorado-2004/\\\"> 2004 Chevrolet Colorado </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t</ul>\\n\\t</div>\\n\\n\\n            \\n\\n        </div>\\n    </div>\\n\\n    <div class=\\\"footer\\\" ng-controller=\\\"globalFooter\\\">\\n    <div class=\\\"container col-group\\\">\\n        <div class=\\\"col-mb-12 col-4 col-dt-4\\\">\\n            <h5 class=\\\"mob-comp\\\" ng-click=\\\"toggle('company')\\\">Our Company\\n                <a ng-show=\\\"!expanded && isMob\\\"> <cui-icon name=\\\"chevron\\\"> </a>\\n                <a ng-show=\\\"expanded && isMob\\\"> <cui-icon class=\\\"reverse-chevron\\\" name=\\\"chevron\\\"></a>\\n            </h5>\\n            <h5 class=\\\"desk-comp\\\">Our Company</h5>\\n            <ul ng-show=\\\"expanded\\\" class=\\\"toggle-footer\\\">\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/about/\\\" target=\\\"About Cars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">About Cars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/contact/\\\" target=\\\"Contact Cars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Contact Cars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/sitemap/\\\" target=\\\"Site Map\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Site Map</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/careers/\\\" target=\\\"Careers\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Careers</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/sell/fraud/overview\\\" target=\\\"Fraud Awareness Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Fraud Awareness</a>\\n                </li>\\n        </div>\\n        <div class=\\\"col-mb-12 col-4 col-dt-4\\\">\\n            <h5 class=\\\"mob-comp\\\"  ng-click=\\\"toggle()\\\" >Our Partners\\n                <a ng-show=\\\"!partnerExpanded && isMob\\\"> <cui-icon name=\\\"chevron\\\"> </a>\\n                <a ng-show=\\\"partnerExpanded && isMob\\\"> <cui-icon class=\\\"reverse-chevron\\\" name=\\\"chevron\\\"></a>\\n            </h5>\\n            <h5 class=\\\"desk-comp\\\">Our Partners</h5>\\n            <ul ng-show=\\\"partnerExpanded\\\" class=\\\"toggle-footer partner\\\">\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.auto.com/\\\" target=\\\"Auto.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Auto.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.newcars.com/\\\" target=\\\"NewCars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">NewCars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.repairpal.com/\\\" target=\\\"RepairPal.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">RepairPal.com</a>\\n                </li>\\n                <li><cars-cobrand-footer></cars-cobrand-footer></li>\\n        </div>\\n        <div class=\\\"col-mb-12 col-4 col-dt-4 social-media\\\">\\n            <div class=\\\"social-buttons white\\\">\\n                <a href=\\\"https://twitter.com/carsdotcom/\\\" target=\\\"twitter\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"twitter\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"http://www.facebook.com/CarsDotCom/\\\" target=\\\"facebook\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"facebook\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"http://www.youtube.com/user/Carscom/\\\" target=\\\"youtube\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"youtube\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"https://plus.google.com/+CarsDotCom/posts/\\\" target=\\\"google\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"googleplus\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"https://www.linkedin.com/company/cars-com\\\" target=\\\"linkedin\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"linkedin\\\"></cui-icon>\\n                </a>\\n            </div>\\n\\n            <div id=\\\"footer-search-fields\\\">\\n                <form id=\\\"googlemini-foot\\\" action=\\\"/about/searchresults/\\\" method=\\\"get\\\" target=\\\"_top\\\">\\n                    <input type=\\\"text\\\" class=\\\"search-field\\\" id=\\\"textEntry\\\" name=\\\"q\\\" placeholder=\\\"Enter Make or Model\\\"\\n                           value=\\\"\\\" rel=\\\"Search Cars.com\\\">\\n                </form>\\n            </div>\\n            <div id=\\\"logo\\\">\\n                <span>Powered By</span>\\n                <cui-icon name=\\\"google\\\"></cui-icon>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"copyrights\\\">\\n        <div class=\\\"container col-group prev\\\">\\n            <div class=\\\"col-mb-11 col-7 col-dt-8\\\">\\n                <a href=\\\"/about/terms\\\" target=\\\"Terms Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Terms of Service</a>\\n                <a href=\\\"/about/privacy\\\" target=\\\"Privacy Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Privacy Statement</a>\\n                <a href=\\\"/about/ad-choices\\\" target=\\\"Ad Choices Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Ad Choices</a>\\n                <a href=\\\"https://secure.opinionlab.com/ccc01/o.asp?id&#x3D;VuvIfpRR\\\" target=\\\"OpinionLab\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">[+] Feedback</a>\\n            </div>\\n            <div class=\\\"col-mb-12 col-12 col-dt-4 footer-text\\\" id=\\\"footer-copyright\\\">&copy; 2015 Cars.com All rights\\n                reserved.\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div id=\\\"cars-omniture-tracking-pixel\\\"></div>\\n<script type=\\\"text/javascript\\\" data-font-load>\\n    // Load Fonts Asyncronously\\n    var ua = window.navigator.userAgent;\\n    if (typeof window.FontFace === 'function') {\\n        var link1 = '<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-sourcesanspro-woff2.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        var link2 =\\t'<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-effra-woff2.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        document.write(link1);\\n        document.write(link2);\\n    } else if (ua && ua.indexOf( \\\"Android 4.\\\" ) > -1 && ua.indexOf( \\\"like Gecko\\\" ) > -1 && ua.indexOf( \\\"Chrome\\\" ) === -1 ) {\\n        var link1 = '<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-sourcesanspro-ttf.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        var link2 =\\t'<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-effra-ttf.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        document.write(link1);\\n        document.write(link2);\\n    } else {\\n        var link1 = '<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-sourcesanspro-woff.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        var link2 =\\t'<link href=\\\"/static/www/fd0021bad117/app/fonts/css/data-effra-woff.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />';\\n        document.write(link1);\\n        document.write(link2);\\n    }\\n</script>\\n\\n\\n<script type=\\\"text/javascript\\\" src=\\\"/static/www/fd0021bad117/vendor/js/qualtrics.js\\\"></script>\\n<script src=\\\"/static/www/fd0021bad117/vendor/js/clicktale.js\\\"></script>\\n<script src=\\\"/static/www/fd0021bad117/vendor/js/s_code.js\\\"></script>\\n<script>\\n\\n\\n    (function () {\\n\\n        var path, lastSegment, o, k, props, eVars, events, prop37, eVar37, breakpoint, orientation, width, height, previousBreakpoint, previousOrientation, affiliate;\\n\\n        var makeName = \\\"Chevrolet\\\";\\n        var modelName = \\\"Colorado\\\";\\n        var year = \\\"2016\\\";\\n        var owcsPageName = \\\"New Cars/Research/MMY\\\";\\n        var channel = \\\"\\\";\\n        var latitude;\\n        var longitude;\\n\\n        var SESSION_STORAGE_KEY_LAT = 'carsClientGeoLocationLatitude';\\n        var SESSION_STORAGE_KEY_LON = 'carsClientGeoLocationLongitude';\\n\\n        function _readCookie(cookieName) {\\n            var values = window.document.cookie.match('(^|;)\\\\\\\\s*' + cookieName + '\\\\\\\\s*=\\\\\\\\s*([^;]+)');\\n            return values ? values.pop() : null;\\n        }\\n\\n        affiliate = _readCookie('affiliate') || 'national';\\n        s_clven.server = '';\\n        props = CARSBRIDGE.getOmnitureBridgeValue('props');\\n        eVars = CARSBRIDGE.getOmnitureBridgeValue('evars');\\n        props.prop6 = props.prop18 = affiliate;\\n        path = window.location.pathname;\\n        lastSegment = ((/([^\\\\/]+)\\\\/$/.exec(path) || [])[1] || '').slice(0, 100);\\n        // default pageName & channel for entry point tracking\\n        // article details pages\\n        if (/^\\\\/articles\\\\/.+/.test(path)) {\\n            s_clven.channel = 'news';\\n            s_clven.pageName = s_clven.channel + '/article';\\n            previousCategory = (/\\\\/news\\\\/([^\\\\/]+)\\\\/$/.exec(document.referrer) || [])[1] || '';\\n            props.prop69 = 'article:' + previousCategory + '::' + lastSegment;\\n            // category index pages\\n        } else if (/\\\\/news\\\\/[^\\\\/]+\\\\/$/.test(path)) {\\n            s_clven.channel = 'news';\\n            s_clven.pageName = s_clven.channel + '/category';\\n            props.prop69 = 'category:' + lastSegment;\\n            // news landing page\\n        } else if (/^\\\\/news\\\\/$/.test(path)) {\\n            s_clven.channel = 'news';\\n            s_clven.pageName = s_clven.channel + '/index';\\n            props.prop69 = 'index';\\n        } else if(owcsPageName){\\n            s_clven.pageName = owcsPageName;\\n            s_clven.channel = channel;\\n        }\\n\\n        if(makeName) {\\n            s_clven.prop12 = s_clven.eVar12 = makeName;\\n        }\\n\\n        if(modelName) {\\n            s_clven.prop13 = s_clven.eVar13 = modelName;\\n        }\\n\\n        if(year) {\\n            s_clven.prop14 = s_clven.eVar14 = year;\\n        }\\n\\n        // This is a hack for passing data out of components and into tracking.\\n        // We will think about how to implement this more generically.\\n        if(window.dealerTrackingData) {\\n            s_clven.prop64 = window.dealerTrackingData;\\n        }\\n\\n        //pcid/pdid tracking\\n        var cV;\\n        var cvObj;\\n        try {\\n            cV = JSON.parse(localStorage.getItem('Cars.userData')).carsVisitor;\\n        } catch (e) {}\\n        try {\\n            cvObj = (!cV || (cV == 'null')) ? {pcid: null, pdid: undefined} : JSON.parse(cV);\\n            s_clven.eVar24 = cvObj.pdid;\\n            s_clven.prop57 = cvObj.pcid;\\n        } catch (e) {}\\n\\n        // responsive tracking\\n        width = Math.max(window.document.documentElement.clientWidth, window.innerWidth || 0);\\n        height = Math.max(window.document.documentElement.clientHeight, window.innerHeight || 0);\\n        orientation = (width > height) ? 'landscape' : 'portrait';\\n        if (width <= 767) {\\n            breakpoint = 'mobile';\\n        } else if (width <= 976) {\\n            breakpoint = 'tablet';\\n        } else if (width <= 1170) {\\n            breakpoint = 'desktop';\\n        } else if (width > 1170) {\\n            breakpoint = 'large-desktop';\\n        }\\n        if ((typeof props.prop37 === 'string') && (props.prop37.indexOf('|') >= 0)) {\\n            prop37 = props.prop37.split('|');\\n            prop37[0] = breakpoint + ':' + orientation + ':' + width;\\n            previousBreakpoint = prop37[1].split(':')[0];\\n            previousOrientation = prop37[1].split(':')[1];\\n            if (previousBreakpoint && breakpoint != previousBreakpoint) {\\n                s_clven.events = (s_clven.events) ? s_clven.events + ',event62' : 'event62';\\n            }\\n            if (previousOrientation && orientation != previousOrientation) {\\n                s_clven.events = (s_clven.events) ? s_clven.events + ',event61' : 'event61'\\n            }\\n            props.prop37 = prop37.join('|');\\n        } else {\\n            props.prop37 = breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width;\\n        }\\n        if ((typeof eVars.eVar37 === 'string') && (eVars.eVar37.indexOf('|') >= 0)) {\\n            eVar37 = eVars.eVar37.split('|');\\n            eVar37[0] = breakpoint + ':' + orientation + ':' + width;\\n            eVars.eVar37 = eVar37.join('|');\\n        } else {\\n            eVars.eVar37 = breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width;\\n        }\\n        // overwrite props coming in explicitly from omniture strategy\\n        // overwrite eVars coming in explicitly from omniture strategy\\n        // overwrite events coming in explicitly from omniture strategy\\n        CARSBRIDGE.setOmnitureBridgeValue('props', props);\\n        CARSBRIDGE.setOmnitureBridgeValue('evars', eVars);\\n        // overrides for page-over-page prop, evar, event & listvar tracking\\n        if (CARSBRIDGE.getOmnitureBridgeValue('props')) {\\n            o = CARSBRIDGE.getOmnitureBridgeValue('props');\\n            for (k in o) {\\n                s_clven[k] = o[k];\\n            }\\n        }\\n        if (CARSBRIDGE.getOmnitureBridgeValue('evars')) {\\n            o = CARSBRIDGE.getOmnitureBridgeValue('evars');\\n            for (k in o) {\\n                s_clven[k] = o[k];\\n            }\\n        }\\n        if (CARSBRIDGE.getOmnitureBridgeValue('events')) {\\n            o = CARSBRIDGE.getOmnitureBridgeValue('events');\\n            // events is a comma-delimited string, so be careful about additions\\n            if (s_clven.events) {\\n                s_clven.events = s_clven.events + \\\",\\\" + o;\\n            } else {\\n                s_clven.events = o;\\n            }\\n        }\\n        if (CARSBRIDGE.getOmnitureBridgeValue('listvars')) {\\n            o = CARSBRIDGE.getOmnitureBridgeValue('listvars');\\n            for (k in o) {\\n                s_clven['list' + k] = o[k];\\n            }\\n        }\\n        // prevent them from firing on more than one page\\n        CARSBRIDGE.flushOmnitureBridgeValues();\\n        // setup responsive tracking for next page\\n        CARSBRIDGE.setOmnitureBridgeValue('props', {prop37: breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width});\\n        CARSBRIDGE.setOmnitureBridgeValue('evars', {eVar37: breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width});\\n\\n        // Optimizely SiteCatalyst Integration\\n        window.optimizely = window.optimizely || [];\\n        window.optimizely.push(['activateSiteCatalyst', {\\\"sVariable\\\": s_clven}]);\\n\\n        // Local storage always needs to be wrapped in a try/catch because\\n        // some browsers will have the session storage object, but not allow you to write to it.\\n        // eg: iPhone in private browsing mode...\\n        try {\\n            //pass logged in status to eVar57\\n            var browserUserObj = JSON.parse(localStorage.getItem('cars.userSummary')) || {};\\n            if ((browserUserObj.email || browserUserObj.firstName) && (browserUserObj.accessType === 'SIY')) {\\n                s_clven.eVar57 = 'Logged In - Email';\\n            } else if (browserUserObj.firstName && browserUserObj.accessType === 'FB') {\\n                s_clven.eVar57 = \\\"Logged In - Facebook\\\";\\n            } else {\\n                s_clven.eVar57 = null;\\n            }\\n\\n        } catch(e) {}\\n\\n        // Session storage always needs to be wrapped in a try/catch because\\n        // some browsers will have the session storage object, but not allow you to write to it.\\n        // eg: iPhone in private browsing mode...\\n        try {\\n            latitude = sessionStorage.getItem(SESSION_STORAGE_KEY_LAT);\\n            longitude = sessionStorage.getItem(SESSION_STORAGE_KEY_LON);\\n        } catch(e) { }\\n\\n        function fireOmniture(lat, lon){\\n            var s_code;\\n\\n            if (owcsPageName === 'loading') {\\n                // Suppress page load event when the page name is loading.\\n                return;\\n            }\\n\\n            if(lat && lon) {\\n                s_clven.eVar21 = lat + \\\"/\\\" + lon;\\n            }\\n\\n            s_code = s_clven.t();\\n            if (s_code) {\\n                document.write(s_code);\\n\\n            }\\n            document.close();\\n        }\\n\\n        function onPositionAcquired(position) {\\n            var lat = position.coords.latitude;\\n            var lon = position.coords.longitude;\\n            // Session storage always needs to be wrapped in a try/catch because\\n            // some browsers will have the session storage object, but not allow you to write to it.\\n            // eg: iPhone in private browsing mode...\\n            try {\\n                sessionStorage.setItem(SESSION_STORAGE_KEY_LAT, lat);\\n                sessionStorage.setItem(SESSION_STORAGE_KEY_LON, lon);\\n            } catch(e){ }\\n\\n            fireOmniture(lat, lon);\\n        }\\n\\n        function onPositionFailed() {\\n            fireOmniture();\\n        }\\n\\n        if (breakpoint === \\\"mobile\\\") {\\n\\n            if(latitude && longitude){\\n                fireOmniture(latitude, longitude);\\n            } else if(navigator.geolocation){\\n                navigator.geolocation.getCurrentPosition(onPositionAcquired, onPositionFailed, {timeout:8000,enableHighAccuracy:false});\\n            }\\n\\n        } else {\\n            fireOmniture();\\n        }\\n\\n\\n\\n    }());\\n</script>\\n\\n<script>\\n    ignition.load();\\n</script>\\n\\n\\n\\n\\n<!--not sure we need this anymore, doesnt appear to do anything-->\\n<div id='ZN_e5sZQpBKez95p8V'><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>\\n<noscript>\\n    <a target=\\\"_blank\\\" href=\\\"//www.qualtrics.com/crm-integration\\\">\\n        CRM Integration\\n    </a>\\n    <br/>\\n    <a target=\\\"_blank\\\" href=\\\"//www.qualtrics.com/enterprise-feedback-management\\\">\\n        Enterprise Feedback Management\\n    </a>\\n    <br/>\\n</noscript>\\n\\n<script src=\\\"//s.btstatic.com/tag.js\\\">{\\n    site: \\\"4IGCP5L\\\"\\n}</script>\\n<noscript>\\n    <iframe src=\\\"//s.thebrighttag.com/iframe?c=4IGCP5L\\\" width=\\\"1\\\" height=\\\"1\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\"\\n            marginheight=\\\"0\\\" marginwidth=\\\"0\\\"></iframe>\\n</noscript>\\n\\n<script type=\\\"text/javascript\\\">_satellite.pageBottom();</script>\\n\\n<!-- FallBack for Flexbox use in safari 8 or previous -->\\n<script type=\\\"text/javascript\\\">\\n    var ua = navigator.userAgent;\\n    if (ua.indexOf('Safari') !== -1) {\\n        var version = ua.match(/Version\\\\/(\\\\d+)/)\\n        if (parseInt(version[1]) <= 8) {\\n            document.getElementsByClassName('page')[0].style.display = 'block';\\n        }\\n    }\\n</script>\\n\\n\\n</div>\\n\\n</body>\\n</html>\\n\",\n  \"page_id\": \"\",\n  \"page_type\": \"item\",\n  \"plugins\": {\n    \"annotations-plugin\": {\n      \"extracts\": [\n        {\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": null,\n          \"id\": \"cf50-4056-8671\",\n          \"item_container\": true,\n          \"repeated\": false,\n          \"required\": [],\n          \"schema_id\": \"1ee7-4615-b85c\",\n          \"selector\": \".page-body > div:nth-child(2)\",\n          \"siblings\": 0,\n          \"tagid\": null,\n          \"text-content\": \"#portia-content\"\n        },\n        {\n          \"accept_selectors\": [\n            \".cui-alpha\"\n          ],\n          \"container_id\": \"cf50-4056-8671\",\n          \"data\": {\n            \"b83b-416f-84bb\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"0c07-4bed-ba61\",\n              \"required\": false\n            }\n          },\n          \"id\": \"2d82-4d78-82ad\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"repeated\": false,\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page-body > div:nth-child(2) > .mmy-header > .mmy-header__title > .mmy-header__title-year > .cui-alpha\",\n          \"tagid\": null,\n          \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" page-body \\\")]/div[2]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-header \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-header__title \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-header__title-year \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" cui-alpha \\\")]\"\n        },\n        {\n          \"accept_selectors\": [\n            \".slide\"\n          ],\n          \"container_id\": \"cf50-4056-8671\",\n          \"data\": {\n            \"c2de-4937-88ab\": {\n              \"attribute\": \"src\",\n              \"extractors\": {},\n              \"field\": \"cbfc-472c-bd51\",\n              \"required\": false\n            }\n          },\n          \"id\": \"01c0-41f9-a1f1\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"repeated\": false,\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page-body > div:nth-child(2) > .mmy-header > .mmy-header__title > .mmy-carousel-dt > .module-container > .col-mb-12 > .scrollable-content-container > .scrollable-content > .cars-container > .hero-slider-wrapper > .hero-slider-clearfix > .slide\",\n          \"tagid\": null,\n          \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" page-body \\\")]/div[2]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-header \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-header__title \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-carousel-dt \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" module-container \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" col-mb-12 \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" scrollable-content-container \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" scrollable-content \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" cars-container \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" hero-slider-wrapper \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" hero-slider-clearfix \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" slide \\\")]\"\n        },\n        {\n          \"accept_selectors\": [\n            \".mmy-info__msrp\"\n          ],\n          \"container_id\": \"cf50-4056-8671\",\n          \"data\": {\n            \"a0d5-4de3-97fb\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"994b-4389-a6ac\",\n              \"required\": false\n            }\n          },\n          \"id\": \"46c2-494c-a60c\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"repeated\": false,\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".page-body > div:nth-child(2) > .mmy-dashboard > div > .card > .mmy-info__msrp\",\n          \"tagid\": null,\n          \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" page-body \\\")]/div[2]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-dashboard \\\")]/div/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" card \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" mmy-info__msrp \\\")]\"\n        }\n      ]\n    }\n  },\n  \"scrapes\": \"1ee7-4615-b85c\",\n  \"spider\": \"www.cars.com\",\n  \"url\": \"https://www.cars.com/research/chevrolet-colorado-2016/\",\n  \"version\": \"0.13.0b20\",\n  \"results\": [\n    {\n      \"Image\": [\n        \"https://www.cstatic-images.com/car-pictures/xl/USC60CHT355A021001.png\"\n      ],\n      \"Title\": [\n        \"2016 Chevrolet Colorado\"\n      ],\n      \"_template\": \"42a6-42fa-958e\",\n      \"_type\": \"Books\",\n      \"price\": [\n        \"MSRP Range $ 20,055 - $35,450\"\n      ],\n      \"url\": \"http://url\"\n    }\n  ],\n  \"schemas\": {\n    \"1ee7-4615-b85c\": {\n      \"fields\": {\n        \"b155-4aa8-a992\": {\n          \"id\": \"b155-4aa8-a992\",\n          \"name\": \"1\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"c1e3-413a-8ba2\": {\n          \"id\": \"c1e3-413a-8ba2\",\n          \"name\": \"field2\",\n          \"required\": false,\n          \"type\": \"price\",\n          \"vary\": false\n        },\n        \"0c07-4bed-ba61\": {\n          \"auto_created\": true,\n          \"id\": \"0c07-4bed-ba61\",\n          \"name\": \"Title\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"cbfc-472c-bd51\": {\n          \"auto_created\": true,\n          \"id\": \"cbfc-472c-bd51\",\n          \"name\": \"Image\",\n          \"required\": false,\n          \"type\": \"image\",\n          \"vary\": false\n        },\n        \"994b-4389-a6ac\": {\n          \"auto_created\": true,\n          \"id\": \"994b-4389-a6ac\",\n          \"name\": \"price\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        }\n      },\n      \"name\": \"Books\"\n    }\n  }\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/cars.com_nested.json",
    "content": "{\n    \"body\": \"original_body\",\n    \"id\": \"9342-43b3-a5a5\",\n    \"name\": \"GMC Acadia Reviews Specs and Prices Carscom\",\n    \"original_body\": \"<!doctype html>\\n<html>\\n\\n<head>\\n    <script>if (window.performance && window.performance.clearMarks) {window.performance.clearMarks();}</script>\\n    <script>if (window.performance && window.performance.mark) {window.performance.mark(\\\"pageLoadStart\\\");}</script>\\n        <link rel=\\\"preconnect\\\" href=\\\"https://cdn.optimizely.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://cstatic-images.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://cstatic-graphics.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://vcu.collserve.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://s.btstatic.com\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://securepubads.g.doubleclick.net\\\" />\\n    <link rel=\\\"preconnect\\\" href=\\\"https://pagead2.googlesyndication.com\\\" />\\n    <title>2016 GMC Acadia Reviews, Specs and Prices | Cars.com</title>\\n    <meta charset=\\\"UTF-8\\\">\\n    <meta name=\\\"viewport\\\"\\n          content=\\\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\\\">\\n    <meta name=\\\"viewport\\\" content=\\\"initial-scale=1.0,user-scalable=no,maximum-scale=1\\\" media=\\\"(device-height: 568px)\\\"/>\\n    <meta property=\\\"fb:app_id\\\" content=\\\"290349283473\\\"/>\\n\\n    <script>\\n        window.carsStatic = \\\"/static/www/789b9a55bab2\\\";\\n    </script>\\n\\n    <link href=\\\"/static/www/789b9a55bab2/app/bundles/common.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"/>\\n    <link href=\\\"/static/www/789b9a55bab2/app/bundles/researchMmy.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"/>\\n\\n\\n    <!--[if IE 9]>\\n    <link href=\\\"/static/www/789b9a55bab2/app/bundles/ie9.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\"/>\\n    <![endif]-->\\n\\n    <script src=\\\"//cdn.optimizely.com/js/7544042.js\\\"></script>\\n\\n    <script type=\\\"text/javascript\\\">\\n        // TEMP flag used by static SRP apiBootstrapper\\n        if (!window.CARS) window.CARS = {};\\n        window.CARS.isServerSideRendered = true;\\n    </script>\\n    <script src=\\\"/static/www/789b9a55bab2/app/js/init.js\\\"></script>\\n\\n\\n    <script src=\\\"//assets.adobedtm.com/36e159fa28ebd11f42c753477615b777373ed969/satelliteLib-d02c51728c29ecf9a3db1b01abbed2ea57be2e3c.js\\\"></script>\\n\\n\\n\\n    <meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\">\\n\\n\\n        <meta property=\\\"og:title\\\" content=\\\"2016 GMC Acadia Reviews, Specs and Prices | Cars.com | Cars.com\\\">\\n        <meta property=\\\"og:image\\\" content=\\\"//graphics.cars.com/images/core/logo.png\\\">\\n        <meta property=\\\"og:site_name\\\" content=\\\"Cars.com\\\">\\n\\n        <meta name=\\\"ROBOTS\\\" content=\\\"INDEX, FOLLOW\\\">\\n        <meta name=\\\"description\\\" content=\\\"Research and compare the 2016 GMC Acadia and get MSRP, invoice price, used car book values, expert reviews, photos, features, pros and cons, equipment, specs, options and more.\\\">\\n        <link rel=\\\"canonical\\\" type=\\\"\\\" href=\\\"https://www.cars.com/research/gmc-acadia-2016/\\\" title=\\\"\\\" media=\\\"\\\">\\n        <script type=\\\"application/ld+json\\\">{\\\"@context\\\":\\\"http://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/\\\",\\\"name\\\":\\\"Cars.com\\\"}},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/gmc-acadia-2016/\\\",\\\"name\\\":\\\"2016\\\"}},{\\\"@type\\\":\\\"ListItem\\\",\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/gmc/\\\",\\\"name\\\":\\\"GMC\\\"},\\\"position\\\":3},{\\\"@type\\\":\\\"ListItem\\\",\\\"item\\\":{\\\"@id\\\":\\\"https://www.cars.com/research/gmc-acadia/\\\",\\\"name\\\":\\\"Acadia\\\"},\\\"position\\\":4}]}</script>\\n\\n</head>\\n\\n<!-- Per XD guidelines, we should never use anything but no-margin page layout -->\\n<body cars-common ng-class=\\\"currentBreakpoint\\\" class=\\\"onecol-layout-no-margin \\\">\\n\\n    <script>window.CARS.digitalData = {\\\"page\\\":{\\\"pageInfo\\\":{\\\"pageName\\\":\\\"New Cars/Research/MMY\\\",\\\"channel\\\":\\\"\\\",\\\"effectiveDate\\\":\\\"2016-11-14T14:09:46.017Z\\\"},\\\"vehicle\\\":{\\\"bodyStyle\\\":\\\"\\\",\\\"trim\\\":\\\"\\\",\\\"year\\\":2016,\\\"modelId\\\":20607,\\\"model\\\":\\\"Acadia\\\",\\\"makeId\\\":20061,\\\"make\\\":\\\"GMC\\\",\\\"type\\\":\\\"research\\\"}}};</script>\\n    <cars-dtm-init values=\\\"{'page.vehicle.detail': ls.getItem('sponsoredMMY') ? (ls.removeItem('sponsoredMMY') || 'mmy-sponsored') : 'mmy'}\\\"></cars-dtm-init>\\n\\n    <div class=\\\"page\\\">\\n\\n        <div class=\\\"main-header\\\">\\n<cars-feature-flags if-not-flag=\\\"profCioAvatar\\\" ng-cloak>\\n      <cars-global-sticky-header>\\n        <cars-global-navigation hide-settings=\\\"\\\">\\n            <cars-global-navigation-item tracking-name=\\\"header-buy\\\" item-name=\\\"Buy\\\" data-customlink=\\\"click\\\" data-linkname=\\\"header-buy\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-search-cars\\\" url=\\\"https://www.cars.com/shop/#forSale\\\" child-name=\\\"Find Cars for Sale\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-search-cars\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-research-cars\\\" url=\\\"https://www.cars.com/shop/#research\\\" child-name=\\\"Research Car Models\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-research-cars\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-reviews\\\" url=\\\"/reviews/\\\" child-name=\\\"Review a Car\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-car-reviews\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-find-a-dealer\\\" url=\\\"/dealers/buy/\\\" child-name=\\\"Find a Dealer\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-find-a-dealer\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-dealer-reviews\\\" url=\\\"/dealers/buy/\\\" child-name=\\\"Review a Dealer\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-dealer-reviews\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-book-values-buy\\\" url=\\\"/sell/book-value/\\\" child-name=\\\"Estimate Used Car Values\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-book-values-buy\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-finance\\\" url=\\\"/finance/\\\" child-name=\\\"Estimate Your Payments\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-finance\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-cpo\\\" url=\\\"https://www.cars.com/shop/cpo/\\\" child-name=\\\"Certified Pre-Owned Cars\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-cpo\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-sell\\\" item-name=\\\"Sell &amp; Trade\\\" data-customlink=\\\"click\\\" data-linkname=\\\"header-sell\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-sell-your-car\\\" url=\\\"/sell/\\\" child-name=\\\"Sell Your Car\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-sell-your-car\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-book-values-sell\\\" url=\\\"/sell/book-value/\\\" child-name=\\\"Find Your Car&#x27;s Value\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-book-values-sell\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-selling-tips\\\" url=\\\"/sell/how-to/\\\" child-name=\\\"How to Sell Your Car\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-selling-tips\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-my-sell-ad\\\" url=\\\"/sell/profile\\\" child-name=\\\"My Cars.com Listing\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-my-sell-ad\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-service\\\" item-name=\\\"Service &amp; Repair\\\" data-customlink=\\\"click\\\" data-linkname=\\\"header-service\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-service-estimate\\\" url=\\\"/auto-repair/\\\" child-name=\\\"Get a Service Estimate\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-service-estimate\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-service-shop\\\" url=\\\"/auto-repair/#rpc-details\\\" child-name=\\\"Find a Service Center\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-service-shop\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-expert-tips\\\" url=\\\"/auto-repair/expert-tips/\\\" child-name=\\\"Service &amp; Repair Advice\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-service-tips\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-get-recalls\\\" url=\\\"/recalls/\\\" child-name=\\\"Safety &amp; Recall Notices\\\" data-customlink=\\\"\\\" data-linkname=\\\"\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-maintenance\\\" url=\\\"/news/maintenance-101/ \\\" child-name=\\\"Car Maintenance 101\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-car-maintenance\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n            <cars-global-navigation-item tracking-name=\\\"header-news\\\" item-name=\\\"News\\\" data-customlink=\\\"click\\\" data-linkname=\\\"header-news\\\">\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-car-news\\\" url=\\\"/news/\\\" child-name=\\\"Latest Car News\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-car-news\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-latest-reviews\\\" url=\\\"/news/Car-Reviews\\\" child-name=\\\"Latest Car Reviews\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-latest-reviews\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-latest-videos\\\" url=\\\"/news/Video\\\" child-name=\\\"Latest Videos\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-latest-videos\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-awards\\\" url=\\\"/awards\\\" child-name=\\\"Awards\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-awards\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-multi-car-comparisons\\\" url=\\\"/news/Multi-Car-Comparison/\\\" child-name=\\\"Multi-Car Comparisons\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-multi-car-comparisons\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-updates-trends\\\" url=\\\"/news/Car-Buying/\\\" child-name=\\\"Updates &amp; Trends\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-updates-trends\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-first-time\\\" url=\\\"/news/First-Time-Buyers/\\\" child-name=\\\"Help for First-Time Buyers\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-first-time\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-seat-check\\\" url=\\\"/news/Car-Seat-Check/\\\" child-name=\\\"Child Car Seat Checks\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-seat-check\\\"></cars-global-navigation-item-child>\\n                </ul>\\n                <ul class=\\\"submenu-column\\\">\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-det\\\" url=\\\"/news/Detroit-Auto-Show/\\\" child-name=\\\"Detroit Auto Show\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-det\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-chi\\\" url=\\\"/news/Chicago-Auto-Show/\\\" child-name=\\\"Chicago Auto Show\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-chi\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-ny\\\" url=\\\"/news/new-york-auto-show\\\" child-name=\\\"New York Auto Show\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-ny\\\"></cars-global-navigation-item-child>\\n                    <cars-global-navigation-item-child tracking-name=\\\"header-auto-show-la\\\" url=\\\"/news/LA-Auto-Show/\\\" child-name=\\\"LA Auto Show\\\" data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-la\\\"></cars-global-navigation-item-child>\\n                </ul>\\n            </cars-global-navigation-item>\\n        </cars-global-navigation>\\n      </cars-global-sticky-header>\\n      <noscript>\\n        <div class=\\\"col-group\\\">\\n          <div class=\\\"col-mb-12\\\">\\n            <div class=\\\"alert-message warning\\\">\\n              <p>For best performance, please check your browser settings for blocked content.</p>\\n            </div>\\n          </div>\\n        </div>\\n      </noscript>\\n\\n</cars-feature-flags>\\n\\n<cars-feature-flags if-flag=\\\"profCioAvatar\\\">\\n\\n        <cars-global-sticky-header>\\n\\n            <div class=\\\"cars-global-navigation-beta\\\" ng-controller=\\\"globalHeaderNavigation\\\">\\n                <div class=\\\"global-nav\\\" ng-class=\\\"{'mobile-nav-menu-open': mobileNavMenuOpen, 'mobile-profile-menu-open': mobileProfileMenuOpen}\\\">\\n                    <div class=\\\"fixed-container\\\" ng-style=\\\"{'top': (mobileProfileMenuOpen || mobileNavMenuOpen) ? headerViewportY + 'px' : 0}\\\" ng-class=\\\"{'undocked': sticky, 'hide': hidden}\\\">\\n                        <div class=\\\"background-container\\\">\\n                            <div class=\\\"max-width-container\\\">\\n                                <a class=\\\"logo\\\" href=\\\"/\\\" name=\\\"&lid=header-home\\\" ng-class=\\\"{'simple': smallLogo}\\\" target=\\\"_self\\\" data-linkname=\\\"header-home\\\">\\n                                    <svg class=\\\"cars-logo\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" version=\\\"1.1\\\" x=\\\"0px\\\" y=\\\"0px\\\" width=\\\"165px\\\" height=\\\"70px\\\" viewBox=\\\"0 0 165 70\\\" enable-background=\\\"new 0 0 165 70\\\" xml:space=\\\"preserve\\\">\\n<g id=\\\"Layer_1\\\">\\n\\n        <radialGradient id=\\\"SVGID_1_\\\" cx=\\\"41.1323\\\" cy=\\\"-3.0356\\\" r=\\\"116.9038\\\" gradientTransform=\\\"matrix(-0.8303 0.5574 -0.4031 -0.6005 74.0593 -27.7844)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.3086\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.392\\\" style=\\\"stop-color:#9E9E9E\\\"/>\\n        <stop offset=\\\"0.522\\\" style=\\\"stop-color:#3F3F3F\\\"/>\\n        <stop offset=\\\"0.5807\\\" style=\\\"stop-color:#1A1A1A\\\"/>\\n        <stop offset=\\\"0.6089\\\" style=\\\"stop-color:#202020\\\"/>\\n        <stop offset=\\\"0.8339\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path fill=\\\"url(#SVGID_1_)\\\" d=\\\"M15.588,31.615c0-13.049,17.466-24.389,43.138-30.146C24.623,5.791-0.233,19.167-0.233,35   c0,19.331,37.041,35,82.733,35c20.445,0,39.154-3.139,53.592-8.337c-11.565,2.632-24.818,4.127-38.906,4.127   C52.121,65.79,15.588,50.489,15.588,31.615z\\\"/>\\n    <radialGradient id=\\\"SVGID_2_\\\" cx=\\\"81.9243\\\" cy=\\\"-57.5869\\\" r=\\\"132.8217\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.6091\\\" style=\\\"stop-color:#DEDEDE\\\"/>\\n        <stop offset=\\\"0.6587\\\" style=\\\"stop-color:#BFBFBF\\\"/>\\n        <stop offset=\\\"0.7675\\\" style=\\\"stop-color:#717171\\\"/>\\n        <stop offset=\\\"0.8957\\\" style=\\\"stop-color:#0D0D0D\\\"/>\\n        <stop offset=\\\"0.9081\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.9255\\\" style=\\\"stop-color:#262626\\\"/>\\n        <stop offset=\\\"0.9459\\\" style=\\\"stop-color:#444444\\\"/>\\n        <stop offset=\\\"0.9509\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path fill=\\\"url(#SVGID_2_)\\\" d=\\\"M165.233,35c0-19.33-37.041-35-82.733-35c-8.265,0-16.244,0.515-23.774,1.469   C33.054,7.227,15.588,18.566,15.588,31.615c0,18.874,36.533,34.175,81.598,34.175c14.088,0,27.341-1.496,38.906-4.127   C153.92,55.243,165.233,45.681,165.233,35z\\\"/>\\n    <ellipse fill=\\\"#490F71\\\" cx=\\\"82.436\\\" cy=\\\"34.952\\\" rx=\\\"69.584\\\" ry=\\\"29.481\\\"/>\\n\\n        <radialGradient id=\\\"eyebrow_shadow_right_1_\\\" cx=\\\"125.0479\\\" cy=\\\"23.3047\\\" r=\\\"21.2997\\\" fx=\\\"125.0368\\\" fy=\\\"23.3045\\\" gradientTransform=\\\"matrix(-0.0169 -0.9999 1.6456 -0.0279 88.8154 148.9841)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#000000;stop-opacity:0.3\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#000000;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"eyebrow_shadow_right_2_\\\" fill=\\\"url(#eyebrow_shadow_right_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"lower_left_rim_shadow_1_\\\" cx=\\\"634.3643\\\" cy=\\\"-1092.1196\\\" r=\\\"38.0094\\\" fx=\\\"627.7449\\\" fy=\\\"-1071.3595\\\" gradientTransform=\\\"matrix(0.0031 1 2.5435 -0.0079 2877.6846 -615.2505)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9571\\\" style=\\\"stop-color:#000000;stop-opacity:0\\\"/>\\n        <stop offset=\\\"0.99\\\" style=\\\"stop-color:#000000;stop-opacity:0.33\\\"/>\\n    </radialGradient>\\n    <path id=\\\"lower_left_rim_shadow\\\" fill=\\\"url(#lower_left_rim_shadow_1_)\\\" d=\\\"M98.452,59.999c11.041,0,20.702-1.422,28.978-3.72   c-11.938,4.297-27.547,6.901-44.631,6.901c-37.517,0-67.931-12.554-67.931-28.039c0-1.927,0.471-3.808,1.368-5.626   C16.896,50.93,61.83,59.999,98.452,59.999z\\\"/>\\n\\n        <radialGradient id=\\\"bottom_right_glow_1_\\\" cx=\\\"119.7432\\\" cy=\\\"67.3354\\\" r=\\\"36.8928\\\" gradientTransform=\\\"matrix(-9.633738e-04 -1 2.0465 -0.002 -17.9434 187.2113)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#FFCCFF;stop-opacity:0.2\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFCCFF;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"bottom_right_glow_2_\\\" fill=\\\"url(#bottom_right_glow_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"lower_right_rim_light_1_\\\" cx=\\\"98.0234\\\" cy=\\\"-1097.168\\\" r=\\\"32.7298\\\" fx=\\\"92.3235\\\" fy=\\\"-1079.2915\\\" gradientTransform=\\\"matrix(-0.0031 1 -2.5435 -0.0079 -2720.1831 -73.9038)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9702\\\" style=\\\"stop-color:#FFF2FF;stop-opacity:0\\\"/>\\n        <stop offset=\\\"0.99\\\" style=\\\"stop-color:#FFF2FF;stop-opacity:0.5\\\"/>\\n    </radialGradient>\\n    <path id=\\\"lower_right_rim_light\\\" fill=\\\"url(#lower_right_rim_light_1_)\\\" d=\\\"M67.145,59.999c-11.041,0-20.702-1.422-28.977-3.72   c11.937,4.297,27.547,6.901,44.631,6.901c37.517,0,67.931-12.554,67.931-28.039c0-1.927-0.471-3.808-1.368-5.626   C148.701,50.93,103.767,59.999,67.145,59.999z\\\"/>\\n\\n        <radialGradient id=\\\"top_left_glow_circle_1_\\\" cx=\\\"49.4507\\\" cy=\\\"15.042\\\" r=\\\"40.9061\\\" fx=\\\"46.4286\\\" fy=\\\"14.5953\\\" gradientTransform=\\\"matrix(0.0214 0.9998 -1.9051 0.0408 77.0485 -35.011)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#9042C1\\\"/>\\n        <stop offset=\\\"0.1864\\\" style=\\\"stop-color:#8A3DBD;stop-opacity:0.8605\\\"/>\\n        <stop offset=\\\"0.4302\\\" style=\\\"stop-color:#7A2FB1;stop-opacity:0.678\\\"/>\\n        <stop offset=\\\"0.6012\\\" style=\\\"stop-color:#6A22A6;stop-opacity:0.55\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#6A22A6;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <ellipse id=\\\"top_left_glow_circle_2_\\\" fill=\\\"url(#top_left_glow_circle_1_)\\\" cx=\\\"82.895\\\" cy=\\\"35.142\\\" rx=\\\"67.931\\\" ry=\\\"28.039\\\"/>\\n\\n        <radialGradient id=\\\"top_left_rim_eyebrow_1_\\\" cx=\\\"91.5225\\\" cy=\\\"39.4033\\\" r=\\\"33.0635\\\" fx=\\\"81.1644\\\" fy=\\\"43.4248\\\" gradientTransform=\\\"matrix(0.0031 -1 2.514 0.0078 -7.8206 130.6176)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.8847\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0.7\\\"/>\\n    </radialGradient>\\n    <path id=\\\"top_left_rim_eyebrow\\\" fill=\\\"url(#top_left_rim_eyebrow_1_)\\\" d=\\\"M98.646,10.284c11.04,0,20.7,1.421,28.976,3.72   c-11.936-4.298-27.546-6.902-44.63-6.902c-37.518,0-67.931,12.554-67.931,28.04c0,1.927,0.472,3.808,1.369,5.625   C17.089,19.353,62.023,10.284,98.646,10.284z\\\"/>\\n    <path opacity=\\\"0.4\\\" d=\\\"M30.641,27.752c2.059,0,4.017,0.573,5.874,1.754l-1.586,3.965c-1.292-0.981-2.534-1.47-3.747-1.47   c-2.801,0-4.625,1.922-4.625,4.012c0,2.192,1.484,3.643,3.512,3.643c1.382,0,2.597-0.438,3.981-1.281l0.812,4.202   c-1.958,0.945-3.714,1.451-5.537,1.451c-4.659,0-7.832-3.059-7.832-7.439C21.493,31.665,25.308,27.752,30.641,27.752z    M95.544,32.001c1.213,0,2.456,0.489,3.746,1.47l1.586-3.965c-1.855-1.181-3.815-1.754-5.873-1.754   c-5.334,0-9.148,3.913-9.148,8.836c0,4.38,3.175,7.439,7.832,7.439c1.823,0,3.578-0.505,5.537-1.451l-0.812-4.202   c-1.384,0.843-2.6,1.281-3.983,1.281c-2.024,0-3.511-1.45-3.511-3.643C90.918,33.923,92.741,32.001,95.544,32.001z M53.607,28.46   l-2.6,14.826h-5.165l0.269-1.546c-1.519,1.411-2.902,2.119-4.455,2.119c-3.006,0-5.131-2.487-5.131-6.497   c0-5.461,3.173-9.441,7.325-9.441c1.688,0,2.971,0.64,4.354,2.058l0.235-1.519H53.607z M47.632,33.113   c-0.54-1.079-1.282-1.584-2.296-1.584c-1.991,0-3.78,2.292-3.78,5.699c0,1.72,0.91,2.832,2.295,2.832   c1.553,0,2.801-1.348,3.274-3.945L47.632,33.113z M64.327,28.022c-1.654,0-3.003,1.112-4.219,3.338l0.506-2.9h-4.692l-2.633,14.826   h5.232l0.979-5.72c0.507-2.901,1.519-4.318,3.68-4.318c0.473,0,1.013,0.068,1.687,0.236l0.947-5.226   C65.273,28.09,64.766,28.022,64.327,28.022z M73.288,31.09c1.079,0,2.531,0.506,4.219,1.55l1.384-2.999   c-1.959-1.248-3.883-1.855-5.976-1.855c-3.679,0-6.043,2.124-6.043,4.788c0,1.989,1.148,3.54,3.41,4.62l0.98,0.472   c1.248,0.573,1.923,0.944,1.923,1.72c0,0.673-0.675,1.281-1.789,1.281c-1.25,0-2.87-0.54-4.861-1.686l-1.351,3.161   c1.958,1.211,4.085,1.817,6.347,1.817c3.916,0,6.312-2.119,6.312-4.946c0-1.887-1.182-3.539-3.208-4.416l-0.912-0.372   c-1.518-0.64-2.262-1.044-2.262-1.854C71.463,31.665,72.139,31.09,73.288,31.09z M82.047,38.105c-1.519,0-2.803,1.248-2.803,2.798   c0,1.473,1.284,2.788,2.803,2.788c1.591,0,2.813-1.281,2.813-2.788C84.86,39.318,83.638,38.105,82.047,38.105z M117.391,35.103   c0,4.992-3.849,8.857-8.71,8.857c-4.727,0-7.831-3.025-7.831-7.407c0-4.888,3.814-8.801,8.911-8.801   C114.252,27.752,117.391,30.754,117.391,35.103z M112.09,35.171c0-2.158-1.08-3.506-2.565-3.506c-1.721,0-3.376,2.056-3.376,4.888   c0,2.158,1.147,3.542,2.634,3.542C110.537,40.095,112.09,38.037,112.09,35.171z M139.018,28.022c-1.957,0-3.655,1.012-5.227,3.103   c-0.481-1.957-1.957-3.103-4.04-3.103c-1.799,0-3.4,0.911-4.845,2.665l0.354-2.227h-4.843l-2.502,14.826h4.906l1.254-7.272   c0.447-2.663,2.019-3.878,3.366-3.878c0.834,0,1.347,0.574,1.347,1.451c0,0.337-0.063,0.774-0.161,1.28l-1.41,8.419h4.905   l1.251-7.272c0.449-2.663,2.021-3.878,3.368-3.878c0.832,0,1.314,0.574,1.314,1.451c0,0.337-0.034,0.774-0.131,1.281l-1.408,8.418   h4.873l1.702-9.936c0.062-0.372,0.095-0.71,0.095-1.046C143.187,29.742,141.55,28.022,139.018,28.022z\\\"/>\\n    <g>\\n        <linearGradient id=\\\"SVGID_3_\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"81.6675\\\" y1=\\\"26.8882\\\" x2=\\\"81.6675\\\" y2=\\\"43.1636\\\">\\n            <stop offset=\\\"0.6107\\\" style=\\\"stop-color:#FFFFFF\\\"/>\\n            <stop offset=\\\"0.791\\\" style=\\\"stop-color:#E0E0E0\\\"/>\\n        </linearGradient>\\n        <path fill=\\\"url(#SVGID_3_)\\\" d=\\\"M29.969,26.888c2.059,0,4.017,0.574,5.874,1.754l-1.586,3.965c-1.292-0.98-2.535-1.47-3.748-1.47    c-2.801,0-4.625,1.922-4.625,4.012c0,2.193,1.484,3.643,3.512,3.643c1.383,0,2.598-0.438,3.981-1.282l0.812,4.202    c-1.958,0.945-3.714,1.451-5.537,1.451c-4.659,0-7.832-3.059-7.832-7.44C20.821,30.801,24.636,26.888,29.969,26.888z     M94.872,31.138c1.213,0,2.456,0.489,3.746,1.47l1.586-3.965c-1.855-1.18-3.815-1.754-5.873-1.754    c-5.334,0-9.148,3.913-9.148,8.835c0,4.381,3.175,7.44,7.832,7.44c1.823,0,3.578-0.506,5.537-1.451l-0.812-4.202    c-1.384,0.843-2.6,1.282-3.983,1.282c-2.024,0-3.511-1.45-3.511-3.643C90.246,33.06,92.069,31.138,94.872,31.138z M52.936,27.597    l-2.6,14.826h-5.164l0.269-1.546c-1.519,1.411-2.902,2.119-4.455,2.119c-3.006,0-5.131-2.487-5.131-6.497    c0-5.461,3.173-9.441,7.325-9.441c1.688,0,2.971,0.641,4.354,2.058l0.236-1.518H52.936z M46.96,32.25    c-0.54-1.079-1.281-1.584-2.295-1.584c-1.991,0-3.78,2.292-3.78,5.699c0,1.72,0.91,2.832,2.295,2.832    c1.553,0,2.801-1.348,3.274-3.946L46.96,32.25z M63.655,27.158c-1.654,0-3.003,1.112-4.219,3.338l0.506-2.9H55.25l-2.633,14.826    h5.232l0.979-5.72c0.507-2.901,1.519-4.318,3.68-4.318c0.473,0,1.013,0.068,1.687,0.236l0.947-5.226    C64.601,27.226,64.094,27.158,63.655,27.158z M72.616,30.227c1.079,0,2.532,0.505,4.219,1.55l1.385-2.999    c-1.959-1.249-3.883-1.855-5.976-1.855c-3.679,0-6.043,2.124-6.043,4.788c0,1.99,1.149,3.54,3.41,4.62l0.98,0.472    c1.248,0.574,1.923,0.944,1.923,1.721c0,0.673-0.676,1.281-1.789,1.281c-1.25,0-2.87-0.54-4.861-1.686l-1.351,3.161    c1.958,1.211,4.085,1.817,6.347,1.817c3.916,0,6.312-2.12,6.312-4.946c0-1.887-1.182-3.539-3.208-4.416l-0.911-0.372    c-1.518-0.64-2.263-1.045-2.263-1.854C70.791,30.801,71.467,30.227,72.616,30.227z M81.375,37.241    c-1.519,0-2.803,1.248-2.803,2.798c0,1.473,1.284,2.788,2.803,2.788c1.591,0,2.813-1.281,2.813-2.788    C84.188,38.455,82.966,37.241,81.375,37.241z M116.719,34.239c0,4.992-3.849,8.857-8.71,8.857c-4.727,0-7.831-3.025-7.831-7.407    c0-4.888,3.814-8.801,8.911-8.801C113.58,26.888,116.719,29.89,116.719,34.239z M111.418,34.307c0-2.158-1.08-3.506-2.565-3.506    c-1.721,0-3.376,2.056-3.376,4.888c0,2.158,1.147,3.542,2.634,3.542C109.865,39.231,111.418,37.173,111.418,34.307z     M138.346,27.158c-1.956,0-3.655,1.013-5.227,3.104c-0.481-1.957-1.957-3.104-4.04-3.104c-1.799,0-3.4,0.911-4.845,2.665    l0.354-2.227h-4.843l-2.502,14.826h4.906l1.253-7.272c0.448-2.664,2.02-3.878,3.367-3.878c0.834,0,1.347,0.574,1.347,1.451    c0,0.337-0.063,0.774-0.161,1.28l-1.41,8.419h4.905l1.251-7.272c0.449-2.664,2.021-3.878,3.368-3.878    c0.832,0,1.314,0.574,1.314,1.451c0,0.337-0.034,0.774-0.131,1.281l-1.408,8.418h4.873l1.702-9.936    c0.062-0.372,0.095-0.709,0.095-1.045C142.515,28.878,140.878,27.158,138.346,27.158z\\\"/>\\n    </g>\\n    <linearGradient id=\\\"SVGID_4_\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"111.6357\\\" y1=\\\"72.6943\\\" x2=\\\"66.992\\\" y2=\\\"14.9904\\\">\\n        <stop offset=\\\"0\\\" style=\\\"stop-color:#231F20;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#231F20;stop-opacity:0.3\\\"/>\\n    </linearGradient>\\n    <path fill=\\\"url(#SVGID_4_)\\\" d=\\\"M151.828,34.952c0,16.176-31.068,29.29-69.392,29.29c-38.325,0-69.393-13.113-69.393-29.29   s31.068-29.29,69.393-29.29C120.76,5.663,151.828,18.776,151.828,34.952z M82.875,7.102c-37.506,0-67.912,12.55-67.912,28.032   c0,15.48,30.405,28.031,67.912,28.031c37.507,0,67.912-12.551,67.912-28.031C150.787,19.652,120.382,7.102,82.875,7.102z\\\"/>\\n    <g>\\n        <path d=\\\"M151.854,59.417h-0.999v-0.405h2.459v0.405h-0.999v2.809h-0.461V59.417z\\\"/>\\n        <path d=\\\"M153.78,59.013h0.76l1.008,2.67l0.99-2.67h0.76v3.213h-0.46v-2.781h-0.011l-1.062,2.781h-0.451l-1.063-2.781h-0.01v2.781    h-0.46V59.013z\\\"/>\\n    </g>\\n\\n        <radialGradient id=\\\"inner_ring-gradient_1_\\\" cx=\\\"81.9575\\\" cy=\\\"24.9375\\\" r=\\\"94.0247\\\" fx=\\\"82.9614\\\" fy=\\\"24.0574\\\" gradientTransform=\\\"matrix(-0.9953 0.0623 -0.0317 -0.5032 164.2916 28.9651)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.3018\\\" style=\\\"stop-color:#666666\\\"/>\\n        <stop offset=\\\"0.4761\\\" style=\\\"stop-color:#626262\\\"/>\\n        <stop offset=\\\"0.6463\\\" style=\\\"stop-color:#565656\\\"/>\\n        <stop offset=\\\"0.7397\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n        <stop offset=\\\"0.7494\\\" style=\\\"stop-color:#424242\\\"/>\\n        <stop offset=\\\"0.7815\\\" style=\\\"stop-color:#252525\\\"/>\\n        <stop offset=\\\"0.8092\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.8292\\\" style=\\\"stop-color:#0D0D0D\\\"/>\\n        <stop offset=\\\"0.8404\\\" style=\\\"stop-color:#131313\\\"/>\\n        <stop offset=\\\"0.8558\\\" style=\\\"stop-color:#252525\\\"/>\\n        <stop offset=\\\"0.8736\\\" style=\\\"stop-color:#424242\\\"/>\\n        <stop offset=\\\"0.8931\\\" style=\\\"stop-color:#6A6A6A\\\"/>\\n        <stop offset=\\\"0.9124\\\" style=\\\"stop-color:#999999\\\"/>\\n        <stop offset=\\\"0.9442\\\" style=\\\"stop-color:#B8B8B8\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#F7F7F7\\\"/>\\n    </radialGradient>\\n    <path id=\\\"inner_ring-gradient\\\" fill=\\\"url(#inner_ring-gradient_1_)\\\" d=\\\"M82.436,67.025c41.769,0,75.631-14.36,75.631-32.073   c0-17.714-33.862-32.073-75.631-32.073c-41.77,0-75.631,14.359-75.631,32.073C6.805,52.666,40.667,67.025,82.436,67.025z    M153.46,34.952c0,16.441-31.799,29.77-71.024,29.77c-39.226,0-71.024-13.329-71.024-29.77c0-16.441,31.798-29.77,71.024-29.77   C121.661,5.183,153.46,18.511,153.46,34.952z\\\"/>\\n\\n        <radialGradient id=\\\"outer_ring-rim_shadow_1_\\\" cx=\\\"83.8438\\\" cy=\\\"34.3604\\\" r=\\\"90.2415\\\" fx=\\\"79.642\\\" fy=\\\"25.7344\\\" gradientTransform=\\\"matrix(0.9999 -0.0167 0.0066 0.396 -0.2153 22.1524)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.8978\\\" style=\\\"stop-color:#4D4D4D;stop-opacity:0\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#4D4D4D\\\"/>\\n    </radialGradient>\\n    <path id=\\\"outer_ring-rim_shadow\\\" fill=\\\"url(#outer_ring-rim_shadow_1_)\\\" d=\\\"M165.233,35c0,19.331-37.041,35-82.733,35   S-0.233,54.331-0.233,35c0-19.33,37.041-35,82.733-35S165.233,15.67,165.233,35z M5.558,34.84c0,18.234,34.505,33.017,77.07,33.017   c42.564,0,77.07-14.782,77.07-33.017S125.192,1.824,82.628,1.824C40.063,1.824,5.558,16.605,5.558,34.84z\\\"/>\\n\\n        <radialGradient id=\\\"outer_ring-rim_highlight_1_\\\" cx=\\\"81.9883\\\" cy=\\\"34.3604\\\" r=\\\"79.7596\\\" fx=\\\"65.3702\\\" fy=\\\"8.8593\\\" gradientTransform=\\\"matrix(1 0.0011 -4.740664e-04 0.4252 0.0165 19.659)\\\" gradientUnits=\\\"userSpaceOnUse\\\">\\n        <stop offset=\\\"0.9406\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0.8\\\"/>\\n        <stop offset=\\\"1\\\" style=\\\"stop-color:#FFFFFF;stop-opacity:0\\\"/>\\n    </radialGradient>\\n    <path id=\\\"outer_ring-rim_highlight\\\" fill=\\\"url(#outer_ring-rim_highlight_1_)\\\" d=\\\"M165.233,35c0,19.331-37.041,35-82.733,35   S-0.233,54.331-0.233,35c0-19.33,37.041-35,82.733-35S165.233,15.67,165.233,35z M5.558,34.84c0,18.234,34.505,33.017,77.07,33.017   c42.564,0,77.07-14.782,77.07-33.017S125.192,1.824,82.628,1.824C40.063,1.824,5.558,16.605,5.558,34.84z\\\"/>\\n    <path fill=\\\"#CCCCCC\\\" d=\\\"M153.651,34.952c0,16.547-31.884,29.962-71.215,29.962c-39.331,0-71.216-13.415-71.216-29.962   S43.105,4.991,82.436,4.991C121.768,4.991,153.651,18.405,153.651,34.952z M82.436,5.663c-38.325,0-69.393,13.113-69.393,29.29   s31.068,29.29,69.393,29.29c38.324,0,69.392-13.113,69.392-29.29S120.76,5.663,82.436,5.663z\\\"/>\\n    <path fill=\\\"#FFFFFF\\\" d=\\\"M82.628,1.824c42.564,0,77.07,14.782,77.07,33.016s-34.506,33.017-77.07,33.017   c-42.565,0-77.07-14.782-77.07-33.017S40.063,1.824,82.628,1.824z M82.436,66.833c41.664,0,75.44-14.274,75.44-31.881   c0-17.607-33.776-31.881-75.44-31.881c-41.664,0-75.439,14.273-75.439,31.881C6.997,52.559,40.772,66.833,82.436,66.833z\\\"/>\\n</g>\\n<g id=\\\"Layer_2\\\">\\n</g>\\n</svg>\\n                                </a>\\n\\n\\n                                    <ul class=\\\"no-space\\\" ng-hide=\\\"hideSettings\\\">\\n                                    <ul class=\\\"navbar-list drawer-menu mobile-menu-page\\\">\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Buy\\\" menu-name=\\\"Buy\\\" target-class-name=\\\"navbar-item-link\\\"  data-customlink=\\\"click\\\" data-linkname=\\\"header-buy\\\"><span class=\\\"navbar-item-label\\\">Buy</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Buy\\\" men-name=\\\"Buy\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-search-cars\\\">\\n                                                                                <a name=\\\"&lid=header-search-cars\\\" ng-href=\\\"https://www.cars.com/shop/#forSale\\\" target=\\\"_self\\\" title=\\\"Find Cars for Sale\\\">Find Cars for Sale</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-research-cars\\\">\\n                                                                                <a name=\\\"&lid=header-research-cars\\\" ng-href=\\\"https://www.cars.com/shop/#research\\\" target=\\\"_self\\\" title=\\\"Research Car Models\\\">Research Car Models</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-car-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-car-reviews\\\" ng-href=\\\"/reviews/\\\" target=\\\"_self\\\" title=\\\"Review a Car\\\">Review a Car</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-find-a-dealer\\\">\\n                                                                                <a name=\\\"&lid=header-find-a-dealer\\\" ng-href=\\\"/dealers/buy/\\\" target=\\\"_self\\\" title=\\\"Find a Dealer\\\">Find a Dealer</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-dealer-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-dealer-reviews\\\" ng-href=\\\"/dealers/buy/\\\" target=\\\"_self\\\" title=\\\"Review a Dealer\\\">Review a Dealer</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-book-values-buy\\\">\\n                                                                                <a name=\\\"&lid=header-book-values-buy\\\" ng-href=\\\"/sell/book-value/\\\" target=\\\"_self\\\" title=\\\"Estimate Used Car Values\\\">Estimate Used Car Values</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-finance\\\">\\n                                                                                <a name=\\\"&lid=header-finance\\\" ng-href=\\\"/finance/\\\" target=\\\"_self\\\" title=\\\"Estimate Your Payments\\\">Estimate Your Payments</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-cpo\\\">\\n                                                                                <a name=\\\"&lid=header-cpo\\\" ng-href=\\\"https://www.cars.com/shop/cpo/\\\" target=\\\"_self\\\" title=\\\"Certified Pre-Owned Cars\\\">Certified Pre-Owned Cars</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Sell\\\" menu-name=\\\"Sell\\\" target-class-name=\\\"navbar-item-link\\\"  data-customlink=\\\"click\\\" data-linkname=\\\"header-sell\\\"><span class=\\\"navbar-item-label\\\">Sell &amp; Trade</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Sell\\\" men-name=\\\"Sell\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-sell-your-car\\\">\\n                                                                                <a name=\\\"&lid=header-sell-your-car\\\" ng-href=\\\"/sell/\\\" target=\\\"_self\\\" title=\\\"Sell Your Car\\\">Sell Your Car</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-book-values-sell\\\">\\n                                                                                <a name=\\\"&lid=header-book-values-sell\\\" ng-href=\\\"/sell/book-value/\\\" target=\\\"_self\\\" title=\\\"Find Your Car&#x27;s Value\\\">Find Your Car&#x27;s Value</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-selling-tips\\\">\\n                                                                                <a name=\\\"&lid=header-selling-tips\\\" ng-href=\\\"/sell/how-to/\\\" target=\\\"_self\\\" title=\\\"How to Sell Your Car\\\">How to Sell Your Car</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-my-sell-ad\\\">\\n                                                                                <a name=\\\"&lid=header-my-sell-ad\\\" ng-href=\\\"/sell/profile\\\" target=\\\"_self\\\" title=\\\"My Cars.com Listing\\\">My Cars.com Listing</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"Service\\\" menu-name=\\\"Service\\\" target-class-name=\\\"navbar-item-link\\\"  data-customlink=\\\"click\\\" data-linkname=\\\"header-service\\\"><span class=\\\"navbar-item-label\\\">Service &amp; Repair</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"Service\\\" men-name=\\\"Service\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-service-estimate\\\">\\n                                                                                <a name=\\\"&lid=header-service-estimate\\\" ng-href=\\\"/auto-repair/\\\" target=\\\"_self\\\" title=\\\"Get a Service Estimate\\\">Get a Service Estimate</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-service-shop\\\">\\n                                                                                <a name=\\\"&lid=header-service-shop\\\" ng-href=\\\"/auto-repair/#rpc-details\\\" target=\\\"_self\\\" title=\\\"Find a Service Center\\\">Find a Service Center</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-service-tips\\\">\\n                                                                                <a name=\\\"&lid=header-expert-tips\\\" ng-href=\\\"/auto-repair/expert-tips/\\\" target=\\\"_self\\\" title=\\\"Service &amp; Repair Advice\\\">Service &amp; Repair Advice</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"\\\">\\n                                                                                <a name=\\\"&lid=header-get-recalls\\\" ng-href=\\\"/recalls/\\\" target=\\\"_self\\\" title=\\\"Safety &amp; Recall Notices\\\">Safety &amp; Recall Notices</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-car-maintenance\\\">\\n                                                                                <a name=\\\"&lid=header-car-maintenance\\\" ng-href=\\\"/news/maintenance-101/ \\\" target=\\\"_self\\\" title=\\\"Car Maintenance 101\\\">Car Maintenance 101</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n\\n                                            <li class=\\\"navbar-item\\\"><a class=\\\"navbar-item-link nav-item-menu\\\" cui-dropdown-launch=\\\"News Landing Page\\\" menu-name=\\\"News Landing Page\\\" target-class-name=\\\"navbar-item-link\\\"  data-customlink=\\\"click\\\" data-linkname=\\\"header-news\\\"><span class=\\\"navbar-item-label\\\">News</span>\\n                                                <span class=\\\"navbar-item-decoration\\\"><cui-icon name=\\\"chevron\\\"></cui-icon></span></a>\\n\\n                                                <div cui-dropdown ng-cloak name=\\\"News Landing Page\\\" men-name=\\\"News Landing Page\\\" class=\\\"submenu\\\">\\n                                                        <div class=\\\"submenu-container\\\">\\n                                                            <a class=\\\"close cars-animated-fade-in\\\"> <cui-icon name=\\\"close\\\" class=\\\"ng-isolate-scope\\\"></cui-icon></a>\\n                                                            <div class=\\\"list-container\\\" ng-class=\\\"getColumnCount()\\\">\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-car-news\\\">\\n                                                                                <a name=\\\"&lid=header-car-news\\\" ng-href=\\\"/news/\\\" target=\\\"_self\\\" title=\\\"Latest Car News\\\">Latest Car News</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-latest-reviews\\\">\\n                                                                                <a name=\\\"&lid=header-latest-reviews\\\" ng-href=\\\"/news/Car-Reviews\\\" target=\\\"_self\\\" title=\\\"Latest Car Reviews\\\">Latest Car Reviews</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-latest-videos\\\">\\n                                                                                <a name=\\\"&lid=header-latest-videos\\\" ng-href=\\\"/news/Video\\\" target=\\\"_self\\\" title=\\\"Latest Videos\\\">Latest Videos</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-awards\\\">\\n                                                                                <a name=\\\"&lid=header-awards\\\" ng-href=\\\"/awards\\\" target=\\\"_self\\\" title=\\\"Awards\\\">Awards</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-multi-car-comparisons\\\">\\n                                                                                <a name=\\\"&lid=header-multi-car-comparisons\\\" ng-href=\\\"/news/Multi-Car-Comparison/\\\" target=\\\"_self\\\" title=\\\"Multi-Car Comparisons\\\">Multi-Car Comparisons</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-updates-trends\\\">\\n                                                                                <a name=\\\"&lid=header-updates-trends\\\" ng-href=\\\"/news/Car-Buying/\\\" target=\\\"_self\\\" title=\\\"Updates &amp; Trends\\\">Updates &amp; Trends</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-first-time\\\">\\n                                                                                <a name=\\\"&lid=header-first-time\\\" ng-href=\\\"/news/First-Time-Buyers/\\\" target=\\\"_self\\\" title=\\\"Help for First-Time Buyers\\\">Help for First-Time Buyers</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-seat-check\\\">\\n                                                                                <a name=\\\"&lid=header-seat-check\\\" ng-href=\\\"/news/Car-Seat-Check/\\\" target=\\\"_self\\\" title=\\\"Child Car Seat Checks\\\">Child Car Seat Checks</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                                    <ul class=\\\"submenu-column cars-nav-animated-fade-in\\\">\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-det\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-det\\\" ng-href=\\\"/news/Detroit-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"Detroit Auto Show\\\">Detroit Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-chi\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-chi\\\" ng-href=\\\"/news/Chicago-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"Chicago Auto Show\\\">Chicago Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-ny\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-ny\\\" ng-href=\\\"/news/new-york-auto-show\\\" target=\\\"_self\\\" title=\\\"New York Auto Show\\\">New York Auto Show</a>\\n                                                                            </li>\\n                                                                            <li  data-customlink=\\\"\\\" data-linkname=\\\"header-auto-show-la\\\">\\n                                                                                <a name=\\\"&lid=header-auto-show-la\\\" ng-href=\\\"/news/LA-Auto-Show/\\\" target=\\\"_self\\\" title=\\\"LA Auto Show\\\">LA Auto Show</a>\\n                                                                            </li>\\n                                                                    </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                </div>\\n\\n                                            </li>\\n\\n                                        <li class=\\\"navbar-item mobile\\\"><a href=\\\"https://secure.opinionlab.com/ccc01/o.asp?id=VuvIfpRR\\\" target=\\\"_blank\\\" class=\\\"navbar-item-link\\\">[+] Feedback</a></li>\\n                                        </ul>\\n\\n                                    <ul class=\\\"navbar-list menu-bg user-prof-settings\\\">\\n                                        <cars-nav-user-settings></cars-nav-user-settings>\\n                                    </ul>\\n                                    <ul class=\\\"navbar-list mobile-menu-icon-container\\\">\\n                                        <li class=\\\"navbar-item mobile-menu-icon\\\">\\n                                            <a class=\\\"navbar-item-link\\\" href=\\\"javascript:void(0)\\\" ng-click=\\\"toggleMobileNavMenu()\\\" item-name=\\\"settings\\\">\\n                                                <div class=\\\"mobile-menu-icon-render\\\"><span></span></div>\\n                                            </a>\\n                                        </li>\\n                                    </ul>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n</cars-global-sticky-header>\\n\\n     <noscript>\\n        <div class=\\\"col-group\\\">\\n          <div class=\\\"col-mb-12\\\">\\n            <div class=\\\"alert-message warning\\\">\\n              <p>For best performance, please check your browser settings for blocked content.</p>\\n            </div>\\n          </div>\\n        </div>\\n      </noscript>\\n\\n</cars-feature-flags>\\n\\n</div>\\n\\n\\n\\n        <div class=\\\"page-body\\\">\\n            <div class=\\\"clearfix\\\"></div>\\n            <div itemscope itemtype=\\\"http://schema.org/Car\\\"><!--vehicle schema-->\\n\\n                \\n\\n                <cars-set-ad-cat-info key=\\\"map\\\" value=\\\"{&quot;make&quot;:&quot;GMC&quot;,&quot;model&quot;:&quot;Acadia&quot;,&quot;makeId&quot;:20061,&quot;modelId&quot;:20607,&quot;adCatInfo&quot;:&quot;gmc|acadia|crossover_midsize&quot;}\\\"></cars-set-ad-cat-info>\\n\\n<div class=\\\"mmy-header\\\" style=\\\"position: relative;\\n                              background-image: linear-gradient(174deg, rgba($white,0) 0%, rgba($white, 0) 30%, rgba(179,179,179, 0.5) 70%, $lighter-gray 70%, $lighter-gray 100%);\\n                              background-position: center;\\n                              background-repeat: no-repeat;\\\">\\n    <div class=\\\"mmy-header__title\\\" style=\\\"clearfix();\\n                                            padding: 4.2rem 1.6rem 0;\\n                                            max-width: 1170px;\\n                                            margin: 0 auto;\\n                                            position: relative;\\\">\\n        <div class=\\\"mmy-header__title-year\\\" style=\\\"display: flex;\\n                                                    align-items: baseline;\\\">\\n            <h1 itemprop=\\\"name\\\" class=\\\"cui-alpha\\\" style=\\\"margin-right: 1.6rem;\\n                                                        display: inline-block;\\\">2016 GMC Acadia</h1>\\n            <meta itemprop=\\\"model\\\" content=\\\"gmc acadia\\\">\\n\\n                <a data-linkname=\\\"change-year\\\" data-customlink=\\\"page-state\\\" class=\\\"mmy-header__otheryears\\\" style=\\\"white-space: nowrap;\\\" href=\\\"\\\" cars-modal-launch=\\\"other-years-modal\\\"\\n                   cars-common-dtm-clickthru=\\\"[{method: 'push', property: 'event', key: 'event', value: {eventName: 'flyout-open'}, emit: true}]\\\" >Change Year</a>\\n        </div>\\n            <div itemprop=\\\"aggregateRating\\\" itemscope itemtype=\\\"http://schema.org/AggregateRating\\\" class=\\\"mmy-header__stars\\\">\\n                <meta itemprop=\\\"ratingValue\\\" content=\\\"4.8\\\">\\n                <meta itemprop=\\\"bestRating\\\" content=\\\"5.0\\\">\\n                <meta itemprop=\\\"worstRating\\\" content=\\\"0.0\\\">\\n                <cars-star-rating  itemprop=\\\"ratingValue\\\" rating=\\\"4.8\\\" show-count=\\\"true\\\"></cars-star-rating>\\n                <noscript>4.8 out of 5.0 stars</noscript>\\n                <a href=\\\"consumer-reviews\\\" class=\\\"rating-link\\\"><span itemprop=\\\"reviewCount\\\">8</span> reviews</a>\\n            </div>\\n\\n\\n            <div class=\\\"mmy-header__awards\\\">\\n                <span class=\\\"flag\\\">Best Bet</span>\\n            </div>\\n\\n        <div ng-if=\\\"false\\\" class=\\\"hero-slider-wrapper\\\" style=\\\"width: 100%;\\n                                                            height: auto;\\n                                                            overflow: hidden;\\n                                                            position: relative;\\n                                                            text-align: center;\\n                                                            margin-top: 20px;\\n                                                            padding: 1.6rem 0;\\n                                                            max-height: 325px;\\n                                                            display: inline-block;\\\" cars-standard-link=\\\"view-photo-gallery-hero\\\" cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\">\\n            <div class=\\\"hero-slider-clearfix\\\" style=\\\"text-align: center;\\n                                                      padding-top: 45%;\\n                                                      max-height: 325px;\\n                                                      cursor: pointer;\\\">\\n                <img class=\\\"placeholder-image\\\" src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.png\\\" style=\\\"width: 80%;\\n                                                                                max-width: 500px;\\n                                                                                position: absolute;\\n                                                                                top: 0;\\n                                                                                bottom: 0;\\n                                                                                left: 0;\\n                                                                                right: 0;\\n                                                                                margin-left: auto;\\n                                                                                margin-right: auto;\\\"/>\\n            </div>\\n        </div>\\n\\n        <cui-carousel ng-cloak\\n                      class=\\\"mmy-carousel-dt\\\"\\n                      per-page=\\\"1\\\"\\n                      unlimited-scroll=\\\"true\\\"\\n                      enable-nav-circles=\\\"true\\\"\\n                      max-items=\\\"3\\\"\\n                      animation-type=\\\"fade\\\"\\n                      scrollable-card-class=\\\"hero-slider-wrapper\\\">\\n\\n                <div class=\\\"hero-slider-wrapper\\\" cars-standard-link=\\\"view-photo-gallery-hero\\\" cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\">\\n                    <div class=\\\"hero-slider-clearfix\\\">\\n                        <img itemprop=\\\"image\\\" class=\\\"slide nonDraggableImage\\\"\\n                             src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.png\\\"/>\\n                    </div>\\n                </div>\\n\\n        </cui-carousel>\\n\\n            <div class=\\\"mmy-header__gallery\\\">\\n                <div class=\\\"gallery__link\\\" data-linkname=\\\"view-photo-gallery-text\\\" data-customlink=\\\"page-state\\\" cars-standard-link=\\\"view-photo-gallery-text\\\"\\n                     cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\" cars-photo-lightbox-layout=\\\"list\\\">\\n                    <div ng-cloak class=\\\"gallery__link-icon\\\">\\n                        <cui-icon name=\\\"gallery\\\"></cui-icon>\\n                        <b>15</b>\\n                    </div>\\n                            <span>Photos</span>\\n                    <noscript>15 photos of 2016 GMC Acadia</noscript>\\n                </div>\\n            </div>\\n\\n        <script>if (window.performance && window.performance.mark) {window.performance.mark(\\\"mmyLoadEnd\\\");}</script>\\n        <script>if (window.performance && window.performance.measure) {window.performance.measure(\\\"mmyLoad\\\", \\\"pageLoadStart\\\", \\\"mmyLoadEnd\\\");}</script>\\n\\n    </div>\\n</div>\\n\\n<cars-photo-lightbox name=\\\"mmy-gallery-lightbox\\\"\\n                     tracking-page-name=\\\"New Cars/Research/MMY/multi_photo_popup\\\"\\n                     photo-ads=\\\"[{ position: 3, size: 'cube', slot: '6427/buy.research/ymm.photo.iab' }]\\\"\\n                     images=\\\"[&quot;http://www.cstatic-images.com/stock/900x600/1434993474945.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993471895.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472018.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472070.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473567.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993471962.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473671.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993474434.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993475010.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472186.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472095.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473427.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472923.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473630.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473726.jpg&quot;]\\\"\\n                     videos=\\\"\\\"\\n                     views=\\\"[{&quot;locationInterior&quot;:&quot;http://multimedia.cars.com/evox/interior/10540_sm.swf&quot;,&quot;locationExterior&quot;:&quot;http://multimedia.cars.com/evox/exterior/10540_ex036_640.swf&quot;}]\\\">\\n</cars-photo-lightbox>\\n<noscript>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993474945.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993471895.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472018.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472070.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473567.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993471962.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473671.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993474434.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993475010.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472186.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472095.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473427.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472923.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473630.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n    <img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473726.jpg\\\"style=\\\"width: 80%;\\n                                max-width: 500px;\\n                                top: 0;\\n                                bottom: 0;\\n                                left: 0;\\n                                right: 0;\\n                                margin-left: auto;\\n                                margin-right: auto;\\\"/>\\n</noscript>\\n\\n<cars-modal-beta ng-cloak  name=\\\"other-years-modal\\\">\\n    <div class=\\\"dialog-mmy-viewotheryears\\\">\\n        <h2 class=\\\"cui-beta\\\">Other Years</h2>\\n        <ul class=\\\"mmy-otheryears__list\\\">\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2017/\\\"> 2017</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2015/\\\"> 2015</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2014/\\\"> 2014</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2013/\\\"> 2013</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2012/\\\"> 2012</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2011/\\\"> 2011</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2010/\\\"> 2010</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2009/\\\"> 2009</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2008/\\\"> 2008</a>\\n            </li>\\n            <li>\\n                <a data-linkname=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2007/\\\"> 2007</a>\\n            </li>\\n        </ul>\\n    </div>\\n</cars-modal-beta>\\n\\n<section class=\\\"mmy-dashboard\\\" id=\\\"mmyDashboard\\\">\\n\\n    <div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\">\\n        <meta itemprop=\\\"name\\\" content=\\\"GMC Acadia\\\">\\n        <div class=\\\"card container\\\">\\n                    <span class=\\\"mmy-info__msrp\\\" content=\\\"30975-49890\\\" itemprop=\\\"priceSpecification\\\" itemscope itemtype=\\\"http://schema.org/PriceSpecification\\\">\\n                        <b>MSRP Range</b>\\n                        <em itemprop=\\\"priceCurrency\\\" content=\\\"USD\\\">$</em><em itemprop=\\\"price\\\" content=\\\"30975\\\">30,975</em>-<em itemprop=\\\"maxPrice\\\" content=\\\"49890\\\">$49,890</em>\\n                    </span>\\n\\n                <span class=\\\"mmy-info__range\\\"><b>Trims</b>11</span>\\n\\n                <span class=\\\"mmy-info__mpg\\\"><b>Combined MPG</b> 18 </span>\\n\\n                <span class=\\\"mmy-info__seating\\\"><b>Seats</b> 7-8 </span>\\n        </div>\\n    </div>\\n</section>\\n\\n\\n<div ng-cloak class=\\\"container forSale-container\\\">\\n    <div class=\\\"mmy-forSale\\\">\\n        <div class=\\\"mmy-forSale__left\\\">\\n            <cars-link-to-search ods-make-id=\\\"20061\\\" ods-model-id=\\\"20607\\\" ods-year-id=\\\"58487\\\" tracking-name=\\\"cars-for-sale\\\" slug=\\\"gmc-acadia-2016\\\" expand-search=true>\\n                <a ng-href=\\\"test-drive/\\\" class=\\\"cui-button\\\" cars-common-omniture-standard=\\\"test-drive\\\">Test Drive</a>\\n            </cars-link-to-search>\\n        </div>\\n    </div>\\n</div>\\n\\n<cars-jump-nav></cars-jump-nav>\\n\\n    <div ng-cloak id=\\\"mmy-our-take\\\" class=\\\"mmy-section mmy-overview add-to-jump-nav\\\" data-name=\\\"Our Take\\\">\\n        <cars-ad class=\\\"mmy-ads\\\" slot=\\\"6427/buy.research/ymm.iab.10\\\" size=\\\"research-leader\\\" targeting=\\\"{&quot;make&quot;:&quot;gmc&quot;,&quot;model&quot;:&quot;acadia&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;crossover_midsize&quot;}\\\"></cars-ad>\\n\\n        <h2 class=\\\"overview-title cui-beta at-least-tablet\\\">Our Take on the 2016 GMC Acadia</h2>\\n        <h2 class=\\\"cui-beta only-mb\\\">Our Take</h2>\\n\\n        <div class=\\\"mmy-overview__awards\\\">\\n            <span class=\\\"flag\\\">Best Bet</span>\\n            <a cars-modal-launch=\\\"best-bets-modal\\\" cars-custom-link=\\\"best-bet-criteria\\\" href=\\\"#\\\">View Our Criteria</a>\\n            <cars-research-shared-best-bets-modal></cars-research-shared-best-bets-modal>\\n        </div>\\n\\n        <div class=\\\"ad-contain--cube\\\">\\n            <cars-ad class=\\\"cube-ad\\\" slot=\\\"6427/buy.research/ymm.iab.20\\\" size=\\\"cube-desktop\\\" targeting=\\\"{&quot;make&quot;:&quot;gmc&quot;,&quot;model&quot;:&quot;acadia&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;crossover_midsize&quot;}\\\"></cars-ad>\\n            <cars-mmy-logo-text-ad slot=\\\"'6427/buy.research/ymm.reg.short'\\\" ad-params=\\\"{&quot;make&quot;:&quot;gmc&quot;,&quot;model&quot;:&quot;acadia&quot;,&quot;year&quot;:2016,&quot;cat&quot;:&quot;crossover_midsize&quot;}\\\"></cars-mmy-logo-text-ad>\\n        </div>\\n\\n        <div>\\n            <p class=\\\"article-byline__author\\\">By <strong>Cars.com Editors</strong></p>\\n\\n            <p class=\\\"mmy-overview__desc\\\">  The GMC Acadia is a full-size crossover SUV that is related to the Chevrolet Traverse and Buick Enclave. It&apos;s available with front- or all-wheel drive and can seat seven or eight people. Competitors include the Ford Explorer, Mazda CX-9 and Honda Pilot. The standard OnStar communication sys... <a href=\\\"../gmc-acadia-2016/whats-new/\\\" cars-common-omniture-standard=\\\"read-full-report\\\" class=\\\"full-review-link\\\">Read Full Report</a> </p>\\n        </div>\\n\\n        <div class=\\\"mmy-overview__lists\\\">\\n            <div class=\\\"mmy-overview__like\\\">\\n                <cui-icon name=\\\"thumbs-up\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta\\\">What We Like</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>Carlike ride and handling</li>\\n                    <li>Cargo space</li>\\n                    <li>Roomy second row</li>\\n                    <li>Backup camera standard</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"mmy-overview__dontlike\\\">\\n                <cui-icon name=\\\"thumbs-up\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta\\\">What We Don't Like</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>Cramped third row</li>\\n                    <li>Touch-screen too small</li>\\n                    <li>Large turning circle</li>\\n                    <li>Hulking size hurts maneuverability</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"mmy-overview__features\\\">\\n                <cui-icon name=\\\"features\\\"></cui-icon>\\n                <h3 class=\\\"cui-delta features-header\\\">Notable Features</h3>\\n                <ul class=\\\"standard-list\\\">\\n                    <li>OnStar 4G LTE connectivity and Wi-Fi hot spot</li>\\n                    <li>Seats seven or eight</li>\\n                    <li>Front- or all-wheel drive</li>\\n                    <li>Airbag between front seats available</li>\\n                    <li>Forward collision alert, lane departure warning available</li>\\n                </ul>\\n            </div>\\n        </div>\\n    </div>\\n<div ng-cloak id=\\\"mmy-reviews\\\"class=\\\"mmy-section mmy-reviews add-to-jump-nav\\\" data-name=\\\"Reviews\\\">\\n    <h2 class=\\\"cui-beta\\\">Reviews</h2>\\n    <div class=\\\"mmy-reviews__container\\\">\\n    \\n        <div class=\\\"mmy-reviews__consumer\\\">\\n    \\t<h3 class=\\\"cui-delta\\\">Consumer Reviews</h3>\\n        <div class=\\\"mmy-reviews__average\\\">\\n            <cars-star-rating class=\\\"large\\\" rating=\\\"4.8\\\" show-count=\\\"false\\\"></cars-star-rating>\\n            <strong>4.8<noscript> stars</noscript></strong>\\n            <p>Average based on 8 reviews</p>\\n        </div>\\n        <div class=\\\"mmy-reviews__stars\\\">\\n            <noscript>5 out of 5 stars</noscript>\\n            <cars-star-rating rating=\\\"5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n        </div>\\n\\n        <h4 class=\\\"cui-zeta\\\">Best vehicle for my family</h4>\\n        <div class=\\\"mmy-reviews__meta\\\">by <span >shon </span> from Seminole, FL\\n            <span class=\\\"mmy-reviews__date\\\">on March 31, 2016</span>\\n        </div>\\n        <div class=\\\"mmy-reviews__blurb\\\">\\n            <p>My husband & I got thid vehicle less than a year ago, this is by far the best for us & the kids. Very spacious for a large family, still learning to use all the new technologies. Great on gas, alot of...\\n                    <a href=\\\"/research/gmc-acadia-2016/consumer-reviews/#63226426\\\" cars-common-omniture-standard=\\\"read-full-consumer-review\\\" class=\\\"full-review-link\\\">\\n                        Read Full Review\\n                    </a>\\n            </p>\\n        </div>\\n\\n            <div>\\n                <a href=\\\"/research/gmc-acadia-2016/consumer-reviews/\\\" class=\\\"button secondary\\\">Read All Consumer Reviews</a>\\n            </div>\\n    </div>\\n\\n\\n    </div>\\n</div>\\n\\n<div id=\\\"mmy-trims\\\" class=\\\"mmy-section mmy-trims add-to-jump-nav\\\" data-name=\\\"Trims\\\">\\n    <h2 class=\\\"cui-beta\\\">11 Trims Available</h2>\\n\\n    <noscript>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SL\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>30975</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLE-1\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>34175</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLE-1\\n                            <span class=\\\"trim_listing__description\\\">All-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>36175</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>All-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLE-2\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>36755</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLE-2\\n                            <span class=\\\"trim_listing__description\\\">All-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>38755</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>All-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLT-1\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>41020</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLT-2\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>42295</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLT-1\\n                            <span class=\\\"trim_listing__description\\\">All-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>43020</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>All-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">SLT-2\\n                            <span class=\\\"trim_listing__description\\\">All-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>44295</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>281-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>All-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC40GMS241E021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Denali\\n                            <span class=\\\"trim_listing__description\\\">Front-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>47890</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>288-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>Front-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"trim_listing\\\">\\n            <div>\\n\\n                    <div class=\\\"trim_listing__image\\\">\\n                        <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC40GMS241E021001.jpg\\\">\\n                    </div>\\n\\n                <div class=\\\"trim_listing__details\\\">\\n                    <div class=\\\"trim_listing__header\\\">\\n                        <h2 class=\\\"cui-delta trim_listing__title\\\">Denali\\n                            <span class=\\\"trim_listing__description\\\">All-wheel Drive</span>\\n                        </h2>\\n                        <span class=\\\"trim_listing__price\\\"><sup>$</sup>49890</span>\\n                        <span class=\\\"trim_listing__msrp\\\">Starting MSRP</span>\\n                    </div>\\n                    <div class=\\\"trim_listing__body\\\">\\n                        <span>18 MPG Combined</span>\\n                        <span>288-hp, 3.6-liter V-6 (regular gas)</span>\\n                        <span>6-speed automatic w/OD and auto-manual</span>\\n                        <span>All-wheel Drive</span>\\n                        <span>Seats </span>\\n                        <div ng-if=\\\"trim.optionalEngines.length > 0 || trim.optionalTransmissions.length > 0\\\" class=\\\"trim_moreInfo\\\">\\n                            <p class=\\\"helper-text\\\"><strong>Optional Engines and Transmissions</strong></p>\\n                            <p class=\\\"helper-text\\\">\\n                                <span ng-repeat=\\\"optionalEngine in trim.optionalEngines\\\"></span>\\n                                <span ng-repeat=\\\"optionalTransmission in trim.optionalTransmissions\\\"></span>\\n                            </p>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </noscript>\\n\\n    <cars-mmy-trim-compare trim-results=\\\"{&quot;aCode&quot;:&quot;USC60GMS242E0&quot;,&quot;aCodeTrim&quot;:&quot;Denali&quot;,&quot;trimSummaryCount&quot;:11,&quot;modelInfo&quot;:{&quot;make&quot;:&quot;GMC&quot;,&quot;model&quot;:&quot;Acadia&quot;,&quot;year&quot;:&quot;2016&quot;,&quot;minMsrp&quot;:30975,&quot;maxMsrp&quot;:49890,&quot;seats&quot;:&quot;7-8&quot;,&quot;defaultPhoto&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60GMS241D021001&quot;,&quot;defaultPhotoDesc&quot;:&quot;2016 GMC Acadia FWD&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;bodyStyle&quot;:&quot;Sport Utility&quot;},&quot;bestBet&quot;:true,&quot;fuelEconomy&quot;:{&quot;cityMin&quot;:15,&quot;cityMax&quot;:15,&quot;hwyMin&quot;:22,&quot;hwyMax&quot;:22,&quot;combinedMin&quot;:18,&quot;combinedMax&quot;:18},&quot;defaultImage&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.png&quot;,&quot;trimSummary&quot;:[{&quot;aCode&quot;:&quot;USC60GMS241A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SL&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:30975,&quot;invoice&quot;:30820.13,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:31900,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS241B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLE-1&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:34175,&quot;invoice&quot;:32466.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:33391.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS242A0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLE-1&quot;,&quot;trimExtendedDesc&quot;:&quot;All-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;All-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:36175,&quot;invoice&quot;:34366.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:35291.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS241C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLE-2&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:36755,&quot;invoice&quot;:34917.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:35842.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS242B0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLE-2&quot;,&quot;trimExtendedDesc&quot;:&quot;All-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;All-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC30GMS241A021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:38755,&quot;invoice&quot;:36817.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:37742.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS241D0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLT-1&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:41020,&quot;invoice&quot;:38969,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:39894,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS241E0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLT-2&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:42295,&quot;invoice&quot;:40180.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:41105.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS242C0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLT-1&quot;,&quot;trimExtendedDesc&quot;:&quot;All-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;All-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:43020,&quot;invoice&quot;:40869,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:41794,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS242D0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;SLT-2&quot;,&quot;trimExtendedDesc&quot;:&quot;All-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;All-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC60GMS241D021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:44295,&quot;invoice&quot;:42080.25,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:43005.25,&quot;engine&quot;:[&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;281-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS241F0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Denali&quot;,&quot;trimExtendedDesc&quot;:&quot;Front-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;Front-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC40GMS241E021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC40GMS241E021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:47890,&quot;invoice&quot;:45495.5,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:46420.5,&quot;engine&quot;:[&quot;288-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;288-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]},{&quot;aCode&quot;:&quot;USC60GMS242E0&quot;,&quot;iihsTopSafetyPick&quot;:false,&quot;trimDesc&quot;:&quot;Denali&quot;,&quot;trimExtendedDesc&quot;:&quot;All-wheel Drive&quot;,&quot;cylinders&quot;:6,&quot;cityMpg&quot;:15,&quot;hwyMpg&quot;:22,&quot;combinedMpg&quot;:18,&quot;driveTrain&quot;:&quot;All-wheel Drive&quot;,&quot;defaultPhotoUrl&quot;:&quot;https://www.cstatic-images.com/car-pictures/xl/USC40GMS241E021001.jpg&quot;,&quot;defaultPhotoName&quot;:&quot;USC40GMS241E021001.jpg&quot;,&quot;defaultPhotoSource&quot;:&quot;CHROME&quot;,&quot;msrp&quot;:49890,&quot;invoice&quot;:47395.5,&quot;destinationCharge&quot;:925,&quot;enginesCount&quot;:1,&quot;seats&quot;:&quot;7-8&quot;,&quot;transmissionsCount&quot;:1,&quot;smartTargetPrice&quot;:48320.5,&quot;engine&quot;:[&quot;288-hp, 3.6-liter V-6 (regular gas)&quot;],&quot;transmission&quot;:[&quot;6-speed automatic w/OD and auto-manual&quot;],&quot;standardEngine&quot;:&quot;288-hp, 3.6-liter V-6 (regular gas)&quot;,&quot;standardTransmission&quot;:&quot;6-speed automatic w/OD and auto-manual&quot;,&quot;optionalEngines&quot;:[],&quot;optionalTransmissions&quot;:[]}],&quot;mmySlug&quot;:&quot;gmc-acadia-2016&quot;,&quot;isNew&quot;:true}\\\"></cars-mmy-trim-compare>\\n\\n    <div class=\\\"info--notify\\\">\\n        <cui-icon name=\\\"icon-lightbulb\\\"></cui-icon>\\n        <p>A trim is a style of a vehicle model. Each higher trim has different or upgraded features from the previous trim along with a price increase.\\n            <a href=\\\"\\\" cars-custom-link=\\\"page-state\\\" cars-modal-launch=\\\"learnMoreTrimsModal\\\" class=\\\"info__link ng-binding\\\">Learn more about trims</a>\\n        </p>\\n    </div>\\n\\n    <cars-modal-beta ng-cloak name=\\\"learnMoreTrimsModal\\\" width-class=\\\"medium\\\" class=\\\"mmy-warranty-modal\\\">\\u2028\\n        <div class=\\\"dialog__content\\\">\\n            <div class=\\\"dialog__content-body\\\">\\n                <h2 class=\\\"cui-beta\\\">Trims Explained</h2>\\n                <p>When talking about cars, \\u201ctrims\\u201d is a way of differentiating between different versions of the same model. Typically, most start with a no-frills, or \\u201cbase\\u201d trim, and as features are added, or a different engine, drivetrain (gas vs. hybrid, for example) or transmission are included, trim names change and prices go up. </p>\\n                </br>\\n                <p>It\\u2019s important to carefully check the trims of the car you\\u2019re interested in to make sure that you\\u2019re getting the features you want, or that you\\u2019re not overpaying for features you don\\u2019t want.</p>\\n            </div>\\n        </div>\\n    </cars-modal-beta>\\n\\n</div>\\n\\n<div ng-cloak id=\\\"mmy-gallery\\\" class=\\\"mmy-section mmy-gallery add-to-jump-nav\\\" data-name=\\\"Gallery\\\">\\n\\t<h2 class=\\\"cui-beta\\\">Gallery</h2>\\n\\t<div class=\\\"gallery-module \\\">\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993474945.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"0\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993471895.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"1\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472018.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"2\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993472070.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"3\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993473567.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"4\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"photo-wrapper\\\">\\n\\t\\t\\t<img src=\\\"http://www.cstatic-images.com/stock/900x600/1434993471962.jpg\\\">\\n            <div class=\\\"pic-overlay\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t cars-photo-lightbox-index=\\\"5\\\"\\n\\t\\t\\t\\t cars-standard-link=\\\"gallery-thumb\\\"></div>\\n\\t\\t\\t\\t<span class=\\\"last-overlay\\\"\\n\\t\\t\\t\\t\\t  cars-photo-lightbox-launch=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t\\t  cars-standard-link=\\\"gallery-thumb\\\">+9</span>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n<cars-photo-lightbox name=\\\"mmy-gallery-lightbox\\\"\\n\\t\\t\\t\\t\\t tracking-page-name=\\\"New Cars/Research/MMY/multi_photo_popup\\\"\\n\\t\\t\\t\\t\\t photo-ads=\\\"[{ position: 1, size: 'cube', slot: '6427/buy.research/ymm.photo.iab' }]\\\"\\n\\t\\t\\t\\t\\t images=\\\"[&quot;http://www.cstatic-images.com/stock/900x600/1434993474945.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993471895.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472018.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472070.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473567.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993471962.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473671.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993474434.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993475010.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472186.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472095.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473427.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993472923.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473630.jpg&quot;,&quot;http://www.cstatic-images.com/stock/900x600/1434993473726.jpg&quot;]\\\"\\n\\t\\t\\t\\t\\t videos=\\\"\\\"\\n\\t\\t\\t\\t\\t views=\\\"[&quot;http://multimedia.cars.com/evox/interior/10540_sm.swf&quot;,&quot;http://multimedia.cars.com/evox/exterior/10540_ex036_640.swf&quot;]\\\">\\n</cars-photo-lightbox>\\n\\n<div id=\\\"mmy-safety\\\" class=\\\"safety-module mmy-safety mmy-section add-to-jump-nav\\\" data-name=\\\"Safety\\\">\\n    <h2 class=\\\"cui-beta\\\">Safety</h2>\\n\\n    <div class=\\\"mmy-safety__ratings\\\">\\n        <h3 class=\\\"cui-delta subtitle\\\">Crash-Test Reports</h3>\\n\\n            <div class=\\\"mmy-safety__rating iihs-module col-12\\\">\\n        <h4 class=\\\"cui-epsilon\\\">IIHS Ratings</h4>\\n        <p class=\\\"mmy-safety__desc\\\">Based on GMC Acadia Denali</p>\\n        <dl class=\\\"mmy-safety__ratingslist\\\">\\n                <dt>Head Restraints and Seats</dt>\\n                <dd>\\n                    <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                    <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                </dd>\\n                <dt>Moderate overlap front</dt>\\n                <dd>\\n                    <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                    <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                </dd>\\n                <dt>Roof Strength</dt>\\n                <dd>\\n                    <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                    <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                </dd>\\n                <dt>Side</dt>\\n                <dd>\\n                    <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                    <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                </dd>\\n        </dl>\\n\\n        <button data-linkname=\\\"view-IIHS-rating-breakdown\\\"\\n                data-customlink=\\\"page-state\\\"\\n                class=\\\"cui-button--secondary js-iihs\\\"\\n                cars-custom-link=\\\"view-IIHS-rating-breakdown\\\"\\n                type=\\\"button\\\"\\n                cars-modal-launch=\\\"safety-iihs-modal\\\"\\n                cars-common-dtm-clickthru=\\\"[{method: 'push', property: 'event', key: 'event', value: {eventName: 'flyout-open'}, emit: true}]\\\" >View IIHS Rating Breakdown</button>\\n\\n        <cars-modal-beta ng-cloak name=\\\"safety-iihs-modal\\\" width-class=\\\"medium\\\" class=\\\"mmy-safety-iihs-modal\\\">\\n            <h2 class=\\\"cui-beta\\\">IIHS Ratings</h2>\\n\\t\\t\\t<p class=\\\"mmy-safety__modaldesc\\\">Based on GMC Acadia Denali</p>\\n            <div class=\\\"mmy-safety__ratingskey\\\">\\n\\t\\t\\t\\t<div class=\\\"mmy-safety__keyitem\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n\\t\\t\\t\\t\\tGood\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"mmy-safety__keyitem\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"icon-rating icon-rating--acceptable\\\">A</span>\\n\\t\\t\\t\\t\\tAcceptable\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"mmy-safety__keyitem\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"icon-rating icon-rating--marginal\\\">M</span>\\n\\t\\t\\t\\t\\tMarginal\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"mmy-safety__keyitem\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"icon-rating icon-rating--poor\\\">P</span>\\n\\t\\t\\t\\t\\tPoor\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\n                <p class=\\\"mmy-safety__listheading\\\">Child Seat Anchors (Latch)</p>\\n                <dl class=\\\"mmy-safety__ratingslist\\\">\\n                        <dt>Ease of Use</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--marginal\\\">M</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--marginal\\\"> marginal</span></noscript>\\n                        </dd>\\n                </dl>\\n                <p class=\\\"mmy-safety__listheading\\\">Head Restraints and Seats</p>\\n                <dl class=\\\"mmy-safety__ratingslist\\\">\\n                        <dt>Dynamic Rating</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Overall Rear</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Seat Head/Restraint Geometry</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                </dl>\\n                <p class=\\\"mmy-safety__listheading\\\">Moderate overlap front</p>\\n                <dl class=\\\"mmy-safety__ratingslist\\\">\\n                        <dt>Chest</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Head/Neck</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Left Leg/Foot</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Overall Front</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Restraints</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Right Leg/Foot</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Structure/safety cage</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                </dl>\\n                <p class=\\\"mmy-safety__listheading\\\">Other</p>\\n                <dl class=\\\"mmy-safety__ratingslist\\\">\\n                        <dt>Roof Strength</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                </dl>\\n                <p class=\\\"mmy-safety__listheading\\\">Side</p>\\n                <dl class=\\\"mmy-safety__ratingslist\\\">\\n                        <dt>Driver Head Protection</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Driver Head and Neck</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Driver Pelvis/Leg</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Driver Torso</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Overall Side</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Rear Passenger Head Protection</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Rear Passenger Head and Neck</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Rear Passenger Pelvis/Leg</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Rear Passenger Torso</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                        <dt>Structure/safety cage</dt>\\n                        <dd>\\n                            <span class=\\\"icon-rating icon-rating--good\\\">G</span>\\n                            <noscript><span class=\\\"icon-rating icon-rating--good\\\"> good</span></noscript>\\n                        </dd>\\n                </dl>\\n\\n\\t\\t\\t<div class=\\\"disclaimer\\\">\\n\\t\\t\\t\\t<small>Insurance Institute for Highway Safety (IIHS) is a nonprofit research and communications organization funded by auto insurers. IIHS rates vehicles good, acceptable, marginal or poor based on performance in high-speed front and side crash tests. IIHS also evaluates seat/head restraints for protection against neck injuries in rear impacts.</small>\\n\\t\\t\\t</div>\\n        </cars-modal-beta>\\n    </div>\\n\\n\\n        <div class=\\\"mmy-safety__rating nhtsa-module col-12\\\">\\n  <h4 class=\\\"cui-epsilon\\\">NHTSA Ratings</h4>\\n    <p class=\\\"mmy-safety__desc\\\">Based on GMC Acadia Denali</p>\\n    <dl class=\\\"mmy-safety__ratingslist\\\">\\n            <dt>Overall</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>5 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Front</dt>\\n            <dd><cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>5 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Side</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>5 out of 5 stars</span></noscript>\\n            </dd>\\n            <dt>Overall Rollover Rating</dt>\\n            <dd>\\n                <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                <noscript><span>4 out of 5 stars</span></noscript>\\n            </dd>\\n    </dl>\\n\\n   <button data-linkname=\\\"view-NHTSA-rating-breakdown\\\"\\n           data-customlink=\\\"page-state\\\"\\n           class=\\\"cui-button--secondary js-nhtsa\\\"\\n           type=\\\"button\\\"\\n           cars-custom-link=\\\"view-NHTSA-rating-breakdown\\\" cars-modal-launch=\\\"safety-nhtsa-modal\\\"\\n           cars-common-dtm-clickthru=\\\"[{method: 'push', property: 'event', key: 'event', value: {eventName: 'flyout-open'}, emit: true}]\\\" >View NHTSA Rating Breakdown</button>\\n\\n    <cars-modal-beta ng-cloak name=\\\"safety-nhtsa-modal\\\" width-class=\\\"medium\\\" class=\\\"mmy-warranty-modal\\\">\\u2028\\n    <div class=\\\"mmy-nhtsa-modal\\\">\\n\\n      <div class=\\\"dialog__content\\\">\\n        <div class=\\\"dialog__content-body\\\">\\n          <h2 class=\\\"cui-beta\\\">NHTSA Ratings</h2>\\n          <p class=\\\"mmy-safety__modaldesc\\\">Based on GMC Acadia Denali</p>\\n          <div class=\\\"mmy-safety__ratingslist\\\">\\n              <dl class=\\\"mmy-safety__ratingslist\\\">\\n                      <dt>Overall</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt>Overall Front</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n\\n                      <dt>Overall Side</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt>Overall Rollover Rating</dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"4\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>4 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Driver&#x27;s </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Passenger&#x27;s </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier Rating Driver </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Barrier Rating Passenger Rear Seat </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole Barrier combined (Front) </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n                      <dt> Side Pole Barrier combined (Rear) </dt>\\n                      <dd>\\n                          <cars-star-rating rating=\\\"5\\\" color=\\\"purple\\\"></cars-star-rating>\\n                          <noscript><span>5 out of 5 stars</span></noscript>\\n                      </dd>\\n              </dl>\\n          </div>\\n          <div class=\\\"disclaimer\\\">\\n            <small>National Highway Traffic Safety Administration (NHTSA) is part of the U.S. Department of Transportation. NHTSA provides vehicle safety information such as front- and side-crash ratings and rollover ratings. Vehicles are rated using a star rating system from 1-5 stars, with 5 being the highest.</small>\\n          </div>\\n        </div>\\n      </div>\\n     </div>\\n    </cars-modal-beta>\\n</div>\\n\\n    </div>\\n    <div class=\\\"clearfix\\\"></div>\\n    <div class=\\\"mmy-safety__recalls\\\">\\n        <div class=\\\"recalls\\\">\\n    <h3 class=\\\"cui-delta\\\">Recalls</h3>\\n    <div class=\\\"mmy-safety__recalls\\\">\\n\\n\\n                <p class=\\\"mmy-safety__recallscount\\\">\\n                    There are currently <a data-linkname=\\\"recalls-total\\\" data-customlink=\\\"click\\\" cars-standard-link=\\\"recalls-total\\\" href=\\\"/recalls/gmc-acadia-2016/\\\"><b>2</b> recalls</a> for this car.\\n                </p>\\n\\n\\n            <div class=\\\"mmy-safety__learn\\\">\\n                <cui-icon name=\\\"icon-lightbulb\\\"></cui-icon>\\n                <p>Safety defects and recalls are relatively common. Stay informed and know what to do ahead of time.</p>\\n                <p><a data-linkname=\\\"recalls-explained\\\" data-customlink=\\\"click\\\" cars-standard-link=\\\"recalls-explained\\\" href=\\\"/recalls/\\\">Safety defects and recalls explained</a></p>\\n            </div>\\n    </div>\\n    <div class=\\\"clearfix\\\"></div>\\n\\n</div>\\n\\n    </div>\\n\\n    <div class=\\\"clearfix\\\"></div>\\n</div>\\n\\n\\n<section ng-cloak class=\\\"mmy-section mmy-similar\\\" id=\\\"mmySimilar\\\">\\n    <h2 class=\\\"cui-beta\\\">Similar Models</h2>\\n    <p class=\\\"center\\\">Select up to three models to compare with the 2016 GMC Acadia</p>\\n    <div class=\\\"slider\\\">\\n        <cars-select-container max-selections=\\\"3\\\" cars-modal-listener=\\\"{ 'similarCompareMax': 'cars:selection:max-selected' }\\\">\\n            <cui-carousel ng-class=\\\"{'mmy-carousel-dt': desktopClass, 'tablet': tabletClass}\\\"\\n                          per-page=\\\"4\\\"\\n                          per-page-tablet=\\\"3\\\"\\n                          right-scroll-tracking-name=\\\"collab-right-scroll\\\"\\n                          left-scroll-tracking-name=\\\"collab-left-scroll\\\"\\n                          left-scroll-dtm-name=\\\"collab-left-scroll\\\"\\n                          left-scroll-dtm-custom-link=\\\"page-state\\\"\\n                          right-scroll-dtm-name=\\\"collab-right-scroll\\\"\\n                          right-scroll-dtm-custom-link=\\\"page-state\\\"\\n                          dtm-page-state=\\\"{method: 'push', property: 'event', key: 'event', value: {eventName: 'scroll'}, emit: true}\\\"\\n                          animation-type=\\\"none\\\"\\n                          unlimited-scroll=\\\"false\\\"\\n                          scrollable-card-class=\\\"mmy-similar__vehicle\\\">\\n\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('nissan-pathfinder-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('nissan-pathfinder-2016', 'nissan-pathfinder-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/windshield/research/nissan-pathfinder-2016/\\\" cars-standard-link=\\\"similar-mmy\\\" data-linkname=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60NIS071C021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Nissan Pathfinder</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.4\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">5 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $29,830 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n\\n                <cars-mmy-compare-spotlight-ad class=\\\"no-ad-data\\\"\\n                                               slot=\\\"6427/buy.research/ymm.spons.vehicle\\\"\\n                                               ad-params='{\\\"canonicMakeName\\\": \\\"gmc\\\", \\\"canonicModelName\\\": \\\"acadia\\\", \\\"year\\\": \\\"2016\\\", \\\"adCategoryInfo\\\": \\\"crossover_midsize\\\"}'\\n                                               is-selected=\\\"ctrl.isSelected('AD')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('AD', $slug)\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                </cars-mmy-compare-spotlight-ad>\\n\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('toyota-4runner-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('toyota-4runner-2016', 'toyota-4runner-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/toyota-4runner-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60TOS072F021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Toyota 4Runner</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.8\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">13 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $34,010 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('buick-enclave-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('buick-enclave-2016', 'buick-enclave-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/buick-enclave-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC30BUS031A021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Buick Enclave</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.8\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">4 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $39,065 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('ford-expedition_el-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('ford-expedition_el-2016', 'ford-expedition_el-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/ford-expedition_el-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60FOS311E021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Ford Expedition EL</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">1 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $48,145 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('honda-pilot-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('honda-pilot-2016', 'honda-pilot-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/honda-pilot-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60HOS032D021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Honda Pilot</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.4\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">41 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $30,345 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('dodge-durango-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('dodge-durango-2016', 'dodge-durango-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/dodge-durango-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60DOS012D021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Dodge Durango</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">4 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $30,495 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('chevrolet-traverse-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('chevrolet-traverse-2016', 'chevrolet-traverse-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/chevrolet-traverse-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHS291E021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Chevrolet Traverse</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.2\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">6 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $28,700 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('toyota-highlander-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('toyota-highlander-2016', 'toyota-highlander-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/toyota-highlander-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60TOS141D021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Toyota Highlander</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.6\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">19 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $30,490 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('chevrolet-tahoe-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('chevrolet-tahoe-2016', 'chevrolet-tahoe-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/chevrolet-tahoe-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60CHS111B021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Chevrolet Tahoe</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"5\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">7 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $47,000 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('kia-sorento-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('kia-sorento-2016', 'kia-sorento-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/kia-sorento-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60KIS022C021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Kia Sorento</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.9\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">41 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $25,100 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('mazda-cx_9-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('mazda-cx_9-2016', 'mazda-cx_9-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/mazda-cx_9-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60MAS042D021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Mazda CX-9</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"3.7\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">3 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $31,520 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n                    <cars-mmy-compare-vehicles class=\\\"mmy-similar__vehicle\\\"\\n                                               is-selected=\\\"ctrl.isSelected('jeep-grand_cherokee-2016')\\\"\\n                                               is-select-mode=\\\"anySelected\\\"\\n                                               select=\\\"ctrl.toggle('jeep-grand_cherokee-2016', 'jeep-grand_cherokee-2016')\\\"\\n                                               is-selectable=\\\"!maxSelected\\\">\\n                        <div>\\n                            <a href=\\\"/research/jeep-grand_cherokee-2016\\\" cars-standard-link=\\\"similar-mmy\\\">\\n                                <div class=\\\"listing__photo\\\">\\n                                    <img src=\\\"https://www.cstatic-images.com/car-pictures/xl/USC60JES052A021001.jpg\\\"/>\\n                                </div>\\n                                <div class=\\\"mmy-similar__details\\\">\\n                                    <h6>2016 Jeep Grand Cherokee</h6>\\n                                        <div class=\\\"mmy-reviews__stars\\\">\\n                                            <cars-star-rating rating=\\\"4.7\\\" show-count=\\\"false\\\"></cars-star-rating>\\n                                            <div class=\\\"reviews\\\">6 Reviews</div>\\n                                        </div>\\n                                        <span class=\\\"result-msrp\\\">Starting MSRP</span>\\n                                        <span class=\\\"result-price\\\"> $29,995 </span>\\n                                </div>\\n                            </a>\\n                        </div>\\n                    </cars-mmy-compare-vehicles>\\n            </cui-carousel>\\n            <div ng-show=\\\"anySelected\\\">\\n                <div class=\\\"compare-button-trim center_align\\\">\\n                    <button ng-click=\\\"cancel()\\\" class=\\\"cui-button--secondary\\\">Cancel</button>\\n                    <a ng-href=\\\"../compare/?vehicles=gmc-acadia-2016,{{selectedValues.join(',')}}\\\" class=\\\"cui-button\\\"\\n                       cars-common-omniture-standard=\\\"similar-cars-compare-submit\\\">\\n                        Compare Now\\n                    </a>\\n                </div>\\n            </div>\\n\\n            <cars-modal-beta name=\\\"similarCompareMax\\\" close-on-back-button=\\\"true\\\" is-small=\\\"true\\\" ng-cloak>\\n\\n\\n                <h2 class=\\\"cui-beta\\\">You have selected maximum of 3 cars</h2>\\n                <p>Remove one of these cars to add others or compare the below cars now.</p>\\n                <div class=\\\"button-sticky\\\">\\n                    <a ng-href=\\\"../compare/?vehicles=gmc-acadia-2016,{{selectedValues.join(',')}}\\\" class=\\\"cui-button\\\"\\n                       cars-common-omniture-standard=\\\"similar-cars-compare-submit\\\">Compare Now</a>\\n                </div>\\n            </cars-modal-beta>\\n\\n        </cars-select-container>\\n\\n    </div>\\n</section>\\n\\n\\t<div class=\\\"mmy-section mmy-other-years at-least-desktop\\\">\\n\\t\\t<h2 class=\\\"cui-beta\\\">Other Years</h2>\\n\\t\\t<ul class=\\\"mmy-other-years__list\\\" style=\\\"overflow:hidden;\\\">\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2017/\\\"> 2017 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2015/\\\"> 2015 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2014/\\\"> 2014 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2013/\\\"> 2013 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2012/\\\"> 2012 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2011/\\\"> 2011 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2010/\\\"> 2010 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2009/\\\"> 2009 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2008/\\\"> 2008 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<a data-linkname=\\\"other-years\\\" cars-standard-link=\\\"other-years\\\" href=\\\"/research/gmc-acadia-2007/\\\"> 2007 GMC Acadia </a>\\n\\t\\t\\t\\t </li>\\n\\t\\t</ul>\\n\\t</div>\\n\\n\\n                \\n\\n            </div>\\n        </div>\\n\\n        <div class=\\\"footer\\\" ng-controller=\\\"globalFooter\\\">\\n    <div class=\\\"container col-group\\\">\\n        <div class=\\\"col-mb-12 col-4 col-dt-4\\\">\\n            <h5 class=\\\"mob-comp\\\" ng-click=\\\"toggle('company')\\\">Our Company\\n                <a ng-show=\\\"!expanded && isMob\\\"> <cui-icon name=\\\"chevron\\\"> </a>\\n                <a ng-show=\\\"expanded && isMob\\\"> <cui-icon class=\\\"reverse-chevron\\\" name=\\\"chevron\\\"></a>\\n            </h5>\\n            <h5 class=\\\"desk-comp\\\">Our Company</h5>\\n            <ul ng-show=\\\"expanded\\\" class=\\\"toggle-footer\\\">\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/about/\\\" target=\\\"About Cars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">About Cars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/contact/\\\" target=\\\"Contact Cars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Contact Cars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/sitemap/\\\" target=\\\"Site Map\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Site Map</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/careers/\\\" target=\\\"Careers\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Careers</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"/sell/fraud/overview\\\" target=\\\"Fraud Awareness Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Fraud Awareness</a>\\n                </li>\\n        </div>\\n        <div class=\\\"col-mb-12 col-4 col-dt-4\\\">\\n            <h5 class=\\\"mob-comp\\\"  ng-click=\\\"toggle()\\\" >Our Partners\\n                <a ng-show=\\\"!partnerExpanded && isMob\\\"> <cui-icon name=\\\"chevron\\\"> </a>\\n                <a ng-show=\\\"partnerExpanded && isMob\\\"> <cui-icon class=\\\"reverse-chevron\\\" name=\\\"chevron\\\"></a>\\n            </h5>\\n            <h5 class=\\\"desk-comp\\\">Our Partners</h5>\\n            <ul ng-show=\\\"partnerExpanded\\\" class=\\\"toggle-footer partner\\\">\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.auto.com/\\\" target=\\\"Auto.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Auto.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.newcars.com/\\\" target=\\\"NewCars.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">NewCars.com</a>\\n                </li>\\n                <li class=\\\"footer-item\\\">\\n                    <a href=\\\"http://www.repairpal.com/\\\" target=\\\"RepairPal.com\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">RepairPal.com</a>\\n                </li>\\n                <li><cars-cobrand-footer></cars-cobrand-footer></li>\\n        </div>\\n        <div class=\\\"col-mb-12 col-4 col-dt-4 social-media\\\">\\n            <div class=\\\"social-buttons white\\\">\\n                <a href=\\\"https://twitter.com/carsdotcom/\\\" target=\\\"twitter\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"twitter\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"http://www.facebook.com/CarsDotCom/\\\" target=\\\"facebook\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"facebook\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"http://www.youtube.com/user/Carscom/\\\" target=\\\"youtube\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"youtube\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"https://plus.google.com/+CarsDotCom/posts/\\\" target=\\\"google\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"googleplus\\\"></cui-icon>\\n                </a>\\n                <a href=\\\"https://www.linkedin.com/company/cars-com\\\" target=\\\"linkedin\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">\\n                    <cui-icon name=\\\"linkedin\\\"></cui-icon>\\n                </a>\\n            </div>\\n\\n            <div id=\\\"footer-search-fields\\\">\\n                <form id=\\\"googlemini-foot\\\" action=\\\"/about/searchresults/\\\" method=\\\"get\\\" target=\\\"_top\\\">\\n                    <input type=\\\"text\\\" class=\\\"search-field\\\" id=\\\"textEntry\\\" name=\\\"q\\\" placeholder=\\\"Enter Make or Model\\\"\\n                           value=\\\"\\\" rel=\\\"Search Cars.com\\\">\\n                </form>\\n            </div>\\n            <div id=\\\"logo\\\">\\n                <span>Powered By</span>\\n                <cui-icon name=\\\"google\\\"></cui-icon>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"copyrights\\\">\\n        <div class=\\\"container col-group prev\\\">\\n            <div class=\\\"col-mb-11 col-7 col-dt-8\\\">\\n                <a href=\\\"/about/terms\\\" target=\\\"Terms Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Terms of Service</a>\\n                <a href=\\\"/about/privacy\\\" target=\\\"Privacy Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Privacy Statement</a>\\n                <a href=\\\"/about/ad-choices\\\" target=\\\"Ad Choices Nav Link\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">Ad Choices</a>\\n                <a href=\\\"https://secure.opinionlab.com/ccc01/o.asp?id&#x3D;VuvIfpRR\\\" target=\\\"OpinionLab\\\" dtm-data-custom-link=\\\"\\\" dtm-data-link-name=\\\"\\\">[+] Feedback</a>\\n            </div>\\n            <div class=\\\"col-mb-12 col-12 col-dt-4 footer-text\\\" id=\\\"footer-copyright\\\">&copy; 2016 Cars.com All rights\\n                reserved.\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div id=\\\"cars-omniture-tracking-pixel\\\"></div>\\n    <span id=\\\"font-div\\\"></span>\\n\\n    <script type=\\\"text/javascript\\\" data-font-load>\\n        var fontDiv = document.getElementById('font-div');\\n        // Load Fonts Asyncronously\\n        var ua = window.navigator.userAgent;\\n        var link1 = document.createElement('link');\\n        link1.setAttribute('rel', 'stylesheet');\\n        link1.setAttribute('type', 'text/css');\\n        var link2 = document.createElement('link');\\n        link2.setAttribute('rel', 'stylesheet');\\n        link2.setAttribute('type', 'text/css');\\n        if (typeof window.FontFace === 'function') {\\n            link1.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-sourcesanspro-woff2.css\\\");\\n            link2.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-effra-woff2.css\\\");\\n            fontDiv.appendChild(link1);\\n            fontDiv.appendChild(link2);\\n        } else if (ua && ua.indexOf(\\\"Android 4.\\\") > -1 && ua.indexOf(\\\"like Gecko\\\") > -1 && ua.indexOf(\\\"Chrome\\\") === -1) {\\n            link1.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-sourcesanspro-ttf.css\\\");\\n            link2.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-effra-ttf.css\\\");\\n            fontDiv.appendChild(link1);\\n            fontDiv.appendChild(link2);\\n        } else {\\n            link1.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-sourcesanspro-woff.css\\\");\\n            link2.setAttribute('href', \\\"/static/www/789b9a55bab2/app/fonts/css/data-effra-woff.css\\\");\\n            fontDiv.appendChild(link1);\\n            fontDiv.appendChild(link2);\\n        }\\n    </script>\\n\\n\\n\\n<script async src=\\\"https://cdnssl.clicktale.net/www06/ptc/a44a4e21-7e32-4ba1-b2b5-9cbee0e32537.js\\\"></script>\\n\\n    <script>\\n\\n        (function () {\\n\\n            var path, lastSegment, o, k, props, eVars, prop37, eVar37, breakpoint, orientation, width, height, previousBreakpoint, previousOrientation, affiliate;\\n\\n            var makeName = \\\"GMC\\\";\\n            var modelName = \\\"Acadia\\\";\\n            var year = \\\"2016\\\";\\n            var owcsPageName = \\\"New Cars/Research/MMY\\\";\\n            var channel = \\\"\\\";\\n            var events = \\\"\\\";\\n            var latitude;\\n            var longitude;\\n\\n            var SESSION_STORAGE_KEY_LAT = 'carsClientGeoLocationLatitude';\\n            var SESSION_STORAGE_KEY_LON = 'carsClientGeoLocationLongitude';\\n\\n            function _readCookie(cookieName) {\\n                var values = window.document.cookie.match('(^|;)\\\\\\\\s*' + cookieName + '\\\\\\\\s*=\\\\\\\\s*([^;]+)');\\n                return values ? values.pop() : null;\\n            }\\n\\n            affiliate = _readCookie('affiliate') || 'national';\\n            s_clven.server = '';\\n            props = CARSBRIDGE.getOmnitureBridgeValue('props');\\n            eVars = CARSBRIDGE.getOmnitureBridgeValue('evars');\\n            props.prop6 = props.prop18 = affiliate;\\n            path = window.location.pathname;\\n            lastSegment = ((/([^\\\\/]+)\\\\/$/.exec(path) || [])[1] || '').slice(0, 100);\\n            // default pageName & channel for entry point tracking\\n            // article details pages\\n            if (/^\\\\/articles\\\\/.+/.test(path)) {\\n                s_clven.channel = 'news';\\n                s_clven.pageName = s_clven.channel + '/article';\\n                previousCategory = (/\\\\/news\\\\/([^\\\\/]+)\\\\/$/.exec(document.referrer) || [])[1] || '';\\n                props.prop69 = 'article:' + previousCategory + '::' + lastSegment;\\n                // category index pages\\n            } else if (/\\\\/news\\\\/[^\\\\/]+\\\\/$/.test(path)) {\\n                s_clven.channel = 'news';\\n                s_clven.pageName = s_clven.channel + '/category';\\n                props.prop69 = 'category:' + lastSegment;\\n                // news landing page\\n            } else if (/^\\\\/news\\\\/$/.test(path)) {\\n                s_clven.channel = 'news';\\n                s_clven.pageName = s_clven.channel + '/index';\\n                props.prop69 = 'index';\\n            } else if(owcsPageName){\\n                s_clven.pageName = owcsPageName;\\n                s_clven.channel = channel;\\n            }\\n\\n            if(makeName) {\\n                s_clven.prop12 = s_clven.eVar12 = makeName;\\n            }\\n\\n            if(modelName) {\\n                s_clven.prop13 = s_clven.eVar13 = modelName;\\n            }\\n\\n            if(year) {\\n                s_clven.prop14 = s_clven.eVar14 = year;\\n            }\\n\\n            // This is a hack for passing data out of components and into tracking.\\n            // We will think about how to implement this more generically.\\n            if(window.dealerTrackingData) {\\n                s_clven.prop64 = window.dealerTrackingData;\\n            }\\n\\n            //pcid/pdid tracking\\n            var cV;\\n            var cvObj;\\n            try {\\n                cV = JSON.parse(localStorage.getItem('Cars.userData')).carsVisitor;\\n            } catch (e) {}\\n            try {\\n                cvObj = (!cV || (cV == 'null')) ? {pcid: null, pdid: undefined} : JSON.parse(cV);\\n                s_clven.eVar24 = cvObj.pdid;\\n                s_clven.prop57 = cvObj.pcid;\\n            } catch (e) {}\\n\\n            // responsive tracking\\n            width = Math.max(window.document.documentElement.clientWidth, window.innerWidth || 0);\\n            height = Math.max(window.document.documentElement.clientHeight, window.innerHeight || 0);\\n            orientation = (width > height) ? 'landscape' : 'portrait';\\n            if (width <= 767) {\\n                breakpoint = 'mobile';\\n            } else if (width <= 976) {\\n                breakpoint = 'tablet';\\n            } else if (width <= 1170) {\\n                breakpoint = 'desktop';\\n            } else if (width > 1170) {\\n                breakpoint = 'large-desktop';\\n            }\\n            if ((typeof props.prop37 === 'string') && (props.prop37.indexOf('|') >= 0)) {\\n                prop37 = props.prop37.split('|');\\n                prop37[0] = breakpoint + ':' + orientation + ':' + width;\\n                previousBreakpoint = prop37[1].split(':')[0];\\n                previousOrientation = prop37[1].split(':')[1];\\n                if (previousBreakpoint && breakpoint != previousBreakpoint) {\\n                    s_clven.events = (s_clven.events) ? s_clven.events + ',event62' : 'event62';\\n                }\\n                if (previousOrientation && orientation != previousOrientation) {\\n                    s_clven.events = (s_clven.events) ? s_clven.events + ',event61' : 'event61'\\n                }\\n                props.prop37 = prop37.join('|');\\n            } else {\\n                props.prop37 = breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width;\\n            }\\n            if ((typeof eVars.eVar37 === 'string') && (eVars.eVar37.indexOf('|') >= 0)) {\\n                eVar37 = eVars.eVar37.split('|');\\n                eVar37[0] = breakpoint + ':' + orientation + ':' + width;\\n                eVars.eVar37 = eVar37.join('|');\\n            } else {\\n                eVars.eVar37 = breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width;\\n            }\\n\\n            if (events) {\\n                if (s_clven.events) {\\n                    s_clven.events = s_clven.events + \\\",\\\" + events;\\n                } else {\\n                    s_clven.events = events;\\n                }\\n            }\\n\\n            // overwrite props coming in explicitly from omniture strategy\\n            // overwrite eVars coming in explicitly from omniture strategy\\n            // overwrite events coming in explicitly from omniture strategy\\n            CARSBRIDGE.setOmnitureBridgeValue('props', props);\\n            CARSBRIDGE.setOmnitureBridgeValue('evars', eVars);\\n            // overrides for page-over-page prop, evar, event & listvar tracking\\n            if (CARSBRIDGE.getOmnitureBridgeValue('props')) {\\n                o = CARSBRIDGE.getOmnitureBridgeValue('props');\\n                for (k in o) {\\n                    s_clven[k] = o[k];\\n                }\\n            }\\n            if (CARSBRIDGE.getOmnitureBridgeValue('evars')) {\\n                o = CARSBRIDGE.getOmnitureBridgeValue('evars');\\n                for (k in o) {\\n                    s_clven[k] = o[k];\\n                }\\n            }\\n            if (CARSBRIDGE.getOmnitureBridgeValue('events')) {\\n                o = CARSBRIDGE.getOmnitureBridgeValue('events');\\n                // events is a comma-delimited string, so be careful about additions\\n                if (s_clven.events) {\\n                    s_clven.events = s_clven.events + \\\",\\\" + o;\\n                } else {\\n                    s_clven.events = o;\\n                }\\n            }\\n            if (CARSBRIDGE.getOmnitureBridgeValue('listvars')) {\\n                o = CARSBRIDGE.getOmnitureBridgeValue('listvars');\\n                for (k in o) {\\n                    s_clven['list' + k] = o[k];\\n                }\\n            }\\n            // prevent them from firing on more than one page\\n            CARSBRIDGE.flushOmnitureBridgeValues();\\n            // setup responsive tracking for next page\\n            CARSBRIDGE.setOmnitureBridgeValue('props', {prop37: breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width});\\n            CARSBRIDGE.setOmnitureBridgeValue('evars', {eVar37: breakpoint + ':' + orientation + ':' + width + '|' + breakpoint + ':' + orientation + ':' + width});\\n\\n            // Optimizely SiteCatalyst Integration\\n            window.optimizely = window.optimizely || [];\\n            window.optimizely.push(['activateSiteCatalyst', {\\\"sVariable\\\": s_clven}]);\\n\\n            // Local storage always needs to be wrapped in a try/catch because\\n            // some browsers will have the session storage object, but not allow you to write to it.\\n            // eg: iPhone in private browsing mode...\\n            try {\\n                //pass logged in status to eVar57\\n                var browserUserObj = JSON.parse(localStorage.getItem('cars.userSummary')) || {};\\n                if ((browserUserObj.email || browserUserObj.firstName) && (browserUserObj.accessType === 'SIY')) {\\n                    s_clven.eVar57 = 'Logged In - Email';\\n                } else if (browserUserObj.firstName && browserUserObj.accessType === 'FB') {\\n                    s_clven.eVar57 = \\\"Logged In - Facebook\\\";\\n                } else {\\n                    s_clven.eVar57 = null;\\n                }\\n\\n            } catch(e) {}\\n\\n            // Session storage always needs to be wrapped in a try/catch because\\n            // some browsers will have the session storage object, but not allow you to write to it.\\n            // eg: iPhone in private browsing mode...\\n            try {\\n                latitude = sessionStorage.getItem(SESSION_STORAGE_KEY_LAT);\\n                longitude = sessionStorage.getItem(SESSION_STORAGE_KEY_LON);\\n            } catch(e) { }\\n\\n            function addListingData(){\\n                if (window.CARS && window.CARS.listing && window.CARS.listing.listingDetailDto){\\n                    var listing = window.CARS.listing.listingDetailDto;\\n                    s_clven.channel = (listing.stockTypeCode == \\\"New\\\" ? \\\"New \\\" : \\\"Used \\\") + \\\"Cars/Search\\\";\\n                    s_clven.pageName = s_clven.channel + \\\"/details-details-dealer\\\";\\n                    s_clven.prop2 = listing.customerId;\\n                    s_clven.prop3 = listing.listingId;\\n                    s_clven.prop4 = listing.stockTypeCode.toLowerCase();\\n                    s_clven.prop12 = s_clven.eVar12 = listing.makeName;\\n                    s_clven.prop13 = s_clven.eVar13 = listing.modelName;\\n                    s_clven.prop14 = s_clven.eVar14 = listing.modelYear;\\n                }\\n            }\\n\\n            function fireOmniture(lat, lon){\\n                var s_code;\\n\\n                if (owcsPageName === 'loading') {\\n                    // Suppress page load event when the page name is loading.\\n                    return;\\n                }\\n\\n                if(lat && lon) {\\n                    s_clven.eVar21 = lat + \\\"/\\\" + lon;\\n                }\\n\\n                addListingData();\\n\\n                s_code = s_clven.t();\\n\\n                if (s_code) {\\n                        document.write(s_code);\\n\\n                }\\n                document.close();\\n            }\\n\\n            function onPositionAcquired(position) {\\n                var lat = position.coords.latitude;\\n                var lon = position.coords.longitude;\\n                // Session storage always needs to be wrapped in a try/catch because\\n                // some browsers will have the session storage object, but not allow you to write to it.\\n                // eg: iPhone in private browsing mode...\\n                try {\\n                    sessionStorage.setItem(SESSION_STORAGE_KEY_LAT, lat);\\n                    sessionStorage.setItem(SESSION_STORAGE_KEY_LON, lon);\\n                } catch(e){ }\\n\\n                fireOmniture(lat, lon);\\n            }\\n\\n            function onPositionFailed() {\\n                fireOmniture();\\n            }\\n\\n            if (breakpoint === \\\"mobile\\\") {\\n\\n                if(latitude && longitude){\\n                    fireOmniture(latitude, longitude);\\n                } else if(navigator.geolocation){\\n                    navigator.geolocation.getCurrentPosition(onPositionAcquired, onPositionFailed, {timeout:8000,enableHighAccuracy:false});\\n                }\\n\\n            } else {\\n                fireOmniture();\\n            }\\n        }());\\n    </script>\\n\\n\\n            <script type=\\\"text/javascript\\\" src=\\\"/static/www/789b9a55bab2/vendor/js/vendor.js\\\"></script>\\n            <script type=\\\"text/javascript\\\" src=\\\"/static/www/789b9a55bab2/app/bundles/common.js\\\"></script>\\n            <script type=\\\"text/javascript\\\" src=\\\"/static/www/789b9a55bab2/app/bundles/researchMmy.js\\\"></script>\\n\\n        <script src=\\\"//carscomconsumer.collect.igodigital.com/collect.js\\\"></script>\\n        <script src=\\\"//www.googletagservices.com/tag/js/gpt.js\\\"></script>\\n\\n        <script type=\\\"text/javascript\\\">\\n            angular.bootstrap(document, window.modules);\\n\\n            ready(function () {\\n\\n\\n                /*setupOmniture({\\n                    makeName: \\\"GMC\\\",\\n                    modelName: \\\"Acadia\\\",\\n                    year: \\\"2016\\\",\\n                    pageName: \\\"New Cars/Research/MMY\\\",\\n                    channel: \\\"\\\"\\n                });*/\\n\\n                googletag.cmd.push(function () {\\n                    googletag.pubads().enableAsyncRendering();\\n                    googletag.pubads().enableSingleRequest();\\n                    googletag.pubads().collapseEmptyDivs(true);\\n                });\\n            });\\n        </script>\\n\\n\\n<script src=\\\"//s.btstatic.com/tag.js\\\">{\\n    site: \\\"4IGCP5L\\\"\\n}</script>\\n<noscript>\\n    <iframe src=\\\"//s.thebrighttag.com/iframe?c=4IGCP5L\\\" width=\\\"1\\\" height=\\\"1\\\" frameborder=\\\"0\\\" scrolling=\\\"no\\\"\\n            marginheight=\\\"0\\\" marginwidth=\\\"0\\\"></iframe>\\n</noscript>\\n\\n<script type=\\\"text/javascript\\\">_satellite.pageBottom();</script>\\n\\n<!-- FallBack for Flexbox use in safari 8 or previous -->\\n<script type=\\\"text/javascript\\\">\\n    var ua = navigator.userAgent;\\n    if (ua.indexOf('Safari') !== -1) {\\n        var version = ua.match(/Version\\\\/(\\\\d+)/) || [];\\n        if (parseInt(version[1]) <= 8) {\\n            document.getElementsByClassName('page')[0].style.display = 'block';\\n        }\\n    }\\n\\n</script>\\n\\n<script type=\\\"text/javascript\\\">\\n    if (JSON.parse(localStorage.getItem(\\\"cars.userSummary\\\")).email) {\\n        _etmc.push([\\\"setOrgId\\\", \\\"MID\\\"]);\\n        _etmc.push([\\\"setUserInfo\\\", {\\\"email\\\": JSON.parse(localStorage.getItem(\\\"cars.userSummary\\\")).email}]);\\n        _etmc.push([\\\"trackPageView\\\"]);\\n    }\\n</script>\\n\\n\\n    </div>\\n\\n</body>\\n</html>\\n\",\n    \"page_id\": \"\",\n    \"page_type\": \"item\",\n    \"plugins\": {\n        \"annotations-plugin\": {\n            \"extracts\": [\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": null,\n                    \"id\": \"99d8-4e55-b46d\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"schema_id\": \"8b0c-44a1-9f45\",\n                    \"selector\": \".page-body > div:nth-child(2)\",\n                    \"siblings\": 0,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": \"99d8-4e55-b46d\",\n                    \"field\": \"subitem1\",\n                    \"id\": \"bc5a-4d37-82a7\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"schema_id\": \"4bc8-4b9a-95a1\",\n                    \"selector\": \".page-body > div:nth-child(2)\",\n                    \"siblings\": 0,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"em:nth-child(3)\"\n                    ],\n                    \"container_id\": \"bc5a-4d37-82a7\",\n                    \"data\": {\n                        \"e9ab-490d-9f16\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"8a86-4a96-a035\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"4684-449a-8fbc\",\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".page-body > div:nth-child(2) > .mmy-dashboard > div > .card > .mmy-info__msrp > em:nth-child(3)\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".cui-alpha\"\n                    ],\n                    \"container_id\": \"bc5a-4d37-82a7\",\n                    \"data\": {\n                        \"2a98-487f-b4f3\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"b6e1-4281-ae27\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"4508-4a5e-851e\",\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".page-body > div:nth-child(2) > .mmy-header > .mmy-header__title > .mmy-header__title-year > .cui-alpha\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"b:nth-child(2)\"\n                    ],\n                    \"container_id\": \"99d8-4e55-b46d\",\n                    \"data\": {\n                        \"9980-4049-8333\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"7148-4450-9df2\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"d227-4cad-84a2\",\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".page-body > div:nth-child(2) > .mmy-header > .mmy-header__title > .mmy-header__gallery > .gallery__link > .gallery__link-icon > b\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".rating-link\"\n                    ],\n                    \"container_id\": \"99d8-4e55-b46d\",\n                    \"data\": {\n                        \"225f-4df5-a82d\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"b04c-4fe6-9c2d\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"d315-4193-8a5d\",\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".page-body > div:nth-child(2) > .mmy-header > .mmy-header__title > .mmy-header__stars > .rating-link\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".photo-wrapper:nth-child(1) > img\"\n                    ],\n                    \"container_id\": \"99d8-4e55-b46d\",\n                    \"data\": {\n                        \"20f9-4af9-8194\": {\n                            \"attribute\": \"src\",\n                            \"extractors\": {},\n                            \"field\": \"e9b1-4b01-b628\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"8d9f-4fd2-a876\",\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".page-body > div:nth-child(2) > .mmy-gallery > .gallery-module > div:nth-child(1) > img\"\n                }\n            ]\n        }\n    },\n    \"schemas\": {\n        \"4bc8-4b9a-95a1\": {\n            \"fields\": {\n                \"55f0-4671-89e5\": {\n                    \"id\": \"55f0-4671-89e5\",\n                    \"name\": \"field1\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"0084-480e-99f1\": {\n                    \"id\": \"0084-480e-99f1\",\n                    \"name\": \"field2\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"be49-4d40-92a3\": {\n                    \"id\": \"be49-4d40-92a3\",\n                    \"name\": \"field3\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"b16a-4cdd-a995\": {\n                    \"auto_created\": true,\n                    \"id\": \"b16a-4cdd-a995\",\n                    \"name\": \"field4\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"8a86-4a96-a035\": {\n                    \"auto_created\": true,\n                    \"id\": \"8a86-4a96-a035\",\n                    \"name\": \"price\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"b6e1-4281-ae27\": {\n                    \"auto_created\": true,\n                    \"id\": \"b6e1-4281-ae27\",\n                    \"name\": \"title\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"123\"\n        },\n        \"8b0c-44a1-9f45\": {\n            \"fields\": {\n                \"7148-4450-9df2\": {\n                    \"id\": \"7148-4450-9df2\",\n                    \"name\": \"photos\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"b04c-4fe6-9c2d\": {\n                    \"id\": \"b04c-4fe6-9c2d\",\n                    \"name\": \"review\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"e9b1-4b01-b628\": {\n                    \"id\": \"e9b1-4b01-b628\",\n                    \"name\": \"image\",\n                    \"required\": false,\n                    \"type\": \"image\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"GMC Acadia Reviews Specs and Prices Carscom\"\n        }\n    },\n    \"scrapes\": \"\",\n    \"results\": [{\n        \"_template\": \"9342-43b3-a5a5\",\n        \"_type\": \"GMC Acadia Reviews Specs and Prices Carscom\",\n        \"image\": [\n            \"http://www.cstatic-images.com/stock/900x600/1434993474945.jpg\"\n        ],\n        \"photos\": [\n            \"15\"\n        ],\n        \"review\": [\n            \"8 reviews\"\n        ],\n        \"subitem1\": {\n            \"_type\": \"123\",\n            \"price\": [\n                \"30,975\"\n            ],\n            \"title\": [\n                \"2016 GMC Acadia\"\n            ]\n        },\n        \"url\": \"http://url\"\n    }],\n    \"url\": \"https://www.cars.com/research/gmc-acadia-2016/\",\n    \"version\": \"0.13.0b28\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/cs-cart.json",
    "content": "{\n  \"extractors\": {},\n  \"id\": \"e1bb-4478-9995\",\n  \"name\": \"electronics-cameras-photo-camcorders-compact\",\n  \"original_body\": \"\\n<!DOCTYPE html>\\n<html \\n lang=\\\"en\\\" dir=\\\"ltr\\\">\\n<head>\\n<title>Electronics :: Cameras &amp; Photo :: Camcorders :: Compact Full HD Camcorder</title>\\n\\n<base href=\\\"http://demo.cs-cart.com/\\\" />\\n<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=utf-8\\\" data-ca-mode=\\\"full\\\" />\\n<meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\\\" />\\n\\n<meta name=\\\"description\\\" content=\\\" The T10 camcorder was designed to capture memories in comfort and in style It boasts an ultra compact size alightweight body and a brushed metal finish creating a subtle but sophisticated look and feel In fact its smooth curves fit so comfortably in your hand it makes shooting video for longer\\\" />\\n\\n\\n<meta name=\\\"keywords\\\" content=\\\"\\\" />\\n\\n    <link rel=\\\"canonical\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/\\\" />\\n\\n\\n\\n<link title=\\\"English\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"en\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=en\\\" />\\n<link title=\\\"German\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"de\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=de\\\" />\\n<link title=\\\"العربية\\\" dir=\\\"rtl\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"ar\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ar\\\" />\\n<link title=\\\"Čeština\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"cs\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=cs\\\" />\\n<link title=\\\"Danish\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"da\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=da\\\" />\\n<link title=\\\"Ελληνικά\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"el\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=el\\\" />\\n<link title=\\\"French\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"fr\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=fr\\\" />\\n<link title=\\\"Hrvatski\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"hr\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=hr\\\" />\\n<link title=\\\"Hungarian\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"hu\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=hu\\\" />\\n<link title=\\\"Italiano\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"it\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=it\\\" />\\n<link title=\\\"日本語\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"ja\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ja\\\" />\\n<link title=\\\"ქართული\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"ka\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ka\\\" />\\n<link title=\\\"Nederlands\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"nl\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=nl\\\" />\\n<link title=\\\"Norsk\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"no\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=no\\\" />\\n<link title=\\\"Polski\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"pl\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=pl\\\" />\\n<link title=\\\"Português Brasileiro\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"pt\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=pt\\\" />\\n<link title=\\\"Română\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"ro\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ro\\\" />\\n<link title=\\\"Русский\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"ru\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ru\\\" />\\n<link title=\\\"Slovak\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"sk\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sk\\\" />\\n<link title=\\\"Türkçe\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"tr\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=tr\\\" />\\n<link title=\\\"Spanish\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"es\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=es\\\" />\\n<link title=\\\"Українська\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"uk\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=uk\\\" />\\n<link title=\\\"Vietnamese\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"vi\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=vi\\\" />\\n<link title=\\\"Serbian\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"sr\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sr\\\" />\\n<link title=\\\"Swedish\\\" dir=\\\"ltr\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"sv\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sv\\\" />\\n<link title=\\\"پارسی\\\" dir=\\\"rtl\\\" type=\\\"text/html\\\" rel=\\\"alternate\\\" hreflang=\\\"fa\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=fa\\\" />\\n\\n<meta name=\\\"format-detection\\\" content=\\\"telephone=no\\\">\\n\\n\\n\\n    <link href=\\\"http://demo.cs-cart.com/images/logos/1/favicon.ico\\\" rel=\\\"shortcut icon\\\" type=\\\"image/x-icon\\\" />\\n\\n\\n<link type=\\\"text/css\\\" rel=\\\"stylesheet\\\" href=\\\"http://demo.cs-cart.com/var/cache/misc/assets/design/themes/responsive/css/standalone.71ba080ffa8f433394c6ea51f80b29c31477395032.css\\\" />\\n\\n<script type=\\\"text/javascript\\\" data-no-defer>\\n(function(i,s,o,g,r,a,m){\\n    i['GoogleAnalyticsObject']=r;\\n    i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();\\n    a=s.createElement(o), m=s.getElementsByTagName(o)[0];\\n    a.async=1;\\n    a.src=g;\\n    m.parentNode.insertBefore(a,m)\\n})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\\nga('create', 'UA-417963-1', 'auto');\\nga('send', 'pageview', '/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/');\\n</script>\\n\\n\\n</head>\\n\\n<body>\\n    \\n                                    \\n\\n\\n<div class=\\\"ty-top-panel\\\"><div id=\\\"minimize_block\\\" class=\\\"ty-top-panel__wrapper\\\"><div class=\\\"ty-top-panel__logo\\\"><a href=\\\"https://www.cs-cart.com/compare.html\\\" class=\\\"ty-top-panel__logo-link\\\" target=\\\"_blank\\\"><i class=\\\"ty-top-panel__icon-basket ty-icon-basket\\\"></i></a></div><h4 class=\\\"ty-top-panel__title\\\">Demo store panel</h4><div class=\\\"ty-top-panel-action\\\"><span class=\\\"ty-top-panel-action_item\\\"><span class=\\\"ty-top-panel__timer\\\"> Demo will be reset in: <strong id=\\\"timer\\\"></strong> minute(s)</span><a href=\\\"http://demo.cs-cart.com/admin.php\\\" class=\\\"ty-top-panel-btn cm-no-ajax\\\">Go to Administration panel</a></span><a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?demo_customize_theme=Y\\\" id=\\\"setting_customize\\\" class=\\\"ty-top-panel-action__setting ty-top-panel-action_item\\\" title=\\\"Enable Theme editor\\\"><i class=\\\"ty-top-panel-action__icon-setting ty-icon-wrench\\\"></i></a><a id=\\\"off_minimize_block\\\" class=\\\"ty-top-panel__close ty-top-panel-action_item cm-combination-panel cm-save-state cm-ss-reverse\\\"><i class=\\\"ty-icon-cancel\\\"></i></a></div></div><a id=\\\"on_minimize_block\\\" class=\\\"minimize-label cm-combination-panel cm-save-state cm-ss-reverse hidden\\\"><i class=\\\"minimize-label__icon ty-icon-down-open\\\"></i></a></div>\\n        \\n        <div class=\\\"ty-tygh  ty-top-panel-padding\\\" id=\\\"tygh_container\\\">\\n\\n        <div id=\\\"ajax_overlay\\\" class=\\\"ty-ajax-overlay\\\"></div>\\n<div id=\\\"ajax_loading_box\\\" class=\\\"ty-ajax-loading-box\\\"></div>\\n\\n        <div class=\\\"cm-notification-container notification-container\\\">\\n</div>\\n\\n        <div class=\\\"ty-helper-container\\\" id=\\\"tygh_main_container\\\">\\n            \\n                 \\n                \\n<div class=\\\"tygh-top-panel clearfix\\\">\\n    <div class=\\\"container-fluid  top-grid\\\">\\n                    \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span4 top-links-grid\\\" >\\n                <div class=\\\" top-languages    ty-float-left\\\">\\n        <div id=\\\"languages_1\\\">\\n                                            <div class=\\\"ty-select-wrapper\\\">\\n        \\n    <a class=\\\"ty-select-block__a cm-combination\\\" id=\\\"sw_select_en_wrap_language\\\">\\n                    <i class=\\\"ty-select-block__a-flag ty-flag ty-flag-us cm-external-click\\\" data-ca-external-click-id=\\\"sw_select_en_wrap_language\\\" ></i>\\n                <span class=\\\"ty-select-block__a-item hidden-phone hidden-tablet\\\">English</span>\\n        <i class=\\\"ty-select-block__arrow ty-icon-down-micro\\\"></i>\\n    </a>\\n\\n    <div id=\\\"select_en_wrap_language\\\" class=\\\"ty-select-block cm-popup-box hidden\\\">\\n        <ul class=\\\"cm-select-list ty-select-block__list ty-flags\\\">\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=en\\\" class=\\\"ty-select-block__list-a is-active \\\" data-ca-country-code=\\\"us\\\" data-ca-name=\\\"en\\\">\\n                                            <i class=\\\"ty-flag ty-flag-us\\\"></i>\\n                                        English                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=de\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"de\\\" data-ca-name=\\\"de\\\">\\n                                            <i class=\\\"ty-flag ty-flag-de\\\"></i>\\n                                        German                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ar\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"sa\\\" data-ca-name=\\\"ar\\\">\\n                                            <i class=\\\"ty-flag ty-flag-sa\\\"></i>\\n                                        العربية                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=cs\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"cz\\\" data-ca-name=\\\"cs\\\">\\n                                            <i class=\\\"ty-flag ty-flag-cz\\\"></i>\\n                                        Čeština                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=da\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"dk\\\" data-ca-name=\\\"da\\\">\\n                                            <i class=\\\"ty-flag ty-flag-dk\\\"></i>\\n                                        Danish                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=el\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"gr\\\" data-ca-name=\\\"el\\\">\\n                                            <i class=\\\"ty-flag ty-flag-gr\\\"></i>\\n                                        Ελληνικά                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=fr\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"fr\\\" data-ca-name=\\\"fr\\\">\\n                                            <i class=\\\"ty-flag ty-flag-fr\\\"></i>\\n                                        French                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=hr\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"hr\\\" data-ca-name=\\\"hr\\\">\\n                                            <i class=\\\"ty-flag ty-flag-hr\\\"></i>\\n                                        Hrvatski                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=hu\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"hu\\\" data-ca-name=\\\"hu\\\">\\n                                            <i class=\\\"ty-flag ty-flag-hu\\\"></i>\\n                                        Hungarian                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=it\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"it\\\" data-ca-name=\\\"it\\\">\\n                                            <i class=\\\"ty-flag ty-flag-it\\\"></i>\\n                                        Italiano                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ja\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"jp\\\" data-ca-name=\\\"ja\\\">\\n                                            <i class=\\\"ty-flag ty-flag-jp\\\"></i>\\n                                        日本語                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ka\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"ge\\\" data-ca-name=\\\"ka\\\">\\n                                            <i class=\\\"ty-flag ty-flag-ge\\\"></i>\\n                                        ქართული                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=nl\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"nl\\\" data-ca-name=\\\"nl\\\">\\n                                            <i class=\\\"ty-flag ty-flag-nl\\\"></i>\\n                                        Nederlands                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=no\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"no\\\" data-ca-name=\\\"no\\\">\\n                                            <i class=\\\"ty-flag ty-flag-no\\\"></i>\\n                                        Norsk                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=pl\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"pl\\\" data-ca-name=\\\"pl\\\">\\n                                            <i class=\\\"ty-flag ty-flag-pl\\\"></i>\\n                                        Polski                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=pt\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"br\\\" data-ca-name=\\\"pt\\\">\\n                                            <i class=\\\"ty-flag ty-flag-br\\\"></i>\\n                                        Português Brasileiro                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ro\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"ro\\\" data-ca-name=\\\"ro\\\">\\n                                            <i class=\\\"ty-flag ty-flag-ro\\\"></i>\\n                                        Română                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=ru\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"ru\\\" data-ca-name=\\\"ru\\\">\\n                                            <i class=\\\"ty-flag ty-flag-ru\\\"></i>\\n                                        Русский                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sk\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"sk\\\" data-ca-name=\\\"sk\\\">\\n                                            <i class=\\\"ty-flag ty-flag-sk\\\"></i>\\n                                        Slovak                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=tr\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"tr\\\" data-ca-name=\\\"tr\\\">\\n                                            <i class=\\\"ty-flag ty-flag-tr\\\"></i>\\n                                        Türkçe                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=es\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"es\\\" data-ca-name=\\\"es\\\">\\n                                            <i class=\\\"ty-flag ty-flag-es\\\"></i>\\n                                        Spanish                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=uk\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"ua\\\" data-ca-name=\\\"uk\\\">\\n                                            <i class=\\\"ty-flag ty-flag-ua\\\"></i>\\n                                        Українська                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=vi\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"vn\\\" data-ca-name=\\\"vi\\\">\\n                                            <i class=\\\"ty-flag ty-flag-vn\\\"></i>\\n                                        Vietnamese                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sr\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"sp\\\" data-ca-name=\\\"sr\\\">\\n                                            <i class=\\\"ty-flag ty-flag-sp\\\"></i>\\n                                        Serbian                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=sv\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"se\\\" data-ca-name=\\\"sv\\\">\\n                                            <i class=\\\"ty-flag ty-flag-se\\\"></i>\\n                                        Swedish                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?sl=fa\\\" class=\\\"ty-select-block__list-a  \\\" data-ca-country-code=\\\"ir\\\" data-ca-name=\\\"fa\\\">\\n                                            <i class=\\\"ty-flag ty-flag-ir\\\"></i>\\n                                        پارسی                    </a>\\n                </li>\\n                    </ul>\\n    </div>\\n</div>\\n    \\n<!--languages_1--></div>\\n    </div><div class=\\\" top-currencies    ty-float-left\\\">\\n        <div id=\\\"currencies_2\\\">\\n\\n            <div class=\\\"ty-currencies hidden-phone hidden-tablet\\\">\\n                                        <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=USD\\\" rel=\\\"nofollow\\\" class=\\\"ty-currencies__item ty-currencies__active\\\">$</a>\\n                            <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=EUR\\\" rel=\\\"nofollow\\\" class=\\\"ty-currencies__item \\\">€</a>\\n                            <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=GBP\\\" rel=\\\"nofollow\\\" class=\\\"ty-currencies__item \\\">£</a>\\n                    </div>\\n        <div class=\\\"visible-phone visible-tablet ty-select-wrapper\\\">\\n        \\n    <a class=\\\"ty-select-block__a cm-combination\\\" id=\\\"sw_select_USD_wrap_currency\\\">\\n                <span class=\\\"ty-select-block__a-item \\\"> ($)</span>\\n        <i class=\\\"ty-select-block__arrow ty-icon-down-micro\\\"></i>\\n    </a>\\n\\n    <div id=\\\"select_USD_wrap_currency\\\" class=\\\"ty-select-block cm-popup-box hidden\\\">\\n        <ul class=\\\"cm-select-list ty-select-block__list ty-flags\\\">\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=USD\\\" class=\\\"ty-select-block__list-a is-active \\\"  data-ca-name=\\\"USD\\\">\\n                                         ($)                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=EUR\\\" class=\\\"ty-select-block__list-a  \\\"  data-ca-name=\\\"EUR\\\">\\n                                         (€)                    </a>\\n                </li>\\n                            <li class=\\\"ty-select-block__list-item\\\">\\n                    <a rel=\\\"nofollow\\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?currency=GBP\\\" class=\\\"ty-select-block__list-a  \\\"  data-ca-name=\\\"GBP\\\">\\n                                         (£)                    </a>\\n                </li>\\n                    </ul>\\n    </div>\\n</div>\\n    \\n<!--currencies_2--></div>\\n\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span12 top-links-grid\\\" >\\n                <div class=\\\"ty-dropdown-box  top-my-account ty-float-right\\\">\\n        <div id=\\\"sw_dropdown_3\\\" class=\\\"ty-dropdown-box__title cm-combination unlogged\\\">\\n            \\n                                <a class=\\\"ty-account-info__title\\\" href=\\\"http://demo.cs-cart.com/profiles-update/\\\">\\n        <i class=\\\"ty-icon-user\\\"></i>&nbsp;\\n        <span class=\\\"ty-account-info__title-txt\\\" >My Account</span>\\n        <i class=\\\"ty-icon-down-micro ty-account-info__user-arrow\\\"></i>\\n    </a>\\n\\n                        \\n\\n        </div>\\n        <div id=\\\"dropdown_3\\\" class=\\\"cm-popup-box ty-dropdown-box__content hidden\\\">\\n            \\n\\n<div id=\\\"account_info_3\\\">\\n        <ul class=\\\"ty-account-info\\\">\\n        \\n                        <li class=\\\"ty-account-info__item ty-dropdown-box__item\\\"><a class=\\\"ty-account-info__a underlined\\\" href=\\\"http://demo.cs-cart.com/orders/\\\" rel=\\\"nofollow\\\">Orders</a></li>\\n                                            <li class=\\\"ty-account-info__item ty-dropdown-box__item\\\"><a class=\\\"ty-account-info__a underlined\\\" href=\\\"http://demo.cs-cart.com/compare/\\\" rel=\\\"nofollow\\\">Comparison list</a></li>\\n                    \\n<li class=\\\"ty-account-info__item ty-dropdown-box__item\\\"><a class=\\\"ty-account-info__a\\\" href=\\\"http://demo.cs-cart.com/wishlist/\\\" rel=\\\"nofollow\\\">Wish list</a></li>\\n    </ul>\\n\\n            <div class=\\\"ty-account-info__orders updates-wrapper track-orders\\\" id=\\\"track_orders_block_3\\\">\\n            <form action=\\\"http://demo.cs-cart.com/\\\" method=\\\"POST\\\" class=\\\"cm-ajax cm-post cm-ajax-full-render\\\" name=\\\"track_order_quick\\\">\\n                <input type=\\\"hidden\\\" name=\\\"result_ids\\\" value=\\\"track_orders_block_*\\\" />\\n                <input type=\\\"hidden\\\" name=\\\"return_url\\\" value=\\\"index.php?dispatch=products.view&amp;product_id=172\\\" />\\n\\n                <div class=\\\"ty-account-info__orders-txt\\\">Track my order(s)</div>\\n\\n                <div class=\\\"ty-account-info__orders-input ty-control-group ty-input-append\\\">\\n                    <label for=\\\"track_order_item3\\\" class=\\\"cm-required hidden\\\">Track my order(s)</label>\\n                    <input type=\\\"text\\\" size=\\\"20\\\" class=\\\"ty-input-text cm-hint\\\" id=\\\"track_order_item3\\\" name=\\\"track_data\\\" value=\\\"Order ID/Email\\\" />\\n                    <button title=\\\"Go\\\" class=\\\"ty-btn-go\\\" type=\\\"submit\\\"><i class=\\\"ty-btn-go__icon ty-icon-right-dir\\\"></i></button>\\n<input type=\\\"hidden\\\" name=\\\"dispatch\\\" value=\\\"orders.track_request\\\" />\\n                    \\n                </div>\\n            </form>\\n        <!--track_orders_block_3--></div>\\n    \\n    <div class=\\\"ty-account-info__buttons buttons-container\\\">\\n                    <a href=\\\"http://demo.cs-cart.com/login/?return_url=index.php%3Fdispatch%3Dproducts.view%26product_id%3D172\\\"  data-ca-target-id=\\\"login_block3\\\" class=\\\"cm-dialog-opener cm-dialog-auto-size ty-btn ty-btn__secondary\\\" rel=\\\"nofollow\\\">Sign in</a><a href=\\\"http://demo.cs-cart.com/profiles-add/\\\" rel=\\\"nofollow\\\" class=\\\"ty-btn ty-btn__primary\\\">Register</a>\\n                            <div  id=\\\"login_block3\\\" class=\\\"hidden\\\" title=\\\"Sign in\\\">\\n                    <div class=\\\"ty-login-popup\\\">\\n                        \\n\\n        <form name=\\\"popup3_form\\\" action=\\\"http://demo.cs-cart.com/\\\" method=\\\"post\\\">\\n    <input type=\\\"hidden\\\" name=\\\"return_url\\\" value=\\\"index.php?dispatch=products.view&amp;product_id=172\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"redirect_url\\\" value=\\\"index.php?dispatch=products.view&amp;product_id=172\\\" />\\n\\n                <div class=\\\"ty-control-group\\\">\\n            <label for=\\\"login_popup3\\\" class=\\\"ty-login__filed-label ty-control-group__label cm-required cm-trim cm-email\\\">Email</label>\\n            <input type=\\\"text\\\" id=\\\"login_popup3\\\" name=\\\"user_login\\\" size=\\\"30\\\" value=\\\"customer@example.com\\\" class=\\\"ty-login__input cm-focus\\\" />\\n        </div>\\n\\n        <div class=\\\"ty-control-group ty-password-forgot\\\">\\n            <label for=\\\"psw_popup3\\\" class=\\\"ty-login__filed-label ty-control-group__label ty-password-forgot__label cm-required\\\">Password</label><a href=\\\"http://demo.cs-cart.com/index.php?dispatch=auth.recover_password\\\" class=\\\"ty-password-forgot__a\\\"  tabindex=\\\"5\\\">Forgot your password?</a>\\n            <input type=\\\"password\\\" id=\\\"psw_popup3\\\" name=\\\"password\\\" size=\\\"30\\\" value=\\\"customer\\\" class=\\\"ty-login__input\\\" maxlength=\\\"32\\\" />\\n        </div>\\n\\n                    <div class=\\\"ty-login-reglink ty-center\\\">\\n                <a class=\\\"ty-login-reglink__a\\\" href=\\\"http://demo.cs-cart.com/profiles-add/\\\" rel=\\\"nofollow\\\">Register for a new account</a>\\n            </div>\\n        \\n        \\n\\n        \\n        \\n            <div class=\\\"buttons-container clearfix\\\">\\n                <div class=\\\"ty-float-right\\\">\\n                        \\n \\n    <button  class=\\\"ty-btn__login ty-btn__secondary ty-btn\\\" type=\\\"submit\\\" name=\\\"dispatch[auth.login]\\\" >Sign in</button>\\n\\n\\n                </div>\\n                <div class=\\\"ty-login__remember-me\\\">\\n                    <label for=\\\"remember_me_popup3\\\" class=\\\"ty-login__remember-me-label\\\"><input class=\\\"checkbox\\\" type=\\\"checkbox\\\" name=\\\"remember_me\\\" id=\\\"remember_me_popup3\\\" value=\\\"Y\\\" />Remember me</label>\\n                </div>\\n            </div>\\n        \\n\\n    </form>\\n\\n\\n                    </div>\\n                </div>\\n                        </div>\\n<!--account_info_3--></div>\\n\\n        </div>\\n    </div><div class=\\\" top-quick-links ty-float-right\\\">\\n        \\n    \\n\\n        <div class=\\\"ty-text-links-wrapper\\\">\\n        <span id=\\\"sw_text_links_4\\\" class=\\\"ty-text-links-btn cm-combination visible-phone\\\">\\n            <i class=\\\"ty-icon-short-list\\\"></i>\\n            <i class=\\\"ty-icon-down-micro ty-text-links-btn__arrow\\\"></i>\\n        </span>\\n    \\n        <ul id=\\\"text_links_4\\\" class=\\\"ty-text-links cm-popup-box ty-text-links_show_inline\\\">\\n                            <li class=\\\"ty-text-links__item ty-level-0\\\">\\n                    <a class=\\\"ty-text-links__a\\\" href=\\\"http://demo.cs-cart.com/blog/\\\">Our blog</a> \\n                                    </li>\\n                            <li class=\\\"ty-text-links__item ty-level-0\\\">\\n                    <a class=\\\"ty-text-links__a\\\" href=\\\"http://demo.cs-cart.com/gift-certificates/\\\">Gift certificates</a> \\n                                    </li>\\n                            <li class=\\\"ty-text-links__item ty-level-0\\\">\\n                    <a class=\\\"ty-text-links__a\\\" href=\\\"http://demo.cs-cart.com/index.php?dispatch=product_features.view_all&amp;filter_id=10\\\">Our brands</a> \\n                                    </li>\\n                    </ul>\\n\\n        </div>\\n    \\n    </div>\\n        </div>\\n    </div>\\n</div>\\n</div>\\n\\n<div class=\\\"tygh-header clearfix\\\">\\n    <div class=\\\"container-fluid  header-grid\\\">\\n                    \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span4 top-logo-grid\\\" >\\n                <div class=\\\" top-logo\\\">\\n        <div class=\\\"ty-logo-container\\\">\\n    <a href=\\\"http://demo.cs-cart.com/\\\" title=\\\"\\\">\\n        <img src=\\\"http://demo.cs-cart.com/images/logos/1/cart.png\\\" width=\\\"158\\\" height=\\\"25\\\" alt=\\\"\\\" class=\\\"ty-logo-container__image\\\" />\\n    </a>\\n</div>\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span5 search-block-grid\\\" >\\n                <div class=\\\" top-search\\\">\\n        <div class=\\\"ty-search-block\\\">\\n    <form action=\\\"http://demo.cs-cart.com/\\\" name=\\\"search_form\\\" method=\\\"get\\\">\\n        <input type=\\\"hidden\\\" name=\\\"subcats\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"pcode_from_q\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"pshort\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"pfull\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"pname\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"pkeywords\\\" value=\\\"Y\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"search_performed\\\" value=\\\"Y\\\" />\\n\\n        \\n\\n\\n        <input type=\\\"text\\\" name=\\\"q\\\" value=\\\"\\\" id=\\\"search_input\\\" title=\\\"Search products\\\" class=\\\"ty-search-block__input cm-hint\\\" /><button title=\\\"Search\\\" class=\\\"ty-search-magnifier\\\" type=\\\"submit\\\"><i class=\\\"ty-icon-search\\\"></i></button>\\n<input type=\\\"hidden\\\" name=\\\"dispatch\\\" value=\\\"products.search\\\" />\\n        \\n    </form>\\n</div>\\n\\n\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span4 ty-cr-content-grid\\\" >\\n                <div class=\\\"ty-cr-phone-number-link\\\">\\n    <div class=\\\"ty-cr-phone\\\"><span class=\\\"ty-cr-phone-prefix\\\">8(800)-</span><span>000-00-00</span></div>\\n    <div class=\\\"ty-cr-link\\\">\\n                        \\n<a id=\\\"opener_call_request_block7\\\" class=\\\"cm-dialog-opener cm-dialog-auto-size \\\" href=\\\"http://demo.cs-cart.com/index.php?dispatch=call_requests.request&amp;obj_prefix=block&amp;obj_id=7\\\" data-ca-target-id=\\\"content_call_request_block7\\\"  rel=\\\"nofollow\\\"><span>Request call</span></a>\\n\\n<div class=\\\"hidden\\\" id=\\\"content_call_request_block7\\\" title=\\\"Request call\\\">\\n    \\n</div>\\n\\n    </div>\\n</div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span3 cart-content-grid\\\" >\\n                <div class=\\\" top-cart-content ty-float-right\\\">\\n        \\n    <div class=\\\"ty-dropdown-box\\\" id=\\\"cart_status_8\\\">\\n         <div id=\\\"sw_dropdown_8\\\" class=\\\"ty-dropdown-box__title cm-combination\\\">\\n        <a href=\\\"http://demo.cs-cart.com/cart/\\\">\\n            \\n                                    <i class=\\\"ty-minicart__icon ty-icon-basket empty\\\"></i>\\n                    <span class=\\\"ty-minicart-title empty-cart ty-hand\\\">Cart is empty</span>\\n                    <i class=\\\"ty-icon-down-micro\\\"></i>\\n                            \\n\\n        </a>\\n        </div>\\n        <div id=\\\"dropdown_8\\\" class=\\\"cm-popup-box ty-dropdown-box__content hidden\\\">\\n            \\n                <div class=\\\"cm-cart-content cm-cart-content-thumb cm-cart-content-delete\\\">\\n                        <div class=\\\"ty-cart-items\\\">\\n                                                            <div class=\\\"ty-cart-items__empty ty-center\\\">Cart is empty</div>\\n                                                    </div>\\n\\n                                                <div class=\\\"cm-cart-buttons ty-cart-content__buttons buttons-container hidden\\\">\\n                            <div class=\\\"ty-float-left\\\">\\n                                <a href=\\\"http://demo.cs-cart.com/cart/\\\" rel=\\\"nofollow\\\" class=\\\"ty-btn ty-btn__secondary\\\">View cart</a>\\n                            </div>\\n                                                        <div class=\\\"ty-float-right\\\">\\n                                <a href=\\\"http://demo.cs-cart.com/checkout/\\\" rel=\\\"nofollow\\\" class=\\\"ty-btn ty-btn__primary\\\">Checkout</a>\\n                            </div>\\n                                                    </div>\\n                        \\n                </div>\\n            \\n\\n        </div>\\n    <!--cart_status_8--></div>\\n\\n\\n\\n    </div>\\n        </div>\\n    </div>                \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 top-menu-grid\\\" >\\n                <ul class=\\\"ty-menu__items cm-responsive-menu\\\">\\n        \\n            <li class=\\\"ty-menu__item ty-menu__menu-btn visible-phone\\\">\\n                <a class=\\\"ty-menu__item-link\\\">\\n                    <i class=\\\"ty-icon-short-list\\\"></i>\\n                    <span>Menu</span>\\n                </a>\\n            </li>\\n\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive ty-menu__item-active\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/electronics/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Electronics\\n                    </a>\\n                \\n                                            <div class=\\\"ty-menu__submenu\\\" id=\\\"topmenu_9_0172b9306c3e85394cb02cca5dd4b276\\\">\\n                            \\n                                <ul class=\\\"ty-menu__submenu-items cm-responsive-menu-submenu\\\">\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/\\\" class=\\\"ty-menu__submenu-link\\\">Computers</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/desktops/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Desktops</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/laptops/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Laptops</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/tablets/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Tablets</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/monitors/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Monitors</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/networking/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Networking</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/printers-and-scanners/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Printers &amp; Scanners</a>\\n                                                            </li>\\n                                                                                                                                                                            <li class=\\\"ty-menu__submenu-item ty-menu__submenu-alt-link\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/computers/\\\"\\n                                                                   class=\\\"ty-menu__submenu-link\\\">View more <i class=\\\"text-arrow\\\">&rarr;</i></a>\\n                                                            </li>\\n                                                                                                                \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/\\\" class=\\\"ty-menu__submenu-link\\\">Car Electronics</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/gps-and-navigation/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">GPS &amp; Navigation</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/in-dash-stereos/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">In-Dash Stereos</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/speakers/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Speakers</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/subwoofers/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Subwoofers</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/amplifiers/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Amplifiers</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/car-dvd-and-video/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Car DVD &amp; Video</a>\\n                                                            </li>\\n                                                                                                                                                                            <li class=\\\"ty-menu__submenu-item ty-menu__submenu-alt-link\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/car-electronics/\\\"\\n                                                                   class=\\\"ty-menu__submenu-link\\\">View more <i class=\\\"text-arrow\\\">&rarr;</i></a>\\n                                                            </li>\\n                                                                                                                \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/\\\" class=\\\"ty-menu__submenu-link\\\">TV &amp; Video</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/led-tvs/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">LED TVs</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/plasma-tvs/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Plasma TVs</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/3d-tvs/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">3D TVs</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/dvd-and-blu-ray-players/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">DVD &amp; Blu-ray Players</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/tv-and-video/home-theater-systems/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Home Theater Systems</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/\\\" class=\\\"ty-menu__submenu-link\\\">Cell Phones</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/apple-iphone/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Apple iPhone</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/htc/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">HTC</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/motorola/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Motorola</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/nokia/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Nokia</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cell-phones/samsung/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Samsung</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/\\\" class=\\\"ty-menu__submenu-link\\\">MP3 Players</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/ipods/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">iPods</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/android/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Android</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/mp3-players/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">MP3 Players</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/mp3-speaker-systems/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">MP3 Speaker Systems</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/mp3-players/headphones/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Headphones</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header ty-menu__submenu-item-header-active\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/\\\" class=\\\"ty-menu__submenu-link\\\">Cameras &amp; Photo</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/digital-cameras/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Digital Cameras</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/dslr-cameras/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">DSLR Cameras</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item ty-menu__submenu-item-active\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Camcorders</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/lenses/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Lenses</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                                                        </ul>\\n                            \\n\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/sports-and-outdoors/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Sports &amp; Outdoors\\n                    </a>\\n                \\n                                            <div class=\\\"ty-menu__submenu\\\" id=\\\"topmenu_9_5b660f27024de32d54af5e21af24a6fc\\\">\\n                            \\n                                <ul class=\\\"ty-menu__submenu-items cm-responsive-menu-submenu\\\">\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/bikes/\\\" class=\\\"ty-menu__submenu-link\\\">Bikes</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/bikes/comfort-and-cruisers/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Comfort &amp; Cruisers</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/bikes/road-bikes/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Road Bikes</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/bikes/mountain-bikes/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Mountain Bikes</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/golf/\\\" class=\\\"ty-menu__submenu-link\\\">Golf</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/golf/golf-clubs/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Golf Clubs</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/golf/golf-balls/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Golf Balls</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/golf/golf-bags-and-carts/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Golf Bags &amp; Carts</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                            <li class=\\\"ty-top-mine__submenu-col\\\">\\n                                                                                        <div class=\\\"ty-menu__submenu-item-header\\\">\\n                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/camping/\\\" class=\\\"ty-menu__submenu-link\\\">Camping</a>\\n                                            </div>\\n                                                                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                                                    <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                                                    <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                                                </a>\\n                                                                                        <div class=\\\"ty-menu__submenu\\\">\\n                                                <ul class=\\\"ty-menu__submenu-list cm-responsive-menu-submenu\\\">\\n                                                                                                            \\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/camping/backpacks/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Backpacks</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/camping/sleeping-bags/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Sleeping Bags</a>\\n                                                            </li>\\n                                                                                                                                                                                <li class=\\\"ty-menu__submenu-item\\\">\\n                                                                <a href=\\\"http://demo.cs-cart.com/sports-and-outdoors/camping/tents/\\\"                                                                        class=\\\"ty-menu__submenu-link\\\">Tents</a>\\n                                                            </li>\\n                                                                                                                                                                        \\n\\n                                                                                                    </ul>\\n                                            </div>\\n                                        </li>\\n                                                                                                        </ul>\\n                            \\n\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/apparel/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Apparel\\n                    </a>\\n                \\n                                        \\n                        <div class=\\\"ty-menu__submenu\\\">\\n                            <ul class=\\\"ty-menu__submenu-items ty-menu__submenu-items-simple cm-responsive-menu-submenu\\\">\\n                                \\n\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/apparel/mens-clothing/\\\">Men&#039;s Clothing</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/apparel/womens-clothing/\\\">Women&#039;s Clothing</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/apparel/shoes/\\\">Shoes</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/apparel/watches-and-jewelry/\\\">Watches &amp; Jewelry</a>\\n                                    </li>\\n                                                                \\n                                \\n\\n                            </ul>\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/music/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Music\\n                    </a>\\n                \\n                                        \\n                        <div class=\\\"ty-menu__submenu\\\">\\n                            <ul class=\\\"ty-menu__submenu-items ty-menu__submenu-items-simple cm-responsive-menu-submenu\\\">\\n                                \\n\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/music/blues/\\\">Blues</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/music/classical/\\\">Classical</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/music/jazz/\\\">Jazz</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/music/rock/\\\">Rock</a>\\n                                    </li>\\n                                                                \\n                                \\n\\n                            </ul>\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/movies-and-tv/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Movies &amp; TV\\n                    </a>\\n                \\n                                        \\n                        <div class=\\\"ty-menu__submenu\\\">\\n                            <ul class=\\\"ty-menu__submenu-items ty-menu__submenu-items-simple cm-responsive-menu-submenu\\\">\\n                                \\n\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/movies-and-tv/blu-ray-discs/\\\">Blu-ray Discs</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/movies-and-tv/movies-dvd/\\\">Movies (DVD)</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/movies-and-tv/tv-shows-dvd/\\\">TV Shows (DVD)</a>\\n                                    </li>\\n                                                                \\n                                \\n\\n                            </ul>\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/video-games/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Video Games\\n                    </a>\\n                \\n                                        \\n                        <div class=\\\"ty-menu__submenu\\\">\\n                            <ul class=\\\"ty-menu__submenu-items ty-menu__submenu-items-simple cm-responsive-menu-submenu\\\">\\n                                \\n\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/video-games/nintendo-wii/\\\">Nintendo Wii</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/video-games/playstation-3/\\\">PlayStation 3</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/video-games/playstation-vita/\\\">PlayStation Vita</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/video-games/xbox-360/\\\">Xbox 360</a>\\n                                    </li>\\n                                                                \\n                                \\n\\n                            </ul>\\n                        </div>\\n                    \\n                            </li>\\n                                            \\n                        <li class=\\\"ty-menu__item cm-menu-item-responsive\\\">\\n                                            <a class=\\\"ty-menu__item-toggle visible-phone cm-responsive-menu-toggle\\\">\\n                            <i class=\\\"ty-menu__icon-open ty-icon-down-open\\\"></i>\\n                            <i class=\\\"ty-menu__icon-hide ty-icon-up-open\\\"></i>\\n                        </a>\\n                                        <a  href=\\\"http://demo.cs-cart.com/office-supplies/\\\" class=\\\"ty-menu__item-link\\\">\\n                        Office Supplies\\n                    </a>\\n                \\n                                        \\n                        <div class=\\\"ty-menu__submenu\\\">\\n                            <ul class=\\\"ty-menu__submenu-items ty-menu__submenu-items-simple cm-responsive-menu-submenu\\\">\\n                                \\n\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/office-supplies/calculators/\\\">Calculators</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/office-supplies/desk-accessories/\\\">Desk Accessories</a>\\n                                    </li>\\n                                                                                                        <li class=\\\"ty-menu__submenu-item\\\">\\n                                        <a class=\\\"ty-menu__submenu-link\\\"  href=\\\"http://demo.cs-cart.com/office-supplies/safes/\\\">Safes</a>\\n                                    </li>\\n                                                                \\n                                \\n\\n                            </ul>\\n                        </div>\\n                    \\n                            </li>\\n        \\n        \\n\\n    </ul>\\n        </div>\\n    </div>\\n</div>\\n</div>\\n\\n<div class=\\\"tygh-content clearfix\\\">\\n    <div class=\\\"container-fluid  content-grid\\\">\\n                    \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 breadcrumbs-grid\\\" >\\n                <div id=\\\"breadcrumbs_10\\\">\\n\\n    <div class=\\\"ty-breadcrumbs clearfix\\\">\\n        <a href=\\\"http://demo.cs-cart.com/\\\" class=\\\"ty-breadcrumbs__a\\\">Home</a><span class=\\\"ty-breadcrumbs__slash\\\">/</span><a href=\\\"http://demo.cs-cart.com/electronics/\\\" class=\\\"ty-breadcrumbs__a\\\">Electronics</a><span class=\\\"ty-breadcrumbs__slash\\\">/</span><a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/\\\" class=\\\"ty-breadcrumbs__a\\\">Cameras &amp; Photo</a><span class=\\\"ty-breadcrumbs__slash\\\">/</span><a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/\\\" class=\\\"ty-breadcrumbs__a\\\">Camcorders</a><span class=\\\"ty-breadcrumbs__slash\\\">/</span><span class=\\\"ty-breadcrumbs__current\\\">Compact Full HD Camcorder</span>\\t<div class=\\\"ty-product-switcher\\\">\\n\\t    <a class=\\\"ty-product-switcher__a ty-product-switcher__a-left disabled\\\" ><i class=\\\"ty-product-switcher__icon ty-icon-left-circle\\\"></i></a>\\n\\t        <span class=\\\"switcher-selected-product\\\">1</span>\\n\\t        <span>of</span>\\n\\t        <span class=\\\"switcher-total\\\">12</span>\\n\\t    <a class=\\\"ty-product-switcher__a ty-product-switcher__a-right \\\" href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/dslr-cameras/d300s-body-only/\\\" title=\\\"Next\\\" ><i class=\\\"ty-product-switcher__icon ty-icon-right-circle\\\"></i></a>\\n\\t</div>\\n\\n    </div>\\n<!--breadcrumbs_10--></div>\\n        </div>\\n    </div>                \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 main-content-grid\\\" >\\n                <!-- Inline script moved to the bottom of the page -->\\n<div class=\\\"ty-product-block ty-product-detail\\\">\\n    <div class=\\\"ty-product-block__wrapper clearfix\\\">\\n    <div itemscope itemtype=\\\"http://schema.org/Product\\\">\\n    <meta itemprop=\\\"sku\\\" content=\\\"Y0172YCAWT\\\" />\\n    <meta itemprop=\\\"name\\\" content=\\\"Compact Full HD Camcorder\\\" />\\n    <meta itemprop=\\\"description\\\" content=\\\"&lt;p&gt;\\r\\n\\t            The T10 camcorder was designed to capture memories in comfort and in style. It boasts an ultra compact size, alightweight body and a brushed metal finish creating a subtle but sophisticated look and feel. In fact, its smooth curves fit so comfortably in your hand, it makes shooting video for longer periods of time more enjoyable\\r\\n&lt;/p&gt;\\\" />\\n\\n    <div itemprop=\\\"offers\\\" itemscope=\\\"\\\" itemtype=\\\"http://schema.org/Offer\\\">\\n                        <link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\" />\\n                            <meta itemprop=\\\"priceCurrency\\\" content=\\\"USD\\\"/>\\n            <meta itemprop=\\\"price\\\" content=\\\"299.99\\\"/>\\n            </div>\\n\\n    <div itemprop=\\\"aggregateRating\\\" itemscope itemtype=\\\"http://schema.org/AggregateRating\\\"> \\n    <meta itemprop=\\\"reviewCount\\\" content=\\\"1\\\">\\n    <meta itemprop=\\\"ratingValue\\\" content=\\\"4\\\">\\n</div>\\n\\n    \\n\\n\\n</div>\\n                                    \\n    \\n    \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n            <div class=\\\"ty-product-block__img-wrapper\\\">\\n                \\n                                            <div class=\\\"ty-product-block__img cm-reload-172\\\" id=\\\"product_images_172_update\\\">\\n\\n                                                                    <span class=\\\"ty-discount-label cm-reload-172\\\" id=\\\"discount_label_update_172\\\">\\n            <span class=\\\"ty-discount-label__item\\\" id=\\\"line_prc_discount_value_172\\\"><span class=\\\"ty-discount-label__value\\\" id=\\\"prc_discount_value_label_172\\\">Save 10%</span></span>\\n        <!--discount_label_update_172--></span>\\n    \\n\\n                            \\n    \\n    \\n    \\n<div class=\\\"ty-product-img cm-preview-wrapper\\\">\\n<a id=\\\"det_img_link_172580f42878db9a_671\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer cm-previewer ty-previewer\\\" data-ca-image-width=\\\"750\\\" data-ca-image-height=\\\"474\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_use_5.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_671\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/176/detailed/0/T10_use_5.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n\\n                                        <a id=\\\"det_img_link_172580f42878db9a_672\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"600\\\" data-ca-image-height=\\\"600\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_F2_O_1024x768.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_672\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_F2_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n                                            <a id=\\\"det_img_link_172580f42878db9a_673\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"600\\\" data-ca-image-height=\\\"600\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_S1_O_1024x768.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_673\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_S1_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n                                            <a id=\\\"det_img_link_172580f42878db9a_674\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"600\\\" data-ca-image-height=\\\"600\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_F2_O_1024x768_dimg_2.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_674\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_F2_O_1024x768_dimg_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n                                            <a id=\\\"det_img_link_172580f42878db9a_675\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"600\\\" data-ca-image-height=\\\"600\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_FS3_O_1024x768.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_675\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_FS3_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n                                            <a id=\\\"det_img_link_172580f42878db9a_676\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"600\\\" data-ca-image-height=\\\"600\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_T_O_1024x768_2.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_676\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_T_O_1024x768_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n                                            <a id=\\\"det_img_link_172580f42878db9a_677\\\" data-ca-image-id=\\\"preview[product_images_172580f42878db9a]\\\" class=\\\"cm-image-previewer hidden cm-previewer ty-previewer\\\" data-ca-image-width=\\\"800\\\" data-ca-image-height=\\\"544\\\" href=\\\"http://demo.cs-cart.com/images/detailed/0/T10_FS5_O_1024x768_2.jpg\\\" title=\\\"\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_677\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/280/190/detailed/0/T10_FS5_O_1024x768_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n<span class=\\\"ty-previewer__icon hidden-phone\\\"></span></a>\\n    </div>\\n\\n            <div class=\\\"ty-product-thumbnails ty-center cm-image-gallery\\\" id=\\\"images_preview_172580f42878db9a\\\" style=\\\"width: 280px;\\\">\\n            <a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_671\\\" class=\\\"cm-thumbnails-mini active ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_671_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_use_5.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_672\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_672_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_F2_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_673\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_673_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_S1_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_674\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_674_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_F2_O_1024x768_dimg_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_675\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_675_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_FS3_O_1024x768.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_676\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_676_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_T_O_1024x768_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a><a data-ca-gallery-large-id=\\\"det_img_link_172580f42878db9a_677\\\" class=\\\"cm-thumbnails-mini ty-product-thumbnails__item\\\"><img class=\\\"ty-pict     cm-image\\\" id=\\\"det_img_172580f42878db9a_677_mini\\\"  src=\\\"http://demo.cs-cart.com/images/thumbnails/35/35/detailed/0/T10_FS5_O_1024x768_2.jpg\\\" alt=\\\"\\\" title=\\\"\\\"  />\\n</a>        </div>\\n    \\n\\n<!-- Inline script moved to the bottom of the page -->\\n<!-- Inline script moved to the bottom of the page -->\\n\\n\\n<!-- Inline script moved to the bottom of the page -->\\n\\n<!-- Inline script moved to the bottom of the page -->\\n\\n                        <!--product_images_172_update--></div>\\n                                    \\n\\n            </div>\\n            <div class=\\\"ty-product-block__left\\\">\\n                                <form action=\\\"http://demo.cs-cart.com/\\\" method=\\\"post\\\" name=\\\"product_form_172\\\" enctype=\\\"multipart/form-data\\\" class=\\\"cm-disable-empty-files  cm-ajax cm-ajax-full-render cm-ajax-status-middle \\\">\\n<input type=\\\"hidden\\\" name=\\\"result_ids\\\" value=\\\"cart_status*,wish_list*,checkout*,account_info*\\\" />\\n<input type=\\\"hidden\\\" name=\\\"redirect_url\\\" value=\\\"index.php?dispatch=products.view&amp;product_id=172\\\" />\\n<input type=\\\"hidden\\\" name=\\\"product_data[172][product_id]\\\" value=\\\"172\\\" />\\n\\n\\n                \\n                                            <h1 class=\\\"ty-product-block-title\\\" >Compact Full HD Camcorder</h1>\\n                    \\n                    \\n                        <div class=\\\"brand\\\">\\n                            \\n\\n    <div class=\\\"ty-features-list\\\">    <a href=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/?features_hash=10-89\\\">Samsung</a></div>\\n                        </div>\\n                    \\n\\n                \\n    <div class=\\\"ty-discussion__rating-wrapper\\\" id=\\\"average_rating_product\\\">\\n            \\n                                \\n                    <span class=\\\"ty-nowrap ty-stars\\\">\\n                        <a class=\\\"cm-external-click\\\" data-ca-scroll=\\\"content_discussion\\\" data-ca-external-click-id=\\\"discussion\\\">\\n            \\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n    \\n    \\n            <i class=\\\"ty-stars__icon ty-icon-star-empty\\\"></i>\\n    \\n            </a>\\n    </span>\\n\\n        \\n    \\n\\n    \\n\\n\\n\\n                <a class=\\\"ty-discussion__review-a cm-external-click\\\" data-ca-scroll=\\\"content_discussion\\\" data-ca-external-click-id=\\\"discussion\\\">1 review</a>\\n                <a class=\\\"ty-discussion__review-write cm-dialog-opener cm-dialog-auto-size\\\" data-ca-target-id=\\\"new_post_dialog_172\\\" rel=\\\"nofollow\\\">Write a review</a>\\n    <!--average_rating_product--></div>\\n\\n\\n                                                                                \\n                \\n                                <div class=\\\"ty-product-block__note\\\">\\n                    <p class=\\\"product-promo-text\\\"><span class=\\\"product-promo-header\\\">FREE US shipping over $100!</span><span class=\\\"product-promo-body\\\">Orders within next 2 days will be shipped on Monday</span></p>\\n                </div>\\n                                \\n\\n\\n                <div class=\\\"prices-container price-wrap\\\">\\n                                            <div class=\\\"ty-product-prices\\\">\\n                                        <span class=\\\"cm-reload-172\\\" id=\\\"old_price_update_172\\\">\\n            \\n                            <span class=\\\"ty-list-price ty-nowrap\\\" id=\\\"line_list_price_172\\\"><span class=\\\"list-price-label\\\">List price:</span> <span class=\\\"ty-strike\\\"><span class=\\\"ty-list-price ty-nowrap\\\">$</span><span id=\\\"sec_list_price_172\\\" class=\\\"ty-list-price ty-nowrap\\\">334.00</span></span></span>\\n                        \\n\\n        <!--old_price_update_172--></span>\\n                        \\n                                            <div class=\\\"ty-product-block__price-actual\\\">\\n                                <span class=\\\"cm-reload-172 ty-price-update\\\" id=\\\"price_update_172\\\">\\n        <input type=\\\"hidden\\\" name=\\\"appearance[show_price_values]\\\" value=\\\"1\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"appearance[show_price]\\\" value=\\\"1\\\" />\\n                                \\n                                    <span class=\\\"ty-price\\\" id=\\\"line_discounted_price_172\\\"><span class=\\\"ty-price-num\\\">$</span><span id=\\\"sec_discounted_price_172\\\" class=\\\"ty-price-num\\\">299.99</span></span>\\n                            \\n\\n                        <!--price_update_172--></span>\\n\\n                        </div>\\n                    \\n                                                    \\n                                        <span class=\\\"cm-reload-172\\\" id=\\\"line_discount_update_172\\\">\\n            <input type=\\\"hidden\\\" name=\\\"appearance[show_price_values]\\\" value=\\\"1\\\" />\\n            <input type=\\\"hidden\\\" name=\\\"appearance[show_list_discount]\\\" value=\\\"1\\\" />\\n                            <span class=\\\"ty-list-price ty-save-price ty-nowrap\\\" id=\\\"line_discount_value_172\\\"> You save: $<span id=\\\"sec_discount_value_172\\\">34.01</span>&nbsp;(<span id=\\\"prc_discount_value_172\\\">10</span>%)</span>\\n                    <!--line_discount_update_172--></span>\\n    \\n                        </div>\\n                                    </div>\\n\\n                                <div class=\\\"ty-product-block__option\\\">\\n                                                <div class=\\\"cm-reload-172\\\" id=\\\"product_options_update_172\\\">\\n        <input type=\\\"hidden\\\" name=\\\"appearance[show_product_options]\\\" value=\\\"1\\\" />\\n        \\n                                                    \\n<input type=\\\"hidden\\\" name=\\\"appearance[details_page]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[info_type]\\\" value=\\\"D\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_icon]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_detailed]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_additional]\\\" value=\\\"\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_options]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_discounts]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_features]\\\" value=\\\"\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_extra]\\\" value=\\\"\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_taxed_prices]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[get_for_one_product]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[detailed_params]\\\" value=\\\"1\\\" />\\n    <input type=\\\"hidden\\\" name=\\\"additional_info[features_display_on]\\\" value=\\\"C\\\" />\\n\\n\\n<!-- Inline script moved to the bottom of the page -->\\n\\n        \\n\\n    <!--product_options_update_172--></div>\\n    \\n                </div>\\n                \\n                <div class=\\\"ty-product-block__advanced-option clearfix\\\">\\n                                                                        <div class=\\\"cm-reload-172\\\" id=\\\"advanced_options_update_172\\\">\\n            \\n            \\n            \\n<input type=\\\"hidden\\\" name=\\\"appearance[dont_show_points]\\\" value=\\\"\\\" />\\n        <div class=\\\"ty-reward-group\\\">\\n        <span class=\\\"ty-control-group__label product-list-field\\\">Price in points:</span>\\n        <span class=\\\"ty-control-group__item\\\" id=\\\"price_in_points_172\\\">300 points</span>\\n    </div>\\n<div class=\\\"ty-reward-group product-list-field hidden\\\">\\n    <span class=\\\"ty-control-group__label\\\">Reward points:</span>\\n    <span class=\\\"ty-control-group__item\\\" id=\\\"reward_points_172\\\" > points</span>\\n</div>\\n\\n        <!--advanced_options_update_172--></div>\\n    \\n                                    </div>\\n\\n                <div class=\\\"ty-product-block__sku\\\">\\n                                                    <div class=\\\"ty-control-group ty-sku-item cm-hidden-wrapper\\\" id=\\\"sku_update_172\\\">\\n            <input type=\\\"hidden\\\" name=\\\"appearance[show_sku]\\\" value=\\\"1\\\" />\\n            <label class=\\\"ty-control-group__label\\\" id=\\\"sku_172\\\">CODE:</label>\\n            <span class=\\\"ty-control-group__item cm-reload-172\\\" id=\\\"product_code_172\\\">Y0172YCAWT<!--product_code_172--></span>\\n        </div>\\n    \\n                </div>\\n\\n                                <div class=\\\"ty-product-block__field-group\\\">\\n                                        \\n    <div class=\\\"cm-reload-172 stock-wrap\\\" id=\\\"product_amount_update_172\\\">\\n        <input type=\\\"hidden\\\" name=\\\"appearance[show_product_amount]\\\" value=\\\"1\\\" />\\n                                                        <div class=\\\"ty-control-group product-list-field\\\">\\n                        <label class=\\\"ty-control-group__label\\\">Availability:</label>\\n                        <span class=\\\"ty-qty-in-stock ty-control-group__item\\\" id=\\\"in_stock_info_172\\\">In stock</span>\\n                    </div>\\n                                        <!--product_amount_update_172--></div>\\n\\n\\n\\n\\n                                            \\n        <div class=\\\"cm-reload-172\\\" id=\\\"qty_update_172\\\">\\n        <input type=\\\"hidden\\\" name=\\\"appearance[show_qty]\\\" value=\\\"1\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"appearance[capture_options_vs_qty]\\\" value=\\\"\\\" />\\n                            \\n                    <div class=\\\"ty-qty clearfix changer\\\" id=\\\"qty_172\\\">\\n                <label class=\\\"ty-control-group__label\\\" for=\\\"qty_count_172\\\">Quantity:</label>                                <div class=\\\"ty-center ty-value-changer cm-value-changer\\\">\\n                                            <a class=\\\"cm-increase ty-value-changer__increase\\\">&#43;</a>\\n                                        <input  type=\\\"text\\\" size=\\\"5\\\" class=\\\"ty-value-changer__input cm-amount\\\" id=\\\"qty_count_172\\\" name=\\\"product_data[172][amount]\\\" value=\\\"1\\\" data-ca-min-qty=\\\"1\\\" />\\n                                            <a class=\\\"cm-decrease ty-value-changer__decrease\\\">&minus;</a>\\n                                    </div>\\n                            </div>\\n                            <!--qty_update_172--></div>\\n    \\n\\n\\n\\n                                            \\n                </div>\\n                \\n                                    \\n\\n                \\n                                <div class=\\\"ty-product-block__button\\\">\\n                    \\n                                        <div class=\\\"cm-reload-172 \\\" id=\\\"add_to_cart_update_172\\\">\\n<input type=\\\"hidden\\\" name=\\\"appearance[show_add_to_cart]\\\" value=\\\"1\\\" />\\n<input type=\\\"hidden\\\" name=\\\"appearance[show_list_buttons]\\\" value=\\\"1\\\" />\\n<input type=\\\"hidden\\\" name=\\\"appearance[but_role]\\\" value=\\\"big\\\" />\\n<input type=\\\"hidden\\\" name=\\\"appearance[quick_view]\\\" value=\\\"\\\" />\\n\\n\\n                    \\n \\n    <button id=\\\"button_cart_172\\\" class=\\\"ty-btn__primary ty-btn__big ty-btn__add-to-cart cm-form-dialog-closer ty-btn\\\" type=\\\"submit\\\" name=\\\"dispatch[checkout.add..172]\\\" >Add to cart</button>\\n\\n\\n    \\n\\n\\n\\n    \\n<a id=\\\"opener_call_request_172\\\" class=\\\"cm-dialog-opener cm-dialog-auto-size ty-btn ty-btn__text ty-cr-product-button\\\" href=\\\"http://demo.cs-cart.com/index.php?dispatch=call_requests.request&amp;product_id=172&amp;obj_prefix=\\\" data-ca-target-id=\\\"content_call_request_172\\\"  rel=\\\"nofollow\\\"><span>Buy now with 1-click</span></a>\\n\\n<div class=\\\"hidden\\\" id=\\\"content_call_request_172\\\" title=\\\"Buy now with 1-click\\\">\\n    \\n</div>\\n\\n\\n        \\n \\n    <a  class=\\\"ty-btn ty-btn__text ty-add-to-wish cm-submit text-button \\\" id=\\\"button_wishlist_172\\\" data-ca-dispatch=\\\"dispatch[wishlist.add..172]\\\">Add to wish list</a>\\n\\n\\n    \\n            \\n \\n    <a  class=\\\"ty-btn ty-btn__text ty-add-to-compare cm-ajax cm-ajax-full-render text-button \\\" href=\\\"http://demo.cs-cart.com/index.php?dispatch=product_features.add_product&amp;product_id=172&amp;redirect_url=index.php%3Fdispatch%3Dproducts.view%26product_id%3D172\\\" rel=\\\"nofollow\\\" data-ca-target-id=\\\"comparison_list,account_info*\\\">Add to comparison list</a>\\n\\n\\n\\n\\n\\n<!--add_to_cart_update_172--></div>\\n\\n\\n                                        \\n                </div>\\n                \\n                                </form>\\n\\n\\n                \\n                \\n\\n\\n                                \\n\\n                    \\n                            </div>\\n        \\n    \\n    <div class=\\\"ty-discussion-post-popup hidden\\\" id=\\\"new_post_dialog_172\\\" title=\\\"Write a review\\\">\\n<form action=\\\"http://demo.cs-cart.com/\\\" method=\\\"post\\\" class=\\\" posts-form\\\" name=\\\"add_post_form\\\" id=\\\"add_post_form_172\\\">\\n\\n<input type=\\\"hidden\\\" name=\\\"result_ids\\\" value=\\\"posts_list*,new_post*,average_rating*\\\">\\n<input type =\\\"hidden\\\" name=\\\"post_data[thread_id]\\\" value=\\\"22\\\" />\\n<input type =\\\"hidden\\\" name=\\\"redirect_url\\\" value=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/?selected_section=discussion#discussion\\\" />\\n<input type=\\\"hidden\\\" name=\\\"selected_section\\\" value=\\\"\\\" />\\n\\n<div id=\\\"new_post_172\\\">\\n\\n<div class=\\\"ty-control-group\\\">\\n    <label for=\\\"dsc_name_172\\\" class=\\\"ty-control-group__title cm-required\\\">Your name</label>\\n    <input type=\\\"text\\\" id=\\\"dsc_name_172\\\" name=\\\"post_data[name]\\\" value=\\\"\\\" size=\\\"50\\\" class=\\\"ty-input-text-large\\\" />\\n</div>\\n\\n<div class=\\\"ty-control-group\\\">\\n        <label for=\\\"rating_172\\\" class=\\\"ty-control-group__title cm-required cm-multiple-radios\\\">Your rating</label>\\n    <div class=\\\"clearfix cm-field-container\\\">\\n    <div class=\\\"ty-rating\\\" id=\\\"rating_172\\\">\\n                        <input type=\\\"radio\\\" id=\\\"rating_172_5\\\" class=\\\"ty-rating__check\\\" name=\\\"post_data[rating_value]\\\" value=\\\"5\\\" /><label class=\\\"ty-rating__label\\\" for=\\\"rating_172_5\\\" title=\\\"Excellent!\\\">Excellent!</label>\\n                        <input type=\\\"radio\\\" id=\\\"rating_172_4\\\" class=\\\"ty-rating__check\\\" name=\\\"post_data[rating_value]\\\" value=\\\"4\\\" /><label class=\\\"ty-rating__label\\\" for=\\\"rating_172_4\\\" title=\\\"Very Good\\\">Very Good</label>\\n                        <input type=\\\"radio\\\" id=\\\"rating_172_3\\\" class=\\\"ty-rating__check\\\" name=\\\"post_data[rating_value]\\\" value=\\\"3\\\" /><label class=\\\"ty-rating__label\\\" for=\\\"rating_172_3\\\" title=\\\"Average\\\">Average</label>\\n                        <input type=\\\"radio\\\" id=\\\"rating_172_2\\\" class=\\\"ty-rating__check\\\" name=\\\"post_data[rating_value]\\\" value=\\\"2\\\" /><label class=\\\"ty-rating__label\\\" for=\\\"rating_172_2\\\" title=\\\"Fair\\\">Fair</label>\\n                        <input type=\\\"radio\\\" id=\\\"rating_172_1\\\" class=\\\"ty-rating__check\\\" name=\\\"post_data[rating_value]\\\" value=\\\"1\\\" /><label class=\\\"ty-rating__label\\\" for=\\\"rating_172_1\\\" title=\\\"Poor\\\">Poor</label>\\n            </div>\\n</div>\\n</div>\\n\\n\\n<div class=\\\"ty-control-group\\\">\\n    <label for=\\\"dsc_message_172\\\" class=\\\"ty-control-group__title cm-required\\\">Your message</label>\\n    <textarea id=\\\"dsc_message_172\\\" name=\\\"post_data[message]\\\" class=\\\"ty-input-textarea ty-input-text-large\\\" rows=\\\"5\\\" cols=\\\"72\\\"></textarea>\\n</div>\\n\\n\\n\\n        \\n        <div class=\\\"captcha ty-control-group\\\">\\n                    <label for=\\\"verification_answer_iv_580f4287b1f89\\\" class=\\\"cm-required ty-captcha__label\\\">Anti-bot validation</label>\\n                    <div class=\\\"cm-field-container\\\">\\n                    <input class=\\\"ty-captcha__input cm-autocomplete-off\\\" type=\\\"text\\\" id=\\\"verification_answer_iv_580f4287b1f89\\\" name=\\\"verification_answer\\\" value= \\\"\\\" />\\n            <input type=\\\"hidden\\\" name=\\\"verification_id\\\" value= \\\"iv_580f4287b1f89\\\" />\\n                    <div class=\\\"ty-captcha__code\\\">\\n                <img id=\\\"verification_image_iv_580f4287b1f89\\\" class=\\\"ty-captcha__img\\\" src=\\\"http://demo.cs-cart.com/index.php?dispatch=image.captcha&amp;verification_id=iv_580f4287b1f89&amp;no_session=Y&amp;iv_580f4287b1f89=\\\" alt=\\\"\\\" onclick=\\\"this.src += '|1' ;\\\"  width=\\\"110\\\" height=\\\"30\\\" />\\n                <i class=\\\"ty-icon-refresh ty-captcha__refresh\\\" onclick=\\\"document.getElementById('verification_image_iv_580f4287b1f89').src += '|1';\\\"></i>\\n            </div>\\n            </div><!-- close .cm-field-container  -->\\n                <div >Type the characters you see in the picture above.</div>\\n    </div>\\n\\n\\n<!--new_post_172--></div>\\n\\n<div class=\\\"buttons-container\\\">\\n        \\n \\n    <button  class=\\\"ty-btn__secondary ty-btn\\\" type=\\\"submit\\\" name=\\\"dispatch[discussion.add]\\\" >Submit</button>\\n\\n\\n</div>\\n\\n</form>\\n</div>\\n\\n\\n    </div>\\n\\n    \\n    \\n        \\n\\n\\n                            \\n\\n<!-- Inline script moved to the bottom of the page -->\\n<div class=\\\"ty-tabs cm-j-tabs clearfix\\\">\\n    <ul class=\\\"ty-tabs__list\\\" >\\n                                                        <li id=\\\"description\\\" class=\\\"ty-tabs__item cm-js active\\\"><a class=\\\"ty-tabs__a\\\" >Description</a></li>\\n                                                                                            <li id=\\\"discussion\\\" class=\\\"ty-tabs__item cm-js\\\"><a class=\\\"ty-tabs__a\\\" >Reviews</a></li>\\n                            </ul>\\n</div>\\n\\n<div class=\\\"cm-tabs-content ty-tabs__content clearfix\\\" id=\\\"tabs_content\\\">\\n                            \\n            \\n                                        \\n            <div id=\\\"content_description\\\" class=\\\"ty-wysiwyg-content content-description\\\">\\n                                                    \\n    <div ><p>\\r\\n\\t            The T10 camcorder was designed to capture memories in comfort and in style. It boasts an ultra compact size, alightweight body and a brushed metal finish creating a subtle but sophisticated look and feel. In fact, its smooth curves fit so comfortably in your hand, it makes shooting video for longer periods of time more enjoyable\\r\\n</p></div>\\n\\n                            \\n            </div>\\n                                \\n            \\n            \\n            <div id=\\\"content_features\\\" class=\\\"ty-wysiwyg-content content-features\\\">\\n                                                    \\n\\n\\n                            \\n            </div>\\n                                \\n            \\n            \\n            <div id=\\\"content_files\\\" class=\\\"ty-wysiwyg-content content-files\\\">\\n                                                    \\n\\n                            \\n            </div>\\n                                \\n            \\n            \\n            <div id=\\\"content_tags\\\" class=\\\"ty-wysiwyg-content content-tags\\\">\\n                                                    \\n    \\n\\n                            \\n            </div>\\n                                \\n            \\n            \\n            <div id=\\\"content_attachments\\\" class=\\\"ty-wysiwyg-content content-attachments\\\">\\n                                                    \\n\\n                            \\n            </div>\\n                                \\n            \\n                                        \\n            <div id=\\\"content_discussion\\\" class=\\\"ty-wysiwyg-content content-discussion\\\">\\n                                                    \\n    <div class=\\\"discussion-block\\\" id=\\\"content_discussion_block\\\">\\n        \\n        \\n        <div id=\\\"posts_list_172\\\">\\n                            \\n    <div class=\\\"ty-pagination-container cm-pagination-container\\\" id=\\\"pagination_contents_comments_172\\\">\\n\\n    \\n    \\n\\n    \\n                                    <div class=\\\"ty-discussion-post__content ty-mb-l\\\">\\n                        \\n                        <div class=\\\"ty-discussion-post \\\" id=\\\"post_14\\\">\\n\\n                                                            <div class=\\\"ty-discussion-post__message\\\">I was looking for a handy and easy-to-use camcorder when I came across this little bird, and I have to say — it really does everything perfectly! Whether you just want to catch some memory in a form of a video, or plan to do a full video project — this camcorder will become your best friend! All the necessary features are present and easily adjustable. I didn&#039;t come across any problem using this amazing piece of technology. Definitely worth its money! </div>\\n                            \\n                            <span class=\\\"ty-caret-bottom\\\"><span class=\\\"ty-caret-outer\\\"></span><span class=\\\"ty-caret-inner\\\"></span></span>\\n                    \\n                        </div>\\n                        <span class=\\\"ty-discussion-post__author\\\">Alex</span>\\n                        <span class=\\\"ty-discussion-post__date\\\">11/08/2013, 16:42</span>\\n                                                    <div class=\\\"clearfix ty-discussion-post__rating\\\">\\n                                <span class=\\\"ty-nowrap ty-stars\\\">\\n    \\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n            <i class=\\\"ty-stars__icon ty-icon-star\\\"></i>\\n    \\n    \\n            <i class=\\\"ty-stars__icon ty-icon-star-empty\\\"></i>\\n    \\n    </span>\\n\\n                            </div>\\n                                                \\n\\n                    </div>\\n                \\n\\n                \\n\\n\\n    <!--pagination_contents_comments_172--></div>\\n    \\n                    <!--posts_list_172--></div>\\n\\n                    <div class=\\\"ty-discussion-post__buttons buttons-container\\\">\\n                    \\n \\n\\n    <a   class=\\\"ty-btn cm-dialog-opener cm-dialog-auto-size ty-btn__primary \\\"  rel=\\\"nofollow\\\" data-ca-target-id=\\\"new_post_dialog_172\\\">Write a review</a>\\n\\n            </div>\\n                    \\n                                </div>\\n\\n                            \\n            </div>\\n                                \\n            \\n            \\n            <div id=\\\"content_required_products\\\" class=\\\"ty-wysiwyg-content content-required_products\\\">\\n                                                    \\n\\n                            \\n            </div>\\n            \\n</div>\\n\\n\\n\\n        \\n    </div>\\n\\n<div class=\\\"product-details\\\">\\n</div>\\n        </div>\\n    </div>\\n</div>\\n</div>\\n\\n\\n<div class=\\\"tygh-footer clearfix\\\" id=\\\"tygh_footer\\\">\\n    <div class=\\\"container-fluid  ty-footer-grid\\\">\\n                    \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 ty-footer-grid__full-width footer-stay-connected\\\" >\\n                <div class=\\\"row-fluid \\\">                <div class=\\\"span8 \\\" >\\n                <div class=\\\"    ty-float-left\\\">\\n        \\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span8 \\\" >\\n                <div class=\\\" ty-float-right\\\">\\n        <div class=\\\"ty-wysiwyg-content\\\" ><div class=\\\"ty-social-link-block\\\"><h3 class=\\\"ty-social-link__title\\\">Get social</h3>\\n\\n<div class=\\\"ty-social-link facebook\\\">\\n    <a href=\\\"http://www.facebook.com/pages/CS-Cart/156687676230\\\"><i class=\\\"ty-icon-facebook\\\"></i> Facebook</a>\\n</div>\\n\\n\\n<div class=\\\"ty-social-link twitter\\\">\\n    <a href=\\\"https://twitter.com/cscart\\\"><i class=\\\"ty-icon-twitter\\\"></i> Twitter</a>\\n</div></div>\\n</div>\\n    </div>\\n        </div>\\n    </div>\\n        </div>\\n    </div>                \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 ty-footer-grid__full-width ty-footer-menu\\\" >\\n                <div class=\\\"row-fluid \\\">                <div class=\\\"span4 my-account-grid\\\" >\\n                <div class=\\\"ty-footer ty-float-left\\\">\\n        <h2 class=\\\"ty-footer-general__header  cm-combination\\\" id=\\\"sw_footer-general_14\\\">\\n            \\n                            <span>My account</span>\\n                        \\n\\n        <i class=\\\"ty-footer-menu__icon-open ty-icon-down-open\\\"></i>\\n        <i class=\\\"ty-footer-menu__icon-hide ty-icon-up-open\\\"></i>\\n        </h2>\\n        <div class=\\\"ty-footer-general__body\\\" id=\\\"footer-general_14\\\"><ul id=\\\"account_info_links_14\\\">\\n    <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/login/\\\" rel=\\\"nofollow\\\">Sign in</a></li>\\n    <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/profiles-add/\\\" rel=\\\"nofollow\\\">Create account</a></li>\\n<!--account_info_links_14--></ul></div>\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span4 demo-store-grid\\\" >\\n                <div class=\\\"ty-footer footer-no-wysiwyg ty-float-left\\\">\\n        <h2 class=\\\"ty-footer-general__header  cm-combination\\\" id=\\\"sw_footer-general_15\\\">\\n            \\n                            <span>Demo Store</span>\\n                        \\n\\n        <i class=\\\"ty-footer-menu__icon-open ty-icon-down-open\\\"></i>\\n        <i class=\\\"ty-footer-menu__icon-hide ty-icon-up-open\\\"></i>\\n        </h2>\\n        <div class=\\\"ty-footer-general__body\\\" id=\\\"footer-general_15\\\"><div class=\\\"ty-wysiwyg-content\\\" ><ul id=\\\"demo_store_links\\\">\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/about-our-company/\\\">About us</a></li>\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/contact-us/\\\">Contact us</a></li>\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/gift-certificates/\\\">Gift certificates</a></li>\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/index.php?dispatch=product_features.view_all&amp;filter_id=10\\\">Our brands</a></li>\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/sitemap/\\\">Sitemap</a></li>\\n<li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/blog/\\\">Blog</a></li>\\n</ul></div></div>\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span4 customer-service-grid\\\" >\\n                <div class=\\\"ty-footer footer-no-wysiwyg ty-float-left\\\">\\n        <h2 class=\\\"ty-footer-general__header  cm-combination\\\" id=\\\"sw_footer-general_16\\\">\\n            \\n                            <span>Customer Service</span>\\n                        \\n\\n        <i class=\\\"ty-footer-menu__icon-open ty-icon-down-open\\\"></i>\\n        <i class=\\\"ty-footer-menu__icon-hide ty-icon-up-open\\\"></i>\\n        </h2>\\n        <div class=\\\"ty-footer-general__body\\\" id=\\\"footer-general_16\\\"><div class=\\\"ty-wysiwyg-content\\\" >                            <ul id=\\\"customer_service_links\\\">\\n                            <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/orders/\\\" rel=\\\"nofollow\\\">About your order</a></li>\\n                            <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/wishlist/\\\" rel=\\\"nofollow\\\">Wishlist</a></li>\\n                            <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/compare/\\\" rel=\\\"nofollow\\\">Comparison list</a></li>\\n                            </ul></div></div>\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span4 about-grid\\\" >\\n                <div class=\\\"ty-footer footer-no-wysiwyg ty-float-left\\\">\\n        <h2 class=\\\"ty-footer-general__header  cm-combination\\\" id=\\\"sw_footer-general_17\\\">\\n            \\n                            <span>About us</span>\\n                        \\n\\n        <i class=\\\"ty-footer-menu__icon-open ty-icon-down-open\\\"></i>\\n        <i class=\\\"ty-footer-menu__icon-hide ty-icon-up-open\\\"></i>\\n        </h2>\\n        <div class=\\\"ty-footer-general__body\\\" id=\\\"footer-general_17\\\"><div class=\\\"ty-wysiwyg-content\\\" >                            <ul id=\\\"about_cs_cart_links\\\">\\n                            <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/our-team/\\\">Our team</a></li>\\n                            <li class=\\\"ty-footer-menu__item\\\"><a href=\\\"http://demo.cs-cart.com/privacy-policy/\\\">Privacy policy</a></li>\\n                            </ul></div></div>\\n    </div>\\n        </div>\\n    </div>\\n        </div>\\n    </div>                \\n\\n\\n    <div class=\\\"row-fluid \\\">                <div class=\\\"span16 ty-footer-grid__full-width footer-copyright\\\" >\\n                <div class=\\\"row-fluid \\\">                <div class=\\\"span8 \\\" >\\n                <div class=\\\"    ty-float-left\\\">\\n        <p class=\\\"bottom-copyright\\\">&copy; 2004-2016 Simtech. &nbsp;Powered by <a class=\\\"bottom-copyright\\\" href=\\\"https://www.cs-cart.com\\\" target=\\\"_blank\\\">CS-Cart - Shopping Cart Software</a>\\n</p>\\n    </div>\\n        </div>\\n                    \\n\\n\\n                    <div class=\\\"span8 \\\" >\\n                <div class=\\\" ty-float-right\\\">\\n        <div class=\\\"ty-payment-icons\\\">\\n    \\n    <span class=\\\"ty-payment-icons__item twocheckout\\\">&nbsp;</span>\\n    <span class=\\\"ty-payment-icons__item paypal\\\">&nbsp;</span>\\n    <span class=\\\"ty-payment-icons__item mastercard\\\">&nbsp;</span>\\n    <span class=\\\"ty-payment-icons__item visa\\\">&nbsp;</span>\\n    \\n\\n</div>\\n\\n    </div>\\n        </div>\\n    </div>\\n        </div>\\n    </div>\\n</div>\\n</div>\\n\\n    \\n    \\n\\n            \\n\\n        <!--tygh_main_container--></div>\\n\\n        \\n\\n        <!--tygh_container--></div>\\n\\n        <script src=\\\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\\\" data-no-defer></script>\\n<script data-no-defer>\\n    if (!window.jQuery) {\\n        document.write('<script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/lib/jquery/jquery.min.js?ver=4.3.10\\\" ><\\\\/script>');\\n    }\\n</script>\\n\\n<script src=\\\"//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js\\\" data-no-defer></script>\\n<script data-no-defer>\\n    if (!window.jQuery.ui) {\\n        document.write('<script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/lib/jqueryui/jquery-ui.custom.min.js?ver=4.3.10\\\" ><\\\\/script>');\\n    }\\n</script>\\n\\n<script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/var/cache/misc/assets/js/tygh/scripts-664a82787662006b6e76783712d792461477395032.js\\\"></script>\\n<script type=\\\"text/javascript\\\">\\n(function(_, $) {\\n\\n    _.tr({\\n        cannot_buy: 'You cannot buy the product with these option variants',\\n        no_products_selected: 'No products selected',\\n        error_no_items_selected: 'No items selected! At least one check box must be selected to perform this action.',\\n        delete_confirmation: 'Are you sure you want to delete the selected items?',\\n        text_out_of_stock: 'Out of stock',\\n        items: 'item(s)',\\n        text_required_group_product: 'Please select a product for the required group [group_name]',\\n        save: 'Save',\\n        close: 'Close',\\n        notice: 'Notice',\\n        warning: 'Warning',\\n        error: 'Error',\\n        empty: 'Empty',\\n        text_are_you_sure_to_proceed: 'Are you sure you want to proceed?',\\n        text_invalid_url: 'You have entered an invalid URL',\\n        error_validator_email: 'The email address in the <b>[field]<\\\\/b> field is invalid.',\\n        error_validator_phone: 'The phone number in the <b>[field]<\\\\/b> field is invalid. The correct format is (555) 555-55-55 or 55 55 555 5555.',\\n        error_validator_integer: 'The value of the <b>[field]<\\\\/b> field is invalid. It should be integer.',\\n        error_validator_multiple: 'The <b>[field]<\\\\/b> field does not contain the selected options.',\\n        error_validator_password: 'The passwords in the <b>[field2]<\\\\/b> and <b>[field]<\\\\/b> fields do not match.',\\n        error_validator_required: 'The <b>[field]<\\\\/b> field is mandatory.',\\n        error_validator_zipcode: 'The ZIP / Postal code in the <b>[field]<\\\\/b> field is incorrect. The correct format is [extra].',\\n        error_validator_message: 'The value of the <b>[field]<\\\\/b> field is invalid.',\\n        text_page_loading: 'Loading... Your request is being processed, please wait.',\\n        error_ajax: 'Oops, something went wrong ([error]). Please try again.',\\n        text_changes_not_saved: 'Your changes have not been saved.',\\n        text_data_changed: 'Your changes have not been saved.Press OK to continue, or Cancel to stay on the current page.',\\n        placing_order: 'Placing the order',\\n        file_browser: 'File browser',\\n        browse: 'Browse...',\\n        more: 'More',\\n        text_no_products_found: 'No products found',\\n        cookie_is_disabled: 'For a complete shopping experience, please <a href=\\\\\\\"http://www.wikihow.com/Enable-Cookies-in-Your-Internet-Web-Browser\\\\\\\" target=\\\\\\\"_blank\\\\\\\">set your browser to accept cookies<\\\\/a>'\\n    });\\n\\n    $.extend(_, {\\n        index_script: 'index.php',\\n        changes_warning: /*'Y'*/'N',\\n        currencies: {\\n            'primary': {\\n                'decimals_separator': '.',\\n                'thousands_separator': ',',\\n                'decimals': '2'\\n            },\\n            'secondary': {\\n                'decimals_separator': '.',\\n                'thousands_separator': ',',\\n                'decimals': '2',\\n                'coefficient': '1.00000'\\n            }\\n        },\\n        default_editor: 'redactor',\\n        default_previewer: 'magnific',\\n        current_path: '',\\n        current_location: 'http://demo.cs-cart.com',\\n        images_dir: 'http://demo.cs-cart.com/design/themes/responsive/media/images',\\n        notice_displaying_time: 5,\\n        cart_language: 'en',\\n        language_direction: 'ltr',\\n        default_language: 'en',\\n        cart_prices_w_taxes: false,\\n        theme_name: 'responsive',\\n        regexp: [],\\n        current_url: 'http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/',\\n        current_host: 'demo.cs-cart.com',\\n        init_context: ''\\n    });\\n\\n    \\n    \\n        $(document).ready(function(){\\n            $.runCart('C');\\n        });\\n\\n    \\n            // CSRF form protection key\\n        _.security_hash = '421e33fa7a06a3cc42c7b4a472fab832';\\n    \\n}(Tygh, Tygh.$));\\n</script>\\n<script type=\\\"text/javascript\\\">\\n    (function(_, $) {\\n        _.call_requests_phone_masks_list = [\\n\\t{ \\\"mask\\\": \\\"+247-####\\\", \\\"cc\\\": \\\"AC\\\", \\\"name_en\\\": \\\"Ascension\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Остров Вознесения\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+376-###-###\\\", \\\"cc\\\": \\\"AD\\\", \\\"name_en\\\": \\\"Andorra\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Андорра\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+971-5#-###-####\\\", \\\"cc\\\": \\\"AE\\\", \\\"name_en\\\": \\\"United Arab Emirates\\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Объединенные Арабские Эмираты\\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+971-#-###-####\\\", \\\"cc\\\": \\\"AE\\\", \\\"name_en\\\": \\\"United Arab Emirates\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Объединенные Арабские Эмираты\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+93-##-###-####\\\", \\\"cc\\\": \\\"AF\\\", \\\"name_en\\\": \\\"Afghanistan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Афганистан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(268)###-####\\\", \\\"cc\\\": \\\"AG\\\", \\\"name_en\\\": \\\"Antigua & Barbuda\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Антигуа и Барбуда\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(264)###-####\\\", \\\"cc\\\": \\\"AI\\\", \\\"name_en\\\": \\\"Anguilla\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ангилья\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+355(###)###-###\\\", \\\"cc\\\": \\\"AL\\\", \\\"name_en\\\": \\\"Albania\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Албания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+374-##-###-###\\\", \\\"cc\\\": \\\"AM\\\", \\\"name_en\\\": \\\"Armenia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Армения\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+599-###-####\\\", \\\"cc\\\": \\\"AN\\\", \\\"name_en\\\": \\\"Caribbean Netherlands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Карибские Нидерланды\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+599-###-####\\\", \\\"cc\\\": \\\"AN\\\", \\\"name_en\\\": \\\"Netherlands Antilles\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нидерландские Антильские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+599-9###-####\\\", \\\"cc\\\": \\\"AN\\\", \\\"name_en\\\": \\\"Netherlands Antilles\\\", \\\"desc_en\\\": \\\"Curacao\\\", \\\"name_ru\\\": \\\"Нидерландские Антильские острова\\\", \\\"desc_ru\\\": \\\"Кюрасао\\\" },\\n\\t{ \\\"mask\\\": \\\"+244(###)###-###\\\", \\\"cc\\\": \\\"AO\\\", \\\"name_en\\\": \\\"Angola\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ангола\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+672-1##-###\\\", \\\"cc\\\": \\\"AQ\\\", \\\"name_en\\\": \\\"Australian bases in Antarctica\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Австралийская антарктическая база\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+54(###)###-####\\\", \\\"cc\\\": \\\"AR\\\", \\\"name_en\\\": \\\"Argentina\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Аргентина\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(684)###-####\\\", \\\"cc\\\": \\\"AS\\\", \\\"name_en\\\": \\\"American Samoa\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Американское Самоа\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+43(###)###-####\\\", \\\"cc\\\": \\\"AT\\\", \\\"name_en\\\": \\\"Austria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Австрия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+61-#-####-####\\\", \\\"cc\\\": \\\"AU\\\", \\\"name_en\\\": \\\"Australia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Австралия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+297-###-####\\\", \\\"cc\\\": \\\"AW\\\", \\\"name_en\\\": \\\"Aruba\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Аруба\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+994-##-###-##-##\\\", \\\"cc\\\": \\\"AZ\\\", \\\"name_en\\\": \\\"Azerbaijan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Азербайджан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+387-##-#####\\\", \\\"cc\\\": \\\"BA\\\", \\\"name_en\\\": \\\"Bosnia and Herzegovina\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Босния и Герцеговина\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+387-##-####\\\", \\\"cc\\\": \\\"BA\\\", \\\"name_en\\\": \\\"Bosnia and Herzegovina\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Босния и Герцеговина\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(246)###-####\\\", \\\"cc\\\": \\\"BB\\\", \\\"name_en\\\": \\\"Barbados\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Барбадос\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+880-##-###-###\\\", \\\"cc\\\": \\\"BD\\\", \\\"name_en\\\": \\\"Bangladesh\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бангладеш\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+32(###)###-###\\\", \\\"cc\\\": \\\"BE\\\", \\\"name_en\\\": \\\"Belgium\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бельгия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+226-##-##-####\\\", \\\"cc\\\": \\\"BF\\\", \\\"name_en\\\": \\\"Burkina Faso\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Буркина Фасо\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+359(###)###-###\\\", \\\"cc\\\": \\\"BG\\\", \\\"name_en\\\": \\\"Bulgaria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Болгария\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+973-####-####\\\", \\\"cc\\\": \\\"BH\\\", \\\"name_en\\\": \\\"Bahrain\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бахрейн\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+257-##-##-####\\\", \\\"cc\\\": \\\"BI\\\", \\\"name_en\\\": \\\"Burundi\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бурунди\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+229-##-##-####\\\", \\\"cc\\\": \\\"BJ\\\", \\\"name_en\\\": \\\"Benin\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бенин\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(441)###-####\\\", \\\"cc\\\": \\\"BM\\\", \\\"name_en\\\": \\\"Bermuda\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бермудские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+673-###-####\\\", \\\"cc\\\": \\\"BN\\\", \\\"name_en\\\": \\\"Brunei Darussalam\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бруней-Даруссалам\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+591-#-###-####\\\", \\\"cc\\\": \\\"BO\\\", \\\"name_en\\\": \\\"Bolivia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Боливия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+55-##-####-####\\\", \\\"cc\\\": \\\"BR\\\", \\\"name_en\\\": \\\"Brazil\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бразилия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(242)###-####\\\", \\\"cc\\\": \\\"BS\\\", \\\"name_en\\\": \\\"Bahamas\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Багамские Острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+975-17-###-###\\\", \\\"cc\\\": \\\"BT\\\", \\\"name_en\\\": \\\"Bhutan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бутан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+975-#-###-###\\\", \\\"cc\\\": \\\"BT\\\", \\\"name_en\\\": \\\"Bhutan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бутан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+267-##-###-###\\\", \\\"cc\\\": \\\"BW\\\", \\\"name_en\\\": \\\"Botswana\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ботсвана\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+375(##)###-##-##\\\", \\\"cc\\\": \\\"BY\\\", \\\"name_en\\\": \\\"Belarus\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Беларусь (Белоруссия)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+501-###-####\\\", \\\"cc\\\": \\\"BZ\\\", \\\"name_en\\\": \\\"Belize\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Белиз\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+243(###)###-###\\\", \\\"cc\\\": \\\"CD\\\", \\\"name_en\\\": \\\"Dem. Rep. Congo\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Дем. Респ. Конго (Киншаса)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+236-##-##-####\\\", \\\"cc\\\": \\\"CF\\\", \\\"name_en\\\": \\\"Central African Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Центральноафриканская Республика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+242-##-###-####\\\", \\\"cc\\\": \\\"CG\\\", \\\"name_en\\\": \\\"Congo (Brazzaville)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Конго (Браззавиль)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+41-##-###-####\\\", \\\"cc\\\": \\\"CH\\\", \\\"name_en\\\": \\\"Switzerland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Швейцария\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+225-##-###-###\\\", \\\"cc\\\": \\\"CI\\\", \\\"name_en\\\": \\\"Cote d’Ivoire (Ivory Coast)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кот-д’Ивуар\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+682-##-###\\\", \\\"cc\\\": \\\"CK\\\", \\\"name_en\\\": \\\"Cook Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Острова Кука\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+56-#-####-####\\\", \\\"cc\\\": \\\"CL\\\", \\\"name_en\\\": \\\"Chile\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Чили\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+237-####-####\\\", \\\"cc\\\": \\\"CM\\\", \\\"name_en\\\": \\\"Cameroon\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Камерун\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+86(###)####-####\\\", \\\"cc\\\": \\\"CN\\\", \\\"name_en\\\": \\\"China (PRC)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Китайская Н.Р.\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+86(###)####-###\\\", \\\"cc\\\": \\\"CN\\\", \\\"name_en\\\": \\\"China (PRC)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Китайская Н.Р.\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+86-##-#####-#####\\\", \\\"cc\\\": \\\"CN\\\", \\\"name_en\\\": \\\"China (PRC)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Китайская Н.Р.\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+57(###)###-####\\\", \\\"cc\\\": \\\"CO\\\", \\\"name_en\\\": \\\"Colombia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Колумбия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+506-####-####\\\", \\\"cc\\\": \\\"CR\\\", \\\"name_en\\\": \\\"Costa Rica\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Коста-Рика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+53-#-###-####\\\", \\\"cc\\\": \\\"CU\\\", \\\"name_en\\\": \\\"Cuba\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Куба\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+238(###)##-##\\\", \\\"cc\\\": \\\"CV\\\", \\\"name_en\\\": \\\"Cape Verde\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кабо-Верде\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+599-###-####\\\", \\\"cc\\\": \\\"CW\\\", \\\"name_en\\\": \\\"Curacao\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кюрасао\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+357-##-###-###\\\", \\\"cc\\\": \\\"CY\\\", \\\"name_en\\\": \\\"Cyprus\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кипр\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+420(###)###-###\\\", \\\"cc\\\": \\\"CZ\\\", \\\"name_en\\\": \\\"Czech Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Чехия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49(####)###-####\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49(###)###-####\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49(###)##-####\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49(###)##-###\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49(###)##-##\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+49-###-###\\\", \\\"cc\\\": \\\"DE\\\", \\\"name_en\\\": \\\"Germany\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Германия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+253-##-##-##-##\\\", \\\"cc\\\": \\\"DJ\\\", \\\"name_en\\\": \\\"Djibouti\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Джибути\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+45-##-##-##-##\\\", \\\"cc\\\": \\\"DK\\\", \\\"name_en\\\": \\\"Denmark\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Дания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(767)###-####\\\", \\\"cc\\\": \\\"DM\\\", \\\"name_en\\\": \\\"Dominica\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Доминика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(809)###-####\\\", \\\"cc\\\": \\\"DO\\\", \\\"name_en\\\": \\\"Dominican Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Доминиканская Республика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(829)###-####\\\", \\\"cc\\\": \\\"DO\\\", \\\"name_en\\\": \\\"Dominican Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Доминиканская Республика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(849)###-####\\\", \\\"cc\\\": \\\"DO\\\", \\\"name_en\\\": \\\"Dominican Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Доминиканская Республика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+213-##-###-####\\\", \\\"cc\\\": \\\"DZ\\\", \\\"name_en\\\": \\\"Algeria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Алжир\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+593-##-###-####\\\", \\\"cc\\\": \\\"EC\\\", \\\"name_en\\\": \\\"Ecuador \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Эквадор \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+593-#-###-####\\\", \\\"cc\\\": \\\"EC\\\", \\\"name_en\\\": \\\"Ecuador\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Эквадор\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+372-####-####\\\", \\\"cc\\\": \\\"EE\\\", \\\"name_en\\\": \\\"Estonia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Эстония \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+372-###-####\\\", \\\"cc\\\": \\\"EE\\\", \\\"name_en\\\": \\\"Estonia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Эстония\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+20(###)###-####\\\", \\\"cc\\\": \\\"EG\\\", \\\"name_en\\\": \\\"Egypt\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Египет\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+291-#-###-###\\\", \\\"cc\\\": \\\"ER\\\", \\\"name_en\\\": \\\"Eritrea\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Эритрея\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+34(###)###-###\\\", \\\"cc\\\": \\\"ES\\\", \\\"name_en\\\": \\\"Spain\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Испания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+251-##-###-####\\\", \\\"cc\\\": \\\"ET\\\", \\\"name_en\\\": \\\"Ethiopia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Эфиопия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+358(###)###-##-##\\\", \\\"cc\\\": \\\"FI\\\", \\\"name_en\\\": \\\"Finland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Финляндия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+679-##-#####\\\", \\\"cc\\\": \\\"FJ\\\", \\\"name_en\\\": \\\"Fiji\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Фиджи\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+500-#####\\\", \\\"cc\\\": \\\"FK\\\", \\\"name_en\\\": \\\"Falkland Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Фолклендские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+691-###-####\\\", \\\"cc\\\": \\\"FM\\\", \\\"name_en\\\": \\\"F.S. Micronesia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ф.Ш. Микронезии\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+298-###-###\\\", \\\"cc\\\": \\\"FO\\\", \\\"name_en\\\": \\\"Faroe Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Фарерские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+262-#####-####\\\", \\\"cc\\\": \\\"FR\\\", \\\"name_en\\\": \\\"Mayotte\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Майотта\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+33(###)###-###\\\", \\\"cc\\\": \\\"FR\\\", \\\"name_en\\\": \\\"France\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Франция\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+508-##-####\\\", \\\"cc\\\": \\\"FR\\\", \\\"name_en\\\": \\\"St Pierre & Miquelon\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сен-Пьер и Микелон\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+590(###)###-###\\\", \\\"cc\\\": \\\"FR\\\", \\\"name_en\\\": \\\"Guadeloupe\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гваделупа\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+241-#-##-##-##\\\", \\\"cc\\\": \\\"GA\\\", \\\"name_en\\\": \\\"Gabon\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Габон\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(473)###-####\\\", \\\"cc\\\": \\\"GD\\\", \\\"name_en\\\": \\\"Grenada\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гренада\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+995(###)###-###\\\", \\\"cc\\\": \\\"GE\\\", \\\"name_en\\\": \\\"Rep. of Georgia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Грузия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+594-#####-####\\\", \\\"cc\\\": \\\"GF\\\", \\\"name_en\\\": \\\"Guiana (French)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Фр. Гвиана\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+233(###)###-###\\\", \\\"cc\\\": \\\"GH\\\", \\\"name_en\\\": \\\"Ghana\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гана\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+350-###-#####\\\", \\\"cc\\\": \\\"GI\\\", \\\"name_en\\\": \\\"Gibraltar\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гибралтар\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+299-##-##-##\\\", \\\"cc\\\": \\\"GL\\\", \\\"name_en\\\": \\\"Greenland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гренландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+220(###)##-##\\\", \\\"cc\\\": \\\"GM\\\", \\\"name_en\\\": \\\"Gambia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гамбия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+224-##-###-###\\\", \\\"cc\\\": \\\"GN\\\", \\\"name_en\\\": \\\"Guinea\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гвинея\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+240-##-###-####\\\", \\\"cc\\\": \\\"GQ\\\", \\\"name_en\\\": \\\"Equatorial Guinea\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Экваториальная Гвинея\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+30(###)###-####\\\", \\\"cc\\\": \\\"GR\\\", \\\"name_en\\\": \\\"Greece\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Греция\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+502-#-###-####\\\", \\\"cc\\\": \\\"GT\\\", \\\"name_en\\\": \\\"Guatemala\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гватемала\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(671)###-####\\\", \\\"cc\\\": \\\"GU\\\", \\\"name_en\\\": \\\"Guam\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гуам\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+245-#-######\\\", \\\"cc\\\": \\\"GW\\\", \\\"name_en\\\": \\\"Guinea-Bissau\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гвинея-Бисау\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+592-###-####\\\", \\\"cc\\\": \\\"GY\\\", \\\"name_en\\\": \\\"Guyana\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гайана\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+852-####-####\\\", \\\"cc\\\": \\\"HK\\\", \\\"name_en\\\": \\\"Hong Kong\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гонконг\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+504-####-####\\\", \\\"cc\\\": \\\"HN\\\", \\\"name_en\\\": \\\"Honduras\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гондурас\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+385-##-###-###\\\", \\\"cc\\\": \\\"HR\\\", \\\"name_en\\\": \\\"Croatia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Хорватия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+509-##-##-####\\\", \\\"cc\\\": \\\"HT\\\", \\\"name_en\\\": \\\"Haiti\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Гаити\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+36(###)###-###\\\", \\\"cc\\\": \\\"HU\\\", \\\"name_en\\\": \\\"Hungary\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Венгрия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+62(8##)###-####\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Индонезия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+62-##-###-##\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Индонезия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+62-##-###-###\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Индонезия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+62-##-###-####\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Индонезия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+62(8##)###-###\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Индонезия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+62(8##)###-##-###\\\", \\\"cc\\\": \\\"ID\\\", \\\"name_en\\\": \\\"Indonesia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Индонезия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+353(###)###-###\\\", \\\"cc\\\": \\\"IE\\\", \\\"name_en\\\": \\\"Ireland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ирландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+972-5#-###-####\\\", \\\"cc\\\": \\\"IL\\\", \\\"name_en\\\": \\\"Israel \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Израиль \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+972-#-###-####\\\", \\\"cc\\\": \\\"IL\\\", \\\"name_en\\\": \\\"Israel\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Израиль\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+91(####)###-###\\\", \\\"cc\\\": \\\"IN\\\", \\\"name_en\\\": \\\"India\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Индия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+246-###-####\\\", \\\"cc\\\": \\\"IO\\\", \\\"name_en\\\": \\\"Diego Garcia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Диего-Гарсия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+964(###)###-####\\\", \\\"cc\\\": \\\"IQ\\\", \\\"name_en\\\": \\\"Iraq\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ирак\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+98(###)###-####\\\", \\\"cc\\\": \\\"IR\\\", \\\"name_en\\\": \\\"Iran\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Иран\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+354-###-####\\\", \\\"cc\\\": \\\"IS\\\", \\\"name_en\\\": \\\"Iceland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Исландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+39(###)####-###\\\", \\\"cc\\\": \\\"IT\\\", \\\"name_en\\\": \\\"Italy\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Италия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(876)###-####\\\", \\\"cc\\\": \\\"JM\\\", \\\"name_en\\\": \\\"Jamaica\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ямайка\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+962-#-####-####\\\", \\\"cc\\\": \\\"JO\\\", \\\"name_en\\\": \\\"Jordan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Иордания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+81-##-####-####\\\", \\\"cc\\\": \\\"JP\\\", \\\"name_en\\\": \\\"Japan \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Япония \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+81(###)###-###\\\", \\\"cc\\\": \\\"JP\\\", \\\"name_en\\\": \\\"Japan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Япония\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+254-###-######\\\", \\\"cc\\\": \\\"KE\\\", \\\"name_en\\\": \\\"Kenya\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кения\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+996(###)###-###\\\", \\\"cc\\\": \\\"KG\\\", \\\"name_en\\\": \\\"Kyrgyzstan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Киргизия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+855-##-###-###\\\", \\\"cc\\\": \\\"KH\\\", \\\"name_en\\\": \\\"Cambodia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Камбоджа\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+686-##-###\\\", \\\"cc\\\": \\\"KI\\\", \\\"name_en\\\": \\\"Kiribati\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кирибати\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+269-##-#####\\\", \\\"cc\\\": \\\"KM\\\", \\\"name_en\\\": \\\"Comoros\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Коморы\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(869)###-####\\\", \\\"cc\\\": \\\"KN\\\", \\\"name_en\\\": \\\"Saint Kitts & Nevis\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сент-Китс и Невис\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-191-###-####\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North) \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Корейская НДР \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-##-###-###\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Корейская НДР\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-###-####-###\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Корейская НДР\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-###-###\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Корейская НДР\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-####-####\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Корейская НДР\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+850-####-#############\\\", \\\"cc\\\": \\\"KP\\\", \\\"name_en\\\": \\\"DPR Korea (North)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Корейская НДР\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+82-##-###-####\\\", \\\"cc\\\": \\\"KR\\\", \\\"name_en\\\": \\\"Korea (South)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Респ. Корея\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+965-####-####\\\", \\\"cc\\\": \\\"KW\\\", \\\"name_en\\\": \\\"Kuwait\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Кувейт\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(345)###-####\\\", \\\"cc\\\": \\\"KY\\\", \\\"name_en\\\": \\\"Cayman Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Каймановы острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+7(6##)###-##-##\\\", \\\"cc\\\": \\\"KZ\\\", \\\"name_en\\\": \\\"Kazakhstan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Казахстан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+7(7##)###-##-##\\\", \\\"cc\\\": \\\"KZ\\\", \\\"name_en\\\": \\\"Kazakhstan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Казахстан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+856(20##)###-###\\\", \\\"cc\\\": \\\"LA\\\", \\\"name_en\\\": \\\"Laos \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Лаос \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+856-##-###-###\\\", \\\"cc\\\": \\\"LA\\\", \\\"name_en\\\": \\\"Laos\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Лаос\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+961-##-###-###\\\", \\\"cc\\\": \\\"LB\\\", \\\"name_en\\\": \\\"Lebanon \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Ливан \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+961-#-###-###\\\", \\\"cc\\\": \\\"LB\\\", \\\"name_en\\\": \\\"Lebanon\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ливан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(758)###-####\\\", \\\"cc\\\": \\\"LC\\\", \\\"name_en\\\": \\\"Saint Lucia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сент-Люсия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+423(###)###-####\\\", \\\"cc\\\": \\\"LI\\\", \\\"name_en\\\": \\\"Liechtenstein\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Лихтенштейн\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+94-##-###-####\\\", \\\"cc\\\": \\\"LK\\\", \\\"name_en\\\": \\\"Sri Lanka\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Шри-Ланка\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+231-##-###-###\\\", \\\"cc\\\": \\\"LR\\\", \\\"name_en\\\": \\\"Liberia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Либерия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+266-#-###-####\\\", \\\"cc\\\": \\\"LS\\\", \\\"name_en\\\": \\\"Lesotho\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Лесото\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+370(###)##-###\\\", \\\"cc\\\": \\\"LT\\\", \\\"name_en\\\": \\\"Lithuania\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Литва\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+352(###)###-###\\\", \\\"cc\\\": \\\"LU\\\", \\\"name_en\\\": \\\"Luxembourg\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Люксембург\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+371-##-###-###\\\", \\\"cc\\\": \\\"LV\\\", \\\"name_en\\\": \\\"Latvia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Латвия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+218-##-###-###\\\", \\\"cc\\\": \\\"LY\\\", \\\"name_en\\\": \\\"Libya\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ливия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+218-21-###-####\\\", \\\"cc\\\": \\\"LY\\\", \\\"name_en\\\": \\\"Libya\\\", \\\"desc_en\\\": \\\"Tripoli\\\", \\\"name_ru\\\": \\\"Ливия\\\", \\\"desc_ru\\\": \\\"Триполи\\\" },\\n\\t{ \\\"mask\\\": \\\"+212-##-####-###\\\", \\\"cc\\\": \\\"MA\\\", \\\"name_en\\\": \\\"Morocco\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Марокко\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+377(###)###-###\\\", \\\"cc\\\": \\\"MC\\\", \\\"name_en\\\": \\\"Monaco\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Монако\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+377-##-###-###\\\", \\\"cc\\\": \\\"MC\\\", \\\"name_en\\\": \\\"Monaco\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Монако\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+373-####-####\\\", \\\"cc\\\": \\\"MD\\\", \\\"name_en\\\": \\\"Moldova\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Молдова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+382-##-###-###\\\", \\\"cc\\\": \\\"ME\\\", \\\"name_en\\\": \\\"Montenegro\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Черногория\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+261-##-##-#####\\\", \\\"cc\\\": \\\"MG\\\", \\\"name_en\\\": \\\"Madagascar\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мадагаскар\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+692-###-####\\\", \\\"cc\\\": \\\"MH\\\", \\\"name_en\\\": \\\"Marshall Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Маршалловы Острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+389-##-###-###\\\", \\\"cc\\\": \\\"MK\\\", \\\"name_en\\\": \\\"Republic of Macedonia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Респ. Македония\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+223-##-##-####\\\", \\\"cc\\\": \\\"ML\\\", \\\"name_en\\\": \\\"Mali\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мали\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+95-##-###-###\\\", \\\"cc\\\": \\\"MM\\\", \\\"name_en\\\": \\\"Burma (Myanmar)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бирма (Мьянма)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+95-#-###-###\\\", \\\"cc\\\": \\\"MM\\\", \\\"name_en\\\": \\\"Burma (Myanmar)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бирма (Мьянма)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+95-###-###\\\", \\\"cc\\\": \\\"MM\\\", \\\"name_en\\\": \\\"Burma (Myanmar)\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Бирма (Мьянма)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+976-##-##-####\\\", \\\"cc\\\": \\\"MN\\\", \\\"name_en\\\": \\\"Mongolia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Монголия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+853-####-####\\\", \\\"cc\\\": \\\"MO\\\", \\\"name_en\\\": \\\"Macau\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Макао\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(670)###-####\\\", \\\"cc\\\": \\\"MP\\\", \\\"name_en\\\": \\\"Northern Mariana Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Северные Марианские острова Сайпан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+596(###)##-##-##\\\", \\\"cc\\\": \\\"MQ\\\", \\\"name_en\\\": \\\"Martinique\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мартиника\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+222-##-##-####\\\", \\\"cc\\\": \\\"MR\\\", \\\"name_en\\\": \\\"Mauritania\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мавритания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(664)###-####\\\", \\\"cc\\\": \\\"MS\\\", \\\"name_en\\\": \\\"Montserrat\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Монтсеррат\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+356-####-####\\\", \\\"cc\\\": \\\"MT\\\", \\\"name_en\\\": \\\"Malta\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мальта\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+230-###-####\\\", \\\"cc\\\": \\\"MU\\\", \\\"name_en\\\": \\\"Mauritius\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Маврикий\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+960-###-####\\\", \\\"cc\\\": \\\"MV\\\", \\\"name_en\\\": \\\"Maldives\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мальдивские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+265-1-###-###\\\", \\\"cc\\\": \\\"MW\\\", \\\"name_en\\\": \\\"Malawi\\\", \\\"desc_en\\\": \\\"Telecom Ltd\\\", \\\"name_ru\\\": \\\"Малави\\\", \\\"desc_ru\\\": \\\"Telecom Ltd\\\" },\\n\\t{ \\\"mask\\\": \\\"+265-#-####-####\\\", \\\"cc\\\": \\\"MW\\\", \\\"name_en\\\": \\\"Malawi\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Малави\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+52(###)###-####\\\", \\\"cc\\\": \\\"MX\\\", \\\"name_en\\\": \\\"Mexico\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мексика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+52-##-##-####\\\", \\\"cc\\\": \\\"MX\\\", \\\"name_en\\\": \\\"Mexico\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мексика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+60-##-###-####\\\", \\\"cc\\\": \\\"MY\\\", \\\"name_en\\\": \\\"Malaysia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Малайзия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+60(###)###-###\\\", \\\"cc\\\": \\\"MY\\\", \\\"name_en\\\": \\\"Malaysia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Малайзия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+60-##-###-###\\\", \\\"cc\\\": \\\"MY\\\", \\\"name_en\\\": \\\"Malaysia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Малайзия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+60-#-###-###\\\", \\\"cc\\\": \\\"MY\\\", \\\"name_en\\\": \\\"Malaysia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Малайзия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+258-##-###-###\\\", \\\"cc\\\": \\\"MZ\\\", \\\"name_en\\\": \\\"Mozambique\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Мозамбик\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+264-##-###-####\\\", \\\"cc\\\": \\\"NA\\\", \\\"name_en\\\": \\\"Namibia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Намибия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+687-##-####\\\", \\\"cc\\\": \\\"NC\\\", \\\"name_en\\\": \\\"New Caledonia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Новая Каледония\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+227-##-##-####\\\", \\\"cc\\\": \\\"NE\\\", \\\"name_en\\\": \\\"Niger\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нигер\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+672-3##-###\\\", \\\"cc\\\": \\\"NF\\\", \\\"name_en\\\": \\\"Norfolk Island\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Норфолк (остров)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+234(###)###-####\\\", \\\"cc\\\": \\\"NG\\\", \\\"name_en\\\": \\\"Nigeria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нигерия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+234-##-###-###\\\", \\\"cc\\\": \\\"NG\\\", \\\"name_en\\\": \\\"Nigeria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нигерия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+234-##-###-##\\\", \\\"cc\\\": \\\"NG\\\", \\\"name_en\\\": \\\"Nigeria\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нигерия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+234(###)###-####\\\", \\\"cc\\\": \\\"NG\\\", \\\"name_en\\\": \\\"Nigeria \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Нигерия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+505-####-####\\\", \\\"cc\\\": \\\"NI\\\", \\\"name_en\\\": \\\"Nicaragua\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Никарагуа\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+31-##-###-####\\\", \\\"cc\\\": \\\"NL\\\", \\\"name_en\\\": \\\"Netherlands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Нидерланды\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+47(###)##-###\\\", \\\"cc\\\": \\\"NO\\\", \\\"name_en\\\": \\\"Norway\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Норвегия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+977-##-###-###\\\", \\\"cc\\\": \\\"NP\\\", \\\"name_en\\\": \\\"Nepal\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Непал\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+674-###-####\\\", \\\"cc\\\": \\\"NR\\\", \\\"name_en\\\": \\\"Nauru\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Науру\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+683-####\\\", \\\"cc\\\": \\\"NU\\\", \\\"name_en\\\": \\\"Niue\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ниуэ\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+64(###)###-###\\\", \\\"cc\\\": \\\"NZ\\\", \\\"name_en\\\": \\\"New Zealand\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Новая Зеландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+64-##-###-###\\\", \\\"cc\\\": \\\"NZ\\\", \\\"name_en\\\": \\\"New Zealand\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Новая Зеландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+64(###)###-####\\\", \\\"cc\\\": \\\"NZ\\\", \\\"name_en\\\": \\\"New Zealand\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Новая Зеландия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+968-##-###-###\\\", \\\"cc\\\": \\\"OM\\\", \\\"name_en\\\": \\\"Oman\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Оман\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+507-###-####\\\", \\\"cc\\\": \\\"PA\\\", \\\"name_en\\\": \\\"Panama\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Панама\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+51(###)###-###\\\", \\\"cc\\\": \\\"PE\\\", \\\"name_en\\\": \\\"Peru\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Перу\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+689-##-##-##\\\", \\\"cc\\\": \\\"PF\\\", \\\"name_en\\\": \\\"French Polynesia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Французская Полинезия (Таити)\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+675(###)##-###\\\", \\\"cc\\\": \\\"PG\\\", \\\"name_en\\\": \\\"Papua New Guinea\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Папуа-Новая Гвинея\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+63(###)###-####\\\", \\\"cc\\\": \\\"PH\\\", \\\"name_en\\\": \\\"Philippines\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Филиппины\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+92(###)###-####\\\", \\\"cc\\\": \\\"PK\\\", \\\"name_en\\\": \\\"Pakistan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Пакистан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+48(###)###-###\\\", \\\"cc\\\": \\\"PL\\\", \\\"name_en\\\": \\\"Poland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Польша\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+970-##-###-####\\\", \\\"cc\\\": \\\"PS\\\", \\\"name_en\\\": \\\"Palestine\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Палестина\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+351-##-###-####\\\", \\\"cc\\\": \\\"PT\\\", \\\"name_en\\\": \\\"Portugal\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Португалия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+680-###-####\\\", \\\"cc\\\": \\\"PW\\\", \\\"name_en\\\": \\\"Palau\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Палау\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+595(###)###-###\\\", \\\"cc\\\": \\\"PY\\\", \\\"name_en\\\": \\\"Paraguay\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Парагвай\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+974-####-####\\\", \\\"cc\\\": \\\"QA\\\", \\\"name_en\\\": \\\"Qatar\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Катар\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+262-#####-####\\\", \\\"cc\\\": \\\"RE\\\", \\\"name_en\\\": \\\"Reunion\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Реюньон\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+40-##-###-####\\\", \\\"cc\\\": \\\"RO\\\", \\\"name_en\\\": \\\"Romania\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Румыния\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+381-##-###-####\\\", \\\"cc\\\": \\\"RS\\\", \\\"name_en\\\": \\\"Serbia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сербия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+7(###)###-##-##\\\", \\\"cc\\\": \\\"RU\\\", \\\"name_en\\\": \\\"Russia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Россия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+250(###)###-###\\\", \\\"cc\\\": \\\"RW\\\", \\\"name_en\\\": \\\"Rwanda\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Руанда\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+966-5-####-####\\\", \\\"cc\\\": \\\"SA\\\", \\\"name_en\\\": \\\"Saudi Arabia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Саудовская Аравия \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+966-#-###-####\\\", \\\"cc\\\": \\\"SA\\\", \\\"name_en\\\": \\\"Saudi Arabia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Саудовская Аравия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+677-###-####\\\", \\\"cc\\\": \\\"SB\\\", \\\"name_en\\\": \\\"Solomon Islands \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Соломоновы Острова \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+677-#####\\\", \\\"cc\\\": \\\"SB\\\", \\\"name_en\\\": \\\"Solomon Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Соломоновы Острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+248-#-###-###\\\", \\\"cc\\\": \\\"SC\\\", \\\"name_en\\\": \\\"Seychelles\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сейшелы\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+249-##-###-####\\\", \\\"cc\\\": \\\"SD\\\", \\\"name_en\\\": \\\"Sudan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Судан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+46-##-###-####\\\", \\\"cc\\\": \\\"SE\\\", \\\"name_en\\\": \\\"Sweden\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Швеция\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+65-####-####\\\", \\\"cc\\\": \\\"SG\\\", \\\"name_en\\\": \\\"Singapore\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сингапур\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+290-####\\\", \\\"cc\\\": \\\"SH\\\", \\\"name_en\\\": \\\"Saint Helena\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Остров Святой Елены\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+290-####\\\", \\\"cc\\\": \\\"SH\\\", \\\"name_en\\\": \\\"Tristan da Cunha\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тристан-да-Кунья\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+386-##-###-###\\\", \\\"cc\\\": \\\"SI\\\", \\\"name_en\\\": \\\"Slovenia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Словения\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+421(###)###-###\\\", \\\"cc\\\": \\\"SK\\\", \\\"name_en\\\": \\\"Slovakia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Словакия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+232-##-######\\\", \\\"cc\\\": \\\"SL\\\", \\\"name_en\\\": \\\"Sierra Leone\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сьерра-Леоне\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+378-####-######\\\", \\\"cc\\\": \\\"SM\\\", \\\"name_en\\\": \\\"San Marino\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сан-Марино\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+221-##-###-####\\\", \\\"cc\\\": \\\"SN\\\", \\\"name_en\\\": \\\"Senegal\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сенегал\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+252-##-###-###\\\", \\\"cc\\\": \\\"SO\\\", \\\"name_en\\\": \\\"Somalia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сомали\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+252-#-###-###\\\", \\\"cc\\\": \\\"SO\\\", \\\"name_en\\\": \\\"Somalia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сомали\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+252-#-###-###\\\", \\\"cc\\\": \\\"SO\\\", \\\"name_en\\\": \\\"Somalia \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Сомали \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+597-###-####\\\", \\\"cc\\\": \\\"SR\\\", \\\"name_en\\\": \\\"Suriname \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Суринам \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+597-###-###\\\", \\\"cc\\\": \\\"SR\\\", \\\"name_en\\\": \\\"Suriname\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Суринам\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+211-##-###-####\\\", \\\"cc\\\": \\\"SS\\\", \\\"name_en\\\": \\\"South Sudan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Южный Судан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+239-##-#####\\\", \\\"cc\\\": \\\"ST\\\", \\\"name_en\\\": \\\"Sao Tome and Principe\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сан-Томе и Принсипи\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+503-##-##-####\\\", \\\"cc\\\": \\\"SV\\\", \\\"name_en\\\": \\\"El Salvador\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сальвадор\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(721)###-####\\\", \\\"cc\\\": \\\"SX\\\", \\\"name_en\\\": \\\"Sint Maarten\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Синт-Маартен\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+963-##-####-###\\\", \\\"cc\\\": \\\"SY\\\", \\\"name_en\\\": \\\"Syrian Arab Republic\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сирийская арабская республика\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+268-##-##-####\\\", \\\"cc\\\": \\\"SZ\\\", \\\"name_en\\\": \\\"Swaziland\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Свазиленд\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(649)###-####\\\", \\\"cc\\\": \\\"TC\\\", \\\"name_en\\\": \\\"Turks & Caicos\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тёркс и Кайкос\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+235-##-##-##-##\\\", \\\"cc\\\": \\\"TD\\\", \\\"name_en\\\": \\\"Chad\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Чад\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+228-##-###-###\\\", \\\"cc\\\": \\\"TG\\\", \\\"name_en\\\": \\\"Togo\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Того\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+66-##-###-####\\\", \\\"cc\\\": \\\"TH\\\", \\\"name_en\\\": \\\"Thailand \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Таиланд \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+66-##-###-###\\\", \\\"cc\\\": \\\"TH\\\", \\\"name_en\\\": \\\"Thailand\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Таиланд\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+992-##-###-####\\\", \\\"cc\\\": \\\"TJ\\\", \\\"name_en\\\": \\\"Tajikistan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Таджикистан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+690-####\\\", \\\"cc\\\": \\\"TK\\\", \\\"name_en\\\": \\\"Tokelau\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Токелау\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+670-###-####\\\", \\\"cc\\\": \\\"TL\\\", \\\"name_en\\\": \\\"East Timor\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Восточный Тимор\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+670-77#-#####\\\", \\\"cc\\\": \\\"TL\\\", \\\"name_en\\\": \\\"East Timor\\\", \\\"desc_en\\\": \\\"Timor Telecom\\\", \\\"name_ru\\\": \\\"Восточный Тимор\\\", \\\"desc_ru\\\": \\\"Timor Telecom\\\" },\\n\\t{ \\\"mask\\\": \\\"+670-78#-#####\\\", \\\"cc\\\": \\\"TL\\\", \\\"name_en\\\": \\\"East Timor\\\", \\\"desc_en\\\": \\\"Timor Telecom\\\", \\\"name_ru\\\": \\\"Восточный Тимор\\\", \\\"desc_ru\\\": \\\"Timor Telecom\\\" },\\n\\t{ \\\"mask\\\": \\\"+993-#-###-####\\\", \\\"cc\\\": \\\"TM\\\", \\\"name_en\\\": \\\"Turkmenistan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Туркменистан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+216-##-###-###\\\", \\\"cc\\\": \\\"TN\\\", \\\"name_en\\\": \\\"Tunisia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тунис\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+676-#####\\\", \\\"cc\\\": \\\"TO\\\", \\\"name_en\\\": \\\"Tonga\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тонга\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+90(###)###-####\\\", \\\"cc\\\": \\\"TR\\\", \\\"name_en\\\": \\\"Turkey\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Турция\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(868)###-####\\\", \\\"cc\\\": \\\"TT\\\", \\\"name_en\\\": \\\"Trinidad & Tobago\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тринидад и Тобаго\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+688-90####\\\", \\\"cc\\\": \\\"TV\\\", \\\"name_en\\\": \\\"Tuvalu \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Тувалу \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+688-2####\\\", \\\"cc\\\": \\\"TV\\\", \\\"name_en\\\": \\\"Tuvalu\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тувалу\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+886-#-####-####\\\", \\\"cc\\\": \\\"TW\\\", \\\"name_en\\\": \\\"Taiwan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тайвань\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+886-####-####\\\", \\\"cc\\\": \\\"TW\\\", \\\"name_en\\\": \\\"Taiwan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Тайвань\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+255-##-###-####\\\", \\\"cc\\\": \\\"TZ\\\", \\\"name_en\\\": \\\"Tanzania\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Танзания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+380(##)###-##-##\\\", \\\"cc\\\": \\\"UA\\\", \\\"name_en\\\": \\\"Ukraine\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Украина\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+256(###)###-###\\\", \\\"cc\\\": \\\"UG\\\", \\\"name_en\\\": \\\"Uganda\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Уганда\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+44-##-####-####\\\", \\\"cc\\\": \\\"UK\\\", \\\"name_en\\\": \\\"United Kingdom\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Великобритания\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+598-#-###-##-##\\\", \\\"cc\\\": \\\"UY\\\", \\\"name_en\\\": \\\"Uruguay\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Уругвай\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+998-##-###-####\\\", \\\"cc\\\": \\\"UZ\\\", \\\"name_en\\\": \\\"Uzbekistan\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Узбекистан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+39-6-698-#####\\\", \\\"cc\\\": \\\"VA\\\", \\\"name_en\\\": \\\"Vatican City\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Ватикан\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(784)###-####\\\", \\\"cc\\\": \\\"VC\\\", \\\"name_en\\\": \\\"Saint Vincent & the Grenadines\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Сент-Винсент и Гренадины\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+58(###)###-####\\\", \\\"cc\\\": \\\"VE\\\", \\\"name_en\\\": \\\"Venezuela\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Венесуэла\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(284)###-####\\\", \\\"cc\\\": \\\"VG\\\", \\\"name_en\\\": \\\"British Virgin Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Британские Виргинские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(340)###-####\\\", \\\"cc\\\": \\\"VI\\\", \\\"name_en\\\": \\\"US Virgin Islands\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Американские Виргинские острова\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+84-##-####-###\\\", \\\"cc\\\": \\\"VN\\\", \\\"name_en\\\": \\\"Vietnam\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Вьетнам\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+84(###)####-###\\\", \\\"cc\\\": \\\"VN\\\", \\\"name_en\\\": \\\"Vietnam\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Вьетнам\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+678-##-#####\\\", \\\"cc\\\": \\\"VU\\\", \\\"name_en\\\": \\\"Vanuatu \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Вануату \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+678-#####\\\", \\\"cc\\\": \\\"VU\\\", \\\"name_en\\\": \\\"Vanuatu\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Вануату\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+681-##-####\\\", \\\"cc\\\": \\\"WF\\\", \\\"name_en\\\": \\\"Wallis and Futuna\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Уоллис и Футуна\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+685-##-####\\\", \\\"cc\\\": \\\"WS\\\", \\\"name_en\\\": \\\"Samoa\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Самоа\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+967-###-###-###\\\", \\\"cc\\\": \\\"YE\\\", \\\"name_en\\\": \\\"Yemen \\\", \\\"desc_en\\\": \\\"mobile\\\", \\\"name_ru\\\": \\\"Йемен \\\", \\\"desc_ru\\\": \\\"мобильные\\\" },\\n\\t{ \\\"mask\\\": \\\"+967-#-###-###\\\", \\\"cc\\\": \\\"YE\\\", \\\"name_en\\\": \\\"Yemen\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Йемен\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+967-##-###-###\\\", \\\"cc\\\": \\\"YE\\\", \\\"name_en\\\": \\\"Yemen\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Йемен\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+27-##-###-####\\\", \\\"cc\\\": \\\"ZA\\\", \\\"name_en\\\": \\\"South Africa\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Южно-Африканская Респ.\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+260-##-###-####\\\", \\\"cc\\\": \\\"ZM\\\", \\\"name_en\\\": \\\"Zambia\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Замбия\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+263-#-######\\\", \\\"cc\\\": \\\"ZW\\\", \\\"name_en\\\": \\\"Zimbabwe\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"Зимбабве\\\", \\\"desc_ru\\\": \\\"\\\" },\\n\\t{ \\\"mask\\\": \\\"+1(###)###-####\\\", \\\"cc\\\": [\\\"US\\\", \\\"CA\\\"], \\\"name_en\\\": \\\"USA and Canada\\\", \\\"desc_en\\\": \\\"\\\", \\\"name_ru\\\": \\\"США и Канада\\\", \\\"desc_ru\\\": \\\"\\\" }\\n]\\n;\\n        \\n        _.tr({\\n            'call_requests.error_validator_phone': 'The phone number in the <b>[field]<\\\\/b> field is invalid.'\\n        });\\n    }(Tygh, Tygh.$));\\n</script>\\n<script type=\\\"text/javascript\\\">\\nCloudZoom = {\\n    path: 'http://demo.cs-cart.com/js/addons/image_zoom'\\n};\\n</script>\\n\\n\\n<!-- Inline scripts -->\\n\\n<script type=\\\"text/javascript\\\">\\n(function(_, $) {\\n    $(document).ready(function() {\\n\\n        $(_.doc).on('click', '#off_minimize_block', function() {\\n            $('#tygh_container').removeClass('ty-top-panel-padding');\\n        });\\n\\n        $(_.doc).on('click', '#on_minimize_block', function() {\\n            $('#tygh_container').addClass('ty-top-panel-padding');\\n        });\\n\\n        var open = $.cookie.get('minimize_block');\\n        if (open) {\\n            $('#tygh_container').removeClass('ty-top-panel-padding');\\n        } else {\\n            $('#tygh_container').addClass('ty-top-panel-padding');\\n        }\\n\\n        // Countdown timer\\n        var mins = 30;\\n        var date = new Date(1477395969 * 1000);\\n        var minutes_left = date.getMinutes() > mins ? 60 - date.getMinutes() : mins - date.getMinutes();\\n        var seconds = Math.abs(minutes_left * 60 - date.getSeconds());\\n\\n        var countdownTimer = setInterval(function secondPassed() {\\n            var elm = $('#timer');\\n            var minutes = Math.round((seconds - 30)/60);\\n            var remainingSeconds = seconds % 60;\\n            if (remainingSeconds < 10) {\\n                remainingSeconds = \\\"0\\\" + remainingSeconds;\\n            }\\n            elm.html(minutes + \\\":\\\" + remainingSeconds);\\n            if (seconds == 0) {\\n                clearInterval(countdownTimer);\\n            } else {\\n                seconds--;\\n            }\\n        }, 1000);\\n\\n    });\\n}(Tygh, Tygh.$));\\n</script>\\n\\n<script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/tygh/exceptions.js?ver=4.3.10\\\" ></script><script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/tygh/previewers/magnific.previewer.js?ver=4.3.10\\\" ></script><script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/tygh/product_image_gallery.js?ver=4.3.10\\\" ></script><script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/addons/image_zoom/cloudzoom.js?ver=4.3.10\\\" ></script><script type=\\\"text/javascript\\\">\\n(function(_, $) {\\n\\n    $.ceEvent('on', 'ce.commoninit', function(context) {\\n\\n        var mobileWidth = 767,\\n            imageZoomSize = 450;\\n\\n        // Disable Cloud zoom on mobile devices\\n        if($(window).width() > mobileWidth) {\\n\\n            context.find('.cm-previewer').each(function() {\\n                var elm = $(this).find('img'),\\n                    elm_width = $(this).data('caImageWidth'),\\n                    elm_height = $(this).data('caImageHeight');\\n                if(elm.data('CloudZoom') == undefined) {\\n                    elm.attr('data-cloudzoom', 'zoomImage: \\\"' + $(this).prop('href') + '\\\"')\\n                        .CloudZoom({\\n                            tintColor: '#ffffff',\\n                            tintOpacity: 0.6,\\n                            animationTime: 200,\\n                            easeTime: 200,\\n                            zoomFlyOut: true,\\n                            zoomSizeMode: 'zoom',\\n                            captionPosition: 'bottom',\\n                                                        zoomPosition: '3',\\n                            autoInside: mobileWidth,\\n                            disableOnScreenWidth: mobileWidth,\\n                            zoomWidth: elm_width < imageZoomSize ? elm_width : imageZoomSize,\\n                            zoomHeight: elm_height < imageZoomSize ? elm_height : imageZoomSize\\n                    });\\n                }\\n            });\\n\\n        }\\n    });\\n\\n}(Tygh, Tygh.$));\\n</script><script type=\\\"text/javascript\\\" src=\\\"http://demo.cs-cart.com/js/tygh/tabs.js?ver=4.3.10\\\" ></script><script type=\\\"text/javascript\\\">\\n(function(_, $) {\\n    $.ceEvent('on', 'ce.formpre_product_form_172', function(frm, elm) {\\n        if ($('#warning_172').length) {\\n            $.ceNotification('show', {\\n                type: 'W', \\n                title: _.tr('warning'), \\n                message: _.tr('cannot_buy'),\\n            });\\n\\n            return false;\\n        }\\n            \\n        return true;\\n    });\\n}(Tygh, Tygh.$));\\n</script>\\n\\n\\n\\n                    \\n<a href=\\\"#\\\" data-ca-target-id=\\\"ask_a_question\\\" onclick=\\\"$.cookie.set('ask_question_closed', 'Y', false, '/');\\\" class=\\\"ask_question-open cm-dialog-opener cm-dialog-auto-size\\\" >\\n\\tHave a question?\\n\\t<img src=\\\"http://demo.cs-cart.com/design/themes/responsive/media/images/addons/ask_question/question.png\\\" alt=\\\"\\\">\\n\\t<span class=\\\"ask_question-pulse\\\"></span>\\n</a>\\n<div id=\\\"ask_a_question\\\" class=\\\"ask_question-dialog hidden\\\">\\n\\t<form id=\\\"form_question\\\" action=\\\"http://demo.cs-cart.com/index.php?dispatch=ask_question.send\\\" method=\\\"post\\\" name=\\\"form_question\\\" enctype=\\\"multipart/form-data\\\">\\n\\n        <input type=\\\"hidden\\\" name=\\\"fake\\\" value=\\\"1\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"name2\\\" value=\\\"\\\" />\\n        <input type=\\\"hidden\\\" name=\\\"redirect_url\\\" value=\\\"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/\\\" />\\n\\n\\t\\t<span class=\\\"cm-dialog-closer ask_question-dialog-closer\\\">\\n\\t\\t\\t<span class=\\\"ty-icon-cancel\\\"></span>\\n\\t\\t</span>\\n\\t\\t<div class=\\\"ask_question-form\\\">\\n\\t\\t\\t<h2>Have a question about CS-Cart?</h2>\\n\\t\\t\\t<h3>Don't waste your time, just ask now. It's free.</h3>\\n\\t\\t\\t<div class=\\\"ask_wrapp\\\">\\n\\t\\t\\t\\t<label for=\\\"askquestion_text\\\" class=\\\"cm-required hidden\\\"></label>\\n\\t\\t\\t\\t<textarea name=\\\"data[message]\\\" id=\\\"askquestion_text\\\" cols=\\\"30\\\" rows=\\\"10\\\" placeholder=\\\"What’s your question about? *\\\"></textarea>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"ask_wrapp\\\">\\n\\t\\t\\t\\t<label for=\\\"askquestion_name\\\" class=\\\"cm-required hidden\\\"></label>\\n\\t\\t\\t\\t<input type=\\\"text\\\" id=\\\"askquestion_name\\\" name=\\\"data[name]\\\" placeholder=\\\"Name *\\\">\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"ask_wrapp\\\">\\n\\t\\t\\t\\t<label for=\\\"askquestion_mail\\\" class=\\\"cm-required cm-email hidden\\\"></label>\\n\\t\\t\\t\\t<input type=\\\"text\\\" id=\\\"askquestion_mail\\\" name=\\\"data[email]\\\" placeholder=\\\"Email *\\\">\\n\\t\\t\\t</div>\\n\\t\\t\\t<input type=\\\"submit\\\" onclick=\\\"$.cookie.set('ask_question_closed', 'Y', false, '/')\\\" value=\\\"Submit the Question\\\">\\n\\t\\t</div>\\n\\t\\t<div class=\\\"ask_question-image\\\">\\n\\t\\t\\t<div class=\\\"name\\\">\\n\\t\\t\\t\\t<span>Alex</span>\\n\\t\\t\\t\\tHead of Sales Department\\n\\t\\t\\t</div>\\n\\t\\t\\t<img src=\\\"http://demo.cs-cart.com/design/themes/responsive/media/images/addons/ask_question/alex.png\\\" alt=\\\"\\\">\\n\\t\\t</div>\\n\\t</form>\\n</div>\\n<div id=\\\"ask_a_question_thanks\\\" class=\\\"ask_question-dialog hidden\\\">\\n\\t<span class=\\\"cm-dialog-closer ask_question-dialog-closer\\\">\\n\\t\\t<span class=\\\"ty-icon-cancel\\\"></span>\\n\\t</span>\\n\\t<div class=\\\"ask_question--thanks\\\">\\n\\t\\t<h1>Thank you for your interest in CS-Cart!</h1>\\n\\t\\t<span>If today is not a day off or a holiday, we'll do our best to answer your questions in the next few hours.</span>\\n\\t\\t<span class=\\\"cm-dialog-closer ask_question-close-btn\\\">Close the pop-up</span>\\n\\t</div>\\n</div>\\n</body>\\n\\n</html>\\n\",\n  \"page_id\": \"b0ab3b6e97e542f641fbe9862f9302a3faa4e96c\",\n  \"page_type\": \"item\",\n  \"plugins\": {\n    \"annotations-plugin\": {\n      \"extracts\": [\n        {\n          \"accept_selectors\": [\n            \".ty-product-block > .ty-product-block__wrapper > .ty-product-block__left > .cm-disable-empty-files > .prices-container > .ty-product-prices > .ty-product-block__price-actual > .cm-reload-172 > .ty-price > span:nth-child(2)\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"435b-4450-a595\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"7cd5-4420-80fd\",\n              \"required\": true\n            }\n          },\n          \"id\": \"35bc-41f5-8f4a\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .ty-product-block__wrapper > .ty-product-block__left > .cm-disable-empty-files > .prices-container > .ty-product-prices > .ty-product-block__price-actual > .cm-reload-172 > .ty-price > span:nth-child(2)\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .cm-tabs-content > .content-description > div > p\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"a9a1-4d3b-bb42\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"f9e8-477c-b62d\",\n              \"required\": true\n            }\n          },\n          \"id\": \"3ccb-43a4-ae26\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .cm-tabs-content > .content-description > div > p\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .ty-product-block__wrapper > .ty-product-block__left > .cm-disable-empty-files > .ty-product-block__sku > .ty-control-group > .ty-control-group__item\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"da9d-4e12-99b4\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"7e1a-423a-8d72\",\n              \"required\": true\n            }\n          },\n          \"id\": \"d729-4b88-a203\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .ty-product-block__wrapper > .ty-product-block__left > .cm-disable-empty-files > .ty-product-block__sku > .ty-control-group > .ty-control-group__item\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".ty-product-block-title\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"e783-4ecd-bd63\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"2a4e-4258-bf75\",\n              \"required\": false\n            }\n          },\n          \"id\": \"ab16-4188-b82d\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \".content-grid > div:nth-child(2) > .span16 > .ty-product-block > .ty-product-block__wrapper > .ty-product-block__left > .cm-disable-empty-files > .ty-product-block-title\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".ty-breadcrumbs__a:nth-child(2n+3)\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"4924-450b-a057\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"20da-452f-a246\",\n              \"required\": true\n            }\n          },\n          \"id\": \"2827-40c5-bef4\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".ty-breadcrumbs__a:nth-child(2n+3)\",\n          \"tagid\": null\n        },\n        {\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"4924-450b-a057\": {\n              \"attribute\": \"content\",\n              \"extractors\": {},\n              \"field\": \"20da-452f-a241\",\n              \"required\": true\n            }\n          },\n          \"id\": \"2827-40c5-bef5\",\n          \"selection_mode\": \"xpath\",\n          \"selector\": \"#in_stock_info_172\",\n          \"xpath\": \".product_page > .row > div:nth-child(1) > .carousel > .thumbnail > .carousel-inner > .item > img\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".ty-product-img a:first-child img\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"9a25-4104-ad86\": {\n              \"attribute\": \"src\",\n              \"extractors\": {},\n              \"field\": \"19f1-4e56-a3de\",\n              \"required\": true\n            }\n          },\n          \"id\": \"22e7-4c49-ad0c\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"css\",\n          \"selector\": \".ty-product-img a img\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \"#notinpage\"\n          ],\n          \"container_id\": \"b99f-4e2d-8397\",\n          \"data\": {\n            \"9a25-4104-ad86\": {\n              \"attribute\": \"src\",\n              \"extractors\": {},\n              \"field\": \"19f1-4e56-a3de\",\n              \"required\": true\n            }\n          },\n          \"id\": \"22e7-4c49-ad0d\",\n          \"post_text\": null,\n          \"pre_text\": null,\n          \"reject_selectors\": [],\n          \"required\": [],\n          \"selection_mode\": \"auto\",\n          \"selector\": \"#notinpage\",\n          \"tagid\": null\n        },\n        {\n          \"accept_selectors\": [\n            \".content-grid\"\n          ],\n          \"annotations\": {\n            \"#portia-content\": \"#dummy\"\n          },\n          \"container_id\": null,\n          \"id\": \"b99f-4e2d-8397\",\n          \"item_container\": true,\n          \"reject_selectors\": [],\n          \"repeated\": false,\n          \"required\": [],\n          \"schema_id\": \"3133-422d-be9d\",\n          \"selector\": \".content-grid\",\n          \"siblings\": 0,\n          \"tagid\": 39,\n          \"text-content\": \"#portia-content\"\n        }\n      ]\n    }\n  },\n  \"scrapes\": \"3133-422d-be9d\",\n  \"spider\": \"demo.cs-cart.com\",\n  \"url\": \"http://demo.cs-cart.com/electronics/cameras-and-photo/camcorders/compact-full-hd-camcorder/\",\n  \"version\": \"0.13.0b20\",\n  \"schemas\": {\n    \"3133-422d-be9d\": {\n      \"fields\": {\n        \"19f1-4e56-a3de\": {\n          \"id\": \"19f1-4e56-a3de\",\n          \"name\": \"images\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"20da-452f-a246\": {\n          \"id\": \"20da-452f-a246\",\n          \"name\": \"categories\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"2a4e-4258-bf75\": {\n          \"id\": \"2a4e-4258-bf75\",\n          \"name\": \"name\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"7cd5-4420-80fd\": {\n          \"id\": \"7cd5-4420-80fd\",\n          \"name\": \"price\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"7e1a-423a-8d72\": {\n          \"id\": \"7e1a-423a-8d72\",\n          \"name\": \"sku\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"8cce-4538-a736\": {\n          \"name\": \"field7\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        },\n        \"f9e8-477c-b62d\": {\n          \"id\": \"f9e8-477c-b62d\",\n          \"name\": \"description\",\n          \"required\": false,\n          \"type\": \"text\",\n          \"vary\": false\n        }\n      },\n      \"name\": \"product\"\n    }\n  },\n  \"results\": [\n    {\n      \"_template\": \"b0ab3b6e97e542f641fbe9862f9302a3faa4e96c\",\n      \"_type\": \"product\",\n      \"20da-452f-a241\": [\n        \"In stock\"\n      ],\n      \"categories\": [\n        \"Electronics\",\n        \"Cameras & Photo\",\n        \"Camcorders\"\n      ],\n      \"description\": [\n        \"The T10 camcorder was designed to capture memories in comfort and in style. It boasts an ultra compact size, alightweight body and a brushed metal finish creating a subtle but sophisticated look and feel. In fact, its smooth curves fit so comfortably in your hand, it makes shooting video for longer periods of time more enjoyable\"\n      ],\n      \"images\": [\n        \"http://demo.cs-cart.com/images/thumbnails/280/176/detailed/0/T10_use_5.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_F2_O_1024x768.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_S1_O_1024x768.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_F2_O_1024x768_dimg_2.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_FS3_O_1024x768.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/280/detailed/0/T10_T_O_1024x768_2.jpg\",\n        \"http://demo.cs-cart.com/images/thumbnails/280/190/detailed/0/T10_FS5_O_1024x768_2.jpg\"\n      ],\n      \"name\": [\n        \"Compact Full HD Camcorder\"\n      ],\n      \"price\": [\n        \"299.99\"\n      ],\n      \"sku\": [\n        \"Y0172YCAWT\"\n      ],\n      \"url\": \"http://url\"\n    }\n  ]\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/daft_ie.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<!--\n    Hey... What are you doing here? Why read our code when you could write it?\n    Get in touch... http://www.adverts.ie/jobs/daft-ie/\n-->\n<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\" xmlns:og=\"http://opengraphprotocol.org/schema/\">\n    <head>\n        <title>Houses for Sale in Ireland | Daft.ie</title>\n        <meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" />\n        <link rel=\"dns-prefetch\" href=\"//ajax.googleapis.com\" />\n        <link rel=\"dns-prefetch\" href=\"//c0.dmstatic.com\" />\n        <link rel=\"dns-prefetch\" href=\"//c1.dmstatic.com\" />\n        <link rel=\"dns-prefetch\" href=\"//m0.dmlimg.com\" />\n        <link rel=\"dns-prefetch\" href=\"//m1.dmlimg.com\" />\n        <link rel=\"dns-prefetch\" href=\"//b.scorecardresearch.com\" />\n        <link rel=\"dns-prefetch\" href=\"//www.googletagservices.com\" />\n        <link rel=\"dns-prefetch\" href=\"//googleads.g.doubleclick.net\" />\n        <link rel=\"dns-prefetch\" href=\"//stats.g.doubleclick.net\" />\n    <link rel=\"canonical\" href=\"http://www.daft.ie/ireland/houses-for-sale/\" />\n    <link rel=\"alternate\" href=\"android-app://com.daft.ie/daftie/search/sale/?query=%7B%22s%22%3A%7B%22pt_id%22%3A%221%22%2C%22cc_id%22%3A%7B%22%22%3Anull%7D%2C%22search_type%22%3A%22sale%22%7D%2C%22ai%22%3A1%7D\" /><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\" />\n<meta name=\"description\" content=\"View Houses for Sale in Ireland from the Largest Property Listings Website in Ireland. Search Houses by Location, Price, Viewing Times, Property Type and Features.\" />\n<!-- frame busting -->\n<style id=\"antiClickjack\">body{display:none !important;}</style>\n<script type=\"text/javascript\">\n   if (self === top) {\n       var antiClickjack = document.getElementById(\"antiClickjack\");\n       antiClickjack.parentNode.removeChild(antiClickjack);\n   } else {\n       top.location = self.location;\n   }\n</script>        <link rel='stylesheet'\n              type='text/css'\n              href='//fonts.googleapis.com/css?family=Open+Sans:400,700,600' />\n        <link rel=\"stylesheet\"\n              type=\"text/css\"\n              href=\"//c1.dmstatic.com/690/styles/default/sprited/daft.ie.css\" />\n        <link rel=\"stylesheet\"\n              type=\"text/css\"\n              href=\"//c0.dmstatic.com/690/styles/default/sprited/header.css\" />\n        <link rel='stylesheet'\n              type='text/css'\n              href='//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css' />\n\n            <link rel=\"icon\" href=\"/favicon.ico\" type=\"image/x-icon\" />\n            <script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n\n        <!--[if IE 9]>\n            <link rel=\"stylesheet\"\n                  type=\"text/css\"\n                  href=\"//c1.dmstatic.com/690/styles/default/daft.ie_ie9.css\" />\n        <![endif]-->\n        <!--[if IE 8]>\n            <link rel=\"stylesheet\"\n                  type=\"text/css\"\n                  href=\"//c1.dmstatic.com/690/styles/default/daft.ie_ie8.css\" />\n        <![endif]-->\n        <!--[if IE 7]>\n            <link rel=\"stylesheet\"\n                  type=\"text/css\"\n                  href=\"//c0.dmstatic.com/690/styles/default/daft.ie7.css\" />\n        <![endif]-->\n        <!--[if lte IE 6]>\n            <link rel=\"stylesheet\"\n                  type=\"text/css\"\n                  href=\"//c1.dmstatic.com/690/styles/default/daft.ie_ie6.css\" />\n        <![endif]-->\n        <link rel=\"apple-touch-icon-precomposed\" href=\"//c1.dmstatic.com/690/apple-touch-icon-precomposed.png\" />\n\n        <script type=\"text/javascript\"\n            src=\"//c1.dmstatic.com/690/jscript/daftie/jquery.plugins.min.js\">\n        </script>\n        <script type=\"text/javascript\"\n            src=\"//c1.dmstatic.com/690/jscript/daftie/daftcommon.js\">\n        </script>\n        <script type=\"text/javascript\"\n                src=\"//c0.dmstatic.com/690/jscript/daftie/modal.js\">\n        </script>\n        <script type=\"text/javascript\"\n                src=\"//c1.dmstatic.com/690/jscript/daftie/placeholders.js\">\n        </script>\n<script>var googletag = googletag || {};\n\ngoogletag.cmd = googletag.cmd || [];\ngoogletag.placement = googletag.placement || [];\n\n(function() {\n    var gads = document.createElement('script');\n    gads.async = true; \n    gads.type = 'text/javascript';\n    var useSSL = 'https:' == document.location.protocol;\n    gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';\n    var node = document.getElementsByTagName('script')[0];\n    node.parentNode.insertBefore(gads, node);\n})();\ngoogletag.cmd.push(function() {\n\tgoogletag.placement.leaderboard = googletag.defineSlot('/3660310/Daft_Leaderboard', [[920, 90],[728, 90]], 'dfp-leaderboard').addService(googletag.pubads());\n\tgoogletag.placement.skyscraper = googletag.defineSlot('/3660310/Daft_Skyscraper', [[160, 600],[120, 600]], 'dfp-skyscraper').addService(googletag.pubads());\n\tgoogletag.placement.mid_banner_full_size = googletag.defineSlot('/3660310/Mid_Banner_Full_Size', [786, 155], 'dfp-mid_banner_full_size').addService(googletag.pubads());\n\tgoogletag.pubads().setTargeting('page', 'search-results');\n\tgoogletag.pubads().setTargeting('section', 'sale');\n\tgoogletag.pubads().setTargeting('prop_type', '1');\n\tgoogletag.pubads().enableSingleRequest();\n\tgoogletag.pubads().enableAsyncRendering();\n\tgoogletag.pubads().disableInitialLoad();\n\tgoogletag.enableServices();\n});\nvar _pool = _pool || [];\n            _pool.push(['add', ['_dml', 'sale']]);\n                    _pool.push(['add', ['_dml', '']]);\n            </script><script>(function() {\n  var _fbq = window._fbq || (window._fbq = []);\n  if (!_fbq.loaded) {\n    var fbds = document.createElement('script');\n    fbds.async = true;\n    fbds.src = '//connect.facebook.net/en_US/fbds.js';\n    var s = document.getElementsByTagName('script')[0];\n    s.parentNode.insertBefore(fbds, s);\n    _fbq.loaded = true;\n  }\n  _fbq.push(['addPixelId', '1407240772915219']);\n})();\nwindow._fbq = window._fbq || [];\nwindow._fbq.push(['track', 'PixelInitialized', {}]);\n</script>\n<noscript><img height=\"1\" width=\"1\" alt=\"\" style=\"display:none\" src=\"https://www.facebook.com/tr?id=1407240772915219&amp;ev=PixelInitialized\" /></noscript><script>(function() {\n  var _fbq = window._fbq || (window._fbq = []);\n  if (!_fbq.loaded) {\n    var fbds = document.createElement('script');\n    fbds.async = true;\n    fbds.src = '//connect.facebook.net/en_US/fbds.js';\n    var s = document.getElementsByTagName('script')[0];\n    s.parentNode.insertBefore(fbds, s);\n    _fbq.loaded = true;\n  }\n})();\nwindow._fbq = window._fbq || [];\nwindow._fbq.push(['track', '6026393827078', {'value':'0.00','currency':'GBP'}]);\n</script>\n<noscript><img height=\"1\" width=\"1\" alt=\"\" style=\"display:none\" src=\"https://www.facebook.com/tr?ev=6026393827078&amp;cd[value]=0.00&amp;cd[currency]=GBP&amp;noscript=1\" /></noscript><script>\nfunction trackConversionEvent(pixelId) {\n    _fbq.push(['track', pixelId]);\n}\n</script>\n\n<script type=\"text/javascript\">\n    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n        ga('create', 'UA-1011713-1');\n    ga('require', 'displayfeatures');\n                                ga('send', 'pageview', {'page':'/sr/Sale?q=search:sale/type:house', 'title':'/sr/Sale?q=search:sale/type:house'});\n    \n\n        ga('create', 'UA-28511705-2', 'auto',  {'name': 'bTracker', 'sampleRate':50});\n    ga('bTracker.require', 'displayfeatures');\n        ga('bTracker.send', 'pageview', {'page':'/sr/Sale?q=search:sale/type:house', 'title':'/sr/Sale?q=search:sale/type:house'});\n    </script>\n<script type=\"text/javascript\">\n    (function() {\n    function async_load(script_url)\n    { var protocol = ('https:' == document.location.protocol ? 'https://' : 'http://'); var s = document.createElement('script'); s.src = protocol + script_url; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); }\n    bm_website_code = '01CAD69295F74F89';\n    jQuery(document).ready(function()\n    {async_load('asset.pagefair.com/measure.min.js')}\n    );\n    jQuery(document).ready(function()\n    {async_load('asset.pagefair.net/ads.min.js')}\n    );\n    })();\n</script>\n<!-- Begin comScore Tag -->\n<script type=\"text/javascript\">\n    var _comscore = _comscore || [];\n    _comscore.push({\n        c1:2,\n        c2:\"6770180\",\n        c3:\"\",\n        c4:\"\",\n        c5:\"\",\n        c6:\"\",\n        c15:\"\"\n    });\n    (function() {\n        var s = document.createElement(\"script\"), el = document.getElementsByTagName(\"script\")[0]; s.async = true;\n        s.src = (document.location.protocol == \"https:\" ? \"https://sb\" : \"http://b\") + \".scorecardresearch.com/beacon.js\";\n        el.parentNode.insertBefore(s, el);\n    })();\n</script>\n<noscript>\n    <img src=\"//b.scorecardresearch.com/p?c1=2&amp;c2=6770180&amp;cv=2.0&amp;cj=1\" alt=\"\" />\n</noscript>\n<!-- End comScore Tag --></head>\n<body class=''  >\n\n        <script type=\"text/javascript\">\n            var cookie_name = \"cookie_notice\";\n        </script>\n        <div class=\"strapline-container\" id=\"notify-container\">\n            <div class=\"strapline\">\n                <div class=\"strapline-title\">\n                    <a href=\"/privacy/#cookies\" target=\"_self\" class=\"ng-binding\">\n                        Daft uses cookies. By continuing to browse this site you are agreeing to our use of cookies. Click here to find out more &raquo;</a>\n                </div>\n                <div class=\"strapline-close notify-close\" title=\"Dismiss this notification\"></div>\n            </div>\n        </div>\n\n\n\n\n<div id=\"heading-container\">\n    <div class=\"headerrow\">\n        <a href=\"/\" id=\"logo\">\n            <img src=\"//c0.dmstatic.com/82ab9f8c00abd532a8281/frontend/images/logo@2x.png\" height=\"41\" width=\"129\" alt=\"Daft.ie\">\n        </a>\n        <div class=\"top-nav hidden-xs\">\n\n            <!-- not logged in -->\n        <div class=\"user-menu logged-out\">\n            <ul>\n                <li class=\"seperator\">\n                    <a href=\"/searchsale.daft?auth[login]=1\" class=\"\">\n                        Login to MyDaft\n                    </a>\n                </li>\n                <li class=\"seperator\">\n                    <a href=\"/my-daft/?register[u]=1\" class=\"\" onClick=\"trackConversionEvent('6026393827078');\">\n                        Register\n                    </a>\n                </li>\n                <li>\n                    <a href=\"/help\" class=\"\">\n                        Help\n                    </a>\n                </li>\n            </ul>\n        </div>\n    \n    <a href=\"/ad-entry/?src=nav\" class=\"btn btn-primary\">Advertise My Property</a>\n\n</div>\n    </div>\n            <div id=\"nav\" class=\"headerrow\">\n    <ul class=\"linkbar\">\n        <li class=\"active hover-dropdown sale first\">\n            <a href=\"/sales/\">For Sale</a>\n            <div class=\"dropdown\">\n                <ul class=\"dropdown-menu\">\n                    <li><a href=\"/ireland/houses-for-sale/\">Houses for Sale</a></li>\n                    <li><a href=\"/ireland/apartments-for-sale/\">Apartments for Sale</a></li>\n                    <li><a href=\"/ireland/houses-for-auction/\">Auction properties</a></li>\n                    <li><a href=\"/ireland/property-for-sale/?s[area_type]=on&amp;s[agreed]=1&amp;s[advanced]=1\">Sale agreed properties</a></li>\n                    <li><a href=\"/price-register/\">Sold Prices/Price Register</a></li>\n                    <li><a href=\"/property-tax/\" target=\"_self\">Property Tax Calculator</a></li>\n                    <li><a href=\"/sales/?s[advanced]=1\">Advanced Sale search</a></li>\n                </ul>\n            </div>\n        </li>\n        <li class=\"separator\"></li>\n        <li class=\" hover-dropdown rent\">\n            <a href=\"/lettings/\">To Rent</a>\n            <div class=\"dropdown\">\n                <ul class=\"dropdown-menu\">\n                    <li><a href=\"/ireland/houses-for-rent/\">Houses for Rent</a></li>\n                    <li><a href=\"/ireland/apartments-for-rent/\">Apartments for Rent</a></li>\n                    <li><a href=\"/student-accommodation/?s[search_type]=rental\">Student Accommodation</a></li>\n                    <li><a href=\"/searchtenants.daft\">Tenant database</a></li>\n                    <li><a href=\"/searchparking.daft\">Parking spaces</a></li>\n                    <li><a href=\"/lettings/?s[advanced]=1\">Advanced Rental search</a></li>\n                </ul>\n            </div>\n        </li>\n        <li class=\"separator\"></li>\n        <li class=\" hover-dropdown sharing\">\n            <a href=\"/sharing/\">Sharing</a>\n            <div class=\"dropdown\">\n                <ul class=\"dropdown-menu\">\n                    <li><a href=\"/student-accommodation/\">Student Accommodation</a></li>\n                    <li><a href=\"/searchroommates.daft\">Roommate search</a></li>\n                    <li><a href=\"/searchteamup.daft\">Team-up search</a></li>\n                    <li><a href=\"/sharing/?s[advanced]=1\">Advanced Sharing search</a></li>\n                </ul>\n            </div>\n        </li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/commercial/\">Commercial</a></li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/short-term-rentals/\">Short Term Lets</a></li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/holiday-homes/\">Holiday Homes</a></li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/new-homes/\">New Homes</a></li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/overseas/\">Overseas</a></li>\n        <li class=\"separator\"></li>\n        <li class=\"\"><a href=\"/discussions.daft\">Discussions</a></li>\n    </ul>\n</div>\n    </div>\n\n<div id=\"breadcrumbs\" >\n    <div class=\"breadcrumbs-inner\">\n        <span class=\"left\">\n            <span class=\"truncate\"><a href=\"/\">Home</a></span>\n                            <span class=\"truncate\">\n                    /\n                    <a href=\"/sales/\"\n                        >\n                        Search Residential Property for Sale\n                    </a>\n                </span>\n                            <span class=\"truncate last\">\n                    /\n                    <a href=\"/ireland/houses-for-sale/\"\n                        id=\"last_crumb\">\n                        Ireland Houses for Sale\n                    </a>\n                </span>\n                    </span>\n        <span class=\"right\">\n            <strong>199,584</strong> properties online\n            <span class=\"light\">\n                (453 in the last 24 hours)\n            </span>\n        </span>\n    </div>\n</div>\n                <div id=\"top_banner\">\n                <div id='dfp-leaderboard'>\n    <script>\n        googletag.cmd.push(function() {\n            googletag.display('dfp-leaderboard');\n        });\n    </script>\n</div>                </div>\n                \n            <!-- header ends, content begins -->\n                    <div id=\"notice\" class=\"hide\">\n                    \n                </div>\n        <script type=\"text/javascript\" src=\"//c1.dmstatic.com/690/jscript/daftie/adsense/googleSr.js\"></script>\n\n<script type=\"text/javascript\">\n<!--\n    // Google adsense callback. Add to sr store\n    function google_ad_request_done(google_ads) \n    {\n        if(typeof(googleSr) != 'undefined')\n        {\n            googleSr.acceptGoogleAds(google_ads);\n        }\n    }\n    google_ad_client = \"pub-3047800131877384\";\n\n        google_ad_channel = \"1847706419\";\n\n    google_kw_type = \"broad\";\n    google_kw = \"property+for+sale+ireland\";\n    google_ad_width = 728;\n    google_ad_height = 90;\n    google_ad_size = \"728x90\";\n    google_ad_output = 'js';\n    google_ad_type = 'text';\n\n    if(typeof(googleSr) != 'undefined')\n    {\n        google_max_num_ads = googleSr.getMaxNumberOfAds();\n    }\n\n //-->\n</script>\n\n<script type=\"text/javascript\" src=\"//pagead2.googlesyndication.com/pagead/show_ads.js\"></script>\n<div id=\"modal_background_save_search\" class=\"modal_background\"></div>\n<div id=\"modal_container_save_search\" class=\"modal_container\">\n    <div class=\"close_modal\"></div>\n    <form id=\"modal_form_save_search\" action=\"\">\n        <fieldset>\n                <div class=\"header\">Save this search</div>\n    <div id=\"searchMessageContainer\" class=\"errorMessages\">\n        <img src=\"//c0.dmstatic.com/690/i/alert-icons/error.png\" alt=\"Draft message icon\">\n        <span id=\"searchMessage\">\n        </span>\n    </div>\n    <span id = \"modalContainer\">\n    <form>\n        <label>Search Name:</label>\n        <input type=\"text\" name=\"searchName\" id='searchName' placeholder=\"Daft saved search\" />\n        <img src=\"/i/loading.gif\" id=\"save-throbber\" alt=\"saving search\" />\n        <input\n            type=\"button\"\n            value=\"Save\"\n            name=\"Yes\"\n            id=\"save-search-button\"\n            class=\"base_action_button standard_button right\"\n    />\n    <a class=\"right cancel_modal\">Cancel</a>\n    </form>\n    </span>\n    <span id=\"modalSuccessMessage\">\n    </span>\n        </fieldset>\n    </form>\n</div>\n    <link rel=\"stylesheet\" type=\"text/css\"\n            href=\"//c0.dmstatic.com/690/styles/default/search/login_modal.css\" />\n<script type=\"text/javascript\" src=\"/jscript/daftie/SecureModal.js\"></script>\n<script type=\"text/javascript\">var mvc = {};</script>\n<script type=\"text/javascript\"\n        src=\"//c0.dmstatic.com/690/jscript/daftie/shortStay/modal_login.js\">\n</script>\n<script type=\"text/javascript\">\n    var siteName = 'www.daft.ie';\n    mvc.siteName = siteName;\n    var loggedIn = 0;\n\n    \n    var alertHref  = '/emailalerts.daft?ea%5Bcreate%5D=1&ea%5Bwanted_type%5D=sale&from_search=1&ea%5Bpt_id%5D=1&ea%5Bcc_id%5D=&ea%5Bsearch_type%5D=sale';\n    var request    = '';\n    mvc.alertHref  = alertHref;\n    mvc.request    = request;\n\n    var loginModal = new SecureModal(\n        \"login\"\n        , 545\n        , 545\n    );\n\n    \n    $(\"document\").ready(function(){\n\n        setupModals();\n\n        if($('#modal_container_setEmailAlert').length)\n        {\n            // Set a cookie to only show once per session.\n            var showAlert = true;\n            if (\n                typeof $.cookie('showAlert') !== \"undefined\"\n                && $.cookie('showAlert') !== null\n            )\n            {\n                showAlert = $.cookie('showAlert');\n            }\n            if (showAlert == true)\n            {\n                showModal('setEmailAlert');\n            }\n            $.cookie(\n                'showAlert',\n                false,\n                { expires: '', path: \"/\" }\n            );\n        }\n\n        $('#cancelAlertPrompt, #modal_container_setEmailAlert .close_modal, #modal_background_setEmailAlert').click(function(){\n            $.ajax({\n                url: '/ajax_endpoint.php?action=dismissEmailAlertPrompt',\n                type: \"POST\",\n                data: {}\n            });\n        });\n    });\n\n    /**\n     * Setup modals on listings page\n     *\n     * @returns false\n     */\n    function setupModals()\n    {\n        $(\"#save-search-button\").click(function(e){\n            saveSearch();\n        });\n        $(\"#save-alert-button\").click(alertEmail);\n        enterFormKeyDown('modal_form_save_search', saveSearch);\n        enterFormKeyDown('modal_form_email_alert', alertEmail);\n        $(\".save-ad-button\").click(function(e){\n            e.stopImmediatePropagation();\n            e.preventDefault();\n            loginSaveAd(this);\n        });\n\n        $(\".save-search\").click(function(e){\n            e.preventDefault();\n\n            if(mvc.loggedIn)\n            {\n                showModal('save_search');\n            }\n            else\n            {\n                loginModal.addAction('saveSearch');\n                loginModal.display();\n            }\n            return false;\n        });\n        $(\".email-alert\").click(createEmailAlert);\n        $(\"#no-results-email-alert\").click(createEmailAlert);\n    }\n    \n\n    /**\n     * Perform email alert AJAX request\n     *\n     * @returns void\n     */\n    function alertEmail()\n    {\n       if(!$(\"#emailAlert\").val().length)\n       {\n           showError(\"Please enter an email address.\", 'alertMessage');\n           return false;\n       }\n       if(!validateEmail($(\"#emailAlert\").val()))\n       {\n           showError(\"Please enter a valid email address.\", 'alertMessage');\n           return false;\n       }\n       if($(\"#ccEmailAlert\").val().length && !validateEmail($(\"#ccEmailAlert\").val()))\n       {\n           showError(\"Please enter a valid cc email address.\", 'alertMessage');\n           return false;\n       }\n       $('#save-alert-button').hide();\n       $('#alert-throbber').show();\n\n       var data = {\"pt_id\":\"1\",\"cc_id\":\"\",\"search_type\":\"sale\"};\n       data.emailAlert = $(\"#emailAlert\").val();\n       data.ccEmailAlert = $(\"#ccEmailAlert\").val();\n\n       $.ajax({\n           url: '/holiday-homes/createEmailAlert/'+request\n           , data: data\n           , success: function(data){\n               hideModal('email_alert');\n               $(\".email-alert\").unbind('click');\n               $(\".email-alert\").text('Email alert created');\n               $(\"#breadcrumbs\").after(\n                   '<div class=\"successMessages messageBox\">'\n                   + '<p><img src=\"/i/alert-icons/success.png\" alt=\"successMessages icon\"></p>'\n                   + '<ul class=\"messageList\">'\n                   + '<li class=\"alertMessage\">'\n                   + ' Your email alert has been created and a verification mail sent'\n                   + ' to you. Please check your inbox to complete the process</li>'\n                   + '</ul></div>'\n               );\n           }\n       });\n    }\n\n    /**\n     * Perform save search AJAX request\n     *\n     * @returns void\n     */\n    function saveSearch()\n    {\n        if(!$(\"#searchName\").val().length)\n        {\n            showError(\"Please enter a search name.\", 'searchMessage');\n            return false;\n        }\n        \n        var data = {};\n        var data = {\"pt_id\":\"1\",\"cc_id\":\"\",\"search_type\":\"sale\"};\n\n        $(\"#save-throbber\").show();\n        data.name = $(\"#searchName\").val();\n\n        $.ajax({\n            url: '/ajax_endpoint.php?action=addSavedSearch'\n            , data: data\n            , type: 'POST'\n            , success: function(data){\n                $(\".save-search\").html(data.name);\n                hideModal('save_search');\n                $(\"#save-search\").text($(\"#searchName\").val());\n                $(\"#save-search\").unbind('click');\n            }\n         });\n     }\n\n\n    /**\n     * Prevent form from submitting on enter, call the given callback instead.\n     *\n     * @return null.\n     */\n    function enterFormKeyDown(id, callback)\n    {\n         $(\"#\" + id).keydown(function(event){\n            if(event.keyCode == '13') {\n                event.preventDefault();\n                event.stopPropagation();\n                callback();\n            }\n        });\n    }\n</script><div id=\"modal_background_signup\" class=\"modal_background\"></div>\n<div id=\"modal_container_signup\" class=\"modal_container\">\n    <div class=\"close_modal\"></div>\n    <form id=\"modal_form_signup\" action=\"\">\n        <fieldset>\n                <script type=\"text/javascript\" src=\"//c0.dmstatic.com/690/jscript/daftie/modal.js\"></script>\n    <script type=\"text/javascript\">\n\n        var alertHref  = '/emailalerts.daft?ea%5Bcreate%5D=1&ea%5Bwanted_type%5D=sale&from_search=1&ea%5Bpt_id%5D=1&ea%5Bcc_id%5D=&ea%5Bsearch_type%5D=sale';\n\n        $(document).ready(function() {\n            $('#signup-modal-button').click(function()\n            {\n                clearInlineErrors();\n                if(isValid())\n                {\n                    doSignup();\n                }\n                else\n                {\n                    applyInlineError();\n                }\n            });\n            $('#modal_form_signup').keypress(function(e){\n                if(e.which == 13){//Enter key pressed\n                    $('#signup-modal-button').click();//Trigger search button click event\n                    return false;\n                }\n            });\n\n        });\n\n\n        /**\n         * Show the appropriate modal on the login success\n         * \n         * @return void\n         */\n        function signupSuccess()\n        {\n            window.location.href = alertHref;\n        }\n\n\n        /**\n         * Do the login \n         * \n         * @return void\n         */\n        function doSignup()\n        {\n            $(\"#modal-throbber\").show();\n\n            // Split name in firstname and surname name\n            var name = $(\"input[name='name']\").val().split(\" \");\n            var sname;\n            for (var i=0; i < name.length; i++)\n            {\n                if (i == 1)\n                {\n                    sname = name[i];\n                }\n                else if (i > 1)\n                {\n                    sname += \" \" + name[i];\n                }\n            }\n\n            $.ajax({\n                url: '/ajax_endpoint.php?action=registerUser'\n                , data: {\n                    username: $(\"input[name='username']\").val()\n                    , password: $(\"input[name='password']\").val()\n                    , email: $(\"input[name='email']\").val()\n                    , fname: name[0]\n                    , sname: sname\n                    , description: $(\"select[name='description']\").val()\n                    , permission_email: $(\"input[name='permission_email']\").prop('checked')\n                    , permission_3rd_party: $(\"input[name='permission_3rd_party']\").prop('checked')\n                }\n                , success: function(data){\n                    data = jQuery.parseJSON(data);\n                    if(data.error)\n                    {\n                        $('#modal-throbber').hide();\n                        for (var fieldname in data.param){\n                            if (data.param.hasOwnProperty(fieldname)) {\n                                 applyInlineError(fieldname, data.param[fieldname]);\n                            }\n                        }\n                    }\n                    else\n                    {\n                        signupSuccess();\n                    }\n                }\n                , type: 'POST'\n            });\n        }\n\n\n        /**\n         * Check the login form is valid\n         *\n         * @return bool True if the form is valid\n         */\n        function isValid()\n        {\n            valid = true;\n            if(!$(\"#modal_form_signup input[name='username']\").val().length)\n            {\n                applyInlineError('username', \"Username is empty\");\n                valid = false;\n            }\n            if(!$(\"#modal_form_signup input[name='password']\").val().length)\n            {\n                applyInlineError('password', \"Password is empty\");\n                valid = false;\n            }\n            if($(\"#modal_form_signup input[name='password']\").val() != $(\"input[name='password_confirm']\").val())\n            {\n                applyInlineError('password_confirm', \"Passwords do not match\");\n                valid = false;\n            }\n            if(!$(\"#modal_form_signup input[name='email']\").val().length)\n            {\n                applyInlineError('email', \"Email address not given\");\n                valid = false;\n            }\n            else if(!validateEmail($(\"#modal_form_signup input[name='email']\").val()))\n            {\n                applyInlineError('email', \"Email address not valid\");\n                valid = false;\n            }\n            if(!$(\"#modal_form_signup input[name='name']\").val().length)\n            {\n                applyInlineError('name', \"Full name not given\");\n                valid = false;\n            }\n            if (!$(\"#modal_form_signup select[name='description']\").val().length)\n            {\n                applyInlineError('description', 'No description chosen');\n                valid = false;\n            }\n            return valid;\n        }\n\n        function validateEmail(email)\n        {\n            var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n            return re.test(email);\n        }\n\n        function applyInlineError(field, message)\n        {\n            $('.inlineValidation[data-label=\"' + field + '\"]').html(message).show();\n        }\n\n        function clearInlineErrors()\n        {\n            $('.inlineValidation').hide();\n            $('.inlineValidation').html();\n        }\n    </script>\n    <div class=\"signup-modal\">\n    <div class=\"secureClose\"></div>\n    <h2>Sign up</h2>\n\n    <label for=\"signup_username\" class=\"username-label\">Username:</label>\n    <p class=\"inlineValidation\" data-label=\"username\"></p>\n    <input type=\"text\" class=\"form-control\" name=\"username\" id=\"signup_username\" placeholder=\"Letters and numbers only please. No spaces.\" />\n\n    <label for=\"signup_username\" class=\"text-label\">Password:</label>\n    <p class=\"inlineValidation\" data-label=\"password\"></p>\n    <input type=\"password\" class=\"form-control\" name=\"password\" id=\"signup_password\" />\n\n    <label for=\"password_confirm\" class=\"text-label\">Confirm password:</label>\n    <p class=\"inlineValidation\" data-label=\"password_confirm\"></p>\n    <input type=\"password\" class=\"form-control\" name=\"password_confirm\" id=\"signup_password_confirm\" />\n\n    <label for=\"signup_email\" class=\"text-label\">Email address:</label>\n    <p class=\"inlineValidation\" data-label=\"email\"></p>\n    <input type=\"text\" class=\"form-control\" name=\"email\" id=\"signup_email\" />\n\n    <label for=\"signup_name\" class=\"text-label\">Full name:</label>\n    <p class=\"inlineValidation\" data-label=\"name\"></p>\n    <input type=\"text\" class=\"form-control\" name=\"name\" id=\"signup_name\" />\n\n    <label for=\"signup_name\" class=\"text-label\">What best describes you?</label>\n    <p class=\"inlineValidation\" data-label=\"description\"></p>\n    <select class=\"form-control\" name=\"description\" id=\"signup_description\">\n        <option value=\"\"></option>\n        <option value=\"1\">I am looking to buy</option>\n        <option value=\"2\">I am looking to rent</option>\n        <option value=\"3\">I am a seller</option>\n        <option value=\"4\">I am a landlord</option>\n        <option value=\"5\">I am an agent</option>\n        <option value=\"6\">Other</option>\n    </select>\n\n    <div class=\"submission-terms left\">\n        <p>\n            By submitting you agree to Daft's\n            <a class=\"modal-link\" href=\"/content/termsandconditions.daft\">Terms of Use</a> and\n            <a class=\"modal-link\" href=\"/privacy/\">Privacy Policy</a>\n        </p>\n    </div>\n    <img src=\"/i/loading.gif\" alt=\"loading timer\" id=\"modal-throbber\"/>\n    <span class=\"modal-action-button signup-button right\" id=\"signup-modal-button\">Sign up</span>\n\n    <div class=\"modal-register left\"></div>\n\n    <div class=\"checkboxes\">\n        <input id=\"signup_newsletter\" class=\"designedCheckbox\" type=\"checkbox\" name=\"permission_email\" value=\"1\" />\n        <label for=\"signup_newsletter\" class=\"designedLabel signup-newsletter-label\">\n            <span class=\"signup-newsletter right\">Notify me about Daft news, features and tips</span>\n        </label>\n\n        <input id=\"signup_3rdparty\" class=\"designedCheckbox\" type=\"checkbox\" name=\"permission_3rd_party\" value=\"1\" />\n        <label for=\"signup_3rdparty\" class=\"designedLabel signup-third-party-label\">\n            <span class=\"signup-third-party right\">Notify me about other products or services</span>\n        </label>\n    </div>\n\n    <div class=\"modal-register left\"></div>\n    <p class=\"signup-login-link\">\n        Already a member? <a\n            id=\"modal_register\"\n            class=\"modal-link cancel_modal\"\n            href=\"https://www.daft.ie/loginForm/?register[u]=1\"\n        >Log in</a>\n    </p>\n    </div>\n    <!--[if gte IE 8]>\n        <link rel=\"stylesheet\" type=\"text/css\"\n            href=\"//c0.dmstatic.com/690/styles/default/search/ie8_login_modal.css\" />\n    <![endif]-->\n        </fieldset>\n    </form>\n</div>\n<div id=\"modal_background_email_alert\" class=\"modal_background\"></div>\n<div id=\"modal_container_email_alert\" class=\"modal_container\">\n    <div class=\"close_modal\"></div>\n    <form id=\"modal_form_email_alert\" action=\"\">\n        <fieldset>\n                <div class=\"header\">Create an email alert for this search.</div>\n    <div id=\"alertMessageContainer\" class=\"errorMessages\">\n        <img src=\"\" alt=\"Draft message icon\">\n        <span id=\"alertMessage\">\n        </span>\n    </div>\n    <form>\n        <label>Email address:</label>\n        <input type=\"text\" name=\"emailAddress\" id='emailAlert' value=\"\" />\n        <br/>\n        <label>CC email address (optional):</label>\n        <input type=\"text\" name=\"ccEmailAddress\" id='ccEmailAlert' value=\"\" />\n        <br/>\n        <input\n            type=\"button\"\n            value=\"Submit\"\n            name=\"Yes\"\n            id=\"save-alert-button\"\n            class=\"base_action_button standard_button right\"\n        />\n        <img src=\"/i/loading.gif\" id=\"alert-throbber\" alt=\"saving alert\" class=\"hidden\" />\n        <a class=\"right cancel_modal\">Cancel</a>\n    </form>\n        </fieldset>\n    </form>\n</div>\n<div class=\"tabs-container\">\n    <div class=\"tabs-area\">\n        <div class=\"heading\">\n            <ul class=\"tabset sr blue\">\n                <li class=\"active\">\n                                            <span>\n                            List View\n                        </span>\n                                        </li>\n                <li >\n                                            <a href=\"/ireland/houses-for-sale/?s%5Bphoto_search%5D=1\">\n                            Photo Gallery View\n                        </a>\n                                        </li>\n                            <li >\n                                            <a href=\"/ireland/houses-for-sale/?s%5Bmap_search%5D=1\">\n                            Map View\n                        </a>\n                                        </li>\n                           </ul>\n\n        </div>\n        <div class=\"tab-content\">\n<script type=\"text/javascript\" src=\"//c1.dmstatic.com/690/jscript/daftie/searchform.js\"></script>\n\n\n<form action=\"/searchsale.daft\" class=\"search-form\">\n    <fieldset>\n        <div class=\"col\">\n                        <label for=\"cc_id\">Choose an Area:</label>\n                <div class=\"select-row\">\n                                            <select name=\"s[cc_id]\" id=\"cc_id\" class=\"sf_select_refine\">\n                            <option value=\"\">Ireland</option>\n                            <option value=\"\">-------</option>\n                            <option value=\"ct1\">Dublin City</option><option value=\"ct2\">Galway City</option><option value=\"ct3\">Cork City</option><option value=\"ct4\">Belfast City</option><option value=\"ct5\">Limerick City</option><option value=\"ct6\">Waterford City</option><option value=\"\">-------</option><option value=\"c27\">Co. Antrim</option>\n<option value=\"c28\">Co. Armagh</option>\n<option value=\"c10\">Co. Carlow</option>\n<option value=\"c25\">Co. Cavan</option>\n<option value=\"c16\">Co. Clare</option>\n<option value=\"c15\">Co. Cork</option>\n<option value=\"c31\">Co. Derry</option>\n<option value=\"c24\">Co. Donegal</option>\n<option value=\"c32\">Co. Down</option>\n<option value=\"c1\">Co. Dublin</option>\n<option value=\"c30\">Co. Fermanagh</option>\n<option value=\"c19\">Co. Galway</option>\n<option value=\"c14\">Co. Kerry</option>\n<option value=\"c3\">Co. Kildare</option>\n<option value=\"c11\">Co. Kilkenny</option>\n<option value=\"c8\">Co. Laois</option>\n<option value=\"c23\">Co. Leitrim</option>\n<option value=\"c17\">Co. Limerick</option>\n<option value=\"c5\">Co. Longford</option>\n<option value=\"c9\">Co. Louth</option>\n<option value=\"c20\">Co. Mayo</option>\n<option value=\"c2\">Co. Meath</option>\n<option value=\"c26\">Co. Monaghan</option>\n<option value=\"c6\">Co. Offaly</option>\n<option value=\"c21\">Co. Roscommon</option>\n<option value=\"c22\">Co. Sligo</option>\n<option value=\"c18\">Co. Tipperary</option>\n<option value=\"c29\">Co. Tyrone</option>\n<option value=\"c12\">Co. Waterford</option>\n<option value=\"c7\">Co. Westmeath</option>\n<option value=\"c13\">Co. Wexford</option>\n<option value=\"c4\">Co. Wicklow</option>\n                        </select>\n                              </div>\n                </div>\n        <div class=\"col price-range\">\n            <label for=\"mnp\">What is your Price Range?</label>\n            <div class=\"select-row\">\n                <select class=\"middle\" name=\"s[mnp]\" id=\"mnp\">\n                    <option value=\"\">No Min</option>\n    <option value=\"25000\">&euro;25,000</option><option value=\"50000\">&euro;50,000</option><option value=\"75000\">&euro;75,000</option><option value=\"100000\">&euro;100,000</option><option value=\"125000\">&euro;125,000</option><option value=\"150000\">&euro;150,000</option><option value=\"175000\">&euro;175,000</option><option value=\"200000\">&euro;200,000</option><option value=\"225000\">&euro;225,000</option><option value=\"250000\">&euro;250,000</option><option value=\"275000\">&euro;275,000</option><option value=\"300000\">&euro;300,000</option><option value=\"325000\">&euro;325,000</option><option value=\"350000\">&euro;350,000</option><option value=\"375000\">&euro;375,000</option><option value=\"400000\">&euro;400,000</option><option value=\"425000\">&euro;425,000</option><option value=\"450000\">&euro;450,000</option><option value=\"475000\">&euro;475,000</option><option value=\"500000\">&euro;500,000</option><option value=\"550000\">&euro;550,000</option><option value=\"600000\">&euro;600,000</option><option value=\"650000\">&euro;650,000</option><option value=\"700000\">&euro;700,000</option><option value=\"750000\">&euro;750,000</option><option value=\"800000\">&euro;800,000</option><option value=\"850000\">&euro;850,000</option><option value=\"900000\">&euro;900,000</option><option value=\"950000\">&euro;950,000</option><option value=\"1000000\">&euro;1,000,000</option><option value=\"1250000\">&euro;1,250,000</option><option value=\"1500000\">&euro;1,500,000</option><option value=\"1750000\">&euro;1,750,000</option><option value=\"2000000\">&euro;2,000,000</option><option value=\"2250000\">&euro;2,250,000</option><option value=\"2500000\">&euro;2,500,000</option><option value=\"2750000\">&euro;2,750,000</option><option value=\"3000000\">&euro;3,000,000</option><option value=\"3500000\">&euro;3,500,000</option><option value=\"4000000\">&euro;4,000,000</option><option value=\"4500000\">&euro;4,500,000</option><option value=\"5000000\">&euro;5,000,000</option>                </select>\n                <select class=\"middle\" name=\"s[mxp]\" id=\"mxp\">\n                    <option value=\"\">No Max</option>\n    <option value=\"25000\">&euro;25,000</option><option value=\"50000\">&euro;50,000</option><option value=\"75000\">&euro;75,000</option><option value=\"100000\">&euro;100,000</option><option value=\"125000\">&euro;125,000</option><option value=\"150000\">&euro;150,000</option><option value=\"175000\">&euro;175,000</option><option value=\"200000\">&euro;200,000</option><option value=\"225000\">&euro;225,000</option><option value=\"250000\">&euro;250,000</option><option value=\"275000\">&euro;275,000</option><option value=\"300000\">&euro;300,000</option><option value=\"325000\">&euro;325,000</option><option value=\"350000\">&euro;350,000</option><option value=\"375000\">&euro;375,000</option><option value=\"400000\">&euro;400,000</option><option value=\"425000\">&euro;425,000</option><option value=\"450000\">&euro;450,000</option><option value=\"475000\">&euro;475,000</option><option value=\"500000\">&euro;500,000</option><option value=\"550000\">&euro;550,000</option><option value=\"600000\">&euro;600,000</option><option value=\"650000\">&euro;650,000</option><option value=\"700000\">&euro;700,000</option><option value=\"750000\">&euro;750,000</option><option value=\"800000\">&euro;800,000</option><option value=\"850000\">&euro;850,000</option><option value=\"900000\">&euro;900,000</option><option value=\"950000\">&euro;950,000</option><option value=\"1000000\">&euro;1,000,000</option><option value=\"1250000\">&euro;1,250,000</option><option value=\"1500000\">&euro;1,500,000</option><option value=\"1750000\">&euro;1,750,000</option><option value=\"2000000\">&euro;2,000,000</option><option value=\"2250000\">&euro;2,250,000</option><option value=\"2500000\">&euro;2,500,000</option><option value=\"2750000\">&euro;2,750,000</option><option value=\"3000000\">&euro;3,000,000</option><option value=\"3500000\">&euro;3,500,000</option><option value=\"4000000\">&euro;4,000,000</option><option value=\"4500000\">&euro;4,500,000</option><option value=\"5000000\">&euro;5,000,000</option>                </select>\n            </div>\n        </div>\n                 <div id=\"filterBeds\" class=\"col bedrooms\" >\n                 <label for=\"max_bd_no\">How many Bedrooms?</label>\n                 <div class=\"select-row\">\n                     <select name=\"s[mnb]\" id=\"mnb\" class=\"small\">\n                        <option value=\"\">No Min</option>\n                            <option value=\"1\" >\n        1 Bed</option>\n                                <option value=\"2\" >\n        2 Bed</option>\n                                <option value=\"3\" >\n        3 Bed</option>\n                                <option value=\"4\" >\n        4 Bed</option>\n                                <option value=\"5\" >\n        5 Bed</option>\n                                <option value=\"6\" >6 Bedrooms+</option>\n                    </select>\n                    <select name=\"s[mxb]\" id=\"mxb\" class=\"small\">\n                        <option value=\"\">No Max</option>\n                            <option value=\"1\" >\n        1 Bed</option>\n                                <option value=\"2\" >\n        2 Bed</option>\n                                <option value=\"3\" >\n        3 Bed</option>\n                                <option value=\"4\" >\n        4 Bed</option>\n                                <option value=\"5\" >\n        5 Bed</option>\n                                <option value=\"6\" >6 Bedrooms</option>\n                    </select>\n                 </div>\n             </div>\n                <div id=\"filterAcres\" class=\"col bedrooms\"\n    style=\"display:none\">\n                <label for=\"min_area\">How many acres?</label>\n                <div class=\"select-row\">\n                    <select name=\"s[mna]\" id=\"min_area\" class=\"small\">\n                        <option value=\"\">No Min</option>\n                        <option value=\"1\">1 acre</option><option value=\"5\">5 acre</option><option value=\"20\">20 acre</option><option value=\"50\">50 acre</option><option value=\"100\">100 acre</option><option value=\"200\">200 acre</option><option value=\"500\">500 acre</option><option value=\"1000\">1000 acre</option>                    </select>\n                    <select name=\"s[mxa]\" id=\"max_area\" class=\"small\">\n                        <option value=\"\">No Max</option>\n                        <option value=\"1\">1 acre</option><option value=\"5\">5 acre</option><option value=\"20\">20 acre</option><option value=\"50\">50 acre</option><option value=\"100\">100 acre</option><option value=\"200\">200 acre</option><option value=\"500\">500 acre</option><option value=\"1000\">1000 acre</option>                    </select>\n                </div>\n            </div>\n            <div class=\"col property\">\n            <label for=\"pt_id\">Property type?</label>\n                <div class=\"select-row\">\n                    <select name=\"s[pt_id]\" id=\"pt_id\">\n                        <option value=\"\">Any Residential Property</option>\n    <option value=\"1\" selected=\"selected\">House For Sale</option><option value=\"2\">Apartment For Sale</option><option value=\"3\">Duplex For Sale</option><option value=\"4\">Bungalow For Sale</option><option value=\"5\">Site For Sale</option><option value=\"6\">Studio Apartment For Sale</option>                </select>\n            </div>\n        </div>\n        <input type=\"submit\" id=\"refine_submit\"\n            class=\"orange-gradient submit standard-button\" value=\"Search\" />\n            <br />\n            <a href=\"/searchsale.daft?s%5Bpt_id%5D=1&amp;s%5Bcc_id%5D=&amp;s%5Bsearch_type%5D=sale&amp;s%5Badvanced%5D=1\" class=\"alignright\">Advanced\n                Search</a>\n    <input type=\"hidden\" name=\"search\" value=\"1\" />\n<input type=\"hidden\" name=\"s[search_type]\" value=\"sale\" />\n<input type=\"hidden\" name=\"search_type\" value=\"sale\" />\n</fieldset></form>\n        <div class=\"clear\"></div>\n            <div class=\"section\">\n                <ul class=\"menu\" id=\"sr-sort\">\n                                        <li>\n                        <a class=\"down active\"\n                            href=\"/ireland/houses-for-sale/?s%5Bsort_type%5D=d\">\n                            Best Match</a>\n                    </li>\n                                                            <li>\n                        <a class=\"down\"\n                            href=\"/ireland/houses-for-sale/?s%5Bsort_by%5D=date&s%5Bsort_type%5D=d\">\n                            Date Entered</a>\n                    </li>\n                    <li>\n                        <a class=\"down\"\n                            href=\"/ireland/houses-for-sale/?s%5Bsort_by%5D=price&s%5Bsort_type%5D=d\">\n                            Price</a>\n                    </li>\n                                            <li>\n                        <a class=\"down\"\n                           href=\"/ireland/houses-for-sale/?s%5Bsort_by%5D=upcoming_viewing&s%5Bsort_type%5D=a\">\n                            Upcoming Viewing</a>\n                        </li>\n                                    </ul>\n                <span>Sort by:</span>\n            <strong>Found 24,261 properties.\n            </strong>\n            Displaying properties 1 - 10 below            <div id=\"search_sentence\">\n                <h1>\n                Houses for sale  in Ireland</h1>\n            </div>\n        </div>\n            </div>\n</div>\n</div>\n\n    <table id=\"sr_content\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;id&quot;:&quot;root&quot;}\">\n        <tr>\n            <td style=\"vertical-align:top\">\n                <div class=\"add-menu\">\n                    <ul>\n                        <li>\n                            <a href=\"#\" class=\"save-search\">\n                            Save this search</a>\n                        </li>\n                        <li>\n                            <a href=\"/rss.daft?%2Fireland%2Fhouses-for-sale%2F=&county=ireland&encoded_type=houses-for-sale&area=&decoded=1&fr=default&limit=10&offset=0&type=sale&s%5Bpt_id%5D=1&s%5Bcc_id%5D=&s%5Bsearch_type%5D=sale&search=1&search_type=sale&create=1&add_saved_search=1\"\n                                class=\"rss\">RSS</a>\n                        </li>\n                    </ul>\n                        <a href=\"\"\n                        id=\"email_alert_link\"\n                        class=\"create email-alert\"\n                        data-alert-link=\"/emailalerts.daft?ea%5Bcreate%5D=1&ea%5Bwanted_type%5D=sale&from_search=1&ea%5Bpt_id%5D=1&ea%5Bcc_id%5D=&ea%5Bsearch_type%5D=sale\">Create email alert from this search</a>\n                        </div>\n    <div class=\"adsense-native-ad\">\n    <script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n    <ins class=\"adsbygoogle\"\n         style=\"display:inline-block;min-width:320px;max-width:776px;width:100%;height:90px\"\n         data-ad-client=\"ca-pub-3047800131877384\"\n         data-ad-slot=\"5154084841\"></ins>\n    <script>\n    (adsbygoogle = window.adsbygoogle || []).push({});\n    </script>\n</div>\n    <div class=\"box\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;container_id&quot;:&quot;root&quot;,&quot;id&quot;:&quot;child&quot;,&quot;repeated&quot;:true}\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">1. </span>\n                <a href=\"/limerick/houses-for-sale/newcastle-west/17-portland-drive-newcastle-west-limerick-1107843/\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;href&quot;: &quot;url&quot;, &quot;content&quot;: &quot;name&quot;},&quot;container_id&quot;:&quot;child&quot;}\">\n            17 Portland Drive, Newcastle West, Co. Limerick \n            - Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_D1.png\" alt=\"BER D1\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/limerick/houses-for-sale/newcastle-west/17-portland-drive-newcastle-west-limerick-1107843/\">\n                        <img class=\"main_photo\"\n                    src=\"//m1.dmlimg.com/MzcxODM2YTAwNDQzMjU1ZjY1MTI0ZTYwMWQ2M2ZjMTFkiNrI54CC0ZdY7ciCPqhvaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvbUdHYnZMMUlCVzdqX0d5SjVOa2l5ajRpMzBFUXFscmJqSkQ5Uk9aY0RaaHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    data-original=\"//m1.dmlimg.com/MzcxODM2YTAwNDQzMjU1ZjY1MTI0ZTYwMWQ2M2ZjMTFkiNrI54CC0ZdY7ciCPqhvaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvbUdHYnZMMUlCVzdqX0d5SjVOa2l5ajRpMzBFUXFscmJqSkQ5Uk9aY0RaaHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Detached House at 17 Portland Drive, Newcastle West, Co. Limerick\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1107843\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>14</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;},&quot;container_id&quot;:&quot;child&quot;}\">&euro;139,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    3 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    1 Bath                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;},&quot;container_id&quot;:&quot;child&quot;}\">\n    \n    Representing excellent value at the asking price, this 3 bedroom dormer style residence is located within walking distance to all local ameanities.  Accommodation comprises:...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/limerick/houses-for-sale/newcastle-west/17-portland-drive-newcastle-west-limerick-1107843/?search_type=sale&id=1107843&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/dngstack_abbeyfeale/\">DNG Stack</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">2. </span>\n                <a href=\"/limerick/houses-for-sale/athea/templeathea-athea-limerick-1117046/\">\n            Templeathea, Athea, Co. Limerick \n            - Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_C2.png\" alt=\"BER C2\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/limerick/houses-for-sale/athea/templeathea-athea-limerick-1117046/\">\n                        <img class=\"main_photo\"\n                    src=\"//m1.dmlimg.com/YzE3MDNhMWEwNjZlYjkwYzgxOWJkODRiZTkyOGRiMjOzE25Oh2mYbhFo26uEG9w3aHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvaThoUV9tWGxtZWdJemhleU9vU0ZsQVRHdXl3S20tRGpJX0RaWGxTR1htaHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    data-original=\"//m1.dmlimg.com/YzE3MDNhMWEwNjZlYjkwYzgxOWJkODRiZTkyOGRiMjOzE25Oh2mYbhFo26uEG9w3aHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvaThoUV9tWGxtZWdJemhleU9vU0ZsQVRHdXl3S20tRGpJX0RaWGxTR1htaHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Detached House at Templeathea, Athea, Co. Limerick\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1117046\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>13</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;224,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    4 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    3 Baths                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n    \n    This superb residence is built to the highest standards and offers circa 2,300 sq ft of beautifully finished living space.  Ground floor accommodation comprises entrance hall...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/limerick/houses-for-sale/athea/templeathea-athea-limerick-1117046/?search_type=sale&id=1117046&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/dngstack_abbeyfeale/\">DNG Stack</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">3. </span>\n                <a href=\"/longford/houses-for-sale/abbeyshrule/rath-abbeyshrule-longford-1103261/\">\n            Rath, Abbeyshrule, Co. Longford \n            - Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c0.dmstatic.com/690/i/ber/ber_G.png\" alt=\"BER G\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/longford/houses-for-sale/abbeyshrule/rath-abbeyshrule-longford-1103261/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m1.dmlimg.com/ODQ1NmEzZmIxZWQ3YmNkNmU5ZGRkMzg1MzVjZDgzMzKVFo0sw9ahcpLQL_uVyMv8aHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvLVBrMFNOMURQNXBqNGc0bGNKOU1sSndQVnpodG4zMURVaTFpNndxUHJwWnNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Detached House at Rath, Abbeyshrule, Co. Longford\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1103261\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>10</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;120,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    2 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    1 Bath                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n    \n    A charming and unique property.\nDetached cottage on circa 1/2 acre.\nAccommodation includes 2 bedrooms, kitchen, livingroom and bathroom.\nLovely features such as timb...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/longford/houses-for-sale/abbeyshrule/rath-abbeyshrule-longford-1103261/?search_type=sale&id=1103261&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/oroarkebros/\">O'Roarke Bros</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">4. </span>\n                <a href=\"/dublin/houses-for-sale/castleknock/16-laverna-dale-castleknock-dublin-1097330/\">\n            16 Laverna Dale, Castleknock, Dublin 15 \n            - Semi-Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_D2.png\" alt=\"BER D2\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/dublin/houses-for-sale/castleknock/16-laverna-dale-castleknock-dublin-1097330/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m0.dmlimg.com/ZmRiMTU5NzE3M2QwNDY4NjM3ZmRjZWI0MGM5MjI2OWN7ZJoHyYiN4DucYoDRVsqqaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvYzNoVFhjZlQ1SmVEOXFjNU5EQTI0SDdFUjJpcXNoc2NIc2pSS3N2VHF6aHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Semi-Detached House at 16 Laverna Dale, Castleknock, Dublin 15, West Co. Dublin\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1097330\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>8</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;395,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    4 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    2 Baths                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n                <a href=\"/lisney_drumcondra/\">\n                <img class=\"alignright\" src=\"//m0.dmlimg.com/NGMzM2I2MWMyZmZkODgwMmQ3MTIxM2RkZGQ0ZTQzMzUjTgW2G74u9-Y1A-qYl2uyaHR0cDovL21lZGlhLmRhZnQuaWUvWXk3c0k0ZkxMYlI0SmUyM0ZuMzNqelRiSHM3aXotdjJBWHJJS1I5dTlPaz0ucG5nfHx8OTB8fHx8fHx8.png\"\n                    width=\"90\" height=\"75\"                    alt=\"Lisney (Drumcondra)\" />\n            </a>\n    \n    Well presented and enjoying a private cul de sac setting no. 16 Laverna Dale is a superb four bedroomed family home in a most sought after location. This property offers function...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/dublin/houses-for-sale/castleknock/16-laverna-dale-castleknock-dublin-1097330/?search_type=sale&id=1097330&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\"/lisney_drumcondra/\">Lisney (Drumcondra)</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">5. </span>\n                <a href=\"/dublin/houses-for-sale/tyrrelstown/6-mount-eustace-rise-tyrrelstown-dublin-1062706/\">\n            6 Mount Eustace Rise, Tyrrelstown, Dublin 15 \n            - Semi-Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_D1.png\" alt=\"BER D1\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/dublin/houses-for-sale/tyrrelstown/6-mount-eustace-rise-tyrrelstown-dublin-1062706/\">\n                        <span class=\"sticker_holder sale_sticker_2\"></span>\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m0.dmlimg.com/NmYyODUzOWQyNzhhNzRiNjUzZWJiOTVhOWUzNGIxMzAR0CL2CxAOn2WOK-rm0mHZaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvMnp6eDFWQ29xWkVJS2lpUlYzTU43ZC12QXZ3c0Q0am1uVFBGUXdnYjJjdHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Semi-Detached House at 6 Mount Eustace Rise, Tyrrelstown, Dublin 15, North Co. Dublin\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1062706\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>14</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;199,950</strong>\n                <ul class=\"info\">\n                        <li>\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    3 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    3 Baths                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n                <a href=\"/wilsonmoore/\">\n                <img class=\"alignright\" src=\"//m0.dmlimg.com/ZjZiYTJmNTk4YjIwNWIxNjY5ZjYwYTg5Zjc2MjQwOTjivhVRdN0EjHsKtbiv_UNtaHR0cDovL21lZGlhLmRhZnQuaWUvV1daODU2cWRVSjRzZXBSOWhhQzRnOGEwbWFIOTQ0ZzZ2X1Z6aWNHNTJUdz0ucG5nfHx8OTB8fHx8fHx8.png\"\n                    width=\"90\" height=\"90\"                    alt=\"Wilson Moore Estate and Letting Agents\" />\n            </a>\n    \n    SUPERB 3 BED / 3 BATH HOME A MUST SEE!!!\nEXCELLENT LOCATION, ATTRACTIVE REAR GARDEN, PARKING, CLOSE TO A HOST OF LOCAL AMENITIES\n\nWilson Moore are proud to introduce you to t...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/dublin/houses-for-sale/tyrrelstown/6-mount-eustace-rise-tyrrelstown-dublin-1062706/?search_type=sale&id=1062706&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\"/wilsonmoore/\">Wilson Moore Estate and Letting Agents</a></li></ul>\n        </div>\n    </div>\n<div id='dfp-mid_banner_full_size' style='width:786px; height:155px;'>\n    <script type='text/javascript'>\n        googletag.cmd.push(function() {\n            googletag.display('dfp-mid_banner_full_size');\n        });\n    </script>\n</div>    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">6. </span>\n                <a href=\"/dublin/houses-for-sale/stillorgan/107-upper-kilmacud-road-stillorgan-dublin-1105753/\">\n            107 Upper Kilmacud Road, Stillorgan, Co. Dublin \n            - Semi-Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_E2.png\" alt=\"BER E2\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/dublin/houses-for-sale/stillorgan/107-upper-kilmacud-road-stillorgan-dublin-1105753/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m0.dmlimg.com/ZDlmZGViNWI4OTE0NjUyNmU5ZWJjNDE5MzVhZGE2ODV1DLDM99Qc-08zAbM09C1paHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvZlV3MDlmSTNUQUR1b1VpU0FLZEtLUUd3TDA5TkJHUGFkMFF4NDFVMnVJTnNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Semi-Detached House at 107 Upper Kilmacud Road, Stillorgan, South Co. Dublin\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1105753\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>16</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;575,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    5 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    4 Baths                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n                <a href=\"/youngsestateagents/\">\n                <img class=\"alignright\" src=\"//m1.dmlimg.com/MjMzM2I3NGFmZmQ0Nzk1MDZmMTMwNWU2NjUwOTI0MWHoVSF-PIiVGpv6Gjhdb7McaHR0cDovL21lZGlhLmRhZnQuaWUvRGd4TnF2V0xmQk4zbS1ONndJVXBBQndQX0FLV2dHU0ctaW92QndBRzRwcz0ucG5nfHx8OTB8fHx8fHx8.png\"\n                    width=\"87\" height=\"90\"                    alt=\"Youngs Estate Agents\" />\n            </a>\n    \n    Prime Stillorgan location and ready to walk in!\nSuper family home, extended ensuring all the extra rooms required are already in situ! 107 has a large, sunny rear garden and off...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/dublin/houses-for-sale/stillorgan/107-upper-kilmacud-road-stillorgan-dublin-1105753/?search_type=sale&id=1105753&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\"/youngsestateagents/\">Youngs Estate Agents</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">7. </span>\n                <a href=\"/dublin/houses-for-sale/donnybrook/18-anglers-rest-beaver-row-donnybrook-dublin-1102393/\">\n            18 Anglers Rest, Beaver row, Donnybrook, Dublin 4 \n            - Townhouse            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_E1.png\" alt=\"BER E1\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/dublin/houses-for-sale/donnybrook/18-anglers-rest-beaver-row-donnybrook-dublin-1102393/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m0.dmlimg.com/ZjMzNzJjZTQxODEwNTIyMDNkZDI3NWViYzlkY2RkM2R87iywVGuXbuI94eeChOu8aHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvZUJkdGtmVGlBbmllcV9TM01SSGVSYmc3QVc3WEpESEU2RmViMnFKUmt1eHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Townhouse at 18 Anglers Rest, Beaver row, Donnybrook, Dublin 4, South Dublin City\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1102393\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>13</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;340,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Townhouse<span class='pipe'>|</span>                    </li>\n                            <li>\n                    2 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    2 Baths                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n                <a href=\"/youngsestateagents/\">\n                <img class=\"alignright\" src=\"//m1.dmlimg.com/MjMzM2I3NGFmZmQ0Nzk1MDZmMTMwNWU2NjUwOTI0MWHoVSF-PIiVGpv6Gjhdb7McaHR0cDovL21lZGlhLmRhZnQuaWUvRGd4TnF2V0xmQk4zbS1ONndJVXBBQndQX0FLV2dHU0ctaW92QndBRzRwcz0ucG5nfHx8OTB8fHx8fHx8.png\"\n                    width=\"87\" height=\"90\"                    alt=\"Youngs Estate Agents\" />\n            </a>\n    \n    Great layout in Donnybrook!\nIt's not too often that a two bed-roomed town house comes up in Donnybrook.  With easy access to UCD, the city centre, Donnybrook, Ballsbridge and R...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/dublin/houses-for-sale/donnybrook/18-anglers-rest-beaver-row-donnybrook-dublin-1102393/?search_type=sale&id=1102393&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\"/youngsestateagents/\">Youngs Estate Agents</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">8. </span>\n                <a href=\"/donegal/houses-for-sale/letterkenny/247-rossuille-oldtown-letterkenny-donegal-1082496/\">\n            247 Rossuille, Oldtown, Letterkenny, Co. Donegal \n            - Semi-Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_E2.png\" alt=\"BER E2\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/donegal/houses-for-sale/letterkenny/247-rossuille-oldtown-letterkenny-donegal-1082496/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m0.dmlimg.com/NzQ3ZDliMzBlNDBlNTY1ODAzZTg4ZDU3NTgyODQ0ZDbnypZJqV-b7wpWAcrOE4ITaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvWEtLVHFkaG1GU3lBcnVEeVZMaFlBSHpIM0NJSV9lT01aSzI0aFhpRUpJOXNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Semi-Detached House at 247 Rossuille, Oldtown, Letterkenny, Co. Donegal\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1082496\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>6</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;110,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    3 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    1 Bath                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n    \n    Three-bedroom semi-detached family home with large rear garden located within walking distance of Letterkenny Town centre\n\nMEASUREMENTS &amp; DETAILS \n\nEntrance Hall (2...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/donegal/houses-for-sale/letterkenny/247-rossuille-oldtown-letterkenny-donegal-1082496/?search_type=sale&id=1082496&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/donegalproperty/\">Brendan McGlynn Associates Ltd.</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">9. </span>\n                <a href=\"/donegal/houses-for-sale/manorcunningham/carricknamart-manorcunningham-donegal-1117052/\">\n            Carricknamart, Manorcunningham, Co. Donegal \n            - Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_C2.png\" alt=\"BER C2\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/donegal/houses-for-sale/manorcunningham/carricknamart-manorcunningham-donegal-1117052/\">\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m1.dmlimg.com/YzliYzI2MDljMDg2YTMxMTU3MTQ1ZmJhNzY4NjEyM2bi2UUK9T6B-dNIP1krEgdAaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvX1RmT0VRTXN2R21XYl9Cd3VSeVd5MkJ5a183ckFvd28zLVZTSU1HZWVOTnNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Detached House at Carricknamart, Manorcunningham, Co. Donegal\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1117052\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>16</strong>\n         Photos    </div>\n                </a>\n                </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;225,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    4 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    1 Bath                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p>\n    \n    An impressive four-bedroom family home maintained to high standards throughout offering excellent living accommodation on a large well manicured site. Located less than 9km...            </p>\n\n\n<ul class=\"links\">\n    <li><a href=\"/donegal/houses-for-sale/manorcunningham/carricknamart-manorcunningham-donegal-1117052/?search_type=sale&id=1117052&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/donegalproperty/\">Brendan McGlynn Associates Ltd.</a></li></ul>\n        </div>\n    </div>\n    <div class=\"box\">\n\n        <div class = \"search_result_title_box\">\n        <h2>\n            <span class=\"sr_counter\">10. </span>\n                <a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/\">\n            11 Castle Crescent, Ashbourne, Co. Meath \n            - Semi-Detached House            </a>\n     \n        </h2>\n               <span class=\"ber-hover\n    \">\n     \n        <span>\n        <img src=\"//c1.dmstatic.com/690/i/ber/ber_C3.png\" alt=\"BER C3\" />\n    </span>    \n    \n        <div class=\"tooltipText\">\n        <span class=\"border-arrow\"></span>\n        <span class=\"arrow\"></span>\n        <h3>What is BER?</h3>\n        <p>\n            A Building Energy Rating (BER) indicates the energy performance of\n            a property. Using a scale of A to G, higher rated homes will\n            have lower energy bills.\n        </p>\n        <a href=\"/building-energy-rating-ber\">Learn more</a>\n    </div>\n    </span>\n        </div>\n        <div class=\"image\">\n            <a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/\">\n                        <span class=\"sticker_holder sale_sticker_6\"></span>\n                        <img class=\"main_photo lazy\"\n                    src=\"//c0.dmstatic.com/690/i/daft_no_photo_214x159.png\"\n                    data-original=\"//m1.dmlimg.com/YzI5ODk5ODNlZTQ4NWVlYzNmODJkNzU2MjQxMTI0MzEsCdYrz7HyOVmnRXkFqWmEaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvOTExb1BOT2YzMVRWVXBvZlVXS1FRa0s4RW43YXViZzlfbXNPdUh1UUZqeHNQVEV3TWpRPS5qcGd8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpg\"\n                    alt=\"Semi-Detached House at 11 Castle Crescent, Ashbourne, Co. Meath\"\n                    width=\"214\"\n                    height=\"159\"\n                    id=\"pp_1111902\" />\n\n    <div class=\"sr-photo-num\">\n        <strong>18</strong>\n         Photos    </div>\n                </a>\n                        <a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/\">\n                    <img class=\"sr_pp_photo first  lazy\"\n                        id=\"pp1_1111902\"\n                        src=\"//c1.dmstatic.com/690/i/daft_no_photo_101x82.png\"\n                        data-original=\"//m0.dmlimg.com/ZTk0MjI1NjFkZGRjZGNkODczOWMwZTBjYmY5OTI1MzcCZMz-mhGpOuciyj0ZLBKqaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvYnNGSmxKTUdGRHFqWGJFQlcyejE1MG9qYkp0RFFiU1Nxemp2ZlR4ZkNvMXNQVEV3TWpRPS5qcGd8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\"\n                        alt=\"11 Castle Crescent, Ashbourne, Co. Meath\"\n                        width=\"101\"\n                        height=\"82\" />\n                </a>\n                        <a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/\">\n                    <img class=\"sr_pp_photo first  lazy\"\n                        id=\"pp2_1111902\"\n                        src=\"//c1.dmstatic.com/690/i/daft_no_photo_101x82.png\"\n                        data-original=\"//m1.dmlimg.com/MjFiZTkwZjAyOWQwY2RiN2Q2OWUyOGIyMDkxNjA4YmNsTxy_VL04FPcgX6nYRDITaHR0cDovL21lZGlhLmRhZnQuaWUvcHJvcGVydHktaW1hZ2UvbXVOd3gyTThEaGFNNnRyV3UtT2xKU242bVEwLWNuclV3dHd2Y2YwUHRfUnNQVEV3TWpRPS5qcGd8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\"\n                        alt=\"11 Castle Crescent, Ashbourne, Co. Meath\"\n                        width=\"101\"\n                        height=\"82\" />\n                </a>\n                    </div><!-- class=\"image\" -->\n\n        <div class=\"text-block\">\n\n            <div class=\"info-box\">\n                <strong class=\"price\">&euro;270,000</strong>\n                <ul class=\"info\">\n                        <li>\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\n                            <li>\n                    4 Beds<span class='pipe'>|</span>                    </li>\n                            <li>\n                    1 Bath                    </li>\n                        </ul>\n                </div><!-- class=\"info-box\" -->\n\n            <p class=\"pp\">\n                <a href=\"/sfgeraghty/\">\n                <img class=\"alignright\" src=\"//m0.dmlimg.com/NmE2ZDAxMWExNTI4MDk5MjZhMjcyMjg4ZjI4MzYzYzBxaCYX8_H9Usm8MpyOdiSIaHR0cDovL21lZGlhLmRhZnQuaWUvYjNiTkU4M1Z1ZTJBODQtaVFhZllyTVhVeWtIOFNDZHpoNkZ3RkZMb0RNcz0ucG5nfHx8OTB8fHx8fHx8.png\"\n                    width=\"90\" height=\"90\"                    alt=\"Sherry FitzGerald Geraghty\" />\n            </a>\n    \n    Welcome to your new home - 11 Castle Crescent Ashbourne, a beautifully presented, modern and spacious 4 bedroom semi detached home with large open plan kitchen / dining room, integrated garage and private low maintenance rear garden.\nSherry FitzGerald Geraghty are delighted to present this lovely 4 bed to the market which boasts...            </p>\n\n\n    <div class=\"section\">\n    <ul class=\"links\">\n    <li><a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/?search_type=sale&id=1111902&add_to_mydaft=1\" rel=\"nofollow\">Add to saved ads</a>                \n        </li>\n    <li><span class='pipe'>|</span>Agent: <a href=\"/sfgeraghty/\">Sherry FitzGerald Geraghty</a></li></ul>\n            <a href=\"/meath/houses-for-sale/ashbourne/11-castle-crescent-ashbourne-meath-1111902/\">View more details &amp; 15 more photos</a>\n            <span class=\"tel\">\n            Call: Celine Geraghty at \n            <strong>01 8350577</strong>\n        </span>\n                </div>\n            </div>\n    </div>\n        <div class=\"googlead container\">\n            <script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n            <!-- SR - Text Bottom -->\n            <ins class=\"adsbygoogle\"\n                style=\"display:inline-block;width:764px;height:90px\"\n                data-ad-client=\"ca-pub-3047800131877384\"\n                data-ad-slot=\"2452968840\">\n            </ins>\n            <script>\n                (adsbygoogle = window.adsbygoogle || []).push({});\n            </script>\n        </div>\n            <ul class=\"paging clear\">\n\n        <li><span class=\"current\">1</span></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=10\">2</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=20\">3</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=30\">4</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=40\">5</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=50\">6</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=60\">7</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=70\">8</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=80\">9</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=90\">10</a></li>\n                <li><a href=\"/ireland/houses-for-sale/?offset=100\">...</a></li>\n                <li class=\"next_page\">\n            <a href=\"/ireland/houses-for-sale/?offset=10\">Next</a>\n        </li>\n        </ul>\n</td>\n    <td style=\"position:relative;\">\n        <div id=\"sr_sidebar_dummy\"></div>\n        <div id=\"sr_sidebar\">\n    <div id=\"sidebar-ad\"><div id='dfp-skyscraper'>\n    <script>\n        googletag.cmd.push(function() {\n            googletag.display('dfp-skyscraper');\n        });\n    </script>\n</div></div>    </div>\n    </td>\n    </tr>\n</table>\n                <div id=\"footer\" >\n                    <div class=\"row\">\n                        <span>&copy; Daft Media Limited 1997 - 2015</span>\n                        <ul class=\"nav\">\n                            <li>\n                                <a href=\"/about/\">About Us</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.daft.ie/blog/\">Blog</a>\n                            </li>\n                            <li>\n                                <a href=\"/report/\">Daft Report</a>\n                            </li>\n                            <li>\n                                <a href=\"/content/mediakit.daft#contact\">Media Sales</a>\n                            </li>\n                            <li>\n                                <a href=\"/content/sitemap.daft\">Sitemap</a>\n                            </li>\n                            <li>\n                                <a href=\"/privacy/\">Privacy</a>/<a\n                                    href=\"/legal/\">Legal</a>\n                            </li>\n                            <li>\n                                <a href=\"/privacy/#cookies\">Cookie Policy</a>\n                            </li>\n                            <li>\n                                <a href=\"/help/\">Help</a>\n                            </li>\n                            <li>\n                                <a href=\"/contact/\">Contact</a>\n                            </li>\n                            <li>\n                                <a href=\"/mortgages/\">Mortgage Centre</a>\n                            </li>\n                                                    </ul>\n                    </div>\n                    <div class=\"row\">\n                        <span>Sites:</span>\n                        <ul class=\"sites\">\n                            <li>\n                                <a href=\"http://www.adverts.ie/\" rel=\"nofollow\">Adverts.ie</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.boards.ie/\" rel=\"nofollow\">Boards.ie</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.adverts.ie/shops/\" rel=\"nofollow\">Adverts.ie\n                                    Shops</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.property.ie/\" rel=\"nofollow\">Property.ie</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.rent.ie/\" rel=\"nofollow\">Rent.ie</a>\n                            </li>\n                            <li>\n                                <a href=\"http://www.thejournal.ie/\" rel=\"nofollow\">TheJournal.ie</a>\n                            </li>\n                            <li>\n                                <a href=\"http://jobs.daft.ie/\">Daft Jobs</a>\n                            </li>\n                        </ul>\n                    </div>\n                    <div class=\"clear\"></div>\n                </div><!-- id=\"footer\" -->\n\n                </div><!-- id=\"container\" -->\n    <script>\nvar _pool = _pool || [];\n(function(){\n    var s = document.createElement('script');\n    s.type = 'text/javascript'; s.async = true;\n    s.src = '//pool.distilled.ie/js/pool.min.js';\n    var x = document.getElementsByTagName('script')[0];\n    x.parentNode.insertBefore(s, x);\n})();\n_pool.push(['write', ['_dml']]);\n</script><script type=\"text/javascript\">\nadroll_adv_id = \"66GQZ3VB7VGCTEGY7PLX4A\";\nadroll_pix_id = \"K4ELA5VJVBGK7MQK5CU6Q5\";\n(function () {\nvar oldonload = window.onload;\nwindow.onload = function(){\n   __adroll_loaded=true;\n   var scr = document.createElement(\"script\");\n   var host = ((\"https:\" == document.location.protocol) ? \"https://s.adroll.com\" : \"http://a.adroll.com\");\n   scr.setAttribute('async', 'true');\n   scr.type = \"text/javascript\";\n   scr.src = host + \"/j/roundtrip.js\";\n   ((document.getElementsByTagName('head') || [null])[0] ||\n    document.getElementsByTagName('script')[0].parentNode).appendChild(scr);\n   if(oldonload){oldonload()}};\n}());\n</script>    </body>\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/daft_list.json",
    "content": "{\"extractors\": {}, \"version\": \"0.13.0\", \"page_type\": \"item\", \"plugins\": {\"annotations-plugin\": {\"extracts\": [{\"text-content\": \"#portia-content\", \"selector\": \"#sr_content\", \"item_container\": true, \"annotations\": {\"#portia-content\": \"#dummy\"}, \"id\": \"repeated#parent\"}, {\"item_container\": true, \"container_id\": \"repeated#parent\", \"selector\": \"#sr_content .box\", \"repeated\": true, \"id\": \"repeated\", \"text-content\": \"#portia-content\", \"annotations\": {\"#portia-content\": \"#dummy\"}}, {\"selector\": \".box h2\", \"container_id\": \"repeated\", \"data\": {\"1\": {\"attribute\": \"content\", \"required\": true, \"field\": \"address\", \"extractors\": []}}, \"annotations\": {\"content\": [{\"attribute\": \"content\", \"required\": true, \"field\": \"address\", \"extractors\": []}]}, \"id\": \"1\"}, {\"selector\": \".ber-hover img\", \"container_id\": \"repeated\", \"data\": {\"1\": {\"attribute\": \"alt\", \"required\": true, \"field\": \"ber\", \"extractors\": []}}, \"annotations\": {\"alt\": [{\"attribute\": \"alt\", \"required\": true, \"field\": \"ber\", \"extractors\": []}]}, \"id\": \"2\"}, {\"selector\": \".text-block p\", \"container_id\": \"repeated\", \"data\": {\"1\": {\"attribute\": \"content\", \"required\": false, \"field\": \"description\", \"extractors\": []}}, \"annotations\": {\"content\": [{\"attribute\": \"content\", \"required\": false, \"field\": \"description\", \"extractors\": []}]}, \"id\": \"3\"}, {\"selector\": \"span.price-change-down\", \"container_id\": \"repeated\", \"data\": {\"1\": {\"attribute\": \"content\", \"required\": true, \"field\": \"price_change\", \"extractors\": []}}, \"annotations\": {\"content\": [{\"attribute\": \"content\", \"required\": false, \"field\": \"price_change\", \"extractors\": []}]}, \"id\": \"4\"}]}}, \"url\": \"http://www.daft.ie/ireland/houses-for-sale/\", \"original_body\": \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\" \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\" lang=\\\"en\\\" xml:lang=\\\"en\\\" xmlns:og=\\\"http://opengraphprotocol.org/schema/\\\">\\n    <head>\\n        <title>Houses for Sale in Ireland | Daft.ie</title>\\n        <meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=ISO-8859-1\\\" />\\n    <link rel=\\\"canonical\\\" href=\\\"http://www.daft.ie/ireland/houses-for-sale/\\\" />\\n    <link rel=\\\"alternate\\\" href=\\\"android-app://com.daft.ie/daftie/search/sale/?query=%7B%22s%22%3A%7B%22pt_id%22%3A%5B%221%22%5D%2C%22search_type%22%3A%22sale%22%7D%2C%22ai%22%3A1%7D\\\" /><meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=Edge\\\" />\\n<meta name=\\\"description\\\" content=\\\"View Houses for Sale in Ireland from the Largest Property Listings Website in Ireland. Search Houses by Location, Price, Viewing Times, Property Type and Features.\\\" />\\n<!-- frame busting -->\\n        <link rel='stylesheet'\\n              type='text/css'\\n              href='//fonts.googleapis.com/css?family=Open+Sans:400,700,600' />\\n        <link rel=\\\"stylesheet\\\"\\n              type=\\\"text/css\\\"\\n              href=\\\"//c1.dmstatic.com/726/styles/default/sprited/daft.ie.css\\\" />\\n        <link rel=\\\"stylesheet\\\"\\n              type=\\\"text/css\\\"\\n              href=\\\"//c0.dmstatic.com/726/styles/default/sprited/header.css\\\" />\\n        <link rel='stylesheet'\\n              type='text/css'\\n              href='//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css' />\\n\\n            <link rel=\\\"icon\\\" href=\\\"/favicon.ico\\\" type=\\\"image/x-icon\\\" />\\n</head>\\n<body class=''  >\\n        <div class=\\\"strapline-container\\\" id=\\\"notify-container\\\">\\n            <div class=\\\"strapline\\\">\\n                <div class=\\\"strapline-title\\\">\\n                    <a href=\\\"http://www.daft.ie/ireland/property-for-sale/?s%5Bphotos%5D=1&amp;s%5Badvanced%5D=1&amp;s%5Bopenviewing%5D=1&amp;searchSource=sale&amp;utm_source=daft.ie&amp;utm_medium=strap_line&amp;utm_campaign=strap_202_\\\" target=\\\"_self\\\" class=\\\"ng-binding\\\">\\n                        Search Upcoming Properties on View Here!</a>\\n                </div>\\n                <div class=\\\"strapline-close notify-close\\\" title=\\\"Dismiss this notification\\\"></div>\\n            </div>\\n        </div>\\n\\n\\n\\n\\n<div id=\\\"heading-container\\\">\\n    <div class=\\\"headerrow\\\">\\n        <a href=\\\"/\\\" id=\\\"logo\\\">\\n            <img src=\\\"//c0.dmstatic.com/336b177f9f86cbf5f38f1/frontend/images/logo@2x.png\\\" height=\\\"41\\\" width=\\\"129\\\" alt=\\\"Daft.ie\\\">\\n        </a>\\n        <div class=\\\"top-nav hidden-xs\\\">\\n\\n            <!-- not logged in -->\\n        <div class=\\\"user-menu logged-out\\\">\\n            <ul>\\n                <li class=\\\"seperator\\\">\\n                    <a href=\\\"/searchsale.daft?auth[login]=1\\\" class=\\\"\\\">\\n                        Login to MyDaft\\n                    </a>\\n                </li>\\n                <li class=\\\"seperator\\\">\\n                    <a href=\\\"/my-daft/?register[u]=1\\\" class=\\\"\\\" onClick=\\\"trackConversionEvent('6026393827078');\\\">\\n                        Register\\n                    </a>\\n                </li>\\n                <li>\\n                    <a href=\\\"/help\\\" class=\\\"\\\">\\n                        Help\\n                    </a>\\n                </li>\\n            </ul>\\n        </div>\\n    \\n    <a href=\\\"/ad-entry/?src=nav\\\" class=\\\"btn btn-primary\\\">Advertise My Property</a>\\n\\n</div>\\n    </div>\\n            <div id=\\\"nav\\\" class=\\\"headerrow\\\">\\n    <ul class=\\\"linkbar\\\">\\n        <li class=\\\"active hover-dropdown sale first\\\">\\n            <a href=\\\"/sales/\\\">For Sale</a>\\n            <div class=\\\"dropdown\\\">\\n                <ul class=\\\"dropdown-menu\\\">\\n                    <li><a href=\\\"/ireland/houses-for-sale/\\\">Houses for Sale</a></li>\\n                    <li><a href=\\\"/ireland/apartments-for-sale/\\\">Apartments for Sale</a></li>\\n                    <li><a href=\\\"/ireland/houses-for-auction/\\\">Auction Properties</a></li>\\n                    <li><a href=\\\"/ireland/property-for-sale/?s[area_type]=on&amp;s[agreed]=1&amp;s[advanced]=1\\\">Sale Agreed Properties</a></li>\\n                    <li><a href=\\\"/estate-agents/\\\">Find Estate Agent</a></li>\\n                    <li><a href=\\\"/price-register/\\\">Sold Prices/Price Register</a></li>\\n                    <li><a href=\\\"/sales/?s[advanced]=1\\\">Advanced Sale Search</a></li>\\n                </ul>\\n            </div>\\n        </li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\" hover-dropdown rent\\\">\\n            <a href=\\\"/lettings/\\\">To Rent</a>\\n            <div class=\\\"dropdown\\\">\\n                <ul class=\\\"dropdown-menu\\\">\\n                    <li><a href=\\\"/ireland/houses-for-rent/\\\">Houses for Rent</a></li>\\n                    <li><a href=\\\"/ireland/apartments-for-rent/\\\">Apartments for Rent</a></li>\\n                    <li><a href=\\\"/student-accommodation/?s[search_type]=rental\\\">Student Accommodation</a></li>\\n                    <li><a href=\\\"/searchtenants.daft\\\">Tenant Database</a></li>\\n                    <li><a href=\\\"/searchparking.daft\\\">Parking Spaces</a></li>\\n                    <li><a href=\\\"/lettings/?s[advanced]=1\\\">Advanced Rental Search</a></li>\\n                </ul>\\n            </div>\\n        </li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\" hover-dropdown sharing\\\">\\n            <a href=\\\"/sharing/\\\">Sharing</a>\\n            <div class=\\\"dropdown\\\">\\n                <ul class=\\\"dropdown-menu\\\">\\n                    <li><a href=\\\"/student-accommodation/\\\">Student Accommodation</a></li>\\n                    <li><a href=\\\"/searchroommates.daft\\\">Roommate Search</a></li>\\n                    <li><a href=\\\"/searchteamup.daft\\\">Teamup Search</a></li>\\n                    <li><a href=\\\"/sharing/?s[advanced]=1\\\">Advanced Sharing Search</a></li>\\n                </ul>\\n            </div>\\n        </li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/commercial-property/\\\">Commercial</a></li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/new-homes/\\\">New Homes</a></li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/short-term-rentals/\\\">Short Term Lets</a></li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/holiday-homes/\\\">Holiday Homes</a></li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/overseas/\\\">Overseas</a></li>\\n        <li class=\\\"separator\\\"></li>\\n        <li class=\\\"\\\"><a href=\\\"/discussions.daft\\\">Discussions</a></li>\\n    </ul>\\n</div>\\n    </div>\\n\\n<div id=\\\"breadcrumbs\\\" >\\n    <div class=\\\"breadcrumbs-inner\\\">\\n        <span class=\\\"left\\\">\\n            <span class=\\\"truncate\\\"><a href=\\\"/\\\">Home</a></span>\\n                            <span class=\\\"truncate\\\">\\n                    /\\n                    <a href=\\\"/sales/\\\"\\n                        >\\n                        Search Residential Property for Sale\\n                    </a>\\n                </span>\\n                            <span class=\\\"truncate last\\\">\\n                    /\\n                    <a href=\\\"/ireland/houses-for-sale/\\\"\\n                        id=\\\"last_crumb\\\">\\n                        Ireland Houses for Sale\\n                    </a>\\n                </span>\\n                    </span>\\n        <span class=\\\"right\\\">\\n            <strong>178,394</strong> properties online\\n            <span class=\\\"light\\\">\\n                (746 in the last 24 hours)\\n            </span>\\n        </span>\\n    </div>\\n</div>\\n                <div id=\\\"top_banner\\\">\\n                <div id='dfp-leaderboard'>\\n</div>                </div>\\n                \\n            <!-- header ends, content begins -->\\n                    <div id=\\\"notice\\\" class=\\\"hide\\\">\\n                                    </div>\\n<div id=\\\"modal_background_save_search\\\" class=\\\"modal_background\\\"></div>\\n<div id=\\\"modal_container_save_search\\\" class=\\\"modal_container\\\">\\n    <div class=\\\"close_modal\\\"></div>\\n    <form id=\\\"modal_form_save_search\\\" action=\\\"\\\">\\n        <fieldset>\\n                <div class=\\\"header\\\">Save this search</div>\\n    <div id=\\\"searchMessageContainer\\\" class=\\\"errorMessages\\\">\\n        <img src=\\\"//c0.dmstatic.com/726/i/alert-icons/error.png\\\" alt=\\\"Draft message icon\\\">\\n        <span id=\\\"searchMessage\\\">\\n        </span>\\n    </div>\\n    <span id = \\\"modalContainer\\\">\\n    <form>\\n        <label>Search Name:</label>\\n        <input type=\\\"text\\\" name=\\\"searchName\\\" id='searchName' placeholder=\\\"Daft saved search\\\" />\\n        <img src=\\\"/i/loading.gif\\\" id=\\\"save-throbber\\\" alt=\\\"saving search\\\" />\\n        <input\\n            type=\\\"button\\\"\\n            value=\\\"Save\\\"\\n            name=\\\"Yes\\\"\\n            id=\\\"save-search-button\\\"\\n            class=\\\"base_action_button standard_button right\\\"\\n    />\\n    <a class=\\\"right cancel_modal\\\">Cancel</a>\\n    </form>\\n    </span>\\n    <span id=\\\"modalSuccessMessage\\\">\\n    </span>\\n        </fieldset>\\n    </form>\\n</div>\\n    <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\"\\n            href=\\\"//c0.dmstatic.com/726/styles/default/search/login_modal.css\\\" />\\n<div id=\\\"modal_background_signup\\\" class=\\\"modal_background\\\"></div>\\n<div id=\\\"modal_container_signup\\\" class=\\\"modal_container\\\">\\n    <div class=\\\"close_modal\\\"></div>\\n    <form id=\\\"modal_form_signup\\\" action=\\\"\\\">\\n        <fieldset>\\n    <div class=\\\"signup-modal\\\">\\n    <div class=\\\"secureClose\\\"></div>\\n    <h2>Sign up</h2>\\n\\n    <label for=\\\"signup_username\\\" class=\\\"username-label\\\">Username:</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"username\\\"></p>\\n    <input type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"username\\\" id=\\\"signup_username\\\" placeholder=\\\"Letters and numbers only please. No spaces.\\\" />\\n\\n    <label for=\\\"signup_username\\\" class=\\\"text-label\\\">Password:</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"password\\\"></p>\\n    <input type=\\\"password\\\" class=\\\"form-control\\\" name=\\\"password\\\" id=\\\"signup_password\\\" />\\n\\n    <label for=\\\"password_confirm\\\" class=\\\"text-label\\\">Confirm password:</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"password_confirm\\\"></p>\\n    <input type=\\\"password\\\" class=\\\"form-control\\\" name=\\\"password_confirm\\\" id=\\\"signup_password_confirm\\\" />\\n\\n    <label for=\\\"signup_email\\\" class=\\\"text-label\\\">Email address:</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"email\\\"></p>\\n    <input type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"email\\\" id=\\\"signup_email\\\" />\\n\\n    <label for=\\\"signup_name\\\" class=\\\"text-label\\\">Full name:</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"name\\\"></p>\\n    <input type=\\\"text\\\" class=\\\"form-control\\\" name=\\\"name\\\" id=\\\"signup_name\\\" />\\n\\n    <label for=\\\"signup_name\\\" class=\\\"text-label\\\">What best describes you?</label>\\n    <p class=\\\"inlineValidation\\\" data-label=\\\"description\\\"></p>\\n    <select class=\\\"form-control\\\" name=\\\"description\\\" id=\\\"signup_description\\\">\\n        <option value=\\\"\\\"></option>\\n        <option value=\\\"1\\\">I am looking to buy</option>\\n        <option value=\\\"2\\\">I am looking to rent</option>\\n        <option value=\\\"3\\\">I am a seller</option>\\n        <option value=\\\"4\\\">I am a landlord</option>\\n        <option value=\\\"5\\\">I am an agent</option>\\n        <option value=\\\"6\\\">Other</option>\\n    </select>\\n\\n    <div class=\\\"submission-terms left\\\">\\n        <p>\\n            By submitting you agree to Daft's\\n            <a class=\\\"modal-link\\\" href=\\\"/content/termsandconditions.daft\\\">Terms of Use</a> and\\n            <a class=\\\"modal-link\\\" href=\\\"/privacy/\\\">Privacy Policy</a>\\n        </p>\\n    </div>\\n    <img src=\\\"/i/loading.gif\\\" alt=\\\"loading timer\\\" id=\\\"modal-throbber\\\"/>\\n    <span class=\\\"modal-action-button signup-button right\\\" id=\\\"signup-modal-button\\\">Sign up</span>\\n\\n    <div class=\\\"modal-register left\\\"></div>\\n\\n    <div class=\\\"checkboxes\\\">\\n        <input id=\\\"signup_newsletter\\\" class=\\\"designedCheckbox\\\" type=\\\"checkbox\\\" name=\\\"permission_email\\\" value=\\\"1\\\" />\\n        <label for=\\\"signup_newsletter\\\" class=\\\"designedLabel signup-newsletter-label\\\">\\n            <span class=\\\"signup-newsletter right\\\">Notify me about Daft news, features and tips</span>\\n        </label>\\n\\n        <input id=\\\"signup_3rdparty\\\" class=\\\"designedCheckbox\\\" type=\\\"checkbox\\\" name=\\\"permission_3rd_party\\\" value=\\\"1\\\" />\\n        <label for=\\\"signup_3rdparty\\\" class=\\\"designedLabel signup-third-party-label\\\">\\n            <span class=\\\"signup-third-party right\\\">Notify me about other products or services</span>\\n        </label>\\n    </div>\\n\\n    <div class=\\\"modal-register left\\\"></div>\\n    <p class=\\\"signup-login-link\\\">\\n        Already a member? <a\\n            id=\\\"modal_register\\\"\\n            class=\\\"modal-link cancel_modal\\\"\\n            href=\\\"https://www.daft.ie/loginForm/?register[u]=1\\\"\\n        >Log in</a>\\n    </p>\\n    </div>\\n    <!--[if gte IE 8]>\\n        <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\"\\n            href=\\\"//c0.dmstatic.com/726/styles/default/search/ie8_login_modal.css\\\" />\\n    <![endif]-->\\n        </fieldset>\\n    </form>\\n</div>\\n<div id=\\\"modal_background_email_alert\\\" class=\\\"modal_background\\\"></div>\\n<div id=\\\"modal_container_email_alert\\\" class=\\\"modal_container\\\">\\n    <div class=\\\"close_modal\\\"></div>\\n    <form id=\\\"modal_form_email_alert\\\" action=\\\"\\\">\\n        <fieldset>\\n                <div class=\\\"header\\\">Create an email alert for this search.</div>\\n    <div id=\\\"alertMessageContainer\\\" class=\\\"errorMessages\\\">\\n        <img src=\\\"\\\" alt=\\\"Draft message icon\\\">\\n        <span id=\\\"alertMessage\\\">\\n        </span>\\n    </div>\\n    <form>\\n        <label>Email address:</label>\\n        <input type=\\\"text\\\" name=\\\"emailAddress\\\" id='emailAlert' value=\\\"\\\" />\\n        <br/>\\n        <label>CC email address (optional):</label>\\n        <input type=\\\"text\\\" name=\\\"ccEmailAddress\\\" id='ccEmailAlert' value=\\\"\\\" />\\n        <br/>\\n        <input\\n            type=\\\"button\\\"\\n            value=\\\"Submit\\\"\\n            name=\\\"Yes\\\"\\n            id=\\\"save-alert-button\\\"\\n            class=\\\"base_action_button standard_button right\\\"\\n        />\\n        <img src=\\\"/i/loading.gif\\\" id=\\\"alert-throbber\\\" alt=\\\"saving alert\\\" class=\\\"hidden\\\" />\\n        <a class=\\\"right cancel_modal\\\">Cancel</a>\\n    </form>\\n        </fieldset>\\n    </form>\\n</div>\\n<div class=\\\"tabs-container\\\">\\n    <div class=\\\"tabs-area\\\">\\n        <div class=\\\"heading\\\">\\n            <ul class=\\\"tabset sr blue\\\">\\n                <li class=\\\"active\\\">\\n                                            <span>\\n                            List View\\n                        </span>\\n                                        </li>\\n                <li >\\n                                            <a href=\\\"/ireland/houses-for-sale/?s%5Bphoto_search%5D=1\\\">\\n                            Photo Gallery View\\n                        </a>\\n                                        </li>\\n                            <li >\\n                                            <a href=\\\"/ireland/houses-for-sale/?s%5Bmap_search%5D=1\\\">\\n                            Map View\\n                        </a>\\n                                        </li>\\n                           </ul>\\n\\n        </div>\\n        <div class=\\\"tab-content\\\">\\n\\n<form action=\\\"/searchsale.daft\\\" class=\\\"search-form\\\">\\n    <fieldset>\\n        <div class=\\\"col\\\">\\n                        <label for=\\\"cc_id\\\">Choose an Area:</label>\\n                <div class=\\\"select-row\\\">\\n                                            <select name=\\\"s[cc_id]\\\" id=\\\"cc_id\\\" class=\\\"sf_select_refine\\\">\\n                            <option value=\\\"\\\">Ireland</option>\\n                            <option value=\\\"\\\">-------</option>\\n                            <option value=\\\"ct1\\\">Dublin City</option><option value=\\\"ct2\\\">Galway City</option><option value=\\\"ct3\\\">Cork City</option><option value=\\\"ct4\\\">Belfast City</option><option value=\\\"ct5\\\">Limerick City</option><option value=\\\"ct6\\\">Waterford City</option><option value=\\\"\\\">-------</option><option value=\\\"c27\\\">Co. Antrim</option>\\n<option value=\\\"c28\\\">Co. Armagh</option>\\n<option value=\\\"c10\\\">Co. Carlow</option>\\n<option value=\\\"c25\\\">Co. Cavan</option>\\n<option value=\\\"c16\\\">Co. Clare</option>\\n<option value=\\\"c15\\\">Co. Cork</option>\\n<option value=\\\"c31\\\">Co. Derry</option>\\n<option value=\\\"c24\\\">Co. Donegal</option>\\n<option value=\\\"c32\\\">Co. Down</option>\\n<option value=\\\"c1\\\">Co. Dublin</option>\\n<option value=\\\"c30\\\">Co. Fermanagh</option>\\n<option value=\\\"c19\\\">Co. Galway</option>\\n<option value=\\\"c14\\\">Co. Kerry</option>\\n<option value=\\\"c3\\\">Co. Kildare</option>\\n<option value=\\\"c11\\\">Co. Kilkenny</option>\\n<option value=\\\"c8\\\">Co. Laois</option>\\n<option value=\\\"c23\\\">Co. Leitrim</option>\\n<option value=\\\"c17\\\">Co. Limerick</option>\\n<option value=\\\"c5\\\">Co. Longford</option>\\n<option value=\\\"c9\\\">Co. Louth</option>\\n<option value=\\\"c20\\\">Co. Mayo</option>\\n<option value=\\\"c2\\\">Co. Meath</option>\\n<option value=\\\"c26\\\">Co. Monaghan</option>\\n<option value=\\\"c6\\\">Co. Offaly</option>\\n<option value=\\\"c21\\\">Co. Roscommon</option>\\n<option value=\\\"c22\\\">Co. Sligo</option>\\n<option value=\\\"c18\\\">Co. Tipperary</option>\\n<option value=\\\"c29\\\">Co. Tyrone</option>\\n<option value=\\\"c12\\\">Co. Waterford</option>\\n<option value=\\\"c7\\\">Co. Westmeath</option>\\n<option value=\\\"c13\\\">Co. Wexford</option>\\n<option value=\\\"c4\\\">Co. Wicklow</option>\\n                        </select>\\n                              </div>\\n                </div>\\n        <div class=\\\"col price-range\\\">\\n            <label for=\\\"mnp\\\">What is your Price Range?</label>\\n            <div class=\\\"select-row\\\">\\n                <select class=\\\"middle\\\" name=\\\"s[mnp]\\\" id=\\\"mnp\\\">\\n                    <option value=\\\"\\\">No Min</option>\\n    <option value=\\\"25000\\\">&euro;25,000</option><option value=\\\"50000\\\">&euro;50,000</option><option value=\\\"75000\\\">&euro;75,000</option><option value=\\\"100000\\\">&euro;100,000</option><option value=\\\"125000\\\">&euro;125,000</option><option value=\\\"150000\\\">&euro;150,000</option><option value=\\\"175000\\\">&euro;175,000</option><option value=\\\"200000\\\">&euro;200,000</option><option value=\\\"225000\\\">&euro;225,000</option><option value=\\\"250000\\\">&euro;250,000</option><option value=\\\"275000\\\">&euro;275,000</option><option value=\\\"300000\\\">&euro;300,000</option><option value=\\\"325000\\\">&euro;325,000</option><option value=\\\"350000\\\">&euro;350,000</option><option value=\\\"375000\\\">&euro;375,000</option><option value=\\\"400000\\\">&euro;400,000</option><option value=\\\"425000\\\">&euro;425,000</option><option value=\\\"450000\\\">&euro;450,000</option><option value=\\\"475000\\\">&euro;475,000</option><option value=\\\"500000\\\">&euro;500,000</option><option value=\\\"550000\\\">&euro;550,000</option><option value=\\\"600000\\\">&euro;600,000</option><option value=\\\"650000\\\">&euro;650,000</option><option value=\\\"700000\\\">&euro;700,000</option><option value=\\\"750000\\\">&euro;750,000</option><option value=\\\"800000\\\">&euro;800,000</option><option value=\\\"850000\\\">&euro;850,000</option><option value=\\\"900000\\\">&euro;900,000</option><option value=\\\"950000\\\">&euro;950,000</option><option value=\\\"1000000\\\">&euro;1,000,000</option><option value=\\\"1250000\\\">&euro;1,250,000</option><option value=\\\"1500000\\\">&euro;1,500,000</option><option value=\\\"1750000\\\">&euro;1,750,000</option><option value=\\\"2000000\\\">&euro;2,000,000</option><option value=\\\"2250000\\\">&euro;2,250,000</option><option value=\\\"2500000\\\">&euro;2,500,000</option><option value=\\\"2750000\\\">&euro;2,750,000</option><option value=\\\"3000000\\\">&euro;3,000,000</option><option value=\\\"3500000\\\">&euro;3,500,000</option><option value=\\\"4000000\\\">&euro;4,000,000</option><option value=\\\"4500000\\\">&euro;4,500,000</option><option value=\\\"5000000\\\">&euro;5,000,000</option>                </select>\\n                <select class=\\\"middle\\\" name=\\\"s[mxp]\\\" id=\\\"mxp\\\">\\n                    <option value=\\\"\\\">No Max</option>\\n    <option value=\\\"25000\\\">&euro;25,000</option><option value=\\\"50000\\\">&euro;50,000</option><option value=\\\"75000\\\">&euro;75,000</option><option value=\\\"100000\\\">&euro;100,000</option><option value=\\\"125000\\\">&euro;125,000</option><option value=\\\"150000\\\">&euro;150,000</option><option value=\\\"175000\\\">&euro;175,000</option><option value=\\\"200000\\\">&euro;200,000</option><option value=\\\"225000\\\">&euro;225,000</option><option value=\\\"250000\\\">&euro;250,000</option><option value=\\\"275000\\\">&euro;275,000</option><option value=\\\"300000\\\">&euro;300,000</option><option value=\\\"325000\\\">&euro;325,000</option><option value=\\\"350000\\\">&euro;350,000</option><option value=\\\"375000\\\">&euro;375,000</option><option value=\\\"400000\\\">&euro;400,000</option><option value=\\\"425000\\\">&euro;425,000</option><option value=\\\"450000\\\">&euro;450,000</option><option value=\\\"475000\\\">&euro;475,000</option><option value=\\\"500000\\\">&euro;500,000</option><option value=\\\"550000\\\">&euro;550,000</option><option value=\\\"600000\\\">&euro;600,000</option><option value=\\\"650000\\\">&euro;650,000</option><option value=\\\"700000\\\">&euro;700,000</option><option value=\\\"750000\\\">&euro;750,000</option><option value=\\\"800000\\\">&euro;800,000</option><option value=\\\"850000\\\">&euro;850,000</option><option value=\\\"900000\\\">&euro;900,000</option><option value=\\\"950000\\\">&euro;950,000</option><option value=\\\"1000000\\\">&euro;1,000,000</option><option value=\\\"1250000\\\">&euro;1,250,000</option><option value=\\\"1500000\\\">&euro;1,500,000</option><option value=\\\"1750000\\\">&euro;1,750,000</option><option value=\\\"2000000\\\">&euro;2,000,000</option><option value=\\\"2250000\\\">&euro;2,250,000</option><option value=\\\"2500000\\\">&euro;2,500,000</option><option value=\\\"2750000\\\">&euro;2,750,000</option><option value=\\\"3000000\\\">&euro;3,000,000</option><option value=\\\"3500000\\\">&euro;3,500,000</option><option value=\\\"4000000\\\">&euro;4,000,000</option><option value=\\\"4500000\\\">&euro;4,500,000</option><option value=\\\"5000000\\\">&euro;5,000,000</option>                </select>\\n            </div>\\n        </div>\\n                 <div id=\\\"filterBeds\\\" class=\\\"col bedrooms\\\" >\\n                 <label for=\\\"max_bd_no\\\">How many Bedrooms?</label>\\n                 <div class=\\\"select-row\\\">\\n                     <select name=\\\"s[mnb]\\\" id=\\\"mnb\\\" class=\\\"small\\\">\\n                        <option value=\\\"\\\">No Min</option>\\n                            <option value=\\\"1\\\" >\\n        1 Bed</option>\\n                                <option value=\\\"2\\\" >\\n        2 Bed</option>\\n                                <option value=\\\"3\\\" >\\n        3 Bed</option>\\n                                <option value=\\\"4\\\" >\\n        4 Bed</option>\\n                                <option value=\\\"5\\\" >\\n        5 Bed</option>\\n                                <option value=\\\"6\\\" >6 Bedrooms+</option>\\n                    </select>\\n                    <select name=\\\"s[mxb]\\\" id=\\\"mxb\\\" class=\\\"small\\\">\\n                        <option value=\\\"\\\">No Max</option>\\n                            <option value=\\\"1\\\" >\\n        1 Bed</option>\\n                                <option value=\\\"2\\\" >\\n        2 Bed</option>\\n                                <option value=\\\"3\\\" >\\n        3 Bed</option>\\n                                <option value=\\\"4\\\" >\\n        4 Bed</option>\\n                                <option value=\\\"5\\\" >\\n        5 Bed</option>\\n                                <option value=\\\"6\\\" >6 Bedrooms</option>\\n                    </select>\\n                 </div>\\n             </div>\\n                <div id=\\\"filterAcres\\\" class=\\\"col bedrooms\\\"\\n    style=\\\"display:none\\\">\\n                <label for=\\\"min_area\\\">How many acres?</label>\\n                <div class=\\\"select-row\\\">\\n                    <select name=\\\"s[mna]\\\" id=\\\"min_area\\\" class=\\\"small\\\">\\n                        <option value=\\\"\\\">No Min</option>\\n                        <option value=\\\"1\\\">1 acre</option><option value=\\\"5\\\">5 acre</option><option value=\\\"20\\\">20 acre</option><option value=\\\"50\\\">50 acre</option><option value=\\\"100\\\">100 acre</option><option value=\\\"200\\\">200 acre</option><option value=\\\"500\\\">500 acre</option><option value=\\\"1000\\\">1000 acre</option>                    </select>\\n                    <select name=\\\"s[mxa]\\\" id=\\\"max_area\\\" class=\\\"small\\\">\\n                        <option value=\\\"\\\">No Max</option>\\n                        <option value=\\\"1\\\">1 acre</option><option value=\\\"5\\\">5 acre</option><option value=\\\"20\\\">20 acre</option><option value=\\\"50\\\">50 acre</option><option value=\\\"100\\\">100 acre</option><option value=\\\"200\\\">200 acre</option><option value=\\\"500\\\">500 acre</option><option value=\\\"1000\\\">1000 acre</option>                    </select>\\n                </div>\\n            </div>\\n            <div class=\\\"col property\\\">\\n            <label for=\\\"pt_id\\\">Property type?</label>\\n                <div class=\\\"select-row\\\">\\n                    <select name=\\\"s[pt_id]\\\" id=\\\"pt_id\\\">\\n                        <option value=\\\"\\\">Any Residential Property</option>\\n    <option value=\\\"1\\\" selected=\\\"selected\\\">House For Sale</option><option value=\\\"2\\\">Apartment For Sale</option><option value=\\\"3\\\">Duplex For Sale</option><option value=\\\"4\\\">Bungalow For Sale</option><option value=\\\"5\\\">Site For Sale</option><option value=\\\"6\\\">Studio Apartment For Sale</option>                </select>\\n            </div>\\n        </div>\\n        <input type=\\\"submit\\\" id=\\\"refine_submit\\\"\\n            class=\\\"orange-gradient submit standard-button\\\" value=\\\"Search\\\" />\\n            <br />\\n            <a href=\\\"/searchsale.daft?s%5Bpt_id%5D=1&amp;s%5Bcc_id%5D=&amp;s%5Bsearch_type%5D=sale&amp;s%5Badvanced%5D=1\\\" class=\\\"alignright\\\">Advanced\\n                Search</a>\\n    <input type=\\\"hidden\\\" name=\\\"search\\\" value=\\\"1\\\" />\\n<input type=\\\"hidden\\\" name=\\\"s[search_type]\\\" value=\\\"sale\\\" />\\n<input type=\\\"hidden\\\" name=\\\"search_type\\\" value=\\\"sale\\\" />\\n</fieldset></form>\\n        <div class=\\\"clear\\\"></div>\\n            <div class=\\\"section\\\">\\n                <ul class=\\\"menu\\\" id=\\\"sr-sort\\\">\\n                                        <li>\\n                        <a class=\\\"down active\\\"\\n                            href=\\\"/ireland/houses-for-sale/?s%5Bsort_type%5D=d\\\">\\n                            Best Match</a>\\n                    </li>\\n                                                            <li>\\n                        <a class=\\\"down\\\"\\n                            href=\\\"/ireland/houses-for-sale/?s%5Bsort_by%5D=date&s%5Bsort_type%5D=d\\\">\\n                            Date Entered</a>\\n                    </li>\\n                    <li>\\n                        <a class=\\\"down\\\"\\n                            href=\\\"/ireland/houses-for-sale/?s%5Bsort_by%5D=price&s%5Bsort_type%5D=d\\\">\\n                            Price</a>\\n                    </li>\\n                                            <li>\\n                        <a class=\\\"down\\\"\\n                           href=\\\"/ireland/houses-for-sale/?s%5Bsort_by%5D=upcoming_viewing&s%5Bsort_type%5D=a\\\">\\n                            Upcoming Viewing</a>\\n                        </li>\\n                                    </ul>\\n                <span>Sort by:</span>\\n            <strong>Found 20,568 properties.\\n            </strong>\\n            Displaying properties 1 - 10 below            <div id=\\\"search_sentence\\\">\\n                <h1>\\n                Houses for sale  in Ireland</h1>\\n            </div>\\n        </div>\\n            </div>\\n</div>\\n</div>\\n\\n    <table id=\\\"sr_content\\\">\\n        <tr>\\n            <td style=\\\"vertical-align:top\\\">\\n                <div class=\\\"add-menu\\\">\\n                    <ul>\\n                        <li>\\n                            <a href=\\\"#\\\" class=\\\"save-search\\\">\\n                            Save this search</a>\\n                        </li>\\n                        <li>\\n                            <a href=\\\"/rss.daft?%2Fireland%2Fhouses-for-sale%2F=&county=ireland&encoded_type=houses-for-sale&area=&decoded=1&fr=default&limit=10&offset=0&type=sale&s%5Bpt_id%5D=1&s%5Bcc_id%5D=&s%5Bsearch_type%5D=sale&search=1&search_type=sale&create=1&add_saved_search=1\\\"\\n                                class=\\\"rss\\\">RSS</a>\\n                        </li>\\n                    </ul>\\n                        <a href=\\\"\\\"\\n                        id=\\\"email_alert_link\\\"\\n                        class=\\\"create email-alert\\\"\\n                        data-alert-link=\\\"/emailalerts.daft?ea%5Bcreate%5D=1&ea%5Bwanted_type%5D=sale&from_search=1&ea%5Bpt_id%5D=1&ea%5Bcc_id%5D=&ea%5Bsearch_type%5D=sale\\\">Create email alert from this search</a>\\n                        </div>\\n    <div class=\\\"adsense-native-ad\\\">\\n</div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">1. </span>\\n                <a href=\\\"/kerry/houses-for-sale/killarney/5-friary-court-park-road-killarney-kerry-1194458/\\\">\\n            5 Friary Court, Park Road, Killarney, Co. Kerry            - Terraced House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_D2.png\\\" alt=\\\"BER D2\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/kerry/houses-for-sale/killarney/5-friary-court-park-road-killarney-kerry-1194458/\\\">\\n                        <img class=\\\"main_photo\\\"\\n                    src=\\\"https://b.dmlimg.com/ZmRlMjBlNTVmZWVjZGM3YTdiNjY4ODY1Mzc4OWZiYTVsFDJelUrG2hGsRlWfp4d6aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMC81LzA1Y2Q1MzMyZjA1ZGZiODlhMmRhNGVjMzRmNGJmMzAwLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    data-original=\\\"https://b.dmlimg.com/ZmRlMjBlNTVmZWVjZGM3YTdiNjY4ODY1Mzc4OWZiYTVsFDJelUrG2hGsRlWfp4d6aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMC81LzA1Y2Q1MzMyZjA1ZGZiODlhMmRhNGVjMzRmNGJmMzAwLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Terraced House at 5 Friary Court, Park Road, Killarney, Co. Kerry\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1194458\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>11</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;145,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Terraced House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    1 Bath                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n    \\n    Conveniently located townhouse in courtyard development, just off the Park Road.\\nThe town house which is in walk in condition comprises on the ground floor open plan kitchen d...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/kerry/houses-for-sale/killarney/5-friary-court-park-road-killarney-kerry-1194458/?search_type=sale&id=1194458&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/kerry/estate-agents/killarney/sfcoghlan/\\\">Sherry FitzGerald Coghlan</a></li></ul>\\n<div class=\\\"smi-viewings-holder\\\">\\n            <div class=\\\"sr-viewing-heading\\\">Upcoming viewings:</div>\\n                <div class=\\\"smi-onview-holder\\\">\\n            <a href=\\\"\\\"\\n                class=\\\"smi-onview-cal-link\\\"\\n                data-type=\\\"viewing\\\"\\n                data-value=\\\"Tue, Mar 15th, 5:00 - 5:30pm\\\">\\n                <div class=\\\"onview-cal\\\">\\n                    <div class=\\\"onview-cal-month\\\">\\n                        Mar\\n                    </div>\\n                    <div class=\\\"onview-cal-date\\\">\\n                        15\\n                    </div>\\n                </div>\\n            </a>\\n            <div class=\\\"smi-onview-text\\\">\\n                                    Tue, Mar 15th, 5:00 - 5:30pm\\n                            </div>\\n                    </div>\\n    </div>        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">2. </span>\\n                <a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/\\\">\\n            16 Deerpark Avenue, Castleknock, Dublin 15            - Detached House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_E2.png\\\" alt=\\\"BER E2\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/\\\">\\n                        <span class=\\\"sticker_holder sale_sticker_8\\\"></span>\\n                        <img class=\\\"main_photo\\\"\\n                    src=\\\"https://b.dmlimg.com/ZTZjMzI0ZWNjMTk2NGIxZDlhNzY0OWM4MWY4YmEyMzgn56aFxXREoJdsltxNKXFEaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvM2IxOTJjM2RjNTgwNzE5NDNmY2JlMWUyMzZlNWRkNTR8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpeg\\\"\\n                    data-original=\\\"https://b.dmlimg.com/ZTZjMzI0ZWNjMTk2NGIxZDlhNzY0OWM4MWY4YmEyMzgn56aFxXREoJdsltxNKXFEaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvM2IxOTJjM2RjNTgwNzE5NDNmY2JlMWUyMzZlNWRkNTR8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpeg\\\"\\n                    alt=\\\"Detached House at 16 Deerpark Avenue, Castleknock, Dublin 15, West Co. Dublin\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1056585\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>15</strong>\\n         Photos    </div>\\n                </a>\\n                        <a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/\\\">\\n                    <img class=\\\"sr_pp_photo first \\\"\\n                        id=\\\"pp1_1056585\\\"\\n                        src=\\\"https://b.dmlimg.com/ZmE0YmExYzFhMzgzNWEyZDhlYzU1N2ZiYzMwYzU5NjUopujPOFPc3mn2ISkSgjamaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNWVkMmRjOWY0ZmY1MmE3MDVhMzQ0NDQzMmQxZTJjZmZ8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        data-original=\\\"https://b.dmlimg.com/ZmE0YmExYzFhMzgzNWEyZDhlYzU1N2ZiYzMwYzU5NjUopujPOFPc3mn2ISkSgjamaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNWVkMmRjOWY0ZmY1MmE3MDVhMzQ0NDQzMmQxZTJjZmZ8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        alt=\\\"16 Deerpark Avenue, Castleknock, Dublin 15, West Co. Dublin\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                        <a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/\\\">\\n                    <img class=\\\"sr_pp_photo first \\\"\\n                        id=\\\"pp2_1056585\\\"\\n                        src=\\\"https://b.dmlimg.com/ZGM2YjRlZjljODA2ZDQ0N2UyYTdhNjdlNjM3NzE0N2bqg4OajzpUrT1FcclJYwVMaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNWQ5OWU5YjY0OGJjZGMxNzhiNTcwMDEzOWQ0MDA4MTB8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        data-original=\\\"https://b.dmlimg.com/ZGM2YjRlZjljODA2ZDQ0N2UyYTdhNjdlNjM3NzE0N2bqg4OajzpUrT1FcclJYwVMaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNWQ5OWU5YjY0OGJjZGMxNzhiNTcwMDEzOWQ0MDA4MTB8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        alt=\\\"16 Deerpark Avenue, Castleknock, Dublin 15, West Co. Dublin\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                    </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;1,300,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    4 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p class=\\\"pp\\\">\\n                <a href=\\\"https://www.daft.ie/dublin/estate-agents/castleknock/sfcastleknock/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/NmYyOGQ1MTdiNGJiOWVhZmRlNmVhYjI3MWJjMjQ3YWVMXz5wxO8eU6-ieiwHTjd_aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvN2Q1MTk2MWMxNGIxOTczOWE2YTQyYzUxNWYxZWU3ZmV8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"Sherry FitzGerald (Castleknock)\\\" />\\n            </a>\\n    \\n    Sherry FitzGerald are privilidged to present for sale this exceptional detached family home. Beautifully presented and maintained, it boasts a spectacular, south facing, landscaped, mature rear garden which extends to an impressive 110ft approx. in length. This garden is teeming with mature trees and and well chosen specimen...            </p>\\n\\n\\n    <div class=\\\"section\\\">\\n    <ul class=\\\"links\\\">\\n    <li><a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/?search_type=sale&id=1056585&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/dublin/estate-agents/castleknock/sfcastleknock/\\\">Sherry FitzGerald (Castleknock)</a></li></ul>\\n            <a href=\\\"/dublin/houses-for-sale/castleknock/16-deerpark-avenue-castleknock-dublin-1056585/\\\">View more details &amp; 12 more photos</a>\\n            <span class=\\\"tel\\\">\\n            Call: Michelle Curran at\\n            <strong>8201800</strong>\\n        </span>\\n                </div>\\n    <div class=\\\"smi-viewings-holder\\\">\\n            <div class=\\\"sr-viewing-heading\\\">Upcoming viewings:</div>\\n                <div class=\\\"smi-onview-holder\\\">\\n            <a href=\\\"\\\"\\n                class=\\\"smi-onview-cal-link\\\"\\n                data-type=\\\"viewing\\\"\\n                data-value=\\\"Sat, Mar 12th, 1:15 - 1:45pm\\\">\\n                <div class=\\\"onview-cal\\\">\\n                    <div class=\\\"onview-cal-month\\\">\\n                        Mar\\n                    </div>\\n                    <div class=\\\"onview-cal-date\\\">\\n                        12\\n                    </div>\\n                </div>\\n            </a>\\n            <div class=\\\"smi-onview-text\\\">\\n                                    Sat, Mar 12th, 1:15 - 1:45pm\\n                            </div>\\n                    </div>\\n    </div>        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">3. </span>\\n                <a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/\\\">\\n            Ard Aulinn, Mungret, Co. Limerick            - Detached House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_B3.png\\\" alt=\\\"BER B3\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/\\\">\\n                        <span class=\\\"sticker_holder sale_sticker_6\\\"></span>\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/ODhlN2ExODZiNDhhYWNlNTMzNmUwMWZiZDgzZDkzZmFA8DO8chZT3L4fQhEzJk4HaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZS83L2U3NzcxNWZiZjU5M2RmYTI5OWZmMDFiMzYwZWUyODc0LmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Detached House at Ard Aulinn, Mungret, Limerick City Suburbs\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1194475\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>11</strong>\\n         Photos    </div>\\n                </a>\\n                        <a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/\\\">\\n                    <img class=\\\"sr_pp_photo first \\\"\\n                        id=\\\"pp1_1194475\\\"\\n                        src=\\\"https://b.dmlimg.com/NjdhY2VmYTIzZjA4ZDE2MWZjMmFiYTA3OTZiODMwYjQS_4GPQHnCt1l38_fDMUXxaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYi9iL2JiOGNkMDkyODY0MGI1Y2IzODA4MjNmYTUzZjUzZGIzLmpwZ3x8fHx8fDEwMXg4MnxodHRwOi8vd3d3LmRhZnQuaWUvaS93YXRlcm1hcmtfZGFmdC5wbmd8fHw=.jpg\\\"\\n                        data-original=\\\"https://b.dmlimg.com/NjdhY2VmYTIzZjA4ZDE2MWZjMmFiYTA3OTZiODMwYjQS_4GPQHnCt1l38_fDMUXxaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYi9iL2JiOGNkMDkyODY0MGI1Y2IzODA4MjNmYTUzZjUzZGIzLmpwZ3x8fHx8fDEwMXg4MnxodHRwOi8vd3d3LmRhZnQuaWUvaS93YXRlcm1hcmtfZGFmdC5wbmd8fHw=.jpg\\\"\\n                        alt=\\\"Ard Aulinn, Mungret, Limerick City Suburbs\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                        <a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/\\\">\\n                    <img class=\\\"sr_pp_photo first \\\"\\n                        id=\\\"pp2_1194475\\\"\\n                        src=\\\"https://b.dmlimg.com/ZDM3YjhlMGVmYTY3ODQxNmU1ZjNmODZjOWZjYTcwNmW8qiRDISVL3MeegiyDwG2LaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZC82L2Q2N2VmM2E2NWM4MDBmZWFlZjA4ZTE5OTE3ODUyNDI1LmpwZ3x8fHx8fDEwMXg4MnxodHRwOi8vd3d3LmRhZnQuaWUvaS93YXRlcm1hcmtfZGFmdC5wbmd8fHw=.jpg\\\"\\n                        data-original=\\\"https://b.dmlimg.com/ZDM3YjhlMGVmYTY3ODQxNmU1ZjNmODZjOWZjYTcwNmW8qiRDISVL3MeegiyDwG2LaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZC82L2Q2N2VmM2E2NWM4MDBmZWFlZjA4ZTE5OTE3ODUyNDI1LmpwZ3x8fHx8fDEwMXg4MnxodHRwOi8vd3d3LmRhZnQuaWUvaS93YXRlcm1hcmtfZGFmdC5wbmd8fHw=.jpg\\\"\\n                        alt=\\\"Ard Aulinn, Mungret, Limerick City Suburbs\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                    </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;330,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    4 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    4 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p class=\\\"pp\\\">\\n                <a href=\\\"https://www.daft.ie/limerick/estate-agents/limerick-city/glauctioneers/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/MDliZjQ4MjY5MjllMWMyNGViZTMzMzllMjI4NzFkYWT20eULa4lY8EOY4OJeqTG6aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMmM2MmNmZDk4YjRhOGE0MjgyZmFjM2ZjYmQ0ZmMyYzd8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"GL Auctioneers\\\" />\\n            </a>\\n    \\n    Accommodation: \\n\\nLarge entrance hall, tiled flooring. Guest toilet &amp; Whb. \\nVery spacious open plan fitted kitchen cum dining area, tiled flooring &amp; slash back, french doors leading to private enclosed rear garden.\\nLarge utilty room which is plumbed &amp; fitted. \\nDouble doors leading large living room with feature fireplac...            </p>\\n\\n\\n    <div class=\\\"section\\\">\\n    <ul class=\\\"links\\\">\\n    <li><a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/?search_type=sale&id=1194475&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/limerick/estate-agents/limerick-city/glauctioneers/\\\">GL Auctioneers</a></li></ul>\\n            <a href=\\\"/limerick/houses-for-sale/mungret/ard-aulinn-mungret-limerick-1194475/\\\">View more details &amp; 8 more photos</a>\\n            <span class=\\\"tel\\\">\\n            Call: Geraldine Leddin at\\n            <strong>086-265 1380</strong>\\n        </span>\\n                </div>\\n            </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">4. </span>\\n                <a href=\\\"/louth/houses-for-sale/monasterboice/bay-view-house-fieldstown-monasterboice-louth-1182200/\\\">\\n            Bay View House, Fieldstown, Monasterboice, Co. Louth            - Detached House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_D1.png\\\" alt=\\\"BER D1\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/louth/houses-for-sale/monasterboice/bay-view-house-fieldstown-monasterboice-louth-1182200/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/NzdhMjMzODQwMTBhODRlZjc4MTg4NDAxYWQ0NmI4MTbx8oPKXmsTXV_lTrKrcxc7aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZS81L2U1M2M3M2JjYWUxYWExZjdlMDhjMjcxYjNlY2RlODc1LmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Detached House at Bay View House, Fieldstown, Monasterboice, Co. Louth\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1182200\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>13</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;289,000</strong>\\n    <div class=\\\"price-changes-sr\\\">\\n            <span class=\\\"price-change-down-arrow price-change-sr\\\"></span>\\n        <span class=\\\"price-change-down\\\">&euro;10,000</span>\\n                \\n    </div>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/louth/estate-agents/drogheda/sullivanpropertyconsultants/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/MjQ1YzNhZTA0NjA5NDk5Yzg0NGIxZGRjNTJjNzk1MDKKbCuM-w81XFwAHS2kFlzbaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvOWM0MmI3Njk5MTBkZTUyYzZhMjIxMGE3NjljODg4OWF8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"Sullivan Property Consultants\\\" />\\n            </a>\\n    \\n    We are pleased to offer to the market this three bedroom red brick bungalow in Fieldstown, Monasterboice which is a ten minute drive from Drogheda town and the M1 Motorway. The pr...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/louth/houses-for-sale/monasterboice/bay-view-house-fieldstown-monasterboice-louth-1182200/?search_type=sale&id=1182200&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/louth/estate-agents/drogheda/sullivanpropertyconsultants/\\\">Sullivan Property Consultants</a></li></ul>\\n        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">5. </span>\\n                <a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/\\\">\\n            Tatestown, Donaghpatrick, Navan, Co. Meath            - Detached House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_D1.png\\\" alt=\\\"BER D1\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/YmM0MzI0ODJkZGMxZjEwNTg4YWU3MTZmYTRhMTBjNjW1MWj-3ZeyL5w17VvKNsMdaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZGEyNjgzZGQ0YjZjNTk1NWU4MTUxMDQ1NjEwOWI4NWF8fHx8fHwyMTR4MTU5fGh0dHA6Ly93d3cuZGFmdC5pZS9pL3dhdGVybWFya19kYWZ0LnBuZ3x8fA==.jpeg\\\"\\n                    alt=\\\"Detached House at Tatestown, Donaghpatrick, Navan, Co. Meath\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1121715\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>17</strong>\\n         Photos    </div>\\n                </a>\\n                        <a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/\\\">\\n                    <img class=\\\"sr_pp_photo first  lazy\\\"\\n                        id=\\\"pp1_1121715\\\"\\n                        src=\\\"https://b.dmlimg.com/YTMzZTg5MTRhNzU1OTAwZDFlMmU2ODJhMzA4Yjk2NDk5jrIc8qMA5Zhga2V2-leHaHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18xMDF4ODIucG5nfHx8fHx8MTAxeDgyfHx8fA==.png\\\"\\n                        data-original=\\\"https://b.dmlimg.com/NjA1MzFlY2EzYjNmZWNiYTc4MmJmZDQwMmMwNWQ5YzNxpkB_qLatvgNgBchVlfx7aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNDUxZDE4YmM0MjJhNmY4NjA3ZTRkOTk3YjAzY2UyNmR8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        alt=\\\"Tatestown, Donaghpatrick, Navan, Co. Meath\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                        <a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/\\\">\\n                    <img class=\\\"sr_pp_photo first  lazy\\\"\\n                        id=\\\"pp2_1121715\\\"\\n                        src=\\\"https://b.dmlimg.com/YTMzZTg5MTRhNzU1OTAwZDFlMmU2ODJhMzA4Yjk2NDk5jrIc8qMA5Zhga2V2-leHaHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18xMDF4ODIucG5nfHx8fHx8MTAxeDgyfHx8fA==.png\\\"\\n                        data-original=\\\"https://b.dmlimg.com/NzI1MDc2Yjg2ZDllNjg2YTE5NDlmMjgzNDM5MGJiODV3f4OQGR3b3jNR-QTadrA_aHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvM2VhYzM1MzA5YWJmOTJjOWRlZmJmMmFiNmMwNTc1MjV8fHx8fHwxMDF4ODJ8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpeg\\\"\\n                        alt=\\\"Tatestown, Donaghpatrick, Navan, Co. Meath\\\"\\n                        width=\\\"101\\\"\\n                        height=\\\"82\\\" />\\n                </a>\\n                    </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;330,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    4 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p class=\\\"pp\\\">\\n                <a href=\\\"https://www.daft.ie/meath/estate-agents/navan/sherryfitzgeraldreilly/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/YTI4OGYzNDNjOWJmZmUyMDY1MDAzZmJjM2M2OGJkZDab0n7bZcfgRF_KRtLFHgfnaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMGIxMWUxMmMwZGVjNzA1MmU3OWM3YTJhMmY2YWI2NDV8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"Sherry FitzGerald Reilly\\\" />\\n            </a>\\n    \\n    Well presented bungalow set on a generous site of circa. 0.667 of an acre only 4.5km from Navan Town. The property has been well maintained by the present owners and benefits from bright and airy rooms. Accommodation. Kitchen, dining room, living room, utility, 4 bedrooms (master en-suite), bathroom.             </p>\\n\\n\\n    <div class=\\\"section\\\">\\n    <ul class=\\\"links\\\">\\n    <li><a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/?search_type=sale&id=1121715&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/meath/estate-agents/navan/sherryfitzgeraldreilly/\\\">Sherry FitzGerald Reilly</a></li></ul>\\n            <a href=\\\"/meath/houses-for-sale/navan/tatestown-donaghpatrick-navan-meath-1121715/\\\">View more details &amp; 14 more photos</a>\\n            <span class=\\\"tel\\\">\\n            Call: Ed Reilly at\\n            <strong>0469060450</strong>\\n        </span>\\n                </div>\\n            </div>\\n    </div>\\n</div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">6. </span>\\n                <a href=\\\"/limerick/houses-for-sale/clarina/carrig-east-clarina-limerick-1194460/\\\">\\n            Carrig East, Clarina, Co. Limerick            - Detached House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_C2.png\\\" alt=\\\"BER C2\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/limerick/houses-for-sale/clarina/carrig-east-clarina-limerick-1194460/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/MzkwM2E1NGY4NmZkYWI1YWJlMzkzOGE0MzM5YjdkYWKBV-jvNNyMnYUC7TSvCaodaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYS8zL2EzYzUzNWZiM2RiNTY4ODU3MDY3MTI3YjZmY2Q0YzMwLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Detached House at Carrig East, Clarina, Co. Limerick\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1194460\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>13</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;289,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    6 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/limerick/estate-agents/limerick-city/mandcproperty/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/ZmYxYjk1NmFjZTczZGM5MzFiNmU3OWE1MzcyMTdjNTWftxewfnk3qLrVdujoCy9waHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvNjYxODY2ZDljYjU0ZWUyMDBmNWZhMjY1YmRhMGE1ZWN8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"M&amp;C Property\\\" />\\n            </a>\\n    \\n    Carrig East represents one of the most interesting and versatile properties of its kind to be brought to the market in recent years. This substantial family home has been well ma...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/limerick/houses-for-sale/clarina/carrig-east-clarina-limerick-1194460/?search_type=sale&id=1194460&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/limerick/estate-agents/limerick-city/mandcproperty/\\\">M&amp;C Property</a></li></ul>\\n        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">7. </span>\\n                <a href=\\\"/wicklow/houses-for-sale/arklow/29-anchor-mews-arklow-wicklow-1188454/\\\">\\n            29 Anchor Mews, Arklow, Co. Wicklow            - Terraced House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_D2.png\\\" alt=\\\"BER D2\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/wicklow/houses-for-sale/arklow/29-anchor-mews-arklow-wicklow-1188454/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/MDA5YzA5NzhhZGFiNjE4ODhjM2NiNzMwYzk2MzYwYTIziLagnsGxVomAK2sJzN9SaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvZS8xL2UxMTkyMGUwMDA5ZDljODFkM2M3OWYyYzYyYTZhZjI5LmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Terraced House at 29 Anchor Mews, Arklow, Co. Wicklow\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1188454\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>15</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;125,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Terraced House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    1 Bath                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/wexford/estate-agents/gorey/cdauctioneers/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/NGUxNDYyZmE2ZDRmMmQ3YWQ2MjdiN2Q0ODJkMTU1Njg2NqpWJvVoiE5zzC0BLsYraHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYjcwM2Q1NjZlZGNjMjdiM2NlODQ1M2Y5N2E0OGJmYTl8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"CD Auctioneers\\\" />\\n            </a>\\n    \\n    This apartment on the 1st floor was built in 1998.  A small development overlooking the river &amp; South Quay Harbour &amp; only a few minutes walk from the beach.  Electric gates front the ...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/wicklow/houses-for-sale/arklow/29-anchor-mews-arklow-wicklow-1188454/?search_type=sale&id=1188454&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/wexford/estate-agents/gorey/cdauctioneers/\\\">CD Auctioneers</a></li></ul>\\n        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">8. </span>\\n                <a href=\\\"/wicklow/houses-for-sale/carnew/15-coves-brook-carnew-wicklow-1194450/\\\">\\n            15 Coves Brook, Carnew, Co. Wicklow            - Detached House            </a>\\n    \\n        </h2>\\n                       </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/wicklow/houses-for-sale/carnew/15-coves-brook-carnew-wicklow-1194450/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/MThhZjkyYTg1Y2I2NWI0MmMzNjlkMWEwNmU4OGEyM2SxTJeDHQVJFDUrfs9qSp8BaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMS8wLzEwMWJlY2RkZTJkOTJjNTkxNDMwMjZhMGYyMjY0NTRmLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Detached House at 15 Coves Brook, Carnew, Co. Wicklow\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1194450\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>20</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;135,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    4 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    2 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/dublin/estate-agents/blanchardstown/allianceauctioneers/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/MGU2ZTRmODI5OTA5MTk5NTk2ZTAwNTlmNTRhYjg2MWYeaXIUumOykjCj6thhdmbNaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMTBmYWUwYWMyNGFlNWRiNzZkY2E0M2E3YmQ5OTg4ZDZ8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"ALLIANCE AUCTIONEERS\\\" />\\n            </a>\\n    \\n    Peter Quinn Auctioneer is delighted to bring this lovely 4 bedroom detached dormer bungalow to the market in walk in condition.\\nThis property is situated on the outskirts of C...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/wicklow/houses-for-sale/carnew/15-coves-brook-carnew-wicklow-1194450/?search_type=sale&id=1194450&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/dublin/estate-agents/blanchardstown/allianceauctioneers/\\\">ALLIANCE AUCTIONEERS</a></li></ul>\\n        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">9. </span>\\n                <a href=\\\"/wicklow/houses-for-sale/rathnew/60-saunders-lane-rathnew-wicklow-1193650/\\\">\\n            60 Saunders Lane, Rathnew, Co. Wicklow            - Semi-Detached House            </a>\\n    \\n        </h2>\\n                       </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/wicklow/houses-for-sale/rathnew/60-saunders-lane-rathnew-wicklow-1193650/\\\">\\n                        <span class=\\\"sticker_holder sale_sticker_4\\\"></span>\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/NDM4NWU0YTk4NDgwM2U4OTgzZjhhZmYzM2FlY2EwNDg6CJCJ6_5jjzG33sueCcKvaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYi9mL2JmODNjMTU4NTFmZTRjNjQwOTg3NGUzYzMzYzdhZGEwLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Semi-Detached House at 60 Saunders Lane, Rathnew, Co. Wicklow\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1193650\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>9</strong>\\n         Photos    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;265,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Semi-Detached House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/wicklow/estate-agents/wicklow-town/cdauctioneerswicklow/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/MmQ1MTk4OGEzMDFhNWNhMDY2OWFlYTFhYWM0Yzk2YTJyqv108ifW1nep94RxImAyaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYmE5ZTI3MzhhY2Q1YWIxMzEzMjk4NTJiOGE4MDU2NjR8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"CD Auctioneers\\\" />\\n            </a>\\n    \\n    Accommodation\\n\\nEntrance Hallway    4.6m x 2m       with polished tiled floor\\n\\nLiving Room     4.2m x 3.6m         with Bay window, and views over Wicklow bay\\n                                                                and the Irish Sea, gran...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/wicklow/houses-for-sale/rathnew/60-saunders-lane-rathnew-wicklow-1193650/?search_type=sale&id=1193650&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/wicklow/estate-agents/wicklow-town/cdauctioneerswicklow/\\\">CD Auctioneers</a></li></ul>\\n        </div>\\n    </div>\\n    <div class=\\\"box\\\">\\n\\n        <div class=\\\"search_result_title_box\\\">\\n        <h2>\\n            <span class=\\\"sr_counter\\\">10. </span>\\n                <a href=\\\"/waterford/houses-for-sale/kilmeadan/65-fan-glas-kilmeadan-waterford-1182391/\\\">\\n            65 Fan Glas, Kilmeadan, Co. Waterford            - Terraced House            </a>\\n    \\n        </h2>\\n               <span class=\\\"ber-hover\\n    \\\">\\n     \\n        <span>\\n        <img src=\\\"//c1.dmstatic.com/726/i/ber/ber_A3.png\\\" alt=\\\"BER A3\\\" />\\n    </span>    \\n    \\n        <div class=\\\"tooltipText\\\">\\n        <span class=\\\"border-arrow\\\"></span>\\n        <span class=\\\"arrow\\\"></span>\\n        <h3>What is BER?</h3>\\n        <p>\\n            A Building Energy Rating (BER) indicates the energy performance of\\n            a property. Using a scale of A to G, higher rated homes will\\n            have lower energy bills.\\n        </p>\\n        <a href=\\\"/building-energy-rating-ber\\\">Learn more</a>\\n    </div>\\n    </span>\\n        </div>\\n        <div class=\\\"image\\\">\\n            <a href=\\\"/waterford/houses-for-sale/kilmeadan/65-fan-glas-kilmeadan-waterford-1182391/\\\">\\n                        <img class=\\\"main_photo lazy\\\"\\n                    src=\\\"https://b.dmlimg.com/ZDU5NDQ0OTA4NGMxMTEzODFmOTM4YzMwODliZjhhZDWIIMRPpakKtta5jeDTWa83aHR0cDovL3d3dy5kYWZ0LmllL2kvZGFmdF9ub19waG90b18yMTR4MTU5LnBuZ3x8fHx8fDIxNHgxNTl8fHx8.png\\\"\\n                    data-original=\\\"https://b.dmlimg.com/OWM0ZDVhZTBhZGFjM2E2ZTdmY2FjMjU3OThlMzA5NzB0KxWKZ2RTY7toK7ZtfVgEaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvYi9hL2JhZTYwZWU3NWM4ZWYyYjAwMGFmNjFkZmYxNTBkNzEwLmpwZ3x8fHx8fDIxNHgxNTl8aHR0cDovL3d3dy5kYWZ0LmllL2kvd2F0ZXJtYXJrX2RhZnQucG5nfHx8.jpg\\\"\\n                    alt=\\\"Terraced House at 65 Fan Glas, Kilmeadan, Co. Waterford\\\"\\n                    width=\\\"214\\\"\\n                    height=\\\"159\\\"\\n                    id=\\\"pp_1182391\\\" />\\n\\n    <div class=\\\"sr-photo-num\\\">\\n        <strong>1</strong>\\n         Photo    </div>\\n                </a>\\n                </div><!-- class=\\\"image\\\" -->\\n\\n        <div class=\\\"text-block\\\">\\n\\n            <div class=\\\"info-box\\\">\\n                <strong class=\\\"price\\\">&euro;165,000</strong>\\n                <ul class=\\\"info\\\">\\n                        <li>\\n                     Terraced House<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Beds<span class='pipe'>|</span>                    </li>\\n                            <li>\\n                    3 Baths                    </li>\\n                        </ul>\\n                </div><!-- class=\\\"info-box\\\" -->\\n\\n            <p>\\n                <a href=\\\"https://www.daft.ie/waterford/estate-agents/waterford-city/guiryauctioneers/\\\">\\n                <img class=\\\"alignright\\\" src=\\\"https://b.dmlimg.com/MzAxY2QxOThjODY3YmFlNDA2MzI2ZTk2NWI4NjcwNTXaoR1t34W9ddYZ0AF9bU-KaHR0cDovL3MzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tL21lZGlhbWFzdGVyLXMzZXUvMjEyZDczNTYyZjBjYTM1MGUwYWVjNzdiNDUxZmQ1MGF8OTB3fHx8fHx8fHx8.jpeg\\\"\\n                    alt=\\\"Guiry Auctioneers\\\" />\\n            </a>\\n    \\n    Newly built 3 bedroom mid terrace.  Ready for immediate occupancy NO 65 Fan Glas would make an ideal start home.  Situated in the Village of Kilmeadan Fan Glas is close to the new bi-...            </p>\\n\\n\\n<ul class=\\\"links\\\">\\n    <li><a href=\\\"/waterford/houses-for-sale/kilmeadan/65-fan-glas-kilmeadan-waterford-1182391/?search_type=sale&id=1182391&add_to_mydaft=1\\\" rel=\\\"nofollow\\\">Add to saved ads</a>\\n        </li>\\n    <li class='agent-name-link truncate' ><span class='pipe'>|</span>Agent: <a href=\\\"https://www.daft.ie/waterford/estate-agents/waterford-city/guiryauctioneers/\\\">Guiry Auctioneers</a></li></ul>\\n        </div>\\n    </div>\\n        <div class=\\\"clear box\\\">\\n        </div>\\n            <ul class=\\\"paging clear\\\">\\n\\n        <li><span class=\\\"current\\\">1</span></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=10\\\">2</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=20\\\">3</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=30\\\">4</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=40\\\">5</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=50\\\">6</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=60\\\">7</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=70\\\">8</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=80\\\">9</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=90\\\">10</a></li>\\n                <li><a href=\\\"/ireland/houses-for-sale/?offset=100\\\">...</a></li>\\n                <li class=\\\"next_page\\\">\\n            <a href=\\\"/ireland/houses-for-sale/?offset=10\\\">Next</a>\\n        </li>\\n        </ul>\\n</td>\\n    <td style=\\\"position:relative;\\\">\\n        <div id=\\\"sr_sidebar_dummy\\\"></div>\\n        <div id=\\\"sr_sidebar\\\">\\n    <div id=\\\"sidebar-ad\\\"><div id='dfp-skyscraper'>\\n</div></div>    </div>\\n    </td>\\n    </tr>\\n</table>\\n                <div id=\\\"footer\\\" >\\n                    <div class=\\\"row\\\">\\n                        <span>&copy; Daft Media Limited 1997 - 2016</span>\\n                        <ul class=\\\"nav\\\">\\n                            <li>\\n                                <a href=\\\"/about/\\\">About Us</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.daft.ie/blog/\\\">Blog</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/report/\\\">Daft Report</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/content/mediakit.daft#contact\\\">Media Sales</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/content/sitemap.daft\\\">Sitemap</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/privacy/\\\">Privacy</a>/<a\\n                                    href=\\\"/legal/\\\">Legal</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/privacy/#cookies\\\">Cookie Policy</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/help/\\\">Help</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/contact/\\\">Contact</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"/mortgages/\\\">Mortgage Centre</a>\\n                            </li>\\n                                                    </ul>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <span>Sites:</span>\\n                        <ul class=\\\"sites\\\">\\n                            <li>\\n                                <a href=\\\"http://www.adverts.ie/\\\" rel=\\\"nofollow\\\">Adverts.ie</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.boards.ie/\\\" rel=\\\"nofollow\\\">Boards.ie</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.adverts.ie/shops/\\\" rel=\\\"nofollow\\\">Adverts.ie\\n                                    Shops</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.property.ie/\\\" rel=\\\"nofollow\\\">Property.ie</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.rent.ie/\\\" rel=\\\"nofollow\\\">Rent.ie</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://www.thejournal.ie/\\\" rel=\\\"nofollow\\\">TheJournal.ie</a>\\n                            </li>\\n                            <li>\\n                                <a href=\\\"http://jobs.daft.ie/\\\">Daft Jobs</a>\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"clear\\\"></div>\\n                </div><!-- id=\\\"footer\\\" -->\\n\\n                </div><!-- id=\\\"container\\\" -->\\n    </body>\\n</html>\", \"scrapes\": \"default\", \"id\": \"1\", \"name\": \"house_list\"}"
  },
  {
    "path": "slybot/slybot/tests/data/templates/firmen.wko.at.html",
    "content": "\n<!DOCTYPE html>\n<html lang=\"de-AT\" class=\"flexbox flexboxlegacy no-flexboxtweener flexwrap\">\n<head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" /><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /><title>\n\tElektrotechnik - Firmen A-Z\n</title><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0001, minimum-scale=1.0001, maximum-scale=1.0001, user-scalable=no\" /><meta name=\"language\" content=\"de\" /><meta name=\"country\" content=\"AT\" /><meta id=\"ctl00_robotMetatag\" name=\"robots\" content=\"index,follow\" /><meta name=\"revisit-after\" content=\"1 days\" /><meta name=\"msapplication-TileColor\" content=\"#ffffff\" /><meta name=\"msapplication-TileImage\" content=\"Library/images/ms-icon-144x144.png\" /><meta name=\"theme-color\" content=\"#ffffff\" />\n\t<!-- Icons for all devices -->\n\t<link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"Library/images/apple-icon-57x57.png\" /><link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"Library/images/apple-icon-60x60.png\" /><link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"Library/images/apple-icon-72x72.png\" /><link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"Library/images/apple-icon-76x76.png\" /><link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"Library/images/apple-icon-114x114.png\" /><link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"Library/images/apple-icon-120x120.png\" /><link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"Library/images/apple-icon-144x144.png\" /><link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"Library/images/apple-icon-152x152.png\" /><link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"Library/images/apple-icon-180x180.png\" /><link id=\"ctl00_canonicalMetatag\" rel=\"canonical\" href=\"https://firmen.wko.at/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=1\" /><link rel=\"search\" title=\"WKO Firmen A-Z\" type=\"application/opensearchdescription+xml\" href=\"Services/searchplugin_faz.xml\" /><link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"Library/images/favicon.ico\" /><link rel=\"stylesheet\" href=\"Library/stylesheets/toolkit.min.css\" /><link rel=\"next\" href=\"https://firmen.wko.at/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=2\" /><script id=\"ctl00_oewaControl\" type=\"text/javascript\" src=\"https://dispatcher.oewabox.at/oewa.js\"></script><meta name=\"description\" content=\"Firmenverzeichnis aller Unternehmen in Österreich für Elektrotechnik - im WKO.at Firmen A-Z Branchenbuch. Alle Firmen, vollständig und aktuell.\" /><meta name=\"keywords\" content=\"Elektrotechnik, Branchenverzeichnis, Firmen, Unternehmen, Telefonbuch\" /></head>\n<body id=\"ctl00_pageElement\" class=\"search-result\">\n<form method=\"post\" action=\"./Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=1\" id=\"aspnetForm\">\n<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"/wEPDwULLTEwMDA2MDQ3MzMPZBYCZg9kFgQCAQ9kFgICFQ8WAh4EaHJlZgV7aHR0cHM6Ly9maXJtZW4ud2tvLmF0L1dlYi9FcmdlYm5pcy5hc3B4P1N0YW5kb3J0SUQ9MCZCcmFuY2hlPTI0MTcwJkJyYW5jaGVuTmFtZT1FbGVrdHJvdGVjaG5payZDYXRlZ29yeUlEPTAmRmlsdGVyPTEmUGFnZT0xZAIDDxYCHgVjbGFzcwUNc2VhcmNoLXJlc3VsdBYCAgEPZBYQAgIPZBYCZg9kFgQCAQ8WAh8ABRZodHRwczovL2Zpcm1lbi53a28uYXQvZAIHDxYCHwAFEmh0dHBzOi8vd3d3Lndrby5hdGQCBg8WAh4LXyFJdGVtQ291bnQCARYEZg9kFgICAQ8WAh8ABRZodHRwczovL2Zpcm1lbi53a28uYXQvZAIBD2QWAgIBDxYCHwAFASMWAmYPFQEMU3VjaGVyZ2VibmlzZAIHD2QWAgIBDxYCHgdWaXNpYmxlZxYEAgEPFgIeBFRleHQFDkVsZWt0cm90ZWNobmlrZAIFDxYCHwQFOzxhIGhyZWY9IiNyZXN1bHQiIGNsYXNzPSJ0cmVmZmVyIj5tZWhyIGFscyAxMDAwIFRyZWZmZXI8L2E+ZAIIDw8WAh8DaGRkAgkPZBYCAgEPFgIfBAUSPCEtLSBzcDogMiwyMTUgLS0+ZAIKD2QWBgIBDxYCHwNnFgoCAQ8PFgIfA2hkFgICAQ8QZGQWAWZkAgIPZBYCAgEPEA8WAh4LXyFEYXRhQm91bmRnZA8WBwIBAgICAwIEAgUCBgIHFgcQBRVLw6RybnRlbiAoQnVuZGVzbGFuZCkFATZnEAUeTmllZGVyw7ZzdGVycmVpY2ggKEJ1bmRlc2xhbmQpBQEyZxAFHE9iZXLDtnN0ZXJyZWljaCAoQnVuZGVzbGFuZCkFATNnEAUVU2FsemJ1cmcgKEJ1bmRlc2xhbmQpBQE0ZxAFF1N0ZWllcm1hcmsgKEJ1bmRlc2xhbmQpBQE1ZxAFElRpcm9sIChCdW5kZXNsYW5kKQUBN2cQBRFXaWVuIChCdW5kZXNsYW5kKQUBMWcWAWZkAgMPDxYCHwNnZBYEAgEPEA8WAh4HQ2hlY2tlZGhkZGRkAgMPEA8WAh8GZ2RkZGQCBQ9kFgICAQ8WAh8EBYAFPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgdmFyIGNvb3JkcyA9IG5ldyBBcnJheSgpOyBjb29yZHMucHVzaChbNDguMjU4MDc3NTIwMjg5OCwgMTYuMzk3ODgxNzU5MzUwOF0pOyBjb29yZHMucHVzaChbNDcuMzMyMTc4MTMzMjUyOSwgMTEuMTg4NTM1MzE1ODMxMl0pOyBjb29yZHMucHVzaChbNDguMjI1NTIwNTU5Mjc3LCAxNi4zODQzMzM4MTY0MTY3XSk7IGNvb3Jkcy5wdXNoKFs0OC4xNDA3MDU0OTUwMzM3LCAxNi4zNDM2NzU0MTYwMjMxXSk7IGNvb3Jkcy5wdXNoKFs0Ni42MTc3NzUxMzYwODksIDE0LjM5OTQyODM2ODk2NjVdKTsgY29vcmRzLnB1c2goWzQ4LjU0MzI2NTY4OTYzNiwgMTMuNTc2NTk5ODIyNTU5NF0pOyBjb29yZHMucHVzaChbNDcuNTg0MjEwNzI0MDAyMiwgMTIuMTU5NjI3NzM5MTM3MV0pOyBjb29yZHMucHVzaChbNDguNDE5MDU4MDE3MDU4NSwgMTUuMjIyNzIyNzg0NzU4OF0pOyBjb29yZHMucHVzaChbNDYuODcxNzA4MTExOTQ0MSwgMTQuNDY5MDAyMDA0NDIzXSk7IGNvb3Jkcy5wdXNoKFs0Ni44MzI3ODA5NjgzNTgzLCAxMi43Njk0MjA3OTUyNTg3XSk7IGluaXRUaGVNYXBDb29yZHMoY29vcmRzLCAxLCAyKTsgIH0pOzwvc2NyaXB0PmQCBg9kFgQCAQ8QDxYCHwZnZGRkZAIDDxAPFgIfBmhkZGRkAgMPZBYCZg8WAh8CAgoWFGYPZBYOAgEPZBYEZg8WAh8DaGQCAg8WAh8DaBYCZg8VAQ8zRS1UZWNobmlrIGUuVS5kAgMPDxYGHgtOYXZpZ2F0ZVVybAWZAS9XZWIvRGV0YWlsc0tvbnRha3QuYXNweD9GaXJtYUlEPTk5NWQ5Mzg0LTEzZmEtNDJhMy1iNzE4LTU4ZjQ5NTMzZGE2OCZTdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJlBhZ2U9MSZGaWx0ZXI9MR4GVGFyZ2V0BQVfc2VsZh8EBQ8zRS1UZWNobmlrIGUuVS5kZAIFDxYCHwIC/////w9kAgYPFQYBMQAQR3JlbGxnYXNzZSA5LzMvMggxMjEwICAgIARXaWVuDkVsZWt0cm90ZWNobmlrZAIHD2QWBGYPZBYCAgEPFgIfAgIEFghmD2QWAgIBD2QWAmYPFQcLaWNvbi1tb2JpbGULaWNvbi1tb2JpbGULaWNvbi1tb2JpbGUFTW9iaWwaKzQzJTIwNjk5JTIwMTEyJTIwMTk5JTIwMTQJdGVsZXBob25lEis0MyA2OTkgMTEyIDE5OSAxNGQCAQ9kFgICAQ9kFgJmDxUHCGljb24tZmF4CGljb24tZmF4CGljb24tZmF4A0ZheBQrNDMlMjAxJTIwOTA0JTIwOTAwNQlmYXhOdW1iZXIOKzQzIDEgOTA0IDkwMDVkAgIPZBYCAgEPFgIfA2gWAmYPFQcKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsFG9mZmljZUAzZS10ZWNobmlrLmF0BWVtYWlsFG9mZmljZUAzZS10ZWNobmlrLmF0ZAIDD2QWAgIBDxYCHwNoFgJmDxUHCGljb24td2ViCGljb24td2ViCGljb24td2ViA1dlYhhodHRwOi8vd3d3LjNlLXRlY2huaWsuYXQDdXJsGGh0dHA6Ly93d3cuM2UtdGVjaG5pay5hdGQCAQ9kFgJmDxYCHwICAhYEZg9kFgJmDxUICmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbAAbbWFpbHRvOm9mZmljZUAzZS10ZWNobmlrLmF0BWVtYWlsFG9mZmljZUAzZS10ZWNobmlrLmF0ZAIBD2QWAmYPFQgIaWNvbi13ZWIIaWNvbi13ZWIIaWNvbi13ZWIDV2ViABlodHRwOi8vd3d3LjNlLXRlY2huaWsuYXQvA3VybBhodHRwOi8vd3d3LjNlLXRlY2huaWsuYXRkAgkPZBYEAgEPFgIfA2hkAgMPFgIfAgL/////D2QCCw9kFgICAw8WAh8CAv////8PZAIBD2QWDgIBD2QWAgICDxYCHwNoFgJmDxUBFkEuIEphbW5payBFbGVrdHJvIEdtYkhkAgMPDxYGHwcFmQEvV2ViL0RldGFpbHNLb250YWt0LmFzcHg/RmlybWFJRD0wMzNmZjM0OC05Y2MyLTQwNDEtYmE0Ny1kM2NhZGRhN2U1ZTYmU3RhbmRvcnRJRD0wJkJyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrJkNhdGVnb3J5SUQ9MCZQYWdlPTEmRmlsdGVyPTEfCAUFX3NlbGYfBAUWQS4gSmFtbmlrIEVsZWt0cm8gR21iSGRkAgUPFgIfAgL/////D2QCBg8VBgEyAB1NJiMyNTI7bmNobmVyIFN0cmEmIzIyMztlIDQ4Nwg2MTAwICAgIBBTZWVmZWxkIGluIFRpcm9sDkVsZWt0cm90ZWNobmlrZAIHD2QWBGYPZBYCAgEPFgIfAgIEFghmD2QWAgIBD2QWAmYPFQcKaWNvbi1waG9uZQppY29uLXBob25lCmljb24tcGhvbmUHVGVsZWZvbgwwNTIxMiUyMDM5NDkJdGVsZXBob25lCjA1MjEyIDM5NDlkAgEPZBYCAgEPZBYCZg8VBwhpY29uLWZheAhpY29uLWZheAhpY29uLWZheANGYXgMMDUyMTIlMjA0NjYwCWZheE51bWJlcgowNTIxMiA0NjYwZAICD2QWAgIBDxYCHwNoFgJmDxUHCmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbBdhLmphbW5pay5lbGVrdHJvQGFvbi5hdAVlbWFpbBdhLmphbW5pay5lbGVrdHJvQGFvbi5hdGQCAw9kFgICAQ8WAh8DaBYCZg8VBwhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWIVd3d3LmVsZWt0cm8tamFtbmlrLmF0A3VybBV3d3cuZWxla3Ryby1qYW1uaWsuYXRkAgEPZBYCZg8WAh8CAgIWBGYPZBYCZg8VCAppY29uLWVtYWlsCmljb24tZW1haWwKaWNvbi1lbWFpbAZFLU1haWwAHm1haWx0bzphLmphbW5pay5lbGVrdHJvQGFvbi5hdAVlbWFpbBdhLmphbW5pay5lbGVrdHJvQGFvbi5hdGQCAQ9kFgJmDxUICGljb24td2ViCGljb24td2ViCGljb24td2ViA1dlYgAdaHR0cDovL3d3dy5lbGVrdHJvLWphbW5pay5hdC8DdXJsFXd3dy5lbGVrdHJvLWphbW5pay5hdGQCCQ9kFgQCAQ8WAh8DaGQCAw8WAh8CAv////8PZAILD2QWAgIDDxYCHwIC/////w9kAgIPZBYOAgEPZBYEAgEPFgIfA2hkAgIPZBYCZg8VAV5BLkEuQS4gMyBBbXBlcmUgLSBBcXVhIC0gQXJ0IEVsZWt0cm8tLCBHYXMtLCBXYXNzZXItLCBIZWl6dW5nc2luc3RhbGxhdGlvbnNnZXNlbGxzY2hhZnQgbS5iLkguZAIDDw8WBh8HBZkBL1dlYi9EZXRhaWxzS29udGFrdC5hc3B4P0Zpcm1hSUQ9NzQ1ZDJkYzMtYzBlMi00YzI2LWJmMTQtYjgzYmEyM2Q0ODQ5JlN0YW5kb3J0SUQ9MCZCcmFuY2hlPTI0MTcwJkJyYW5jaGVuTmFtZT1FbGVrdHJvdGVjaG5payZDYXRlZ29yeUlEPTAmUGFnZT0xJkZpbHRlcj0xHwgFBV9zZWxmHwQFXkEuQS5BLiAzIEFtcGVyZSAtIEFxdWEgLSBBcnQgRWxla3Ryby0sIEdhcy0sIFdhc3Nlci0sIEhlaXp1bmdzaW5zdGFsbGF0aW9uc2dlc2VsbHNjaGFmdCBtLmIuSC5kZAIFDxYCHwIC/////w9kAgYPFQYBMwAMQW0gVGFib3IgMS0zCDEwMjAgICAgBFdpZW4ORWxla3Ryb3RlY2huaWtkAgcPZBYEZg9kFgICAQ8WAh8CAgEWAmYPZBYCAgEPZBYCZg8VBwppY29uLXBob25lCmljb24tcGhvbmUKaWNvbi1waG9uZQdUZWxlZm9uCjAxLzcyOTk1NDgJdGVsZXBob25lCjAxLzcyOTk1NDhkAgEPZBYCZg8WAh8CAv////8PZAIJD2QWBAIBDxYCHwNoZAIDDxYCHwIC/////w9kAgsPZBYCAgMPFgIfAgL/////D2QCAw9kFg4CAQ8WAh8DaBYCAgIPFgIfA2gWAmYPFQFeQS5BLkEuIDMgQW1wZXJlIC0gQXF1YSAtIEFydCBFbGVrdHJvLSwgR2FzLSwgV2Fzc2VyLSwgSGVpenVuZ3NpbnN0YWxsYXRpb25zZ2VzZWxsc2NoYWZ0IG0uYi5ILmQCAw8PFgYfBwWZAS9XZWIvRGV0YWlsc0tvbnRha3QuYXNweD9GaXJtYUlEPWJlZDcxODlmLTEyZTAtNDYxMy1hMzAxLWYxOGQyYzllMzUyOSZTdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJlBhZ2U9MSZGaWx0ZXI9MR8IBQVfc2VsZh8EBV5BLkEuQS4gMyBBbXBlcmUgLSBBcXVhIC0gQXJ0IEVsZWt0cm8tLCBHYXMtLCBXYXNzZXItLCBIZWl6dW5nc2luc3RhbGxhdGlvbnNnZXNlbGxzY2hhZnQgbS5iLkguZGQCBQ8WAh8CAv////8PZAIGDxUGATQAFEtvbHBpbmdzdHJhJiMyMjM7ZSA0CDEyMzAgICAgBFdpZW4ORWxla3Ryb3RlY2huaWtkAgcPZBYEZg9kFgICAQ8WAh8CAgEWAmYPZBYCAgEPZBYCZg8VBwppY29uLXBob25lCmljb24tcGhvbmUKaWNvbi1waG9uZQdUZWxlZm9uCjAxLzcyOTk1NDgJdGVsZXBob25lCjAxLzcyOTk1NDhkAgEPZBYCZg8WAh8CAv////8PZAIJD2QWBAIBDxYCHwNoZAIDDxYCHwIC/////w9kAgsPZBYCAgMPFgIfAgL/////D2QCBA9kFg4CAQ9kFgICAg8WAh8DaBYCZg8VAR1BQVZFUyBTaWNoZXJoZWl0c3RlY2huaWsgR21iSGQCAw8PFgYfBwWZAS9XZWIvRGV0YWlsc0tvbnRha3QuYXNweD9GaXJtYUlEPWJiNmJlZjRiLTMyMmItNDUwMC1hMzFkLTEzY2NhZGIxOTJlOCZTdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJlBhZ2U9MSZGaWx0ZXI9MR8IBQVfc2VsZh8EBR1BQVZFUyBTaWNoZXJoZWl0c3RlY2huaWsgR21iSGRkAgUPFgIfAgL/////D2QCBg8VBgE1ACFHZXdlcmJlem9uZSwgWmVpc3MgU3RyYSYjMjIzO2UgMTYIOTA2NSAgICAIRWJlbnRoYWwORWxla3Ryb3RlY2huaWtkAgcPZBYEZg9kFgICAQ8WAh8CAgUWCmYPZBYCAgEPZBYCZg8VBwppY29uLXBob25lCmljb24tcGhvbmUKaWNvbi1waG9uZQdUZWxlZm9uFys0MyUyMCgwKSUyMDQ2MyUyMDIzNTUwCXRlbGVwaG9uZRErNDMgKDApIDQ2MyAyMzU1MGQCAQ9kFgICAQ9kFgJmDxUHC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlBU1vYmlsHys0MyUyMCgwKSUyMDY2NCUyMDIwMyUyMDc1JTIwOTUJdGVsZXBob25lFSs0MyAoMCkgNjY0IDIwMyA3NSA5NWQCAg9kFgICAQ9kFgJmDxUHCGljb24tZmF4CGljb24tZmF4CGljb24tZmF4A0ZheBwrNDMlMjAoMCklMjA0NjMlMjAyMzU1MCUyMDgxCWZheE51bWJlchQrNDMgKDApIDQ2MyAyMzU1MCA4MWQCAw9kFgICAQ8WAh8DaBYCZg8VBwppY29uLWVtYWlsCmljb24tZW1haWwKaWNvbi1lbWFpbAZFLU1haWwPb2ZmaWNlQGFhdmVzLmF0BWVtYWlsD29mZmljZUBhYXZlcy5hdGQCBA9kFgICAQ8WAh8DaBYCZg8VBwhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWITaHR0cDovL3d3dy5hYXZlcy5hdAN1cmwTaHR0cDovL3d3dy5hYXZlcy5hdGQCAQ9kFgJmDxYCHwICAhYEZg9kFgJmDxUICmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbAAWbWFpbHRvOm9mZmljZUBhYXZlcy5hdAVlbWFpbA9vZmZpY2VAYWF2ZXMuYXRkAgEPZBYCZg8VCAhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWIAFGh0dHA6Ly93d3cuYWF2ZXMuYXQvA3VybBNodHRwOi8vd3d3LmFhdmVzLmF0ZAIJD2QWBAIBDxYCHwNoZAIDDxYCHwIC/////w9kAgsPZBYCAgMPFgIfAgL/////D2QCBQ9kFg4CAQ9kFgICAg8WAh8DaBYCZg8VAQ1BQk0gVGVjaCBHbWJIZAIDDw8WBh8HBZkBL1dlYi9EZXRhaWxzS29udGFrdC5hc3B4P0Zpcm1hSUQ9YzFhMmI5YjItZTliZS00MWZlLWE0MjctNGYxMzAxZTgxNTliJlN0YW5kb3J0SUQ9MCZCcmFuY2hlPTI0MTcwJkJyYW5jaGVuTmFtZT1FbGVrdHJvdGVjaG5payZDYXRlZ29yeUlEPTAmUGFnZT0xJkZpbHRlcj0xHwgFBV9zZWxmHwQFDUFCTSBUZWNoIEdtYkhkZAIFDxYCHwIC/////w9kAgYPFQYBNgAVSGF1cHRzdHJhJiMyMjM7ZSA1My8xCDQwOTIgICAgCkVzdGVybmJlcmcqRWxla3Ryb3RlY2huaWs7IEVycmljaHRlciB2b24gQWxhcm1hbmxhZ2VuZAIHD2QWBGYPZBYCAgEPFgIfAgICFgRmD2QWAgIBD2QWAmYPFQcKaWNvbi1waG9uZQppY29uLXBob25lCmljb24tcGhvbmUHVGVsZWZvbhYrNDMlMjAoNzIwKSUyMDU5MDAxOTEwCXRlbGVwaG9uZRIrNDMgKDcyMCkgNTkwMDE5MTBkAgEPZBYCAgEPFgIfA2gWAmYPFQcKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsEW9mZmljZUBhYm10ZWNoLmF0BWVtYWlsEW9mZmljZUBhYm10ZWNoLmF0ZAIBD2QWAmYPFgIfAgIBFgJmD2QWAmYPFQgKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsABhtYWlsdG86b2ZmaWNlQGFibXRlY2guYXQFZW1haWwRb2ZmaWNlQGFibXRlY2guYXRkAgkPZBYEAgEPFgIfA2hkAgMPFgIfAgL/////D2QCCw9kFgICAw8WAh8CAv////8PZAIGD2QWDgIBD2QWAgICDxYCHwNoFgJmDxUBIEhhcmFsZCBBY2hlcmVyIC0gRUxFS1RSTyBBQ0hFUkVSZAIDDw8WBh8HBZkBL1dlYi9EZXRhaWxzS29udGFrdC5hc3B4P0Zpcm1hSUQ9NTNjNGJlNGUtOGQzNC00NDk4LWJhOTUtYzk3MzIyYWUyMjdlJlN0YW5kb3J0SUQ9MCZCcmFuY2hlPTI0MTcwJkJyYW5jaGVuTmFtZT1FbGVrdHJvdGVjaG5payZDYXRlZ29yeUlEPTAmUGFnZT0xJkZpbHRlcj0xHwgFBV9zZWxmHwQFIEhhcmFsZCBBY2hlcmVyIC0gRUxFS1RSTyBBQ0hFUkVSZGQCBQ8WAh8CAv////8PZAIGDxUGATcAG0hlcnpvZy1FcmljaC1TdHJhJiMyMjM7ZSAxMgg2MzMwICAgIAhLdWZzdGVpbg5FbGVrdHJvdGVjaG5pa2QCBw9kFgRmD2QWAgIBDxYCHwICBBYIZg9kFgICAQ9kFgJmDxUHCmljb24tcGhvbmUKaWNvbi1waG9uZQppY29uLXBob25lB1RlbGVmb24YKzQzJTIwKDApJTIwNTM3MiUyMDYyOTQ0CXRlbGVwaG9uZRIrNDMgKDApIDUzNzIgNjI5NDRkAgEPZBYCAgEPZBYCZg8VBwhpY29uLWZheAhpY29uLWZheAhpY29uLWZheANGYXgaKzQzJTIwKDApJTIwNTM3MiUyMDYyOTQ0LTUJZmF4TnVtYmVyFCs0MyAoMCkgNTM3MiA2Mjk0NC01ZAICD2QWAgIBDxYCHwNoFgJmDxUHCmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbBRlbC5hY2hlcmVyQGt1Zm5ldC5hdAVlbWFpbBRlbC5hY2hlcmVyQGt1Zm5ldC5hdGQCAw9kFgICAQ8WAh8DaBYCZg8VBwhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWIdaHR0cDovL3d3dy5lbGVrdHJvLWFjaGVyZXIuYXQDdXJsHWh0dHA6Ly93d3cuZWxla3Ryby1hY2hlcmVyLmF0ZAIBD2QWAmYPFgIfAgICFgRmD2QWAmYPFQgKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsABttYWlsdG86ZWwuYWNoZXJlckBrdWZuZXQuYXQFZW1haWwUZWwuYWNoZXJlckBrdWZuZXQuYXRkAgEPZBYCZg8VCAhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWIAHmh0dHA6Ly93d3cuZWxla3Ryby1hY2hlcmVyLmF0LwN1cmwdaHR0cDovL3d3dy5lbGVrdHJvLWFjaGVyZXIuYXRkAgkPZBYEAgEPFgIfA2hkAgMPFgIfAgL/////D2QCCw9kFgICAw8WAh8CAv////8PZAIHD2QWDgIBD2QWAgICDxYCHwNoFgJmDxUBNkFFUyAtIEVuZXJnaWUgVGVjaG5payBHbWJIIEFsdGVybmF0aXZlIEVuZXJnaWUgU3lzdGVtZWQCAw8PFgYfBwWZAS9XZWIvRGV0YWlsc0tvbnRha3QuYXNweD9GaXJtYUlEPWI1NTY4NDlhLWJhNTQtNDI1OS1hNzU0LWM3ZGUxNTQwZjczOCZTdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJlBhZ2U9MSZGaWx0ZXI9MR8IBQVfc2VsZh8EBTZBRVMgLSBFbmVyZ2llIFRlY2huaWsgR21iSCBBbHRlcm5hdGl2ZSBFbmVyZ2llIFN5c3RlbWVkZAIFDxYCHwIC/////w9kAgYPFQYBOAAOU3BpdHplcnN0ci4gMjQIMzYzMSAgICALT3R0ZW5zY2hsYWcORWxla3Ryb3RlY2huaWtkAgcPZBYEZg9kFgICAQ8WAh8CAgUWCmYPZBYCAgEPZBYCZg8VBwppY29uLXBob25lCmljb24tcGhvbmUKaWNvbi1waG9uZQdUZWxlZm9uEDAyODcyJTIwNzU0JTIwMTUJdGVsZXBob25lDDAyODcyIDc1NCAxNWQCAQ9kFgICAQ9kFgJmDxUHC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlBU1vYmlsFTA2NjQlMjA4ODUlMjAwMTglMjA4Mwl0ZWxlcGhvbmUPMDY2NCA4ODUgMDE4IDgzZAICD2QWAgIBD2QWAmYPFQcIaWNvbi1mYXgIaWNvbi1mYXgIaWNvbi1mYXgDRmF4EDAyODcyJTIwNzU0JTIwMTQJZmF4TnVtYmVyDDAyODcyIDc1NCAxNGQCAw9kFgICAQ8WAh8DaBYCZg8VBwppY29uLWVtYWlsCmljb24tZW1haWwKaWNvbi1lbWFpbAZFLU1haWwcb2ZmaWNlQGFlcy1lbmVyZ2lldGVjaG5pay5hdAVlbWFpbBxvZmZpY2VAYWVzLWVuZXJnaWV0ZWNobmlrLmF0ZAIED2QWAgIBDxYCHwNoFgJmDxUHCGljb24td2ViCGljb24td2ViCGljb24td2ViA1dlYhl3d3cuYWVzLWVuZXJnaWV0ZWNobmlrLmF0A3VybBl3d3cuYWVzLWVuZXJnaWV0ZWNobmlrLmF0ZAIBD2QWAmYPFgIfAgICFgRmD2QWAmYPFQgKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsACNtYWlsdG86b2ZmaWNlQGFlcy1lbmVyZ2lldGVjaG5pay5hdAVlbWFpbBxvZmZpY2VAYWVzLWVuZXJnaWV0ZWNobmlrLmF0ZAIBD2QWAmYPFQgIaWNvbi13ZWIIaWNvbi13ZWIIaWNvbi13ZWIDV2ViACFodHRwOi8vd3d3LmFlcy1lbmVyZ2lldGVjaG5pay5hdC8DdXJsGXd3dy5hZXMtZW5lcmdpZXRlY2huaWsuYXRkAgkPZBYEAgEPFgIfA2hkAgMPFgIfAgL/////D2QCCw9kFgICAw8WAh8CAv////8PZAIID2QWDgIBD2QWAgICDxYCHwNoFgJmDxUBIUFFUyBhbHRlcm5hdGl2RU5FUkdJRXN5c3RlbWUgZS5VLmQCAw8PFgYfBwWZAS9XZWIvRGV0YWlsc0tvbnRha3QuYXNweD9GaXJtYUlEPTA2ZTk1NjcxLTlkOTctNDI4NS04ZDNiLWVjZmIzMTBkZjNmNSZTdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJlBhZ2U9MSZGaWx0ZXI9MR8IBQVfc2VsZh8EBSFBRVMgYWx0ZXJuYXRpdkVORVJHSUVzeXN0ZW1lIGUuVS5kZAIFDxYCHwIC/////w9kAgYPFQYBOQAQSGF1cHRwbGF0eiAzIC0gNAg5MzMwICAgIBFUcmVpYmFjaC1BbHRob2ZlbiFFcnJpY2h0ZXIgdm9uIFBob3Rvdm9sdGFpa2FubGFnZW5kAgcPZBYEZg9kFgICAQ8WAh8CAgUWCmYPZBYCAgEPZBYCZg8VBwppY29uLXBob25lCmljb24tcGhvbmUKaWNvbi1waG9uZQdUZWxlZm9uFCs0MyUyMDQyNjIlMjA4MSUyMDIxCXRlbGVwaG9uZQ4rNDMgNDI2MiA4MSAyMWQCAQ9kFgICAQ9kFgJmDxUHC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlC2ljb24tbW9iaWxlBU1vYmlsGSs0MyUyMDY2NCUyMDMwNyUyMDQ3JTIwMDMJdGVsZXBob25lESs0MyA2NjQgMzA3IDQ3IDAzZAICD2QWAgIBD2QWAmYPFQcIaWNvbi1mYXgIaWNvbi1mYXgIaWNvbi1mYXgDRmF4GSs0MyUyMDQyNjIlMjA4MSUyMDIxJTIwMTQJZmF4TnVtYmVyESs0MyA0MjYyIDgxIDIxIDE0ZAIDD2QWAgIBDxYCHwNoFgJmDxUHCmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbAxlbHBvMUBnbXguYXQFZW1haWwMZWxwbzFAZ214LmF0ZAIED2QWAgIBDxYCHwNoFgJmDxUHCGljb24td2ViCGljb24td2ViCGljb24td2ViA1dlYhVodHRwOi8vd3d3LmFlcy5jby5hdC8DdXJsFWh0dHA6Ly93d3cuYWVzLmNvLmF0L2QCAQ9kFgJmDxYCHwICAhYEZg9kFgJmDxUICmljb24tZW1haWwKaWNvbi1lbWFpbAppY29uLWVtYWlsBkUtTWFpbAATbWFpbHRvOmVscG8xQGdteC5hdAVlbWFpbAxlbHBvMUBnbXguYXRkAgEPZBYCZg8VCAhpY29uLXdlYghpY29uLXdlYghpY29uLXdlYgNXZWIAFWh0dHA6Ly93d3cuYWVzLmNvLmF0LwN1cmwVaHR0cDovL3d3dy5hZXMuY28uYXQvZAIJD2QWBAIBDxYCHwNoZAIDDxYCHwIC/////w9kAgsPZBYCAgMPFgIfAgL/////D2QCCQ9kFg4CAQ9kFgICAg8WAh8DaBYCZg8VAR5BR0V0ZWNoIEdtYkggLSAgc21hcnQgZWxlY3RyaWNkAgMPDxYGHwcFmQEvV2ViL0RldGFpbHNLb250YWt0LmFzcHg/RmlybWFJRD0xMThlOGYwOC0yM2MyLTRkYzQtOGQ0YS1lY2M2YmIyNWMwMWMmU3RhbmRvcnRJRD0wJkJyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrJkNhdGVnb3J5SUQ9MCZQYWdlPTEmRmlsdGVyPTEfCAUFX3NlbGYfBAUeQUdFdGVjaCBHbWJIIC0gIHNtYXJ0IGVsZWN0cmljZGQCBQ8WAh8CAv////8PZAIGDxUGAjEwABNCZWRhLVdlYmVyLUdhc3NlIDEwCDk5MDAgICAgBUxpZW56DkVsZWt0cm90ZWNobmlrZAIHD2QWBGYPZBYCAgEPFgIfAgIEFghmD2QWAgIBD2QWAmYPFQcKaWNvbi1waG9uZQppY29uLXBob25lCmljb24tcGhvbmUHVGVsZWZvbhcrNDMlMjAoMCk0ODUyJTIwNjg4MjgtMAl0ZWxlcGhvbmUTKzQzICgwKTQ4NTIgNjg4MjgtMGQCAQ9kFgICAQ9kFgJmDxUHCGljb24tZmF4CGljb24tZmF4CGljb24tZmF4A0ZheBkrNDMlMjAoMCk0ODUyJTIwNjg4MjgtNzg1CWZheE51bWJlchUrNDMgKDApNDg1MiA2ODgyOC03ODVkAgIPZBYCAgEPFgIfA2gWAmYPFQcKaWNvbi1lbWFpbAppY29uLWVtYWlsCmljb24tZW1haWwGRS1NYWlsD2luZm9AYWdldGVjaC5hdAVlbWFpbA9pbmZvQGFnZXRlY2guYXRkAgMPZBYCAgEPFgIfA2gWAmYPFQcIaWNvbi13ZWIIaWNvbi13ZWIIaWNvbi13ZWIDV2ViFmh0dHA6Ly93d3cuYWdldGVjaC5hdC8DdXJsFmh0dHA6Ly93d3cuYWdldGVjaC5hdC9kAgEPZBYCZg8WAh8CAgIWBGYPZBYCZg8VCAppY29uLWVtYWlsCmljb24tZW1haWwKaWNvbi1lbWFpbAZFLU1haWwAFm1haWx0bzppbmZvQGFnZXRlY2guYXQFZW1haWwPaW5mb0BhZ2V0ZWNoLmF0ZAIBD2QWAmYPFQgIaWNvbi13ZWIIaWNvbi13ZWIIaWNvbi13ZWIDV2ViABZodHRwOi8vd3d3LmFnZXRlY2guYXQvA3VybBZodHRwOi8vd3d3LmFnZXRlY2guYXQvZAIJD2QWBAIBDxYCHwNoZAIDDxYCHwIC/////w9kAgsPZBYCAgMPFgIfAgL/////D2QCBQ9kFg4CAQ8WAh8EBQQxLTEwZAIDDxYCHwQFBDEwMDBkAgUPFgIfAQUIZGlzYWJsZWRkAgcPFgIfA2gWAgIBDw8WAh8DaGRkAgkPFgIfAgIFFgpmD2QWBGYPFQEGYWN0aXZlZAIBDw8WBB8HBWYvV2ViL0VyZ2VibmlzLmFzcHg/U3RhbmRvcnRJRD0wJkJyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrJkNhdGVnb3J5SUQ9MCZGaWx0ZXI9MSZQYWdlPTEfBAUBMWRkAgEPZBYEZg8VAQBkAgEPDxYEHwcFZi9XZWIvRXJnZWJuaXMuYXNweD9TdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJkZpbHRlcj0xJlBhZ2U9Mh8EBQEyZGQCAg9kFgRmDxUBAGQCAQ8PFgQfBwVmL1dlYi9FcmdlYm5pcy5hc3B4P1N0YW5kb3J0SUQ9MCZCcmFuY2hlPTI0MTcwJkJyYW5jaGVuTmFtZT1FbGVrdHJvdGVjaG5payZDYXRlZ29yeUlEPTAmRmlsdGVyPTEmUGFnZT0zHwQFATNkZAIDD2QWBGYPFQEAZAIBDw8WBB8HBWYvV2ViL0VyZ2VibmlzLmFzcHg/U3RhbmRvcnRJRD0wJkJyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrJkNhdGVnb3J5SUQ9MCZGaWx0ZXI9MSZQYWdlPTQfBAUBNGRkAgQPZBYEZg8VAQBkAgEPDxYEHwcFZi9XZWIvRXJnZWJuaXMuYXNweD9TdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJkZpbHRlcj0xJlBhZ2U9NR8EBQE1ZGQCCw9kFgICAQ8PFgQfBAUDMTAwHwcFaC9XZWIvRXJnZWJuaXMuYXNweD9TdGFuZG9ydElEPTAmQnJhbmNoZT0yNDE3MCZCcmFuY2hlbk5hbWU9RWxla3Ryb3RlY2huaWsmQ2F0ZWdvcnlJRD0wJkZpbHRlcj0xJlBhZ2U9MTAwZGQCDQ9kFgICAQ8WAh8ABWYvV2ViL0VyZ2VibmlzLmFzcHg/U3RhbmRvcnRJRD0wJkJyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrJkNhdGVnb3J5SUQ9MCZGaWx0ZXI9MSZQYWdlPTJkAgsPFgIfA2cWAgIBDxYCHwAFQS9XZWIvU2VhcmNoQ29tcGxleC5hc3B4P0JyYW5jaGU9MjQxNzAmQnJhbmNoZW5OYW1lPUVsZWt0cm90ZWNobmlrFgICAQ8WAh8EBRF6dXLDvGNrIHp1ciBTdWNoZWQCDQ8PFgIfBwUaaHR0cHM6Ly93a28uYXQvb2ZmZW5sZWd1bmdkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WBgU1Y3RsMDAkU2VjdGlvblBsYWNlSG9sZGVyJHNlYXJjaFRvb2xib3gkb3B0aW9uQW56ZWlnZW4FNWN0bDAwJFNlY3Rpb25QbGFjZUhvbGRlciRzZWFyY2hUb29sYm94JG9wdGlvbkFuemVpZ2VuBTZjdGwwMCRTZWN0aW9uUGxhY2VIb2xkZXIkc2VhcmNoVG9vbGJveCRvcHRpb25WZXJiZXJnZW4FJ2N0bDAwJFNlY3Rpb25QbGFjZUhvbGRlciRvcHRpb25BbHBoYWJldAUnY3RsMDAkU2VjdGlvblBsYWNlSG9sZGVyJG9wdGlvblJlbGV2YW56BSdjdGwwMCRTZWN0aW9uUGxhY2VIb2xkZXIkb3B0aW9uUmVsZXZhbno6C/0/9UHKrmfYn07A8Sb9NO2ZjCR0+caUGO5mV+R4XA==\" />\n\n\n<script type=\"text/javascript\">\n//<![CDATA[\nfunction postBackOnMainPage() { __doPostBack('__Page',''); }//]]>\n</script>\n\n<script src=\"/Web/ScriptResource.axd?d=0wqQigaSsqDQXdKavWqo6V5yiqLmVC8NGvZwJzBR5zKg7vOGNu0Kz67myVAHdQZqpYI2AVcArAONTtzJblGn0Ihaay4sKtJPUWI4rD5EN_v88YS3VsVBsD_l7xPt5QDZ82ZmyDEMInSCNiGsN2Q6PwL9HgrskDbOETW3Jg6Ia781&amp;t=2bb02662\" type=\"text/javascript\"></script>\n<script src=\"Library/scripts/toolkit.min.js\" type=\"text/javascript\"></script>\n<script src=\"/Web/Library/JavaScript/geocoding/OpenLayers.js\" type=\"text/javascript\"></script>\n<input type=\"hidden\" name=\"__VIEWSTATEGENERATOR\" id=\"__VIEWSTATEGENERATOR\" value=\"151F1F35\" />\n<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"/wEdAA7rizfVqmbJspEIo68Po9Mn393ogd0puAGRlJQSwaGYGd1/iKJFKJOlCu5e0QIlGgu1zhA2Pqrm5tcBsO+zxUSjFG/pWtWvFbwSFola9RcAzyomYoUeW2ZrTOWJZFXa97M5SdKQMaS4PhTr0PSq5mnC7O+Tsd21gCWEpI9ionjsJwilqkzSkGJGE8seHULMZOu+0P+7zupIC1P8RkvaebF/ohjk7+KrrbGyUyXGz3ySuSuMBsCV9MVn1ZM6Ii350B3TlvCyPPmIOlw39apnyEP0pdcM9OToFjfSI8HwiHLsZ4FFPVuBiRQcnmWCRzZaQmevAYU7hsdIE/qgpQt5STRS\" /> \n     \n    \n<!-- Accessibility Nav -->\n<nav>\n\t<ul id=\"skip-links\">\n\t\t<li><a href=\"#main-content\">zum Inhalt</a></li>\n\t</ul>\n</nav>\n<!-- SVG Definitions -->\n<svg style=\"position: absolute; width: 0; height: 0;\" width=\"0\" height=\"0\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\t<defs>\t\t\n\t\t<symbol id=\"icon-arrow-up\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>arrow-up</title>\n\t\t\t<path d=\"M15.36 661.76c-20.32 19.36-20.32 50.72 0 69.92l73.44 69.92c20.16 19.36 52.96 19.36 73.28 0l348.64-337.44 351.52 340.16c20.32 19.36 53.12 19.36 73.28 0l73.44-69.92c20.16-19.2 20.16-50.56 0-69.92l-461.76-445.28c-20.32-19.2-53.12-19.2-73.44 0l-458.4 442.56z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-arrow-right\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>arrow-right</title>\n\t\t\t<path d=\"M362.24 15.36c-19.36-20.32-50.72-20.32-69.92 0l-69.92 73.44c-19.36 20.16-19.36 52.96 0 73.28l337.44 348.64-340.48 351.36c-19.36 20.32-19.36 53.12 0 73.28l69.92 73.44c19.2 20.16 50.56 20.16 69.92 0l445.6-461.6c19.2-20.32 19.2-53.12 0-73.44l-442.56-458.4z\"></path>\n\t\t</symbol>\n        <symbol id=\"icon-arrow-left\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>arrow-left</title>\n\t\t\t<path d=\"M661.76 1008.64c19.36 20.32 50.72 20.32 69.92 0l69.92-73.44c19.36-20.16 19.36-52.96 0-73.28l-337.12-348.48 340.16-351.52c19.36-20.32 19.36-53.12 0-73.28l-69.92-73.44c-19.2-20.16-50.56-20.16-69.92 0l-445.6 461.6c-19.2 20.32-19.2 53.12 0 73.44l442.56 458.4z\"></path>\n\t\t</symbol>\n        <symbol id=\"icon-arrow-down\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>arrow-down</title>\n\t\t\t<path d=\"M1008.64 362.24c20.32-19.36 20.32-50.72 0-69.92l-73.44-69.92c-20.16-19.36-52.96-19.36-73.28 0l-348.48 337.12-351.52-340.16c-20.32-19.36-53.12-19.36-73.28 0l-73.44 69.92c-20.16 19.2-20.16 50.56 0 69.92l461.6 445.6c20.32 19.2 53.12 19.2 73.44 0l458.4-442.56z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-close\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>close</title>\n\t\t\t<path d=\"M1017.6 124.8l-112-112-392 392-392-392-112 112 392 392-392 390.4 112 112 392-390.4 392 390.4 112-112-392-390.4z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-help\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>help</title>\n\t\t\t<path d=\"M508.95,39.29c-262.34,0-475,212.66-475,475s212.65,475,475,475,475-212.65,475-475S771.29,39.29,508.95,39.29ZM598,766.58a89.05,89.05,0,1,1-178.11,0V499.42a89.05,89.05,0,0,1,178.11,0ZM508.95,351A89.05,89.05,0,1,1,598,262,89,89,0,0,1,508.95,351Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-popup\" viewBox=\"0 0 48 48\">\n\t\t\t<title>popup</title>\n\t\t\t<rect class=\"path1\" x=\"10\" y=\"17\" width=\"29\" height=\"2\"></rect>\n\t\t\t<rect class=\"path2\" x=\"10\" y=\"23\" width=\"29\" height=\"2\"></rect>\n\t\t\t<rect class=\"path3\" x=\"10\" y=\"29\" width=\"29\" height=\"2\"></rect>\n\t\t\t<rect class=\"path4\" x=\"10\" y=\"35\" width=\"29\" height=\"2\"></rect>\n\t\t\t<path class=\"path5\" d=\"M48,48H0V6H48ZM2,46H46V8H2Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-phone\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>phone</title>\n\t\t\t<path class=\"path1\" d=\"M298.83,29.52S-25.58,590.37,565.51,1022C824.6,982.1,810.19,884.54,810.19,884.54S684,686.59,631.49,678.34s-114.87,128.47-189.7-38.49S336.83,307.4,439,307.2s101.72-16.5,115.47-71.48S630.63-.72,510.1,2,298.83,29.52,298.83,29.52Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-mobile\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>mobile</title>\n\t\t\t<path class=\"path1\" d=\"M786.35,18H248.54c-20.47,0-37.91,15.77-37.91,36.24V963.8c0,20.47,17.44,37.25,37.91,37.25H786.35c20.47,0,36.28-16.78,36.28-37.25V54.29C822.63,33.82,806.82,18,786.35,18ZM516.63,964.13a45,45,0,1,1,45-45A45,45,0,0,1,516.63,964.13Zm225-126h-450V99h450Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-fax\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>fax</title>\n\t\t\t<path class=\"path1\" d=\"M1004,605.23H880.6V18.47c0-9.35-7.82-16.24-17.17-16.24H158.77c-9.35,0-16.18,6.89-16.18,16.24V605.23H18.25c-9.35,0-16.65,6.83-16.65,16.18v382.76c0,9.35,7.3,18.05,16.65,18.05H1004c9.35,0,17.65-8.7,17.65-18.05V621.41C1021.6,612.06,1013.31,605.23,1004,605.23Zm-235-99H269.32c-9.1,0-16.5-6.9-16.5-16s7.4-16,16.5-16H768.93c9.1,0,16.5,6.9,16.5,16S778,506.23,768.93,506.23Zm0-140H269.32a16.5,16.5,0,1,1,0-33H768.93a16.5,16.5,0,1,1,0,33Zm0-143H269.32a16.5,16.5,0,1,1,0-33H768.93a16.5,16.5,0,1,1,0,33Zm124,618H804.12c-9.35,0-17-8.48-17-18s7.61-18,17-18H892.9c9.35,0,17,8.48,17,18S902.25,841.23,892.9,841.23Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-email\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>email</title>\n\t\t\t<path class=\"path1\" d=\"M481.46,596c6,6.93,22,21.22,33.73,21.22,14.73,0,28.69-16.88,28.82-17l.25-.31,456-460.12c-8.3-6.34-19.75-10.93-35.59-10.93H59.7s-17.25.21-32.82,9.67Z\"></path>\n\t\t\t<path class=\"path2\" d=\"M1018.72,167.62,568.89,620.1c-3,3.74-24.26,29-53.7,29-29.6,0-55.23-29.17-58.05-32.5l-.11-.13L6,163.63a65.19,65.19,0,0,0-4,22.95V831.06s.38,57.77,57.71,57.77h905s57.31-.44,57.31-57.77V186.58A70.3,70.3,0,0,0,1018.72,167.62ZM343.47,608.46l-215.4,192a15.93,15.93,0,0,1-23.34-21.69l215.4-192a15.93,15.93,0,0,1,23.34,21.69Zm578,192.85a15.93,15.93,0,0,1-22.52-.83l-215.4-192a15.93,15.93,0,1,1,23.34-21.69l215.4,192A15.93,15.93,0,0,1,921.43,801.31Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-web\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>web</title>\n\t\t\t<path class=\"path1\" d=\"M499.8,13.32l7.91-4.56,7.91,4.61C616.77,70.42,693.32,193.72,726.17,344.72H993.93C924.47,144.72,734.75,2.21,512.18,2.21S99.9,144.72,30.44,344.72H289.25C322.11,193.72,398.65,70.38,499.8,13.32Z\"></path>\n\t\t\t<path class=\"path2\" d=\"M507.7,46.23c-88.08,53.78-155,163.49-185.6,298.49H693.33C662.76,209.72,595.8,100,507.7,46.23Z\"></path>\n\t\t\t<path class=\"path3\" d=\"M271.62,508.4a782.25,782.25,0,0,1,11.31-132.68H20.4A509.86,509.86,0,0,0,2.18,511.21c0,49,7,97.51,19.92,141.51H285A775.62,775.62,0,0,1,271.62,508.4Z\"></path>\n\t\t\t<path class=\"path4\" d=\"M303.83,508.4a749.33,749.33,0,0,0,13.9,144.32h380A749.31,749.31,0,0,0,711.6,508.4a756.08,756.08,0,0,0-11.71-132.68H315.54A756,756,0,0,0,303.83,508.4Z\"></path>\n\t\t\t<path class=\"path5\" d=\"M1004,375.72H732.49A782.22,782.22,0,0,1,743.81,508.4a775.62,775.62,0,0,1-13.43,144.32h271.89c13-44,19.92-92.51,19.92-141.51A509.86,509.86,0,0,0,1004,375.72Z\"></path>\n\t\t\t<path class=\"path6\" d=\"M723.53,684.72c-34.2,145-109.39,264.32-207.92,319.9l-7.91,4.62-7.91-4.7C401.27,949,326.09,829.72,291.89,684.72H32.58c71.15,197,259.28,336.49,479.6,336.49s408.45-139.49,479.6-336.49Z\"></path>\n\t\t\t<path class=\"path7\" d=\"M507.7,971.59c85.53-52.22,151.13-157.87,182.86-286.87H324.86C356.59,813.72,422.19,919.38,507.7,971.59Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-edit\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>editieren</title>\n\t\t\t<path fill=\"#fff\" class=\"path1\" d=\"M875.93,295.52a15.91,15.91,0,0,0-.12-22.33L680.67,78A15.9,15.9,0,0,0,658.26,78L577.08,158.4,796,377.33Z\"></path>\n\t\t\t<path fill=\"#fff\" class=\"path2\" d=\"M672.44,298.76,188.27,783.33a15.88,15.88,0,1,1-22.49-22.41L650,276.3l-95.5-95.51L23.24,707.12a16,16,0,0,0-4.67,10.5l-10.81,215a15.85,15.85,0,0,0,15.86,16.66,5.28,5.28,0,0,0,.81,0L242,938.18a15.94,15.94,0,0,0,10.54-4.8L773.74,400.08ZM37.86,921.4,43,806.08,158,915.5Z\"></path>\n\t\t\t<path fill=\"#fff\" class=\"path3\" d=\"M997.5,901.14H488.1a15.5,15.5,0,1,0,0,31H997.5a15.5,15.5,0,1,0,0-31Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location</title>\n\t\t\t<path class=\"path1\" d=\"M510,2C289.09,2,110,181,110,401.71a397.65,397.65,0,0,0,95.59,258.93L510,1022,814.41,660.63A397.67,397.67,0,0,0,910,401.71C910,181,730.91,2,510,2Zm0,490.52c-78.23,0-141.87-63.6-141.87-141.77S431.76,209,510,209s141.89,63.6,141.89,141.77S588.22,492.52,510,492.52Z\"></path>\n\t\t</symbol>\t\t\n\t\t<symbol id=\"icon-search\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>search</title>\n\t\t\t<path d=\"M1005.28 914.72l-199.2-197.92c-0.16-0.16-0.32-0.16-0.32-0.32 56.32-74.88 90.24-167.68 90.24-268.48 0-247.040-200.96-448-448-448s-448 200.96-448 448 200.96 448 448 448c100.8 0 193.6-33.92 268.64-90.24 0.16 0.16 0.16 0.32 0.32 0.32l197.92 199.2c12.32 12.48 28.8 18.72 45.12 18.72s32.8-6.24 45.28-18.72c24.96-24.96 24.96-65.6 0-90.56zM448 768c-176.48 0-320-143.52-320-320s143.52-320 320-320c176.48 0 320 143.52 320 320s-143.52 320-320 320z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-th\" viewBox=\"0 0 32 32\">\n\t\t\t<title>th</title>\n\t\t\t<path class=\"path1\" d=\"M9.143 22.286v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM9.143 13.143v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM20.571 22.286v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM9.143 4v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM20.571 13.143v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM32 22.286v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM20.571 4v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM32 13.143v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214zM32 4v3.429q0 0.714-0.5 1.214t-1.214 0.5h-5.714q-0.714 0-1.214-0.5t-0.5-1.214v-3.429q0-0.714 0.5-1.214t1.214-0.5h5.714q0.714 0 1.214 0.5t0.5 1.214z\"></path>\n\t\t</symbol>\t\n        \n        <symbol id=\"icon-location-1\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-1</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<path class=\"path2\" fill=\"#fff\" d=\"M507.36,588.84V303l-60.2,52.92V318.83l60.2-52h32.59v322Z\"></path>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-2\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-2</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">2</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-3\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-3</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">3</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-4\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-4</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">4</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-5\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-5</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">5</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-6\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-6</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">6</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-7\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-7</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">7</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-8\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-8</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">8</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-9\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-9</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(390 580)\">9</text>\n\t\t</symbol>\n\t\t<symbol id=\"icon-location-10\" viewBox=\"0 0 1024 1024\">\n\t\t\t<title>location-10</title>\n\t\t\t<path class=\"path1\" d=\"M512,.92c-220.92,0-400,178.94-400,399.7a397.62,397.62,0,0,0,95.59,258.93L512,1020.92l304.4-361.37A397.68,397.68,0,0,0,912,400.62C912,179.86,732.91.92,512,.92Z\"></path>\n\t\t\t<text class=\"path2\" fill=\"#fff\" font-size=\"450px\" transform=\"translate(255 580)\">10</text>\n\t\t</symbol>\n        \n\t</defs>\n</svg>\n        \n    <div id=\"page\" class=\"top-section\">\n        <div class=\"nav-section\">\n        <header id=\"header\">\n            <div id=\"topnav\" class=\"header\">              \n                \n<div class=\"container header__content\">\n\t<div class=\"row\">\n\t\t<div class=\"col-xs-12 col-sm-6 col-md-5 header__content__flex\">\n\t\t\t<div class=\"header__logo\">\n\t\t\t\t<a href=\"https://firmen.wko.at/\" id=\"ctl00_HeaderAusgabePlaceHolder_headerAusgabe_homeLink\" title=\"Startseite\">\n\t\t\t\t\t<img src=\"Library/images/logo-wko.png\" id=\"ctl00_HeaderAusgabePlaceHolder_headerAusgabe_logoHeading\" alt=\"WKO Logo\" title=\"WKO Logo\" />\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div class=\"header__claim\">WKO Firmen A-Z</div>\n\t\t</div>\n\t\t<div class=\"col-xs-12 col-sm-6 col-md-7\">\n\t\t\t<ul class=\"global-navbar pull-right\">\n\t\t\t\t<!-- meine Daten bearbeiten -->\n\t\t\t\t<li id=\"header-userdata\">\t\t\t\t\t\n                    <a id=\"ctl00_HeaderAusgabePlaceHolder_headerAusgabe_loginLink\" title=\"Als UnternehmerIn können Sie Ihre eigenen Seiten gestalten\" href=\"javascript:__doPostBack(&#39;ctl00$HeaderAusgabePlaceHolder$headerAusgabe$loginLink&#39;,&#39;&#39;)\"><span>meine Daten bearbeiten</span>\n                        <svg class=\"icon icon-edit\">\n\t\t\t\t\t\t\t<use xlink:href=\"#icon-edit\"></use>\n\t\t\t\t\t\t</svg>\n                    </a>\n\t\t\t\t</li>\n\t\t\t\t<!-- Hilfe -->\n\t\t\t\t<li id=\"header-help\">\t\t\t\t\t\n                    <a href=\"SearchHelp.aspx\" id=\"ctl00_HeaderAusgabePlaceHolder_headerAusgabe_HilfeLink\"><span>Hilfe</span>\n                        <svg class=\"icon icon-help\">\n\t\t\t\t\t\t\t<use xlink:href=\"#icon-help\"></use>\n\t\t\t\t\t\t</svg>\n                    </a>                                        \n\t\t\t\t</li>\n\t\t\t\t<!-- mehr WKO -->\n\t\t\t\t<li id=\"header-portal-select\">\n\t\t\t\t\t<a aria-expanded=\"false\" aria-controls=\"header-portals\" href=\"#header-portals\" data-toggle=\"collapse\" class=\"collapsed\" data-parent=\"#header-collapse\">\n\t\t\t\t\t\t<span>mehr WKO</span>\n\t\t\t\t\t\t<svg class=\"icon icon-th\">\n\t\t\t\t\t\t\t<use xlink:href=\"#icon-th\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"panel-group panel-group--global\" role=\"tablist\" id=\"header-collapse\">\n\t<div class=\"panel global-panel\">\n\t\t<div class=\"collapse\" id=\"header-portals\" role=\"tab\">\n\t\t\t<div class=\"container\">\n\t\t\t\t<a aria-expanded=\"false\" aria-controls=\"header-portals\" href=\"#header-portals\" data-toggle=\"collapse\" class=\"collapsed collapse-close\" data-parent=\"#header-collapse\">\n\t\t\t\t\t<span class=\"sr-only\">Schließen</span>\n\t\t\t\t\t<svg class=\"icon icon-close\">\n\t\t\t\t\t\t<use xlink:href=\"#icon-close\"></use>\n\t\t\t\t\t</svg>\n\t\t\t\t</a>\n\t\t\t\t<div class=\"row row-eq-height\">\n\t\t\t\t\t<div class=\"col-sm-4\">\n\t\t\t\t\t\t<div class=\"global-panel__content\">\n\t\t\t\t\t\t\t<ul class=\"link-list\">\n\t\t\t\t\t\t\t\t<li><a href=\"https://www.wko.at\" id=\"ctl00_HeaderAusgabePlaceHolder_headerAusgabe_portal\" target=\"_blank\">WKO.at</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://webshop.wko.at/\" target=\"_blank\">Webshop</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://eservice.wko.at/\" target=\"_blank\">E-Services</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-sm-4\">\n\t\t\t\t\t\t<div class=\"global-panel__content\">\n\t\t\t\t\t\t\t<ul class=\"link-list\">\n\t\t\t\t\t\t\t\t<li><a href=\"https://news.wko.at/\" target=\"_blank\">news.wko.at</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://www.wko.tv/\" target=\"_blank\">WKO.tv</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"http://www.wifi.at/\" target=\"_blank\">WIFI</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-sm-4\">\n\t\t\t\t\t\t<div class=\"global-panel__content\">\n\t\t\t\t\t\t\t<ul class=\"link-list\">\n\t\t\t\t\t\t\t\t<li><strong>WKO Firmen A-Z</strong></li>\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<a href=\"https://wkis.wko.at/benutzerverwaltung/\" target=\"_blank\">WKO Benutzerverwaltung</a>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n                \n\t\t    </div>\n            \n        </header>\n        \n        </div>\n        \n\n    </div>\n        <div id=\"main\" class=\"tfn\">\n            \n                <!-- breadcrumb -->\n\t            <div class=\"container\">\n                    <ol class=\"breadcrumb\">\n                        <li><a href=\"https://firmen.wko.at/\">Home</a></li>\n                \n\t\t\t            <li><a href=\"#\">Suchergebnis</a></li>\n                \n                    </ol>\n                </div>\n                \n            <div class=\"main\" id=\"main-content\">\n\t\t            \n    \n        <header>\n\t\t\t<div class=\"container\">\n                <h1 class=\"bordered-bottom-s\">Ihre Suchabfrage <span class=\"suchbegriffe\">Elektrotechnik</span>  liefert <a href=\"#result\" class=\"treffer\">mehr als 1000 Treffer</a></h1>              \n\t\t\t</div>\n\t\t</header>\n    \n\n                <main>\n\t\t\t        <div id=\"inhalt\" class=\"container\">\n                        \n                         \n    <!-- sp: 2,215 -->\n\n                    </div>                    \n                        \n    \n    <!-- Filter -->\n    <section id=\"filters\">\n\t    <div class=\"container\">\n\t\t    <h2>Filtern nach:</h2>\n\t\t    <div class=\"filteroptions\">\n\t\t\t    <div class=\"row\">                    \n                    \n<div class=\"col-md-4\">\n\t<div class=\"form-group\">\n        <label for=\"standort\" class=\"control-label sr-only\">Standort</label>\n\t\t<select name=\"ctl00$SectionPlaceHolder$standortBox$categoriesBoxRepeater\" id=\"ctl00_SectionPlaceHolder_standortBox_categoriesBoxRepeater\" class=\"col-md-12 chosen-select\" data-placeholder=\"Standort ...\">\n\t<option selected=\"selected\" value=\"\">Standort ...</option>\n\t<option value=\"6\">K&#228;rnten (Bundesland)</option>\n\t<option value=\"2\">Nieder&#246;sterreich (Bundesland)</option>\n\t<option value=\"3\">Ober&#246;sterreich (Bundesland)</option>\n\t<option value=\"4\">Salzburg (Bundesland)</option>\n\t<option value=\"5\">Steiermark (Bundesland)</option>\n\t<option value=\"7\">Tirol (Bundesland)</option>\n\t<option value=\"1\">Wien (Bundesland)</option>\n\n</select>\n\t</div>\n</div>\n\n<div class=\"col-md-4\">\n\t<div class=\"input-group\">\n\t\t<p class=\"input-group-title\">Treffer ohne Kontaktdaten:</p>\n\t\t<div class=\"pull-left\">\n\t\t\t<div class=\"radio-inline\">\t\t\t\t\n                <input id=\"ctl00_SectionPlaceHolder_searchToolbox_optionAnzeigen\" type=\"radio\" name=\"ctl00$SectionPlaceHolder$searchToolbox$kontaktdaten\" value=\"optionAnzeigen\" onclick=\"javascript:setTimeout(&#39;__doPostBack(\\&#39;ctl00$SectionPlaceHolder$searchToolbox$optionAnzeigen\\&#39;,\\&#39;\\&#39;)&#39;, 0)\" /><label for=\"ctl00_SectionPlaceHolder_searchToolbox_optionAnzeigen\">anzeigen</label>\n\t\t\t</div>\n\t\t\t<div class=\"radio-inline\">\n\t\t\t\t<input id=\"ctl00_SectionPlaceHolder_searchToolbox_optionVerbergen\" type=\"radio\" name=\"ctl00$SectionPlaceHolder$searchToolbox$kontaktdaten\" value=\"optionVerbergen\" checked=\"checked\" /><label for=\"ctl00_SectionPlaceHolder_searchToolbox_optionVerbergen\">verbergen</label>             \n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n\n\t\t\t    </div>\n\t\t    </div>\n\t    </div>\n    </section>\n    <!-- MAP -->\n    <section id=\"map\">\n        <div class=\"container\">\n            <h2 class=\"bordered-bottom-s\">Karte</h2>\n            \n<div id=\"themap\"></div>\n<script type=\"text/javascript\">$(document).ready(function () { var coords = new Array(); coords.push([48.2580775202898, 16.3978817593508]); coords.push([47.3321781332529, 11.1885353158312]); coords.push([48.225520559277, 16.3843338164167]); coords.push([48.1407054950337, 16.3436754160231]); coords.push([46.617775136089, 14.3994283689665]); coords.push([48.543265689636, 13.5765998225594]); coords.push([47.5842107240022, 12.1596277391371]); coords.push([48.4190580170585, 15.2227227847588]); coords.push([46.8717081119441, 14.469002004423]); coords.push([46.8327809683583, 12.7694207952587]); initTheMapCoords(coords, 1, 2);  });</script>\n                                    \n            <div class=\"sort\">\n\t\t\t\t<div class=\"input-group\">\n\t\t\t\t\t<p class=\"input-group-title\">Sortieren nach:</p>\t\t\t\t\t\n\t\t\t\t\t<div class=\"pull-left\">\n\t\t\t\t\t\t<div class=\"radio-inline\">\n\t\t\t\t\t\t\t<input id=\"ctl00_SectionPlaceHolder_optionAlphabet\" type=\"radio\" name=\"ctl00$SectionPlaceHolder$sort\" value=\"optionAlphabet\" checked=\"checked\" /><label for=\"ctl00_SectionPlaceHolder_optionAlphabet\">Alphabet</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"radio-inline\">\n\t\t\t\t\t\t\t<input id=\"ctl00_SectionPlaceHolder_optionRelevanz\" type=\"radio\" name=\"ctl00$SectionPlaceHolder$sort\" value=\"optionRelevanz\" onclick=\"javascript:setTimeout(&#39;__doPostBack(\\&#39;ctl00$SectionPlaceHolder$optionRelevanz\\&#39;,\\&#39;\\&#39;)&#39;, 0)\" /><label for=\"ctl00_SectionPlaceHolder_optionRelevanz\">Relevanz</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n            \n\t\t</div>\n\t</section>     \n       \n    <!-- Suchergebnisse -->\n\t<section id=\"result\">\n\t    <div class=\"container\">\n                            \n            <article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl00_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=995d9384-13fa-42a3-b718-58f49533da68&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">3E-Technik e.U.</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-1\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Grellgasse 9/3/2</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">1210    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Wien</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-mobile vcard__info'>\n\t\t    <svg class='icon icon-mobile'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-mobile'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Mobil</span> <a href=\"tel:+43%20699%20112%20199%2014\" itemprop='telephone'>+43 699 112 199 14</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:+43%201%20904%209005\" itemprop='faxNumber'>+43 1 904 9005</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:office@3e-technik.at' itemprop='email'>office@3e-technik.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.3e-technik.at/' itemprop='url'>http://www.3e-technik.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl01_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=033ff348-9cc2-4041-ba47-d3cadda7e5e6&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">A. Jamnik Elektro GmbH</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-2\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">M&#252;nchner Stra&#223;e 487</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">6100    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Seefeld in Tirol</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:05212%203949\" itemprop='telephone'>05212 3949</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:05212%204660\" itemprop='faxNumber'>05212 4660</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:a.jamnik.elektro@aon.at' itemprop='email'>a.jamnik.elektro@aon.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.elektro-jamnik.at/' itemprop='url'>www.elektro-jamnik.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t\n                <article class=\"bulk\">\n                <h2>A.A.A. 3 Ampere - Aqua - Art Elektro-, Gas-, Wasser-, Heizungsinstallationsgesellschaft m.b.H.</h2>                                    \n            \n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl02_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=745d2dc3-c0e2-4c26-bf14-b83ba23d4849&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">A.A.A. 3 Ampere - Aqua - Art Elektro-, Gas-, Wasser-, Heizungsinstallationsgesellschaft m.b.H.</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-3\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Am Tabor 1-3</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">1020    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Wien</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:01/7299548\" itemprop='telephone'>01/7299548</a>\n\t    </div>\n                \n    \n\n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl03_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=bed7189f-12e0-4613-a301-f18d2c9e3529&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">A.A.A. 3 Ampere - Aqua - Art Elektro-, Gas-, Wasser-, Heizungsinstallationsgesellschaft m.b.H.</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-4\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Kolpingstra&#223;e 4</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">1230    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Wien</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:01/7299548\" itemprop='telephone'>01/7299548</a>\n\t    </div>\n                \n    \n\n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl04_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=bb6bef4b-322b-4500-a31d-13ccadb192e8&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">AAVES Sicherheitstechnik GmbH</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-5\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Gewerbezone, Zeiss Stra&#223;e 16</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">9065    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Ebenthal</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:+43%20(0)%20463%2023550\" itemprop='telephone'>+43 (0) 463 23550</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-mobile vcard__info'>\n\t\t    <svg class='icon icon-mobile'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-mobile'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Mobil</span> <a href=\"tel:+43%20(0)%20664%20203%2075%2095\" itemprop='telephone'>+43 (0) 664 203 75 95</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:+43%20(0)%20463%2023550%2081\" itemprop='faxNumber'>+43 (0) 463 23550 81</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:office@aaves.at' itemprop='email'>office@aaves.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.aaves.at/' itemprop='url'>http://www.aaves.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl05_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=c1a2b9b2-e9be-41fe-a427-4f1301e8159b&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">ABM Tech GmbH</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-6\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Hauptstra&#223;e 53/1</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">4092    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Esternberg</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik; Errichter von Alarmanlagen</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:+43%20(720)%2059001910\" itemprop='telephone'>+43 (720) 59001910</a>\n\t    </div>\n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:office@abmtech.at' itemprop='email'>office@abmtech.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl06_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=53c4be4e-8d34-4498-ba95-c97322ae227e&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">Harald Acherer - ELEKTRO ACHERER</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-7\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Herzog-Erich-Stra&#223;e 12</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">6330    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Kufstein</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:+43%20(0)%205372%2062944\" itemprop='telephone'>+43 (0) 5372 62944</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:+43%20(0)%205372%2062944-5\" itemprop='faxNumber'>+43 (0) 5372 62944-5</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:el.acherer@kufnet.at' itemprop='email'>el.acherer@kufnet.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.elektro-acherer.at/' itemprop='url'>http://www.elektro-acherer.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl07_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=b556849a-ba54-4259-a754-c7de1540f738&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">AES - Energie Technik GmbH Alternative Energie Systeme</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-8\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Spitzerstr. 24</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">3631    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Ottenschlag</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:02872%20754%2015\" itemprop='telephone'>02872 754 15</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-mobile vcard__info'>\n\t\t    <svg class='icon icon-mobile'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-mobile'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Mobil</span> <a href=\"tel:0664%20885%20018%2083\" itemprop='telephone'>0664 885 018 83</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:02872%20754%2014\" itemprop='faxNumber'>02872 754 14</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:office@aes-energietechnik.at' itemprop='email'>office@aes-energietechnik.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.aes-energietechnik.at/' itemprop='url'>www.aes-energietechnik.at</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl08_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=06e95671-9d97-4285-8d3b-ecfb310df3f5&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">AES alternativENERGIEsysteme e.U.</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-9\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Hauptplatz 3 - 4</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">9330    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Treibach-Althofen</span>\n\t\t\t\t\t<div class=\"authorization\">Errichter von Photovoltaikanlagen</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:+43%204262%2081%2021\" itemprop='telephone'>+43 4262 81 21</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-mobile vcard__info'>\n\t\t    <svg class='icon icon-mobile'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-mobile'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Mobil</span> <a href=\"tel:+43%20664%20307%2047%2003\" itemprop='telephone'>+43 664 307 47 03</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:+43%204262%2081%2021%2014\" itemprop='faxNumber'>+43 4262 81 21 14</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:elpo1@gmx.at' itemprop='email'>elpo1@gmx.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.aes.co.at/' itemprop='url'>http://www.aes.co.at/</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n                    \n            \n\t\t\t</article>\n\t\t\t<article>\n                                                        \n        <div class=\"row vcard row-bordered-top-s\" itemscope itemtype=\"http://schema.org/Organization\">\n            <div class=\"col-md-12 result-container\">\n\t\t\t\t<div class=\"row\">\n\t\t\t\t\t<div class=\"col-md-12\">\n\t\t\t\t\t\t<h3 itemprop=\"name\"><a id=\"ctl00_SectionPlaceHolder_resultList_resultRepeater_ctl09_detailsLinkMitte\" title=\"Details zum Standort des Unternehmens\" href=\"/Web/DetailsKontakt.aspx?FirmaID=118e8f08-23c2-4dc4-8d4a-ecc6bb25c01c&amp;StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Page=1&amp;Filter=1\" target=\"_self\">AGEtech GmbH -  smart electric</a></h3>\n                    </div>                                                \t\t\t    \n                                                        \t\t\t\n            <!-- Anfang Firmendaten -->\n            <div class=\"col-md-4 col1\">\n\t\t\t\t<div class=\"col1-left\">\n\t\t\t\t\t<div class=\"map-icon\">\n\t\t\t\t\t\t<span class=\"sr-only\">Standort</span>\n\t\t\t\t\t\t<svg class=\"icon icon-location-3\">\n\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon-location-10\"></use>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"distance\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col1-right\" itemprop=\"address\" itemscope itemtype=\"http://schema.org/PostalAddress\">\n\t\t\t\t\t<div class=\"street\" itemprop=\"streetAddress\">Beda-Weber-Gasse 10</div>\n\t\t\t\t\t<span class=\"zip\" itemprop=\"postalCode\">9900    </span>\n\t\t\t\t\t<span class=\"locality\" itemprop=\"addressLocality\">Lienz</span>\n\t\t\t\t\t<div class=\"authorization\">Elektrotechnik</div>\n\t\t\t    </div>\n            </div>\n            <div class=\"col-md-4 col2\">\n\t\t              \n<!-- Kontaktdaten -->\n        \n        \n        <div class='icon-phone vcard__info'>\n\t\t    <svg class='icon icon-phone'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-phone'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Telefon</span> <a href=\"tel:+43%20(0)4852%2068828-0\" itemprop='telephone'>+43 (0)4852 68828-0</a>\n\t    </div>\n                \n            \n        \n        <div class='icon-fax vcard__info'>\n\t\t    <svg class='icon icon-fax'>\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-fax'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Fax</span> <a href=\"tel:+43%20(0)4852%2068828-785\" itemprop='faxNumber'>+43 (0)4852 68828-785</a>\n\t    </div>\n                \n            \n                \n            \n                \n    \n                    \n        <div class='icon-email vcard__info'>\n\t\t    <svg class=\"icon icon-email\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-email'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">E-Mail</span>\n\t\t    <a title='' target=\"_blank\" href='mailto:info@agetech.at' itemprop='email'>info@agetech.at</a>\n\t    </div>\n                        \n        <div class='icon-web vcard__info'>\n\t\t    <svg class=\"icon icon-web\">\n\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href='#icon-web'></use>\n\t\t    </svg>\n\t\t    <span class=\"type\">Web</span>\n\t\t    <a title='' target=\"_blank\" href='http://www.agetech.at/' itemprop='url'>http://www.agetech.at/</a>\n\t    </div>\n    \n                    \n            </div>\n            <div class=\"col-md-4 col3\">\n\t                  \n<!-- Zertifikate -->\n\n\n\n                      \n<!-- Zertifikate -->\n\n\n\n\t\t\t</div>\n            </div>\n            </div>\n        </div>\n    \n        </article>\n    \n\n            \n<!-- Pagination -->\n<nav>\n\t<ul class=\"pagination\">\n\t\t<li class=\"disabled info\">\n\t\t\t<span class=\"col-xs-12 col-sm-4\">Ergebnisse 1-10 von 1000</span>\n\t\t</li>        \n        <li id=\"ctl00_SectionPlaceHolder_pageSelector_previousPageItem\" class=\"disabled\">\n            <a id=\"ctl00_SectionPlaceHolder_pageSelector_previousPageLink\" aria-label=\"Vorherige Seite\"> <span aria-hidden=\"true\">&laquo;</span> </a>\n\t\t</li>                \n        \n        \n            <li class='active'><a id=\"ctl00_SectionPlaceHolder_pageSelector_pageNumbers_ctl00_pageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=1\">1</a></li>                        \n        \n            <li class=''><a id=\"ctl00_SectionPlaceHolder_pageSelector_pageNumbers_ctl01_pageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=2\">2</a></li>                        \n        \n            <li class=''><a id=\"ctl00_SectionPlaceHolder_pageSelector_pageNumbers_ctl02_pageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=3\">3</a></li>                        \n        \n            <li class=''><a id=\"ctl00_SectionPlaceHolder_pageSelector_pageNumbers_ctl03_pageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=4\">4</a></li>                        \n        \n            <li class=''><a id=\"ctl00_SectionPlaceHolder_pageSelector_pageNumbers_ctl04_pageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=5\">5</a></li>                        \n                        \n        \n            <li class=\"disabled dots\"><span>&hellip;</span></li>\n            <li><a id=\"ctl00_SectionPlaceHolder_pageSelector_lastPageLink\" href=\"/Web/Ergebnis.aspx?StandortID=0&amp;Branche=24170&amp;BranchenName=Elektrotechnik&amp;CategoryID=0&amp;Filter=1&amp;Page=100\">100</a></li>\n        \t\t\n        <li id=\"ctl00_SectionPlaceHolder_pageSelector_nextPageItem\">\n            <a href=\"/Web/Ergebnis.aspx?StandortID=0&Branche=24170&BranchenName=Elektrotechnik&CategoryID=0&Filter=1&Page=2\" id=\"ctl00_SectionPlaceHolder_pageSelector_nextPageLink\" aria-label=\"Nächste Seite\"> <span aria-hidden=\"true\">&raquo;</span> </a>\n        </li>\n\t</ul>\n</nav>\n\n        </div>\n    </section>\t\n\n                    \n                    <section id=\"note\">\n\t\t                <div class=\"container\">\n\t\t\t                <!-- Backbutton -->\n\t\t\t                <div class=\"backbutton\">\n\t\t\t\t                <a href=\"/Web/SearchComplex.aspx?Branche=24170&BranchenName=Elektrotechnik\" id=\"ctl00_backToSearchResultsLink\" class=\"btn btn-primary\" role=\"button\">\n\t\t\t\t\t                <svg class=\"icon icon-arrow-left\">\n\t\t\t\t\t\t                <use xlink:href=\"#icon-arrow-left\"></use>\n\t\t\t\t\t                </svg>\n\t\t\t\t\t                zurück zur Suche</a>\t\t\t                    \n                            </div>\n\t\t                </div>\n\t                </section>\n                    \n                </main>\n            </div>    \n        <footer id=\"copyright\" class=\"footer-section\">\n\t\t    <div class=\"footer\">\n\t\t\t    <!-- footer -->\n\t\t\t    <div class=\"footer__meta\">\n\t\t\t\t    <div class=\"container\">\n\t\t\t\t\t    <div class=\"row\">\n\t\t\t\t\t\t    <div class=\"col-md-2 text-right pull-right\">\n\t\t\t\t\t\t\t    <div class=\"wko-wuerfel\"></div>\n\t\t\t\t\t\t    </div>\n\t\t\t\t\t\t    <div class=\"col-md-10\">\n\t\t\t\t\t\t\t    <ul class=\"footer__meta__navlist\">\n\t\t\t\t\t\t\t\t    <li><a href=\"Datenschutzrichtlinie.aspx\">Datenschutzrichtlinie</a></li>\n\t\t\t\t\t\t\t\t    <li><a id=\"ctl00_offenlegung\" class=\"linkOffenlegung\" href=\"https://wko.at/offenlegung\" target=\"_blank\">Offenlegung</a></li>\n\t\t\t\t\t\t\t\t    <li><a href=\"Bildnachweis.aspx\">Bildnachweis</a></li>\n                                    <li>&copy; 2017 WKO</li>\n\t\t\t\t\t\t\t    </ul>\n\t\t\t\t\t\t    </div>\n\t\t\t\t\t    </div>\n\t\t\t\t    </div>\n\t\t\t    </div>\n\t\t    </div>\n        </footer>\n    </div>\n    <div id=\"global-to-top\" class=\"link-to-top-global\">\n\t<a title=\"Nach oben\">\n\t\t<svg class=\"icon icon-arrow-up\">\n\t\t\t<use xlink:href=\"#icon-arrow-up\"></use>\n\t\t</svg>\n\t\t<span class=\"sr-only\">zum Anfang</span></a>\n    </div>\n</form>\n<script type=\"text/javascript\">\n    $(function () {\n        /* Individuelle Suchen only */\n        if ($('body').hasClass('branchenpartner')) {\n            initBranchenwidget();\n        }\n    });\n</script>\n\n\n<!-- OEWA VERSION=\"2.0\" -->\n<script type=\"text/javascript\">\n    oewa.ns = true;\n    var OEWA = {\n        \"s\": \"wko\",\n        \"cp\": \"Service/Verzeichnisse/BranchenUnternehmensverzeichnisse/wko.at\"\n    };\n    oewa.c({}, OEWA, 2);    \n</script>\n<!-- Webtrekk 4.0.5, (c) www.webtrekk.de -->\n<script type=\"text/javascript\">\n    /* WebTrekk Config */\n    var webtrekkConfig = {\n        trackId: \"287736041062065\",\n        trackDomain: \"wirtschaftskammer01.webtrekk.net\",\n        domain: \"firmen.wko.at\",\n        cookie: \"1\",\n        contentId: \"\"\n    };\n</script>\n<script type=\"text/javascript\" src='/Web/Library/JavaScript/webtrekk_v4.min.js'></script>\n<script type=\"text/javascript\">\n    //<!--\n    var webtrekk = {\n        contentId: \"\",\n        linkTrack: \"link\",\n        linkTrackDownloads: \"pdf;doc;docx;xlsx\"\n    };\n    var wt = new webtrekkV3(webtrekk);\n    wt.contentGroup = {\n        1: \"Firmen A-Z\" // Systembezeichnung\n    };\n    wt.customParameter = {\n                \n    };\n    wt.sendinfo();\n    //-->\n</script>\n<noscript><div><img height=\"1\" width=\"1\" alt=\"\" src=\"https://wirtschaftskammer01.webtrekk.net/287736041062065/wt.pl?p=405,0,0,0,0,0,0,0,0&amp;cg1=Firmen+A-Z&amp;\" /></div></noscript>\n\n</body>\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/firmen.wko.at.json",
    "content": "{\n    \"extractors\": {},\n    \"id\": \"2688-4a8e-8b29\",\n    \"name\": \"Elektrotechnik - Firmen A-Z\",\n    \"page_id\": \"\",\n    \"page_type\": \"item\",\n    \"plugins\": {\n        \"annotations-plugin\": {\n            \"extracts\": [\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": null,\n                    \"id\": \"75f8-4fdc-b4e3#parent\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"schema_id\": \"020e-42fe-8006\",\n                    \"selector\": \"#result > .container\",\n                    \"siblings\": 0,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": \"75f8-4fdc-b4e3#parent\",\n                    \"id\": \"75f8-4fdc-b4e3\",\n                    \"item_container\": true,\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"schema_id\": \"020e-42fe-8006\",\n                    \"selector\": \".col1-right\",\n                    \"siblings\": 0,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"[itemprop= \\\"name\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"e04a-4184-91a1\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"5adf-43c6-8113\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"24dd-4492-95a6\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"[itemprop= \\\"name\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"[itemprop=\\\"streetAddress\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"cd41-429d-a779\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"0247-457c-8591\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"80f0-4a7f-a632\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"[itemprop=\\\"streetAddress\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"[itemprop=\\\"addressLocality\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"4b2e-4235-9bb3\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"b9eb-4347-b68e\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"0523-45f0-b261\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"[itemprop=\\\"addressLocality\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"div [class = \\\"authorization\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"c230-47ae-abfd\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"ae31-4c8e-b4e9\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"4cd3-42fd-b9ad\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": true,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"div [class = \\\"authorization\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"article:nth-child(1) > .row > .col-md-12 > .row > .col1 > .col1-right > .zip\",\n                        \"article:nth-child(2) > .row > .col-md-12 > .row > .col1 > .col1-right > .zip\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"5a8e-420e-ac4a\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"d07b-407d-9306\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"7515-40d7-b291\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \".col1-right > .zip\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" col1-right \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" zip \\\")]\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"[itemprop=\\\"email\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"5af1-424e-bc2b\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"3a2a-459d-9468\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"b23c-4d06-8b73\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"[itemprop=\\\"email\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"[itemprop=\\\"url\\\"]\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"9504-477d-b1c7\": {\n                            \"attribute\": \"href\",\n                            \"extractors\": {},\n                            \"field\": \"27f0-400d-98a7\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"7884-4ce8-93f4\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"[itemprop=\\\"url\\\"]\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"//\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"div[class=\\\"icon-mobile vcard__info\\\"] > a\"\n                    ],\n                    \"container_id\": \"75f8-4fdc-b4e3\",\n                    \"data\": {\n                        \"88ce-4d5e-8c08\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"db09-4a64-9f64\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"be35-47ad-987d\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"selection_mode\": \"css\",\n                    \"selector\": \"div[class=\\\"icon-mobile vcard__info\\\"] > a\",\n                    \"tagid\": null,\n                    \"text-content\": \"content\",\n                    \"xpath\": \"///a\"\n                }\n            ]\n        }\n    },\n    \"results\": [{\n            \"website\": [\n                \"http://www.3e-technik.at/\"\n            ],\n            \"city\": [\n                \"Wien\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"3E-Technik e.U.\"\n            ],\n            \"_index\": 1,\n            \"mobile\": [\n                \"+43 699 112 199 14\"\n            ],\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Grellgasse 9/3/2\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"office@3e-technik.at\"\n            ]\n        }, {\n            \"website\": [\n                \"http://www.elektro-jamnik.at/\"\n            ],\n            \"city\": [\n                \"Seefeld in Tirol\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"A. Jamnik Elektro GmbH\"\n            ],\n            \"_index\": 5,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"M\\u00fcnchner Stra\\u00dfe 487\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"a.jamnik.elektro@aon.at\"\n            ]\n        }, {\n            \"city\": [\n                \"Wien\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"A.A.A. 3 Ampere - Aqua - Art Elektro-, Gas-, Wasser-, Heizungsinstallationsgesellschaft m.b.H.\"\n            ],\n            \"_index\": 9,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Am Tabor 1-3\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\"\n        }, {\n            \"city\": [\n                \"Wien\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"A.A.A. 3 Ampere - Aqua - Art Elektro-, Gas-, Wasser-, Heizungsinstallationsgesellschaft m.b.H.\"\n            ],\n            \"_index\": 13,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Kolpingstra\\u00dfe 4\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\"\n        }, {\n            \"website\": [\n                \"http://www.aaves.at/\"\n            ],\n            \"city\": [\n                \"Ebenthal\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"AAVES Sicherheitstechnik GmbH\"\n            ],\n            \"_index\": 17,\n            \"mobile\": [\n                \"+43 (0) 664 203 75 95\"\n            ],\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Gewerbezone, Zeiss Stra\\u00dfe 16\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"office@aaves.at\"\n            ]\n        }, {\n            \"city\": [\n                \"Esternberg\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"ABM Tech GmbH\"\n            ],\n            \"_index\": 21,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Hauptstra\\u00dfe 53/1\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik; Errichter von Alarmanlagen\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"office@abmtech.at\"\n            ]\n        }, {\n            \"website\": [\n                \"http://www.elektro-acherer.at/\"\n            ],\n            \"city\": [\n                \"Kufstein\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"Harald Acherer - ELEKTRO ACHERER\"\n            ],\n            \"_index\": 25,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Herzog-Erich-Stra\\u00dfe 12\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"el.acherer@kufnet.at\"\n            ]\n        }, {\n            \"website\": [\n                \"http://www.aes-energietechnik.at/\"\n            ],\n            \"city\": [\n                \"Ottenschlag\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"AES - Energie Technik GmbH Alternative Energie Systeme\"\n            ],\n            \"_index\": 29,\n            \"mobile\": [\n                \"0664 885 018 83\"\n            ],\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Spitzerstr. 24\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"office@aes-energietechnik.at\"\n            ]\n        }, {\n            \"website\": [\n                \"http://www.aes.co.at/\"\n            ],\n            \"city\": [\n                \"Treibach-Althofen\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"AES alternativENERGIEsysteme e.U.\"\n            ],\n            \"_index\": 33,\n            \"mobile\": [\n                \"+43 664 307 47 03\"\n            ],\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Hauptplatz 3 - 4\"\n            ],\n            \"branch\": [\n                \"Errichter von Photovoltaikanlagen\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"elpo1@gmx.at\"\n            ]\n        }, {\n            \"website\": [\n                \"http://www.agetech.at/\"\n            ],\n            \"city\": [\n                \"Lienz\"\n            ],\n            \"_type\": \"Elektrotechnik - Firmen A-Z\",\n            \"name\": [\n                \"AGEtech GmbH - smart electric\"\n            ],\n            \"_index\": 37,\n            \"url\": \"http://url\",\n            \"street\": [\n                \"Beda-Weber-Gasse 10\"\n            ],\n            \"branch\": [\n                \"Elektrotechnik\"\n            ],\n            \"_template\": \"2688-4a8e-8b29\",\n            \"email\": [\n                \"info@agetech.at\"\n            ]\n        }\n    ],\n    \"scrapes\": \"020e-42fe-8006\",\n    \"schemas\": {\n        \"020e-42fe-8006\": {\n            \"fields\": {\n                \"5adf-43c6-8113\": {\n                    \"id\": \"5adf-43c6-8113\",\n                    \"name\": \"name\",\n                    \"required\": true,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"0247-457c-8591\": {\n                    \"id\": \"0247-457c-8591\",\n                    \"name\": \"street\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"84c7-48fa-b3cb\": {\n                    \"id\": \"84c7-48fa-b3cb\",\n                    \"name\": \"plz\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"b9eb-4347-b68e\": {\n                    \"id\": \"b9eb-4347-b68e\",\n                    \"name\": \"city\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"ae31-4c8e-b4e9\": {\n                    \"id\": \"ae31-4c8e-b4e9\",\n                    \"name\": \"branch\",\n                    \"required\": true,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"8953-460a-b810\": {\n                    \"id\": \"8953-460a-b810\",\n                    \"name\": \"landline\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"7a4b-4723-a3a1\": {\n                    \"id\": \"7a4b-4723-a3a1\",\n                    \"name\": \"phone_2\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"db09-4a64-9f64\": {\n                    \"id\": \"db09-4a64-9f64\",\n                    \"name\": \"mobile\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"e706-4d94-be4f\": {\n                    \"id\": \"e706-4d94-be4f\",\n                    \"name\": \"fax\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"2e6e-498d-81c3\": {\n                    \"id\": \"2e6e-498d-81c3\",\n                    \"name\": \"e-mail\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"27f0-400d-98a7\": {\n                    \"id\": \"27f0-400d-98a7\",\n                    \"name\": \"website\",\n                    \"required\": false,\n                    \"type\": \"url\",\n                    \"vary\": false\n                },\n                \"d07b-407d-9306\": {\n                    \"auto_created\": true,\n                    \"id\": \"d07b-407d-9306\",\n                    \"name\": \"field1\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"3a2a-459d-9468\": {\n                    \"id\": \"3a2a-459d-9468\",\n                    \"name\": \"email\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"Elektrotechnik - Firmen A-Z\"\n        }\n    },\n    \"spider\": \"firmen.wko.at\",\n    \"url\": \"https://firmen.wko.at/Web/Ergebnis.aspx?StandortID=0&Branche=24170&BranchenName=Elektrotechnik&CategoryID=0&Filter=1&Page=3\",\n    \"version\": \"0.13.0b37\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/hn.html",
    "content": "<html op=\"news\"><head><meta name=\"referrer\" content=\"origin\"><link rel=\"stylesheet\" type=\"text/css\" href=\"news.css?bG6OSbc1RdkG4OYaoucW\">\n        <link rel=\"shortcut icon\" href=\"favicon.ico\">\n          <link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"rss\">\n        <script type=\"text/javascript\">\nfunction hide(id) {\n  var el = document.getElementById(id);\n  if (el) { el.style.visibility = 'hidden'; }\n}\nfunction vote(node) {\n  var v = node.id.split(/_/);\n  var item = v[1];\n  hide('up_'   + item);\n  hide('down_' + item);\n  var ping = new Image();\n  ping.src = node.href;\n  return false;\n  }\n    </script><title>Hacker News</title></head><body><center><table id=\"hnmain\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"85%\" bgcolor=\"#f6f6ef\">\n        <tr><td bgcolor=\"#ff6600\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"padding:2px\"><tr><td style=\"width:18px;padding-right:4px\"><a href=\"http://www.ycombinator.com\"><img src=\"y18.gif\" width=\"18\" height=\"18\" style=\"border:1px #ffffff solid;\"></a></td>\n                  <td style=\"line-height:12pt; height:10px;\"><span class=\"pagetop\"><b><a href=\"news\">Hacker News</a></b><img src=\"s.gif\" height=\"1\" width=\"10\"><a href=\"newest\">new</a> | <a href=\"newcomments\">comments</a> | <a href=\"show\">show</a> | <a href=\"ask\">ask</a> | <a href=\"jobs\">jobs</a> | <a href=\"submit\">submit</a></span></td><td style=\"text-align:right;padding-right:4px;\"><span class=\"pagetop\">\n                              <a href=\"login?goto=news\">login</a>\n                          </span></td>\n              </tr></table></td></tr>\n<tr style=\"height:10px\"></tr><tr><td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;id&quot;:&quot;root&quot;}\">\n              <tr class='athing' data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;container_id&quot;:&quot;root&quot;,&quot;id&quot;:&quot;child&quot;,&quot;repeated&quot;:true,&quot;siblings&quot;:1}\">\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">1.</span></td>      <td><center><a id=\"up_10332851\" href=\"vote?for=10332851&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.bbc.co.uk/news/uk-34444233\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;href&quot;: &quot;url&quot;, &quot;content&quot;: &quot;name&quot;},&quot;container_id&quot;:&quot;child&quot;}\">Edward Snowden interview: 'Smartphones can be taken over'</a><span class=\"sitebit comhead\"> (<a href=\"from?site=bbc.co.uk\"><span class=\"sitestr\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;},&quot;container_id&quot;:&quot;child&quot;}\">bbc.co.uk</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10332851\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;},&quot;container_id&quot;:&quot;child&quot;}\">31 points</span> by <a href=\"user?id=mhandley\">mhandley</a> <a href=\"item?id=10332851\">22 minutes ago</a>  | <a href=\"item?id=10332851\">1 comment</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">2.</span></td>      <td><center><a id=\"up_10331349\" href=\"vote?for=10331349&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.nytimes.com/2015/10/06/business/trans-pacific-partnership-trade-deal-is-reached.html?_r=0\">Trans-Pacific Partnership Trade Deal Is Reached</a><span class=\"sitebit comhead\"> (<a href=\"from?site=nytimes.com\"><span class=\"sitestr\">nytimes.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331349\">272 points</span> by <a href=\"user?id=shill\">shill</a> <a href=\"item?id=10331349\">4 hours ago</a>  | <a href=\"item?id=10331349\">231 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">3.</span></td>      <td><center><a id=\"up_10331295\" href=\"vote?for=10331295&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://nytimes.com/2015/10/06/technology/twitter-names-jack-dorsey-chief-executive.html\">Twitter Names Jack Dorsey Chief Executive</a><span class=\"sitebit comhead\"> (<a href=\"from?site=nytimes.com\"><span class=\"sitestr\">nytimes.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331295\">170 points</span> by <a href=\"user?id=jvrossb\">jvrossb</a> <a href=\"item?id=10331295\">4 hours ago</a>  | <a href=\"item?id=10331295\">104 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">4.</span></td>      <td><center><a id=\"up_10331683\" href=\"vote?for=10331683&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://jlongster.com/Using-Immutable-Data-Structures-in-JavaScript\">Immutable Data Structures and JavaScript</a><span class=\"sitebit comhead\"> (<a href=\"from?site=jlongster.com\"><span class=\"sitestr\">jlongster.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331683\">81 points</span> by <a href=\"user?id=jlongster\">jlongster</a> <a href=\"item?id=10331683\">3 hours ago</a>  | <a href=\"item?id=10331683\">30 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">5.</span></td>      <td><center><a id=\"up_10331849\" href=\"vote?for=10331849&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://tpoindex.github.io/crobots/\">CROBOTS is a programming game, for programmers or aspiring programmers (1985)</a><span class=\"sitebit comhead\"> (<a href=\"from?site=tpoindex.github.io\"><span class=\"sitestr\">tpoindex.github.io</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331849\">40 points</span> by <a href=\"user?id=tpoindex\">tpoindex</a> <a href=\"item?id=10331849\">2 hours ago</a>  | <a href=\"item?id=10331849\">7 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">6.</span></td>      <td><center><a id=\"up_10332692\" href=\"vote?for=10332692&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"https://www.cloudflarestatus.com/incidents/3zcnm4rnl0vv\">CloudFlare Route leak</a><span class=\"sitebit comhead\"> (<a href=\"from?site=cloudflarestatus.com\"><span class=\"sitestr\">cloudflarestatus.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10332692\">14 points</span> by <a href=\"user?id=anon1385\">anon1385</a> <a href=\"item?id=10332692\">39 minutes ago</a>  | <a href=\"item?id=10332692\">15 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">7.</span></td>      <td><center><a id=\"up_10330845\" href=\"vote?for=10330845&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"https://annoyedmicrosoftuser.blogspot.com/2015/10/microsoft-stop-sending-user-identifiers.html\">Microsoft, stop sending user identifiers in clear text</a><span class=\"sitebit comhead\"> (<a href=\"from?site=annoyedmicrosoftuser.blogspot.com\"><span class=\"sitestr\">annoyedmicrosoftuser.blogspot.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330845\">142 points</span> by <a href=\"user?id=ramen-hero\">ramen-hero</a> <a href=\"item?id=10330845\">6 hours ago</a>  | <a href=\"item?id=10330845\">30 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">8.</span></td>      <td><center><a id=\"up_10332162\" href=\"vote?for=10332162&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://earthobservatory.nasa.gov/IOTD/view.php?id=86725&amp;src=fb\">One of few places on Earth where an international boundary can be seen at night</a><span class=\"sitebit comhead\"> (<a href=\"from?site=nasa.gov\"><span class=\"sitestr\">nasa.gov</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10332162\">74 points</span> by <a href=\"user?id=vinnyglennon\">vinnyglennon</a> <a href=\"item?id=10332162\">1 hour ago</a>  | <a href=\"item?id=10332162\">23 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">9.</span></td>      <td><center><a id=\"up_10331317\" href=\"vote?for=10331317&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.masswerk.at/JavaPac/pacman-howto.html\">How to Write a Pac-Man Game in JavaScript (2004)</a><span class=\"sitebit comhead\"> (<a href=\"from?site=masswerk.at\"><span class=\"sitestr\">masswerk.at</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331317\">43 points</span> by <a href=\"user?id=franze\">franze</a> <a href=\"item?id=10331317\">4 hours ago</a>  | <a href=\"item?id=10331317\">8 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">10.</span></td>      <td><center><a id=\"up_10331891\" href=\"vote?for=10331891&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://sarah.thesharps.us/2015/10/05/closing-a-door/\">Closing a door</a><span class=\"sitebit comhead\"> (<a href=\"from?site=thesharps.us\"><span class=\"sitestr\">thesharps.us</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331891\">154 points</span> by <a href=\"user?id=clessg\">clessg</a> <a href=\"item?id=10331891\">2 hours ago</a>  | <a href=\"item?id=10331891\">72 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">11.</span></td>      <td><center><a id=\"up_10332632\" href=\"vote?for=10332632&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.bbc.co.uk/news/technology-34446882\">Peeple sites 'disappear' from web after backlash over app</a><span class=\"sitebit comhead\"> (<a href=\"from?site=bbc.co.uk\"><span class=\"sitestr\">bbc.co.uk</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10332632\">20 points</span> by <a href=\"user?id=Turukawa\">Turukawa</a> <a href=\"item?id=10332632\">47 minutes ago</a>  | <a href=\"item?id=10332632\">10 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">12.</span></td>      <td><center><a id=\"up_10332693\" href=\"vote?for=10332693&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://mthompson.org/keyboard.html\" rel=\"nofollow\">IBM is still making ThinkPad keyboards</a><span class=\"sitebit comhead\"> (<a href=\"from?site=mthompson.org\"><span class=\"sitestr\">mthompson.org</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10332693\">5 points</span> by <a href=\"user?id=cblop\">cblop</a> <a href=\"item?id=10332693\">39 minutes ago</a>  | <a href=\"item?id=10332693\">1 comment</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">13.</span></td>      <td><center><a id=\"up_10330576\" href=\"vote?for=10330576&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://raymontag.github.io/keepassc/\">KeepassC – Curses based keepass written in Rust</a><span class=\"sitebit comhead\"> (<a href=\"from?site=raymontag.github.io\"><span class=\"sitestr\">raymontag.github.io</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330576\">75 points</span> by <a href=\"user?id=Immortalin\">Immortalin</a> <a href=\"item?id=10330576\">7 hours ago</a>  | <a href=\"item?id=10330576\">35 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">14.</span></td>      <td><center><a id=\"up_10330331\" href=\"vote?for=10330331&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.youtransfer.io\">Show HN: YouTransfer – Self-hosted file sharing</a><span class=\"sitebit comhead\"> (<a href=\"from?site=youtransfer.io\"><span class=\"sitestr\">youtransfer.io</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330331\">106 points</span> by <a href=\"user?id=rbolte\">rbolte</a> <a href=\"item?id=10330331\">9 hours ago</a>  | <a href=\"item?id=10330331\">60 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">15.</span></td>      <td><center><a id=\"up_10330840\" href=\"vote?for=10330840&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.nobelprize.org/nobel_prizes/medicine/laureates/2015/\">The Nobel Prize in Physiology or Medicine 2015</a><span class=\"sitebit comhead\"> (<a href=\"from?site=nobelprize.org\"><span class=\"sitestr\">nobelprize.org</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330840\">51 points</span> by <a href=\"user?id=globuous\">globuous</a> <a href=\"item?id=10330840\">6 hours ago</a>  | <a href=\"item?id=10330840\">5 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">16.</span></td>      <td><center><a id=\"up_10331719\" href=\"vote?for=10331719&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://vicarie.in/posts/sieve-of-eratos.html\">Wheels for the Sieve of Eratosthenes</a><span class=\"sitebit comhead\"> (<a href=\"from?site=vicarie.in\"><span class=\"sitestr\">vicarie.in</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331719\">15 points</span> by <a href=\"user?id=narendraj9\">narendraj9</a> <a href=\"item?id=10331719\">3 hours ago</a>  | <a href=\"item?id=10331719\">2 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">17.</span></td>      <td><center><a id=\"up_10329782\" href=\"vote?for=10329782&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"https://medium.com/code-cartoons/a-cartoon-guide-to-flux-6157355ab207\">A cartoon guide to Flux</a><span class=\"sitebit comhead\"> (<a href=\"from?site=medium.com\"><span class=\"sitestr\">medium.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10329782\">162 points</span> by <a href=\"user?id=snehesht\">snehesht</a> <a href=\"item?id=10329782\">13 hours ago</a>  | <a href=\"item?id=10329782\">26 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">18.</span></td>      <td><center><a id=\"up_10330067\" href=\"vote?for=10330067&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://deeplearning.stanford.edu/tutorial/\">Unsupervised Feature Learning and Deep Learning Tutorial</a><span class=\"sitebit comhead\"> (<a href=\"from?site=stanford.edu\"><span class=\"sitestr\">stanford.edu</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330067\">154 points</span> by <a href=\"user?id=Katydid\">Katydid</a> <a href=\"item?id=10330067\">11 hours ago</a>  | <a href=\"item?id=10330067\">15 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">19.</span></td>      <td><center><a id=\"up_10330712\" href=\"vote?for=10330712&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://blog.scalingo.com/post/130326633413/heroku2scalingo-migrate-from-heroku-to-scalingo\">Heroku2scalingo: migrate from Heroku to Scalingo in a minute</a><span class=\"sitebit comhead\"> (<a href=\"from?site=scalingo.com\"><span class=\"sitestr\">scalingo.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330712\">84 points</span> by <a href=\"user?id=_Soulou\">_Soulou</a> <a href=\"item?id=10330712\">7 hours ago</a>  | <a href=\"item?id=10330712\">31 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">20.</span></td>      <td><center><a id=\"up_10330298\" href=\"vote?for=10330298&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.ctvnews.ca/sci-tech/satellite-internet-gets-a-fresh-look-cash-infusion-1.2594345\">Satellite Internet gets a fresh look, cash infusion</a><span class=\"sitebit comhead\"> (<a href=\"from?site=ctvnews.ca\"><span class=\"sitestr\">ctvnews.ca</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330298\">34 points</span> by <a href=\"user?id=evilsimon\">evilsimon</a> <a href=\"item?id=10330298\">9 hours ago</a>  | <a href=\"item?id=10330298\">28 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">21.</span></td>      <td><center><a id=\"up_10330236\" href=\"vote?for=10330236&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://motherboard.vice.com/en_uk/read/reverse-engineering-proves-journalist-security-app-unsafe\">Reverse Engineering Proves Journalist Security App Is Not Secure</a><span class=\"sitebit comhead\"> (<a href=\"from?site=vice.com\"><span class=\"sitestr\">vice.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330236\">59 points</span> by <a href=\"user?id=secfirstmd\">secfirstmd</a> <a href=\"item?id=10330236\">10 hours ago</a>  | <a href=\"item?id=10330236\">8 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">22.</span></td>      <td></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"item?id=10331873\">Roost (YC S14) is hiring a senior dev in NYC to help build the future of the web</a></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        2 hours ago              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">23.</span></td>      <td><center><a id=\"up_10330502\" href=\"vote?for=10330502&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://fermatslibrary.com/s/on-the-epr-paradox\">Annotated version of Bell's inequalities, Quantum Mechanics' ultimate test</a><span class=\"sitebit comhead\"> (<a href=\"from?site=fermatslibrary.com\"><span class=\"sitestr\">fermatslibrary.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330502\">31 points</span> by <a href=\"user?id=thegreatpele\">thegreatpele</a> <a href=\"item?id=10330502\">8 hours ago</a>  | <a href=\"item?id=10330502\">discuss</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">24.</span></td>      <td><center><a id=\"up_10329769\" href=\"vote?for=10329769&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.medievalists.net/2013/10/02/why-cats-were-hated-in-medieval-europe\">Why Cats Were Hated in Medieval Europe</a><span class=\"sitebit comhead\"> (<a href=\"from?site=medievalists.net\"><span class=\"sitestr\">medievalists.net</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10329769\">70 points</span> by <a href=\"user?id=diodorus\">diodorus</a> <a href=\"item?id=10329769\">13 hours ago</a>  | <a href=\"item?id=10329769\">52 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">25.</span></td>      <td><center><a id=\"up_10330425\" href=\"vote?for=10330425&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"https://graphics.stanford.edu/~dk/google_name_origin.html\">Origin of the name “Google”</a><span class=\"sitebit comhead\"> (<a href=\"from?site=stanford.edu\"><span class=\"sitestr\">stanford.edu</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330425\">53 points</span> by <a href=\"user?id=crivabene\">crivabene</a> <a href=\"item?id=10330425\">8 hours ago</a>  | <a href=\"item?id=10330425\">23 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">26.</span></td>      <td><center><a id=\"up_10331237\" href=\"vote?for=10331237&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.theatlantic.com/photo/2015/09/mecca-then-and-now-128-years-of-growth/408013/?single_page=true\">Mecca Then and Now – 128 Years of Growth</a><span class=\"sitebit comhead\"> (<a href=\"from?site=theatlantic.com\"><span class=\"sitestr\">theatlantic.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10331237\">110 points</span> by <a href=\"user?id=vinnyglennon\">vinnyglennon</a> <a href=\"item?id=10331237\">4 hours ago</a>  | <a href=\"item?id=10331237\">62 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">27.</span></td>      <td><center><a id=\"up_10329949\" href=\"vote?for=10329949&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"https://github.com/guillaumechereau/goxel\">Show HN: Goxel, an open-source 3D voxel editor</a><span class=\"sitebit comhead\"> (<a href=\"from?site=github.com\"><span class=\"sitestr\">github.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10329949\">46 points</span> by <a href=\"user?id=guillaumec\">guillaumec</a> <a href=\"item?id=10329949\">12 hours ago</a>  | <a href=\"item?id=10329949\">7 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">28.</span></td>      <td><center><a id=\"up_10330335\" href=\"vote?for=10330335&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.someone.io\">Show HN: Someone.io – Task management for teams made easy</a><span class=\"sitebit comhead\"> (<a href=\"from?site=someone.io\"><span class=\"sitestr\">someone.io</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330335\">136 points</span> by <a href=\"user?id=terjeto\">terjeto</a> <a href=\"item?id=10330335\">9 hours ago</a>  | <a href=\"item?id=10330335\">66 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">29.</span></td>      <td><center><a id=\"up_10329874\" href=\"vote?for=10329874&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://www.nytimes.com/2015/10/05/business/valeants-drug-price-strategy-enriches-it-but-infuriates-patients-and-lawmakers.html?hp&amp;action=click&amp;pgtype=Homepage&amp;module=first-column-region&amp;region=top-news&amp;WT.nav=top-news\">Valeant’s Drug Price Strategy Enriches It, but Infuriates Patients and Lawmakers</a><span class=\"sitebit comhead\"> (<a href=\"from?site=nytimes.com\"><span class=\"sitestr\">nytimes.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10329874\">38 points</span> by <a href=\"user?id=pbhowmic\">pbhowmic</a> <a href=\"item?id=10329874\">12 hours ago</a>  | <a href=\"item?id=10329874\">38 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n                <tr class='athing'>\n      <td align=\"right\" valign=\"top\" class=\"title\"><span class=\"rank\">30.</span></td>      <td><center><a id=\"up_10330069\" href=\"vote?for=10330069&amp;dir=up&amp;goto=news\"><div class=\"votearrow\" title=\"upvote\"></div></a></center></td><td class=\"title\"><span class=\"deadmark\"></span><a href=\"http://neurosciencenews.com/single-neuron-genetic-mutations-2813/\">A Single Neuron May Cary Up to 1000 Genetic Mutations</a><span class=\"sitebit comhead\"> (<a href=\"from?site=neurosciencenews.com\"><span class=\"sitestr\">neurosciencenews.com</span></a>)</span></td></tr><tr><td colspan=\"2\"></td><td class=\"subtext\">\n        <span class=\"score\" id=\"score_10330069\">56 points</span> by <a href=\"user?id=ghosh\">ghosh</a> <a href=\"item?id=10330069\">11 hours ago</a>  | <a href=\"item?id=10330069\">17 comments</a>              </td></tr>\n      <tr class=\"spacer\" style=\"height:5px\"></tr>\n            <tr class=\"morespace\" style=\"height:10px\"></tr><tr><td colspan=\"2\"></td><td class=\"title\"><a href=\"news?p=2\" rel=\"nofollow\">More</a></td></tr>\n  </table></td></tr>\n<tr><td><img src=\"s.gif\" height=\"10\" width=\"0\"><table width=\"100%\" cellspacing=\"0\" cellpadding=\"1\"><tr><td bgcolor=\"#ff6600\"></td></tr></table><br><center><a href=\"http://www.ycombinator.com/apply/\">\n      Applications are open for YC Winter 2016\n      </a></center><br><center><span class=\"yclinks\"><a href=\"newsguidelines.html\">Guidelines</a>\n        | <a href=\"newsfaq.html\">FAQ</a>\n        | <a href=\"mailto:hn@ycombinator.com\">Support</a>\n        | <a href=\"https://github.com/HackerNews/API\">API</a>\n        | <a href=\"security.html\">Security</a>\n        | <a href=\"lists\">Lists</a>\n        | <a href=\"bookmarklet.html\">Bookmarklet</a>\n        | <a href=\"dmca.html\">DMCA</a>\n        | <a href=\"http://www.ycombinator.com/apply/\">Apply to YC</a>\n        | <a href=\"mailto:hn@ycombinator.com\">Contact</a></span><br><br><form method=\"get\" action=\"//hn.algolia.com/\">Search:\n          <input type=\"text\" name=\"q\" value=\"\" size=\"17\"></form>\n            </center></td></tr>      </table></center></body></html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/patchofland.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>Crowdfunded Real Estate Investments</title>\n<meta name=\"description\" content=\"Pre-screened real estate investments made available through crowdfunding. Professionally managed opportunities secured by real estate.\" />\n<meta name=\"keywords\" content=\"capital for real estate projects, real estate crowdfunding, rental properties, investment real estate, crowdfunding for real estate, online real estate investing\" />\n<meta name=\"robots\" content=\"INDEX,FOLLOW\" />\n<meta name=\"viewport\" content=\"width=device-width, minimum-scale=1, maximum-scale=1\">\n<link rel=\"icon\" href=\"https://cdn.patchofland.com/media/favicon/default/official-logo-light-bg-favicon.png\" type=\"image/x-icon\" />\n<link rel=\"shortcut icon\" href=\"https://cdn.patchofland.com/media/favicon/default/official-logo-light-bg-favicon.png\" type=\"image/x-icon\" />\n<!--[if lt IE 7]>\n<script type=\"text/javascript\">\n//<![CDATA[\n    var BLANK_URL = 'https://cdn.patchofland.com/js/blank.html';\n    var BLANK_IMG = 'https://cdn.patchofland.com/js/spacer.gif';\n//]]>\n</script>\n<![endif]-->\n<script src=\"https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true&libraries=places&key=AIzaSyCNPF8zvYBYm7BIYfhucI274esuC46e7sM\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.patchofland.com/media/css_secure/bff807875e686e35db3ebcce3af9ccee.css\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.patchofland.com/media/css_secure/7eec538eb9215f4a366f40d4deaa4ff3.css\" media=\"all\" />\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.patchofland.com/media/css_secure/5e606864ad1d0d7483d308dbf6d89b21.css\" media=\"print\" />\n<script type=\"text/javascript\" src=\"https://cdn.patchofland.com/media/js/fc8bf73ec8223e1ca13091d929a29f31.js\"></script>\n<link href=\"https://patchofland.com/rss/catalog/new/store_id/1/\" title=\"New Products\" rel=\"alternate\" type=\"application/rss+xml\" />\n<link rel=\"next\" href=\"https://patchofland.com/investments/page/2.html\" />\n<link rel=\"canonical\" href=\"https://patchofland.com/investments.html\" />\n<!--[if lt IE 8]>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.patchofland.com/media/css_secure/9dc2e5dd1df82663c1aacaddc0f2e627.css\" media=\"all\" />\n<![endif]-->\n<!--[if lt IE 7]>\n<script type=\"text/javascript\" src=\"https://cdn.patchofland.com/media/js/d00d707e5b14eef0e277c13c56d6ab8c.js\"></script>\n<![endif]-->\n\n<script type=\"text/javascript\">\n//<![CDATA[\nMage.Cookies.path     = '/';\nMage.Cookies.domain   = '.patchofland.com';\n//]]>\n</script>\n\n<script type=\"text/javascript\">\n//<![CDATA[\noptionalZipCountries = [\"HK\",\"IE\",\"MO\",\"PA\"];\n//]]>\n</script>\n<link rel=\"alternate\" type=\"application/rss+xml\" title=\"The Patch - RSS Feed\" href=\"https://patchofland.com/blog/feed\" /><script type=\"text/javascript\">(function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement(\"script\");a.type=\"text/javascript\";a.async=!0;a.src=(\"https:\"===e.location.protocol?\"https:\":\"http:\")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName(\"script\")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(\".\");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;\"undefined\"!==\ntypeof d?c=b[d]=[]:d=\"mixpanel\";c.people=c.people||[];c.toString=function(b){var a=\"mixpanel\";\"mixpanel\"!==d&&(a+=\".\"+d);b||(a+=\" (stub)\");return a};c.people.toString=function(){return c.toString(1)+\".people (stub)\"};i=\"disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user\".split(\" \");for(g=0;g<i.length;g++)f(c,i[g]);\nb._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);\nmixpanel.init(\"e022d758e560d29e12a4f6e69941a002\");</script>\n\n\n<script type=\"text/javascript\">\n    mixpanel.identify('');\n</script><script type=\"text/javascript\">(window.NREUM||(NREUM={})).loader_config={xpid:\"VwMDVV9SGwcDXVdSAwY=\"};window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o?o:e)},o,o.exports)}return e[n].exports}if(\"function\"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({QJf3ax:[function(t,e){function n(t){function e(e,n,a){t&&t(e,n,a),a||(a={});for(var c=s(e),f=c.length,u=i(a,o,r),d=0;f>d;d++)c[d].apply(u,n);return u}function a(t,e){f[t]=s(t).concat(e)}function s(t){return f[t]||[]}function c(){return n(e)}var f={};return{on:a,emit:e,create:c,listeners:s,_events:f}}function r(){return{}}var o=\"nr@context\",i=t(\"gos\");e.exports=n()},{gos:\"7eSDFh\"}],ee:[function(t,e){e.exports=t(\"QJf3ax\")},{}],3:[function(t){function e(t){try{i.console&&console.log(t)}catch(e){}}var n,r=t(\"ee\"),o=t(1),i={};try{n=localStorage.getItem(\"__nr_flags\").split(\",\"),console&&\"function\"==typeof console.log&&(i.console=!0,-1!==n.indexOf(\"dev\")&&(i.dev=!0),-1!==n.indexOf(\"nr_dev\")&&(i.nrDev=!0))}catch(a){}i.nrDev&&r.on(\"internal-error\",function(t){e(t.stack)}),i.dev&&r.on(\"fn-err\",function(t,n,r){e(r.stack)}),i.dev&&(e(\"NR AGENT IN DEVELOPMENT MODE\"),e(\"flags: \"+o(i,function(t){return t}).join(\", \")))},{1:23,ee:\"QJf3ax\"}],4:[function(t){function e(t,e,n,i,s){try{c?c-=1:r(\"err\",[s||new UncaughtException(t,e,n)])}catch(f){try{r(\"ierr\",[f,(new Date).getTime(),!0])}catch(u){}}return\"function\"==typeof a?a.apply(this,o(arguments)):!1}function UncaughtException(t,e,n){this.message=t||\"Uncaught error with no additional information\",this.sourceURL=e,this.line=n}function n(t){r(\"err\",[t,(new Date).getTime()])}var r=t(\"handle\"),o=t(6),i=t(\"ee\"),a=window.onerror,s=!1,c=0;t(\"loader\").features.err=!0,t(5),window.onerror=e;try{throw new Error}catch(f){\"stack\"in f&&(t(1),t(2),\"addEventListener\"in window&&t(3),window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent)&&t(4),s=!0)}i.on(\"fn-start\",function(){s&&(c+=1)}),i.on(\"fn-err\",function(t,e,r){s&&(this.thrown=!0,n(r))}),i.on(\"fn-end\",function(){s&&!this.thrown&&c>0&&(c-=1)}),i.on(\"internal-error\",function(t){r(\"ierr\",[t,(new Date).getTime(),!0])})},{1:10,2:9,3:7,4:11,5:3,6:24,ee:\"QJf3ax\",handle:\"D5DuLP\",loader:\"G9z0Bl\"}],5:[function(t){t(\"loader\").features.ins=!0},{loader:\"G9z0Bl\"}],6:[function(t){function e(){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var n=t(\"ee\"),r=t(\"handle\"),o=t(1),i=t(2);t(\"loader\").features.stn=!0,t(3),n.on(\"fn-start\",function(t){var e=t[0];e instanceof Event&&(this.bstStart=Date.now())}),n.on(\"fn-end\",function(t,e){var n=t[0];n instanceof Event&&r(\"bst\",[n,e,this.bstStart,Date.now()])}),o.on(\"fn-start\",function(t,e,n){this.bstStart=Date.now(),this.bstType=n}),o.on(\"fn-end\",function(t,e){r(\"bstTimer\",[e,this.bstStart,Date.now(),this.bstType])}),i.on(\"fn-start\",function(){this.bstStart=Date.now()}),i.on(\"fn-end\",function(t,e){r(\"bstTimer\",[e,this.bstStart,Date.now(),\"requestAnimationFrame\"])}),n.on(\"pushState-start\",function(){this.time=Date.now(),this.startPath=location.pathname+location.hash}),n.on(\"pushState-end\",function(){r(\"bstHist\",[location.pathname+location.hash,this.startPath,this.time])}),\"addEventListener\"in window.performance&&(window.performance.addEventListener(\"webkitresourcetimingbufferfull\",function(){r(\"bstResource\",[window.performance.getEntriesByType(\"resource\")]),window.performance.webkitClearResourceTimings()},!1),window.performance.addEventListener(\"resourcetimingbufferfull\",function(){r(\"bstResource\",[window.performance.getEntriesByType(\"resource\")]),window.performance.clearResourceTimings()},!1)),document.addEventListener(\"scroll\",e,!1),document.addEventListener(\"keypress\",e,!1),document.addEventListener(\"click\",e,!1)}},{1:10,2:9,3:8,ee:\"QJf3ax\",handle:\"D5DuLP\",loader:\"G9z0Bl\"}],7:[function(t,e){function n(t){i.inPlace(t,[\"addEventListener\",\"removeEventListener\"],\"-\",r)}function r(t){return t[1]}var o=t(\"ee\").create(),i=t(1)(o),a=t(\"gos\");if(e.exports=o,n(window),\"getPrototypeOf\"in Object){for(var s=document;s&&!s.hasOwnProperty(\"addEventListener\");)s=Object.getPrototypeOf(s);s&&n(s);for(var c=XMLHttpRequest.prototype;c&&!c.hasOwnProperty(\"addEventListener\");)c=Object.getPrototypeOf(c);c&&n(c)}else XMLHttpRequest.prototype.hasOwnProperty(\"addEventListener\")&&n(XMLHttpRequest.prototype);o.on(\"addEventListener-start\",function(t){if(t[1]){var e=t[1];\"function\"==typeof e?this.wrapped=t[1]=a(e,\"nr@wrapped\",function(){return i(e,\"fn-\",null,e.name||\"anonymous\")}):\"function\"==typeof e.handleEvent&&i.inPlace(e,[\"handleEvent\"],\"fn-\")}}),o.on(\"removeEventListener-start\",function(t){var e=this.wrapped;e&&(t[1]=e)})},{1:25,ee:\"QJf3ax\",gos:\"7eSDFh\"}],8:[function(t,e){var n=t(\"ee\").create(),r=t(1)(n);e.exports=n,r.inPlace(window.history,[\"pushState\"],\"-\")},{1:25,ee:\"QJf3ax\"}],9:[function(t,e){var n=t(\"ee\").create(),r=t(1)(n);e.exports=n,r.inPlace(window,[\"requestAnimationFrame\",\"mozRequestAnimationFrame\",\"webkitRequestAnimationFrame\",\"msRequestAnimationFrame\"],\"raf-\"),n.on(\"raf-start\",function(t){t[0]=r(t[0],\"fn-\")})},{1:25,ee:\"QJf3ax\"}],10:[function(t,e){function n(t,e,n){t[0]=o(t[0],\"fn-\",null,n)}var r=t(\"ee\").create(),o=t(1)(r);e.exports=r,o.inPlace(window,[\"setTimeout\",\"setInterval\",\"setImmediate\"],\"setTimer-\"),r.on(\"setTimer-start\",n)},{1:25,ee:\"QJf3ax\"}],11:[function(t,e){function n(){f.inPlace(this,p,\"fn-\")}function r(t,e){f.inPlace(e,[\"onreadystatechange\"],\"fn-\")}function o(t,e){return e}function i(t,e){for(var n in t)e[n]=t[n];return e}var a=t(\"ee\").create(),s=t(1),c=t(2),f=c(a),u=c(s),d=window.XMLHttpRequest,p=[\"onload\",\"onerror\",\"onabort\",\"onloadstart\",\"onloadend\",\"onprogress\",\"ontimeout\"];e.exports=a,window.XMLHttpRequest=function(t){var e=new d(t);try{a.emit(\"new-xhr\",[],e),u.inPlace(e,[\"addEventListener\",\"removeEventListener\"],\"-\",o),e.addEventListener(\"readystatechange\",n,!1)}catch(r){try{a.emit(\"internal-error\",[r])}catch(i){}}return e},i(d,XMLHttpRequest),XMLHttpRequest.prototype=d.prototype,f.inPlace(XMLHttpRequest.prototype,[\"open\",\"send\"],\"-xhr-\",o),a.on(\"send-xhr-start\",r),a.on(\"open-xhr-start\",r)},{1:7,2:25,ee:\"QJf3ax\"}],12:[function(t){function e(t){var e=this.params,r=this.metrics;if(!this.ended){this.ended=!0;for(var i=0;c>i;i++)t.removeEventListener(s[i],this.listener,!1);if(!e.aborted){if(r.duration=(new Date).getTime()-this.startTime,4===t.readyState){e.status=t.status;var a=t.responseType,f=\"arraybuffer\"===a||\"blob\"===a||\"json\"===a?t.response:t.responseText,u=n(f);if(u&&(r.rxSize=u),this.sameOrigin){var d=t.getResponseHeader(\"X-NewRelic-App-Data\");d&&(e.cat=d.split(\", \").pop())}}else e.status=0;r.cbTime=this.cbTime,o(\"xhr\",[e,r,this.startTime])}}}function n(t){if(\"string\"==typeof t&&t.length)return t.length;if(\"object\"!=typeof t)return void 0;if(\"undefined\"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if(\"undefined\"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if(\"undefined\"!=typeof FormData&&t instanceof FormData)return void 0;try{return JSON.stringify(t).length}catch(e){return void 0}}function r(t,e){var n=i(e),r=t.params;r.host=n.hostname+\":\"+n.port,r.pathname=n.pathname,t.sameOrigin=n.sameOrigin}if(window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent)){t(\"loader\").features.xhr=!0;var o=t(\"handle\"),i=t(2),a=t(\"ee\"),s=[\"load\",\"error\",\"abort\",\"timeout\"],c=s.length,f=t(1);t(4),t(3),a.on(\"new-xhr\",function(){this.totalCbs=0,this.called=0,this.cbTime=0,this.end=e,this.ended=!1,this.xhrGuids={}}),a.on(\"open-xhr-start\",function(t){this.params={method:t[0]},r(this,t[1]),this.metrics={}}),a.on(\"open-xhr-end\",function(t,e){\"loader_config\"in NREUM&&\"xpid\"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader(\"X-NewRelic-ID\",NREUM.loader_config.xpid)}),a.on(\"send-xhr-start\",function(t,e){var r=this.metrics,o=t[0],i=this;if(r&&o){var f=n(o);f&&(r.txSize=f)}this.startTime=(new Date).getTime(),this.listener=function(t){try{\"abort\"===t.type&&(i.params.aborted=!0),(\"load\"!==t.type||i.called===i.totalCbs&&(i.onloadCalled||\"function\"!=typeof e.onload))&&i.end(e)}catch(n){try{a.emit(\"internal-error\",[n])}catch(r){}}};for(var u=0;c>u;u++)e.addEventListener(s[u],this.listener,!1)}),a.on(\"xhr-cb-time\",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&\"function\"==typeof n.onload||this.end(n)}),a.on(\"xhr-load-added\",function(t,e){var n=\"\"+f(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),a.on(\"xhr-load-removed\",function(t,e){var n=\"\"+f(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),a.on(\"addEventListener-end\",function(t,e){e instanceof XMLHttpRequest&&\"load\"===t[0]&&a.emit(\"xhr-load-added\",[t[1],t[2]],e)}),a.on(\"removeEventListener-end\",function(t,e){e instanceof XMLHttpRequest&&\"load\"===t[0]&&a.emit(\"xhr-load-removed\",[t[1],t[2]],e)}),a.on(\"fn-start\",function(t,e,n){e instanceof XMLHttpRequest&&(\"onload\"===n&&(this.onload=!0),(\"load\"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=(new Date).getTime()))}),a.on(\"fn-end\",function(t,e){this.xhrCbStart&&a.emit(\"xhr-cb-time\",[(new Date).getTime()-this.xhrCbStart,this.onload,e],e)})}},{1:\"XL7HBI\",2:13,3:11,4:7,ee:\"QJf3ax\",handle:\"D5DuLP\",loader:\"G9z0Bl\"}],13:[function(t,e){e.exports=function(t){var e=document.createElement(\"a\"),n=window.location,r={};e.href=t,r.port=e.port;var o=e.href.split(\"://\");return!r.port&&o[1]&&(r.port=o[1].split(\"/\")[0].split(\"@\").pop().split(\":\")[1]),r.port&&\"0\"!==r.port||(r.port=\"https\"===o[0]?\"443\":\"80\"),r.hostname=e.hostname||n.hostname,r.pathname=e.pathname,r.protocol=o[0],\"/\"!==r.pathname.charAt(0)&&(r.pathname=\"/\"+r.pathname),r.sameOrigin=!e.hostname||e.hostname===document.domain&&e.port===n.port&&e.protocol===n.protocol,r}},{}],14:[function(t,e){function n(t){return function(){r(t,[(new Date).getTime()].concat(i(arguments)))}}var r=t(\"handle\"),o=t(1),i=t(2);\"undefined\"==typeof window.newrelic&&(newrelic=window.NREUM);var a=[\"setPageViewName\",\"addPageAction\",\"setCustomAttribute\",\"finished\",\"addToTrace\",\"inlineHit\",\"noticeError\"];o(a,function(t,e){window.NREUM[e]=n(\"api-\"+e)}),e.exports=window.NREUM},{1:23,2:24,handle:\"D5DuLP\"}],gos:[function(t,e){e.exports=t(\"7eSDFh\")},{}],\"7eSDFh\":[function(t,e){function n(t,e,n){if(r.call(t,e))return t[e];var o=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return t[e]=o,o}var r=Object.prototype.hasOwnProperty;e.exports=n},{}],D5DuLP:[function(t,e){function n(t,e,n){return r.listeners(t).length?r.emit(t,e,n):void(r.q&&(r.q[t]||(r.q[t]=[]),r.q[t].push(e)))}var r=t(\"ee\").create();e.exports=n,n.ee=r,r.q={}},{ee:\"QJf3ax\"}],handle:[function(t,e){e.exports=t(\"D5DuLP\")},{}],XL7HBI:[function(t,e){function n(t){var e=typeof t;return!t||\"object\"!==e&&\"function\"!==e?-1:t===window?0:i(t,o,function(){return r++})}var r=1,o=\"nr@id\",i=t(\"gos\");e.exports=n},{gos:\"7eSDFh\"}],id:[function(t,e){e.exports=t(\"XL7HBI\")},{}],G9z0Bl:[function(t,e){function n(){var t=p.info=NREUM.info,e=f.getElementsByTagName(\"script\")[0];if(t&&t.licenseKey&&t.applicationID&&e){s(d,function(e,n){e in t||(t[e]=n)});var n=\"https\"===u.split(\":\")[0]||t.sslForHttp;p.proto=n?\"https://\":\"http://\",a(\"mark\",[\"onload\",i()]);var r=f.createElement(\"script\");r.src=p.proto+t.agent,e.parentNode.insertBefore(r,e)}}function r(){\"complete\"===f.readyState&&o()}function o(){a(\"mark\",[\"domContent\",i()])}function i(){return(new Date).getTime()}var a=t(\"handle\"),s=t(1),c=window,f=c.document;t(2);var u=(\"\"+location).split(\"?\")[0],d={beacon:\"bam.nr-data.net\",errorBeacon:\"bam.nr-data.net\",agent:\"js-agent.newrelic.com/nr-686.min.js\"},p=e.exports={offset:i(),origin:u,features:{}};f.addEventListener?(f.addEventListener(\"DOMContentLoaded\",o,!1),c.addEventListener(\"load\",n,!1)):(f.attachEvent(\"onreadystatechange\",r),c.attachEvent(\"onload\",n)),a(\"mark\",[\"firstbyte\",i()])},{1:23,2:14,handle:\"D5DuLP\"}],loader:[function(t,e){e.exports=t(\"G9z0Bl\")},{}],23:[function(t,e){function n(t,e){var n=[],o=\"\",i=0;for(o in t)r.call(t,o)&&(n[i]=e(o,t[o]),i+=1);return n}var r=Object.prototype.hasOwnProperty;e.exports=n},{}],24:[function(t,e){function n(t,e,n){e||(e=0),\"undefined\"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(0>o?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=n},{}],25:[function(t,e){function n(t){return!(t&&\"function\"==typeof t&&t.apply&&!t[i])}var r=t(\"ee\"),o=t(1),i=\"nr@wrapper\",a=Object.prototype.hasOwnProperty;e.exports=function(t){function e(t,e,r,a){function nrWrapper(){var n,i,s,f;try{i=this,n=o(arguments),s=r&&r(n,i)||{}}catch(d){u([d,\"\",[n,i,a],s])}c(e+\"start\",[n,i,a],s);try{return f=t.apply(i,n)}catch(p){throw c(e+\"err\",[n,i,p],s),p}finally{c(e+\"end\",[n,i,f],s)}}return n(t)?t:(e||(e=\"\"),nrWrapper[i]=!0,f(t,nrWrapper),nrWrapper)}function s(t,r,o,i){o||(o=\"\");var a,s,c,f=\"-\"===o.charAt(0);for(c=0;c<r.length;c++)s=r[c],a=t[s],n(a)||(t[s]=e(a,f?s+o:o,i,s))}function c(e,n,r){try{t.emit(e,n,r)}catch(o){u([o,e,n,r])}}function f(t,e){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(t);return n.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(r){u([r])}for(var o in t)a.call(t,o)&&(e[o]=t[o]);return e}function u(e){try{t.emit(\"internal-error\",e)}catch(n){}}return t||(t=r),e.inPlace=s,e.flag=i,e}},{1:24,ee:\"QJf3ax\"}]},{},[\"G9z0Bl\",4,12,6,5]);</script><!-- Facebook Conversion Code for PoL Investors -->\n<script>(function() {\n  var _fbq = window._fbq || (window._fbq = []);\n  if (!_fbq.loaded) {\n    var fbds = document.createElement('script');\n    fbds.async = true;\n    fbds.src = '//connect.facebook.net/en_US/fbds.js';\n    var s = document.getElementsByTagName('script')[0];\n    s.parentNode.insertBefore(fbds, s);\n    _fbq.loaded = true;\n  }\n})();\nwindow._fbq = window._fbq || [];\nwindow._fbq.push(['track', '6024677019607', {'value':'0.00','currency':'USD'}]);\n</script>\n<noscript><img height=\"1\" width=\"1\" alt=\"\" style=\"display:none\" src=\"https://www.facebook.com/tr?ev=6024677019607&amp;cd[value]=0.00&amp;cd[currency]=USD&amp;noscript=1\" /></noscript><script type=\"text/javascript\">//<![CDATA[\n        var Translator = new Translate([]);\n        //]]></script><meta name=\"language\" content=\"english\" />\n<script>(function() {\nvar _fbq = window._fbq || (window._fbq = []);\nif (!_fbq.loaded) {\nvar fbds = document.createElement('script');\nfbds.async = true;\nfbds.src = '//connect.facebook.net/en_US/fbds.js';\nvar s = document.getElementsByTagName('script')[0];\ns.parentNode.insertBefore(fbds, s);\n_fbq.loaded = true;\n}\n_fbq.push(['addPixelId', '406006619584732']);\n})();\nwindow._fbq = window._fbq || [];\nwindow._fbq.push(['track', 'PixelInitialized', {}]);\n</script>\n<noscript><img height=\"1\" width=\"1\" alt=\"\" style=\"display:none\" src=\"\nhttps://www.facebook.com/tr?id=406006619584732&amp;ev=PixelInitialized\"\n/></noscript>\n\n<link href='https://fonts.googleapis.com/css?family=Lato:300,400,700,900,400italic,700italic,900italic' rel='stylesheet' type='text/css'>\n<link media=\"all\" href=\"https://cdn.patchofland.com/skin/frontend/default/pol/css/styles.css\" type=\"text/css\" rel=\"stylesheet\">\n<link media=\"all\" href=\"https://cdn.patchofland.com/skin/frontend/default/pol/css/mediaqueries.css\" type=\"text/css\" rel=\"stylesheet\">\n</head>\n<body class=\" catalog-category-view categorypath-investments-html category-investments\">\n<!-- BEGIN GOOGLE ANALYTICS CODEs -->\n<script type=\"text/javascript\">\n//<![CDATA[\n    var _gaq = _gaq || [];\n    \n_gaq.push(['_setAccount', 'UA-37744503-1']);\n_gaq.push(['_trackPageview']);\n    \n    (function() {\n        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n    })();\n\n//]]>\n</script>\n<!-- END GOOGLE ANALYTICS CODE -->\n<div class=\"wrapper\">\n        <noscript>\n        <div class=\"global-site-notice noscript\">\n            <div class=\"notice-inner\">\n                <p>\n                    <strong>JavaScript seems to be disabled in your browser.</strong><br />\n                    You must have JavaScript enabled in your browser to utilize the functionality of this website.                </p>\n            </div>\n        </div>\n    </noscript>\n    <div class=\"page\">\n        <div class=\"top-header\">\n            \n<div class=\"header-topbar-container\">\n<div class=\"header-topbar\">\n\t<div class=\"container\">\n\t\t<a href=\"https://patchofland.com/\" title=\"Patch of Land | Crowdfunding Real Estate\" class=\"logo\">\n                            <img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/logo.png\" alt=\"Patch of Land | Crowdfunding Real Estate\" />\n                <img class=\"logo-mobile\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/logo-mobile.png\" alt=\"Patch of Land | Crowdfunding Real Estate\" />\n            \n\n\t\t</a>\n\t\t<script type=\"text/javascript\">\n\t\tjQuery(document).ready(function() {\n\t\t\tjQuery('a.logo').click(function(){\n\t\t\t\tmixpanel.track('Clicked on logo', {\n\t\t\t\t'url_patch': window.location.href\n\t\t\t\t});\t\n\t\t\t});\n\t\t});\t\n\t\t</script>\n        <div class=\"navbar ajaxable\">\n    <ul class=\"nav\">\n                    <li class=\"item\">\n                <a class=\"btn btn-primary\" href=\"https://patchofland.com/customer/account/login/\">\n                    <span class='hide-smallview'>Login</span>\n                    <i class=\"fa fa-user fa-2\"></i>\n                </a>\n            </li>\n            <li class=\"item\">\n                <a class=\"btn btn-signup\" href=\"https://patchofland.com/customer/account/create/\">\n                    <span class='hide-smallview'>Sign up</span>\n                    <i class=\"fa fa-sign-in fa-2\"></i>\n                </a>\n            </li>\n            </ul>\n            <script type=\"text/javascript\">\n            jQuery('.nav .btn').each(function(){\n                jQuery(this).click(function () {\n                    jQuery('body,html').animate({\n                        scrollTop: 0\n                    }, 800);\n                    return false;\n                });\n            });\n\n            jQuery(document).ready(function() {\n                jQuery('.btn-investor').click(function () {\n                    jQuery('body,html').animate({\n                        scrollTop: 0\n                    }, 200);\n\n                    jQuery('#signup-choose-type').modal('hide');\n\n                    var __overlapRootNode = $$('.al-authorization-container-overlap')[0];\n                    __overlapRootNode.style.display = '';\n                    var __overlapAuthorizationNode = $$('.al-authorization-container-overlap .al-authorization')[0];\n                    var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                    __overlapAuthorizationInstance.switchToFrame('register');\n\n                    var __shadowAreaNode = __overlapRootNode.select('.Shadow')[0];\n                    var __closeLinkNode = __overlapRootNode.select('.Close')[0];\n\n                    return false;\n                });\n                jQuery('.btn-affiliate').click(function () {\n                    jQuery('body,html').animate({\n                        scrollTop: 0\n                    }, 200);\n\n                    jQuery('#signup-choose-type').modal('hide');\n                    jQuery('#signup-broker').modal('hide');\n                    jQuery('#signup-affiliate').modal('show');\n\n                    return false;\n                });\n                jQuery('.btn-broker').click(function () {\n                    jQuery('body,html').animate({\n                        scrollTop: 0\n                    }, 200);\n\n                    jQuery('#signup-choose-type').modal('hide');\n                    jQuery('#signup-affiliate').modal('hide');\n                    jQuery('#signup-broker').modal('show');\n\n                    return false;\n                });\n\n                jQuery('.login-investor').click(function () {\n                    jQuery('body,html').animate({\n                        scrollTop: 0\n                    }, 200);\n\n                    jQuery('#signup-choose-type').modal('hide');\n\n                    var __overlapRootNode = $$('.al-authorization-container-overlap')[0];\n                    __overlapRootNode.style.display = '';\n                    var __overlapAuthorizationNode = $$('.al-authorization-container-overlap .al-authorization')[0];\n                    var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                    __overlapAuthorizationInstance.switchToFrame('login');\n                    var __shadowAreaNode = __overlapRootNode.select('.Shadow')[0];\n                    var __closeLinkNode = __overlapRootNode.select('.Close')[0];\n\n                    return false;\n                });\n            });\n        </script>\n    </div>\t\t<div class=\"mb-top-menu\"><div class=\"navbar navbar-icon\">\n\t<span class=\"btn btn-navbar\"></span>\n</div>\n<div class=\"topmenu\">\n<span class=\"arrow-drop\">&nbsp;</span>\n<ul>\n\t<li class=\"level0 level-top first parent\">\n<a href=\"https://patchofland.com/invest/\" class=\"level-top\">\n<span>Invest</span>\n</a>\n<ul class=\"level0\">\n<li class=\"level1 first\">\n<a href=\"https://patchofland.com/invest/investments/\">\n<span>View Investments</span>\n</a>\n</li><li class=\"level1\">\n<a href=\"https://patchofland.com/invest/how-it-works/\">\n<span>How it works</span>\n</a>\n</li><li class=\"level1 last\">\n<a href=\"https://patchofland.com/invest/investors/\">\n<span>Learn more</span>\n</a>\n</li>\n</ul>\n</li><li class=\"level0 level-top parent\">\n<a href=\"https://patchofland.com/developer-information/\" class=\"level-top\">\n<span>Borrow</span>\n</a>\n<ul class=\"level0\">\n<li class=\"level1 first\">\n<a href=\"https://patchofland.com/developer-information/how-it-works-borrowers/\">\n<span>How it works</span>\n</a>\n</li><li class=\"level1\">\n<a href=\"https://patchofland.com/developer-information/lending-parameters/\">\n<span>Lending parameters</span>\n</a>\n</li><li class=\"level1 last\">\n<a href=\"https://patchofland.com/developer-information/borrower-signup/\">\n<span>Signup &amp; Apply</span>\n</a>\n</li>\n</ul>\n</li><li class=\"level0 level-top last parent\">\n<a href=\"https://patchofland.com/about/\" class=\"level-top\">\n<span>About</span>\n</a>\n<ul class=\"level0\">\n<li class=\"level1 first\">\n<a href=\"https://patchofland.com/about/our-story/\">\n<span>Our Story</span>\n</a>\n</li><li class=\"level1\">\n<a href=\"https://patchofland.com/about/team/\">\n<span>Team</span>\n</a>\n</li><li class=\"level1\">\n<a href=\"https://patchofland.com/about/contact/\">\n<span>Contact Info</span>\n</a>\n</li><li class=\"level1 last\">\n<a href=\"https://patchofland.com/about/careers/\">\n<span>Careers</span>\n</a>\n</li>\n</ul>\n</li>    <!-- ul closed in app/design/frontend/default/pol/template/catalog/navigation/top.phtml -->\n<!-- navigation BOF -->\n<!--<div class=\"navbar navbar-icon\">-->\n<!--\t<span class=\"btn btn-navbar\">-->\n<!--\t\t<span class=\"icon-bar\"></span>-->\n<!--\t\t<span class=\"icon-bar\"></span>-->\n<!--\t\t<span class=\"icon-bar\"></span>-->\n<!--\t</span>-->\n<!--</div>-->\n\n\t\t\t<li class=\"level0 level-top \">\n                \t\t\t\t<a href=\"https://patchofland.com/statistics/\" class=\"level-top\">\n\t\t\t\t\t<span>Stats</span>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t\t<li class=\"level0 level-top \">\n                \t\t\t\t<a href=\"https://patchofland.com/blog/\" class=\"level-top\">\n\t\t\t\t\t<span>The Patch</span>\n\t\t\t\t</a>\n\t\t\t</li>\n</ul>\n</div>\n<!-- navigation EOF -->\n<script type=\"text/javascript\"> \njQuery(document).ready(function() {\n\tvar pull        = jQuery('.navbar.navbar-icon');  \n        menu        = jQuery('.topmenu'); \n        \n\tjQuery(pull).on('click', function(e) {  \n        e.preventDefault();  \n        menu.toggle();  \n    });  \n    \n    jQuery(window).resize(function(){  \n\t    var w = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth;\n        if(w >= 980 && menu.is(':hidden')) {  \n\t        menu.removeAttr('style');  \n\t    }  \n\t}); \n}); \n</script>\n</div>\t</div>\n</div>\n</div>\n<div id=\"signup-choose-type\" class=\"affiliate modal hide fade\" tabindex=\"-1\" role=\"modal\" data-keyboard=\"false\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                Sign Up\n                <a class=\"close\" data-dismiss=\"modal\">&times;</a>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"signup-choosebox\">\n                    <div class=\"choosebox\">\n                        <h4>Borrower</h4>\n                        <span class=\"image\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/ico-signup-borrower.png\" alt=\"\"/></span>\n                        <p>Complete your loan application in minutes.<br /> Our process is fast, easy and secure.</p>\n                        <a href=\"https://patchofland.com/developer-information/\" class=\"btn btn-success btn-block\">Sign Up As a Borrower</a>\n                    </div>\n                    <div class=\"choosebox\">\n                        <h4>Investor</h4>\n                        <span class=\"image\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/ico-signup-investor.png\" alt=\"\"/></span>\n                        <p>Build a diversified portfolio today.<br /> Secured investments. Strong returns.</p>\n                        <a href=\"#\" class=\"btn btn-info btn-block btn-investor\">Sign Up As an Investor</a>\n                    </div>\n                                        <!-- Broker -->\n                                            <div class=\"choosebox more-choosebox\">\n                            <h4>Broker</h4>\n                            <span class=\"image\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/ico-signup-broker.png\" alt=\"\"/></span>\n                            <p>Add your borrowers and submit applications for pre-approval.<br /> Easy management and dedicated Loan Officers.</p>\n                            <a href=\"#\" class=\"btn btn-block btn-broker\">Sign Up As a Broker</a>\n                        </div>\n                                    </div>\n                <a href=\"#\" class=\"login-investor\">Already a member? Login here!</a>\n            </div>\n        </div>\n    </div>\n</div>\t\t\t\n\t        </div>\n        <div class=\"main-container col1-layout\">\n            <div class=\"main container\">\n                                <div class=\"col-main\">\n                    <div class=\"col-main-inner\">\n                                                <div class=\"mb-content\">\n\n\n\n\n\n<style type=\"text/css\">\n\t.mini-cart,\n\t.sidebar .block-cart,\n\t.btn-cart,\n\t.catalog-listing .form-button,\n\t.catalog-product-view .product-essential .add-to-cart-box .form-button,\n\t.catalog-product-view .product-essential .product-shop .form-button,\n\t.catalog-product-view .product-essential .add-to-cart-box .qty-box,\n\t.catalog-product-view .product-essential .add-to-cart-box input.qty,\n\t.catalog-product-view .product-essential .add-to-cart,\n\t.catalog-product-view .product-essential .add-or,\n\t.catalog-product-view .product-essential .data-table input.qty,\n\t.catalog-product-view .product-essential .or {\n\t\tdisplay:none;\n\t}\n\n\n</style>\n<style type=\"text/css\">\n\t\t.mini-cart,\n\t\t.sidebar .block-cart,\n\t\t.btn-cart,\n\t\t.catalog-listing .form-button {\n\t\t\tdisplay:none;\n\t\t}\n\n</style><div id=\"aw_popup_wraper\" style=\"display: none;\"></div>\n<div id=\"aw_popup_window\" style=\"display: none;\">\n    <div id=\"aw_popup_header\">\n        <span id=\"aw_popup_title\"></span>\n        <a href=\"#\" class=\"fui-cross\" id=\"aw_popup_close_btn\" onclick=\"Popup.hideWindow();return false;\"></a>\n    </div>\n\n    <div id=\"aw_popup_content\">\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    document.observe('dom:loaded', function () {\n        var ajaxUrl = 'https://patchofland.com/popup/index/ajax/page/category/';\n        if(window.location.href.match('https://') && !ajaxUrl.match('https://')){\n            ajaxUrl = ajaxUrl.replace('http://','https://')\n        }\n        Popup.init(ajaxUrl+'rand/'+Math.round(Math.random()*1000000));\n    });\n</script>\n<div class=\"mb-category-products\"><div class=\"page-title category-title\">\n        <h1>Invest</h1>\n    \n    <div class=\"toolbar\">\n    \n            <div class=\"toolbar-box sort-by\">\n            <span rel=\"sub-sortby\" class=\"btn-icon\"><span class=\"btn-icon-inner\"><i class=\"icon-sort\"></i> Sort</span></span>            <div id=\"sub-sortby\" class=\"sub-toolbar\">\n                \n                                                                                                                                                                <span rel=\"sortby-created_at\" class=\"sub-toolbar-title\"><em>-</em> Created Date</span>\n                                        <div id=\"sortby-created_at\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/created_at/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/created_at/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_term\" class=\"sub-toolbar-title\"><em>-</em> Loan Term</span>\n                                        <div id=\"sortby-loan_term\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_term/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_term/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_amount\" class=\"sub-toolbar-title\"><em>-</em> Loan Amount</span>\n                                        <div id=\"sortby-loan_amount\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_amount/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_amount/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_opp\" class=\"sub-toolbar-title\"><em>-</em> Loan Opportunity Type</span>\n                                        <div id=\"sortby-loan_opp\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_opp/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_opp/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-stock_stt\" class=\"sub-toolbar-title\"><em>-</em> Investment Status</span>\n                                        <div id=\"sortby-stock_stt\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/stock_stt/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/stock_stt/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-arv\" class=\"sub-toolbar-title\"><em>-</em> ARV</span>\n                                        <div id=\"sortby-arv\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/arv/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/arv/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                            </div>\n        </div>\n    \n\t<div class=\"toolbar-box filter-layer\">\n    <span rel=\"sub-filterlayer\" class=\"btn-icon\"><span class=\"btn-icon-inner\"><i class=\"icon-filter\"></i> Filter</span></span>\n    <div id=\"sub-filterlayer\" class=\"sub-toolbar\">\n                            <dl id=\"narrow-by-list\">\n                                                                                                                <dt class='first'><em>-</em> Property Type</dt>\n                        <dd class='first'>\n<ol class=\"m-filter-css-checkboxes  m-filter-product-attribute\">\n        <li  >\n                                    <a class=\"m-checkbox-unchecked\"\n                   onclick=\"this.className=markCheckbox(this.className)\"\n                   href=\"javascript:void(0)\" title=\"Single Family Residential\">Single Family Residential</a>\n                                </li>\n        <li  >\n                                    <a class=\"m-checkbox-unchecked\"\n                   onclick=\"this.className=markCheckbox(this.className)\"\n                   href=\"javascript:void(0)\" title=\"Multi-Family Residential\">Multi-Family Residential</a>\n                                </li>\n        <li  >\n                                    <a class=\"m-checkbox-unchecked\"\n                   onclick=\"this.className=markCheckbox(this.className)\"\n                   href=\"javascript:void(0)\" title=\"Commercial\">Commercial</a>\n                                </li>\n</ol>\n\n</dd>\n                                                                                <dt><em>-</em> Funding Needed</dt>\n                        <dd>\t<div class=\"m-slider-values left-aligned\">\n        <span id=\"funding_needed-applied\" class=\"m-slider-selected-value\">\n                                    <!--<input type=\"text\" class=\"m-slider m-from\" size=\"2\" value=\"--><!--\" />-->            $<input type=\"text\" class=\"m-slider m-from\" size=\"2\" value=\"\" />\n            -            $<input type=\"text\" class=\"m-slider m-to\"size=\"2\" value=\"\" />\n            <!--<input type=\"text\" class=\"m-slider m-to\"size=\"2\" value=\"--><!--\" />-->        </span>\n\t</div>\n\n<script type=\"text/javascript\">\n//<![CDATA[\n//ManaPro.filterRangeInput('//', {\n//\trangeFrom: //,\n//\trangeTo: //,\n//\turl: '//',\n//\tclearUrl: '//',\n//\tformatThreshold: //,\n//    decimalDigits: //,\n//    decimalDigits2: //,\n//    decimalSymbol: \"//\",\n//    groupSymbol: \"//\"\n//});\n//]]>\n</script>\n</dd>\n                                                        <dt><em>-</em> Loan Opportunity Type</dt>\n    <dd>\n        <ol class=\"m-filter-css-checkboxes \">\n                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-\" href=\"javascript:void(0)\"></a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-183\" href=\"javascript:void(0)\">3 - 6 month Transactional</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-182\" href=\"javascript:void(0)\">3 month or less Transactional</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-184\" href=\"javascript:void(0)\">Over 6 month Transactional</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-179\" href=\"javascript:void(0)\">Purchase & Rehab</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-178\" href=\"javascript:void(0)\">Purchase Only</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-181\" href=\"javascript:void(0)\">Refinance & Rehab</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-180\" href=\"javascript:void(0)\">Refinance Only</a>\n                    </li>\n                                                <li class=\"m-filter-loan-opp-type\">\n                        <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"loan-opp-type-177\" href=\"javascript:void(0)\">Rehab Only</a>\n                    </li>\n                                    </ol>\n\n    </dd>\n<dt><em>-</em> Investment Status</dt>\n<dd>\n    <ol class=\"m-filter-css-checkboxes \">\n                    <li class=\"m-filter-stock\">\n                                <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"stock-0\" href=\"javascript:void(0)\">Fully Funded</a>\n            </li>\n                    <li class=\"m-filter-stock\">\n                                <a class=\"m-checkbox-unchecked\" onclick=\"this.className=markCheckbox(this.className)\" id=\"stock-1\" href=\"javascript:void(0)\">Funding</a>\n            </li>\n            </ol>\n\n</dd>\n<dt><em>-</em> Loan Term</dt>\n<dd><input type=\"text\" id=\"loan_term_from\" class=\"m-slider m-from\" name=\"loan_term\" value=\"\"> - <input type=\"text\" name=\"loan_term\" id=\"loan_term_to\" class=\"m-slider m-to\" value=\"\"></dd>\n<dt><em>-</em> Loan Amount</dt>\n<dd><input type=\"text\" name=\"loan_amount\" class=\"m-slider m-from\" id=\"loan_amount_from\" value=\"\"> - <input type=\"text\" name=\"loan_amount\" id=\"loan_amount_to\" class=\"m-slider m-to\" value=\"\"></dd>\n<dt><em>-</em> ARV</dt>\n<dd><input type=\"text\" name=\"arv\" id=\"arv_from\" class=\"m-slider m-from\" value=\"\"> - <input type=\"text\" name=\"arv\" id=\"arv_to\" class=\"m-slider m-from\" value=\"\"></dd>            </dl>\n            <script type=\"text/javascript\">//decorateDataList('narrow-by-list')</script>\n            <div class=\"buttons-filter\">\n                <button id=\"apply-btn\" class=\"btn btn-primary\" type=\"button\">Apply</button>\n                <button id=\"reset-btn\" class=\"btn btn-signup\" type=\"button\">Reset</button>\n            </div>\n            </div>\n    <script type=\"text/javascript\">\n        var url = 'https://patchofland.com/investments/project-type/__type__/funding-needed/__0__-__1__.html';\n        var optionsFilter = ['loan_amount', 'loan_term', 'arv'];\n        function getProductAttributesFilter(redirectUrl){\n            var from = 0;\n            var to = 0;\n            var fundObjFrom = jQuery('.m-slider-values').find('.m-from');\n            var fundObjTo = jQuery('.m-slider-values').find('.m-to');\n            if(fundObjFrom.val().length > 0 && !isNaN(fundObjFrom.val()) && fundObjTo.val().length > 0 && !isNaN(fundObjTo.val())){\n                from = fundObjFrom.val();\n                to = fundObjTo.val();\n                if(parseFloat(fundObjFrom.val()) > parseFloat(fundObjTo.val())){\n                    from = fundObjTo.val();\n                    to = fundObjFrom.val();\n                }\n                redirectUrl = redirectUrl.replace('__0__', from).replace('__1__', to);\n            }\n            else{\n                redirectUrl = redirectUrl.replace('/funding-needed/__0__-__1__', '');\n            }\n            var projectType = jQuery('#narrow-by-list').find('.m-filter-product-attribute');\n            var typeArray = [];\n            projectType.find('a').each(function(i, val){\n                var className = jQuery(val).attr('class').replace('m-checkbox-', '');\n                if(className == 'checked'){\n                    typeArray.push(jQuery(val).text().toLowerCase().replace(/\\s/g,'-'));\n                }\n            });\n            typeArray.sort();\n            var type = typeArray.join('-');\n            if(type.length > 0){\n                redirectUrl = redirectUrl.replace('__type__', type);\n            }\n            else{\n                redirectUrl = redirectUrl.replace('/project-type/__type__', '');\n            }\n            return redirectUrl;\n        }\n\n        function getCustomOptionsFilter(){\n            var params = '';\n            var from = 0;\n            var to = 0;\n            var strFrom = '_from';\n            var strTo = '_to';\n            var loanOppType = jQuery('#narrow-by-list').find('.m-filter-loan-opp-type');\n            var stockStatus = jQuery('#narrow-by-list').find('.m-filter-stock');\n            var loanParams = '';\n            var stockParams = '';\n            loanOppType.find('a').each(function(i, val){\n                var className = jQuery(val).attr('class').replace('m-checkbox-', '');\n                var id = jQuery(val).attr('id').replace('loan-opp-type-', '');\n                if(className == 'checked'){\n                    if(loanParams.length > 0)\n                        loanParams = loanParams+'-'+id;\n                    else\n                        loanParams = 'loan_opp='+id;\n                }\n            });\n            stockStatus.find('a').each(function(i, val){\n                var className = jQuery(val).attr('class').replace('m-checkbox-', '');\n                var id = jQuery(val).attr('id').replace('stock-', '');\n                if(className == 'checked'){\n                    if(stockParams.length > 0)\n                        stockParams = stockParams+'-'+id;\n                    else\n                        stockParams = 'stock_stt='+id;\n                }\n            });\n            if(loanParams.length>0){\n                if(params.length >0){\n                    params = params+'&'+loanParams;\n                }\n                else{\n                    params = params+loanParams;\n                }\n            }\n            if(stockParams.length>0){\n                if(params.length >0){\n                    params = params+'&'+stockParams;\n                }\n                else{\n                    params = params+stockParams;\n                }\n            }\n            var paramsInputText = '';\n            for(i=0; i<optionsFilter.length; i++){\n                if(jQuery('#'+optionsFilter[i]+strFrom).val().length > 0 && !isNaN(jQuery('#'+optionsFilter[i]+strFrom).val()) && jQuery('#'+optionsFilter[i]+strTo).val().length > 0 && !isNaN(jQuery('#'+optionsFilter[i]+strTo).val())){\n                    from = jQuery('#'+optionsFilter[i]+strFrom).val();\n                    to = jQuery('#'+optionsFilter[i]+strTo).val();\n                    if(parseFloat(jQuery('#'+optionsFilter[i]+strFrom).val()) > parseFloat(jQuery('#'+optionsFilter[i]+strTo).val())){\n                        from = jQuery('#'+optionsFilter[i]+strTo).val();\n                        to = jQuery('#'+optionsFilter[i]+strFrom).val();\n                    }\n                    if(paramsInputText.length > 0){\n                        paramsInputText = paramsInputText + '&'+optionsFilter[i]+'='+from+'-'+to;\n                    }\n                    else{\n                        paramsInputText = paramsInputText + optionsFilter[i]+'='+from+'-'+to;\n                    }\n                }\n            }\n            if(params.length > 0){\n                if(paramsInputText.length > 0){\n                    params = params + '&'+paramsInputText;\n                }\n            }\n            else {\n                if (paramsInputText.length > 0){\n                    params = paramsInputText;\n                }\n            }\n            return params;\n        }\n\n        function markCheckbox(name){\n            result = 'm-checkbox-checked';\n            if(name=='m-checkbox-checked')\n                result = 'm-checkbox-unchecked';\n            return result;\n        }\n        jQuery(document).ready(function(){\n            jQuery('#apply-btn').click(function(){\n                var redirectUrl = getProductAttributesFilter(url);\n                var params = getCustomOptionsFilter();\n                if(params.length>0){\n                    redirectUrl = redirectUrl+'?'+params;\n                }\n                window.location = redirectUrl;\n                return false;\n            });\n\n            jQuery('#reset-btn').click(function(){\n                var fundObj = jQuery('#narrow-by-list .m-slider-values');\n                fundObj.find('input[type=text]').each(function(i,val){\n                    jQuery(val).val('');\n                });\n                for(i=0; i<optionsFilter.length; i++){\n                    jQuery('#'+optionsFilter[i]+'_from').val('');\n                    jQuery('#'+optionsFilter[i]+'_to').val('');\n                }\n                jQuery('.m-filter-css-checkboxes').find('a').each(function(i, val){\n                    if(jQuery(val).attr('class') == 'm-checkbox-checked'){\n                        jQuery(val).removeClass('m-checkbox-checked');\n                        jQuery(val).addClass('m-checkbox-unchecked');\n                    }\n                });\n            });\n        });\n    </script>\n</div>\n\n            <div class=\"toolbar-box view-mode\">\n                                        <span rel='sub-viewmode' class='btn-icon'><span class='btn-icon-inner'><i class='icon-th'></i> View</span></span>                <div id=\"sub-viewmode\" class=\"sub-toolbar\">\n                                                                        <span class=\"active grid\">Grid</span>\n                                                                                                <span class=\"list\"><a href=\"https://patchofland.com/investments/mode/list.html\" title=\"List\" class=\"list\">List</a></span>\n                                                            </div>\n                    </div>\n    </div>\n    <!--div class=\"category-callout\">\n\t\t\t</div-->\n</div>\n\n<div class=\"category-callout\">\n\t<p>Are you a Real Estate Developer? Access quality capital fast and list your project here! <a onclick=\"mixpanel.track('Content Link Clicked',{ 'Link Name': 'Investment List Top Developer Callout' });\" href=\"https://patchofland.com/developer-information/\">More info...</a></p></div>\n\n\n\n\n        <div class=\"category-products\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;id&quot;:&quot;root&quot;}\">\n                \n        \n                                                            <div class=\"products-grid row-fluid show-grid\">\n                    <div class=\"item first span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/high-end-chicago-remodel.html')\"                data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;container_id&quot;:&quot;root&quot;,&quot;id&quot;:&quot;child&quot;,&quot;repeated&quot;:true}\">\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/high-end-chicago-remodel.html\" title=\"High-End Chicago Remodel\" class=\"image-link\" id=\"product_294\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;href&quot;: &quot;url&quot;, &quot;title&quot;: &quot;name&quot;, &quot;id&quot;: &quot;product_id&quot;},&quot;container_id&quot;:&quot;child&quot;}\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/f/r/front_south_1.png\" alt=\"High-End Chicago Remodel\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/high-end-chicago-remodel.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                <a class=\"company-img\" href=\"https://patchofland.com/chip-llc.html\" title=\"CHIP LLC\">\n                                <img src=\"https://cdn.patchofland.com/media/manufacturers/files/d/e/50X50/dev_pic.png\" alt=\"CHIP LLC\" >\n                            </a>\n                                                                        <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/high-end-chicago-remodel.html\" title=\"High-End Chicago Remodel\">\n                                                                                                            High-End Chicago Remodel                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                3719 N Oakley Ave, Chicago, Illinois                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;description&quot;},&quot;container_id&quot;:&quot;child&quot;}\">\n                        <ul><li>12% APR with expected 14 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>3719 N Oakley Ave: 2,971 sq ft / 7 Room / 4 Bedroom / 3 Bath Single Family Residential</li><li>72.42% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;aaaa-aaaa&quot;},&quot;container_id&quot;:&quot;child&quot;}\"><small>$</small>974,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    12                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>72<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 47.39%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/high-end-chicago-remodel.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $461,590 of $974,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/4-unit-dc-suburb-acquisition.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/4-unit-dc-suburb-acquisition.html\" title=\"4-Unit DC Suburb Acquisition\" class=\"image-link\" id=\"product_290\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/f/r/front_3_1.png\" alt=\"4-Unit DC Suburb Acquisition\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/4-unit-dc-suburb-acquisition.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/4-unit-dc-suburb-acquisition.html\" title=\"4-Unit DC Suburb Acquisition\">\n                                                                                                            4-Unit DC Suburb Acquisition                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                3555 16th Street NW, Washington, DC                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>3555 16th Street NW: 2,970 sq ft / 14 Room / 6 Bedroom / 5 Bath Multi-Family Residential</li><li>75.03% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>634,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                        <li class=\"ltv\">\n                                    <strong>75%</strong>\n                                    <span>LTV</span>\n                                </li>\n                                                                                                </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 87.62%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/4-unit-dc-suburb-acquisition.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $555,500 of $634,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item last span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/purchase-lease-near-denver-university.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/purchase-lease-near-denver-university.html\" title=\"Purchase near University of Denver\" class=\"image-link\" id=\"product_279\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/m/a/main_6_2.png\" alt=\"Purchase near University of Denver\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/purchase-lease-near-denver-university.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/purchase-lease-near-denver-university.html\" title=\"Purchase near University of Denver\">\n                                                                                                            Purchase near University of Denver                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                2329 S. High Street, Denver, Colorado                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 18 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>2329 S. High Street: 1,395 sq ft / 5 Room / 2 Bedroom / 1 Bath Single Family Residential</li><li>109.13% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>436,500</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                        <li class=\"ltv\">\n                                    <strong>75%</strong>\n                                    <span>LTV</span>\n                                </li>\n                                                                                                </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 63.46%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/purchase-lease-near-denver-university.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $277,000 of $436,500                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                        </div>\n                                                    <div class=\"products-grid row-fluid show-grid\">\n                    <div class=\"item first span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/noe-valley-fix-and-flip.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/noe-valley-fix-and-flip.html\" title=\"Noe Valley Fix and Flip - Phase I\" class=\"image-link\" id=\"product_278\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/m/a/main_copy.png\" alt=\"Noe Valley Fix and Flip - Phase I\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/noe-valley-fix-and-flip.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/noe-valley-fix-and-flip.html\" title=\"Noe Valley Fix and Flip - Phase I\">\n                                                                                                            Noe Valley Fix and Flip - Phase I                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                438 29th St, San Francisco, California                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>438 29th St: 975 sq ft / 6 Room / 2 Bedroom / 1 Bath Single Family Residential</li><li>64.88% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>1,890,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>65<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 38.15%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/noe-valley-fix-and-flip.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $721,000 of $1,890,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/denver-co-purchase-and-lease.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/denver-co-purchase-and-lease.html\" title=\"Denver CO Purchase and Lease\" class=\"image-link\" id=\"product_276\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/g/a/garfield_1_copy.jpg\" alt=\"Denver CO Purchase and Lease\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/denver-co-purchase-and-lease.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/denver-co-purchase-and-lease.html\" title=\"Denver CO Purchase and Lease\">\n                                                                                                            Denver CO Purchase and Lease                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                2770 S Garfield St., Denver, Colorado                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 18 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>2770 S Garfield St.: 1,013 sq ft / 7 Room / 3 Bedroom / 1 Bath Single Family Residential</li><li>71.99% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>251,250</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                        <li class=\"ltv\">\n                                    <strong>74%</strong>\n                                    <span>LTV</span>\n                                </li>\n                                                                                                </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 94.33%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/denver-co-purchase-and-lease.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $237,000 of $251,250                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item last span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/vermont-library-transformation-refinance.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/vermont-library-transformation-refinance.html\" title=\"Vermont Library Transformation Refinance\" class=\"image-link\" id=\"product_252\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/u/s/use_new.png\" alt=\"Vermont Library Transformation Refinance\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/vermont-library-transformation-refinance.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/vermont-library-transformation-refinance.html\" title=\"Vermont Library Transformation Refinance\">\n                                                                                                            Vermont Library Transformation Refinance                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                48 West Rd, Manchester, Vermont                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>12% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>48 West Rd: 7,877 sq ft / 14 Room / 9 Bedroom / 5 Bath Single Family Residential</li><li>63.29% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>981,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    12                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>63<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 84.29%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/vermont-library-transformation-refinance.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $826,917 of $981,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                        </div>\n                                                    <div class=\"products-grid row-fluid show-grid\">\n                    <div class=\"item first span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/princeton-fix-and-flip.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/princeton-fix-and-flip.html\" title=\"Princeton Fix and Flip\" class=\"image-link\" id=\"product_251\">\n                                                                    <!-- Product Label -->\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/m/a/main_zillow_2.png\" alt=\"Princeton Fix and Flip\" />\n                                                                </a>\n                    <a rel=\"Live Funding\" href=\"https://patchofland.com/investments/princeton-fix-and-flip.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/princeton-fix-and-flip.html\" title=\"Princeton Fix and Flip\">\n                                                                                                            Princeton Fix and Flip                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                747 Kingston Road, Princeton, New Jersey                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>747 Kingston Road: 1,774 sq ft / 8 Room / 4 Bedroom / 2 Bath Single Family Residential</li><li>65.1% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>944,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>65<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 84.01%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/princeton-fix-and-flip.html\">\n                                                                                <span class=\"title fully-text\">Open for funding</span>                                        $793,025 of $944,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/oakland-park-fix-and-flip.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/oakland-park-fix-and-flip.html\" title=\"Oakland Park Fix and Flip\" class=\"image-link\" id=\"product_293\">\n                                                                    <!-- Product Label -->\n                                                    <img class=\"label-img\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/fully-funded-label-list.png\" alt=\"Fully Funded\" />\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/f/r/front_5.png\" alt=\"Oakland Park Fix and Flip\" />\n                                                                </a>\n                    <a rel=\"Fully Funded\" href=\"https://patchofland.com/investments/oakland-park-fix-and-flip.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/oakland-park-fix-and-flip.html\" title=\"Oakland Park Fix and Flip\">\n                                                                                                            Oakland Park Fix and Flip                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                4441 NE 15th Avenue, Oakland Park, Florida                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>12% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>4441 NE 15th Avenue: 1,487 sq ft / 6 Room / 3 Bedroom / 2 Bath Single Family Residential</li><li>68.04% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>264,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    12                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>68<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 100%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/oakland-park-fix-and-flip.html\">\n                                                                                <span class=\"title fully-text\">Fully Funded!</span>                                        $264,000 of $264,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item last span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/oxford-development-refinance.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/oxford-development-refinance.html\" title=\"Oxford Development Refinance\" class=\"image-link\" id=\"product_288\">\n                                                                    <!-- Product Label -->\n                                                    <img class=\"label-img\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/fully-funded-label-list.png\" alt=\"Fully Funded\" />\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/m/a/main_6_4.png\" alt=\"Oxford Development Refinance\" />\n                                                                </a>\n                    <a rel=\"Fully Funded\" href=\"https://patchofland.com/investments/oxford-development-refinance.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/oxford-development-refinance.html\" title=\"Oxford Development Refinance\">\n                                                                                                            Oxford Development Refinance                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                3333 Ray Road, Oxford, Michigan                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>12% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>3333 Ray Road: 4,391 sq ft / 14 Room / 5 Bedroom / 4 Bath Single Family Residential</li><li>46.67% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>252,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    12                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>47<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 100%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/oxford-development-refinance.html\">\n                                                                                <span class=\"title fully-text\">Fully Funded!</span>                                        $252,000 of $252,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                        </div>\n                                                    <div class=\"products-grid row-fluid show-grid\">\n                    <div class=\"item first span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/sacramento-2-property-package.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/sacramento-2-property-package.html\" title=\"Sacramento 2 Property Package\" class=\"image-link\" id=\"product_287\">\n                                                                    <!-- Product Label -->\n                                                    <img class=\"label-img\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/fully-funded-label-list.png\" alt=\"Fully Funded\" />\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/c/o/combine_images_1_3.jpg\" alt=\"Sacramento 2 Property Package\" />\n                                                                </a>\n                    <a rel=\"Fully Funded\" href=\"https://patchofland.com/investments/sacramento-2-property-package.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/sacramento-2-property-package.html\" title=\"Sacramento 2 Property Package\">\n                                                                                                            Sacramento 2 Property Package                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                Multiple Addresses                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>4313 Howard Ave: 2,300 sq ft / 12 Room / 6 Bedroom / 3 Bath Multi-Family Residential</li><li>3325 Belden St: 1,408 sq ft / 7 Room / 3 Bedroom / 2 Bath Multi-Family Residential</li><li>69.85% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>300,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>70<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 100%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/sacramento-2-property-package.html\">\n                                                                                <span class=\"title fully-text\">Fully Funded!</span>                                        $300,000 of $300,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/178-180-wainwright-fix-and-flip.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/178-180-wainwright-fix-and-flip.html\" title=\"178-180 Wainwright Fix and Flip\" class=\"image-link\" id=\"product_286\">\n                                                                    <!-- Product Label -->\n                                                    <img class=\"label-img\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/fully-funded-label-list.png\" alt=\"Fully Funded\" />\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/m/a/main_6_3.png\" alt=\"178-180 Wainwright Fix and Flip\" />\n                                                                </a>\n                    <a rel=\"Fully Funded\" href=\"https://patchofland.com/investments/178-180-wainwright-fix-and-flip.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/178-180-wainwright-fix-and-flip.html\" title=\"178-180 Wainwright Fix and Flip\">\n                                                                                                            178-180 Wainwright Fix and Flip                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                178-180 Wainwright St, Newark, New Jersey                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>12% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>178-180 Wainwright St: 4,776 sq ft / 22 Room / 9 Bedroom / 4 Bath Multi-Family Residential</li><li>69.78% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>157,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    12                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>70<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 100%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/178-180-wainwright-fix-and-flip.html\">\n                                                                                <span class=\"title fully-text\">Fully Funded!</span>                                        $157,000 of $157,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                                                        <div class=\"item last span4\"\n                                     onclick=\"setLocation('https://patchofland.com/investments/1044-los-robles-fix-and-flip.html')\"                >\n\n                <div class=\"product-image\">\n                                                                <a href=\"https://patchofland.com/investments/1044-los-robles-fix-and-flip.html\" title=\"1044 Los Robles Fix and Flip\" class=\"image-link\" id=\"product_281\">\n                                                                    <!-- Product Label -->\n                                                    <img class=\"label-img\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/fully-funded-label-list.png\" alt=\"Fully Funded\" />\n                                                                        <!-- End Product Label -->\n                        <!-- Archived Mode -->\n                                                <!-- End Archived Mode -->\n                        <img src=\"https://cdn.patchofland.com/media/catalog/product/cache/1/small_image/9df78eab33525d08d6e5fb8d27136e95/f/r/front_2.png\" alt=\"1044 Los Robles Fix and Flip\" />\n                                                                </a>\n                    <a rel=\"Fully Funded\" href=\"https://patchofland.com/investments/1044-los-robles-fix-and-flip.html\" class=\"btn btn-primary\">Get Details</a>\n                                                            </div>\n                <div class=\"property-inner\">\n                    <div class=\"property-title\">\n                                                                                                    <div class=\"title-box\">\n                            <h4>\n                                                                                            <a href=\"https://patchofland.com/investments/1044-los-robles-fix-and-flip.html\" title=\"1044 Los Robles Fix and Flip\">\n                                                                                                            1044 Los Robles Fix and Flip                                                                                                        </a>\n                                                                                    </h4>\n                            <p>\n                                1044 Los Robles Blvd, Sacramento, California                            </p>\n                        </div>\n                    </div>\n                    <div class=\"descbox\">\n                        <ul><li>11% APR with expected 12 month hold term</li><li>Underlying loan secured by first position lien on title and personal guaranty of the individual developer</li><li>1044 Los Robles Blvd: 2,165 sq ft / 10 Room / 3 Bedroom / 4 Bath Multi-Family Residential</li><li>69.76% ARV</li></ul>                    </div>\n\n                    <ul class=\"property-details\">\n                                                    <li class=\"fund\">\n                                                                <strong><small>$</small>143,000</strong>\n                                <span>Investment offering</span>\n                            </li>\n                                                                            <li class=\"est\">\n                                <strong>\n                                    11                                    <small>%</small></strong>\n                                <span>APR</span>\n                            </li>\n                        \n                                                                                                    <li class=\"arv\">\n                                <strong>70<small>%</small></strong>\n                                <span>ARV</span>\n                            </li>\n                                            </ul>\n\n                    <div class=\"invest-box \">\n                                                    <div class=\"fund-container\">\n                                <div class=\"funding-progress-bar\">\n                                    <div class=\"progress\">\n                                        <div class=\"bar\" style=\"width: 100%;\"></div>\n                                    </div>\n                                </div>\n\n                                <p>\n                                                                        <a href=\"https://patchofland.com/investments/1044-los-robles-fix-and-flip.html\">\n                                                                                <span class=\"title fully-text\">Fully Funded!</span>                                        $143,000 of $143,000                                                                            </a>\n                                                                </p>\n                            </div>\n                                            </div>\n                </div>\n            </div>\n                        </div>\n                            <script type=\"text/javascript\">\n                decorateGeneric($$('ul.products-grid'), ['odd','even','first','last']);\n            </script>\n                <div class=\"toolbar-bottom\">\n            <div class=\"toolbar\">\n        \n        \n        <div class=\"row-pager span5\">\n\t<div class=\"mt-row-page\">\n\t    <div class=\"pages\">\n\t        <ol>\n\t        \t\n\t        \t\n\t        \t\n\t        \t            \t                <li class=\"item current\">1</li>\n\t            \t        \t            \t                <li class=\"item\"><a href=\"https://patchofland.com/investments/page/2.html\">2</a></li>\n\t            \t        \t            \t                <li class=\"item\"><a href=\"https://patchofland.com/investments/page/3.html\">3</a></li>\n\t            \t        \t            \t                <li class=\"item\"><a href=\"https://patchofland.com/investments/page/4.html\">4</a></li>\n\t            \t        \t            \t                <li class=\"item\"><a href=\"https://patchofland.com/investments/page/5.html\">5</a></li>\n\t            \t        \t\n\t\n\t        \t\n\t        \t\n\t        \t            <li class=\"next-link\">\n\t                <a class=\"next i-next\" href=\"https://patchofland.com/investments/page/2.html\" title=\"Next\">\n\t                    \t                        <img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/pager_arrow_right.gif\" alt=\"Next\" class=\"v-middle\" />\n\t                    \t                </a>\n\t            </li>\n\t        \t        </ol>\n\t\n\t    </div>\n\t</div>    \n    </div>\n        \n    \n    \n    \n\n            <div class=\"toolbar-box sort-by\">\n            <span rel=\"sub-sortby\" class=\"btn-icon\"><span class=\"btn-icon-inner\"><i class=\"icon-sort\"></i> Sort</span></span>            <div id=\"sub-sortby\" class=\"sub-toolbar\">\n                \n                                                                                                                                                                <span rel=\"sortby-created_at\" class=\"sub-toolbar-title\"><em>-</em> Created Date</span>\n                                        <div id=\"sortby-created_at\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/created_at/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/created_at/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_term\" class=\"sub-toolbar-title\"><em>-</em> Loan Term</span>\n                                        <div id=\"sortby-loan_term\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_term/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_term/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_amount\" class=\"sub-toolbar-title\"><em>-</em> Loan Amount</span>\n                                        <div id=\"sortby-loan_amount\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_amount/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_amount/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-loan_opp\" class=\"sub-toolbar-title\"><em>-</em> Loan Opportunity Type</span>\n                                        <div id=\"sortby-loan_opp\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_opp/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/loan_opp/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-stock_stt\" class=\"sub-toolbar-title\"><em>-</em> Investment Status</span>\n                                        <div id=\"sortby-stock_stt\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/stock_stt/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/stock_stt/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                                                                                                <span rel=\"sortby-arv\" class=\"sub-toolbar-title\"><em>-</em> ARV</span>\n                                        <div id=\"sortby-arv\" class=\"sub-toolbar-level2\" style=\"display:none\">\n                        <a href=\"https://patchofland.com/investments/sort-by/arv/sort-direction/asc.html\">Ascending</a>\n                        <a href=\"https://patchofland.com/investments/sort-by/arv/sort-direction/desc.html\">Descending</a>\n                    </div>\n                                            </div>\n        </div>\n    \n\t\n            <div class=\"toolbar-box view-mode\">\n                                        <span rel='sub-viewmode' class='btn-icon'><span class='btn-icon-inner'><i class='icon-th'></i> View</span></span>                <div id=\"sub-viewmode\" class=\"sub-toolbar\">\n                                                                        <span class=\"active grid\">Grid</span>\n                                                                                                <span class=\"list\"><a href=\"https://patchofland.com/investments/mode/list.html\" title=\"List\" class=\"list\">List</a></span>\n                                                            </div>\n                    </div>\n    </div>\n        </div>\n        <script type=\"text/javascript\">\n            jQuery(document).ready(function(){\n                jQuery(\".toolbar\").first().find('.row-pager').remove();\n                jQuery(\".toolbar-bottom\").find(\".limiter,.sort-by,.item,.view-mode\").remove();\n                jQuery(\".toolbar-bottom\").find(\".row-pager\").removeClass('span5');\n                jQuery(\".category-products\").on({\n                    mouseenter: function () {\n                        jQuery(this).find('.btn').show();\n                    },\n                    mouseleave: function () {\n                        jQuery(this).find('.btn').hide();\n                    }\n                },'.product-image');\n\n\n                if(jQuery(\".tooltip-archived\").length > 0){\n                    jQuery('.tooltip-archived').tooltipster({\n                        contentAsHTML: true,\n                        content: jQuery('<p>This opportunity has been fully funded and is now archived. <br />Investors in this opportunity can continue to view details using the link <br />in the My Investments section inside your account dashboard.</p>'),\n                        theme: 'tooltipster-pol tooltipster-pollist',\n                        //maxWidth: 200,\n                        //trigger: 'click'\n                    });\n                }\n            });\n        </script>\n\n    </div>\n<script type=\"text/javascript\">\n    //<![CDATA[\n    var SAVE_ACTION = 'https://patchofland.com/pledge/index/save/';\n    //]]>\n</script>\n<script src=\"https://cdn.patchofland.com/skin/frontend/default/pol/js/vendor/pol_pre_sale_mode.js\"></script>\n\n<script type=\"text/javascript\">\njQuery(window).bind(\"load\", function() {\n    var setCssModal = function(){\n    \tvar cartNoticeHeight = jQuery('.cart-notices').outerHeight();\n\t\tif (jQuery(window).scrollTop() > cartNoticeHeight) { \n\t\t\tvar newHeaderHeight =  jQuery('.header-topbar').outerHeight();\n\t\t\tjQuery('.header-topbar-container').css('height',newHeaderHeight).find('.header-topbar').addClass('sticky');\n\t\t} else {\n\t\t\tvar oldHeaderHeight =  jQuery('.header-topbar').outerHeight();\n\t\t\tjQuery('.header-topbar-container').css('height',oldHeaderHeight).find('.header-topbar').removeClass('sticky');\n\t\t}\n\t};\n\t\n    setCssModal();\n    jQuery(window).bind(\"resize\", function() {\n    \tsetCssModal();\n    });\n    jQuery(window).bind(\"scroll\", function() {\n\t\tsetCssModal();\n\t});\n});\n</script>\n<script type=\"text/javascript\">\nmixpanel.track('viewed_category', {\n    'Title Category': 'Invest'\n});\nmixpanel.register({'Has viewed a category' : 'TRUE'});\n</script></div></div>                    </div>\n                </div>\n            </div>\n        </div>\n        <div id=\"institutional-wrapper\" class=\"modal hide fade\" tabindex=\"-1\" role=\"modal\" style=\"display: none\"></div>\n<script type=\"text/javascript\">\n    jQuery(document).ready(function(){\n        var billingInstitutionalData = null;\n        var extraInstitutionalData = null;\n        var paymentInstitutionalData = null;\n        var htmlExistBankInstitutional = null;\n        var htmlNewBankInstitutional = null;\n\n        jQuery('#institutional-wrapper').on(\"focus\", \".institutional-form-wrap #extra_tax_id\", function() {\n            jQuery(this).mask(\"999999999\");\n        });\n\n        jQuery('#institutional-wrapper').on(\"focus\", \".institutional-form-wrap #extra_ssn\", function() {\n            jQuery(this).mask(\"999-99-9999\");\n        });\n\n        jQuery('#institutional-wrapper').on(\"focus\", \".institutional-form-wrap #billing_telephone\", function() {\n            jQuery(this).mask(\"9999999999\");\n        });\n\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap .buttons-set .continue-btn', function() {\n            if(jQuery('#institutional-error-message').is(':visible')){\n                jQuery('#institutional-error-message').text('');\n                jQuery('#institutional-error-message').hide();\n            }\n            if(jQuery('#institutional-error-message').text().length > 0){\n                jQuery('#institutional-error-message').text('');\n            }\n            var idContentStep = jQuery(this).attr('rel');\n            var formId = jQuery(this).closest('form').attr('id');\n            var institutionalForm = new VarienForm(formId, true);\n            if(institutionalForm.validator.validate()){\n                if(formId.replace('-institutional-form', '') == 'billing'){\n                    billingInstitutionalData = jQuery('.institutional-form-wrap #'+formId).serialize();\n                }\n                else{\n                    if(formId.replace('-institutional-form', '') == 'extra'){\n                        extraInstitutionalData = jQuery('.institutional-form-wrap #'+formId).serialize();\n                    }\n                }\n                jQuery(this).parents().eq(1).hide();\n                jQuery(idContentStep).show();\n                jQuery('.institutional-steptitle').each(function(i, val){\n                    if(jQuery(val).attr('href') == idContentStep){\n                        jQuery(val).addClass('active');\n                        jQuery(val).addClass('activated');\n                    }\n                    else{\n                        jQuery(val).removeClass('active');\n                    }\n                });\n            }\n            return false;\n        });\n\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap .buttons-set .back-btn', function() {\n            var idContentBackStep = jQuery(this).attr('href');\n            jQuery(this).parents().eq(1).hide();\n            jQuery(idContentBackStep).show();\n            jQuery('.institutional-steptitle').each(function(i, val){\n                if(jQuery(val).attr('href') == idContentBackStep){\n                    jQuery(val).addClass('active');\n                }\n                else{\n                    jQuery(val).removeClass('active');\n                }\n            });\n            return false;\n        });\n\n        jQuery('#institutional-wrapper').on('change', '.institutional-form-wrap #billing-address-select', function(){\n            if(jQuery(this).val() == ''){\n                if(!jQuery('#billing-new-address-form').is(':visible')){\n                    jQuery('#billing-new-address-form').show();\n                }\n            }\n            else{\n                if(jQuery('#billing-new-address-form').is(':visible')){\n                    jQuery('#billing-new-address-form').hide();\n                }\n            }\n        });\n\n        jQuery('#institutional-wrapper').on('click', \".institutional-form-wrap #add-new-account-link\", function() {\n            if(!htmlExistBankInstitutional){\n                htmlExistBankInstitutional = '<li id=\"existing-bank-account\">'+jQuery('#existing-bank-account').html()+'</li>';\n                jQuery('#new-bank-account-form').show();\n                jQuery('#existing-bank-account').remove();\n                jQuery('#new-bank-account-form input').each(function(i, val){\n                    if(jQuery(val).attr('id') != 'ach_bank_nickname'){\n                        jQuery(val).removeClass('validation-passed');\n                        jQuery(val).addClass('required-entry');\n                    }\n                });\n                jQuery('#new-bank-account-form select').each(function(i, val){\n                    jQuery(val).removeClass('validation-passed');\n                    jQuery(val).addClass('required-entry');\n                });\n            }\n            else{\n                jQuery('#existing-bank-account').remove();\n                jQuery('#payment_form_free').html(htmlNewBankInstitutional);\n            }\n            return false;\n        });\n\n        jQuery('#institutional-wrapper').on(\"click\", \".institutional-form-wrap #use_existing_bank\", function(event) {\n            if(!htmlNewBankInstitutional)\n                htmlNewBankInstitutional = '<li id=\"new-bank-account-form\">'+jQuery('#new-bank-account-form').html()+'</li>';\n            jQuery('#new-bank-account-form').remove();\n            jQuery('#payment_form_free').html(htmlExistBankInstitutional);\n            return false;\n        });\n\n        jQuery('#institutional-wrapper').on('change', '.institutional-form-wrap #billing_country_id', function(){\n            if(jQuery(this).val() == 'US'){\n                jQuery('#billing_region_id').show();\n                jQuery('#billing_region').hide();\n                jQuery('#billing_region').removeClass('required-entry');\n                jQuery('#billing_region_id').removeClass('validation-passed');\n                jQuery('#billing_region_id').addClass('required-entry');\n            }\n            else{\n                jQuery('#billing_region_id').hide();\n                jQuery('#billing_region').show();\n                jQuery('#billing_region').removeClass('validation-passed');\n                jQuery('#billing_region').addClass('required-entry');\n                jQuery('#billing_region_id').removeClass('required-entry');\n            }\n        });\n\n        jQuery('#institutional-wrapper').on('change', '.institutional-form-wrap #billing_region_id', function(){\n            if(jQuery('#billing-institutional-form #billing_region_id :selected').val() != '')\n                jQuery('#billing-institutional-form #billing_region').val(jQuery('#billing-institutional-form #billing_region_id :selected').text());\n        });\n\n        jQuery('#institutional-wrapper').on('change', '.institutional-form-wrap input[name=\"extra[invest_type]\"]', function(){\n            if (jQuery(this).is(\":checked\"))\n            {\n                var selectValue = jQuery(this).val();\n                //flag sdira entity & order\n                var isSdira = false;\n                if(jQuery(this).attr('id') == 'invest_atrust_sdira'){\n                    jQuery('#is_sdira').val(1);\n                    isSdira = true;\n                }\n                else{\n                    jQuery('#is_sdira').val(0);\n                }\n                if(isSdira){\n                    if(jQuery('#existing_entity_dropdown option[sdira=\"1\"]').length < 1){\n                        jQuery('#existing-entities').hide();\n                        jQuery('#new-entities').show();\n                        jQuery('#select-exist-entity').hide();\n                    }\n                    else{\n                        if(jQuery('#existing_entity_dropdown option[sdira=\"1\"]').length > 0){\n                            jQuery('#existing-entities').show();\n                            jQuery('#new-entities').hide();\n                            jQuery('#select-exist-entity').show();\n                        }\n                    }\n                }\n                else {\n                    if(jQuery('#existing_entity_dropdown option[sdira=\"0\"]').length < 1){\n                        jQuery('#existing-entities').hide();\n                        jQuery('#new-entities').show();\n                        jQuery('#select-exist-entity').hide();\n                    }\n                    else{\n                        if(jQuery('#existing_entity_dropdown option[sdira=\"0\"]').length > 0){\n                            jQuery('#existing-entities').show();\n                            jQuery('#new-entities').hide();\n                            jQuery('#select-exist-entity').show();\n                        }\n                    }\n                }\n                if(selectValue != 'PERSONAL') {\n                    if(!jQuery('#extra-form-business').is(\":visible\")){\n                        jQuery('#extra-form-business').show();\n                    }\n                    if(jQuery('#existing_entity_dropdown').length > 0 && jQuery('#existing_entity_dropdown').is(\":visible\")){\n                        jQuery('#existing_entity_dropdown').removeClass('validate-select required-entry');\n                        jQuery('#existing_entity_dropdown').addClass('validate-select required-entry');\n                        jQuery('#extra_company_name').removeClass('required-entry');\n                        jQuery('#extra_tax_id').removeClass('required-entry');\n                    }\n                    else{\n                        jQuery('#extra_company_name').removeClass('required-entry').addClass('required-entry');\n                        jQuery('#extra_tax_id').removeClass('required-entry').addClass('required-entry');\n                    }\n\n                    jQuery('#existing_entity_dropdown option').each(function(i, val){\n                        if(jQuery(val).val() != \"\"){\n                            if(jQuery(val).attr('rel') != selectValue){\n                                jQuery(val).hide();\n                            }\n                            else{\n                                if(isSdira){\n                                    if(jQuery(val).attr('sdira') == '1'){\n                                        jQuery(val).show();\n                                    }\n                                    else{\n                                        jQuery(val).hide();\n                                    }\n                                } else {\n                                    if(jQuery(val).attr('sdira') == '0'){\n                                        jQuery(val).show();\n                                    }\n                                    else{\n                                        jQuery(val).hide();\n                                    }\n                                }\n                            }\n                        }\n                    });\n                    jQuery('#existing_entity_dropdown').val(\"\");\n                }\n                else{\n                    if(jQuery('#extra-form-business').is(\":visible\")){\n                        jQuery('#extra-form-business').hide();\n                    }\n                }\n            }\n            return false;\n        });\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap input.business_type', function(){\n            jQuery('#extra-form-business input, #extra-form-business select').each(function(i, val){\n                jQuery(val).removeAttr('disabled');\n            });\n            if(!jQuery('#existing_entity_dropdown').is(\":visible\")){\n                jQuery('#existing_entity_dropdown').show();\n            }\n        });\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap input#invest_myself', function(){\n            if(jQuery('#extra-form-myself').length){\n                jQuery('#extra-form-myself').show();\n            }\n            jQuery('#extra-form-business input, #extra-form-business select').each(function(i, val){\n                jQuery(val).attr('disabled', 'disabled');\n            });\n        });\n\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap a#create-new-entity', function(e){\n            e.preventDefault();\n            jQuery('#existing_entity_dropdown').hide();\n            jQuery('li#existing-entities').hide();\n            jQuery('li#new-entities').show();\n            jQuery('#extra_company_name').addClass('required-entry');\n            jQuery('#extra_tax_id').addClass('required-entry');\n            jQuery('#existing_entity_dropdown').removeClass('validate-select required-entry');\n        });\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap a#select-exist-entity', function(e){\n            e.preventDefault();\n            jQuery('li#new-entities').hide();\n            jQuery('li#existing-entities').show();\n            jQuery('#existing_entity_dropdown').addClass('validate-select required-entry');\n            jQuery('#extra_company_name').removeClass('required-entry');\n            jQuery('#extra_tax_id').removeClass('required-entry');\n            jQuery('#existing_entity_dropdown').show();\n        });\n\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap .institutional-steptitle', function(){\n            if(jQuery(this).hasClass('activated')){\n                var idContent = jQuery(this).attr('href');\n                var currentNumber = idContent.replace('#institutional-content', '');\n                jQuery('.institutional-stepcontent').hide();\n                jQuery(this).addClass('active');\n                jQuery(idContent).show();\n                jQuery('.institutional-steptitle').each(function(i, val){\n                    var number = jQuery(val).attr('href').replace('#institutional-content', '');\n                    if(parseInt(number) > parseInt(currentNumber)){\n                        jQuery(val).removeClass('activated');\n                    }\n                    if(jQuery(val).attr('href') == idContent){\n                        jQuery(val).addClass('active');\n                    }\n                    else{\n                        jQuery(val).removeClass('active');\n                    }\n                });\n            }\n            return false;\n        });\n\n        jQuery('#institutional-wrapper').on('click', '.institutional-form-wrap #submit-btn', function(){\n            if(jQuery('#ach_account_number').val() != '' && jQuery('#confirm_account_number').val() != '' && jQuery('#ach_account_number').val() != jQuery('#confirm_account_number').val()){\n                jQuery('#confirm_account_number').val('');\n            }\n            if(jQuery('#institutional-error-message').is(':visible')){\n                jQuery('#institutional-error-message').text('');\n                jQuery('#institutional-error-message').hide();\n            }\n            if(jQuery('#institutional-error-message').text().length > 0){\n                jQuery('#institutional-error-message').text('');\n            }\n            var formId = jQuery(this).closest('form').attr('id');\n            var institutionalForm = new VarienForm(formId, true);\n            if(institutionalForm.validator.validate()){\n                paymentInstitutionalData = jQuery('.institutional-form-wrap #'+formId).serialize();\n                var data_string = billingInstitutionalData+'&'+extraInstitutionalData+'&'+paymentInstitutionalData;\n                jQuery('.institutional-form-wrap #institutional-please-wait').show();\n                jQuery(this).prop('disabled',true);\n                jQuery.ajax({\n                    type: \"POST\",\n                    url: \"https://patchofland.com/institutional/index/saveInstitutionalInfo/\",\n                    data: data_string,\n                    dataType: 'json',\n                    success: function(result) {\n                        jQuery('.institutional-form-wrap #submit-btn').prop('disabled',false);\n                        jQuery('.institutional-form-wrap #institutional-please-wait').hide();\n                        if(result.error){\n                            jQuery('#institutional-error-message').text(result.message);\n                            jQuery('#institutional-error-message').show();\n                        }\n                        else{\n                            jQuery.fancybox({\n                                padding     : 0,\n                                width\t\t: '98%',\n                                height\t\t: 'auto',\n                                minHeight   : 850,\n                                fitToView\t: false,\n                                type        : 'iframe',\n                                href        : result.url,\n                                iframe      : {\n                                    preload: false\n                                },\n                                afterClose  : function() {\n                                    window.location = result.redirect_url;\n                                }\n                            });\n                        }\n                    }\n                });\n            }\n            return false;\n        });\n    });\n</script><div class=\"footer\">\n\t\t<div class=\"homesignup\">\n    <div class=\"container\">\n        <div class=\"col ajaxable investor-col\">\n            <h2>Become an <br /><strong>Investor</strong> today.</h2>\n            <a class=\"btn btn-signup\" alt=\"Create an Investor Account\" href=\"https://patchofland.com/customer/account/create/\">Sign Up Now</a>   \n        </div>\n        <div class=\"col borrower-col\">\n            <h2>Become a <br /><strong>Borrower</strong> today.</h2>\n            <a class=\"btn btn-signup\" alt=\"Create an Borrower Account\" href=\"https://patchofland.com/developer-information/\">Apply Now</a>   \n        </div>\n    </div>   \n</div>\t<script type=\"text/javascript\">\n    jQuery('.homesignup .investor-col a').click(function () {\n        jQuery('body,html').animate({\n            scrollTop: 0\n        }, 800);\n        return false;\n    });\n    </script> \n\t<div class=\"footer-subscribe\">\n\t<div class=\"container\">\n    <form action=\"https://patchofland.com/newsletter/subscriber/new/\" method=\"post\" id=\"newsletter-validate-detail\">\n        <label for=\"newsletter\">Newsletter</label>\n        <div class=\"block-content\">\n            <div class=\"input-box\">\n               <input type=\"text\" name=\"email\" id=\"newsletter\" title=\"Newsletter\" class=\"input-text required-entry validate-email\" />\n            </div>\n            <button type=\"submit\" title=\"Subscribe\" class=\"button\"><span><span><i class=\"fa fa-envelope-o\"></i></span></span></button>\n        </div>\n    </form>\n    <script type=\"text/javascript\">\n    //<![CDATA[\n        var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail');\n    //]]>\n    </script>\n\t</div>\n</div>\n\n<div class=\"footer-links\">\n<div class=\"container\">\n<div class=\"col\">\n<h4>Our Company</h4>\n<ul>\n<li><a href=\"https://patchofland.com/contact/\">Contact Us</a></li>\n<li><a href=\"https://patchofland.com/about/\">About Us</a></li>\n<li><a href=\"https://patchofland.com/blog/category/patch-of-land-events/\">Find us at an event</a></li>\n<li><a href=\"https://patchofland.com/faq/\">FAQ</a></li>\n<li><a href=\"https://patchofland.com/statistics/\">Statistics</a></li>\n<li><a href=\"https://patchofland.com/about/careers/\" target=\"_blank\">Careers</a></li>\n</ul>\n</div>\n<div class=\"col\">\n<h4>Invest</h4>\n<ul>\n<li><a href=\"https://patchofland.com/investments.html/\">View Investments</a></li>\n<li><a href=\"https://patchofland.com/invest/investors/\">Learn More</a></li>\n<li><a href=\"https://patchofland.com/invest/how-it-works/\">How it Works for Investors</a></li>\n<!--<li><a href=\"https://patchofland.com/\">Performance</a></li>\n<li><a href=\"https://patchofland.com/\">Financial Professionals</a></li>-->\n<li><a href=\"https://patchofland.com/faq/index/category/id/6/\">Investor FAQs</a></li>\n</ul>\n</div>\n<div class=\"col\">\n<h4>Borrow</h4>\n<ul>\n<li><a href=\"https://patchofland.com/developer-information/\">Apply for Funding</a></li>\n<li><a href=\"https://patchofland.com/developer-information/how-it-works-borrowers/\">How it Works for Borrowers</a></li>\n<li><a href=\"https://patchofland.com/developer-information/lending-parameters/\">Lending Parameters</a></li>\n<!--<li><a href=\"https://patchofland.com/\">Borrower Profiles</a></li>-->\n<li><a href=\"https://patchofland.com/faq/index/category/id/7/\">Borrower FAQs</a></li>\n</ul>\n</div>\n<div class=\"col\">\n<h4>Community</h4>\n<div class=\"social-links\"><a onclick=\"_gaq.push(['_trackEvent', 'Social', 'Follow Button Clicked', 'Footer Google Plus']);\" href=\"http://plus.google.com/116983649255219754890/posts\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/icon-gl.png\" alt=\"+1 on Google Plus\" /></a> <a href=\"https://www.linkedin.com/company/3082780\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/icon-in.png\" alt=\"Like us on Linked In\" /></a> <a onclick=\"_gaq.push(['_trackEvent', 'Social', 'Follow Button Clicked', 'Footer Facebook']);\" href=\"http://www.facebook.com/crowdfundrealestate/\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/icon-fb.png\" alt=\"Like us on Facebook\" /></a> <a onclick=\"_gaq.push(['_trackEvent', 'Social', 'Follow Button Clicked', 'Footer Twitter']);\" href=\"http://www.twitter.com/patchofland/\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/icon-tw.png\" alt=\"Follow us on Twitter\" /></a></div>\n<ul>\n<li class=\"newsletter-link\"><a href=\"https://patchofland.com/\">Newsletter</a></li>\n<li><a href=\"https://patchofland.com/blog/\">Blog</a></li>\n<li><a href=\"https://patchofland.com/blog/feed/\">RSS</a></li>\n<li><a href=\"https://patchofland.com/partners/\">Partners</a></li>\n</ul>\n</div>\n<div class=\"col\">\n<h4>More Info</h4>\n<ul>\n<li><a href=\"https://patchofland.com/crowdfunding/\">Crowdfunding for Real Estate</a></li>\n<li><a href=\"https://patchofland.com/crowdfunding/peer-to-peer-lending/\">Peer-to-Peer Lending</a></li>\n<li><a href=\"https://patchofland.com/crowdfunding/rule-506-c/\">SEC Rule 506(c)</a></li>\n<li><a href=\"https://patchofland.com/crowdfunding/real-estate-loans/\">Real Estate Loans for Investors</a></li>\n<li><a href=\"https://patchofland.com/crowdfunding/real-estate-investing/\">REIT Alternative</a></li>\n<li><a href=\"https://patchofland.com/crowdfunding/alternative-investments/\">Alternative Investments</a></li>\n<li><a href=\"https://patchofland.com/prefund/\">Prefunding</a></li>\n</ul>\n</div>\n<div class=\"col\">\n<h4>Legal</h4>\n<ul>\n<li><a href=\"https://patchofland.com/terms/\">Terms Of Service</a></li>\n<li><a href=\"https://patchofland.com/privacy-policy/\">Privacy Policy</a></li>\n<li><a href=\"https://patchofland.com/terms/disclosures/\">Disclosures</a></li>\n</ul>\n</div>\n</div>\n</div>\t<script type=\"text/javascript\">\n    jQuery('.footer-links .newsletter-link a').click(function () {\n        jQuery('.footer-subscribe').toggle();\n        jQuery('.footer-subscribe input').focus();\n        \n        return false;\n    });\n    </script> \n    \n            <p id=\"back-top\"><a href=\"#top\"><span></span></a></p>\n\t<script type=\"text/javascript\">\n\t\tjQuery(document).ready(function() {\n\t\t\tvar haflScrollHeight = jQuery(document).height() / 2;\n\t\t\tvar isScrollDown = false;\n\t\t\t\t\n\t\t\tjQuery(\"#back-top\").hide();  \n\t\t\tjQuery(function () {\t\t\t\t\n\t\t\t\tjQuery(window).scroll(function () {\n\t\t\t\t\tif (jQuery(this).scrollTop() > 100) {\n\t\t\t\t\t\tjQuery('#back-top').fadeIn();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery('#back-top').fadeOut();\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\tif (jQuery(this).scrollTop() > haflScrollHeight) {\n\t\t\t\t\t\tif(!isScrollDown){\n\t\t\t\t\t\t\tmixpanel.track('Page Scroll', {\n\t\t\t\t\t\t\t\t'action': 'User scrolls down more than half way down the page'\n\t\t\t\t    \t\t});\t\t\t\t    \t\t\t\n\t\t\t\t    \t\tisScrollDown = true;\n\t\t\t\t    \t}\n\t\t\t\t\t}\n\t\t\t\t}); \n\t\t\t\t\t\n\t\t\t\tjQuery('#back-top a').click(function () {\n\t\t\t\t\tmixpanel.track('Back to Top', {\n\t\t\t\t\t\t'action': 'Clicked back to top button'\n    \t\t\t\t});\n\t\t\t\t\tjQuery('body,html').animate({\n\t\t\t\t\t\tscrollTop: 0\n\t\t\t\t\t}, 800);\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}); \n\t\t}); \n\t</script>\n\t</div>\n<div class=\"footer-bottom\">\n\t<div class=\"container\">\n\t\t<p class=\"f-left\"> \n\t\t\t<span>1964 Westwood Blvd, Suite 350, Los Angeles, California 90025</span>\n\t\t\t&copy; 2015 Patch of Land, Inc. All Rights Reserved.\t\t</p>\n        <ul class=\"f-right\">\n<li>\n<a href=\"http://www.aaplonline.com/\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/media/wysiwyg/aarl-bann.png\" alt=\"American Association of Private Lenders\" /></a>\n</li>\n<li>\n<a href=\"http://mba.org\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/media/wysiwyg/logo-mba.png\" alt=\"Mortgage Bankers Association Memeber\" /></a>\n</li>\n<li><a href=\"http://www.bbb.org/losangelessiliconvalley/business-reviews/real-estate-investors/patch-of-land-in-los-angeles-ca-262573\" target=\"_blank\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/bbb-logo.png\" alt=\"BBB Patch of Land Profile\" /></a></li>\n<li>\n<table width=\"130\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" title=\"Click to Verify - This site chose Symantec SSL for secure e-commerce and confidential communications.\">\n<tr>\n<td width=\"130\" align=\"center\" valign=\"top\" style=\"text-align:center;\"><script type=\"text/javascript\" src=\"https://seal.verisign.com/getseal?host_name=patchofland.com&amp;size=L&amp;use_flash=YES&amp;use_transparent=YES&amp;lang=en\"></script></td>\n</tr>\n</table>\n</li>\n<li>\n<a href=\"https://mixpanel.com/f/partner\" target=\"_blank\"><img src=\"//cdn.mxpnl.com/site_media/images/partner/badge_light.png\" alt=\"Mobile Analytics\" /></a>\n</li>\n</ul>        <div style=\"font-size: 11px; color: #666; text-align: left; margin-bottom: 50px; clear: both;\">\n<p><span>Past performance is not indicative of future performance. Any financial projections or returns shown on the site are examples only and Investors should conduct their own due diligence and not rely on the financial assumptions or estimates that are displayed here.</span></p>\n<p><span>Fluctuations in the value of the assets that are the subject of any investment are to be expected. Additional risks exist due to a variety of factors, including, but not limited to, leverage, property operations, business risks, management and environmental liabilities. There is a potential for loss of part or ALL of the investment capital, and each investor should understand that all capital invested may be lost. Investors should only consider these investments if they have no need for liquidity and can bear the risk of losing their entire investment.</span></p>\n<p><span>This website is only suitable, intended and available for accredited investors who are members of Patch of Land and familiar with, and willing to, accept the risks associated with private investments. Patch of Land does not endorse any of the opportunities that appear on this website, nor does it make any recommendations regarding the appropriateness of particular opportunities for any Investor. Each investor must review and evaluate the investments in the investor&rsquo;s own discretion and determine the suitability of making the particular investment.</span></p>\n<p><span>Use of this website does not constitute an offer by Patch of Land, Inc. to sell, solicit or make an offer to buy any investment interest or securities. Patch of Land does not give or offer any business advice, investment advice, tax or legal advice to anyone using this website. The services provided by Patch of Land defined in the Terms of Use. All prospective investors must certify that they are accredited investors, suitable for this type of illiquid investment, and must acknowledge that they have received and read all investment terms and conditions.</span></p>\n<p><span>Neither the Securities and Exchange Commission nor any federal or state securities commission or any other regulatory authority has recommended or approved of the investment or the accuracy or inaccuracy of any of the information or materials provided by or through the website. Direct and indirect purchase of real estate property involves significant risks, including, but not limited to risk related to sale of land, market and industry risks and risks specific to a given property. Investments are not bank deposits, are not insured by the FDIC or by any other Federal Government Agency, are not guaranteed by Patch of Land, Inc., and may lose value.</span></p>\n<p><span>Patchofland.com is a website operated by Patch of Land, Inc.&nbsp;By accessing this site and any pages thereof, you agree to be bound by our <a href=\"https://patchofland.com/terms/\">Terms of Use</a> and <a href=\"https://patchofland.com/privacy-policy/\">Privacy Policy</a>. Patchofland.com is intended only for accredited investors (for persons residing in the U.S.), and for persons residing abroad in jurisdictions where securities registration exemptions apply.</span></p>\n<p><span>Patch of Land, Inc. does not make investment recommendations, and no communication through this website or in any other medium should be construed as such.&nbsp; Investment opportunities posted on this website are &ldquo;private placements&rdquo; of securities that are not publicly traded, are subject to holding period requirements, and are intended for investors who do not need a liquid investment. Private placement investments are NOT bank deposits (and thus NOT insured by the FDIC or by any other federal governmental agency), are NOT guaranteed by Patch of Land, and MAY lose value. &nbsp;Investors must be able to afford the loss of their entire investment.</span></p>\n<p><span>Any financial projections or returns shown on the website are illustrative examples only, and there can be no assurance that any valuations provided are accurate or in agreement with market or industry valuations.&nbsp; Any investment information contained herein has been secured from sources Patch of Land believes are reliable, but we make no representations or warranties as to the accuracy of such information and accept no liability therefor.&nbsp; &nbsp;Offers to sell, or the solicitations of offers to buy, any security can only be made through official offering documents that contain important information about risks, fees and expenses. Investors should conduct their own due diligence, not rely on the financial assumptions or estimates displayed on this website, and are encouraged to consult with a financial advisor, attorney, accountant, and any other professional that can help you to understand and assess the risks associated with any investment opportunities.&nbsp;</span></p>\n</div>\t</div>\n</div>\n<script type=\"text/javascript\">\nmixpanel.set_config({\n    debug: false\n});\n</script>        <div id=\"login-success\" style=\"display:none\">\n\t<div id=\"login-success-content\">\n\t\t\t</div>\n</div>\n\n<div id=\"register-success\" style=\"display:none\">\n\t<div id=\"register-success-content\">\n\t</div>\n</div>\n\n<div id=\"social-choose-account-type\" class=\"broker modal hide fade\" tabindex=\"-1\" role=\"modal\" data-keyboard=\"false\">\n\t<div class=\"modal-dialog\">\n\t\t<div class=\"modal-content\">\n\t\t\t<div class=\"modal-header\">\n\t\t\t\tChoose an Account Type\t\t\t</div>\n\t\t\t<div class=\"modal-body\">\n\t\t\t\t<div class=\"fieldset\">\n\t\t\t\t\t<form id=\"choose_account_type_form\" action=\"https://patchofland.com/ajaxlogin/index/setAccountType/\" method=\"post\">\n\t\t\t\t\t\t<ul class=\"form-list\">\n\t\t\t\t\t\t\t<li style=\"margin: 0\">\n\t\t\t\t\t\t\t\t<label class=\"required\" for=\"account_type\">Choose the type of account you wish to create with your social profile</label>\n\t\t\t\t\t\t\t\t<div class=\"input-box\">\n\t\t\t\t\t\t\t\t\t<select id=\"account_type\" name=\"account_type\" class=\"validate-select required-entry\">\n\t\t\t\t\t\t\t\t\t\t<option selected=\"selected\" value=\"1\">I'm an Investor</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"8\">I'm a Borrower</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"14\">I'm a Broker</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t<div class=\"buttons-set\">\n\t\t\t\t\t\t\t<img id=\"choose_account_type_sending_data\" class=\"ajax-loader\" src='https://cdn.patchofland.com/skin/frontend/default/pol/images/opc-ajax-loader.gif' alt='Loading...' style=\"display: none\" />\n\t\t\t\t\t\t\t<button type=\"button\" id=\"choose_account_type_submit_button\" class=\"btn btn-block btn-primary submit-btn\">Create my Account</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</form>\n\t\t\t\t\t<script type=\"text/javascript\">\n\t\t\t\t\t\tvar form = jQuery('#choose_account_type_form');\n\t\t\t\t\t\tjQuery('#choose_account_type_submit_button').on('click', function(event){\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\tjQuery('#choose_account_type_submit_button').hide();\n\t\t\t\t\t\t\tjQuery('#choose_account_type_sending_data').show();\n\n\t\t\t\t\t\t\tvar formData = jQuery(form).serialize();\n\t\t\t\t\t\t\t// process the form\n\t\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\t\ttype        : 'POST',\n\t\t\t\t\t\t\t\turl         : 'https://patchofland.com/ajaxlogin/index/setAccountType/',\n\t\t\t\t\t\t\t\tdata        : formData,\n\t\t\t\t\t\t\t\tdataType    : 'json',\n\t\t\t\t\t\t\t\tsuccess\t\t: function(result) {\n                                    if(result.is_sms_verification){\n                                        jQuery.fancybox({\n                                            padding     : 0,\n                                            width\t\t: '98%',\n                                            height\t\t: 'auto',\n                                            maxWidth    : 420,\n                                            wrapCSS     : 'verification-popup',\n                                            autoSize    : false,\n                                            fitToView\t: false,\n                                            closeBtn    : false,\n                                            type        : 'html',\n                                            href        : htmlspecialchars_decode(result.sms_verification_popup, ['ENT_QUOTES']),\n                                            helpers     : {\n                                                overlay : {closeClick: false}\n                                            },\n                                            keys        : {\n                                                close  : null\n                                            },\n\t\t\t\t\t\t\t\t\t\t\tbeforeShow : function(){\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery(document.body).removeClass('modal-open');\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery('.modal-backdrop').removeClass('in').addClass('hide');\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery('#social-choose-account-type').hide();\n\t\t\t\t\t\t\t\t\t\t\t}\n                                        });\n                                    }\n                                    else{\n                                        if(result.redirect_url){\n                                            window.location = result.redirect_url;\n                                        }\n                                        else{\n                                            if ( typeof result.html != 'undefined' && typeof result.popup_name != 'undefined'){\n                                                jQuery('#'+result.popup_name).html(htmlspecialchars_decode(result.html, ['ENT_QUOTES']));\n                                            }\n                                            if(result.popup_name){\n                                                jQuery.fancybox({\n                                                    padding: 20,\n                                                    width: '98%',\n                                                    height: 'auto',\n                                                    maxWidth: 900,\n                                                    wrapCSS: 'pol-messages-popup',\n                                                    autoSize: false,\n                                                    fitToView: false,\n                                                    scrolling: 'no',\n                                                    type: 'inline',\n                                                    href: '#'+result.popup_name,\n                                                    closeBtn: false,\n                                                    helpers: {\n                                                        overlay: {closeClick: false}\n                                                    },\n                                                    keys: {\n                                                        close: null\n                                                    }\n                                                });\n                                            }\n                                            else{\n                                                window.location.reload();\n                                            }\n                                        }\n                                    }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t</script>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div><script type=\"text/javascript\"> \n//<![CDATA[\n(function($) {\nMana.require(['singleton:Mana/Core/Config'], function (config) {\n    config.set({\"debug\":false,\"url.base\":\"https:\\/\\/patchofland.com\\/\",\"url.secureBase\":\"https:\\/\\/patchofland.com\\/\",\"ga.account\":\"UA-37744503-1\",\"showOverlay\":true,\"showWait\":true,\"ajax.enabled\":false,\"ajax.currentRoute\":\"catalog\\/category\\/view\\/id\\/3\",\"layeredNavigation.ajax.urlKey\":\"ajax\\/layered-navigation\",\"layeredNavigation.ajax.routeSeparator\":\"requested-url\",\"layeredNavigation.ajax.scrollToTop\":true,\"layeredNavigation.ajax.containers\":\".mb-mana-catalog-leftnav,.mb-mana-catalog-rightnav,.block-layered-nav.m-topmenu,.block-layered-nav.m-top,.toolbar\",\"layeredNavigation.ajax.exceptions\":[],\"layeredNavigation.ajax.exceptionPatterns\":\"options=|checkout\\/cart\\/add|catalog\\/product_compare\\/add|wishlist\\/index\\/add\",\"url.unfiltered\":[\"https:\\/\\/patchofland.com\\/investments\"],\"url.suffix\":\".html\"});\n});\n})(jQuery);\n//]]>\n</script> \n<div id=\"m-wait\" style=\"display:none;\">\n    <p class=\"loader\" id=\"loading_mask_loader\"><img src=\"https://cdn.patchofland.com/skin/frontend/base/default/images/mana_core/m-wait.gif\" alt=\"Loading...\"/><br/>Please wait...</p>\n</div>\n\n<div id=\"m-popup\" class=\"m-popup\" style=\"display:none;\">\n</div>\n\n<div id=\"signup-broker\" class=\"modal hide fade\" tabindex=\"-1\" role=\"modal\" data-keyboard=\"false\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <span>Create a Broker Account</span>\n                <a class=\"close\" data-dismiss=\"modal\">×</a>\n            </div>\n            <div class=\"modal-body\">\n                                    <div class=\"webform--message\" id=\"webform_message\" style=\"display:none\"></div>\n                \n                                    <div id=\"webform_236_success_text\" class=\"std webforms-success-text\" style=\"display:none\"></div>\n                \n                \n                    <div id=\"webform_236_form\">\n\n                        \n                                                    <iframe id=\"webform_236_iframe\" name=\"webform_236_iframe\" style=\"width:0;height:0;border:0;position:absolute\"></iframe>\n                        \n                        <form action=\"https://patchofland.com/webformscrf/index/create/\" method=\"post\" name=\"webform_236\" id=\"webform_236\" enctype=\"application/x-www-form-urlencoded\" class=\"webforms-broker-form\" target=\"webform_236_iframe\">\n\n                                                            <input type=\"hidden\" name=\"webForm_isAjax\" value=\"1\"/>\n                                                        <input type=\"hidden\" name=\"submitWebform_236\" value=\"1\"/>\n                            <input type=\"hidden\" name=\"webform_id\" value=\"236\"/>\n\n                            \n                            \n                            <!-- Default registration fields -->\n\n                            <div class=\"fieldset\">\n                                <input type=\"hidden\" name=\"success_url\" value=\"\" />\n                                <input type=\"hidden\" name=\"error_url\" value=\"\" />\n                                <input type=\"hidden\" name=\"is_broker\" value=\"1\" />\n                                <ul class=\"form-list\">\n                                    <li class=\"fields\">\n                                        <div class=\"customer-name\">\n    <div class=\"field name-firstname\">\n        <label for=\"firstname\" class=\"required\"><em>*</em>First Name</label>\n        <div class=\"input-box\">\n            <input type=\"text\" id=\"firstname\" name=\"firstname\" value=\"\" title=\"First Name\" maxlength=\"255\" class=\"input-text required-entry\"  />\n        </div>\n    </div>\n    <div class=\"field name-lastname\">\n        <label for=\"lastname\" class=\"required\"><em>*</em>Last Name</label>\n        <div class=\"input-box\">\n            <input type=\"text\" id=\"lastname\" name=\"lastname\" value=\"\" title=\"Last Name\" maxlength=\"255\" class=\"input-text required-entry\"  />\n        </div>\n    </div>\n</div>\n                                    </li>\n                                    <li class=\"fields\">\n                                        <div class=\"field\">\n                                            <label for=\"email_address\" class=\"required\"><em>*</em>Email Address</label>\n                                            <div class=\"input-box\">\n                                                <input type=\"text\" name=\"email\" id=\"email_address\" value=\"\" title=\"Email Address\" class=\"input-text validate-email required-entry\" />\n                                            </div>\n                                        </div>\n                                        <div class=\"field\">\n                                            <label for=\"password\" class=\"required\"><em>*</em>Password</label>\n                                            <div class=\"input-box\">\n                                                <input type=\"password\" name=\"password\" id=\"default-password\" title=\"Password\" class=\"input-text required-entry validate-password\" />\n                                                <script type=\"text/javascript\">\n                                                    FormTools.addPasswordMasking(\"#default-password\", '\\u25CF');\n                                                </script>\n                                            </div>\n                                        </div>\n                                    </li>\n                                    <li class=\"fields\">\n                                        <div class=\"field\">\n                                            <label for=\"phone_number\" class=\"required\"><em>*</em>Mobile Number</label>\n                                            <div class=\"input-box\">\n                                                <input type=\"text\" name=\"phone_number\" id=\"phone_number\" value=\"\" title=\"Phone Number\" class=\"input-text validate-phone required-entry\" />\n                                                <script type=\"text/javascript\">\n                                                    jQuery(document).ready(function() {\n                                                        jQuery(\"#phone_number\").mask(\"(999)999-9999\");\n                                                    });\n                                                </script>\n                                            </div>\n                                        </div>\n                                        <div class=\"field\">\n                                            <label for=\"timezone\" class=\"required\"><em>*</em>Timezone</label>\n                                            <div class=\"input-box\">\n                                                                                                <select name=\"timezone\" id=\"timezone\" class=\"validate-select required-entry\">\n                                                    <option value=\"\">Select an option</option>\n                                                                                                                <option value=\"America/Anchorage\">Alaskan Standard Time (America/Anchorage)</option>\n                                                                                                                    <option value=\"America/Buenos_Aires\">Argentina Standard Time (America/Buenos_Aires)</option>\n                                                                                                                    <option value=\"America/Halifax\">Atlantic Standard Time (America/Halifax)</option>\n                                                                                                                    <option value=\"America/Regina\">Canada Central Standard Time (America/Regina)</option>\n                                                                                                                    <option value=\"America/Guatemala\">Central America Standard Time (America/Guatemala)</option>\n                                                                                                                    <option value=\"America/Manaus\">Central Brazilian Standard Time (America/Manaus)</option>\n                                                                                                                    <option value=\"America/Chicago\">Central Standard Time (America/Chicago)</option>\n                                                                                                                    <option value=\"America/Mexico_City\">Central Standard Time (Mexico) (America/Mexico_City)</option>\n                                                                                                                    <option value=\"America/Sao_Paulo\">E. South America Standard Time (America/Sao_Paulo)</option>\n                                                                                                                    <option value=\"America/New_York\">Eastern Standard Time (America/New_York)</option>\n                                                                                                                    <option value=\"America/Godthab\">Greenland Standard Time (America/Godthab)</option>\n                                                                                                                    <option value=\"America/Chihuahua\">Mexico Standard Time 2 (America/Chihuahua)</option>\n                                                                                                                    <option value=\"America/Montevideo\">Montevideo Standard Time (America/Montevideo)</option>\n                                                                                                                    <option value=\"America/Denver\">Mountain Standard Time (America/Denver)</option>\n                                                                                                                    <option value=\"America/St_Johns\">Newfoundland Standard Time (America/St_Johns)</option>\n                                                                                                                    <option value=\"America/Santiago\">Pacific SA Standard Time (America/Santiago)</option>\n                                                                                                                    <option value=\"America/Los_Angeles\">Pacific Standard Time (America/Los_Angeles)</option>\n                                                                                                                    <option value=\"America/Tijuana\">Pacific Standard Time (Mexico) (America/Tijuana)</option>\n                                                                                                                    <option value=\"America/Bogota\">SA Pacific Standard Time (America/Bogota)</option>\n                                                                                                                    <option value=\"America/La_Paz\">SA Western Standard Time (America/La_Paz)</option>\n                                                                                                                    <option value=\"America/Phoenix\">US Mountain Standard Time (America/Phoenix)</option>\n                                                                                                                    <option value=\"America/Caracas\">Venezuela Standard Time (America/Caracas)</option>\n                                                                                                        </select>\n                                            </div>\n                                        </div>\n                                    </li>\n                                                                                                                                                                                                                                                                                            </ul>\n                            </div>\n\n                            \n                            <!-- Web-form -->\n\n                            \n                            \n\n                            <div class=\"fieldset buttons-set\">\n                                <p class=\"required\">* Required Fields</p>\n                                <button type=\"button\" class=\"btn btn-large btn-primary\" id=\"webform_236_submit_button\" onclick=\"webform_236_submit()\" title=\"submit\">\n                        <span>\n                            <span>Submit</span>\n                        </span>\n                                </button>\n                    <span class=\"please-wait\" id=\"webform_236_sending_data\" style=\"display:none;\">\n                        <img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/opc-ajax-loader.gif\" alt=\"Sending...\" title=\"Sending...\" class=\"v-middle\" /><span id=\"webform_236_progress_text\">Sending...</span>\n                    </span>\n                            </div>\n                        </form>\n                        <script type=\"text/javascript\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/js/vendor/htmlspecialchars_decode.js\"></script>\n<script type=\"text/javascript\">\n//<![CDATA[\nvar webform_236 = new VarienForm('webform_236', 0);\nvar webform_236_submit = function(){\n\tvar form = webform_236;\n\tif(form.validator && form.validator.validate()){\n\t\tform.submit();\n\t\t\t\t$('webform_236_submit_button').hide();\n\t\t$('webform_236_sending_data').show();\n\t\t\t}\n};\n\nvar iframe = $('webform_236_iframe');\niframe.observe('load',function(){\n\tvar doc = this.contentDocument ? this.contentDocument: this.contentWindow.document;\n\tvar json = {success:false};\n\n\tif(doc.body.innerHTML.unfilterJSON())\n\t\tjson = doc.body.innerHTML.evalJSON();\n\telse return;\n\n\tif(json.success > 0){\n\t\tif(json.script){\n\t\t\teval(json.script);\n\t\t\treturn;\n\t\t}\n\n\t\tif(json.is_refresh) {\n\t\t\t\tlocation.reload(true);\n\t\t\t\treturn;\n\t\t}\n\n\t\tif(json.html) {\n\t\t\tjQuery('#last-step').html(htmlspecialchars_decode(json.html, ['ENT_QUOTES']));\n\t\t}\n\t\tif(!json.popup) {\n\t\t\tif(json.redirect_url){\n\t\t\t\t$('webform_236_progress_text').update('Redirecting');\n\t\t\t\twindow.location = json.redirect_url;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t$('webform_236_progress_text').update('Complete');\n\t\tEffect.Fade('webform_236_form',{\n\t\t\tduration: 0.5, from:1, to:0,\n\t\t\tafterFinish: function(){\n\t\t\t\t$('webform_236_success_text').update(json.success_text.unescapeHTML()).show();\n\t\t\t\tEffect.Fade('webform_236_success_text',{\n\t\t\t\t\tduration:0.5, from:0, to:1\n\t\t\t\t});\n\t\t\t\tif(0) $('webform_236_success_text').scrollTo();\n\t\t\t}\n\t\t\t\n\t\t});\n\t\tjQuery('.al-authorization-container-overlap').hide();\n\t\tif(json.popup) {\n            if(json.sms_verification_popup){\n                if(json.is_institutional){\n                    jQuery('#institutional-wrapper').html(htmlspecialchars_decode(json.infomation_form, ['ENT_QUOTES']));\n                }\n\t\t\t\tjQuery.fancybox({\n\t\t\t\t\tpadding     : 0,\n\t\t\t\t\twidth\t\t: '98%',\n\t\t\t\t\theight\t\t: 'auto',\n\t\t\t\t\tmaxWidth    : 420,\n\t\t\t\t\twrapCSS     : 'verification-popup',\n\t\t\t\t\tautoSize    : false,\n\t\t\t\t\tfitToView\t: false,\n\t\t\t\t\tcloseBtn    : false,\n\t\t\t\t\ttype        : 'html',\n\t\t\t\t\thref        : htmlspecialchars_decode(json.sms_verification_popup, ['ENT_QUOTES']),\n\t\t\t\t\thelpers     : {\n\t\t\t\t\t\toverlay : {closeClick: false}\n\t\t\t\t\t},\n\t\t\t\t\tkeys        : {\n\t\t\t\t\t\tclose  : null\n\t\t\t\t\t},\n\t\t\t\t\tafterLoad\t: function() {\n\t\t\t\t\t\tjQuery('#signup-affiliate').modal('hide');\n\t\t\t\t\t\tjQuery('#signup-broker').modal('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n            }\n            else{\n                if(json.is_institutional){\n                    jQuery('#institutional-wrapper').html(htmlspecialchars_decode(json.infomation_form, ['ENT_QUOTES']));\n                    jQuery('#institutional-wrapper').modal();\n\t\t\t\t\t\t\t\t\t\tjQuery('#institutional-wrapper').on('shown.bs.modal', function () {\n\t\t\t\t\t\tADDRESSCOMPLETE_INSTI.method.initialize();\n\t\t\t\t\t});\n\t\t\t\t\t                }\n                else{\n\t\t\t\t\tif(json.is_affiliate || json.is_broker){\n\t\t\t\t\t\tif(json.redirect_url){\n\t\t\t\t\t\t\tjQuery('#signup-affiliate').modal('hide');\n\t\t\t\t\t\t\tjQuery('#signup-broker').modal('hide');\n\t\t\t\t\t\t\t$('webform_236_progress_text').update('Redirecting');\n\t\t\t\t\t\t\twindow.location = json.redirect_url;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tjQuery.fancybox({\n\t\t\t\t\t\t\tpadding     : 20,\n\t\t\t\t\t\t\twidth\t\t: '98%',\n\t\t\t\t\t\t\theight\t\t: 'auto',\n\t\t\t\t\t\t\tmaxWidth    : 900,\n\t\t\t\t\t\t\twrapCSS     : 'pol-messages-popup',\n\t\t\t\t\t\t\tautoSize    : false,\n\t\t\t\t\t\t\tfitToView\t: false,\n\t\t\t\t\t\t\tscrolling\t: 'no',\n\t\t\t\t\t\t\ttype        : 'inline',\n\t\t\t\t\t\t\thref        : '#last-step',\n\t\t\t\t\t\t\tcloseBtn    : false,\n\t\t\t\t\t\t\thelpers     : {\n\t\t\t\t\t\t\t\toverlay : {closeClick: false}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkeys        : {\n\t\t\t\t\t\t\t\tclose  : null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tafterClose: function(){\n\t\t\t\t\t\t\t\tjQuery(\"#cboxLoadingOverlay\").remove();\n\t\t\t\t\t\t\t\tjQuery(\"#cboxLoadingGraphic\").remove();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlocation.reload(true);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n                }\n            }\n\t\t\treturn;\n\t\t}\n\t\t\n\t} else {\n\t\tif($('webform_236_sending_data'))\n\t\t\t$('webform_236_sending_data').hide();\n\t\tif($('webform_236_submit_button'))\n\t\t\t$('webform_236_submit_button').show();\n\t\tif(json.errors && typeof(json.errors) == \"string\"){\n\t\t\tif(jQuery('.webform--message').size()) {\n\t\t\t\tjQuery('.webform--message').addClass('error');\n\t\t\t\tjQuery('.webform--message').html(json.errors.unescapeHTML());\n\t\t\t\tjQuery('.webform--message').show();\n\t\t\t} else {\n\t\t\t\tDialog.info(json.errors.unescapeHTML(),{\n\t\t\t\t\ttitle: \"Error(s) occured\",\n\t\t\t\t\tclassName: \"alphacube\",\n\t\t\t\t\twidth:300, \n\t\t\t\t\tbuttonClass: \"button\",\n\t\t\t\t\tokLabel: \"Close\",\n\t\t\t\t\tdestroyOnClose: true, \n\t\t\t\t\trecenterAuto:true\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\talert('Error(s) occured');\n\t\t}\n\t\tif(json.script){\n\t\t\teval(json.script);\n\t\t}\n\t}\n});\n//]]>\n</script>\n                        <script type=\"text/javascript\">\n                            //<![CDATA[\n                                                        //]]>\n                        </script>\n                    </div>\n\n                            </div>\n        </div>\n    </div>\n</div><script type=\"text/javascript\">window.NREUM||(NREUM={});NREUM.info={\"beacon\":\"bam.nr-data.net\",\"licenseKey\":\"7a62d50f67\",\"applicationID\":\"4396047\",\"transactionName\":\"MQNRMkcFXBdQUxEIWAhJcBNGEF0JHlMEFVYKCVRJVgVGAVZfFxgYEA9WEQ==\",\"queueTime\":0,\"applicationTime\":1460,\"atts\":\"HURSRA8fTxk=\",\"errorBeacon\":\"bam.nr-data.net\",\"agent\":\"js-agent.newrelic.com\\/nr-686.min.js\"}</script><!-- Start of Zendesk Widget script -->\n<script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement(\"iframe\");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src=\"javascript:false\",r.title=\"\",r.role=\"presentation\",(r.frameElement||r).style.cssText=\"display: none\",d=document.getElementsByTagName(\"script\"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain=\"'+n+'\";void(0);',o=s}o.open()._l=function(){var o=this.createElement(\"script\");n&&(this.domain=n),o.id=\"js-iframe-async\",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload=\"document._l();\">'),o.close()}(\"https://assets.zendesk.com/embeddable_framework/main.js\",\"patchofland.zendesk.com\");/*]]>*/</script>\n<!-- End of Zendesk Widget script -->\n\t\t<script src=\"https://cdn.patchofland.com/skin/frontend/default/pol/js/infinitescroll/ias_config.js\"></script>\n<script type=\"text/javascript\">\n//<![CDATA[\n\twindowLoadedFlag = false;\n\twindow.onload = function () {\n\t\twindowLoadedFlag = true;\n\t};\n\n\t\tvar jQueryWaiter = function () {\n\t\tvar functions = [];\n\t\tvar timer = function() {\n\t\t\tif( typeof window.jQuery != 'undefined') {\n\t\t\t\twhile (functions.length) {\n\t\t\t\t\tfunctions.shift()(window.jQuery);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(timer, 100);\n\t\t\t}\n\t\t};\n\t\ttimer();\n\t\treturn {\n\t\t\texecute: function(onJQueryReady) {\n\t\t\t\tif (window.jQuery) {\n\t\t\t\t\tonJQueryReady(window.jQuery);\n\t\t\t\t} else {\n\t\t\t\t\tfunctions.push(onJQueryReady);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\twindow.SgyIAS = {\n\t\tdebug: false,\n\t\t_log: function(object) {\n\t\t\tif(this.debug) {\n\t\t\t\tconsole.log(object);\n\t\t\t}\n\t\t},\n\t\tinit: function(){\n\t\t\tjQuery.getScript(\"https://cdn.patchofland.com/js/jquery/infinitescroll/jquery-ias.min.js\", function() {\n\t\t\t\t\tjQuery(function($) {\n\t\t\t\t\t\tvar config = {\n\t\t\t\t\t\t\titem: '.products-grid',\n\t\t\t\t\t\t\tcontainer : '.category-products',\n\t\t\t\t\t\t\tnext: '.next',\n\t\t\t\t\t\t\tpagination: '.toolbar-bottom .toolbar .pages',\n\t\t\t\t\t\t\tdelay: 600,\n\t\t\t\t\t\t\tnegativeMargin: 0,\n\t\t\t\t\t\t\thistory: {\n\t\t\t\t\t\t\t\tprev: '.previous'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoneleft: {\n\t\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\t\thtml: '<div class=\"ias-noneleft\" style=\"text-align: center;\">{text}</div>'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tspinner: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsrc: 'data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thtml: '<div class=\"ias-spinner\" style=\"text-align: center;\"><img style=\"display:inline\" src=\"{src}\"/> <em>Loading investments...</em></div>'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttrigger: {\n\t\t\t\t\t\t\t\ttext: 'Load more investments',\n\t\t\t\t\t\t\t\thtml: '<div class=\"ias-trigger ias-trigger-next\" style=\"text-align: center; cursor: pointer;\"><a>{text}</a></div>',\n\t\t\t\t\t\t\t\ttextPrev: 'Load previous investments',\n\t\t\t\t\t\t\t\thtmlPrev: '<div class=\"ias-trigger ias-trigger-prev\" style=\"text-align: center; cursor: pointer;\"><a>Load previous investments</a></div>',\n\t\t\t\t\t\t\t\toffset: 9999\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (window.ias_config){\n\t\t\t\t\t\t\t$.extend(config, window.ias_config);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tSgyIAS._log({extension: 'ias', config: config});\n\t\t\t\t\t\twindow.ias = $.ias(config);\n\n\t\t\t\t\t\tSgyIAS._log({extension: 'paging'});\n\t\t\t\t\t\twindow.ias.extension(new IASPagingExtension());\n\n\t\t\t\t\t\tSgyIAS._log({extension: 'spinner'});\n\t\t\t\t\t\twindow.ias.extension(new IASSpinnerExtension(config.spinner));\n\n\t\t\t\t\t\tSgyIAS._log({extension: 'noneleft'});\n\t\t\t\t\t\twindow.ias.extension(new IASNoneLeftExtension(config.noneleft));\n\n\t\t\t\t\t\tSgyIAS._log({extension: 'trigger'});\n\t\t\t\t\t\twindow.ias.extension(new IASTriggerExtension(config.trigger));\n\n\t\t\t\t\t\t\t\t\t\t\t\tSgyIAS._log({extension: 'history'});\n\t\t\t\t\t\twindow.ias.extension(new IASHistoryExtension(config.history));\n\t\t\t\t\t\t\n\t\t\t\t\t\t// debug events\n\t\t\t\t\t\twindow.ias.on('scroll', function(scrollOffset, scrollThreshold){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'scroll', scrollOffset: scrollOffset, scrollThreshold: scrollThreshold});\n\t\t\t\t\t\t\tjQuery('.products-grid').each(function(){\n\t\t\t\t\t\t\t\tvar container = jQuery(this).find('.descbox ul');\n\t\t\t\t\t\t\t\tequalHeight(container);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('load', function(event){\n\t\t\t\t\t\t\tSgyIAS._log({eventName:'load', event: event});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('loaded', function(data, items){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'loaded', data: data, items: items});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('render', function(items){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'render', items: items});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('rendered', function(items){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'rendered', items: items});\n\n\t\t\t\t\t\t\tjQuery('.products-grid').each(function(){\n\t\t\t\t\t\t\t\tvar container = jQuery(this).find('.descbox ul');\n\t\t\t\t\t\t\t\tequalHeight(container);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif(jQuery(\".tooltip-archived\").length > 0){\n\t\t\t\t\t\t\t\tjQuery('.tooltip-archived').tooltipster({\n\t\t\t\t\t\t\t\t\tcontentAsHTML: true,\n\t\t\t\t\t\t\t\t\tcontent: jQuery('<p>This opportunity has been fully funded and is now archived. <br />Investors in this opportunity can continue to view details using the link <br />in the My Investments section inside your account dashboard.</p>'),\n\t\t\t\t\t\t\t\t\ttheme: 'tooltipster-pol tooltipster-pollist',\n\t\t\t\t\t\t\t\t\t//maxWidth: 200,\n\t\t\t\t\t\t\t\t\t//trigger: 'click'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('noneLeft', function(){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'noneLeft'});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('next', function(url){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'next', url: url});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('prev', function(url){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'prev', url: url});\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindow.ias.on('ready', function(){\n\t\t\t\t\t\t\tSgyIAS._log({eventName: 'ready'});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$('.toolbar-bottom .toolbar').hide();\n\n\t\t\t\t\t\tif(windowLoadedFlag){\n\t\t\t\t\t\t\t$(window).load();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tSgyIAS._log('Done loading IAS.');\n\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\t\tjQueryWaiter.execute(function(){\n\t\tSgyIAS.init();\n\t});\n//]]>\n</script>\n\n<script type=\"text/javascript\">\n    if ( typeof AjaxLogin == 'undefined' ) {\n        AjaxLogin = {};\n    }\n    \n    AjaxLogin.BASE_URL_UNSECURE = 'https://patchofland.com/';\n    AjaxLogin.BASE_URL_SECURE   = 'https://patchofland.com/';\n    \n    AjaxLogin.BASE_URL          = AjaxLogin.BASE_URL_UNSECURE;\n    \n    \n    /**\n     * \n     */\n    AjaxLogin.sameRoutines = function(urlA, urlB) {\n        if ( typeof urlA != 'string' ) urlA = urlA.toString();\n        if ( typeof urlB != 'string' ) urlB = urlB.toString();\n        urlA = urlA.replace('https://','http://');\n        urlB = urlB.replace('https://','http://');\n        /*\n        if ( urlA.indexOf(AjaxLogin.BASE_URL_UNSECURE) > -1 ) {\n            __routineA_Parts = urlA.split(AjaxLogin.BASE_URL_UNSECURE).join('').split('/').splice(0, 3);\n        }\n        else if ( urlA.indexOf(AjaxLogin.BASE_URL_SECURE) > -1 ) {\n            __routineA_Parts = urlA.split(AjaxLogin.BASE_URL_SECURE).join('').split('/').splice(0, 3);\n        }\n        else {\n            return false;\n        }\n        \n        if ( urlB.indexOf(AjaxLogin.BASE_URL_UNSECURE) > -1 ) {\n            __routineB_Parts = urlB.split(AjaxLogin.BASE_URL_UNSECURE).join('').split('/').splice(0, 3);\n        }\n        else if ( urlB.indexOf(AjaxLogin.BASE_URL_SECURE) > -1 ) {\n            __routineB_Parts = urlB.split(AjaxLogin.BASE_URL_SECURE).join('').split('/').splice(0, 3);\n        }\n        else {\n            return false;\n        }\n        \n        for ( var __index = 0; __index < 3; __index++ ) {\n            if ( (typeof __routineA_Parts[__index] == 'undefined') || (!__routineA_Parts[__index]) ) {\n                __routineA_Parts[__index] = 'index';\n            }\n            if ( (typeof __routineB_Parts[__index] == 'undefined') || (!__routineB_Parts[__index]) ) {\n                __routineB_Parts[__index] = 'index';\n            }\n        }\n        \n        __routineA = __routineA_Parts.join('/');\n        __routineB = __routineB_Parts.join('/');\n        */\n        return urlA == urlB ? true : false;\n    };\n    \n    $$('.ajaxable a').each(\n        function(node) {\n            if ( AjaxLogin.sameRoutines(node.href, 'https://patchofland.com/customer/account/login/') ) {\n                Event.observe(\n                    node,\n                    'click',\n                    function(event) {\n\n                        jQuery('#signup-choose-type').modal('hide');\n                        jQuery('#signup-affiliate').modal('hide');\n                        jQuery('#signup-broker').modal('hide');\n\n                        var __overlapRootNode = $$('.al-authorization-container-overlap')[0];\n                        __overlapRootNode.style.display = '';\n                        var __overlapAuthorizationNode = $$('.al-authorization-container-overlap .al-authorization')[0];\n                        var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                        __overlapAuthorizationInstance.switchToFrame('login');\n                        event.stopImmediatePropagation();\n                        if (window.event) window.event.cancelBubble = true;\n                        if (window.event) window.event.returnValue = false;\n                        event.preventDefault();\n                        event.stopPropagation();\n                        Event.stop(event);\n                        return false;\n                    }\n                );\n            }\n            if ( AjaxLogin.sameRoutines(node.href, 'https://patchofland.com/customer/account/logout/') ) {\n                Event.observe(\n                    node,\n                    'click',\n                    function(event) {\n                        Event.stop(event);\n                        var __overlapAuthorizationNode = $$('.al-authorization-container-overlap .al-authorization')[0];\n                        var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                        __overlapAuthorizationInstance.getFrame('login').logout();\n                        event.stopImmediatePropagation();\n                        if (window.event) window.event.cancelBubble = true;\n                        if (window.event) window.event.returnValue = false;\n                        mixpanel.track('Clicked nav account dropdown link',{ 'name' : 'Logout' });\n                        mixpanel.people.increment( \"Account nav dropdown links clicked\" );\n                        event.preventDefault();\n                        event.stopPropagation();\n                        return false;\n                    }\n                );\n            }\n            if ( AjaxLogin.sameRoutines(node.href, 'https://patchofland.com/customer/account/create/') ) {\n                Event.observe(\n                    node,\n                    'click',\n                    function(event) {\n                        Event.stop(event);\n\n                        if(jQuery('#signup-choose-type').is(':visible')){\n                            return false;\n                        } else{\n                            jQuery('#signup-broker').modal('hide');\n                            jQuery('#signup-affiliate').modal('hide');\n                            jQuery('#signup-choose-type').modal('show');\n                        }\n\n                        var __overlapRootNode = $$('.al-authorization-container-overlap')[0];\n                            __overlapRootNode.style.display = 'none';\n                        var __overlapAuthorizationNode = $$('.al-authorization-container-overlap .al-authorization')[0];\n                        var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                        __overlapAuthorizationInstance.switchToFrame('register');\n                        event.stopImmediatePropagation();\n                        if (window.event) window.event.cancelBubble = true;\n                        if (window.event) window.event.returnValue = false;\n                        event.preventDefault();\n                        event.stopPropagation();\n                        return false;\n                    }\n                );\n            }\n        }\n    );\n    \n    \n    /**\n     * \n     */\n    if ( typeof window.mainNav == 'function' ) {\n        mainNav(\"nav\", {\"show_delay\":\"100\",\"hide_delay\":\"100\"});\n    }\n    \n    \n    /**\n     * \n     */\n    Event.observe(\n        window,\n        'load',\n        function() {\n            if (typeof window.customer_dob != 'undefined') {\n                delete window.customer_dob;\n                \n                var __rootNode = $$('.customer-dob')[0];\n                new Varien.DateElement(\n                    'container',\n                    {\n                        month  : Element.select(__rootNode, '.dob-month input')[0],\n                        day    : Element.select(__rootNode, '.dob-day input')[0],\n                        year   : Element.select(__rootNode, '.dob-year input')[0],\n                        full   : Element.select(__rootNode, '.dob-full input')[0],\n                        advice : Element.select(__rootNode, '.validation-advice')[0]\n                    },\n                    true,\n                    AjaxLogin.DATE_FORMAT\n                );\n            }\n        }\n    );\n</script>\n    </div>\n</div>\n<div class=\"alProgressBar\" style=\"display: none;\">\n    <div class=\"Shadow\"></div>\n    <div class=\"loading-mask\">\n        <p class=\"loader\" id=\"loading_mask_loader\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/ajaxlogin/ajax-loader-tr.gif\" alt=\"Loading...\" /><br />Please wait...</p>\n    </div>\n</div>\n\n<div class=\"al-authorization-container-overlap\" id=\"node-uid-ajaxlogin-2\" style=\"display: none;\">\n    <div class=\"Shadow\"></div>\n    <div class=\"Canvas\">\n        <div class=\"Shadowed\">\n            <div class=\"Wrapper\">\n                <div class=\"al-authorization\" id=\"node-uid-ajaxlogin-3\">\n    <div class=\"Window\">\n                    <div class=\"Frame\" style=\"display: none;\">\n                <div class=\"al-authorizationform-login\">\n        <form action=\"https://patchofland.com/ajaxlogin/index/loginPost/\" method=\"post\" id=\"login-form\">\n            <ul class=\"form-list\">\n                                \t<li>\n                        <div class=\"Title\">\n            <h2>Login or Create an Account</h2>\n    </div>                    </li>\n                                \t<li>\n                        <div class=\"al-socialnets\" id=\"sociallogin\">\n\t<!--h4>One click login with:</h4-->\n    <div class=\"sociallogin-icon\">\n                                <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-facebook\" id=\"ajaxlogin-4\" title=\"Login by Facebook\"><span><span>Facebook</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-4');\n        __imageNode.observe(\n            'click',\n            function(imageNode) {\n                return function(event) {\n                    FB.getLoginStatus(\n                        function(imageNode) {\n                            return function(response) {\n                                if (response.status === 'connected') {\n                                    __facebookDoAuth(response.authResponse.accessToken, imageNode);\n                                }\n                                else {\n                                    FB.login(\n                                        function (imageNode) {\n                                            return function(response) {\n                                                if (response.status === 'connected') {\n                                                    __facebookDoAuth(imageNode);\n                                                }\n                                            };\n                                        }\n                                        (imageNode),\n                                        { scope: 'email' }\n                                    );\n                                }\n                            };\n                        }\n                        (imageNode)\n                    );\n                };\n            }\n            (__imageNode)\n        );\n    </script>\n                                            <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-google\" id=\"ajaxlogin-5\" title=\"Login by Google\"><span><span>Google</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-5');\n        __imageNode.observe('click', function() { AjaxLogin.Google.auth(); });\n    </script>\n                                            <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-linked-in\" id=\"ajaxlogin-6\" title=\"Login by Linked In\"><span><span>Linked In</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-6');\n        \n        __imageNode.observe('click', function() { AjaxLogin.LinkedIn.auth(AjaxLogin.Authorization.__getInstanceByChildnode(__imageNode)); });\n    </script>\n                        </div>\n    \n    <p class=\"or\">Login using a service above or manually below</p>\n</div>                    </li>\n                                \t<li>\n                        <label for=\"email\" class=\"required\"><em>*</em>Email Address</label>\n<div class=\"input-box\">\n    <input\n        type=\"text\"\n        name=\"email\"\n        value=\"\"\n        id=\"al_auth_login_email\"\n        class=\"input-text required-entry validate-email\"\n        title=\"Email Address\"\n    />\n</div>                    </li>\n                                \t<li>\n                        <label for=\"pass\" class=\"required\"><em>*</em>Password</label>\n<div class=\"input-box\">\n    <input\n        type=\"password\"\n        name=\"password\"\n        class=\"input-text required-entry validate-password\"\n        title=\"Password\"\n        id=\"al_auth_login_password\"\n    />\n</div>                    </li>\n                                \t<li>\n                        <ul class=\"messages Shaddy\" style=\"display: none;\">\n    <li class=\"error-msg\">&nbsp;</li>\n</ul>\n<div class=\"buttons-set\">\n    <p class=\"required\">* Required Fields</p>\n    <span class=\"f-left\">\n            <a style=\"font-size:1.4em;\" href=\"https://patchofland.com/customer/account/create/\" id=\"node-uid-ajaxlogin-7\">Create an Account</a><br />\n                <a href=\"https://patchofland.com/customer/account/forgotpassword/\" id=\"node-uid-ajaxlogin-8\">Forgot Your Password?</a>\n        </span>\n    <button type=\"submit\" class=\"btn btn-primary\" title=\"Login\" name=\"send\" id=\"send2\"><span><span>Login</span></span></button>\n</div>\n\n<script type=\"text/javascript\">\n    Event.observe(\n        window,\n        'load',\n        function() {\n            var __node;\n            \n            __node = $('node-uid-ajaxlogin-8');\n            if ( __node ) __node.observe(\n                'click',\n                function(event) {\n                    AjaxLogin.Authorization.__getInstanceByChildnode(this).switchToFrame('recovery');\n                    if (window.event) window.event.cancelBubble = true;\n                    if (window.event) window.event.returnValue = false;\n                    event.preventDefault();\n                    event.stopPropagation();\n                    return false;\n                }\n            );\n            \n            __node = $('node-uid-ajaxlogin-7')\n            if ( __node ) __node.observe(\n                'click',\n                function(event) {\n                    AjaxLogin.Authorization.__getInstanceByChildnode(this).switchToFrame('register');\n                    if (window.event) window.event.cancelBubble = true;\n                    if (window.event) window.event.returnValue = false;\n                    event.preventDefault();\n                    event.stopPropagation();\n                    return false;\n                }\n            );\n        }\n    );\n    \n    jQuery(\"#login-form\").keypress(function (evt) {\n\t    var charCode = evt.charCode || evt.keyCode;\n\t    if (charCode  == 13) { \n\t    \tjQuery('button#send2').click();\n\t\t    return false;\n\t\t}\n\t});\n</script>                    </li>\n                            </ul>\n        </form>\n        <form action=\"https://patchofland.com/ajaxlogin/index/logoutPost/\" method=\"get\" id=\"logout-form\"></form>\n    </div>\n            </div>\n                    <div class=\"Frame\" style=\"display: none;\">\n                    <div class=\"al-authorizationform-register\">\n    \t<div class=\"Title\">\n    \t<h2>Create an Investor Account</h2>\n    <h4>Real Estate Developer? <a style=\"color:#16a085\" href=\"https://patchofland.com/developer-information\">Sign up here!</a></h4>\n</div>\t\n<div class=\"account-create\">\n\t\t\t<div class=\"webform--message\" id=\"webform_message\" style=\"display:none\"></div>\n\t\t<div class=\"page-title\">\n\t\t<div class=\"prefix-para\">In order to see the investments available on our platform, we need to know a bit about you. This helps us comply with US government \"Know Your Customer\" rules. <strong>We do not sell or share personal information.</strong></div><div class=\"al-socialnets\" id=\"sociallogin_button\">\n    <div class=\"sociallogin-icon\">\n                                <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-facebook\" id=\"ajaxlogin-9\" title=\"Login by Facebook\"><span><span>Facebook</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-9');\n        __imageNode.observe(\n            'click',\n            function(imageNode) {\n                return function(event) {\n                    FB.getLoginStatus(\n                        function(imageNode) {\n                            return function(response) {\n                                if (response.status === 'connected') {\n                                    __facebookDoAuth(response.authResponse.accessToken, imageNode);\n                                }\n                                else {\n                                    FB.login(\n                                        function (imageNode) {\n                                            return function(response) {\n                                                if (response.status === 'connected') {\n                                                    __facebookDoAuth(imageNode);\n                                                }\n                                            };\n                                        }\n                                        (imageNode),\n                                        { scope: 'email' }\n                                    );\n                                }\n                            };\n                        }\n                        (imageNode)\n                    );\n                };\n            }\n            (__imageNode)\n        );\n    </script>\n                                            <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-google\" id=\"ajaxlogin-10\" title=\"Login by Google\"><span><span>Google</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-10');\n        __imageNode.observe('click', function() { AjaxLogin.Google.auth(); });\n    </script>\n                                            <a href=\"#fakelink\" class=\"bt-login-social btn btn-primary btn-linked-in\" id=\"ajaxlogin-11\" title=\"Login by Linked In\"><span><span>Linked In</span></span></a>\n                <script type=\"text/javascript\">\n        var __imageNode = $('ajaxlogin-11');\n        \n        __imageNode.observe('click', function() { AjaxLogin.LinkedIn.auth(AjaxLogin.Authorization.__getInstanceByChildnode(__imageNode)); });\n    </script>\n                        </div>\n    <!--p class=\"or\">Use a service above or register manually below</p-->\n</div>\t</div>\t\n\t\t\t<div id=\"webform_225_success_text\" class=\"std webforms-success-text\" style=\"display:none\"></div>\n\t\n\t\n\t<div id=\"webform_225_form\">\n\n\t\n\t\t<iframe id=\"webform_225_iframe\" name=\"webform_225_iframe\" style=\"width:0;height:0;border:0;position:absolute\"></iframe>\n\t\n\t<form action=\"https://patchofland.com/webformscrf/index/create/\" method=\"post\" name=\"webform_225\" id=\"webform_225\" enctype=\"application/x-www-form-urlencoded\" class=\"register-webform webforms-\" target=\"webform_225_iframe\">\n\n\t\t\t\t<input type=\"hidden\" name=\"webForm_isAjax\" value=\"1\"/>\n\t\t\t\t<input type=\"hidden\" name=\"submitWebform_225\" value=\"1\"/>\n\t\t<input type=\"hidden\" name=\"webform_id\" value=\"225\"/>\n\t\t\n\t\t\n\t\t\t\t\n\t\t<!-- Default registration fields -->\n\t\n\t\t<div class=\"fieldset\">\n\t\t\t<input type=\"hidden\" name=\"success_url\" value=\"\" />\n\t\t\t<input type=\"hidden\" name=\"error_url\" value=\"\" />\n\t\t\t<!--h2 class=\"legend\">Personal Information</h2-->\n\t\t\t<ul class=\"form-list\">\n\t\t\t\t<li class=\"fields\">\n\t\t\t\t\t<div class=\"customer-name\">\n    <div class=\"field name-firstname\">\n        <label for=\"firstname\" class=\"required\"><em>*</em>First Name</label>\n        <div class=\"input-box\">\n            <input type=\"text\" id=\"firstname\" name=\"firstname\" value=\"\" title=\"First Name\" maxlength=\"255\" class=\"input-text required-entry\"  />\n        </div>\n    </div>\n    <div class=\"field name-lastname\">\n        <label for=\"lastname\" class=\"required\"><em>*</em>Last Name</label>\n        <div class=\"input-box\">\n            <input type=\"text\" id=\"lastname\" name=\"lastname\" value=\"\" title=\"Last Name\" maxlength=\"255\" class=\"input-text required-entry\"  />\n        </div>\n    </div>\n</div>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"fields\">\n\t\t\t\t\t<div class=\"field\">\n\t\t\t\t\t\t<label for=\"email_address\" class=\"required\"><em>*</em>Email Address</label>\n\t\t\t\t\t\t<div class=\"input-box\">\n\t\t\t\t\t\t\t<input type=\"text\" name=\"email\" id=\"email_address\" value=\"\" title=\"Email Address\" class=\"input-text validate-email required-entry\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"field\">\n\t\t\t\t\t\t<label for=\"password\" class=\"required\"><em>*</em>Password</label>\n\t\t\t\t\t\t<div class=\"input-box\">\n\t\t\t\t\t\t\t<input type=\"password\" name=\"password\" id=\"ajax-password\" title=\"Password\" class=\"input-text required-entry validate-password\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n                <li class=\"fields\">\n                    <div class=\"field\">\n                        <label for=\"phone_number\" class=\"required\"><em>*</em>Mobile Number</label>\n                        <div class=\"input-box\">\n                            <input type=\"text\" name=\"phone_number\" id=\"phone_number\" value=\"\" title=\"Phone Number\" class=\"input-text validate-phone required-entry\" />\n                            <script type=\"text/javascript\">\n                                jQuery(document).on(\"focus\", \"#phone_number\", function() {\n                                    jQuery(this).mask(\"9999999999\");\n                                });\n                            </script>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"timezone\" class=\"required\"><em>*</em>Timezone</label>\n                        <div class=\"input-box\">\n                            \t\t\t\t\t\t\t<select name=\"timezone\" id=\"timezone\" class=\"validate-select required-entry\">\n\t\t\t\t\t\t\t\t<option value=\"\">Select an option</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Anchorage\">Alaskan Standard Time (America/Anchorage)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Buenos_Aires\">Argentina Standard Time (America/Buenos_Aires)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Halifax\">Atlantic Standard Time (America/Halifax)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Regina\">Canada Central Standard Time (America/Regina)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Guatemala\">Central America Standard Time (America/Guatemala)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Manaus\">Central Brazilian Standard Time (America/Manaus)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Chicago\">Central Standard Time (America/Chicago)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Mexico_City\">Central Standard Time (Mexico) (America/Mexico_City)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Sao_Paulo\">E. South America Standard Time (America/Sao_Paulo)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/New_York\">Eastern Standard Time (America/New_York)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Godthab\">Greenland Standard Time (America/Godthab)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Chihuahua\">Mexico Standard Time 2 (America/Chihuahua)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Montevideo\">Montevideo Standard Time (America/Montevideo)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Denver\">Mountain Standard Time (America/Denver)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/St_Johns\">Newfoundland Standard Time (America/St_Johns)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Santiago\">Pacific SA Standard Time (America/Santiago)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Los_Angeles\">Pacific Standard Time (America/Los_Angeles)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Tijuana\">Pacific Standard Time (Mexico) (America/Tijuana)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Bogota\">SA Pacific Standard Time (America/Bogota)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/La_Paz\">SA Western Standard Time (America/La_Paz)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Phoenix\">US Mountain Standard Time (America/Phoenix)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"America/Caracas\">Venezuela Standard Time (America/Caracas)</option>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</select>\n                        </div>\n                    </div>\n                </li>\n\t\t\t\t<!--li>\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"field\">\n\t\t\t\t\t\t<label for=\"confirmation\" class=\"required\"><em>*</em>Confirm Password</label>\n\t\t\t\t\t\t<div class=\"input-box\">\n\t\t\t\t\t\t\t<input type=\"password\" name=\"confirmation\" title=\"Confirm Password\" id=\"confirmation\" class=\"input-text required-entry validate-cpassword\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</li-->\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"control control_privacy_policy\">\n\t\t\t\t\t<div class=\"control_privacy_policy\">\n\t\t\t\t\t\t<input type=\"checkbox\" id=\"is_privacy_policy\" name=\"is_privacy_policy\" value=\"1\" title=\"Accept the privacy policy\" class=\"checkbox required-entry\" />\n\t\t\t\t\t\t<label for=\"is_privacy_policy\">By registering, you accept the Patch of Land <a href=\"https://patchofland.com/terms/\" target=\"_blank\">terms of service</a> & <a href=\"https://patchofland.com/privacy-policy/\" target=\"_blank\">privacy policy</a>.</label>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t\t\t\n\t\t\t\t\n\t\t<!-- Web-form -->\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\n\t\t<div class=\"buttons-set\">\n\t\t\t<div class=\"row-fluid\">\t\n\t\t\t\t<div class=\"span6\">\n\t\t\t\t\t<p style=\"font-size: 1.2em;\" class=\"back-link\"><a href=\"https://patchofland.com/customer/account/login/referer/aHR0cHM6Ly9wYXRjaG9mbGFuZC5jb20vaW52ZXN0bWVudHMuaHRtbA,,/\" id=\"backtologin\">Already a member? Login</a></p>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"span3 offset3\">\n\t\t\t\t<button type=\"button\" class=\"btn btn-block btn-primary\" id=\"webform_225_submit_button\" onclick=\"webform_225_submit()\" title=\"submit\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<span>Submit</span>\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t\t<span class=\"please-wait\" id=\"webform_225_sending_data\" style=\"display:none;\">\n\t\t\t\t\t<img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/images/opc-ajax-loader.gif\" alt=\"Sending...\" title=\"Sending...\" class=\"v-middle\" /><span id=\"webform_225_progress_text\">Sending...</span>\n\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\t\n\t\t</div>\n\t\t<script type=\"text/javascript\">\n\t\t    Event.observe(\n\t\t        window,\n\t\t        'load',\n\t\t        function() {\n\t\t            $('backtologin').observe(\n\t\t                'click',\n\t\t                function(event) {\n\t\t                    AjaxLogin.Authorization.__getInstanceByChildnode(this).switchToFrame('login');\n\t\t                    if (window.event) window.event.cancelBubble = true;\n\t\t                    if (window.event) window.event.returnValue = false;\n\t\t                    event.preventDefault();\n\t\t                    event.stopPropagation();\n\t\t                    return false;\n\t\t                }\n\t\t            );\n\t\t        }\n\t\t    );\n\t\t</script>\t\n\t\t</form>\n\n\t</div>\n\n</div>\n\n<script type=\"text/javascript\" src=\"https://cdn.patchofland.com/skin/frontend/default/pol/js/vendor/htmlspecialchars_decode.js\"></script>\n<script type=\"text/javascript\">\n//<![CDATA[\nvar webform_225 = new VarienForm('webform_225', 0);\nvar webform_225_submit = function(){\n\tvar form = webform_225;\n\tif(form.validator && form.validator.validate()){\n\t\tform.submit();\n\t\t\t\t$('webform_225_submit_button').hide();\n\t\t$('webform_225_sending_data').show();\n\t\t\t}\n};\n\nvar iframe = $('webform_225_iframe');\niframe.observe('load',function(){\n\tvar doc = this.contentDocument ? this.contentDocument: this.contentWindow.document;\n\tvar json = {success:false};\n\n\tif(doc.body.innerHTML.unfilterJSON())\n\t\tjson = doc.body.innerHTML.evalJSON();\n\telse return;\n\n\tif(json.success > 0){\n\t\tif(json.script){\n\t\t\teval(json.script);\n\t\t\treturn;\n\t\t}\n\n\t\tif(json.is_refresh) {\n\t\t\t\tlocation.reload(true);\n\t\t\t\treturn;\n\t\t}\n\n\t\tif(json.html) {\n\t\t\tjQuery('#last-step').html(htmlspecialchars_decode(json.html, ['ENT_QUOTES']));\n\t\t}\n\t\tif(!json.popup) {\n\t\t\tif(json.redirect_url){\n\t\t\t\t$('webform_225_progress_text').update('Redirecting');\n\t\t\t\twindow.location = json.redirect_url;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t$('webform_225_progress_text').update('Complete');\n\t\tEffect.Fade('webform_225_form',{\n\t\t\tduration: 0.5, from:1, to:0,\n\t\t\tafterFinish: function(){\n\t\t\t\t$('webform_225_success_text').update(json.success_text.unescapeHTML()).show();\n\t\t\t\tEffect.Fade('webform_225_success_text',{\n\t\t\t\t\tduration:0.5, from:0, to:1\n\t\t\t\t});\n\t\t\t\tif(0) $('webform_225_success_text').scrollTo();\n\t\t\t}\n\t\t\t\n\t\t});\n\t\tjQuery('.al-authorization-container-overlap').hide();\n\t\tif(json.popup) {\n            if(json.sms_verification_popup){\n                if(json.is_institutional){\n                    jQuery('#institutional-wrapper').html(htmlspecialchars_decode(json.infomation_form, ['ENT_QUOTES']));\n                }\n\t\t\t\tjQuery.fancybox({\n\t\t\t\t\tpadding     : 0,\n\t\t\t\t\twidth\t\t: '98%',\n\t\t\t\t\theight\t\t: 'auto',\n\t\t\t\t\tmaxWidth    : 420,\n\t\t\t\t\twrapCSS     : 'verification-popup',\n\t\t\t\t\tautoSize    : false,\n\t\t\t\t\tfitToView\t: false,\n\t\t\t\t\tcloseBtn    : false,\n\t\t\t\t\ttype        : 'html',\n\t\t\t\t\thref        : htmlspecialchars_decode(json.sms_verification_popup, ['ENT_QUOTES']),\n\t\t\t\t\thelpers     : {\n\t\t\t\t\t\toverlay : {closeClick: false}\n\t\t\t\t\t},\n\t\t\t\t\tkeys        : {\n\t\t\t\t\t\tclose  : null\n\t\t\t\t\t},\n\t\t\t\t\tafterLoad\t: function() {\n\t\t\t\t\t\tjQuery('#signup-affiliate').modal('hide');\n\t\t\t\t\t\tjQuery('#signup-broker').modal('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n            }\n            else{\n                if(json.is_institutional){\n                    jQuery('#institutional-wrapper').html(htmlspecialchars_decode(json.infomation_form, ['ENT_QUOTES']));\n                    jQuery('#institutional-wrapper').modal();\n\t\t\t\t\t\t\t\t\t\tjQuery('#institutional-wrapper').on('shown.bs.modal', function () {\n\t\t\t\t\t\tADDRESSCOMPLETE_INSTI.method.initialize();\n\t\t\t\t\t});\n\t\t\t\t\t                }\n                else{\n\t\t\t\t\tif(json.is_affiliate || json.is_broker){\n\t\t\t\t\t\tif(json.redirect_url){\n\t\t\t\t\t\t\tjQuery('#signup-affiliate').modal('hide');\n\t\t\t\t\t\t\tjQuery('#signup-broker').modal('hide');\n\t\t\t\t\t\t\t$('webform_225_progress_text').update('Redirecting');\n\t\t\t\t\t\t\twindow.location = json.redirect_url;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tjQuery.fancybox({\n\t\t\t\t\t\t\tpadding     : 20,\n\t\t\t\t\t\t\twidth\t\t: '98%',\n\t\t\t\t\t\t\theight\t\t: 'auto',\n\t\t\t\t\t\t\tmaxWidth    : 900,\n\t\t\t\t\t\t\twrapCSS     : 'pol-messages-popup',\n\t\t\t\t\t\t\tautoSize    : false,\n\t\t\t\t\t\t\tfitToView\t: false,\n\t\t\t\t\t\t\tscrolling\t: 'no',\n\t\t\t\t\t\t\ttype        : 'inline',\n\t\t\t\t\t\t\thref        : '#last-step',\n\t\t\t\t\t\t\tcloseBtn    : false,\n\t\t\t\t\t\t\thelpers     : {\n\t\t\t\t\t\t\t\toverlay : {closeClick: false}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkeys        : {\n\t\t\t\t\t\t\t\tclose  : null\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tafterClose: function(){\n\t\t\t\t\t\t\t\tjQuery(\"#cboxLoadingOverlay\").remove();\n\t\t\t\t\t\t\t\tjQuery(\"#cboxLoadingGraphic\").remove();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlocation.reload(true);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n                }\n            }\n\t\t\treturn;\n\t\t}\n\t\t\n\t} else {\n\t\tif($('webform_225_sending_data'))\n\t\t\t$('webform_225_sending_data').hide();\n\t\tif($('webform_225_submit_button'))\n\t\t\t$('webform_225_submit_button').show();\n\t\tif(json.errors && typeof(json.errors) == \"string\"){\n\t\t\tif(jQuery('.webform--message').size()) {\n\t\t\t\tjQuery('.webform--message').addClass('error');\n\t\t\t\tjQuery('.webform--message').html(json.errors.unescapeHTML());\n\t\t\t\tjQuery('.webform--message').show();\n\t\t\t} else {\n\t\t\t\tDialog.info(json.errors.unescapeHTML(),{\n\t\t\t\t\ttitle: \"Error(s) occured\",\n\t\t\t\t\tclassName: \"alphacube\",\n\t\t\t\t\twidth:300, \n\t\t\t\t\tbuttonClass: \"button\",\n\t\t\t\t\tokLabel: \"Close\",\n\t\t\t\t\tdestroyOnClose: true, \n\t\t\t\t\trecenterAuto:true\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\talert('Error(s) occured');\n\t\t}\n\t\tif(json.script){\n\t\t\teval(json.script);\n\t\t}\n\t}\n});\n//]]>\n</script> \n<script type=\"text/javascript\">\n//<![CDATA[\n\t//]]>\n</script>\n\n<div style=\"display:none\">\n\t<div id=\"last-step\">\n\t</div>\n</div>\n    </div>\n                </div>\n                    <div class=\"Frame\" style=\"display: none;\">\n                \n\n\n<div class=\"al-authorizationform-recovery\">\n    <form action=\"https://patchofland.com/ajaxlogin/index/recoveryPost/\" method=\"post\" id=\"password-recovery-form\">\n        <ul class=\"form-list\">\n                            <li>\n                    <div class=\"Title\">\n            <h2>Forgot Your Password?</h2>\n    </div>                </li>\n                                    <li>\n                        <p class=\"TextMessage\">Please enter your email address below. You will receive a link to reset your password.</p>\n                    </li>\n                                            <li>\n                    <label for=\"email\" class=\"required\"><em>*</em>Email Address</label>\n<div class=\"input-box\">\n    <input\n        type=\"text\"\n        name=\"email\"\n        value=\"\"\n        id=\"al_auth_rec_email\"\n        class=\"input-text required-entry validate-email\"\n        title=\"Email Address\"\n    />\n</div>                </li>\n                                            <li>\n                    <ul class=\"messages Shaddy\" style=\"display: none;\"></ul>\n\n<div class=\"buttons-set\">\n    <p class=\"required\">* Required Fields</p>\n            <p class=\"back-link\"><a href=\"https://patchofland.com/customer/account/login/referer/aHR0cHM6Ly9wYXRjaG9mbGFuZC5jb20vaW52ZXN0bWVudHMuaHRtbA,,/\" id=\"node-uid-ajaxlogin-12\"><small>&laquo; </small>Back to Login</a></p>\n        <button type=\"submit\" title=\"Submit\" class=\"btn btn-primary\"><span><span>Submit</span></span></button>\n</div>\n\n<script type=\"text/javascript\">\n    Event.observe(\n        window,\n        'load',\n        function() {\n            $('node-uid-ajaxlogin-12').observe(\n                'click',\n                function(event) {\n                    AjaxLogin.Authorization.__getInstanceByChildnode(this).switchToFrame('login');\n                    if (window.event) window.event.cancelBubble = true;\n                    if (window.event) window.event.returnValue = false;\n                    event.preventDefault();\n                    event.stopPropagation();\n                    return false;\n                }\n            );\n        }\n    );\n</script>                </li>\n                                    </ul>\n    </form>\n    <form style=\"display:none\" action=\"https://patchofland.com/customer/account/forgotpassword/\" method=\"post\" id=\"forgot-password\">\n            <div class=\"no-display\">\n                <input type=\"hidden\" name=\"isAjax\" value=\"1\" />\n            </div>\n            <div class=\"fieldset\">\n                <ul class=\"form-list\">\n                                            <li>\n                            <div class=\"Title\">\n                                <h2>Forgot Your Password?</h2>\n                            </div>                \n                        </li>\n                        <li class=\"fields\">\n                            <div class=\"field\">\n                                <label class=\"required\" for=\"squestion\"><em>*</em>Security Question</label>\n                                <div class=\"input-box row-fluid\">\n                                    <label id=\"ajax-squestion-label\"></label>\n                                    <input type=\"hidden\" disabled value=\"\"  id=\"ajax-squestion\" name=\"squestion\" />\n                                </div>\n                            </div>\n                            <div class=\"field\">\n                                <label class=\"required\" for=\"sanswer\"><em>*</em>Security Answer</label>\n                                <div class=\"input-box row-fluid\">\n                                    <input type=\"text\" name=\"sanswer\" id=\"sanswer\" value=\"\" title=\"Security Answer\" class=\"input-text required-entry\" />\n                                </div>\n                            </div>\n                        </li>\n                                    </ul>\n            </div>\n            <div id=\"forgot-error\" style=\"display:none\"></div>\n            <div class=\"buttons-set\">\n                <p class=\"required\">* Required Fields</p>\n                <p class=\"back-link\"><a id=\"node-uid-ajaxlogin-6\" href=\"https://patchofland.com/customer/account/login/referer/aHR0cHM6Ly9wYXRjaG9mbGFuZC5jb20vaW52ZXN0bWVudHMuaHRtbA,,/\"><small>&laquo; </small>Back to Login</a>\n                </p>   \n                <button id=\"ajax-forgot-password-btn\" type=\"submit\" title=\"Submit\" style=\"padding-left: 80px;padding-right: 80px;\" class=\"btn btn-primary\"><span><span>Submit</span></span></button>\n            </div>\n        </form>\n        <script type=\"text/javascript\">\n        //<![CDATA[\n            var forgotPassword = new VarienForm('forgot-password', true);\n        //]]>\n        </script>\n</div>\n            </div>\n                    <div class=\"Frame\" style=\"display: none;\">\n                <div class=\"al-authorizationform-extra\">\n    <script type=\"text/javascript\">\n        jQuery(document).on(\"focus\", \"#ajax-password\", function() {\n            FormTools.addPasswordMasking(this,'\\u25CF');\n        });\n    </script>\n    <form action=\"https://patchofland.com/ajaxlogin/index/loginWithNetwork/\" method=\"post\" id=\"network-login-form\"></form>\n    <form action=\"https://patchofland.com/ajaxlogin/index/registerWithNetwork/\" method=\"post\" id=\"network-register-form\">\n        <ul class=\"form-list\">\n                            <li>\n                    <div class=\"Title\">\n            <h2>Additional Information</h2>\n    </div>                </li>\n                            <li>\n                    <ul class=\"messages Shaddy\" style=\"display: none;\"></ul>\n\n<div class=\"buttons-set\">\n    <p class=\"required\">* Required Fields</p>\n            <p class=\"back-link\"><a href=\"https://patchofland.com/customer/account/login/referer/aHR0cHM6Ly9wYXRjaG9mbGFuZC5jb20vaW52ZXN0bWVudHMuaHRtbA,,/\" id=\"node-uid-ajaxlogin-13\"><small>&laquo; </small>Cancel</a></p>\n        <button type=\"submit\" class=\"button\" title=\"Submit\"><span><span>Submit</span></span></button>\n</div>\n\n<script type=\"text/javascript\">\n    Event.observe(\n        window,\n        'load',\n        function() {\n            $('node-uid-ajaxlogin-13').observe(\n                'click',\n                function(event) {\n                    AjaxLogin.Authorization.__getInstanceByChildnode(this).switchToFrame('login');\n                    \n                    if (window.event) window.event.cancelBubble = true;\n                    if (window.event) window.event.returnValue = false;\n                    event.preventDefault();\n                    event.stopPropagation();\n                    return false;\n                }\n            );\n        }\n    );\n</script>                </li>\n                    </ul>\n    </form>\n</div>            </div>\n            </div>\n    <div class=\"alProgressBar\" style=\"display: none;\">\n        <div class=\"Shadow\"></div>\n        <div class=\"loading-mask\">\n            <p class=\"loader\" id=\"loading_mask_loader\"><img src=\"https://cdn.patchofland.com/skin/frontend/default/pol/ajaxlogin/ajax-loader-tr.gif\" alt=\"Loading...\" /><br />Please wait...</p>\n        </div>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    var __authorization = new AjaxLogin.Authorization($('node-uid-ajaxlogin-3'));\n    __authorization.addHandler(\n        AjaxLogin.Authorization.EVENTTYPE_SERVERFAILURE,\n        function(eventData) {\n            this.setMessage('There is something wrong with the server. Please, try to login again a bit later.');\n        }\n    );\n    __authorization.addHandler(\n        AjaxLogin.Authorization.EVENTTYPE_JSONFAILURE,\n        function(eventData) {\n            this.setMessage('Bad response from server. Please, try to refresh the page.');\n        }\n    );\n    __authorization.addHandler(\n        [\n            AjaxLogin.Authorization.EVENTTYPE_LOGINFAILURE,\n            AjaxLogin.Authorization.EVENTTYPE_REGISTERFAILURE\n        ],\n        function(eventData) {\n            if ( typeof eventData.errorMessage != 'undefined' ) {\n                this.setMessage(eventData.errorMessage);\n            }\n        }\n    );\n    __authorization.addHandler(\n        AjaxLogin.Authorization.EVENTTYPE_REGISTERSUCCESS,\n        function(eventData) {\n            if ( typeof eventData.successMessage != 'undefined' ) {\n                this.switchToFrame('login');\n                //this.setMessage(eventData.successMessage, 1, 60);\n            }\n        }\n    );\n</script>            </div>\n            <div class=\"Close\"><a href=\"\" class=\"fui-cross\" title=\"Close window\"></a></div>\n        </div>\n    </div>\n</div>\n\n<script type=\"text/javascript\">\n    Event.observe(\n        window,\n        'load',\n        function() {\n            var __overlapRootNode = $('node-uid-ajaxlogin-2');\n            var __closeLinkNode = __overlapRootNode.select('.Close a')[0];\n            var __shadowAreaNode = __overlapRootNode.select('.Shadow')[0];\n            var __canvasAreaNode = __overlapRootNode.select('.Canvas')[0];\n            var __authorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode($('node-uid-ajaxlogin-3'));\n            \n            __authorizationInstance.__setProgressBar( $$('.alProgressBar')[0] );\n            \n            __closeLinkNode.observe(\n                'click',\n                function(overlapRootNode, authorizationInstance) {\n                    return function(event) {\n                        overlapRootNode.style.display = 'none';\n                        authorizationInstance.switchToFrame(0);\n                        \n                        if (window.event) window.event.cancelBubble = true;\n                        if (window.event) window.event.returnValue = false;\n                        event.preventDefault();\n                        event.stopPropagation();\n                        return false;\n                    };\n                }\n                (__overlapRootNode, __authorizationInstance)\n            );\n            \n            __shadowAreaNode.observe(\n                'click',\n                function(overlapRootNode) {\n                    return function(event) {\n                        overlapRootNode.style.display = 'none';\n                    };\n                }\n                (__overlapRootNode)\n            );\n            \n            __canvasAreaNode.observe(\n                'click',\n                function(overlapRootNode) {\n                    return function(event) {\n                        if (event.target == this) {\n                            overlapRootNode.style.display = 'none';\n                        }\n                    };\n                }\n                (__overlapRootNode)\n            );\n            \n            __authorizationInstance.addHandler(\n                AjaxLogin.Authorization.EVENTTYPE_LOGINSUCCESS,\n                function(eventData) {\n                    var __overlapNode = $('node-uid-ajaxlogin-2');\n                    __overlapNode.style.display = 'none';\n                }\n            );\n            \n            __authorizationInstance.addHandler(\n                AjaxLogin.Authorization.EVENTTYPE_REGISTERSUCCESS,\n                function(eventData) {\n                    if ( (typeof eventData.loggedIn == 'undefined') || (eventData.loggedIn != 0) ) {\n                        var __overlapNode = $('node-uid-ajaxlogin-2');\n                        __overlapNode.style.display = 'none';\n                    }\n                }\n            );\n            \n            __authorizationInstance.addHandler(\n                AjaxLogin.Authorization.EVENTTYPE_REQUIREDENTRIES,\n                function(eventData) {\n                    var __overlapNode = $('node-uid-ajaxlogin-2');\n                    __overlapNode.style.display = '';\n                }\n            );\n        }\n    );\n</script>        <div id=\"fb-root\"></div>\n    <script>\n        window.fbAsyncInit = function() {\n            FB.init(\n                {\n                    appId      : '251185108258241',\n                    status     : true,\n                    cookie     : true,\n                    xfbml      : true\n                }\n            );\n        };\n        \n        (\n            function(d) {\n                var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];\n                if (d.getElementById(id)) {\n                    return;\n                }\n                js = d.createElement('script'); js.id = id; js.async = true;\n                js.src = \"//connect.facebook.net/en_US/all.js\";\n                ref.parentNode.insertBefore(js, ref);\n            }\n            (document)\n        );\n        \n        \n        __facebookDoAuth = function(accessToken, imageNode) {\n            FB.api(\n                '/me',\n                function(accessToken, imageNode) {\n                    return function(__facebookResponse) {\n                        var __overlapAuthorizationNode = $('node-uid-ajaxlogin-3');\n                        var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n                        \n                        __overlapAuthorizationInstance.getFrame('extra').login(\n                            { network: 'facebook', accessToken: accessToken },\n                            function(facebookResponse) {\n                                return function(response) {\n                                    if ( typeof response == 'object' ) {\n                                        if ( (typeof response.notRegistered != 'undefined') && (response.notRegistered == 1) ) {\n                                            this.register(\n                                                {\n                                                    network     : 'facebook',\n                                                    accessToken : accessToken,\n                                                    email       : facebookResponse.email,\n                                                    firstname   : facebookResponse.first_name,\n                                                    lastname    : facebookResponse.last_name\n                                                }\n                                            );\n                                        }\n                                        if ( (typeof response.errorMessage == 'string') && (response.errorMessage.length) ) {\n                                            __authorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(imageNode);\n                                            __authorizationInstance.setMessage(response.errorMessage);\n                                        }\n                                    }\n                                };\n                            }\n                            (__facebookResponse)\n                        );\n                    };\n                }\n                (accessToken, imageNode)\n            );\n        };\n    </script>\n        <script type=\"text/javascript\">\n        if ( typeof AjaxLogin == 'undefined' ) {\n            AjaxLogin = {};\n        }\n        \n        AjaxLogin.OAUTH_ACTION_GETAUTHORIZATIONSTATUS   = 'https://patchofland.com/ajaxlogin/oauth/getAuthorizationStatus/';\n        AjaxLogin.OAUTH_ACTION_CHECKAUTHORIZATIONSTATUS = 'https://patchofland.com/ajaxlogin/oauth/checkAuthorizationStatus/';\n        \n        if ( typeof AjaxLogin.LinkedIn == 'undefined' ) {\n            AjaxLogin.LinkedIn = {};\n        }\n        \n        AjaxLogin.LinkedIn.auth = function(authorizationInstance) {\n            window.__authWindow = open(\n                AjaxLogin.OAUTH_ACTION_CHECKAUTHORIZATIONSTATUS + '?network=linkedin',\n                'linkedinAuth',\n                'width=500,height=420,toolbar=no,scrollbars=yes'\n            );\n            \n            window.__authWindowInterval = setInterval(\n                function() {\n                    if ( (typeof window.__authWindow != 'undefined') && (window.__authWindow.closed) ) {\n                        clearInterval(window.__authWindowInterval);\n                        AjaxLogin.LinkedIn.getStatus();\n                    }\n                },\n                50\n            );\n        };\n        \n        AjaxLogin.LinkedIn.getStatus = function(noTokenCallback, authorizationInstance) {\n            if ( typeof authorizationInstance != 'undefined' ) {\n                authorizationInstance.__scheduleProgressBar();\n            }\n            \n            new Ajax.Request(\n                AjaxLogin.OAUTH_ACTION_GETAUTHORIZATIONSTATUS,\n                {\n                    method     : 'get',\n                    parameters : { network: 'linkedin' },\n                    onSuccess: function(transport) {\n                        try { eval('var __response = ' + transport.responseText + ';'); }\n                        catch (__E) { __response = {}; }\n                        \n                        if ( typeof __response.access_token_accepted != 'undefined' ) {\n                            if ( typeof __response.account_data != 'undefined' ) {\n                                AjaxLogin.LinkedIn.login(__response.account_data);\n                            }\n                        }\n                        else {\n                            if ( typeof noTokenCallback == 'function' ) {\n                                noTokenCallback(__response);\n                            }\n                        }\n                        \n                        if ( typeof authorizationInstance != 'undefined' ) {\n                            authorizationInstance.__hideProgressBar();\n                        }\n                    },\n                    onFailure: function() {\n                        if ( typeof authorizationInstance != 'undefined' ) {\n                            authorizationInstance.__hideProgressBar();\n                        }\n                    }\n                }\n            );\n        };\n        \n        AjaxLogin.LinkedIn.login = function(linkedinResponse) {\n            var __overlapAuthorizationNode = $('node-uid-ajaxlogin-3');\n            var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n            \n            __overlapAuthorizationInstance.getFrame('extra').login(\n                { network: 'linkedin' },\n                function(linkedinResponse) {\n                    return function(response) {\n                        if ( typeof response == 'object' ) {\n                            if ( (typeof response.notRegistered != 'undefined') && (response.notRegistered == 1) ) {\n                                this.register(\n                                    {\n                                        network   : 'linkedin',\n                                        email     : typeof linkedinResponse.emailAddress != 'undefined' ? linkedinResponse.emailAddress : '',\n                                        firstname : typeof linkedinResponse.firstName != 'undefined' ? linkedinResponse.firstName : '',\n                                        lastname  : typeof linkedinResponse.lastName != 'undefined' ? linkedinResponse.lastName : ''\n                                    }\n                                );\n                            }\n                            if ( (typeof response.errorMessage == 'string') && (response.errorMessage.length) ) {\n                                __authorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(imageNode);\n                                __authorizationInstance.setMessage(response.errorMessage);\n                            }\n                        }\n                    };\n                }\n                (linkedinResponse)\n            );\n        };\n    </script>\n        <script type=\"text/javascript\">\n        if ( typeof AjaxLogin == 'undefined' ) {\n            AjaxLogin = {};\n        }\n        \n        AjaxLogin.OAUTH_ACTION_GETAUTHORIZATIONSTATUS   = 'https://patchofland.com/ajaxlogin/oauth/getAuthorizationStatus/';\n        AjaxLogin.OAUTH_ACTION_CHECKAUTHORIZATIONSTATUS = 'https://patchofland.com/ajaxlogin/oauth/checkAuthorizationStatus/';\n        \n        if ( typeof AjaxLogin.Google == 'undefined' ) {\n            AjaxLogin.Google = {};\n        }\n        \n        AjaxLogin.Google.auth = function(authorizationInstance) {\n            window.__authWindow = open(\n                AjaxLogin.OAUTH_ACTION_CHECKAUTHORIZATIONSTATUS + '?network=google',\n                'googleAuth',\n                'width=500,height=420,toolbar=no,scrollbars=yes'\n            );\n            \n            window.__authWindowInterval = setInterval(\n                function() {\n                    if ( (typeof window.__authWindow != 'undefined') && (window.__authWindow.closed) ) {\n                        clearInterval(window.__authWindowInterval);\n                        AjaxLogin.Google.getStatus();\n                    }\n                },\n                50\n            );\n        };\n        \n        AjaxLogin.Google.getStatus = function(noTokenCallback, authorizationInstance) {\n            if ( typeof authorizationInstance != 'undefined' ) {\n                authorizationInstance.__scheduleProgressBar();\n            }\n            \n            new Ajax.Request(\n                AjaxLogin.OAUTH_ACTION_GETAUTHORIZATIONSTATUS,\n                {\n                    method     : 'get',\n                    parameters : { network: 'google' },\n                    onSuccess: function(transport) {\n                        try { eval('var __response = ' + transport.responseText + ';'); }\n                        catch (__E) { __response = {}; }\n                        \n                        if ( typeof __response.access_token_accepted != 'undefined' ) {\n                            if ( typeof __response.account_data != 'undefined' ) {\n                                AjaxLogin.Google.login(__response.account_data);\n                            }\n                        }\n                        else {\n                            if ( typeof noTokenCallback == 'function' ) {\n                                noTokenCallback(__response);\n                            }\n                        }\n                        \n                        if ( typeof authorizationInstance != 'undefined' ) {\n                            authorizationInstance.__hideProgressBar();\n                        }\n                    },\n                    onFailure: function() {\n                        if ( typeof authorizationInstance != 'undefined' ) {\n                            authorizationInstance.__hideProgressBar();\n                        }\n                    }\n                }\n            );\n        };\n        \n        AjaxLogin.Google.login = function(googleResponse) {\n            var __overlapAuthorizationNode = $('node-uid-ajaxlogin-3');\n            var __overlapAuthorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(__overlapAuthorizationNode);\n            \n            __overlapAuthorizationInstance.getFrame('extra').login(\n                { network: 'google' },\n                function(googleResponse) {\n                    return function(response) {\n                        if ( typeof response == 'object' ) {\n                            if ( (typeof response.notRegistered != 'undefined') && (response.notRegistered == 1) ) {\n                                this.register(\n                                    {\n                                        network     : 'google',\n                                        id          : typeof googleResponse.id != 'undefined' ? googleResponse.id : '',\n                                        email       : typeof googleResponse.email != 'undefined' ? googleResponse.email : '',\n                                        firstname   : typeof googleResponse.given_name != 'undefined' ? googleResponse.given_name : '',\n                                        lastname    : typeof googleResponse.family_name != 'undefined' ? googleResponse.family_name : ''\n                                    }\n                                );\n                            }\n                            if ( (typeof response.errorMessage == 'string') && (response.errorMessage.length) ) {\n                                __authorizationInstance = AjaxLogin.Authorization.__getInstanceByChildnode(imageNode);\n                                __authorizationInstance.setMessage(response.errorMessage);\n                            }\n                        }\n                    };\n                }\n                (googleResponse)\n            );\n        };\n    </script>\n<!-- START Mixpanel track nav links -->\n<script type=\"text/javascript\">\n    mixpanel.track_links(\".nav a\", \"Clicked top nav link\", {\n        referrer: document.referrer\n    });\n    mixpanel.track_links(\".mt-footer-static a\", \"Clicked footer nav link\", {\n        referrer: document.referrer\n    });\n</script>\n<!-- END Mix panel track nav links -->\n<!-- Kissmetrics tracking snippet -->\n<script type=\"text/javascript\">var _kmq = _kmq || [];\nvar _kmk = _kmk || 'da387e43e62c5c26db6063d4e7131388e5270fa4';\nfunction _kms(u){\n  setTimeout(function(){\n    var d = document, f = d.getElementsByTagName('script')[0],\n    s = d.createElement('script');\n    s.type = 'text/javascript'; s.async = true; s.src = u;\n    f.parentNode.insertBefore(s, f);\n  }, 1);\n}\n_kms('//i.kissmetrics.com/i.js');\n_kms('//scripts.kissmetrics.com/' + _kmk + '.2.js');\n</script>\n<!-- end kissmetrics tag -->\n<!-- Google Code for Remarketing Tag -->\n<script type=\"text/javascript\">\n/* <![CDATA[ */\nvar google_conversion_id = 984177463;\nvar google_custom_params = window.google_tag_params;\nvar google_remarketing_only = true;\n/* ]]> */\n</script>\n<script type=\"text/javascript\" src=\"//www.googleadservices.com/pagead/conversion.js\">\n</script>\n<noscript>\n<div style=\"display:inline;\">\n<img height=\"1\" width=\"1\" style=\"border-style:none;\" alt=\"\" src=\"//googleads.g.doubleclick.net/pagead/viewthroughconversion/984177463/?value=0&amp;guid=ON&amp;script=0\"/>\n</div>\n</noscript>\n<!-- Google Code for Remarketing Tag -->\n<!-- Begin Inspectlet Embed Code -->\n<script type=\"text/javascript\" id=\"inspectletjs\">\n\twindow.__insp = window.__insp || [];\n\t__insp.push(['wid', 1647674644]);\n\t(function() {\n\t\tfunction __ldinsp(){var insp = document.createElement('script'); insp.type = 'text/javascript'; insp.async = true; insp.id = \"inspsync\"; insp.src = ('https:' == document.location.protocol ? 'https' : 'http') + '://cdn.inspectlet.com/inspectlet.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(insp, x); }\n\t\tif (window.attachEvent){\n\t\t\twindow.attachEvent('onload', __ldinsp);\n\t\t}else{\n\t\t\twindow.addEventListener('load', __ldinsp, false);\n\t\t}\n\t})();\n</script>\n<!-- End Inspectlet Embed Code -->\n<!-- Start of Async HubSpot Analytics Code -->\n<script type=\"text/javascript\">\n(function(d,s,i,r) {\nif (d.getElementById(i)){return;}\nvar n=d.createElement(s),e=d.getElementsByTagName(s)[0];\nn.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new\nDate()/r)*r)+'/453307.js';\ne.parentNode.insertBefore(n, e);\n})(document,\"script\",\"hs-analytics\",300000);\n</script>\n<!-- End of Async HubSpot Analytics Code --></body>\n</html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/so_annotations.json",
    "content": "{\n    \"annos\": [\n        {\n            \"container_id\": \"5b7c-402c-9d4c\", \n            \"data\": {\n                \"3310-4b70-85aa\": {\n                    \"attribute\": \"content\", \n                    \"extractors\": {}, \n                    \"field\": \"770d-4a6e-b910\", \n                    \"id\": \"ee47-4ea0-a374|3310-4b70-85aa\", \n                    \"required\": false\n                }\n            }, \n            \"id\": \"ee47-4ea0-a374\", \n            \"selector\": \".question-summary > .summary > .started > .started-link\"\n        }, \n        {\n            \"annotations\": {\n                \"#portia-content\": \"#dummy\"\n            }, \n            \"container_id\": \"5b7c-402c-9d4c#parent\", \n            \"id\": \"5b7c-402c-9d4c\", \n            \"item_container\": true, \n            \"repeated\": true, \n            \"schema_id\": \"bb14-43b6-9040\", \n            \"selector\": \".question-summary\", \n            \"siblings\": 0, \n            \"text-content\": \"#portia-content\"\n        }, \n        {\n            \"container_id\": \"5b7c-402c-9d4c\", \n            \"data\": {\n                \"24f1-443b-b7d5\": {\n                    \"attribute\": \"content\", \n                    \"extractors\": {}, \n                    \"field\": \"5249-41c5-b481\", \n                    \"id\": \"58f4-40ba-9b22|24f1-443b-b7d5\", \n                    \"required\": false\n                }\n            }, \n            \"id\": \"58f4-40ba-9b22\", \n            \"selector\": \".question-summary > .summary > h3 > .question-hyperlink\"\n        }, \n        {\n            \"container_id\": \"5b7c-402c-9d4c\", \n            \"data\": {\n                \"9574-4c8e-bfb5\": {\n                    \"attribute\": \"content\", \n                    \"extractors\": {}, \n                    \"field\": \"93b0-4236-94b0\", \n                    \"id\": \"9df6-4251-a94e|9574-4c8e-bfb5\", \n                    \"required\": false\n                }\n            }, \n            \"id\": \"9df6-4251-a94e\", \n            \"repeated\": true, \n            \"selection_mode\": \"auto\", \n            \"selector\": \"#question-mini-list > div:nth-child(1) > .summary > .tags > .post-tag\"\n        }, \n        {\n            \"annotations\": {\n                \"#portia-content\": \"#dummy\"\n            }, \n            \"container_id\": null, \n            \"id\": \"5b7c-402c-9d4c#parent\", \n            \"item_container\": true, \n            \"schema_id\": \"bb14-43b6-9040\", \n            \"selector\": \"#qlist-wrapper\", \n            \"siblings\": 0, \n            \"text-content\": \"#portia-content\"\n        }\n    ], \n    \"items\": {\n        \"bb14-43b6-9040\": {\n            \"fields\": {\n                \"5249-41c5-b481\": {\n                    \"name\": \"title\", \n                    \"required\": 0, \n                    \"type\": \"text\", \n                    \"vary\": 0\n                }, \n                \"770d-4a6e-b910\": {\n                    \"name\": \"answered\", \n                    \"required\": 0, \n                    \"type\": \"text\", \n                    \"vary\": 0\n                }, \n                \"93b0-4236-94b0\": {\n                    \"name\": \"tags\", \n                    \"required\": 0, \n                    \"type\": \"text\", \n                    \"vary\": 0\n                }\n            }, \n            \"name\": \"question\"\n        }\n    }, \n    \"results\": [\n        {\n            \"_index\": 1, \n            \"_template\": \"507f520c3bf361f4c5cd55c44307a271bccb2218\", \n            \"_type\": \"question\", \n            \"answered\": [\n                \"asked 51 secs ago\"\n            ], \n            \"tags\": [\n                \"jquery\", \n                \"twitter-bootstrap\", \n                \"navbar\", \n                \"sticky\"\n            ], \n            \"title\": [\n                \"Bootstrap navbar doesn't open - mobile view\"\n            ], \n            \"url\": \"http://url\"\n        }, \n        {\n            \"_index\": 53, \n            \"_template\": \"507f520c3bf361f4c5cd55c44307a271bccb2218\", \n            \"_type\": \"question\", \n            \"answered\": [\n                \"modified 9 mins ago\"\n            ], \n            \"tags\": [\n                \"javascript\"\n            ], \n            \"title\": [\n                \"Export to Excel issue in Chrome and Firefox\"\n            ], \n            \"url\": \"http://url\"\n        }, \n        {\n            \"_index\": 96, \n            \"_template\": \"507f520c3bf361f4c5cd55c44307a271bccb2218\", \n            \"_type\": \"question\", \n            \"answered\": [\n                \"asked 1 hour ago\"\n            ], \n            \"tags\": [\n                \"python\", \n                \"cassandra\", \n                \"apache-spark\", \n                \"ipython-notebook\"\n            ], \n            \"title\": [\n                \"iPython + Spark + Cassandra - Py4JJavaError and How to connect to Cassandra from Spark?\"\n            ], \n            \"url\": \"http://url\"\n        }\n    ]\n}"
  },
  {
    "path": "slybot/slybot/tests/data/templates/stack_overflow.html",
    "content": "<!DOCTYPE html>\n<html data-ember-extension=\"1\"><head>\n<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n\n<title>Stack Overflow</title>\n    <link rel=\"shortcut icon\" href=\"https://cdn.sstatic.net/stackoverflow/img/favicon.ico?v=6cd6089ee7f6\">\n    <link rel=\"apple-touch-icon image_src\" href=\"https://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png?v=41f6e13ade69\">\n    <link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"Stack Overflow\" href=\"https://stackoverflow.com/opensearch.xml\">\n    <meta name=\"twitter:card\" content=\"summary\">\n    <meta name=\"twitter:domain\" content=\"stackoverflow.com\">\n    <meta property=\"og:type\" content=\"website\">\n    <meta property=\"og:image\" itemprop=\"image primaryImageOfPage\" content=\"https://cdn.sstatic.net/stackoverflow/img/apple-touch-icon@2.png?v=ea71a5211a91&amp;a\">\n    <meta name=\"twitter:title\" property=\"og:title\" itemprop=\"title name\" content=\"Stack Overflow\">\n    <meta name=\"twitter:description\" property=\"og:description\" itemprop=\"description\" content=\"Q&amp;A for professional and enthusiast programmers\">\n    <meta property=\"og:url\" content=\"https://stackoverflow.com/\">\n\n\n\n    <script src=\"stack_overflow_files/quant.js\" async=\"\"></script><script src=\"stack_overflow_files/beacon.js\" async=\"\"></script><script src=\"stack_overflow_files/analytics.js\" async=\"\"></script><script src=\"stack_overflow_files/ados.js\" async=\"\" type=\"text/javascript\"></script><script src=\"stack_overflow_files/jquery.js\"></script><style>div[id^=\"adzerk\"],\n.hireme\n{display:none !important;}</style>\n    <script src=\"stack_overflow_files/stub.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"stack_overflow_files/all.css\">\n\n    <link rel=\"alternate\" type=\"application/atom+xml\" title=\"Feed of recent questions\" href=\"https://stackoverflow.com/feeds\">\n\n\n    <script>\n        StackExchange.ready(function () {\n            StackExchange.realtime.init('wss://qa.sockets.stackexchange.com,ws://qa.sockets.stackexchange.com');\n            StackExchange.realtime.subscribeToReputationNotifications('1');\n                StackExchange.realtime.subscribeToTopBarNotifications('1');\n        });\n    </script>\n    <script>\n        StackExchange.init({\"locale\":\"en\",\"stackAuthUrl\":\"https://stackauth.com\",\"serverTime\":1438942223,\"networkMetaHostname\":\"meta.stackexchange.com\",\"routeName\":\"Home/Index\",\"styleCode\":true,\"enableUserHovercards\":true,\"snippets\":{\"enabled\":true,\"domain\":\"stacksnippets.net\"},\"site\":{\"name\":\"Stack Overflow\",\"description\":\"Q&A for professional and enthusiast programmers\",\"isNoticesTabEnabled\":true,\"recaptchaPublicKey\":\"6LdchgIAAAAAAJwGpIzRQSOFaO0pU6s44Xt8aTwc\",\"recaptchaAudioLang\":\"en\",\"enableNewTagCreationWarning\":true,\"insertSpaceAfterNameTabCompletion\":false,\"globalAuthDisabled\":true,\"nonAsciiTags\":true,\"enableSocialMediaInSharePopup\":true},\"user\":{\"fkey\":\"da4df6c2c1a3ba71bd473c7f940ab77e\",\"isRegistered\":true,\"userType\":3,\"userId\":1428880,\"accountId\":1531850,\"gravatar\":\"<div class=\\\"gravatar-wrapper-32\\\"><img src=\\\"https://www.gravatar.com/avatar/56cf9c64ce2a3864458663888603e5df?s=32&amp;d=identicon&amp;r=PG\\\" alt=\\\"\\\" width=\\\"32\\\" height=\\\"32\\\"></div>\",\"profileUrl\":\"http://stackoverflow.com/users/1428880/ruairi-fahy\"}});\n        StackExchange.using.setCacheBreakers({\"js/prettify-full.en.js\":\"1a4e97722894\",\"js/moderator.en.js\":\"d3dc0440af97\",\"js/full-anon.en.js\":\"63b721705644\",\"js/full.en.js\":\"3f169e321185\",\"js/wmd.en.js\":\"5a4946d7beea\",\"js/third-party/jquery.autocomplete.min.js\":\"e5f01e97f7c3\",\"js/third-party/jquery.autocomplete.min.en.js\":\"\",\"js/mobile.en.js\":\"c4644a664c8c\",\"js/help.en.js\":\"1ad0e1555080\",\"js/tageditor.en.js\":\"9c54855bf167\",\"js/tageditornew.en.js\":\"36d686f34684\",\"js/inline-tag-editing.en.js\":\"de80429b1816\",\"js/revisions.en.js\":\"e262ce207d9e\",\"js/review.en.js\":\"22f0b1eb6733\",\"js/tagsuggestions.en.js\":\"d1ff9b84abe5\",\"js/post-validation.en.js\":\"865af37b043d\",\"js/explore-qlist.en.js\":\"f3ed891c20d6\",\"js/events.en.js\":\"217f81b842a9\",\"js/keyboard-shortcuts.en.js\":\"e9f6a5f7c057\",\"js/external-editor.en.js\":\"2b45a9bedcec\",\"js/external-editor.en.js\":\"2b45a9bedcec\",\"js/snippet-javascript.en.js\":\"0a74681b16bf\",\"js/snippet-javascript-codemirror.en.js\":\"bb8828d10a87\"});\n        StackExchange.using(\"gps\", function() {\n             StackExchange.gps.init(true);\n        });\n    </script>\n\n\n\n<script src=\"stack_overflow_files/full.js\" async=\"\"></script><link href=\"stack_overflow_files/socialwidgets.css\" type=\"text/css\" rel=\"stylesheet\"></head>\n<body class=\"home-page new-topbar\">\n    <noscript><div id=\"noscript-padding\"></div></noscript>\n    <div id=\"notify-container\"></div>\n    <div id=\"overlay-header\"></div>\n    <div id=\"custom-header\"></div>\n\n\n\n\n<div class=\"topbar\">\n    <div class=\"topbar-wrapper\">\n\n        <div class=\"js-topbar-dialog-corral\">\n\n<div class=\"topbar-dialog siteSwitcher-dialog dno\">\n    <div class=\"header\">\n        <h3><a href=\"https://stackoverflow.com/\">current community</a></h3>\n    </div>\n    <div class=\"modal-content current-site-container\">\n        <ul class=\"current-site\">\n                <li>\n                        <div class=\"related-links\">\n            <a href=\"http://chat.stackoverflow.com/\" class=\"js-gps-track\" data-gps-track=\"site_switcher.click({ item_type:6 })\">chat</a>\n                    <a href=\"http://blog.stackoverflow.com/\" class=\"js-gps-track\" data-gps-track=\"site_switcher.click({ item_type:7 })\">blog</a>\n                    <a href=\"https://stackoverflow.com/users/logout\" class=\"js-gps-track\" data-gps-track=\"site_switcher.click({ item_type:8 })\">log out</a>\n    </div>\n\n\n\n\n    <a href=\"https://stackoverflow.com/\" class=\"current-site-link site-link js-gps-track\" data-id=\"1\" data-gps-track=\"\n        site_switcher.click({ item_type:3 })\">\n        <div class=\"site-icon favicon favicon-stackoverflow\" title=\"Stack Overflow\"></div>\n        Stack Overflow\n    </a>\n\n                </li>\n                <li class=\"related-site\">\n                        <div class=\"L-shaped-icon-container\">\n        <span class=\"L-shaped-icon\"></span>\n    </div>\n\n\n\n\n\n    <a href=\"http://meta.stackoverflow.com/\" class=\"site-link js-gps-track\" data-id=\"552\" data-gps-track=\"\n            site.switch({ target_site:552, item_type:3 }),\n        site_switcher.click({ item_type:4 })\">\n        <div class=\"site-icon favicon favicon-stackoverflowmeta\" title=\"Meta Stack Overflow\"></div>\n        Meta Stack Overflow\n    </a>\n\n                </li>\n                            <li class=\"related-site\">\n                        <div class=\"L-shaped-icon-container\">\n        <span class=\"L-shaped-icon\"></span>\n    </div>\n\n                    <a class=\"site-link js-gps-track\" href=\"https://careers.stackoverflow.com/?utm_source=stackoverflow.com&amp;utm_medium=site-ui&amp;utm_campaign=multicollider\" data-gps-track=\"site_switcher.click({ item_type:9 })\">\n                        <div class=\"site-icon favicon favicon-careers\" title=\"Stack Overflow Careers\"></div>\n                        Stack Overflow Careers\n                    </a>\n                </li>\n        </ul>\n    </div>\n\n    <div class=\"header\" id=\"your-communities-header\">\n        <h3>\n                <a href=\"https://stackexchange.com/users/1531850/?tab=accounts\">your communities</a>\n        </h3>\n\n            <a href=\"#\" id=\"edit-pinned-sites\">edit</a>\n            <a href=\"#\" id=\"cancel-pinned-sites\" style=\"display: none;\">cancel</a>\n    </div>\n    <div class=\"modal-content\" id=\"your-communities-section\">\n\n            <ul class=\"my-sites\">\n                    <li>\n\n\n\n\n    <a href=\"https://stackoverflow.com/\" class=\"site-link js-gps-track\" data-id=\"1\" data-gps-track=\"\n            site.switch({ target_site:1, item_type:3 }),\n        site_switcher.click({ item_type:1 })\">\n        <div class=\"site-icon favicon favicon-stackoverflow\" title=\"Stack Overflow\"></div>\n        Stack Overflow\n            <span class=\"rep-score\">139</span>\n    </a>\n\n                    </li>\n            </ul>\n                <div class=\"pinned-site-editor-container\" style=\"display: none;\">\n                    <input id=\"js-site-search-txt\" class=\"site-filter-input\" placeholder=\"Add a Stack Exchange community\" type=\"text\">\n                    <input id=\"pin-site-btn\" value=\"Add\" disabled=\"disabled\" type=\"submit\">\n                    <ul class=\"js-found-sites found-sites\"></ul>\n                    <ul class=\"pinned-site-list sortable\" data-custom-list=\"False\">\n                    </ul>\n                    <input value=\"Save\" id=\"save-pinned-sites-btn\" disabled=\"disabled\" type=\"submit\">\n                    <a href=\"#\" id=\"reset-pinned-sites\">reset to default list</a>\n                </div>\n    </div>\n\n    <div class=\"header\">\n        <h3><a href=\"https://stackexchange.com/sites\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;href&quot;: &quot;header_sites&quot;}}\">more stack exchange communities</a></h3>\n    </div>\n    <div class=\"modal-content\">\n            <div class=\"child-content\"></div>\n    </div>\n</div>\n        </div>\n\n        <div class=\"network-items\">\n\n            <a href=\"https://stackexchange.com/\" class=\"topbar-icon icon-site-switcher yes-hover js-site-switcher-button js-gps-track\" data-gps-track=\"site_switcher.show\" title=\"A list of all 149 Stack Exchange sites\">\n                <span class=\"hidden-text\">Stack Exchange</span>\n            </a>\n\n                <a href=\"#\" class=\"topbar-icon icon-inbox yes-hover js-inbox-button\" title=\"Recent inbox messages\">\n                    <span class=\"hidden-text\">Inbox</span>\n                    <span class=\"unread-count\" style=\"display:none\"></span>\n                </a>\n                <a href=\"#\" class=\"topbar-icon icon-achievements yes-hover js-achievements-button \" data-unread-class=\"\" title=\"Recent achievements: reputation, badges, and privileges earned\">\n                    <span class=\"hidden-text\">Reputation and Badges</span>\n                    <span class=\"unread-count\" style=\"display:none\">\n\n                    </span>\n                </a>\n        </div>\n\n        <div class=\"topbar-links\">\n\n                <a href=\"https://stackoverflow.com/users/1428880/ruairi-fahy\" class=\"profile-me js-gps-track\" data-gps-track=\"profile_summary.click()\">\n\n                    <div class=\"gravatar-wrapper-24\" title=\"Ruairi Fahy\"><img src=\"stack_overflow_files/56cf9c64ce2a3864458663888603e5df.jpeg\" alt=\"\" class=\"avatar-me js-avatar-me\" height=\"24\" width=\"24\"></div>\n\n                    <div class=\"links-container topbar-flair\">\n\n                        <span class=\"reputation\" title=\"your reputation: 139\">\n                            139\n                        </span>\n<span title=\"4 bronze badges\"><span class=\"badge3\"></span><span class=\"badgecount\">4</span></span>                    </div>\n                </a>\n                <div class=\"links-container\">\n                    <span class=\"topbar-menu-links\">\n\n\n\n\n    <a href=\"#\" class=\"icon-help js-help-button\" title=\"Help Center and other resources\">\n        help\n        <span class=\"triangle\"></span>\n    </a>\n    <div class=\"topbar-dialog help-dialog js-help-dialog dno\">\n        <div class=\"modal-content\">\n            <ul>\n                                    <li>\n                        <a href=\"https://stackoverflow.com/tour\" class=\"js-gps-track\" data-gps-track=\"help_popup.click({ item_type:1 })\">\n                            Tour\n                            <span class=\"item-summary\">\n                                Start here for a quick overview of the site\n                            </span>\n                        </a>\n                    </li>\n                <li>\n                    <a href=\"https://stackoverflow.com/help\" class=\"js-gps-track\" data-gps-track=\"help_popup.click({ item_type:4 })\">\n                        Help Center\n                        <span class=\"item-summary\">\n                            Detailed answers to any questions you might have\n                        </span>\n                    </a>\n                </li>\n                    <li>\n                        <a href=\"https://meta.stackoverflow.com/\" class=\"js-gps-track\" data-gps-track=\"help_popup.click({ item_type:2 })\">\n                            Meta\n                            <span class=\"item-summary\">\n                                Discuss the workings and policies of this site\n                            </span>\n                        </a>\n                    </li>\n            </ul>\n        </div>\n    </div>\n\n                    </span>\n                </div>\n\n            <div class=\"search-container\">\n                <form id=\"search\" action=\"/search\" method=\"get\" autocomplete=\"off\">\n                    <input name=\"q\" placeholder=\"search\" tabindex=\"1\" autocomplete=\"off\" maxlength=\"240\" type=\"text\">\n                </form>\n            </div>\n\n        </div>\n    </div>\n</div>\n    <script>\n        StackExchange.ready(function() { StackExchange.topbar.init(); });\n    </script>\n\n    <div class=\"container\">\n        <div id=\"header\">\n            <br class=\"cbt\">\n            <div id=\"hlogo\">\n                <a href=\"https://stackoverflow.com/\">\n                    Stack Overflow\n                </a>\n            </div>\n            <div id=\"hmenus\">\n                <div class=\"nav mainnavs\">\n                    <ul>\n                        <li><a id=\"nav-questions\" href=\"https://stackoverflow.com/questions\">Questions</a></li>\n                        <li><a id=\"nav-tags\" href=\"https://stackoverflow.com/tags\">Tags</a></li>\n                        <li><a id=\"nav-users\" href=\"https://stackoverflow.com/users\">Users</a></li>\n                        <li><a id=\"nav-badges\" href=\"https://stackoverflow.com/help/badges\">Badges</a></li>\n                        <li><a id=\"nav-unanswered\" href=\"https://stackoverflow.com/unanswered\">Unanswered</a></li>\n                    </ul>\n                </div>\n                <div class=\"nav askquestion\">\n                    <ul>\n                        <li>\n                            <a id=\"nav-askquestion\" href=\"https://stackoverflow.com/questions/ask\">Ask Question</a>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n\n\n\n\n        <div id=\"content\" class=\"snippet-hidden\">\n\n<div id=\"mainbar\">\n\n    <div class=\"subheader\">\n        <h1 id=\"h-top-questions\">\n                Top Questions\n        </h1>\n        <div id=\"tabs\">\n        <a class=\"youarehere\" href=\"https://stackoverflow.com/?tab=interesting\" data-nav-xhref=\"\" title=\"Questions that may be of interest to you based on your history and tag preference\" data-value=\"interesting\">interesting</a>\n        <a href=\"https://stackoverflow.com/?tab=featured\" data-nav-xhref=\"\" title=\"Questions with an active bounty\" data-value=\"featured\"><span class=\"bounty-indicator-tab\">409</span>featured</a>\n        <a href=\"https://stackoverflow.com/?tab=hot\" data-nav-xhref=\"\" title=\"Questions with the most views, answers, and votes over the last few days\" data-value=\"hot\">hot</a>\n        <a href=\"https://stackoverflow.com/?tab=week\" data-nav-xhref=\"\" title=\"Questions with the most views, answers, and votes this week\" data-value=\"week\">week</a>\n        <a href=\"https://stackoverflow.com/?tab=month\" data-nav-xhref=\"\" title=\"Questions with the most views, answers, and votes this month\" data-value=\"month\">month</a>\n</div>\n    </div>\n<div id=\"qlist-wrapper\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;id&quot;:&quot;root&quot;}\">\n    <div id=\"question-mini-list\">\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875193\">\n    <div onclick=\"window.location.href='/questions/31875193/bootstrap-navbar-doesnt-open-mobile-view'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875193/bootstrap-navbar-doesnt-open-mobile-view\" class=\"question-hyperlink\" title=\"I have a sticky nav with this code (Which is not mine)\n\n// Create a clone of the menu, right next to original.\n...\">Bootstrap navbar doesn't open - mobile view</a></h3>\n        <div class=\"tags t-jquery t-twitter-bootstrap t-navbar t-sticky\">\n            <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/twitter-bootstrap\" class=\"post-tag\" title=\"show questions tagged 'twitter-bootstrap'\" rel=\"tag\">twitter-bootstrap</a> <a href=\"https://stackoverflow.com/questions/tagged/navbar\" class=\"post-tag\" title=\"show questions tagged 'navbar'\" rel=\"tag\">navbar</a> <a href=\"https://stackoverflow.com/questions/tagged/sticky\" class=\"post-tag\" title=\"show questions tagged 'sticky'\" rel=\"tag\">sticky</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875193/bootstrap-navbar-doesnt-open-mobile-view\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:32Z\" class=\"relativetime\">51 secs ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4273361/tal\">Tal</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">75</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875191\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;#listitem&quot;},&quot;item_container&quot;:true,&quot;id&quot;:&quot;child&quot;,&quot;container_id&quot;:&quot;root&quot;,&quot;repeated&quot;:true}\">\n    <div onclick=\"window.location.href='/questions/31875191/magento-ajax-issue'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875191/magento-ajax-issue\" class=\"question-hyperlink\" title=\"I am trying to call magento ajex call request but not success.\n\nI have one .phtml page and its contains category when i click on any category i want to display category products on one slider so that ...\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;content&quot;: &quot;text&quot;,&quot;title&quot;: &quot;title&quot;,&quot;href&quot;: &quot;url&quot;},&quot;container_id&quot;:&quot;child&quot;}\">Magento ajax issue</a></h3>\n        <div class=\"tags t-magento t-magento-1û9\">\n            <a href=\"https://stackoverflow.com/questions/tagged/magento\" class=\"post-tag\" title=\"show questions tagged 'magento'\" rel=\"tag\">magento</a> <a href=\"https://stackoverflow.com/questions/tagged/magento-1.9\" class=\"post-tag\" title=\"show questions tagged 'magento-1.9'\" rel=\"tag\">magento-1.9</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875191/magento-ajax-issue\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:29Z\" class=\"relativetime\">54 secs ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4082606/mbhuva\">mbhuva</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">13</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872563\">\n    <div onclick=\"window.location.href='/questions/31872563/msbuild-xmlpeek-task-help-required'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872563/msbuild-xmlpeek-task-help-required\" class=\"question-hyperlink\" title=\"My sample.xml file is below\n\n&lt;deployment&gt;\n     &lt;definition type=&quot;xpath&quot;&gt;\n      &lt;xpath&gt;configuration/Settings/add[@key='NetworkPath'][@value]&lt;/xpath&gt;\n  ...\">MSBuild XmlPeek task help required</a></h3>\n        <div class=\"tags t-msbuild t-readxml\">\n            <a href=\"https://stackoverflow.com/questions/tagged/msbuild\" class=\"post-tag\" title=\"show questions tagged 'msbuild'\" rel=\"tag\">msbuild</a> <a href=\"https://stackoverflow.com/questions/tagged/readxml\" class=\"post-tag\" title=\"show questions tagged 'readxml'\" rel=\"tag\">readxml</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872563/msbuild-xmlpeek-task-help-required/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 10:09:27Z\" class=\"relativetime\" data-scrapy-annotate=\"{&quot;annotations&quot;: {&quot;title&quot;: &quot;date&quot;},&quot;container_id&quot;:&quot;child&quot;}\">55 secs ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3216712/fabian\">Fabian</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">277</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875190\">\n    <div onclick=\"window.location.href='/questions/31875190/the-average-over-each-row-but-without-including-the-first-value-of-each-row'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875190/the-average-over-each-row-but-without-including-the-first-value-of-each-row\" class=\"question-hyperlink\" title=\"I need your help to calculate the average over each row but without including the first value. f\n\n\n\nfor example in file\n1   12 13 14 15 16 17 18\n2   21 22 23 24 25 26 27 28 29\netc\n\nI ...\">the average over each row but without including the first value of each row</a></h3>\n        <div class=\"tags t-linux\">\n            <a href=\"https://stackoverflow.com/questions/tagged/linux\" class=\"post-tag\" title=\"show questions tagged 'linux'\" rel=\"tag\">linux</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875190/the-average-over-each-row-but-without-including-the-first-value-of-each-row\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:27Z\" class=\"relativetime\">55 secs ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4837507/mohsen-el-tahawy\">Mohsen El-Tahawy</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875185\">\n    <div onclick=\"window.location.href='/questions/31875185/excel-index-functionnon-vba-2-d-array-data-from-another-worksheet'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"1 view\">1</span></div>\n            <div>view</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875185/excel-index-functionnon-vba-2-d-array-data-from-another-worksheet\" class=\"question-hyperlink\" title=\"Ok I have something as follows in a worksheet and I want to grab it in another worksheet using something like\n=INDEX('Z:\\MI 2015[MIdata.xlsx]PL business Line ...\">excel index function(non vba) 2-D array data from another worksheet</a></h3>\n        <div class=\"tags t-arrays t-excel t-indexing t-worksheet\">\n            <a href=\"https://stackoverflow.com/questions/tagged/arrays\" class=\"post-tag\" title=\"show questions tagged 'arrays'\" rel=\"tag\">arrays</a> <a href=\"https://stackoverflow.com/questions/tagged/excel\" class=\"post-tag\" title=\"show questions tagged 'excel'\" rel=\"tag\">excel</a> <a href=\"https://stackoverflow.com/questions/tagged/indexing\" class=\"post-tag\" title=\"show questions tagged 'indexing'\" rel=\"tag\">indexing</a> <a href=\"https://stackoverflow.com/questions/tagged/worksheet\" class=\"post-tag\" title=\"show questions tagged 'worksheet'\" rel=\"tag\">worksheet</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875185/excel-index-functionnon-vba-2-d-array-data-from-another-worksheet\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:20Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5151911/pat-tierney\">Pat Tierney</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875175\">\n    <div onclick=\"window.location.href='/questions/31875175/getting-ping-fluctuation'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875175/getting-ping-fluctuation\" class=\"question-hyperlink\" title=\"i have two PC connected using 2 switches. (i.e. 1st PC+-----+Switch 1+----+Switch 2+----+2nd PC).\n\nIp- Adreess of 1st PC : 192.168.100.1\nIp- Adreess of 2nd PC : 192.168.100.51\n\n\nNote- I have connected ...\">Getting Ping Fluctuation</a></h3>\n        <div class=\"tags t-ping\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ping\" class=\"post-tag\" title=\"show questions tagged 'ping'\" rel=\"tag\">ping</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875175/getting-ping-fluctuation\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:07Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3112232/harsh\">Harsh</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">17</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875173\">\n    <div onclick=\"window.location.href='/questions/31875173/changing-the-font-size-of-the-tabs-across-the-top-of-my-big-cartel-store'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875173/changing-the-font-size-of-the-tabs-across-the-top-of-my-big-cartel-store\" class=\"question-hyperlink\" title=\"I am trying to change the size of the font of the tabs across the top of my big cartel store. They are the ones such as store, about, contact etc.\nI have tried with no success, I have very little ...\">Changing the font size of the tabs across the top of my big cartel store</a></h3>\n        <div class=\"tags t-font-size t-bigcartel\">\n            <a href=\"https://stackoverflow.com/questions/tagged/font-size\" class=\"post-tag\" title=\"show questions tagged 'font-size'\" rel=\"tag\">font-size</a> <a href=\"https://stackoverflow.com/questions/tagged/bigcartel\" class=\"post-tag\" title=\"show questions tagged 'bigcartel'\" rel=\"tag\">bigcartel</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875173/changing-the-font-size-of-the-tabs-across-the-top-of-my-big-cartel-store\" class=\"started-link\">asked <span title=\"2015-08-07 10:09:06Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201584/corinna\">Corinna</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875172\">\n    <div onclick=\"window.location.href='/questions/31875172/missing-glyphs-under-electron-linux'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875172/missing-glyphs-under-electron-linux\" class=\"question-hyperlink\" title=\"Under Electron, when I go to this page :\nhttp://copypastecharacter.com\n\nAlmost every glyphs are missing. I believe this is a default font issue. It works perfectly on Firefox and Chrome.\n\nI'm using ...\">Missing glyphs under Electron (linux)</a></h3>\n        <div class=\"tags t-linux t-fonts t-glyph t-electron\">\n            <a href=\"https://stackoverflow.com/questions/tagged/linux\" class=\"post-tag\" title=\"show questions tagged 'linux'\" rel=\"tag\">linux</a> <a href=\"https://stackoverflow.com/questions/tagged/fonts\" class=\"post-tag\" title=\"show questions tagged 'fonts'\" rel=\"tag\">fonts</a> <a href=\"https://stackoverflow.com/questions/tagged/glyph\" class=\"post-tag\" title=\"show questions tagged 'glyph'\" rel=\"tag\">glyph</a> <a href=\"https://stackoverflow.com/questions/tagged/electron\" class=\"post-tag\" title=\"show questions tagged 'electron'\" rel=\"tag\">electron</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875172/missing-glyphs-under-electron-linux\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:57Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1313127/xurei\">xurei</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">52</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875170\">\n    <div onclick=\"window.location.href='/questions/31875170/selenium-firefox-issue-in-xpath-with-div-tags-syntaxerror-the-expression-is'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875170/selenium-firefox-issue-in-xpath-with-div-tags-syntaxerror-the-expression-is\" class=\"question-hyperlink\" title=\"I am getting below error while trying to automate sample Qlikview web report though Selenium\n\nBrowser: Firefox\n\nXpath returned by FirePath: .//*[@id='58']/div[2]/div/div[1]/div[4]/div[1]\n\nException: ...\">Selenium - Firefox - Issue in xpath with Div tags SyntaxError: The expression is not a legal expression</a></h3>\n        <div class=\"tags t-html t-firefox t-selenium t-xpath t-relative-path\">\n            <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a> <a href=\"https://stackoverflow.com/questions/tagged/firefox\" class=\"post-tag\" title=\"show questions tagged 'firefox'\" rel=\"tag\"><img src=\"stack_overflow_files/WcBXc.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">firefox</a> <a href=\"https://stackoverflow.com/questions/tagged/selenium\" class=\"post-tag\" title=\"show questions tagged 'selenium'\" rel=\"tag\">selenium</a> <a href=\"https://stackoverflow.com/questions/tagged/xpath\" class=\"post-tag\" title=\"show questions tagged 'xpath'\" rel=\"tag\">xpath</a> <a href=\"https://stackoverflow.com/questions/tagged/relative-path\" class=\"post-tag\" title=\"show questions tagged 'relative-path'\" rel=\"tag\">relative-path</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875170/selenium-firefox-issue-in-xpath-with-div-tags-syntaxerror-the-expression-is\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:42Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201583/cyril\">Cyril</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873786\">\n    <div onclick=\"window.location.href='/questions/31873786/persist-marker-state-on-point-click-treemap-highchart'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"14 views\">14</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873786/persist-marker-state-on-point-click-treemap-highchart\" class=\"question-hyperlink\" title=\"I am working on TreeMap where I am able to give borderColor on Hover of a particular datapoint. The same in this fiddle link --&gt; http://jsfiddle.net/vgnshs/z8ncv2d5/.\n\nBut I am in need of requirement ...\">Persist Marker state on point click -Treemap - Highchart</a></h3>\n        <div class=\"tags t-javascript t-jquery t-highcharts\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/highcharts\" class=\"post-tag\" title=\"show questions tagged 'highcharts'\" rel=\"tag\">highcharts</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873786/persist-marker-state-on-point-click-treemap-highchart/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:08:38Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2021935/sebastian-bochan\">Sebastian Bochan</a> <span class=\"reputation-score\" title=\"reputation score 22264\" dir=\"ltr\">22.3k</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875162\">\n    <div onclick=\"window.location.href='/questions/31875162/in-app-purchases-mkstorekit-empty-available-products'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875162/in-app-purchases-mkstorekit-empty-available-products\" class=\"question-hyperlink\" title=\"I've got a problems with in-app purchases with using MKStoreKit.\nWhat already done:\n\n\nApp id was already created and tested via test flight\nAll contracts and agreements are valid\nCreated ...\">In-app purchases MKStoreKit empty available products</a></h3>\n        <div class=\"tags t-ios t-in-app-purchase t-itunesconnect t-in-app t-mkstorekit\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ios\" class=\"post-tag\" title=\"show questions tagged 'ios'\" rel=\"tag\">ios</a> <a href=\"https://stackoverflow.com/questions/tagged/in-app-purchase\" class=\"post-tag\" title=\"show questions tagged 'in-app-purchase'\" rel=\"tag\">in-app-purchase</a> <a href=\"https://stackoverflow.com/questions/tagged/itunesconnect\" class=\"post-tag\" title=\"show questions tagged 'itunesconnect'\" rel=\"tag\">itunesconnect</a> <a href=\"https://stackoverflow.com/questions/tagged/in-app\" class=\"post-tag\" title=\"show questions tagged 'in-app'\" rel=\"tag\">in-app</a> <a href=\"https://stackoverflow.com/questions/tagged/mkstorekit\" class=\"post-tag\" title=\"show questions tagged 'mkstorekit'\" rel=\"tag\">mkstorekit</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875162/in-app-purchases-mkstorekit-empty-available-products\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:30Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201558/sleepwalkingdev\">sleepwalkingDev</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875161\">\n    <div onclick=\"window.location.href='/questions/31875161/how-to-define-weights-in-gbm-package-kappa-statistic-for-class-imbalanced-data'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875161/how-to-define-weights-in-gbm-package-kappa-statistic-for-class-imbalanced-data\" class=\"question-hyperlink\" title=\"I would like to find a way to define weights for gbm in caret package. There is a parameter &quot;weights&quot; in the &quot;train&quot; function for &quot;caret&quot; package but the description says &quot;This argument will only ...\">How to define weights in gbm package &amp; Kappa statistic for class imbalanced data set (gbm)</a></h3>\n        <div class=\"tags t-r t-weight t-metric t-gbm\">\n            <a href=\"https://stackoverflow.com/questions/tagged/r\" class=\"post-tag\" title=\"show questions tagged 'r'\" rel=\"tag\">r</a> <a href=\"https://stackoverflow.com/questions/tagged/weight\" class=\"post-tag\" title=\"show questions tagged 'weight'\" rel=\"tag\">weight</a> <a href=\"https://stackoverflow.com/questions/tagged/metric\" class=\"post-tag\" title=\"show questions tagged 'metric'\" rel=\"tag\">metric</a> <a href=\"https://stackoverflow.com/questions/tagged/gbm\" class=\"post-tag\" title=\"show questions tagged 'gbm'\" rel=\"tag\">gbm</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875161/how-to-define-weights-in-gbm-package-kappa-statistic-for-class-imbalanced-data\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:30Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3630496/syebill\">syebill</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">64</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875160\">\n    <div onclick=\"window.location.href='/questions/31875160/finding-length-of-flats-of-a-sequence-in-r'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875160/finding-length-of-flats-of-a-sequence-in-r\" class=\"question-hyperlink\" title=\"I'm having a play with R, and am struggling to get to grips with the different programming style required.\n\nThe task I'm trying to do, is given a sequence of numbers e.g. (1,2,3,3,3,4,5,5,1), to work ...\">Finding length of flats of a sequence in R</a></h3>\n        <div class=\"tags t-r\">\n            <a href=\"https://stackoverflow.com/questions/tagged/r\" class=\"post-tag\" title=\"show questions tagged 'r'\" rel=\"tag\">r</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875160/finding-length-of-flats-of-a-sequence-in-r\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:29Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2665900/wmycroft\">WMycroft</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">72</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875159\">\n    <div onclick=\"window.location.href='/questions/31875159/is-there-a-way-to-identify-if-an-int-in-an-array-is-single-or-double-digit'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"1 view\">1</span></div>\n            <div>view</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875159/is-there-a-way-to-identify-if-an-int-in-an-array-is-single-or-double-digit\" class=\"question-hyperlink\" title=\"Eg array. [2,4,14,77]\n\narray[0] would print to the console &quot;single&quot;, whereas array[2] is of double digit; prints &quot;double&quot; for example..  How would one go about doing that?\n\">Is there a way to identify if an int in an array is single or double digit?</a></h3>\n        <div class=\"tags t-swift\">\n            <a href=\"https://stackoverflow.com/questions/tagged/swift\" class=\"post-tag\" title=\"show questions tagged 'swift'\" rel=\"tag\">swift</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875159/is-there-a-way-to-identify-if-an-int-in-an-array-is-single-or-double-digit\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:26Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5101499/miry-jone\">Miry Jone</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">36</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875158\">\n    <div onclick=\"window.location.href='/questions/31875158/jquery-javascript-unable-to-get-property-length-of-undefined-or-null-referen'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875158/jquery-javascript-unable-to-get-property-length-of-undefined-or-null-referen\" class=\"question-hyperlink\" title=\"I have the following code - All it does it grabs the value in a text box, performs regex on the string and then counts how many asterisks are in the string value:\n\nvar textBoxValue = $(textbox).val();\n...\">JQuery/Javascript - Unable to get property 'length' of undefined or null reference</a></h3>\n        <div class=\"tags t-javascript t-jquery t-regex t-frontend\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/regex\" class=\"post-tag\" title=\"show questions tagged 'regex'\" rel=\"tag\">regex</a> <a href=\"https://stackoverflow.com/questions/tagged/frontend\" class=\"post-tag\" title=\"show questions tagged 'frontend'\" rel=\"tag\">frontend</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875158/jquery-javascript-unable-to-get-property-length-of-undefined-or-null-referen\" class=\"started-link\">asked <span title=\"2015-08-07 10:08:25Z\" class=\"relativetime\">1 min ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3628611/give-me-chicken\">GIVE-ME-CHICKEN</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">120</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875143\">\n    <div onclick=\"window.location.href='/questions/31875143/blend-sample-data-not-shown'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875143/blend-sample-data-not-shown\" class=\"question-hyperlink\" title=\"I'm following tutorial and noticed that Sample Data doesn't work in VS 2015 Blend as in 2013 Blend. In tutorial and probably all guides by Microsoft all they say is to drag-n-drop sample data ...\">Blend Sample Data not shown</a></h3>\n        <div class=\"tags t-cñ t-xaml t-windows-phone-8 t-blend\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c%23\" class=\"post-tag\" title=\"show questions tagged 'c#'\" rel=\"tag\">c#</a> <a href=\"https://stackoverflow.com/questions/tagged/xaml\" class=\"post-tag\" title=\"show questions tagged 'xaml'\" rel=\"tag\">xaml</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-phone-8\" class=\"post-tag\" title=\"show questions tagged 'windows-phone-8'\" rel=\"tag\">windows-phone-8</a> <a href=\"https://stackoverflow.com/questions/tagged/blend\" class=\"post-tag\" title=\"show questions tagged 'blend'\" rel=\"tag\">blend</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875143/blend-sample-data-not-shown\" class=\"started-link\">asked <span title=\"2015-08-07 10:07:32Z\" class=\"relativetime\">2 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1897229/user1897229\">user1897229</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">110</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875142\">\n    <div onclick=\"window.location.href='/questions/31875142/jquery-deferred-then-fire-while-promise-is-pending'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875142/jquery-deferred-then-fire-while-promise-is-pending\" class=\"question-hyperlink\" title=\"I've created a wrapper javascript for calls to Facebook using the Facebook Javascript SDK. During the initialization I create a promise for the current state of loading the Facebook javascript. Every ...\">jQuery deferred then fire while promise is pending</a></h3>\n        <div class=\"tags t-javascript t-jquery t-promise t-deferred\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/promise\" class=\"post-tag\" title=\"show questions tagged 'promise'\" rel=\"tag\">promise</a> <a href=\"https://stackoverflow.com/questions/tagged/deferred\" class=\"post-tag\" title=\"show questions tagged 'deferred'\" rel=\"tag\">deferred</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875142/jquery-deferred-then-fire-while-promise-is-pending\" class=\"started-link\">asked <span title=\"2015-08-07 10:07:30Z\" class=\"relativetime\">2 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2285805/luketep\">Luketep</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">140</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875136\">\n    <div onclick=\"window.location.href='/questions/31875136/may-i-change-the-behavior-of-the-close-button-on-mac-with-xcode'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875136/may-i-change-the-behavior-of-the-close-button-on-mac-with-xcode\" class=\"question-hyperlink\" title=\"I'm developing a software on Mac on which a login screen appears straight after the software has been opened.\n\nThis is a typical login screen, but, I'd like that when the users closes this pop-up, ...\">May I change the behavior of the close button on MAC with Xcode</a></h3>\n        <div class=\"tags t-ios t-objective-c t-xcode t-osx\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ios\" class=\"post-tag\" title=\"show questions tagged 'ios'\" rel=\"tag\">ios</a> <a href=\"https://stackoverflow.com/questions/tagged/objective-c\" class=\"post-tag\" title=\"show questions tagged 'objective-c'\" rel=\"tag\">objective-c</a> <a href=\"https://stackoverflow.com/questions/tagged/xcode\" class=\"post-tag\" title=\"show questions tagged 'xcode'\" rel=\"tag\">xcode</a> <a href=\"https://stackoverflow.com/questions/tagged/osx\" class=\"post-tag\" title=\"show questions tagged 'osx'\" rel=\"tag\">osx</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875136/may-i-change-the-behavior-of-the-close-button-on-mac-with-xcode\" class=\"started-link\">asked <span title=\"2015-08-07 10:07:22Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5036660/xcrowzz\">Xcrowzz</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">4</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875135\">\n    <div onclick=\"window.location.href='/questions/31875135/dropdown-selected-value-use-only-once-on-add-button-in-angular-js'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875135/dropdown-selected-value-use-only-once-on-add-button-in-angular-js\" class=\"question-hyperlink\" title=\"Selected value from the drop down should be added when I click on add button, only once the value should be added to the result field. Some once can help me on this. below is code which i tried.\n\">dropdown selected value use only once on add button in angular js</a></h3>\n        <div class=\"tags t-angularjs t-ng-repeat t-selectedindex\">\n            <a href=\"https://stackoverflow.com/questions/tagged/angularjs\" class=\"post-tag\" title=\"show questions tagged 'angularjs'\" rel=\"tag\">angularjs</a> <a href=\"https://stackoverflow.com/questions/tagged/ng-repeat\" class=\"post-tag\" title=\"show questions tagged 'ng-repeat'\" rel=\"tag\">ng-repeat</a> <a href=\"https://stackoverflow.com/questions/tagged/selectedindex\" class=\"post-tag\" title=\"show questions tagged 'selectedindex'\" rel=\"tag\">selectedindex</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875135/dropdown-selected-value-use-only-once-on-add-button-in-angular-js\" class=\"started-link\">asked <span title=\"2015-08-07 10:07:16Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201526/elakkiya-karunanithi\">Elakkiya Karunanithi</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875131\">\n    <div onclick=\"window.location.href='/questions/31875131/soft-wraps-in-r-java-android'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875131/soft-wraps-in-r-java-android\" class=\"question-hyperlink\" title=\"I have some problem with R.java on Android Studio. I need to know id numbers of some drawable elements, but now I can't find them in R.java. There is a line:\n\n...\">Soft Wraps in R.java, android</a></h3>\n        <div class=\"tags t-android t-r t-android-studio\">\n            <a href=\"https://stackoverflow.com/questions/tagged/android\" class=\"post-tag\" title=\"show questions tagged 'android'\" rel=\"tag\"><img src=\"stack_overflow_files/tKsDb.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">android</a> <a href=\"https://stackoverflow.com/questions/tagged/r\" class=\"post-tag\" title=\"show questions tagged 'r'\" rel=\"tag\">r</a> <a href=\"https://stackoverflow.com/questions/tagged/android-studio\" class=\"post-tag\" title=\"show questions tagged 'android-studio'\" rel=\"tag\">android-studio</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875131/soft-wraps-in-r-java-android\" class=\"started-link\">asked <span title=\"2015-08-07 10:07:12Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201557/sombrero\">Sombrero</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875088\">\n    <div onclick=\"window.location.href='/questions/31875088/how-to-backout-to-an-older-version-ignoring-all-versions-after-that'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875088/how-to-backout-to-an-older-version-ignoring-all-versions-after-that\" class=\"question-hyperlink\" title=\"I have 3 commits which I pushed to the public repository accidentally. I want to revert to an older version (a version before these 3 commits happened) and make it the current code in our public ...\">how to backout to an older version ignoring all versions after that</a></h3>\n        <div class=\"tags t-mercurial t-tortoisehg\">\n            <a href=\"https://stackoverflow.com/questions/tagged/mercurial\" class=\"post-tag\" title=\"show questions tagged 'mercurial'\" rel=\"tag\">mercurial</a> <a href=\"https://stackoverflow.com/questions/tagged/tortoisehg\" class=\"post-tag\" title=\"show questions tagged 'tortoisehg'\" rel=\"tag\">tortoisehg</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875088/how-to-backout-to-an-older-version-ignoring-all-versions-after-that\" class=\"started-link\">modified <span title=\"2015-08-07 10:07:00Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/243557/nathanchere\">nathanchere</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">3,654</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875126\">\n    <div onclick=\"window.location.href='/questions/31875126/how-to-change-url-for-swagger-ui-with-spring'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875126/how-to-change-url-for-swagger-ui-with-spring\" class=\"question-hyperlink\" title=\"I am using swagger-ui with spring mvc. Here is my configuration class:\n\n@Configuration\n@EnableWebMvc\n@EnableSwagger2\npublic class ApiDocsConfiguration extends WebMvcConfigurerAdapter {\n\n@Bean\npublic ...\">How to change url for swagger-ui with spring?</a></h3>\n        <div class=\"tags t-spring t-swagger t-swagger-ui\">\n            <a href=\"https://stackoverflow.com/questions/tagged/spring\" class=\"post-tag\" title=\"show questions tagged 'spring'\" rel=\"tag\">spring</a> <a href=\"https://stackoverflow.com/questions/tagged/swagger\" class=\"post-tag\" title=\"show questions tagged 'swagger'\" rel=\"tag\">swagger</a> <a href=\"https://stackoverflow.com/questions/tagged/swagger-ui\" class=\"post-tag\" title=\"show questions tagged 'swagger-ui'\" rel=\"tag\">swagger-ui</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875126/how-to-change-url-for-swagger-ui-with-spring\" class=\"started-link\">asked <span title=\"2015-08-07 10:06:59Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3884101/kellzerirl\">kellzerIrl</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">15</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874733\">\n    <div onclick=\"window.location.href='/questions/31874733/how-to-read-action-methods-attributes-in-asp-net-5'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"3 answers\">3</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"26 views\">26</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874733/how-to-read-action-methods-attributes-in-asp-net-5\" class=\"question-hyperlink\" title=\"Based on this article I'm trying to create an IActionFilter implementation for ASP.NET 5 that can process attributes that are marked on the controller and the controller's action. Although reading the ...\">How to read action method's attributes in ASP.NET 5?</a></h3>\n        <div class=\"tags t-cñ t-ûnet t-aspûnet-mvc t-aspûnet-5\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c%23\" class=\"post-tag\" title=\"show questions tagged 'c#'\" rel=\"tag\">c#</a> <a href=\"https://stackoverflow.com/questions/tagged/.net\" class=\"post-tag\" title=\"show questions tagged '.net'\" rel=\"tag\">.net</a> <a href=\"https://stackoverflow.com/questions/tagged/asp.net-mvc\" class=\"post-tag\" title=\"show questions tagged 'asp.net-mvc'\" rel=\"tag\">asp.net-mvc</a> <a href=\"https://stackoverflow.com/questions/tagged/asp.net-5\" class=\"post-tag\" title=\"show questions tagged 'asp.net-5'\" rel=\"tag\">asp.net-5</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874733/how-to-read-action-methods-attributes-in-asp-net-5/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:06:50Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1823494/henk-mollema\">Henk Mollema</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">4,751</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31861296\">\n    <div onclick=\"window.location.href='/questions/31861296/pywintypes-com-error-using-mlab'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"13 views\">13</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31861296/pywintypes-com-error-using-mlab\" class=\"question-hyperlink\" title=\"I want to call matlab from python using mlab.\nWhen I do the following\n\nfrom mlab.releases import R2012a as matlab\n\n\nI get the following error:\n\nException AssertionError: AssertionError() in &lt;bound ...\">pywintypes.com_error using mlab</a></h3>\n        <div class=\"tags t-python t-matlab t-win32com t-mlab t-pythoncom\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/matlab\" class=\"post-tag\" title=\"show questions tagged 'matlab'\" rel=\"tag\">matlab</a> <a href=\"https://stackoverflow.com/questions/tagged/win32com\" class=\"post-tag\" title=\"show questions tagged 'win32com'\" rel=\"tag\">win32com</a> <a href=\"https://stackoverflow.com/questions/tagged/mlab\" class=\"post-tag\" title=\"show questions tagged 'mlab'\" rel=\"tag\">mlab</a> <a href=\"https://stackoverflow.com/questions/tagged/pythoncom\" class=\"post-tag\" title=\"show questions tagged 'pythoncom'\" rel=\"tag\">pythoncom</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31861296/pywintypes-com-error-using-mlab\" class=\"started-link\">modified <span title=\"2015-08-07 10:06:26Z\" class=\"relativetime\">3 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3820991/user3820991\">user3820991</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">100</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875116\">\n    <div onclick=\"window.location.href='/questions/31875116/sorting-on-hidden-data'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875116/sorting-on-hidden-data\" class=\"question-hyperlink\" title=\"Is it possible to have data in a Handsontable sorted by a field which is not displayed? I have a grid of data which I would like to display that contains a column called &quot;sortOrder&quot;, but I don't want ...\">Sorting on hidden data</a></h3>\n        <div class=\"tags t-handsontable\">\n            <a href=\"https://stackoverflow.com/questions/tagged/handsontable\" class=\"post-tag\" title=\"show questions tagged 'handsontable'\" rel=\"tag\">handsontable</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875116/sorting-on-hidden-data\" class=\"started-link\">asked <span title=\"2015-08-07 10:06:21Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4929685/jitesh-vassa\">Jitesh Vassa</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">23</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874974\">\n    <div onclick=\"window.location.href='/questions/31874974/jquery-on-update-event-handlers-arent-working-and-i-cant-figure-out-why'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"14 views\">14</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874974/jquery-on-update-event-handlers-arent-working-and-i-cant-figure-out-why\" class=\"question-hyperlink\" title=\"I'm trying to make a simple calculator for rent arrears, so that as soon as the user types in their values, the &quot;results&quot; section of the table will auto-fill with their results.\n\nAt the moment when ...\">jQuery on update event handlers aren't working and I can't figure out why</a></h3>\n        <div class=\"tags t-javascript t-jquery t-events t-datepicker t-event-handling\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/events\" class=\"post-tag\" title=\"show questions tagged 'events'\" rel=\"tag\">events</a> <a href=\"https://stackoverflow.com/questions/tagged/datepicker\" class=\"post-tag\" title=\"show questions tagged 'datepicker'\" rel=\"tag\">datepicker</a> <a href=\"https://stackoverflow.com/questions/tagged/event-handling\" class=\"post-tag\" title=\"show questions tagged 'event-handling'\" rel=\"tag\">event-handling</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874974/jquery-on-update-event-handlers-arent-working-and-i-cant-figure-out-why\" class=\"started-link\">modified <span title=\"2015-08-07 10:06:15Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/989920/evolutionxbox\">evolutionxbox</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">526</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875111\">\n    <div onclick=\"window.location.href='/questions/31875111/report-server-configuration'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875111/report-server-configuration\" class=\"question-hyperlink\" title=\"when i right-click Report Server on sql server and try to configure it, i get this error message:\n\nAn unhandled exception occurred in a component in your application. If you click continue. Your ...\">report server configuration</a></h3>\n        <div class=\"tags t-sql t-reporting-services t-server\">\n            <a href=\"https://stackoverflow.com/questions/tagged/sql\" class=\"post-tag\" title=\"show questions tagged 'sql'\" rel=\"tag\">sql</a> <a href=\"https://stackoverflow.com/questions/tagged/reporting-services\" class=\"post-tag\" title=\"show questions tagged 'reporting-services'\" rel=\"tag\">reporting-services</a> <a href=\"https://stackoverflow.com/questions/tagged/server\" class=\"post-tag\" title=\"show questions tagged 'server'\" rel=\"tag\">server</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875111/report-server-configuration\" class=\"started-link\">asked <span title=\"2015-08-07 10:06:15Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201390/h-chemsseddine\">h.chemsseddine</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874478\">\n    <div onclick=\"window.location.href='/questions/31874478/how-to-set-uisegmentedcontrol-text-on-left-side'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"18 views\">18</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874478/how-to-set-uisegmentedcontrol-text-on-left-side\" class=\"question-hyperlink\" title=\"I want every segment text is alignment left, so I had try UIControl contentHorizontalAlignment, but it don't work, so I try to redraw UISegmentedControl, at beginning it will show at left, but if I ...\">how to set UISegmentedControl text on left side</a></h3>\n        <div class=\"tags t-ios t-objective-c t-uisegmentedcontrol\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ios\" class=\"post-tag\" title=\"show questions tagged 'ios'\" rel=\"tag\">ios</a> <a href=\"https://stackoverflow.com/questions/tagged/objective-c\" class=\"post-tag\" title=\"show questions tagged 'objective-c'\" rel=\"tag\">objective-c</a> <a href=\"https://stackoverflow.com/questions/tagged/uisegmentedcontrol\" class=\"post-tag\" title=\"show questions tagged 'uisegmentedcontrol'\" rel=\"tag\">uisegmentedcontrol</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874478/how-to-set-uisegmentedcontrol-text-on-left-side/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:06:12Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2783370/anbu-karthik\">Anbu.Karthik</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">8,243</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875098\">\n    <div onclick=\"window.location.href='/questions/31875098/modifying-grid-js-to-check-if-an-attribute-exists-before-appending-a-link'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875098/modifying-grid-js-to-check-if-an-attribute-exists-before-appending-a-link\" class=\"question-hyperlink\" title=\"I am trying to modifyt the grid.js thumbnail system. I added 4 more links to the original version, so that I can add a Facebook, Twitter, LinkedIn and &quot;Other&quot; buttons to the &quot;Website&quot; already present ...\">Modifying grid.js to check if an attribute exists before appending a link</a></h3>\n        <div class=\"tags t-javascript t-jquery t-html\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875098/modifying-grid-js-to-check-if-an-attribute-exists-before-appending-a-link\" class=\"started-link\">asked <span title=\"2015-08-07 10:05:48Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4653291/alessandro-valentini\">Alessandro Valentini</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873906\">\n    <div onclick=\"window.location.href='/questions/31873906/knockout-kendo-grid-databound-events'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"11 views\">11</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873906/knockout-kendo-grid-databound-events\" class=\"question-hyperlink\" title=\"I have a kendo ui grid using the knockout-kendo set.\n\nI have a few custom buttons in one column in the grid i.e. to make a ajax call for edit a entry in another div. What I done before (without the ...\">Knockout Kendo Grid dataBound events</a></h3>\n        <div class=\"tags t-javascript t-knockoutûjs t-kendo-ui t-knockout-kendo\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/knockout.js\" class=\"post-tag\" title=\"show questions tagged 'knockout.js'\" rel=\"tag\">knockout.js</a> <a href=\"https://stackoverflow.com/questions/tagged/kendo-ui\" class=\"post-tag\" title=\"show questions tagged 'kendo-ui'\" rel=\"tag\">kendo-ui</a> <a href=\"https://stackoverflow.com/questions/tagged/knockout-kendo\" class=\"post-tag\" title=\"show questions tagged 'knockout-kendo'\" rel=\"tag\">knockout-kendo</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873906/knockout-kendo-grid-databound-events\" class=\"started-link\">modified <span title=\"2015-08-07 10:05:47Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/978655/john\">John</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,852</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875092\">\n    <div onclick=\"window.location.href='/questions/31875092/jpa-entitygraph-based-on-meta-model-containing-mappedsuperclass-not-possible'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875092/jpa-entitygraph-based-on-meta-model-containing-mappedsuperclass-not-possible\" class=\"question-hyperlink\" title=\"I'm trying to use the type safe method EntityGraph.addAttributeNodes(Attribute&lt;T, ?&gt; ... attribute) for constructing my entity graph. I have a type hierarchy with a @MappedSuperclass that ...\">JPA EntityGraph based on meta model containing MappedSuperclass not possible?</a></h3>\n        <div class=\"tags t-java t-jpa t-entitygraph\">\n            <a href=\"https://stackoverflow.com/questions/tagged/java\" class=\"post-tag\" title=\"show questions tagged 'java'\" rel=\"tag\">java</a> <a href=\"https://stackoverflow.com/questions/tagged/jpa\" class=\"post-tag\" title=\"show questions tagged 'jpa'\" rel=\"tag\">jpa</a> <a href=\"https://stackoverflow.com/questions/tagged/entitygraph\" class=\"post-tag\" title=\"show questions tagged 'entitygraph'\" rel=\"tag\">entitygraph</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875092/jpa-entitygraph-based-on-meta-model-containing-mappedsuperclass-not-possible\" class=\"started-link\">asked <span title=\"2015-08-07 10:05:34Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1317155/hein-bl%c3%b6d\">Hein Blöd</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">314</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875085\">\n    <div onclick=\"window.location.href='/questions/31875085/gulp-cjsx-error-render-compilation'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875085/gulp-cjsx-error-render-compilation\" class=\"question-hyperlink\" title=\"I'm using gulp to compile a cjsx file (for Reacjs), but i have some trouble after compilation is done.\n\ngulpfile.js\n\ngulp.task('scripts', function ()   {\nreturn gulp.src('dev/scripts/**/*.cjsx')\n    ...\">Gulp CJSX Error render compilation</a></h3>\n        <div class=\"tags t-javascript t-coffeescript t-reactjs t-gulp t-preprocessor\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/coffeescript\" class=\"post-tag\" title=\"show questions tagged 'coffeescript'\" rel=\"tag\">coffeescript</a> <a href=\"https://stackoverflow.com/questions/tagged/reactjs\" class=\"post-tag\" title=\"show questions tagged 'reactjs'\" rel=\"tag\">reactjs</a> <a href=\"https://stackoverflow.com/questions/tagged/gulp\" class=\"post-tag\" title=\"show questions tagged 'gulp'\" rel=\"tag\">gulp</a> <a href=\"https://stackoverflow.com/questions/tagged/preprocessor\" class=\"post-tag\" title=\"show questions tagged 'preprocessor'\" rel=\"tag\">preprocessor</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875085/gulp-cjsx-error-render-compilation\" class=\"started-link\">asked <span title=\"2015-08-07 10:05:24Z\" class=\"relativetime\">4 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4556588/silphide-grpahik\">Silphide Grpahik</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874578\">\n    <div onclick=\"window.location.href='/questions/31874578/how-to-secure-a-webservice'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"-3 votes\">-3</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"3 answers\">3</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"16 views\">16</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874578/how-to-secure-a-webservice\" class=\"question-hyperlink\" title=\"I have a webservice with the name http://mywebsite.com/myapp/findname. The parameters it take is name. When i provide the name the return result will be the actual details of that person.\n\nI have a ...\">How to secure a webservice</a></h3>\n        <div class=\"tags t-php t-json t-web-services\">\n            <a href=\"https://stackoverflow.com/questions/tagged/php\" class=\"post-tag\" title=\"show questions tagged 'php'\" rel=\"tag\">php</a> <a href=\"https://stackoverflow.com/questions/tagged/json\" class=\"post-tag\" title=\"show questions tagged 'json'\" rel=\"tag\">json</a> <a href=\"https://stackoverflow.com/questions/tagged/web-services\" class=\"post-tag\" title=\"show questions tagged 'web-services'\" rel=\"tag\">web-services</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874578/how-to-secure-a-webservice/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:05:20Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5180522/kuldeep-singh\">Kuldeep Singh</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">26</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874942\">\n    <div onclick=\"window.location.href='/questions/31874942/apply-css-to-another-span-on-slide-of-a-carousel'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"15 views\">15</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874942/apply-css-to-another-span-on-slide-of-a-carousel\" class=\"question-hyperlink\" title=\"I have a carousel running at my site\n\ndiv id=&quot;weekCarousel_{{$index}}&quot; class=&quot;carousel slide&quot;&gt;\n                &lt;a href=&quot;#weekCarousel_{{$index}}&quot; data-slide=&quot;prev&quot; class=&quot;prevweek&quot;&gt;\n         ...\">apply css to another span on slide of a carousel</a></h3>\n        <div class=\"tags t-javascript t-jquery t-html t-css t-twitter-bootstrap\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a> <a href=\"https://stackoverflow.com/questions/tagged/css\" class=\"post-tag\" title=\"show questions tagged 'css'\" rel=\"tag\">css</a> <a href=\"https://stackoverflow.com/questions/tagged/twitter-bootstrap\" class=\"post-tag\" title=\"show questions tagged 'twitter-bootstrap'\" rel=\"tag\">twitter-bootstrap</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874942/apply-css-to-another-span-on-slide-of-a-carousel/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:05:19Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4718762/mrkz94\">mRkZ94</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">56</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875073\">\n    <div onclick=\"window.location.href='/questions/31875073/what-are-the-best-practices-for-handling-paged-data-on-fhir-servers'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875073/what-are-the-best-practices-for-handling-paged-data-on-fhir-servers\" class=\"question-hyperlink\" title=\"I am creating a proxy to access data on FHIR server. With the search operation on Patient resource i am getting following response from FHIR server:\n\n&lt;Bundle xmlns=&quot;http://hl7.org/fhir&quot;&gt;\n       ...\">What are the Best practices for handling paged data on FHIR servers?</a></h3>\n        <div class=\"tags t-xml t-pagination t-apigee t-hapi-fhir\">\n            <a href=\"https://stackoverflow.com/questions/tagged/xml\" class=\"post-tag\" title=\"show questions tagged 'xml'\" rel=\"tag\">xml</a> <a href=\"https://stackoverflow.com/questions/tagged/pagination\" class=\"post-tag\" title=\"show questions tagged 'pagination'\" rel=\"tag\">pagination</a> <a href=\"https://stackoverflow.com/questions/tagged/apigee\" class=\"post-tag\" title=\"show questions tagged 'apigee'\" rel=\"tag\">apigee</a> <a href=\"https://stackoverflow.com/questions/tagged/hapi-fhir\" class=\"post-tag\" title=\"show questions tagged 'hapi-fhir'\" rel=\"tag\">hapi-fhir</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875073/what-are-the-best-practices-for-handling-paged-data-on-fhir-servers\" class=\"started-link\">asked <span title=\"2015-08-07 10:05:03Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5143677/onkaar-singh\">Onkaar Singh</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">10</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875068\">\n    <div onclick=\"window.location.href='/questions/31875068/form-validation-is-not-working-when-loading-view-through-jquery-model'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875068/form-validation-is-not-working-when-loading-view-through-jquery-model\" class=\"question-hyperlink\" title=\"i have used to load update page inside jquery modal popup box.\n\ninside popup box when i try to update data it wont give me any error alert depending on the validation rules which i configure on my ...\">form validation is not working when loading view through jquery model</a></h3>\n        <div class=\"tags t-javascript t-jquery t-html t-laravel-5\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a> <a href=\"https://stackoverflow.com/questions/tagged/laravel-5\" class=\"post-tag\" title=\"show questions tagged 'laravel-5'\" rel=\"tag\">laravel-5</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875068/form-validation-is-not-working-when-loading-view-through-jquery-model\" class=\"started-link\">asked <span title=\"2015-08-07 10:04:41Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5184370/faz-faz\">faz faz</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">21</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875067\">\n    <div onclick=\"window.location.href='/questions/31875067/pusher-account-over-quota'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875067/pusher-account-over-quota\" class=\"question-hyperlink\" title=\"We use Puhser in our application in order to have real-time updates.\n\nSomething very stange happens - while google analytics says that we have around 200 simultaneous connections, Pusher says that we ...\">Pusher Account over quota</a></h3>\n        <div class=\"tags t-pusher\">\n            <a href=\"https://stackoverflow.com/questions/tagged/pusher\" class=\"post-tag\" title=\"show questions tagged 'pusher'\" rel=\"tag\">pusher</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875067/pusher-account-over-quota\" class=\"started-link\">asked <span title=\"2015-08-07 10:04:41Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1039488/guyaloni\">guyaloni</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">752</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875065\">\n    <div onclick=\"window.location.href='/questions/31875065/reuse-identifier-in-nib-does-not-match-the-identifier-used-to-register-the-nib'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875065/reuse-identifier-in-nib-does-not-match-the-identifier-used-to-register-the-nib\" class=\"question-hyperlink\" title=\"I have a Framework/Module written in Swift which provides some custom controls with IBDesignable functionality.\n\nCurrently I am working on a control based on a CollectionView. The CollectionView and ...\">Reuse identifier in nib does not match the identifier used to register the nib</a></h3>\n        <div class=\"tags t-xcode t-uicollectionview t-uicollectionviewcell t-swift2 t-ibdesignable\">\n            <a href=\"https://stackoverflow.com/questions/tagged/xcode\" class=\"post-tag\" title=\"show questions tagged 'xcode'\" rel=\"tag\">xcode</a> <a href=\"https://stackoverflow.com/questions/tagged/uicollectionview\" class=\"post-tag\" title=\"show questions tagged 'uicollectionview'\" rel=\"tag\">uicollectionview</a> <a href=\"https://stackoverflow.com/questions/tagged/uicollectionviewcell\" class=\"post-tag\" title=\"show questions tagged 'uicollectionviewcell'\" rel=\"tag\">uicollectionviewcell</a> <a href=\"https://stackoverflow.com/questions/tagged/swift2\" class=\"post-tag\" title=\"show questions tagged 'swift2'\" rel=\"tag\">swift2</a> <a href=\"https://stackoverflow.com/questions/tagged/ibdesignable\" class=\"post-tag\" title=\"show questions tagged 'ibdesignable'\" rel=\"tag\">ibdesignable</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875065/reuse-identifier-in-nib-does-not-match-the-identifier-used-to-register-the-nib\" class=\"started-link\">asked <span title=\"2015-08-07 10:04:34Z\" class=\"relativetime\">5 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1128713/user1128713\">user1128713</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">126</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873867\">\n    <div onclick=\"window.location.href='/questions/31873867/how-to-find-locations-near-a-given-location'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"11 views\">11</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873867/how-to-find-locations-near-a-given-location\" class=\"question-hyperlink\" title=\"I am trying to create a Bounding Box (or a circle) for the given latitude and longitude with some distance(or radius) using Python3.\n\nI have gone through the previous solutions for this problem but I ...\">How to find locations near a given location</a></h3>\n        <div class=\"tags t-python t-mongodb t-geolocation t-mongodb-query\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/mongodb\" class=\"post-tag\" title=\"show questions tagged 'mongodb'\" rel=\"tag\">mongodb</a> <a href=\"https://stackoverflow.com/questions/tagged/geolocation\" class=\"post-tag\" title=\"show questions tagged 'geolocation'\" rel=\"tag\">geolocation</a> <a href=\"https://stackoverflow.com/questions/tagged/mongodb-query\" class=\"post-tag\" title=\"show questions tagged 'mongodb-query'\" rel=\"tag\">mongodb-query</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873867/how-to-find-locations-near-a-given-location/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:03:51Z\" class=\"relativetime\">6 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5031275/blakes-seven\">Blakes Seven</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">5,919</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874930\">\n    <div onclick=\"window.location.href='/questions/31874930/load-nth-number-of-class-from-url-in-iframe-using-jquery'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874930/load-nth-number-of-class-from-url-in-iframe-using-jquery\" class=\"question-hyperlink\" title=\"I want to load specific div of external url in iframe, For that i am doing this,\n\n$(&quot;document&quot;).ready(function(){\n    $('#iframediv').load('URL_TO_LOAD .tborder');\n});\n\n&lt;div ...\">load nth number of class from url in iframe using jquery</a></h3>\n        <div class=\"tags t-javascript t-jquery t-html t-iframe\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a> <a href=\"https://stackoverflow.com/questions/tagged/iframe\" class=\"post-tag\" title=\"show questions tagged 'iframe'\" rel=\"tag\">iframe</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874930/load-nth-number-of-class-from-url-in-iframe-using-jquery/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 10:03:28Z\" class=\"relativetime\">6 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1175881/mathlight\">Mathlight</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">2,143</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875038\">\n    <div onclick=\"window.location.href='/questions/31875038/listen-any-changes-event-on-table-html-by-jquery'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"13 views\">13</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875038/listen-any-changes-event-on-table-html-by-jquery\" class=\"question-hyperlink\" title=\"I want to make Total field in HTML table always listen if any changes on Qty/Price/Disc field (see below). So Total field always updated.\n\nId | Product | Qty | Price | Disc | Total\n1  |    A    |  1  ...\">Listen any changes event on table HTML by jQuery</a></h3>\n        <div class=\"tags t-javascript t-jquery t-html\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875038/listen-any-changes-event-on-table-html-by-jquery\" class=\"started-link\">asked <span title=\"2015-08-07 10:03:24Z\" class=\"relativetime\">6 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2251267/andrefadila\">andrefadila</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">124</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875037\">\n    <div onclick=\"window.location.href='/questions/31875037/how-to-find-windows-phone-8-1-store-link-in-new-windows-dev-center-before-publis'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875037/how-to-find-windows-phone-8-1-store-link-in-new-windows-dev-center-before-publis\" class=\"question-hyperlink\" title=\"I am going to publish a new Windows Phone 8.1 application using the new Windows Dev Center and I would like to know the Windows Phone 8.1 store link before publishing the application.\n\nIn the old ...\">How to find Windows Phone 8.1 store link in new Windows Dev Center before publishing?</a></h3>\n        <div class=\"tags t-windows-phone-8û1 t-windows-phone t-windows-10 t-windows-dev-center\">\n            <a href=\"https://stackoverflow.com/questions/tagged/windows-phone-8.1\" class=\"post-tag\" title=\"show questions tagged 'windows-phone-8.1'\" rel=\"tag\">windows-phone-8.1</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-phone\" class=\"post-tag\" title=\"show questions tagged 'windows-phone'\" rel=\"tag\">windows-phone</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-10\" class=\"post-tag\" title=\"show questions tagged 'windows-10'\" rel=\"tag\">windows-10</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-dev-center\" class=\"post-tag\" title=\"show questions tagged 'windows-dev-center'\" rel=\"tag\">windows-dev-center</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875037/how-to-find-windows-phone-8-1-store-link-in-new-windows-dev-center-before-publis\" class=\"started-link\">asked <span title=\"2015-08-07 10:03:17Z\" class=\"relativetime\">7 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1958275/meneses\">Meneses</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,397</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875034\">\n    <div onclick=\"window.location.href='/questions/31875034/add-row-in-datagridview-with-data-bound-control'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875034/add-row-in-datagridview-with-data-bound-control\" class=\"question-hyperlink\" title=\"I have a form with two datagridview that gets items from a mysql database.\n\nMy goal is to click an item of the first DGV and get  it inserted into the second, then (pressing a button) update the table ...\">Add row in DataGridView with data-bound control</a></h3>\n        <div class=\"tags t-mysql t-vbûnet t-datagridview\">\n            <a href=\"https://stackoverflow.com/questions/tagged/mysql\" class=\"post-tag\" title=\"show questions tagged 'mysql'\" rel=\"tag\">mysql</a> <a href=\"https://stackoverflow.com/questions/tagged/vb.net\" class=\"post-tag\" title=\"show questions tagged 'vb.net'\" rel=\"tag\">vb.net</a> <a href=\"https://stackoverflow.com/questions/tagged/datagridview\" class=\"post-tag\" title=\"show questions tagged 'datagridview'\" rel=\"tag\">datagridview</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875034/add-row-in-datagridview-with-data-bound-control\" class=\"started-link\">asked <span title=\"2015-08-07 10:02:47Z\" class=\"relativetime\">7 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4293613/genespos\">genespos</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">343</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31827635\">\n    <div onclick=\"window.location.href='/questions/31827635/resolve-dbref-into-json'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered-accepted\" title=\"one of the answers was accepted as the correct answer\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"17 views\">17</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31827635/resolve-dbref-into-json\" class=\"question-hyperlink\" title=\"I'm getting the following error in a Normalized Data Model structure in MongoDB:\n\norg.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mongodb.DBRef\n\n\nIt's ...\">Resolve DBRef into Json</a></h3>\n        <div class=\"tags t-java t-json t-mongodb t-dbref\">\n            <a href=\"https://stackoverflow.com/questions/tagged/java\" class=\"post-tag\" title=\"show questions tagged 'java'\" rel=\"tag\">java</a> <a href=\"https://stackoverflow.com/questions/tagged/json\" class=\"post-tag\" title=\"show questions tagged 'json'\" rel=\"tag\">json</a> <a href=\"https://stackoverflow.com/questions/tagged/mongodb\" class=\"post-tag\" title=\"show questions tagged 'mongodb'\" rel=\"tag\">mongodb</a> <a href=\"https://stackoverflow.com/questions/tagged/dbref\" class=\"post-tag\" title=\"show questions tagged 'dbref'\" rel=\"tag\">dbref</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31827635/resolve-dbref-into-json/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 10:02:43Z\" class=\"relativetime\">7 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4004588/georgi\">Georgi</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">26</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875029\">\n    <div onclick=\"window.location.href='/questions/31875029/installing-python-tesseract-on-a-linux-system'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875029/installing-python-tesseract-on-a-linux-system\" class=\"question-hyperlink\" title=\"I am having trouble installing python-tesseract on my linux system. I've been using this tutorial:\nhttp://delimitry.blogspot.be/2014/10/installing-tesseract-for-python-on.html\n\nThe error I get is:\n\n ...\">Installing Python-Tesseract on a Linux system</a></h3>\n        <div class=\"tags t-python t-linux t-runtime-error t-tesseract t-python-tesseract\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/linux\" class=\"post-tag\" title=\"show questions tagged 'linux'\" rel=\"tag\">linux</a> <a href=\"https://stackoverflow.com/questions/tagged/runtime-error\" class=\"post-tag\" title=\"show questions tagged 'runtime-error'\" rel=\"tag\">runtime-error</a> <a href=\"https://stackoverflow.com/questions/tagged/tesseract\" class=\"post-tag\" title=\"show questions tagged 'tesseract'\" rel=\"tag\">tesseract</a> <a href=\"https://stackoverflow.com/questions/tagged/python-tesseract\" class=\"post-tag\" title=\"show questions tagged 'python-tesseract'\" rel=\"tag\">python-tesseract</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875029/installing-python-tesseract-on-a-linux-system\" class=\"started-link\">asked <span title=\"2015-08-07 10:02:40Z\" class=\"relativetime\">7 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201263/phillip-graham\">Phillip Graham</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875020\">\n    <div onclick=\"window.location.href='/questions/31875020/are-generators-in-javascript-functionally-equivalent-to-coroutines-in-other-lang'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"10 views\">10</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875020/are-generators-in-javascript-functionally-equivalent-to-coroutines-in-other-lang\" class=\"question-hyperlink\" title=\"In ECMAScript 6, there is a feature being implemented called &quot;generators&quot;.\n\n&quot;Generators&quot; seem to be functionally equivalent to &quot;coroutines&quot; from other programming languages.  JavaScript even uses ...\">Are generators in JavaScript functionally equivalent to coroutines in other languages?</a></h3>\n        <div class=\"tags t-javascript t-generator t-ecmascript-6 t-coroutine\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/generator\" class=\"post-tag\" title=\"show questions tagged 'generator'\" rel=\"tag\">generator</a> <a href=\"https://stackoverflow.com/questions/tagged/ecmascript-6\" class=\"post-tag\" title=\"show questions tagged 'ecmascript-6'\" rel=\"tag\">ecmascript-6</a> <a href=\"https://stackoverflow.com/questions/tagged/coroutine\" class=\"post-tag\" title=\"show questions tagged 'coroutine'\" rel=\"tag\">coroutine</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875020/are-generators-in-javascript-functionally-equivalent-to-coroutines-in-other-lang\" class=\"started-link\">asked <span title=\"2015-08-07 10:02:20Z\" class=\"relativetime\">8 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3117575/jamen\">Jamen</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,876</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31875017\">\n    <div onclick=\"window.location.href='/questions/31875017/single-git-push-to-two-remotes-with-two-different-config-files'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31875017/single-git-push-to-two-remotes-with-two-different-config-files\" class=\"question-hyperlink\" title=\"I have code that I push to my Bitbucket account regularly. Now, I want to push to two different remotes with single commit, but with different git.config files.\nI know that I can setup different ...\">Single Git push to two remotes with two different Config files?</a></h3>\n        <div class=\"tags t-git t-git-config\">\n            <a href=\"https://stackoverflow.com/questions/tagged/git\" class=\"post-tag\" title=\"show questions tagged 'git'\" rel=\"tag\">git</a> <a href=\"https://stackoverflow.com/questions/tagged/git-config\" class=\"post-tag\" title=\"show questions tagged 'git-config'\" rel=\"tag\">git-config</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31875017/single-git-push-to-two-remotes-with-two-different-config-files\" class=\"started-link\">asked <span title=\"2015-08-07 10:02:10Z\" class=\"relativetime\">8 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1988395/black123\">black123</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">88</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874770\">\n    <div onclick=\"window.location.href='/questions/31874770/overflowerror-sleep-length-is-too-large-python-mechanize'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874770/overflowerror-sleep-length-is-too-large-python-mechanize\" class=\"question-hyperlink\" title=\"I am trying to fill a web form using Python Script. I am using Mechanize module to handle the web form but when I try to open the login page it gives me error like\n\n\n  self._sleep(pause)\n\n  ...\">OverflowError : sleep length is too large, Python, Mechanize</a></h3>\n        <div class=\"tags t-python t-mechanize t-mechanize-python\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/mechanize\" class=\"post-tag\" title=\"show questions tagged 'mechanize'\" rel=\"tag\">mechanize</a> <a href=\"https://stackoverflow.com/questions/tagged/mechanize-python\" class=\"post-tag\" title=\"show questions tagged 'mechanize-python'\" rel=\"tag\">mechanize-python</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874770/overflowerror-sleep-length-is-too-large-python-mechanize\" class=\"started-link\">modified <span title=\"2015-08-07 10:01:32Z\" class=\"relativetime\">8 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/15541/leppie\">leppie</a> <span class=\"reputation-score\" title=\"reputation score 75269\" dir=\"ltr\">75.3k</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31866162\">\n    <div onclick=\"window.location.href='/questions/31866162/oracle-regex-eliminate-all-duplicate-words'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"28 views\">28</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31866162/oracle-regex-eliminate-all-duplicate-words\" class=\"question-hyperlink\" title=\"I would like to eliminate all duplicate words in a comma separated list.\n\nI've tried with:\n\nSELECT\n  REGEXP_REPLACE(\n    '1234,234,1234,1234,928,1234,123,1234,Abcd,1234,1234',\n    '([^,\\w]+)(,[ ...\">Oracle regex eliminate all duplicate words</a></h3>\n        <div class=\"tags t-regex t-oracle t-select\">\n            <a href=\"https://stackoverflow.com/questions/tagged/regex\" class=\"post-tag\" title=\"show questions tagged 'regex'\" rel=\"tag\">regex</a> <a href=\"https://stackoverflow.com/questions/tagged/oracle\" class=\"post-tag\" title=\"show questions tagged 'oracle'\" rel=\"tag\">oracle</a> <a href=\"https://stackoverflow.com/questions/tagged/select\" class=\"post-tag\" title=\"show questions tagged 'select'\" rel=\"tag\">select</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31866162/oracle-regex-eliminate-all-duplicate-words\" class=\"started-link\">modified <span title=\"2015-08-07 10:01:22Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4025963/david\">David</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">600</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874679\">\n    <div onclick=\"window.location.href='/questions/31874679/search-for-sequences-in-multiple-vectors'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"3 votes\">3</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"13 views\">13</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874679/search-for-sequences-in-multiple-vectors\" class=\"question-hyperlink\" title=\"What is the easiest way to find the sequence I need in multiple vectors in R without using loops?\nFor example, I need to find vectors their &quot;yahoo&quot; comes after &quot;google&quot;(only order matters).\n\nseq = ...\">Search for sequences in multiple vectors</a></h3>\n        <div class=\"tags t-regex t-r\">\n            <a href=\"https://stackoverflow.com/questions/tagged/regex\" class=\"post-tag\" title=\"show questions tagged 'regex'\" rel=\"tag\">regex</a> <a href=\"https://stackoverflow.com/questions/tagged/r\" class=\"post-tag\" title=\"show questions tagged 'r'\" rel=\"tag\">r</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874679/search-for-sequences-in-multiple-vectors\" class=\"started-link\">modified <span title=\"2015-08-07 10:01:06Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3732271/akrun\">akrun</a> <span class=\"reputation-score\" title=\"reputation score 89338\" dir=\"ltr\">89.3k</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874997\">\n    <div onclick=\"window.location.href='/questions/31874997/rails-in-production-with-apachepassenger-error'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874997/rails-in-production-with-apachepassenger-error\" class=\"question-hyperlink\" title=\"Last days i'm trying to put my rails app in production with apache and passenger(no rvm), but still nothing. In my browser i get an error like this:\n\nWe're sorry, but something went wrong.\nWe've been ...\">Rails in production with Apache+passenger error</a></h3>\n        <div class=\"tags t-ruby-on-rails t-apache\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ruby-on-rails\" class=\"post-tag\" title=\"show questions tagged 'ruby-on-rails'\" rel=\"tag\">ruby-on-rails</a> <a href=\"https://stackoverflow.com/questions/tagged/apache\" class=\"post-tag\" title=\"show questions tagged 'apache'\" rel=\"tag\">apache</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874997/rails-in-production-with-apachepassenger-error\" class=\"started-link\">asked <span title=\"2015-08-07 10:01:03Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5145795/gregory-ynwa\">Gregory_ynwa</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874990\">\n    <div onclick=\"window.location.href='/questions/31874990/async-task-android-execute'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"18 views\">18</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874990/async-task-android-execute\" class=\"question-hyperlink\" title=\"This was asked in one of the Android interviews. I was asked whether it's possible to start another async task (let it be Task2) from doInBackground() method of async task 1(let it be Task1). I had ...\">Async task Android execute</a></h3>\n        <div class=\"tags t-android t-android-asynctask\">\n            <a href=\"https://stackoverflow.com/questions/tagged/android\" class=\"post-tag\" title=\"show questions tagged 'android'\" rel=\"tag\"><img src=\"stack_overflow_files/tKsDb.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">android</a> <a href=\"https://stackoverflow.com/questions/tagged/android-asynctask\" class=\"post-tag\" title=\"show questions tagged 'android-asynctask'\" rel=\"tag\">android-asynctask</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874990/async-task-android-execute\" class=\"started-link\">asked <span title=\"2015-08-07 10:00:44Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1671058/gaurav-jain\">gaurav jain</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">605</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874973\">\n    <div onclick=\"window.location.href='/questions/31874973/export-to-excel-issue-in-chrome-and-firefox'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"7 views\">7</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874973/export-to-excel-issue-in-chrome-and-firefox\" class=\"question-hyperlink\" title=\"function fnExcelReport(nname) {\n//alert(nname);\n    var tab_text=&quot;&lt;table border='2px'&gt;&lt;tr bgcolor='#87AFC6'&gt;&quot;;\n    var textRange; var j=0;\n    tab = document.getElementById(&quot;mytable&quot;); // ...\">Export to Excel issue in Chrome and Firefox</a></h3>\n        <div class=\"tags t-javascript\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874973/export-to-excel-issue-in-chrome-and-firefox\" class=\"started-link\">modified <span title=\"2015-08-07 10:00:41Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1249581/vision\">VisioN</a> <span class=\"reputation-score\" title=\"reputation score 72931\" dir=\"ltr\">72.9k</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874674\">\n    <div onclick=\"window.location.href='/questions/31874674/multithreading-in-python-for-reading-files'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"20 views\">20</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874674/multithreading-in-python-for-reading-files\" class=\"question-hyperlink\" title=\"I am new to Python, and have never tried Multithreading.\nMy objective is to read set of file and get some specific data from the file.\nI have already created a code which is doing my task perfectly. ...\">Multithreading in Python for reading files</a></h3>\n        <div class=\"tags t-python t-multithreading t-python-2û7\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/multithreading\" class=\"post-tag\" title=\"show questions tagged 'multithreading'\" rel=\"tag\">multithreading</a> <a href=\"https://stackoverflow.com/questions/tagged/python-2.7\" class=\"post-tag\" title=\"show questions tagged 'python-2.7'\" rel=\"tag\">python-2.7</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874674/multithreading-in-python-for-reading-files/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 10:00:24Z\" class=\"relativetime\">9 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1193279/heinzkurt\">HeinzKurt</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">71</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874977\">\n    <div onclick=\"window.location.href='/questions/31874977/call-an-angularjs-function-when-an-nfc-tag-is-read'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874977/call-an-angularjs-function-when-an-nfc-tag-is-read\" class=\"question-hyperlink\" title=\"I've written a small demo application using Ionic and the phonegap-nfc which can read the unique ID from an NFC tag.\n\nNow, I'm trying to create a list that shows previous read events. An event should ...\">Call an AngularJS function when an NFC tag is read?</a></h3>\n        <div class=\"tags t-javascript t-angularjs t-cordova t-ionic t-nfc\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/angularjs\" class=\"post-tag\" title=\"show questions tagged 'angularjs'\" rel=\"tag\">angularjs</a> <a href=\"https://stackoverflow.com/questions/tagged/cordova\" class=\"post-tag\" title=\"show questions tagged 'cordova'\" rel=\"tag\">cordova</a> <a href=\"https://stackoverflow.com/questions/tagged/ionic\" class=\"post-tag\" title=\"show questions tagged 'ionic'\" rel=\"tag\">ionic</a> <a href=\"https://stackoverflow.com/questions/tagged/nfc\" class=\"post-tag\" title=\"show questions tagged 'nfc'\" rel=\"tag\">nfc</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874977/call-an-angularjs-function-when-an-nfc-tag-is-read\" class=\"started-link\">asked <span title=\"2015-08-07 09:59:50Z\" class=\"relativetime\">10 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201508/veor\">veor</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31702111\">\n    <div onclick=\"window.location.href='/questions/31702111/turn-off-real-time-code-analysis-in-eclipse-pydev'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"11 views\">11</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31702111/turn-off-real-time-code-analysis-in-eclipse-pydev\" class=\"question-hyperlink\" title=\"First of all, I hope I didn't just use the wrong keywords for my simple question during my fruitless search for answers on the web.\n\nI'm using Eclipse with PyDev. There is the code analysis option in ...\">Turn off real-time code analysis in Eclipse (PyDev)</a></h3>\n        <div class=\"tags t-python t-eclipse t-pydev\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/eclipse\" class=\"post-tag\" title=\"show questions tagged 'eclipse'\" rel=\"tag\">eclipse</a> <a href=\"https://stackoverflow.com/questions/tagged/pydev\" class=\"post-tag\" title=\"show questions tagged 'pydev'\" rel=\"tag\">pydev</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31702111/turn-off-real-time-code-analysis-in-eclipse-pydev\" class=\"started-link\">modified <span title=\"2015-08-07 09:59:07Z\" class=\"relativetime\">11 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3332772/sirjane\">SirJane</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">158</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873375\">\n    <div onclick=\"window.location.href='/questions/31873375/loading-webvtt-track-in-ie'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873375/loading-webvtt-track-in-ie\" class=\"question-hyperlink\" title=\"I'm loading a webvtt file. Works fine but in IE11 no cues are present.\n\n            WEBVTT FILE\n\n            00:00:01.000 --&gt; 00:00:04.000\n            Let's take a look at the 4th platform preview ...\">Loading webvtt track in IE</a></h3>\n        <div class=\"tags t-javascript t-metadata t-internet-explorer-11 t-track t-webvtt\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/metadata\" class=\"post-tag\" title=\"show questions tagged 'metadata'\" rel=\"tag\">metadata</a> <a href=\"https://stackoverflow.com/questions/tagged/internet-explorer-11\" class=\"post-tag\" title=\"show questions tagged 'internet-explorer-11'\" rel=\"tag\"><img src=\"stack_overflow_files/BfCOt.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">internet-explorer-11</a> <a href=\"https://stackoverflow.com/questions/tagged/track\" class=\"post-tag\" title=\"show questions tagged 'track'\" rel=\"tag\">track</a> <a href=\"https://stackoverflow.com/questions/tagged/webvtt\" class=\"post-tag\" title=\"show questions tagged 'webvtt'\" rel=\"tag\">webvtt</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873375/loading-webvtt-track-in-ie\" class=\"started-link\">modified <span title=\"2015-08-07 09:59:03Z\" class=\"relativetime\">11 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1226197/eugene\">Eugene</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">111</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874951\">\n    <div onclick=\"window.location.href='/questions/31874951/how-to-use-download-picture-in-webgl'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874951/how-to-use-download-picture-in-webgl\" class=\"question-hyperlink\" title=\"I want to download a jpg, and use it in my game.\n\nThis is my code, and this code works very well in unity Editor and unity web player. But when I build a WebGL, it just show a picture with a &quot;?&quot;. Is ...\">How to use download picture in WebGL?</a></h3>\n        <div class=\"tags t-unity3d\">\n            <a href=\"https://stackoverflow.com/questions/tagged/unity3d\" class=\"post-tag\" title=\"show questions tagged 'unity3d'\" rel=\"tag\">unity3d</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874951/how-to-use-download-picture-in-webgl\" class=\"started-link\">asked <span title=\"2015-08-07 09:59:00Z\" class=\"relativetime\">11 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4314389/burdentao\">burdentao</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">82</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874944\">\n    <div onclick=\"window.location.href='/questions/31874944/how-to-load-precompiled-sourcemaps-from-node-modules'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"2 views\">2</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874944/how-to-load-precompiled-sourcemaps-from-node-modules\" class=\"question-hyperlink\" title=\"I have a library, transpiled from babel with precompiled sourcemaps:\n\nnode_modules/mylib:\nindex.js\nindex.js.map\nmapTokens.js\nmapTokens.js.map\nplainObject.js\nplainObject.js.map\nTranslator.js\n...\">How to load precompiled sourcemaps from node_modules</a></h3>\n        <div class=\"tags t-javascript t-webpack t-source-maps\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/webpack\" class=\"post-tag\" title=\"show questions tagged 'webpack'\" rel=\"tag\">webpack</a> <a href=\"https://stackoverflow.com/questions/tagged/source-maps\" class=\"post-tag\" title=\"show questions tagged 'source-maps'\" rel=\"tag\">source-maps</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874944/how-to-load-precompiled-sourcemaps-from-node-modules\" class=\"started-link\">asked <span title=\"2015-08-07 09:58:34Z\" class=\"relativetime\">11 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/875459/zerkalica\">zerkalica</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">38</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874040\">\n    <div onclick=\"window.location.href='/questions/31874040/how-to-show-values-of-a-select-based-on-another-select-using-angular-js'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"11 views\">11</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874040/how-to-show-values-of-a-select-based-on-another-select-using-angular-js\" class=\"question-hyperlink\" title=\"I have list of locations in a select box. On selection of a location, the corresponding incidenttypes should be displayed in another select box.\n\n$scope.locationNames=[\n            ...\">How to show values of a select based on another select using angular JS</a></h3>\n        <div class=\"tags t-angularjs\">\n            <a href=\"https://stackoverflow.com/questions/tagged/angularjs\" class=\"post-tag\" title=\"show questions tagged 'angularjs'\" rel=\"tag\">angularjs</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874040/how-to-show-values-of-a-select-based-on-another-select-using-angular-js\" class=\"started-link\">modified <span title=\"2015-08-07 09:58:28Z\" class=\"relativetime\">11 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/485781/ssapkota\">ssapkota</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">2,001</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874938\">\n    <div onclick=\"window.location.href='/questions/31874938/ckeditor-figure-caption-cant-delete-without-new-paragraph'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874938/ckeditor-figure-caption-cant-delete-without-new-paragraph\" class=\"question-hyperlink\" title=\"I have a problem with my ckeditor, if I add a image with caption without use before enter or other character I can't use backspace for delete character on image caption, but if I press other character ...\">ckeditor figure caption can't delete without new paragraph</a></h3>\n        <div class=\"tags t-javascript t-firefox t-ckeditor\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/firefox\" class=\"post-tag\" title=\"show questions tagged 'firefox'\" rel=\"tag\"><img src=\"stack_overflow_files/WcBXc.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">firefox</a> <a href=\"https://stackoverflow.com/questions/tagged/ckeditor\" class=\"post-tag\" title=\"show questions tagged 'ckeditor'\" rel=\"tag\">ckeditor</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874938/ckeditor-figure-caption-cant-delete-without-new-paragraph\" class=\"started-link\">asked <span title=\"2015-08-07 09:58:14Z\" class=\"relativetime\">12 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3270074/laurentiu\">Laurentiu</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">76</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31869971\">\n    <div onclick=\"window.location.href='/questions/31869971/upsert-document-and-or-add-a-sub-document'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"3 votes\">3</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"2 answers\">2</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"17 views\">17</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31869971/upsert-document-and-or-add-a-sub-document\" class=\"question-hyperlink\" title=\"I've been wrestling with the asynchronous nature of MongoDB, Mongoose and JavaScript and how to best make multiple updates to a collection.\n\nI have an Excel sheet of client and contact data.  There ...\">Upsert Document and/or add a Sub-Document</a></h3>\n        <div class=\"tags t-mongodb t-mongoose t-mongodb-query\">\n            <a href=\"https://stackoverflow.com/questions/tagged/mongodb\" class=\"post-tag\" title=\"show questions tagged 'mongodb'\" rel=\"tag\">mongodb</a> <a href=\"https://stackoverflow.com/questions/tagged/mongoose\" class=\"post-tag\" title=\"show questions tagged 'mongoose'\" rel=\"tag\">mongoose</a> <a href=\"https://stackoverflow.com/questions/tagged/mongodb-query\" class=\"post-tag\" title=\"show questions tagged 'mongodb-query'\" rel=\"tag\">mongodb-query</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31869971/upsert-document-and-or-add-a-sub-document/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 09:58:13Z\" class=\"relativetime\">12 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2754507/mario-trucco\">Mario Trucco</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">70</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872199\">\n    <div onclick=\"window.location.href='/questions/31872199/jpa-ignores-lazy-annotation-for-many-to-one-relations'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"26 views\">26</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872199/jpa-ignores-lazy-annotation-for-many-to-one-relations\" class=\"question-hyperlink\" title=\"I have this entity for which I want a many-to one relation beeing loaded lazy.\n\n@Entity\npublic class Product {\n    @ManyToOne(fetch=FetchType.LAZY)\n    @JoinColumn(name = &quot;atc_code_id&quot;)\n    private ...\">JPA ignores lazy annotation for many-to-one relations</a></h3>\n        <div class=\"tags t-java t-hibernate t-jpa t-many-to-one\">\n            <a href=\"https://stackoverflow.com/questions/tagged/java\" class=\"post-tag\" title=\"show questions tagged 'java'\" rel=\"tag\">java</a> <a href=\"https://stackoverflow.com/questions/tagged/hibernate\" class=\"post-tag\" title=\"show questions tagged 'hibernate'\" rel=\"tag\">hibernate</a> <a href=\"https://stackoverflow.com/questions/tagged/jpa\" class=\"post-tag\" title=\"show questions tagged 'jpa'\" rel=\"tag\">jpa</a> <a href=\"https://stackoverflow.com/questions/tagged/many-to-one\" class=\"post-tag\" title=\"show questions tagged 'many-to-one'\" rel=\"tag\">many-to-one</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872199/jpa-ignores-lazy-annotation-for-many-to-one-relations\" class=\"started-link\">modified <span title=\"2015-08-07 09:57:48Z\" class=\"relativetime\">12 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/671639/betaride\">BetaRide</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">4,893</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874905\">\n    <div onclick=\"window.location.href='/questions/31874905/how-to-index-a-log-file-in-elastic-search'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874905/how-to-index-a-log-file-in-elastic-search\" class=\"question-hyperlink\" title=\"I am using logstasher gem to collect logs in logstash_development.log.This file(logstash_deveopment.log) has all the logs in json format.I am trying to index al those logs in elasticsearch by using ...\">How to index a log file in elastic search</a></h3>\n        <div class=\"tags t-curl t-amazon-web-services t-logging t-elasticsearch t-logstash\">\n            <a href=\"https://stackoverflow.com/questions/tagged/curl\" class=\"post-tag\" title=\"show questions tagged 'curl'\" rel=\"tag\">curl</a> <a href=\"https://stackoverflow.com/questions/tagged/amazon-web-services\" class=\"post-tag\" title=\"show questions tagged 'amazon-web-services'\" rel=\"tag\">amazon-web-services</a> <a href=\"https://stackoverflow.com/questions/tagged/logging\" class=\"post-tag\" title=\"show questions tagged 'logging'\" rel=\"tag\">logging</a> <a href=\"https://stackoverflow.com/questions/tagged/elasticsearch\" class=\"post-tag\" title=\"show questions tagged 'elasticsearch'\" rel=\"tag\">elasticsearch</a> <a href=\"https://stackoverflow.com/questions/tagged/logstash\" class=\"post-tag\" title=\"show questions tagged 'logstash'\" rel=\"tag\">logstash</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874905/how-to-index-a-log-file-in-elastic-search\" class=\"started-link\">asked <span title=\"2015-08-07 09:57:02Z\" class=\"relativetime\">13 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4893956/shakthi\">Shakthi</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">26</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873958\">\n    <div onclick=\"window.location.href='/questions/31873958/why-i-cannt-import-variable-db'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"21 views\">21</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873958/why-i-cannt-import-variable-db\" class=\"question-hyperlink\" title=\"I have a dir name app, and a file __init__.py in the dir app, so app will be package.\nthe contect of __init__.py:\n\nfrom flask import Flask\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = ...\">Why i cann't import variable 'db'?</a></h3>\n        <div class=\"tags t-python t-django t-flask\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/django\" class=\"post-tag\" title=\"show questions tagged 'django'\" rel=\"tag\">django</a> <a href=\"https://stackoverflow.com/questions/tagged/flask\" class=\"post-tag\" title=\"show questions tagged 'flask'\" rel=\"tag\">flask</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873958/why-i-cannt-import-variable-db\" class=\"started-link\">modified <span title=\"2015-08-07 09:56:51Z\" class=\"relativetime\">13 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2223579/blackmamba\">BlackMamba</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">2,626</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874897\">\n    <div onclick=\"window.location.href='/questions/31874897/jquery-ui-scrollable-drag-item-position-and-index-bug-with-multiple-vertical-s'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874897/jquery-ui-scrollable-drag-item-position-and-index-bug-with-multiple-vertical-s\" class=\"question-hyperlink\" title=\"Info:\n\nLike the title says, there are multiple parent divs (.drag-w1) and I’m using overflow-y:auto with overflow-x:hidden as there will be multiple items (.item-archive). The items will be sortable ...\">jQuery UI Scrollable - drag-item position and index bug with multiple vertical scrollable parent div</a></h3>\n        <div class=\"tags t-jquery t-html5 t-css3 t-jquery-ui\">\n            <a href=\"https://stackoverflow.com/questions/tagged/jquery\" class=\"post-tag\" title=\"show questions tagged 'jquery'\" rel=\"tag\">jquery</a> <a href=\"https://stackoverflow.com/questions/tagged/html5\" class=\"post-tag\" title=\"show questions tagged 'html5'\" rel=\"tag\">html5</a> <a href=\"https://stackoverflow.com/questions/tagged/css3\" class=\"post-tag\" title=\"show questions tagged 'css3'\" rel=\"tag\">css3</a> <a href=\"https://stackoverflow.com/questions/tagged/jquery-ui\" class=\"post-tag\" title=\"show questions tagged 'jquery-ui'\" rel=\"tag\">jquery-ui</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874897/jquery-ui-scrollable-drag-item-position-and-index-bug-with-multiple-vertical-s\" class=\"started-link\">asked <span title=\"2015-08-07 09:56:50Z\" class=\"relativetime\">13 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2873559/codemonk\">CodeMonk</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">487</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874884\">\n    <div onclick=\"window.location.href='/questions/31874884/convert-standart-excel-date-to-date-in-javascript'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874884/convert-standart-excel-date-to-date-in-javascript\" class=\"question-hyperlink\" title=\"I have this code to make conversion :\n\nvar date = new Date(1900, 0, 0, 0, 0, 0);\ndate.setDate(date.getDate() + row.values[1]);\nvar heure = row.values[5].toString().split(':');\n...\">Convert standart excel date to date in javascript</a></h3>\n        <div class=\"tags t-javascript t-excel t-date\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/excel\" class=\"post-tag\" title=\"show questions tagged 'excel'\" rel=\"tag\">excel</a> <a href=\"https://stackoverflow.com/questions/tagged/date\" class=\"post-tag\" title=\"show questions tagged 'date'\" rel=\"tag\">date</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874884/convert-standart-excel-date-to-date-in-javascript\" class=\"started-link\">asked <span title=\"2015-08-07 09:55:56Z\" class=\"relativetime\">14 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4782545/momolechat\">momolechat</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">20</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874282\">\n    <div onclick=\"window.location.href='/questions/31874282/how-to-shift-column-values-in-mysql'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"33 views\">33</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874282/how-to-shift-column-values-in-mysql\" class=\"question-hyperlink\" title=\"I have this table:\n\ntable1\n+------+----------+-----------+----------+\n|  id  | org1     | org2      | org3     |\n+------+----------+-----------+----------+\n|  1   | HR       | (NULL)    | Staff    |\n...\">How to shift column values in MySQL?</a></h3>\n        <div class=\"tags t-mysql t-sql\">\n            <a href=\"https://stackoverflow.com/questions/tagged/mysql\" class=\"post-tag\" title=\"show questions tagged 'mysql'\" rel=\"tag\">mysql</a> <a href=\"https://stackoverflow.com/questions/tagged/sql\" class=\"post-tag\" title=\"show questions tagged 'sql'\" rel=\"tag\">sql</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874282/how-to-shift-column-values-in-mysql/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 09:54:43Z\" class=\"relativetime\">15 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2610061/cars10\">cars10</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">3,668</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874860\">\n    <div onclick=\"window.location.href='/questions/31874860/how-to-adjust-tooltip-distance-in-nv-d3-js'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"3 views\">3</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874860/how-to-adjust-tooltip-distance-in-nv-d3-js\" class=\"question-hyperlink\" title=\"I was created a pie chart using nv.d3.js. In that I have created a tooltip for each field.\n\n&lt;nvd3-pie-chart\n    data=&quot;exampleData&quot;\n    id=&quot;exampleId&quot;\n    showLabels=&quot;true&quot;\n    labelType=&quot;value&quot;\n    ...\">How to adjust tooltip distance in nv.d3.js</a></h3>\n        <div class=\"tags t-javascript t-d3ûjs\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/d3.js\" class=\"post-tag\" title=\"show questions tagged 'd3.js'\" rel=\"tag\">d3.js</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874860/how-to-adjust-tooltip-distance-in-nv-d3-js\" class=\"started-link\">asked <span title=\"2015-08-07 09:54:29Z\" class=\"relativetime\">15 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4188527/n123\">N123</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">261</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874777\">\n    <div onclick=\"window.location.href='/questions/31874777/lip-syncing-with-a-voice-ios-development'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874777/lip-syncing-with-a-voice-ios-development\" class=\"question-hyperlink\" title=\"I am developing an iPhone app. In this app user can upload a photo of a face of his own choice. I need to move the lips of that face in sync with a voice. Please can anyone guide me in right ...\">Lip Syncing with a voice iOS development</a></h3>\n        <div class=\"tags t-ios t-iphone t-animation t-mobile\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ios\" class=\"post-tag\" title=\"show questions tagged 'ios'\" rel=\"tag\">ios</a> <a href=\"https://stackoverflow.com/questions/tagged/iphone\" class=\"post-tag\" title=\"show questions tagged 'iphone'\" rel=\"tag\">iphone</a> <a href=\"https://stackoverflow.com/questions/tagged/animation\" class=\"post-tag\" title=\"show questions tagged 'animation'\" rel=\"tag\">animation</a> <a href=\"https://stackoverflow.com/questions/tagged/mobile\" class=\"post-tag\" title=\"show questions tagged 'mobile'\" rel=\"tag\">mobile</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874777/lip-syncing-with-a-voice-ios-development\" class=\"started-link\">asked <span title=\"2015-08-07 09:50:12Z\" class=\"relativetime\">20 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1554693/user1554693\">user1554693</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">44</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874407\">\n    <div onclick=\"window.location.href='/questions/31874407/removing-items-corresponding-to-nan-in-one-list-from-another-list'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"17 views\">17</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874407/removing-items-corresponding-to-nan-in-one-list-from-another-list\" class=\"question-hyperlink\" title=\"For regressions in sklearn, I have a list x and a list y. Unfortunately these lists have blanks/'nan'. A 'nan' crashes any analysis, so I need to remove each 'nan' and its corresponding number in the ...\">Removing items corresponding to nan in one list from another list</a></h3>\n        <div class=\"tags t-python t-scikit-learn\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/scikit-learn\" class=\"post-tag\" title=\"show questions tagged 'scikit-learn'\" rel=\"tag\">scikit-learn</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874407/removing-items-corresponding-to-nan-in-one-list-from-another-list/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 09:49:35Z\" class=\"relativetime\">20 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3264192/n9code\">n9code</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">2,274</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873463\">\n    <div onclick=\"window.location.href='/questions/31873463/message-post-on-change-of-state-odoo'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873463/message-post-on-change-of-state-odoo\" class=\"question-hyperlink\" title=\"I am trying to post message on  openchatter on state change. i used the following good but nothing happened.\n\nin .py file.\n\n@api.one\n@api.depends('state')\ndef log_prod(self,state):\n    if state in ...\">message_post on change of state odoo</a></h3>\n        <div class=\"tags t-python-2û7 t-odoo-8\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python-2.7\" class=\"post-tag\" title=\"show questions tagged 'python-2.7'\" rel=\"tag\">python-2.7</a> <a href=\"https://stackoverflow.com/questions/tagged/odoo-8\" class=\"post-tag\" title=\"show questions tagged 'odoo-8'\" rel=\"tag\">odoo-8</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873463/message-post-on-change-of-state-odoo\" class=\"started-link\">modified <span title=\"2015-08-07 09:48:56Z\" class=\"relativetime\">21 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2886640/forvas\">forvas</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">671</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874738\">\n    <div onclick=\"window.location.href='/questions/31874738/profiling-parallel-code-julia'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874738/profiling-parallel-code-julia\" class=\"question-hyperlink\" title=\"How can we profile parallel code in julia? This question has been asked before. In fact, following the advice to call profile on each node does not work.\n\nfunction profileSlaveTask(param)\n         ...\">Profiling parallel code Julia</a></h3>\n        <div class=\"tags t-parallel-processing t-profiling t-julia-lang\">\n            <a href=\"https://stackoverflow.com/questions/tagged/parallel-processing\" class=\"post-tag\" title=\"show questions tagged 'parallel-processing'\" rel=\"tag\">parallel-processing</a> <a href=\"https://stackoverflow.com/questions/tagged/profiling\" class=\"post-tag\" title=\"show questions tagged 'profiling'\" rel=\"tag\">profiling</a> <a href=\"https://stackoverflow.com/questions/tagged/julia-lang\" class=\"post-tag\" title=\"show questions tagged 'julia-lang'\" rel=\"tag\">julia-lang</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874738/profiling-parallel-code-julia\" class=\"started-link\">asked <span title=\"2015-08-07 09:48:08Z\" class=\"relativetime\">22 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1362900/warsaga\">warsaga</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">133</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874688\">\n    <div onclick=\"window.location.href='/questions/31874688/hide-remote-node-url-when-reverse-proxying-with-apache'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874688/hide-remote-node-url-when-reverse-proxying-with-apache\" class=\"question-hyperlink\" title=\"I have a CentOS VPS which is serving HTTP requests via Apache and delivers a HTML site. I am also hosting a Ghost blog on the same VPS, which listens on port 2368. Therefore the main site can be ...\">Hide remote Node URL when reverse proxying with Apache</a></h3>\n        <div class=\"tags t-nodeûjs t-apache t-proxy t-ghost\">\n            <a href=\"https://stackoverflow.com/questions/tagged/node.js\" class=\"post-tag\" title=\"show questions tagged 'node.js'\" rel=\"tag\">node.js</a> <a href=\"https://stackoverflow.com/questions/tagged/apache\" class=\"post-tag\" title=\"show questions tagged 'apache'\" rel=\"tag\">apache</a> <a href=\"https://stackoverflow.com/questions/tagged/proxy\" class=\"post-tag\" title=\"show questions tagged 'proxy'\" rel=\"tag\">proxy</a> <a href=\"https://stackoverflow.com/questions/tagged/ghost\" class=\"post-tag\" title=\"show questions tagged 'ghost'\" rel=\"tag\">ghost</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874688/hide-remote-node-url-when-reverse-proxying-with-apache\" class=\"started-link\">asked <span title=\"2015-08-07 09:46:13Z\" class=\"relativetime\">24 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4835543/bhish\">bhish</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873568\">\n    <div onclick=\"window.location.href='/questions/31873568/c-sharp-c-callback-class-not-function-interop-howto'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"3 votes\">3</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"14 views\">14</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873568/c-sharp-c-callback-class-not-function-interop-howto\" class=\"question-hyperlink\" title=\"Apologies if there is a duplicate - I have struggled to find an answer (I have found a few questions around C++ functions that use Function callbacks, and some answers that use Classes as callbacks ...\">C# / C++ Callback Class (not function) Interop - howto?</a></h3>\n        <div class=\"tags t-cñ t-cçç t-ûnet t-com t-interop\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c%23\" class=\"post-tag\" title=\"show questions tagged 'c#'\" rel=\"tag\">c#</a> <a href=\"https://stackoverflow.com/questions/tagged/c%2b%2b\" class=\"post-tag\" title=\"show questions tagged 'c++'\" rel=\"tag\">c++</a> <a href=\"https://stackoverflow.com/questions/tagged/.net\" class=\"post-tag\" title=\"show questions tagged '.net'\" rel=\"tag\">.net</a> <a href=\"https://stackoverflow.com/questions/tagged/com\" class=\"post-tag\" title=\"show questions tagged 'com'\" rel=\"tag\">com</a> <a href=\"https://stackoverflow.com/questions/tagged/interop\" class=\"post-tag\" title=\"show questions tagged 'interop'\" rel=\"tag\">interop</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873568/c-sharp-c-callback-class-not-function-interop-howto/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 09:45:51Z\" class=\"relativetime\">24 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4878867/accessviolation\">AccessViolation</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">96</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874621\">\n    <div onclick=\"window.location.href='/questions/31874621/duration-overlap-causing-double-counting'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874621/duration-overlap-causing-double-counting\" class=\"question-hyperlink\" title=\"I'm using SQL Server Management Studio 2008 for query creation.  Reporting Services 2008 for report creation.\n\nI have been trying to work this out over a couple of weeks and I have hit a brick wall.  ...\">Duration overlap causing double counting</a></h3>\n        <div class=\"tags t-sql t-sql-server t-reporting-services t-overlap t-availability\">\n            <a href=\"https://stackoverflow.com/questions/tagged/sql\" class=\"post-tag\" title=\"show questions tagged 'sql'\" rel=\"tag\">sql</a> <a href=\"https://stackoverflow.com/questions/tagged/sql-server\" class=\"post-tag\" title=\"show questions tagged 'sql-server'\" rel=\"tag\">sql-server</a> <a href=\"https://stackoverflow.com/questions/tagged/reporting-services\" class=\"post-tag\" title=\"show questions tagged 'reporting-services'\" rel=\"tag\">reporting-services</a> <a href=\"https://stackoverflow.com/questions/tagged/overlap\" class=\"post-tag\" title=\"show questions tagged 'overlap'\" rel=\"tag\">overlap</a> <a href=\"https://stackoverflow.com/questions/tagged/availability\" class=\"post-tag\" title=\"show questions tagged 'availability'\" rel=\"tag\">availability</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874621/duration-overlap-causing-double-counting\" class=\"started-link\">asked <span title=\"2015-08-07 09:43:18Z\" class=\"relativetime\">27 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5200976/spamhandled\">SpamHandled</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">11</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874572\">\n    <div onclick=\"window.location.href='/questions/31874572/what-does-failed-mean-in-midoris-debugger'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874572/what-does-failed-mean-in-midoris-debugger\" class=\"question-hyperlink\" title=\"I'm trying to display a video in a webpage on a raspberry PI using the Midori browser. The streaming used to work, but now Midori just displays a black screen with a horizontal line in the middle.\n\n...\">What does “failed” mean in Midori's debugger?</a></h3>\n        <div class=\"tags t-javascript t-html t-raspberry-pi t-video-streaming t-midori\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/html\" class=\"post-tag\" title=\"show questions tagged 'html'\" rel=\"tag\">html</a> <a href=\"https://stackoverflow.com/questions/tagged/raspberry-pi\" class=\"post-tag\" title=\"show questions tagged 'raspberry-pi'\" rel=\"tag\">raspberry-pi</a> <a href=\"https://stackoverflow.com/questions/tagged/video-streaming\" class=\"post-tag\" title=\"show questions tagged 'video-streaming'\" rel=\"tag\">video-streaming</a> <a href=\"https://stackoverflow.com/questions/tagged/midori\" class=\"post-tag\" title=\"show questions tagged 'midori'\" rel=\"tag\">midori</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874572/what-does-failed-mean-in-midoris-debugger\" class=\"started-link\">asked <span title=\"2015-08-07 09:41:03Z\" class=\"relativetime\">29 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/393965/kelsey-rider\">Kelsey Rider</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,419</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874146\">\n    <div onclick=\"window.location.href='/questions/31874146/fitted-values-from-the-ivreg-aer-object-do-not-match-manual-2sls-results'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"7 views\">7</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874146/fitted-values-from-the-ivreg-aer-object-do-not-match-manual-2sls-results\" class=\"question-hyperlink\" title=\"I'm trying to find out why fitted values from the ivreg estimation {AER} differ from manually performed 2-stage least squares (and from the appropriate reduced form equation)... the help for ivreg and ...\">Fitted values from the ivreg {AER} object do not match manual 2SLS results</a></h3>\n        <div class=\"tags t-r t-linear-regression t-lm\">\n            <a href=\"https://stackoverflow.com/questions/tagged/r\" class=\"post-tag\" title=\"show questions tagged 'r'\" rel=\"tag\">r</a> <a href=\"https://stackoverflow.com/questions/tagged/linear-regression\" class=\"post-tag\" title=\"show questions tagged 'linear-regression'\" rel=\"tag\">linear-regression</a> <a href=\"https://stackoverflow.com/questions/tagged/lm\" class=\"post-tag\" title=\"show questions tagged 'lm'\" rel=\"tag\">lm</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874146/fitted-values-from-the-ivreg-aer-object-do-not-match-manual-2sls-results\" class=\"started-link\">modified <span title=\"2015-08-07 09:39:51Z\" class=\"relativetime\">30 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/5201202/tomas\">Tomas</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874106\">\n    <div onclick=\"window.location.href='/questions/31874106/differential-evolution-in-scipy-not-giving-a-jacobean'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874106/differential-evolution-in-scipy-not-giving-a-jacobean\" class=\"question-hyperlink\" title=\"I'm using the differential_evolution algorithm in scipy to fit some data with various exponential functions convolved with gaussian functions - this in itself is not a problem, the function fits it ...\">Differential_evolution in Scipy not giving a jacobean</a></h3>\n        <div class=\"tags t-python t-numpy t-scipy t-differential-evolution\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/numpy\" class=\"post-tag\" title=\"show questions tagged 'numpy'\" rel=\"tag\">numpy</a> <a href=\"https://stackoverflow.com/questions/tagged/scipy\" class=\"post-tag\" title=\"show questions tagged 'scipy'\" rel=\"tag\">scipy</a> <a href=\"https://stackoverflow.com/questions/tagged/differential-evolution\" class=\"post-tag\" title=\"show questions tagged 'differential-evolution'\" rel=\"tag\">differential-evolution</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874106/differential-evolution-in-scipy-not-giving-a-jacobean\" class=\"started-link\">modified <span title=\"2015-08-07 09:37:31Z\" class=\"relativetime\">32 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1534017/cleb\">Cleb</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,494</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874475\">\n    <div onclick=\"window.location.href='/questions/31874475/cannt-upload-ipa-to-diawi-com'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874475/cannt-upload-ipa-to-diawi-com\" class=\"question-hyperlink\" title=\"I'm creating ipa using distribution certificate(for Ad-hoc) using WildCard ID.\n\nMy wildcard ID is com.company.* so i set my bundleId to com.company.test. ipa successfully generating with this.\n\nIt ...\">Cann't upload ipa to diawi.com</a></h3>\n        <div class=\"tags t-ios t-certificate t-apple t-provisioning-profile t-xcode6û4\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ios\" class=\"post-tag\" title=\"show questions tagged 'ios'\" rel=\"tag\">ios</a> <a href=\"https://stackoverflow.com/questions/tagged/certificate\" class=\"post-tag\" title=\"show questions tagged 'certificate'\" rel=\"tag\">certificate</a> <a href=\"https://stackoverflow.com/questions/tagged/apple\" class=\"post-tag\" title=\"show questions tagged 'apple'\" rel=\"tag\">apple</a> <a href=\"https://stackoverflow.com/questions/tagged/provisioning-profile\" class=\"post-tag\" title=\"show questions tagged 'provisioning-profile'\" rel=\"tag\">provisioning-profile</a> <a href=\"https://stackoverflow.com/questions/tagged/xcode6.4\" class=\"post-tag\" title=\"show questions tagged 'xcode6.4'\" rel=\"tag\">xcode6.4</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874475/cannt-upload-ipa-to-diawi-com\" class=\"started-link\">asked <span title=\"2015-08-07 09:36:06Z\" class=\"relativetime\">34 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3823882/ibhavin\">iBhavin</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,294</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874460\">\n    <div onclick=\"window.location.href='/questions/31874460/componentview-has-unnecessary-extra-inset-at-top'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"9 views\">9</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874460/componentview-has-unnecessary-extra-inset-at-top\" class=\"question-hyperlink\" title=\"I am having trouble with creating a custom document in which I need ComponentViews (as I want to use normal swing component listeners).\n\nThis is how it currently looks like:\n\n\nObviously, the extra ...\">ComponentView has unnecessary extra inset at top</a></h3>\n        <div class=\"tags t-java t-swing\">\n            <a href=\"https://stackoverflow.com/questions/tagged/java\" class=\"post-tag\" title=\"show questions tagged 'java'\" rel=\"tag\">java</a> <a href=\"https://stackoverflow.com/questions/tagged/swing\" class=\"post-tag\" title=\"show questions tagged 'swing'\" rel=\"tag\">swing</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874460/componentview-has-unnecessary-extra-inset-at-top\" class=\"started-link\">asked <span title=\"2015-08-07 09:35:31Z\" class=\"relativetime\">34 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1397894/spaceemotion\">SpaceEmotion</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">126</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874444\">\n    <div onclick=\"window.location.href='/questions/31874444/stop-playing-all-media-element-on-page-in-windows-10-universal-app'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874444/stop-playing-all-media-element-on-page-in-windows-10-universal-app\" class=\"question-hyperlink\" title=\"I am creating dynamic media elements along with a dynamic button on a xaml page like this:\n\nMediaElement audioElement= new MediaElement();\naudioElement.Source = new ...\">Stop Playing All Media Element on Page in Windows 10 Universal App</a></h3>\n        <div class=\"tags t-cñ t-xaml t-windows-store-apps t-windows-10 t-uwp\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c%23\" class=\"post-tag\" title=\"show questions tagged 'c#'\" rel=\"tag\">c#</a> <a href=\"https://stackoverflow.com/questions/tagged/xaml\" class=\"post-tag\" title=\"show questions tagged 'xaml'\" rel=\"tag\">xaml</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-store-apps\" class=\"post-tag\" title=\"show questions tagged 'windows-store-apps'\" rel=\"tag\">windows-store-apps</a> <a href=\"https://stackoverflow.com/questions/tagged/windows-10\" class=\"post-tag\" title=\"show questions tagged 'windows-10'\" rel=\"tag\">windows-10</a> <a href=\"https://stackoverflow.com/questions/tagged/uwp\" class=\"post-tag\" title=\"show questions tagged 'uwp'\" rel=\"tag\">uwp</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874444/stop-playing-all-media-element-on-page-in-windows-10-universal-app\" class=\"started-link\">asked <span title=\"2015-08-07 09:34:57Z\" class=\"relativetime\">35 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1923173/saurabh-sashank\">Saurabh Sashank</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">53</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874312\">\n    <div onclick=\"window.location.href='/questions/31874312/postgresql-c-function-how-to-return-array-of-text'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"9 views\">9</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874312/postgresql-c-function-how-to-return-array-of-text\" class=\"question-hyperlink\" title=\"I'm trying to write a C function in PostgreSQL 9.3 which receive a text and return an array of text. My function make the server crash when I return an array of text or varchar but it works ok when I ...\">PostgreSQL C function, how to return array of text</a></h3>\n        <div class=\"tags t-c t-arrays t-postgresql t-plpgsql\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c\" class=\"post-tag\" title=\"show questions tagged 'c'\" rel=\"tag\">c</a> <a href=\"https://stackoverflow.com/questions/tagged/arrays\" class=\"post-tag\" title=\"show questions tagged 'arrays'\" rel=\"tag\">arrays</a> <a href=\"https://stackoverflow.com/questions/tagged/postgresql\" class=\"post-tag\" title=\"show questions tagged 'postgresql'\" rel=\"tag\">postgresql</a> <a href=\"https://stackoverflow.com/questions/tagged/plpgsql\" class=\"post-tag\" title=\"show questions tagged 'plpgsql'\" rel=\"tag\">plpgsql</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874312/postgresql-c-function-how-to-return-array-of-text\" class=\"started-link\">asked <span title=\"2015-08-07 09:29:41Z\" class=\"relativetime\">40 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1530486/truong-hua\">Truong Hua</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">396</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31871527\">\n    <div onclick=\"window.location.href='/questions/31871527/the-file-phpexcel-shared-string-php-is-missing-in-the-includes-folder'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"3 votes\">3</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"20 views\">20</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31871527/the-file-phpexcel-shared-string-php-is-missing-in-the-includes-folder\" class=\"question-hyperlink\" title=\"I have tried the change function and it did NOT work.\n\nI am working with PHPExcel and I keep on getting this error\n&quot;The file PHPExcel_Shared_String.php is missing in the includes folder.&quot;\n\nit is not ...\">The file PHPExcel_Shared_String.php is missing in the includes folder</a></h3>\n        <div class=\"tags t-php t-phpexcel\">\n            <a href=\"https://stackoverflow.com/questions/tagged/php\" class=\"post-tag\" title=\"show questions tagged 'php'\" rel=\"tag\">php</a> <a href=\"https://stackoverflow.com/questions/tagged/phpexcel\" class=\"post-tag\" title=\"show questions tagged 'phpexcel'\" rel=\"tag\">phpexcel</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31871527/the-file-phpexcel-shared-string-php-is-missing-in-the-includes-folder\" class=\"started-link\">modified <span title=\"2015-08-07 09:24:03Z\" class=\"relativetime\">46 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4483034/demonmaestro\">DemonMaestro</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">16</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31874153\">\n    <div onclick=\"window.location.href='/questions/31874153/how-to-detect-protocol-mismatch-while-using-apache-thrift'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31874153/how-to-detect-protocol-mismatch-while-using-apache-thrift\" class=\"question-hyperlink\" title=\"I am running a pair of client and server programs communicating using Apache Thrift on my Mac. In our production system we may end up in a situation where client uses TJSONProtocol and server uses ...\">How to detect protocol mismatch while using Apache Thrift?</a></h3>\n        <div class=\"tags t-cçç t-thrift t-thrift-protocol\">\n            <a href=\"https://stackoverflow.com/questions/tagged/c%2b%2b\" class=\"post-tag\" title=\"show questions tagged 'c++'\" rel=\"tag\">c++</a> <a href=\"https://stackoverflow.com/questions/tagged/thrift\" class=\"post-tag\" title=\"show questions tagged 'thrift'\" rel=\"tag\">thrift</a> <a href=\"https://stackoverflow.com/questions/tagged/thrift-protocol\" class=\"post-tag\" title=\"show questions tagged 'thrift-protocol'\" rel=\"tag\">thrift-protocol</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31874153/how-to-detect-protocol-mismatch-while-using-apache-thrift\" class=\"started-link\">asked <span title=\"2015-08-07 09:23:03Z\" class=\"relativetime\">47 mins ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1632985/ccoder\">CCoder</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,619</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31869879\">\n    <div onclick=\"window.location.href='/questions/31869879/google-map-did-not-draw-properly-whenever-no-of-lat-lang-point-is-huge'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"28 views\">28</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31869879/google-map-did-not-draw-properly-whenever-no-of-lat-lang-point-is-huge\" class=\"question-hyperlink\" title=\"I have array of lat and long. The length of array can be 200 to 2000 and want to draw route through these points in google map.\n\nI am using the following code but it did not give proper result.\n\n...\">Google map did not draw properly whenever no of lat &amp; lang point is huge</a></h3>\n        <div class=\"tags t-javascript t-google-maps t-google-maps-api-3 t-maps\">\n            <a href=\"https://stackoverflow.com/questions/tagged/javascript\" class=\"post-tag\" title=\"show questions tagged 'javascript'\" rel=\"tag\">javascript</a> <a href=\"https://stackoverflow.com/questions/tagged/google-maps\" class=\"post-tag\" title=\"show questions tagged 'google-maps'\" rel=\"tag\"><img src=\"stack_overflow_files/uE37r.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">google-maps</a> <a href=\"https://stackoverflow.com/questions/tagged/google-maps-api-3\" class=\"post-tag\" title=\"show questions tagged 'google-maps-api-3'\" rel=\"tag\"><img src=\"stack_overflow_files/uE37r.png\" alt=\"\" class=\"sponsor-tag-img\" height=\"16\" width=\"18\">google-maps-api-3</a> <a href=\"https://stackoverflow.com/questions/tagged/maps\" class=\"post-tag\" title=\"show questions tagged 'maps'\" rel=\"tag\">maps</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31869879/google-map-did-not-draw-properly-whenever-no-of-lat-lang-point-is-huge/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 09:06:32Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2955932/erdbaerchen\">Erdbaerchen</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">13</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31869593\">\n    <div onclick=\"window.location.href='/questions/31869593/yielding-a-value-from-a-coroutine-in-python-a-k-a-convert-callback-to-generato'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"5 votes\">5</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"26 views\">26</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31869593/yielding-a-value-from-a-coroutine-in-python-a-k-a-convert-callback-to-generato\" class=\"question-hyperlink\" title=\"I'm new to Python and functional programming.  I'm using version 2.7.6\n\nI'm using the Tornado framework to make async network requests.  From what I learned about functional programming, I want my ...\">Yielding a value from a coroutine in Python, a.k.a. convert callback to generator</a></h3>\n        <div class=\"tags t-python t-asynchronous t-functional-programming t-generator t-tornado\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/asynchronous\" class=\"post-tag\" title=\"show questions tagged 'asynchronous'\" rel=\"tag\">asynchronous</a> <a href=\"https://stackoverflow.com/questions/tagged/functional-programming\" class=\"post-tag\" title=\"show questions tagged 'functional-programming'\" rel=\"tag\">functional-programming</a> <a href=\"https://stackoverflow.com/questions/tagged/generator\" class=\"post-tag\" title=\"show questions tagged 'generator'\" rel=\"tag\">generator</a> <a href=\"https://stackoverflow.com/questions/tagged/tornado\" class=\"post-tag\" title=\"show questions tagged 'tornado'\" rel=\"tag\">tornado</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31869593/yielding-a-value-from-a-coroutine-in-python-a-k-a-convert-callback-to-generato/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 09:05:37Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/618967/a-jesse-jiryu-davis\">A. Jesse Jiryu Davis</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">6,894</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872638\">\n    <div onclick=\"window.location.href='/questions/31872638/nginxs-worker-process-hangs-and-takes-full-cpu'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"17 views\">17</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872638/nginxs-worker-process-hangs-and-takes-full-cpu\" class=\"question-hyperlink\" title=\"I've a setup with Nginx, uWSGI and a Python Flask app. Below you can find server directive from Nginx configuration:\n\nlocation /api {\n    try_files $uri @api;\n}\n\nlocation @api {\n    include ...\">Nginx's worker process hangs and takes full CPU</a></h3>\n        <div class=\"tags t-python t-nginx t-uwsgi\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/nginx\" class=\"post-tag\" title=\"show questions tagged 'nginx'\" rel=\"tag\">nginx</a> <a href=\"https://stackoverflow.com/questions/tagged/uwsgi\" class=\"post-tag\" title=\"show questions tagged 'uwsgi'\" rel=\"tag\">uwsgi</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872638/nginxs-worker-process-hangs-and-takes-full-cpu\" class=\"started-link\">modified <span title=\"2015-08-07 09:04:55Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1073222/orangetux\">OrangeTux</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">2,455</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873740\">\n    <div onclick=\"window.location.href='/questions/31873740/in-opencv-python-getting-rotation-and-translation-from-recoverpose'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873740/in-opencv-python-getting-rotation-and-translation-from-recoverpose\" class=\"question-hyperlink\" title=\"I am trying to implement, in Python, the monocular visual odometry method described here.\n\nI've gotten most of the C++ code ported over, however I am stumped at the last step. After calculating the ...\">In OpenCV Python Getting Rotation and Translation from recoverPose()</a></h3>\n        <div class=\"tags t-python t-cçç t-opencv t-computer-vision t-pose-estimation\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/c%2b%2b\" class=\"post-tag\" title=\"show questions tagged 'c++'\" rel=\"tag\">c++</a> <a href=\"https://stackoverflow.com/questions/tagged/opencv\" class=\"post-tag\" title=\"show questions tagged 'opencv'\" rel=\"tag\">opencv</a> <a href=\"https://stackoverflow.com/questions/tagged/computer-vision\" class=\"post-tag\" title=\"show questions tagged 'computer-vision'\" rel=\"tag\">computer-vision</a> <a href=\"https://stackoverflow.com/questions/tagged/pose-estimation\" class=\"post-tag\" title=\"show questions tagged 'pose-estimation'\" rel=\"tag\">pose-estimation</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873740/in-opencv-python-getting-rotation-and-translation-from-recoverpose\" class=\"started-link\">asked <span title=\"2015-08-07 09:03:44Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4096893/nick\">Nick</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">22</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31864534\">\n    <div onclick=\"window.location.href='/questions/31864534/change-the-mouse-cursor-position-in-fullscreen'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"7 views\">7</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31864534/change-the-mouse-cursor-position-in-fullscreen\" class=\"question-hyperlink\" title=\"I am trying to change the mouse position programmatically, in PyGame, using its mouse API:\n\nfrom pygame import mouse\nmouse.set_pos(0, 0)\n\n\nThis seems to work fine in windowed mode, but in fullscreen ...\">Change the mouse cursor position in fullscreen</a></h3>\n        <div class=\"tags t-python t-pygame t-mouse t-fullscreen\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/pygame\" class=\"post-tag\" title=\"show questions tagged 'pygame'\" rel=\"tag\">pygame</a> <a href=\"https://stackoverflow.com/questions/tagged/mouse\" class=\"post-tag\" title=\"show questions tagged 'mouse'\" rel=\"tag\">mouse</a> <a href=\"https://stackoverflow.com/questions/tagged/fullscreen\" class=\"post-tag\" title=\"show questions tagged 'fullscreen'\" rel=\"tag\">fullscreen</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31864534/change-the-mouse-cursor-position-in-fullscreen/?lastactivity\" class=\"started-link\">modified <span title=\"2015-08-07 08:59:27Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/876937/xophmeister\">Xophmeister</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">4,609</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873643\">\n    <div onclick=\"window.location.href='/questions/31873643/use-hastraits-and-pyqt-signals-in-one-class'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"5 views\">5</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873643/use-hastraits-and-pyqt-signals-in-one-class\" class=\"question-hyperlink\" title=\"I have a huge traits application, which is running into the limitations of enthought traits. Mainly performance issues when using the @on_traits_changed decorator. It would be pretty straightforward ...\">Use HasTraits and PyQt signals in one class</a></h3>\n        <div class=\"tags t-python t-pyqt t-signals t-traits\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/pyqt\" class=\"post-tag\" title=\"show questions tagged 'pyqt'\" rel=\"tag\">pyqt</a> <a href=\"https://stackoverflow.com/questions/tagged/signals\" class=\"post-tag\" title=\"show questions tagged 'signals'\" rel=\"tag\">signals</a> <a href=\"https://stackoverflow.com/questions/tagged/traits\" class=\"post-tag\" title=\"show questions tagged 'traits'\" rel=\"tag\">traits</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873643/use-hastraits-and-pyqt-signals-in-one-class\" class=\"started-link\">asked <span title=\"2015-08-07 08:58:40Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/1193279/heinzkurt\">HeinzKurt</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">71</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873553\">\n    <div onclick=\"window.location.href='/questions/31873553/arcgis-server-write-properties-of-all-services-to-a-csv-file'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"4 views\">4</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873553/arcgis-server-write-properties-of-all-services-to-a-csv-file\" class=\"question-hyperlink\" title=\"I have 36 Services running on ArcGIS Server and would like export all properties for each service in a csv file. I managed to write a code by the help of ESRI Helpdesk ...\">Arcgis Server Write properties of all services to a CSV file</a></h3>\n        <div class=\"tags t-python t-arcpy t-arcgis-server\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/arcpy\" class=\"post-tag\" title=\"show questions tagged 'arcpy'\" rel=\"tag\">arcpy</a> <a href=\"https://stackoverflow.com/questions/tagged/arcgis-server\" class=\"post-tag\" title=\"show questions tagged 'arcgis-server'\" rel=\"tag\">arcgis-server</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873553/arcgis-server-write-properties-of-all-services-to-a-csv-file\" class=\"started-link\">asked <span title=\"2015-08-07 08:54:44Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/4157248/script80\">script80</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">20</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31873316\">\n    <div onclick=\"window.location.href='/questions/31873316/sybase-adaptive-server-iq-cant-select-always-limited-to-30'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"2 votes\">2</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"7 views\">7</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31873316/sybase-adaptive-server-iq-cant-select-always-limited-to-30\" class=\"question-hyperlink\" title=\"I've this problem with a Sybase ASE database (version SELECT @@version shows 12.5.0/0306) using the PHP SQL Anywhere extension for PHP 5.5.\n\nI can't select all rows, i.e. SELECT * from anytable always ...\">Sybase Adaptive Server IQ can't SELECT *, always limited to 30?</a></h3>\n        <div class=\"tags t-php t-sybase t-sybase-ase t-sqlanywhere\">\n            <a href=\"https://stackoverflow.com/questions/tagged/php\" class=\"post-tag\" title=\"show questions tagged 'php'\" rel=\"tag\">php</a> <a href=\"https://stackoverflow.com/questions/tagged/sybase\" class=\"post-tag\" title=\"show questions tagged 'sybase'\" rel=\"tag\">sybase</a> <a href=\"https://stackoverflow.com/questions/tagged/sybase-ase\" class=\"post-tag\" title=\"show questions tagged 'sybase-ase'\" rel=\"tag\">sybase-ase</a> <a href=\"https://stackoverflow.com/questions/tagged/sqlanywhere\" class=\"post-tag\" title=\"show questions tagged 'sqlanywhere'\" rel=\"tag\">sqlanywhere</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31873316/sybase-adaptive-server-iq-cant-select-always-limited-to-30\" class=\"started-link\">asked <span title=\"2015-08-07 08:42:45Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/220180/gremo\">gremo</a> <span class=\"reputation-score\" title=\"reputation score 10112\" dir=\"ltr\">10.1k</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872948\">\n    <div onclick=\"window.location.href='/questions/31872948/rake-task-seems-not-to-write-files-in-a-docker-container'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"4 votes\">4</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status answered\">\n            <div class=\"mini-counts\"><span title=\"1 answer\">1</span></div>\n            <div>answer</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"13 views\">13</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872948/rake-task-seems-not-to-write-files-in-a-docker-container\" class=\"question-hyperlink\" title=\"I'm trying to run my Rails app in production locally as part of platform migration. I'm using Docker with Docker Compose.\n\nI've ran into issues with rake assets:precompile. It look as if the docker ...\">Rake task seems not to write files in a Docker container</a></h3>\n        <div class=\"tags t-ruby-on-rails t-ruby-on-rails-4 t-docker t-boot2docker t-docker-compose\">\n            <a href=\"https://stackoverflow.com/questions/tagged/ruby-on-rails\" class=\"post-tag\" title=\"show questions tagged 'ruby-on-rails'\" rel=\"tag\">ruby-on-rails</a> <a href=\"https://stackoverflow.com/questions/tagged/ruby-on-rails-4\" class=\"post-tag\" title=\"show questions tagged 'ruby-on-rails-4'\" rel=\"tag\">ruby-on-rails-4</a> <a href=\"https://stackoverflow.com/questions/tagged/docker\" class=\"post-tag\" title=\"show questions tagged 'docker'\" rel=\"tag\">docker</a> <a href=\"https://stackoverflow.com/questions/tagged/boot2docker\" class=\"post-tag\" title=\"show questions tagged 'boot2docker'\" rel=\"tag\">boot2docker</a> <a href=\"https://stackoverflow.com/questions/tagged/docker-compose\" class=\"post-tag\" title=\"show questions tagged 'docker-compose'\" rel=\"tag\">docker-compose</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872948/rake-task-seems-not-to-write-files-in-a-docker-container/?lastactivity\" class=\"started-link\">answered <span title=\"2015-08-07 08:34:04Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/2706422/h3nrik\">h3nrik</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">1,481</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872881\">\n    <div onclick=\"window.location.href='/questions/31872881/pylab-cannot-find-reference-for-its-modules'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"0 votes\">0</span></div>\n            <div>votes</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"8 views\">8</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872881/pylab-cannot-find-reference-for-its-modules\" class=\"question-hyperlink\" title=\"I have a mac OS X Yosimite and I'm using python 2.7.10 and Pycharm as my IDLE. I have pylab installed properly but I cannot use any of its modules.\n\nWhen a try:\nfrom pylab import show (or any module) ...\">pylab cannot find reference for its modules</a></h3>\n        <div class=\"tags t-python t-python-2û7 t-matplotlib t-python-module\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/python-2.7\" class=\"post-tag\" title=\"show questions tagged 'python-2.7'\" rel=\"tag\">python-2.7</a> <a href=\"https://stackoverflow.com/questions/tagged/matplotlib\" class=\"post-tag\" title=\"show questions tagged 'matplotlib'\" rel=\"tag\">matplotlib</a> <a href=\"https://stackoverflow.com/questions/tagged/python-module\" class=\"post-tag\" title=\"show questions tagged 'python-module'\" rel=\"tag\">python-module</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872881/pylab-cannot-find-reference-for-its-modules\" class=\"started-link\">asked <span title=\"2015-08-07 08:19:38Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/3669997/felipeformenti\">felipeformenti</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">8</span>\n        </div>\n    </div>\n</div>\n\n\n<div class=\"question-summary narrow\" id=\"question-summary-31872831\">\n    <div onclick=\"window.location.href='/questions/31872831/ipython-spark-cassandra-py4jjavaerror-and-how-to-connect-to-cassandra-from'\" class=\"cp\">\n        <div class=\"votes\">\n            <div class=\"mini-counts\"><span title=\"1 vote\">1</span></div>\n            <div>vote</div>\n        </div>\n        <div class=\"status unanswered\">\n            <div class=\"mini-counts\"><span title=\"0 answers\">0</span></div>\n            <div>answers</div>\n        </div>\n        <div class=\"views\">\n            <div class=\"mini-counts\"><span title=\"6 views\">6</span></div>\n            <div>views</div>\n        </div>\n    </div>\n    <div class=\"summary\">\n\n                    <h3><a href=\"https://stackoverflow.com/questions/31872831/ipython-spark-cassandra-py4jjavaerror-and-how-to-connect-to-cassandra-from\" class=\"question-hyperlink\" title=\"How can I connect to Cassandra from Spark with iPython?\n\nI have followed the code from here and modified it,\n\nimport os\nimport sys\n\n# Path for spark source folder\nos.environ['SPARK_HOME'] = ...\">iPython + Spark + Cassandra - Py4JJavaError and How to connect to Cassandra from Spark?</a></h3>\n        <div class=\"tags t-python t-cassandra t-apache-spark t-ipython-notebook\">\n            <a href=\"https://stackoverflow.com/questions/tagged/python\" class=\"post-tag\" title=\"show questions tagged 'python'\" rel=\"tag\">python</a> <a href=\"https://stackoverflow.com/questions/tagged/cassandra\" class=\"post-tag\" title=\"show questions tagged 'cassandra'\" rel=\"tag\">cassandra</a> <a href=\"https://stackoverflow.com/questions/tagged/apache-spark\" class=\"post-tag\" title=\"show questions tagged 'apache-spark'\" rel=\"tag\">apache-spark</a> <a href=\"https://stackoverflow.com/questions/tagged/ipython-notebook\" class=\"post-tag\" title=\"show questions tagged 'ipython-notebook'\" rel=\"tag\">ipython-notebook</a>\n        </div>\n        <div class=\"started\">\n            <a href=\"https://stackoverflow.com/questions/31872831/ipython-spark-cassandra-py4jjavaerror-and-how-to-connect-to-cassandra-from\" class=\"started-link\">asked <span title=\"2015-08-07 08:16:43Z\" class=\"relativetime\">1 hour ago</span></a>\n            <a href=\"https://stackoverflow.com/users/413225/teelou\">teelou</a> <span class=\"reputation-score\" title=\"reputation score \" dir=\"ltr\">9,321</span>\n        </div>\n    </div>\n</div>\n\n    </div>\n</div>\n\n    <br class=\"cbt\">\n    <h2 class=\"bottom-notice\" data-loc=\"2\">Looking for more? Browse the <a href=\"https://stackoverflow.com/questions\">complete list of questions</a>, or <a href=\"https://stackoverflow.com/tags\">popular tags</a>. Help us answer <a href=\"https://stackoverflow.com/unanswered\">unanswered questions</a>.</h2>\n<script>\n    StackExchange.ready(function() { StackExchange.question.initShareLinks(); });\n</script>\n</div>\n    <div id=\"sidebar\">\n        <div class=\"module community-bulletin\" data-tracker=\"cb=1\">\n    <div class=\"related\">\n                <div class=\"bulletin-title\">\n                    Hot Meta Posts\n                </div>\n                <hr>\n    <div class=\"spacer\">\n        <div class=\"bulletin-item-type\">\n                <span title=\"Vote score (upvotes - downvotes)\">33</span>\n            </div>\n                <div class=\"bulletin-item-content\">\n                    <a href=\"http://meta.stackoverflow.com/questions/300778/why-isnt-providing-a-minimal-tag-wiki-mandatory-when-new-tags-are-created?cb=1\" class=\"question-hyperlink\">Why isn't providing a minimal tag-wiki mandatory, when new tags are created?</a>\n                </div>\n                <br class=\"cbt\">\n            </div>\n    <div class=\"spacer\">\n        <div class=\"bulletin-item-type\">\n                <span title=\"Vote score (upvotes - downvotes)\">16</span>\n            </div>\n                <div class=\"bulletin-item-content\">\n                    <a href=\"http://meta.stackoverflow.com/questions/300871/strange-rendering-of-question-title?cb=1\" class=\"question-hyperlink\">Strange rendering of question title</a>\n                </div>\n                <br class=\"cbt\">\n            </div>\n    <div class=\"spacer\">\n        <div class=\"bulletin-item-type\">\n                <span title=\"Vote score (upvotes - downvotes)\">15</span>\n            </div>\n                <div class=\"bulletin-item-content\">\n                    <a href=\"http://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers?cb=1\" class=\"question-hyperlink\">What comment should I add to code-only answers?</a>\n                </div>\n                <br class=\"cbt\">\n            </div>\n    <div class=\"spacer\">\n        <div class=\"bulletin-item-type\">\n                <span title=\"Vote score (upvotes - downvotes)\">40</span>\n            </div>\n                <div class=\"bulletin-item-content\">\n                    <a href=\"http://meta.stackoverflow.com/questions/300810/is-there-any-automation-to-detect-stop-shill-behaviour?cb=1\" class=\"question-hyperlink\">Is there any automation to detect/stop shill behaviour?</a>\n                </div>\n                <br class=\"cbt\">\n            </div>\n    </div>\n</div>\n\n\n<div class=\"module\" id=\"interesting-tags\">\n\n        <h4 id=\"h-interesting-tags\">Favorite Tags</h4>\n        <a id=\"edit-interesting\">edit</a>\n        <div id=\"interestingTags\"><a href=\"https://stackoverflow.com/questions/tagged/portia\" class=\"post-tag user-tag\" title=\"show questions tagged 'portia'\" rel=\"tag\">portia</a> </div>\n        <span id=\"add-interesting\"></span>\n        <a id=\"addInterestingTag\" class=\"dno\">Add a favorite tag</a><br>\n        <p id=\"tag-subscriptions\" class=\"ar dno\" style=\"margin-top: 10px;\"><a href=\"http://stackexchange.com/filters\">advanced tag subscriptions »</a></p>\n        <div id=\"ignored-wrapper\" class=\"dno\">\n            <h4 id=\"h-ignored-tags\">Ignored Tags</h4>\n\n            <div id=\"ignoredTags\">\n            </div>\n            <span id=\"add-ignored\"></span>\n            <a id=\"addIgnoredTag\">Add an ignored tag</a>\n            <div class=\"dno\">\n\n                <div><input name=\"hideIgnored\" id=\"hideIgnoredTrue\" type=\"radio\"><label for=\"hideIgnoredTrue\">&nbsp;Hide questions in your ignored tags</label></div>\n                <div><input name=\"hideIgnored\" id=\"hideIgnoredFalse\" checked=\"checked\" type=\"radio\"><label for=\"hideIgnoredFalse\">&nbsp;Gray out questions in your ignored tags</label></div>\n            </div>\n        </div>\n            <p id=\"tag-pref-prefs\" class=\"ar dno\" style=\"margin-top: 10px;\"><a href=\"https://stackoverflow.com/users/preferences/1428880\">set tag preferences »</a></p>\n</div>\n\n<script>\n    StackExchange.ready(function() {\n        StackExchange.tagPreferences.applyPrefs(true, []);\n    });\n</script>\n        <script>\n                var ados = ados || {}; ados.run = ados.run || [];\n                ados.run.push(function () { ados_add_placement(22,8277,\"adzerk130920805\",[17,2221]).setZone(45); });\n            </script>\n            <div style=\"display: none ! important;\" class=\"everyonelovesstackoverflow\" id=\"adzerk130920805\">\n            </div>\n        <div id=\"hireme\">\n            <script>\n;(function(n){var o=20,b=\"#sidebar [id^='adzerk'].everyonelovesstackoverflow\",s=\"div#hireme,div.hireme\",r=setTimeout,f=clearTimeout,t=null,h=!1,e=null,u,c=n.adurl,k=n.azw,d=n.azt,l=Array.prototype,a=l.map,g=l.forEach,v=function(){return(new Date).getTime()},nt=v(),i=function(n){return document.querySelectorAll(n)},tt=function(n){var t={},r=window.StackExchange,e=decodeURIComponent,u,f;return n.length>1&&n.substr(1).split(\"&\").forEach(function(n){var t=n.split(\"=\");this[e(t[0])]=e(t[1])},t),f=t.ac||t.accountid||r&&r.options&&r.options.user&&r.options.user.accountId,f&&(t.ac=f),t.tags||(u=a.call(i(\".post-taglist .post-tag\"),function(n){return n.innerText}),u.length>0&&(t.tags=u.join(\";\"))),n===\"#large\"&&(t.l=1),n===\"#abort\"&&(t.abort=1),t},y=function(n){return typeof n==\"string\"&&(n=i(n)),n.length!==0&&n[0].innerHTML.replace(/\\s+/g,\"\").length>0},p=function(n,r){if(!h){h=!0;var l=i(s),y=document,p=encodeURIComponent,w,o,b,e,u;f(t);l.length>0&&((n.l||i(\"#careersadsdoublehigh\").length>0)&&(n.l=1),u=a.call(l,function(n){return\"d=\"+n.id}).join(\"&\"),w=[\"l\",\"ip\",\"ac\",\"eng\",\"prov\",\"tags\",\"theme\",\"remote\",\"seed\"],o=Object.keys(n).filter(function(n){return w.indexOf(n)!==-1}).map(function(t){return p(t)+\"=\"+p(n[t])}).join(\"&\"),o&&(u+=\"&\"+o),r&&(u+=\"&azt=true\"),b=v()-nt,u+=\"&lw=\"+b,e=y.createElement(\"script\"),e.type=\"text/javascript\",e.src=c+(c.indexOf(\"?\")===-1?\"?\":\"&\")+u,y.body.appendChild(e),window.calculonPlacerStart=(new Date).getTime())}},it=function(n){y(n)||(g.call(i(n),function(n){n.parentNode.removeChild(n)}),t&&f(t))},w=function(n){y(b)?(e&&f(e),p(n)):t=r(w,o,n)};(u=tt(location.hash),u.abort)||(k&&(e=r(p,d,u,!0)),t=r(w,o,u),r(it,2e3,s))}).apply(null, [{\"azw\":false,\"azt\":2000,\"adurl\":\"//clc.stackoverflow.com/j/p\"}])            </script>\n        </div>\n\n<div id=\"hot-network-questions\" class=\"module\">\n    <h4>\n        <a href=\"https://stackexchange.com/questions?tab=hot\" class=\"js-gps-track\" data-gps-track=\"posts_hot_network.click({ item_type:1, location:8 })\">\n            Hot Network Questions\n        </a>\n    </h4>\n    <ul>\n            <li>\n                <div class=\"favicon favicon-tex\" title=\"TeX - LaTeX Stack Exchange\"></div><a href=\"http://tex.stackexchange.com/questions/259172/why-hbox-does-not-start-a-new-paragraph\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:85 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Why hbox does not start a new paragraph?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-math\" title=\"Mathematics Stack Exchange\"></div><a href=\"http://math.stackexchange.com/questions/1387519/when-has-one-sufficiently-mastered-an-area-of-mathematics\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:69 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    When has one sufficiently mastered an area of mathematics?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-worldbuilding\" title=\"Worldbuilding Stack Exchange\"></div><a href=\"http://worldbuilding.stackexchange.com/questions/21814/wooden-sticks-are-the-only-allowed-weapons-in-a-technological-society-how-far\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:579 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Wooden sticks are the only allowed weapons in a\ntechnological society - how far would these weapons have progressed by\nnow?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-drupal\" title=\"Drupal Answers\"></div><a href=\"http://drupal.stackexchange.com/questions/168086/what-are-some-ways-to-tell-if-you-are-currently-on-the-same-drupal-installation\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:220 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    What are some ways to tell if you are currently on the same Drupal installation as your code?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-math\" title=\"Mathematics Stack Exchange\"></div><a href=\"http://math.stackexchange.com/questions/1387479/is-there-such-a-number-n-such-that-any-group-of-order-n-is-simple\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:69 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Is there such a number N such that any group of order N is simple?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-workplace\" title=\"The Workplace Stack Exchange\"></div><a href=\"http://workplace.stackexchange.com/questions/50766/employer-wants-work-loving-employees-and-not-paycheck-loving-employees\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:423 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Employer wants work-loving employees, and not paycheck-loving employees\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-mathematica\" title=\"Mathematica Stack Exchange\"></div><a href=\"http://mathematica.stackexchange.com/questions/90078/filling-the-gap-between-different-range\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:387 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Filling the gap between different range\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-parenting\" title=\"Parenting Stack Exchange\"></div><a href=\"http://parenting.stackexchange.com/questions/21583/how-can-i-help-my-9-year-old-son-fall-asleep-and-stop-stuttering\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:228 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    How can I help my 9 year old son fall asleep and stop stuttering?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-blender\" title=\"Blender Stack Exchange\"></div><a href=\"http://blender.stackexchange.com/questions/35235/how-to-turn-off-jumping-by-parts-when-moving-snapping\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:502 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    how to turn off jumping by parts when moving (snapping)\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-writers\" title=\"Writers Stack Exchange\"></div><a href=\"http://writers.stackexchange.com/questions/18521/how-far-into-a-story-can-i-go-until-not-physically-describing-main-characters-be\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:166 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    How far into a story can I go until not physically describing main characters becomes really weird?\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-superuser\" title=\"Super User\"></div><a href=\"http://superuser.com/questions/952141/windows-10-system-process-taking-massive-amounts-of-ram\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:3 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Windows 10, 'System' process taking massive amounts of RAM\n                </a>\n\n            </li>\n            <li>\n                <div class=\"favicon favicon-law\" title=\"Law Stack Exchange\"></div><a href=\"http://law.stackexchange.com/questions/1686/is-there-one-body-of-common-law\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:617 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Is there one body of common law?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-codereview\" title=\"Code Review Stack Exchange\"></div><a href=\"http://codereview.stackexchange.com/questions/99247/using-javascript-to-determine-if-two-words-are-anagrams\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:196 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Using javascript to determine if two words are anagrams\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-academia\" title=\"Academia Stack Exchange\"></div><a href=\"http://academia.stackexchange.com/questions/50068/im-admitted-to-a-phd-program-in-mathematics-but-only-achieved-a-pass-no-disti\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:415 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    I'm admitted to a PhD program in mathematics, but\nonly achieved a pass (no distinction) in masters. Will this affect my\nreputation in the PhD program?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-puzzling\" title=\"Puzzling Stack Exchange\"></div><a href=\"http://puzzling.stackexchange.com/questions/18729/four-is-cosmic\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:559 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    -Four is Cosmic-\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-security\" title=\"Information Security Stack Exchange\"></div><a href=\"http://security.stackexchange.com/questions/96134/why-are-ransom-attacks-successful\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:162 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Why are ransom attacks successful?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-graphicdesign\" title=\"Graphic Design Stack Exchange\"></div><a href=\"http://graphicdesign.stackexchange.com/questions/57620/aligning-letters-wrong-appears-more-right\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:174 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Aligning letters \"Wrong\" appears more \"Right\"\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-security\" title=\"Information Security Stack Exchange\"></div><a href=\"http://security.stackexchange.com/questions/96121/why-do-phishing-emails-have-spelling-and-grammar-mistakes\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:162 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Why do phishing emails have spelling and grammar mistakes?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-security\" title=\"Information Security Stack Exchange\"></div><a href=\"http://security.stackexchange.com/questions/96004/anti-virus-for-linux-is-linux-less-vulnerable-than-windows\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:162 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Anti-virus for Linux - Is Linux less vulnerable than Windows?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-biology\" title=\"Biology Stack Exchange\"></div><a href=\"http://biology.stackexchange.com/questions/36620/why-would-a-plant-evolve-to-produce-an-addictive-chemical\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:375 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Why would a plant evolve to produce an addictive chemical?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-scifi\" title=\"Science Fiction &amp; Fantasy Stack Exchange\"></div><a href=\"http://scifi.stackexchange.com/questions/97631/reference-to-the-prime-minister-in-harry-potter\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:186 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Reference to the prime minister in Harry Potter?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-aviation\" title=\"Aviation Stack Exchange\"></div><a href=\"http://aviation.stackexchange.com/questions/17612/why-is-luggage-required-to-be-loaded-in-containers\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:528 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    Why is luggage required to be loaded in containers?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-gaming\" title=\"Arqade\"></div><a href=\"http://gaming.stackexchange.com/questions/230956/how-did-the-designers-of-super-mario-brothers-3-expect-anyone-to-find-the-first\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:41 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    How did the designers of Super Mario Brothers 3 expect anyone to find the first Warp Whistle?\n                </a>\n\n            </li>\n            <li style=\"display: list-item;\" class=\"dno js-hidden\">\n                <div class=\"favicon favicon-puzzling\" title=\"Puzzling Stack Exchange\"></div><a href=\"http://puzzling.stackexchange.com/questions/18727/a-poem-of-dynamic-words\" class=\"js-gps-track\" data-gps-track=\"site.switch({ item_type:8, target_site:559 }); posts_hot_network.click({ item_type:2, location:8 })\">\n                    A poem of dynamic words\n                </a>\n\n            </li>\n    </ul>\n\n\n</div>\n\n    </div>\n\n<div id=\"feed-link\">\n    <div id=\"feed-link-text\">\n        <a href=\"https://stackoverflow.com/feeds\" title=\"the 30 most recent questions\">\n            <span class=\"feed-icon\"></span>recent questions feed\n        </a>\n    </div>\n</div>\n\n\n        </div>\n    </div>\n    <div id=\"footer\" class=\"categories\">\n        <div class=\"footerwrap\">\n            <div id=\"footer-menu\">\n                <div class=\"top-footer-links\">\n                        <a href=\"https://stackoverflow.com/tour\">tour</a>\n                    <a href=\"https://stackoverflow.com/help\">help</a>\n                    <a href=\"http://blog.stackoverflow.com/?blb=1\">blog</a>\n                        <a href=\"http://chat.stackoverflow.com/\">chat</a>\n                    <a href=\"http://data.stackexchange.com/\">data</a>\n                    <a href=\"http://stackexchange.com/legal\">legal</a>\n                    <a href=\"http://stackexchange.com/legal/privacy-policy\">privacy policy</a>\n                    <a href=\"http://stackexchange.com/work-here\">work here</a>\n                    <a href=\"http://stackexchange.com/mediakit\">advertising info</a>\n\n                    <a onclick='StackExchange.switchMobile(\"on\")'>mobile</a>\n                    <b><a href=\"https://stackoverflow.com/contact\">contact us</a></b>\n                        <b><a href=\"http://meta.stackoverflow.com/\">feedback</a></b>\n\n                </div>\n                <div id=\"footer-sites\">\n                    <table>\n    <tbody><tr>\n            <th colspan=\"3\">\n                Technology\n            </th>\n            <th>\n                Life / Arts\n            </th>\n            <th>\n                Culture / Recreation\n            </th>\n            <th>\n                Science\n            </th>\n            <th>\n                Other\n            </th>\n    </tr>\n    <tr>\n            <td>\n                <ol>\n                        <li><a href=\"https://stackoverflow.com/\" title=\"professional and enthusiast programmers\">Stack Overflow</a></li>\n                        <li><a href=\"https://serverfault.com/\" title=\"system and network administrators\">Server Fault</a></li>\n                        <li><a href=\"https://superuser.com/\" title=\"computer enthusiasts and power users\">Super User</a></li>\n                        <li><a href=\"https://webapps.stackexchange.com/\" title=\"power users of web applications\">Web Applications</a></li>\n                        <li><a href=\"https://askubuntu.com/\" title=\"Ubuntu users and developers\">Ask Ubuntu</a></li>\n                        <li><a href=\"https://webmasters.stackexchange.com/\" title=\"pro webmasters\">Webmasters</a></li>\n                        <li><a href=\"https://gamedev.stackexchange.com/\" title=\"professional and independent game developers\">Game Development</a></li>\n                        <li><a href=\"https://tex.stackexchange.com/\" title=\"users of TeX, LaTeX, ConTeXt, and related typesetting systems\">TeX - LaTeX</a></li>\n                            </ol></td><td><ol>\n                        <li><a href=\"https://programmers.stackexchange.com/\" title=\"professional programmers interested in conceptual questions about software development\">Programmers</a></li>\n                        <li><a href=\"https://unix.stackexchange.com/\" title=\"users of Linux, FreeBSD and other Un*x-like operating systems.\">Unix &amp; Linux</a></li>\n                        <li><a href=\"https://apple.stackexchange.com/\" title=\"power users of Apple hardware and software\">Ask Different (Apple)</a></li>\n                        <li><a href=\"https://wordpress.stackexchange.com/\" title=\"WordPress developers and administrators\">WordPress Development</a></li>\n                        <li><a href=\"https://gis.stackexchange.com/\" title=\"cartographers, geographers and GIS professionals\">Geographic Information Systems</a></li>\n                        <li><a href=\"https://electronics.stackexchange.com/\" title=\"electronics and electrical engineering professionals, students, and enthusiasts\">Electrical Engineering</a></li>\n                        <li><a href=\"https://android.stackexchange.com/\" title=\"enthusiasts and power users of the Android operating system\">Android Enthusiasts</a></li>\n                        <li><a href=\"https://security.stackexchange.com/\" title=\"information security professionals\">Information Security</a></li>\n                            </ol></td><td><ol>\n                        <li><a href=\"https://dba.stackexchange.com/\" title=\"database professionals who wish to improve their database skills and learn from others in the community\">Database Administrators</a></li>\n                        <li><a href=\"https://drupal.stackexchange.com/\" title=\"Drupal developers and administrators\">Drupal Answers</a></li>\n                        <li><a href=\"https://sharepoint.stackexchange.com/\" title=\"SharePoint enthusiasts\">SharePoint</a></li>\n                        <li><a href=\"https://ux.stackexchange.com/\" title=\"user experience researchers and experts\">User Experience</a></li>\n                        <li><a href=\"https://mathematica.stackexchange.com/\" title=\"users of Mathematica\">Mathematica</a></li>\n                        <li><a href=\"https://salesforce.stackexchange.com/\" title=\"Salesforce administrators, implementation experts, developers and anybody in-between\">Salesforce</a></li>\n                        <li><a href=\"https://expressionengine.stackexchange.com/\" title=\"administrators, end users, developers and designers for ExpressionEngine® CMS\">ExpressionEngine® Answers</a></li>\n\n                        <li>\n                            <a href=\"http://stackexchange.com/sites#technology\" class=\"more\">\n                                more (13)\n                            </a>\n                        </li>\n                </ol>\n            </td>\n            <td>\n                <ol>\n                        <li><a href=\"https://photo.stackexchange.com/\" title=\"professional, enthusiast and amateur photographers\">Photography</a></li>\n                        <li><a href=\"https://scifi.stackexchange.com/\" title=\"science fiction and fantasy enthusiasts\">Science Fiction &amp; Fantasy</a></li>\n                        <li><a href=\"https://graphicdesign.stackexchange.com/\" title=\"Graphic Design professionals, students, and enthusiasts\">Graphic Design</a></li>\n                        <li><a href=\"https://movies.stackexchange.com/\" title=\"movie and tv enthusiasts\">Movies &amp; TV</a></li>\n                        <li><a href=\"https://cooking.stackexchange.com/\" title=\"professional and amateur chefs\">Seasoned Advice (cooking)</a></li>\n                        <li><a href=\"https://diy.stackexchange.com/\" title=\"contractors and serious DIYers\">Home Improvement</a></li>\n                        <li><a href=\"https://money.stackexchange.com/\" title=\"people who want to be financially literate\">Personal Finance &amp; Money</a></li>\n                        <li><a href=\"https://academia.stackexchange.com/\" title=\"academics and those enrolled in higher education\">Academia</a></li>\n\n                        <li>\n                            <a href=\"http://stackexchange.com/sites#lifearts\" class=\"more\">\n                                more (9)\n                            </a>\n                        </li>\n                </ol>\n            </td>\n            <td>\n                <ol>\n                        <li><a href=\"https://english.stackexchange.com/\" title=\"linguists, etymologists, and serious English language enthusiasts\">English Language &amp; Usage</a></li>\n                        <li><a href=\"https://skeptics.stackexchange.com/\" title=\"scientific skepticism\">Skeptics</a></li>\n                        <li><a href=\"https://judaism.stackexchange.com/\" title=\"those who base their lives on Jewish law and tradition and anyone interested in learning more\">Mi Yodeya (Judaism)</a></li>\n                        <li><a href=\"https://travel.stackexchange.com/\" title=\"road warriors and seasoned travelers\">Travel</a></li>\n                        <li><a href=\"https://christianity.stackexchange.com/\" title=\"committed Christians, experts in Christianity and those interested in learning more\">Christianity</a></li>\n                        <li><a href=\"https://gaming.stackexchange.com/\" title=\"passionate videogamers on all platforms\">Arqade (gaming)</a></li>\n                        <li><a href=\"https://bicycles.stackexchange.com/\" title=\"people who build and repair bicycles, people who train cycling, or commute on bicycles\">Bicycles</a></li>\n                        <li><a href=\"https://rpg.stackexchange.com/\" title=\"gamemasters and players of tabletop, paper-and-pencil role-playing games\">Role-playing Games</a></li>\n\n                        <li>\n                            <a href=\"http://stackexchange.com/sites#culturerecreation\" class=\"more\">\n                                more (21)\n                            </a>\n                        </li>\n                </ol>\n            </td>\n            <td>\n                <ol>\n                        <li><a href=\"https://math.stackexchange.com/\" title=\"people studying math at any level and professionals in related fields\">Mathematics</a></li>\n                        <li><a href=\"https://stats.stackexchange.com/\" title=\"people interested in statistics, machine learning, data analysis, data mining, and data visualization\">Cross Validated (stats)</a></li>\n                        <li><a href=\"https://cstheory.stackexchange.com/\" title=\"theoretical computer scientists and researchers in related fields\">Theoretical Computer Science</a></li>\n                        <li><a href=\"https://physics.stackexchange.com/\" title=\"active researchers, academics and students of physics\">Physics</a></li>\n                        <li><a href=\"https://mathoverflow.net/\" title=\"professional mathematicians\">MathOverflow</a></li>\n                        <li><a href=\"https://chemistry.stackexchange.com/\" title=\"scientists, academics, teachers and students\">Chemistry</a></li>\n                        <li><a href=\"https://biology.stackexchange.com/\" title=\"biology researchers, academics, and students\">Biology</a></li>\n\n                        <li>\n                            <a href=\"http://stackexchange.com/sites#science\" class=\"more\">\n                                more (5)\n                            </a>\n                        </li>\n                </ol>\n            </td>\n            <td>\n                <ol>\n                        <li><a href=\"https://stackapps.com/\" title=\"apps, scripts, and development with the Stack Exchange API\">Stack Apps</a></li>\n                        <li><a href=\"https://meta.stackexchange.com/\" title=\"meta-discussion of the Stack Exchange family of Q&amp;A websites\">Meta Stack Exchange</a></li>\n                        <li><a href=\"https://area51.stackexchange.com/\" title=\"proposing new sites in the Stack Exchange network\">Area 51</a></li>\n                        <li><a href=\"https://careers.stackoverflow.com/\">Stack Overflow Careers</a></li>\n\n                </ol>\n            </td>\n    </tr>\n</tbody></table>\n                </div>\n            </div>\n\n            <div id=\"copyright\">\n                site design / logo © 2015 Stack Exchange Inc; user contributions licensed under <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\" rel=\"license\">cc by-sa 3.0</a>\n                with <a href=\"http://blog.stackoverflow.com/2009/06/attribution-required/\" rel=\"license\">attribution required</a>\n            </div>\n            <div id=\"svnrev\">\n                rev 2015.8.6.2782\n            </div>\n\n        </div>\n    </div>\n    <noscript>\n        <div id=\"noscript-warning\">Stack Overflow works best with JavaScript enabled<img src=\"http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif\" alt=\"\" class=\"dno\"></div>\n    </noscript>\n<script>var p = \"http\", d = \"static\"; if (document.location.protocol == \"https:\") { p += \"s\"; d = \"engine\"; } var z = document.createElement(\"script\"); z.type = \"text/javascript\"; z.async = true; z.src = p + \"://\" + d + \".adzerk.net/ados.js\"; var s = document.getElementsByTagName(\"script\")[0]; s.parentNode.insertBefore(z, s);</script>\n<script>\n    var ados = ados || {};\n    ados.run = ados.run || [];\n    ados.run.push(function () { ados_setKeywords('x-user-registered');; ados_load(); });\n</script>\n\n    <script>\n        (function (i, s, o, g, r, a, m) {\n            i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o),\n            m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m);\n        })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n        ga('create', 'UA-5620270-1');\n        ga('set', 'dimension1', '1531850');\n\n        ga('send', 'pageview');\n        var _qevents = _qevents || [],\n            _comscore = _comscore || [];\n        (function () {\n            var ssl='https:'==document.location.protocol,\n                s=document.getElementsByTagName('script')[0],\n                qc=document.createElement('script');\n            qc.async=true;\n            qc.src=(ssl?'https://secure':'http://edge')+'.quantserve.com/quant.js';\n            s.parentNode.insertBefore(qc, s);\n            var sc=document.createElement('script');\n            sc.async=true;\n            sc.src=(ssl?'https://sb':'http://b') + '.scorecardresearch.com/beacon.js';\n            s.parentNode.insertBefore(sc, s);\n        })();\n        _comscore.push({ c1: \"2\", c2: \"17440561\" });\n        _qevents.push({ qacct: \"p-c1rF4kxgLUzNc\" });\n    </script>\n\n<style>#content > #center > .dose > .dosesingle,\n#content > #right > .dose > .dosesingle,\n#header + #content > #left > #rlblock_left\n{display:none !important;}</style></body></html>\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/stips.co.il.html",
    "content": "<!DOCTYPE html>\n<html lang=\"iw\" dir=\"rtl\" itemscope itemtype=\"http://schema.org/Article\">\n<head>\n<meta charset=\"utf-8\">\n<meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0\"/>\n<title>איך ההרגשה זה להיות טבעוני?</title>\n<meta name=\"description\" content=\"לא זוכר איך זה לא להיות טבעוני אני רק יודע שכיום אני בחיים לא עייף ומפוצץ תמיד באנרגיה\" />\n<meta name=\"keywords\" content=\"טבעוניים, טבעונות, רגשות\" />\n<meta name=\"robots\" content=\"index,follow\"/>\n\n<link rel=\"canonical\" href=\"https://stips.co.il/ask/5163110/%D7%90%D7%99%D7%9A-%D7%94%D7%94%D7%A8%D7%92%D7%A9%D7%94-%D7%96%D7%94-%D7%9C%D7%94%D7%99%D7%95%D7%AA-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99\"/>\n<meta property=\"og:image\" content=\"https://stipscdn-stips.netdna-ssl.com/photos/z/373405491.jpg\"/>\n<meta property=\"og:type\" content=\"article\"/>\n<meta property=\"og:title\" content=\"איך ההרגשה זה להיות טבעוני?\"/>\n<meta property=\"og:sdescription\" content=\"לא זוכר איך זה לא להיות טבעוני אני רק יודע שכיום אני בחיים לא עייף ומפוצץ תמיד באנרגיה\"/>\n\n<link rel=\"icon\" type=\"image/x-icon\" href=\"/favicon2017.ico\" />\n<meta itemprop=\"datePublished\" content=\"2017-04-12\">\n\t\n\t<style>\n\t\t.bg-black{background-color:#000}.bg-stipsgreen{background-color:#01D284}.bg-blue{background-color:#02ADE2}.bg-darkblue{background-color:#0D47A1}.bg-pink{background-color:#ff497a}.bg-orange{background-color:#FF5722}.bg-teal{background-color:#26A69A}.bg-yellow{background-color:#f3e465}body{direction:rtl;font-family:arial;background:#f2f2f2;padding:0px;margin:0px}.page-header{width:100%;background:#8d3aff;background-color:#576eef;background-color:#1f3bd6;background-color:#fff;z-index:10;transition:opacity 0.2s;top:0px}@media only screen and (max-width: 899px){.page-header{position:relative}}@media only screen and (min-width: 900px){.page-header{margin-bottom:25px}}.page-header .item-image .item-title{position:absolute;box-sizing:border-box;text-shadow:1px 1px 10px #000;background:rgba(0,0,0,0.25)}.page-header .info{display:none}.page-header .item-title{height:100%;box-sizing:border-box;max-width:1000px;font-weight:bold;padding:15px 15px;line-height:130%;margin:auto}.page-header .item-title h1{margin:0px;padding:0px;font-size:inherit}@media only screen and (min-width: 900px){.page-header .item-title h1{font-weight:bold}}.page-header .item-title .extra-content{font-size:16px;font-weight:normal;line-height:150%}@media only screen and (min-width: 900px){.page-header .item-title .extra-content{font-size:19px}}.page-header .item-title .attached_link{color:#ffaa0a}@media only screen and (min-width: 900px){.page-header .item-title{font-size:40px;padding:25px 12px}}@media only screen and (max-width: 899px){.page-header .item-title{font-size:20px}}.nav-bar-wrapper{background:#fff;position:relative;z-index:30;width:100%}.nav-bar-wrapper img{opacity:0}body.loaded .nav-bar-wrapper{background:#00c795;box-shadow:1px 1px 1px 0px rgba(0,0,0,0.15)}body.loaded .nav-bar-wrapper img{opacity:1}@media only screen and (min-width: 900px){.nav-bar{height:52px;width:1000px;margin:0 auto}.nav-bar .nav-bar-logo{position:relative;top:14px;right:11px}}@media only screen and (max-width: 899px){.nav-bar{width:100%;height:47px}.nav-bar .nav-bar-logo{position:relative;top:12px;right:10px}.nav-bar .nav-bar-logo img{width:100px}}.item-image,.item-image-content{width:100%;height:160px;overflow:hidden}.item-image{margin-top:0px;position:relative;border-radius:0px;border:0px}@media only screen and (min-width: 900px){.item-image{display:none}}.item-image .item-image-content{background-repeat:no-repeat;background-size:cover;background-position:0% 30%;position:relative}.item-image .item-image-content img{height:60px;opacity:0}.item-image #creative_commons_link{background:rgba(255,255,255,0.78);text-decoration:none;display:none;opacity:0;transition:1s;display:block;position:absolute;bottom:10px;left:10px;background:#fff;color:#555;border-radius:10px;padding:2px 8px;font-size:12px}@media only screen and (min-width: 900px){.item-image{display:none;background:none !important}}.page-content{margin-bottom:24px;position:relative;z-index:20}.answers-title{color:#262626;font-size:13px;margin:5px 15px}@media only screen and (min-width: 900px){.answers-title{font-size:18px;margin:0px 2px 10px 0px}}.topics{width:100%;max-width:1000px;margin:0 auto;overflow:hidden;position:relative;top:-13px;right:10px;padding-bottom:3px}@media only screen and (max-width: 899px){.topics{top:0px;right:0px;height:39px;padding-right:0x;margin-top:-23px;padding-bottom:10px}.topics .content{height:100%;position:absolute;top:0;bottom:0;right:0;left:-17px;width:calc(100%);white-space:nowrap;overflow:scroll;overflow-y:hidden;margin:15px 0px 25px 0px;padding:0px 15px;border-right:0px;border-left:0px}}.topics .content .topics-link{line-height:100%;text-decoration:none;border-radius:5px;display:inline-block;margin-left:10px;padding:3px 10px 4px 10px;font-size:12px;background:#f4f4fa;transition:0.3s;color:#808393}.topics .content .topics-link:hover{background:#eeeeee}@media only screen and (min-width: 900px){.topics .content .topics-link{font-size:15px}}.article{padding:0px 0px;max-width:600px;box-sizing:border-box;line-height:160%;margin:0 auto}@media only screen and (max-width: 899px){.article{margin-top:10px}}@media only screen and (min-width: 900px){body.ad-layout-right .article{position:relative;left:-154px}}.article .after-content{margin-bottom:30px}.article .after-content .t-recommendations-area{min-height:150px;position:relative;direction:rtl;text-align:right}@media only screen and (min-width: 900px){.article .after-content .t-recommendations-area{margin-top:16px}}@media only screen and (max-width: 899px){.article .after-content .t-recommendations-area{margin-top:16px}}.article .after-content .t-recommendations-area .title{font-size:17px;font-weight:bold;width:150px;position:absolute;top:0px;right:0px;padding-right:7px}@media only screen and (min-width: 900px){.article .after-content .t-recommendations-area .title{padding-right:2px}}@media only screen and (max-width: 339px){.article .after-content .t-recommendations-area .title{font-size:14px}}@media only screen and (max-width: 899px){.article .after-content .t-recommendations-area .content{padding:0px 8px}}.article .after-content .t-recommendations-area span.video-label.video-title,.article .after-content .t-recommendations-area .thumbnails-a .syndicatedItem .branding{text-align:right;direction:rtl}.article .after-content .t-recommendations-area .trc_rbox_header{margin-bottom:5px}.article .after-content .t-recommendations-area .trc_rbox_header_span{opacity:0}.article .after-content .t-recommendations-area .videoCube_aspect{padding-bottom:65% !important}.article .after-content .t-recommendations-area .syndicatedItem{background:#fff !important;border-bottom:1px solid #ddd}.article .after-content .t-recommendations-area .syndicatedItem .video-label-box{padding:2px 12px 4px 12px !important}.header-pirs{width:1000px;margin:0 auto;text-align:right;padding-right:12px;padding-top:2px;box-sizing:border-box;padding-bottom:14px}@media only screen and (max-width: 899px){.header-pirs{display:none}}.under-header-pirs{text-align:center}@media only screen and (min-width: 900px){.under-header-pirs{margin:16px 0px}}@media only screen and (max-width: 899px){.under-header-pirs{margin:10px 0px}}.paragraph{background:#fff;border-bottom:1px solid #ddd}.paragraph.pirs{line-height:0px;text-align:center}@media only screen and (min-width: 900px){.paragraph.pirs{background:transparent;box-shadow:none;border:0px}}@media only screen and (max-width: 899px){.paragraph.pirs{background:none;box-shadow:none;border:0px}body.desktop-view .paragraph.pirs{display:none}}@media only screen and (min-width: 900px){.paragraph{margin-bottom:16px}}@media only screen and (max-width: 899px){.paragraph{margin-bottom:10px}}.paragraph .textWrapper{padding:15px 20px}.paragraph .text{overflow:hidden;line-height:160%;font-size:18px;box-sizing:border-box}.paragraph .text a{color:#048cd0}.paragraph .text a:hover{color:#007ab7;text-decoration:underline}.paragraph .text a.taglink{color:#fff;padding:2px 5px;text-decoration:none;background:#aaa;border-radius:10px;margin:0px 1px}.paragraph .text a.taglink:hover{background:#555}@media only screen and (max-width: 899px){.paragraph .text{font-size:17px}}@media only screen and (min-width: 900px){.paragraph .text{font-size:17px}}.paragraph .n{padding:8px 10px;border-top:1px solid #f1f1f1;height:34px}.paragraph .n .item-profile .img{width:34px;height:34px;position:relative;margin-left:12px;overflow:hidden;border-radius:55px}.paragraph .n .item-profile .img img{width:100%;position:absolute;top:0px;border-radius:55px;right:0px}.paragraph .n .item-profile .img .avatar-img{width:34px;height:34px;display:block;background-size:cover;position:absolute;z-index:1}.paragraph .n .item-profile .img .text-icon{width:34px;height:34px;border-radius:55px;color:#fff;font-size:17x;text-align:center;padding-left:1px;opacity:1;position:absolute}.paragraph .n .item-profile .img .text-icon .letter{position:absolute;bottom:17px;line-height:0px;left:1px;width:100%}.paragraph .n .item-profile .img.no-photo img{display:none}.paragraph .n .item-profile .img.no-photo .text-icon{display:block}.paragraph .n .item-profile .img{float:right}.paragraph .n .item-profile .name-area{float:right;line-height:20px;margin-left:10px}.paragraph .n .item-profile .name-area .usertitle{background:#777;border-radius:10px;color:#fff;font-size:11px;font-weight:normal;margin-right:10px;padding:1px 7px 3px 7px}.paragraph .n .item-profile .name-area .usertitle .expert{background:#555}.paragraph .n .item-profile .anonymous-nickname{font-weight:normal}.paragraph .n .item-profile .name{font-weight:bold;font-size:12px;position:relative;top:6px;color:#999;width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.paragraph .n .item-profile .name a{color:#999;text-decoration:none}.paragraph .n .item-profile .name a:hover{text-decoration:underline}.paragraph .n .item-profile .time{font-size:12px;color:#555555}.paragraph .n .item-profile.anonymous .img{display:none}.paragraph .n .item-profile.anonymous .name-area{padding-right:5px}.paragraph .n .img{opacity:0.8}.answer-button-area{margin:14px 0px}.left-ad{float:left;height:600px;width:300px;margin-bottom:-600px;position:relative;left:-320px}@media only screen and (max-width: 899px){.left-ad{display:none}}@media only screen and (min-width: 900px) and (max-width: 1264px){.left-ad{display:none}}.right-ad{height:600px;width:300px;margin-bottom:-600px;position:relative;right:-324px}@media only screen and (max-width: 899px){.right-ad{display:none}}.footer{text-align:center}.answer-links{margin-top:6px}.answer-links .title{color:#888;font-size:14px}.answer-links ul{margin-bottom:6px;margin-right:26px;margin-top:0px;padding-right:0px}.answer-links a{text-decoration:underline}.stips-enter{display:inline-block;padding:10px 20px 12px 20px;text-decoration:none;background:#ec1568;color:#fff;border-radius:10px;font-weight:bold;font-size:20px}a{-webkit-tap-highlight-color:rgba(255,255,255,0) !important}.z-depth-1{box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12),0 3px 1px -2px rgba(0,0,0,0.2)}.z-depth-2{box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{box-shadow:0 6px 10px 0 rgba(0,0,0,0.14),0 1px 18px 0 rgba(0,0,0,0.12),0 3px 5px -1px rgba(0,0,0,0.3)}.z-depth-4{box-shadow:0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.3)}.z-depth-5{box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -5px rgba(0,0,0,0.3)}.hide{opacity:0 !important}.hide.fast-hide{transition:opacity 0.7s}.hide.slow-hide{transition:opacity 1.2s}.hide.now-hide{transition:opacity 0s}.font-size-1{font-size:12px !important}.font-size-2{font-size:14px !important}.font-size-3{font-size:16px !important}.font-size-4{font-size:18px !important}.font-size-5{font-size:20px !important}.font-size-6{font-size:22px !important}.font-size-7{font-size:22px !important}.font-size-8{font-size:24px !important}.font-size-9{font-size:26px !important}.font-size-10{font-size:28px !important}.font-size-11{font-size:30px !important}.font-size-12{font-size:32px !important}.font-size-13{font-size:34px !important}.font-size-14{font-size:36px !important}.font-size-15{font-size:38px !important}.font-size-16{font-size:40px !important}.font-size-17{font-size:42px !important}.font-size-18{font-size:44px !important}.item-recommendations-area{margin-bottom:6px 0px}.item-recommendations-area .item-recommendations-area-title{font-weight:bold;font-size:16px;margin-bottom:7px;padding-right:7px}@media only screen and (min-width: 900px){.item-recommendations-area .item-recommendations-area-title{padding-right:2px}}@media only screen and (min-width: 900px){.item-recommendations-area .item-recommendations-area-title{margin-top:16px}}@media only screen and (max-width: 899px){.item-recommendations-area .item-recommendations-area-title{margin-top:10px}}.left-ad .item-recommendations-area{margin:0px 0px;margin-bottom:20px;padding:0px;background:#ff3488;color:#fff;border-radius:4px}.left-ad .item-recommendations-area .item-recommendations-area-title{padding:10px 10px;margin:0px}.left-ad .item-recommendations-area .loading-msg{background:none;padding:10px 0px}.item-recommendations-area .answer-item{margin-bottom:22px;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,0.2);border-radius:2px}@media only screen and (max-width: 899px){.item-recommendations-area .answer-item{margin-right:10px;margin-bottom:18px;margin-left:10px}}.item-recommendations-area .answer-item:nth-child(4n+0) .answer-title{background:#02ADE2}.item-recommendations-area .answer-item:nth-child(4n+1) .answer-title{background:#0D47A1}.item-recommendations-area .answer-item:nth-child(4n+2) .answer-title{background:#ff497a}.item-recommendations-area .answer-item:nth-child(4n+3) .answer-title{background:#FF5722}.item-recommendations-area .answer-item:nth-child(5n+3) .answer-title{background:#26A69A}.item-recommendations-area .answer-item .answer-title{background:#0D47A1 !important}.item-recommendations-area .answer-item .answer-title{display:block;text-decoration:none;position:relative}.item-recommendations-area .answer-item .answer-title .img{bottom:-42px;left:0px;text-align:center;width:100%;position:absolute}.item-recommendations-area .answer-item .answer-title .img img{border:3px solid #fff;border-radius:100px}.item-recommendations-area .answer-item .answer-title .text{font-weight:bold;font-size:17px;padding:15px 20px;display:block;color:#fff;float:right;border-bottom:1px solid #f1f1f1;width:100%;float:none;BOX-SIZING:BORDER-BOX;padding-bottom:54px;margin-bottom:29px;color:#fff}.item-recommendations-area .answer-item .item-content{padding:12px;font-size:17px;overflow:hidden}.item-recommendations-area .item{background:#fff;transition:background 0.1s, transform 1.1s}@media only screen and (min-width: 900px){.item-recommendations-area .item{display:inline-block;width:100%;border-bottom:1px solid #ecebeb;margin-bottom:14px}.item-recommendations-area .item:last-child{border:0px}.item-recommendations-area .item:hover{background:#429eff;transform:scale(1.03, 1.03)}.item-recommendations-area .item:hover a.title{color:#fff !important}}@media only screen and (max-width: 899px){.item-recommendations-area .item.pirs-recommendation{line-height:0px;background:transparent;margin-bottom:18px;box-shadow:none}}@media only screen and (min-width: 900px){.item-recommendations-area .item.pirs-recommendation{padding:0px;font-size:20px;line-height:140%;color:#4a4a4a;box-sizing:border-box;direction:rtl;background:transparent;border:0px}.item-recommendations-area .item.pirs-recommendation:hover{transform:scale(1, 1)}}@media only screen and (max-width: 899px){.item-recommendations-area .item{margin-bottom:10px}}.item-recommendations-area .item.selected a.title{background:#429eff;cursor:default;color:rgba(255,255,255,0.84) !important}.item-recommendations-area .item a.img{display:block;background-size:cover}@media only screen and (max-width: 899px){.item-recommendations-area .item a.img{min-height:180px}}@media only screen and (min-width: 900px){.item-recommendations-area .item a.img{min-height:140px}}.item-recommendations-area .item a.title{display:block;transition:0.1s;font-size:16px;line-height:120%;color:#000;text-decoration:none}@media only screen and (max-width: 899px){.item-recommendations-area .item a.title{box-shadow:0 1px 2px rgba(0,0,0,0.2);border-radius:2px;background:#fff;padding:11px 16px}}@media only screen and (min-width: 900px){.item-recommendations-area .item a.title{padding:32px;font-size:20px;line-height:140%;color:#4a4a4a}}.item-recommendations-area .loading-msg{text-align:center;font-size:16px;background:#696969;color:#fff;border-radius:10px;padding:2px 8px 3px 8px;margin:18px auto;width:230px}.loginArea{background:#aaa;border-radius:6px;padding:20px;margin-bottom:50px}.loginArea a{color:#3da7ef;text-decoration:none}.topMobilePanel form{width:100%;display:block;direction:rtl;box-sizing:border-box}.search_top_text input{direction:rtl !important}.topMobilePanel form .field{font-size:18px;line-height:26px;color:#9ea6a7;width:100px;direction:ltr;height:35px;padding:0px 7px 0px 35px;border:0;width:99%;border:1px solid #eee;border-radius:5px;box-sizing:border-box;text-align:right}a.mobileButton{transition:all 0.1s;-webkit-transition:all 0.1s;padding:3px 20px 5px 20px;border-radius:10px;font-size:19px;color:#FFF;text-decoration:none !important;background-image:none}.mobileButton.green{background-color:#04d09d}.topMobilePanelDesktop .title{font-size:23px !important;color:#fff !important;position:static;top:-54px;padding:0px !important;width:100%;right:-10px;position:st;direction:rtl}.topMobilePanelDesktop .title img{position:relative;top:1px;right:0;height:15px}.topMobilePanelDesktop .registerMsg{position:relative;top:60px;right:-20px;color:#fff;padding:0px 0px;margin-top:-20px;color:#000;width:300px}.topMobilePanelDesktop .buttonLine{padding:0px;border:0px}.stipsInfoBox{background:#FFFBE1;margin:10px 0px;border-radius:6px;box-shadow:1px 1px 0px 0px #d2d2d2;color:#585151;padding:5px;padding:10px}.center{text-align:center}#mobileLoginPanel{display:none}.mobileLoginErrMsg{display:none}\n/*# sourceMappingURL=fastpage.css.map */\n\n\t</style>\n\t\n\t<script>\n\t\t$=function(t,e,n,i,o,r,s,u,c,f,l,h){return h=function(t,e){return new h.i(t,e)},h.i=function(i,o){n.push.apply(this,i?i.nodeType||i==t?[i]:\"\"+i===i?/</.test(i)?((u=e.createElement(o||\"q\")).innerHTML=i,u.children):(o&&h(o)[0]||e).querySelectorAll(i):/f/.test(typeof i)?/c/.test(e.readyState)?i():h(e).on(\"DOMContentLoaded\",i):i:n)},h.i[l=\"prototype\"]=(h.extend=function(t){for(f=arguments,u=1;u<f.length;u++)if(l=f[u])for(c in l)t[c]=l[c];return t})(h.fn=h[l]=n,{on:function(t,e){return t=t.split(i),this.map(function(n){(i[u=t[0]+(n.b$=n.b$||++o)]=i[u]||[]).push([e,t[1]]),n[\"add\"+r](t[0],e)}),this},off:function(t,e){return t=t.split(i),l=\"remove\"+r,this.map(function(n){if(f=i[t[0]+n.b$],u=f&&f.length)for(;c=f[--u];)e&&e!=c[0]||t[1]&&t[1]!=c[1]||(n[l](t[0],c[0]),f.splice(u,1));else!t[1]&&n[l](t[0],e)}),this},is:function(t){return u=this[0],(u.matches||u[\"webkit\"+s]||u[\"moz\"+s]||u[\"ms\"+s]).call(u,t)}}),h}(window,document,[],/\\.(.+)/,0,\"EventListener\",\"MatchesSelector\");\n\t\t$.fn.hasClass = function( className ) {\n\t\t\treturn !!this[ 0 ] && this[ 0 ].classList.contains( className );\n\t\t};\n\t\t$.fn.addClass = function( className ) {\n\t\t\tthis.forEach( function( item ) {\n\t\t\t\tvar classList = item.classList;\n\t\t\t\tclassList.add.apply( classList, className.split( /\\s/ ) );\n\t\t\t});\n\t\t\treturn this;\n\t\t};\n\t\t$.fn.removeClass = function( className ) {\n\t\t\tthis.forEach( function( item ) {\n\t\t\t\tvar classList = item.classList;\n\t\t\t\tclassList.remove.apply( classList, className.split( /\\s/ ) );\n\t\t\t});\n\t\t\treturn this;\n\t\t};\n\t\tfunction isNumber(n) {\n\t\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t\t}\n\t\tfunction r_e(c,a,l,v) {\n\t\tif (!isNumber(v)) v=null;\n\t\tga('send', 'event', c, a, l, {'nonInteraction': true});\n\t\t}\n\t\t\n\t\tvar trackClick = function(element,c,a,l) {\n\t\t   ga('send', 'event', c, a, l, {\n\t\t\t 'transport': 'beacon',\n\t\t\t 'hitCallback': function(){document.location = element.href;}\n\t\t   });\n\t\t   return false;\n\t\t}\n\n\t\tvar ajax = {};\n\t\tajax.x = function () {\n\t\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\t\treturn new XMLHttpRequest();\n\t\t\t}\n\t\t\tvar versions = [\n\t\t\t\t\"MSXML2.XmlHttp.6.0\",\n\t\t\t\t\"MSXML2.XmlHttp.5.0\",\n\t\t\t\t\"MSXML2.XmlHttp.4.0\",\n\t\t\t\t\"MSXML2.XmlHttp.3.0\",\n\t\t\t\t\"MSXML2.XmlHttp.2.0\",\n\t\t\t\t\"Microsoft.XmlHttp\"\n\t\t\t];\n\n\t\t\tvar xhr;\n\t\t\tfor (var i = 0; i < versions.length; i++) {\n\t\t\t\ttry {\n\t\t\t\t\txhr = new ActiveXObject(versions[i]);\n\t\t\t\t\tbreak;\n\t\t\t\t} catch (e) {\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn xhr;\n\t\t};\n\n\t\tajax.send = function (url, callback, method, data, async) {\n\t\t\tif (async === undefined) {\n\t\t\t\tasync = true;\n\t\t\t}\n\t\t\tvar x = ajax.x();\n\t\t\tx.open(method, url, async);\n\t\t\tx.onreadystatechange = function () {\n\t\t\t\tif (x.readyState == 4) {\n\t\t\t\t\tcallback(x.responseText)\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (method == 'POST') {\n\t\t\t\tx.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\t\t\t}\n\t\t\tx.send(data)\n\t\t};\n\n\t\tajax.get = function (url, data, callback, async) {\n\t\t\tvar query = [];\n\t\t\tfor (var key in data) {\n\t\t\t\tquery.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n\t\t\t}\n\t\t\tajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)\n\t\t};\n\t\t\n\t\t\n\t\tfunction showCreativeCommonsLink(){\n\t\t\t $(\"#creative_commons_link\")[0].style.display=\"block\";\n\t\t\t $(\"#creative_commons_link\")[0].style.opacity=1;\n\t\t}\n\t</script>\n\t\n\t<script type=\"text/javascript\">\n\t  window._taboola = window._taboola || [];\n\t  _taboola.push({article:'auto'});\n\t  !function (e, f, u) {\n\t\te.async = 1;\n\t\te.src = u;\n\t\tf.parentNode.insertBefore(e, f);\n\t  }(document.createElement('script'),\n\t  document.getElementsByTagName('script')[0],\n\t  'https://cdn.taboola.com/libtrc/stips/loader.js');\n\t</script>\n\t\n</head>\n\n<body class=\"desktop-view\">\n\n<script>\nvar g_getRelatedItemsSentFlg;\nfunction getRelatedItems(getRelatedItems){\n\tif ($(\"#item-recommendations-area\")[0].innerHTML.length>0){\n\t\tg_getRelatedItemsSentFlg=true;\n\t}\n\tif (g_getRelatedItemsSentFlg) return;\n\t$(\"#item-recommendations-area\")[0].innerHTML='<div class=\"loading-msg\">טוען תשובות נוספות, נא להמתין...</div>';\n\tsetTimeout(function(){\n\tajax.get('/scripts/print_text_related_asks.asp', {itemid: '5163110',current_itemid:'5163110',stopads: ''}, function(data) {\n\t$(\"#item-recommendations-area\")[0].innerHTML=data;\n\t\n\tfor (var i=0;i<3;i++)\n\t{\n\t\tif ($(\".pirs-not-pushed\").length>0) {\n\t\t\t$(\".pirs-not-pushed\").removeClass(\"pirs-not-pushed\");\n\t\t\tconsole.log('push pirs');\n\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t}\n\t}\n\t\n\t});\n\t},getRelatedItems);\n\tg_getRelatedItemsSentFlg=true;\n}\nsetTimeout(function(){\najax.get('/scripts/pagehit.asp', {itemid: '5163110',pagename: 'fast_ask',ref:''}, function() {});\n},200);\n</script>\n<div class=\"nav-bar-wrapper\">\n\t<div class=\"nav-bar\">\n\t\t<a href=\"/\"onclick=\"return trackClick(this,'fastask','click','logo')\" class=\"nav-bar-logo\">\n\t\t\t<img src=\"https://stipscdn-stips.netdna-ssl.com/images/mobile_logo_white_fast.png\"/>\n\t\t</a>\n\t</div>\n</div>\n\n\n<div class=\"item-image\" id=\"item-image\" itemprop=\"image\" itemscope itemtype=\"http://schema.org/ImageObject\">\n\t<div  class=\"item-image-content\" onclick=\"showCreativeCommonsLink()\" id=\"item-image-content\" style=\"background-image: url('https://stipscdn-stips.netdna-ssl.com/photos/w400/373405491.jpg');\">\n\t\t<img src=\"https://stipscdn-stips.netdna-ssl.com/photos/w400/373405491.jpg\" itemprop=\"url\">\n\t\t<a id=\"creative_commons_link\" href=\"javscript:void(0)\" onclick=\"window.open('/scripts/photorights.asp?photosurl=https://stipscdn-stips.netdna-ssl.com/photos/w400/373405491.jpg')\">\n\t\tהתמונה ברשיון Creative Commons\n\t\t</a>\n\t </div>\n</div>\n\n<div class=\"page-header\" id=\"page-header\">\n\t<div class=\"item-title font-size-18\" id=\"item-title\">\n\t\t<h1 itemprop=\"headline\">איך ההרגשה זה להיות טבעוני?</h1>\n\t\t\n\t\t<div class=\"info\">\n\t\t\t<div class=\"publish-date\">12 באפריל 2017, 18:30</div>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"topics\">\n\t\t<div class=\"content\">\n\t\t\t<a onclick=\"return trackClick(this,'fastask','tag-click','טבעוניים')\" itemprop=\"articleSection\" href=\"/asklist.asp?thekey=%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%99%D7%9D\" class=\"topics-link\">טבעוניים</a><a onclick=\"return trackClick(this,'fastask','tag-click','טבעונות')\" itemprop=\"articleSection\" href=\"/asklist.asp?thekey=%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%95%D7%AA\" class=\"topics-link\">טבעונות</a><a onclick=\"return trackClick(this,'fastask','tag-click','רגשות')\" itemprop=\"articleSection\" href=\"/asklist.asp?thekey=%D7%A8%D7%92%D7%A9%D7%95%D7%AA\" class=\"topics-link\">רגשות</a>\n\t\t\t&nbsp;&nbsp;&nbsp;\n\t\t</div>\n\t</div>\n\t\n\t\t<div class=\"header-pirs\">\n\t\t\n\t<script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n\t\n\t\t\t\t<!--\t\t//stips area name:fast_ask_leaderboard_top\n\t\t\t\t//Corrent     - ad slot name:2017-fast-ask-leaderboard-top-970X90 - width:970 height: id:7427761219-->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t\t style=\"direction:rtl;display:inline-block;min-width:970px;min-height:90px\"\n\t\t\t\t\t data-ad-client=\"ca-pub-0041699860812866\"\n\t\t\t\t\t data-ad-slot=\"7427761219\"></ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t</script>\n\t\t\t\n\t\t</div>\n\t\n</div>\n<div class=\"page-content\">\n\t\n\t<div class=\"article\" itemprop=\"articleBody\">\n\t\n\t\t\t\t<div class=\"answers-title\">\n\t\t\t\t5 תשובות\n\t\t\t\t</div>\n\t\t\t\t\n\t\t\t\t\t<div class=\"paragraph\">\n\t\t\t\t\t\t<div class=\"textWrapper\">\n\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\tבגדול זה ממש הרגשה נפלאה, גם בערכים בגוף הכל מתאזן, הכוונה לחץ דם, כולסטרול, סוכר, היציאות, ויש אומרים אפילו מונע מחלות מסוימות.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"n\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"item-profile\">\n\t\t\t\t\t\t\t\t\t<div class=\"img\"><a href=\"/profile.asp?id=139445\"><div class=\"avatar-img\" style=\"background-image:url(https://stipscdn-stips.netdna-ssl.com/content/usersimgs/real/139445_4994227566848_t.jpg)\"></div><div class=\"text-icon bg-blue\"><div class=\"letter\">ר</div></div></a></div>\n\t\t\t\t\t\t\t\t\t<div class=\"name-area\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"name\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"profile_link\" href=\"/profile.asp?id=139445\">ראשית חכמה</a>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\t\n\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t<div class=\"paragraph pirs\">\n\t\t\t\t<!--\t\t//stips area name:fast_ask_top\n\t\t\t\t//Corrent     - ad slot name:2017-fast-ask-top-desktop - width:600 height: id:5556126012-->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t\t style=\"direction:rtl;display:inline-block;min-width:600px;min-height:280px\"\n\t\t\t\t\t data-ad-client=\"ca-pub-0041699860812866\"\n\t\t\t\t\t data-ad-slot=\"5556126012\"></ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t</script>\n\t\t\t</div>\n\t\t\t\t\t<div class=\"paragraph\">\n\t\t\t\t\t\t<div class=\"textWrapper\">\n\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\tלא זוכר איך זה לא להיות טבעוני אני רק יודע שכיום אני בחיים לא עייף ומפוצץ תמיד באנרגיה\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"n\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"item-profile\">\n\t\t\t\t\t\t\t\t\t<div class=\"img\"><a href=\"/profile.asp?id=110198\"><div class=\"avatar-img\" style=\"background-image:url(https://stipscdn-stips.netdna-ssl.com/content/usersimgs/real/110198_46116346545849_t.jpg)\"></div><div class=\"text-icon bg-teal\"><div class=\"letter\">m</div></div></a></div>\n\t\t\t\t\t\t\t\t\t<div class=\"name-area\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"name\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"profile_link\" href=\"/profile.asp?id=110198\">mak</a>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\t\n\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\n\t\t\t\t\t<div class=\"paragraph\">\n\t\t\t\t\t\t<div class=\"textWrapper\">\n\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\tMak, אהבתי את הכנות. <br/><br/>די להתייפיפות. (\"כן, זו הרגשה נפלאה ונהדרת, להיות כל כך מוסרי וצדיק וטהור\").\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"n\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"item-profile\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"name-area\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"name\">\n\t\t\t\t\t\t\t\t\t\t\tאנונימי\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\t\n\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t<div class=\"paragraph pirs\"></div>\n\t\t\t\t\t<div class=\"paragraph\">\n\t\t\t\t\t\t<div class=\"textWrapper\">\n\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\tאבל היום אני טבעוני ומפוצץ באנרגיה (הרבה הרבה יותר מבעבר)\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"n\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"item-profile\">\n\t\t\t\t\t\t\t\t\t<div class=\"img\"><a href=\"/profile.asp?id=110198\"><div class=\"avatar-img\" style=\"background-image:url(https://stipscdn-stips.netdna-ssl.com/content/usersimgs/real/110198_46116346545849_t.jpg)\"></div><div class=\"text-icon bg-teal\"><div class=\"letter\">m</div></div></a></div>\n\t\t\t\t\t\t\t\t\t<div class=\"name-area\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"name\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"profile_link\" href=\"/profile.asp?id=110198\">mak</a>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\t\n\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\n\t\t\t\t\t<div class=\"paragraph\">\n\t\t\t\t\t\t<div class=\"textWrapper\">\n\t\t\t\t\t\t\t<div class=\"text\">\n\t\t\t\t\t\t\tאין לי מושג כי אני בחיים לא אהיה טבעוני ותמיד אדבר רע <br/>על טבעונות/צימחונות לכל מי שיש לי השפעה עליו.<br/>אני רק יכול לומר לך שכשעובר יום ולא אכלתי בשר<br/>אז אני מרגיש ריק ולא רגוע.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"n\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"item-profile\">\n\t\t\t\t\t\t\t\t\t<div class=\"img\"><a href=\"/profile.asp?id=221475\"><div class=\"avatar-img\" style=\"background-image:url(https://stipscdn-stips.netdna-ssl.com/content/usersimgs/real/221475_4676285550850_t.jpg)\"></div><div class=\"text-icon bg-teal\"><div class=\"letter\">a</div></div></a></div>\n\t\t\t\t\t\t\t\t\t<div class=\"name-area\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"name\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"profile_link\" href=\"/profile.asp?id=221475\">alevusy</a>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\t\n\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t<div class=\"paragraph pirs\">\n\t\t\t\t<!--\t\t//stips area name:fast_ask_bottom\n\t\t\t\t//Corrent     - ad slot name:2017-fast-ask-bottom-desktop - width:600 height: id:7671987618-->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t\t style=\"direction:rtl;display:inline-block;min-width:600px;min-height:280px\"\n\t\t\t\t\t data-ad-client=\"ca-pub-0041699860812866\"\n\t\t\t\t\t data-ad-slot=\"7671987618\"></ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t</script>\n\t\t\t</div>\n\t\t<div class=\"answer-button-area\">\n\t\t\t\t<div class=\"center\">\n\t\t\t\t<a class=\"mobileButton green\" href=\"javascript:void(0)\"\n\t\t\t\tonclick=\"r_e('fastask','add-answer-click','5163110');$('#mobileLoginPanel')[0].style.display='block';this.style.display='none'\">הוספת תשובה</a>\n\t\t\t\t</div>\n\t\t\t\t\t<div class=\"topMobilePanel topMobilePanelDesktop\" id=\"mobileLoginPanel\">\n\t\t\t\t\t\t<div class=\"loginArea\">\n\t\t\t\t\t\t\t<div class=\"title\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tהתחברות ל<img src=\"/images/mobile_logo_white.png\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<form id=\"mobilePanelForm\" action=\"/\" method=\"post\" onsubmit=\"sendLoginForm();return false\">\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<input id=\"login_email\" type=\"email\" pattern=\"[^ @]*@[^ @]*\" value=\"\" placeholder=\"כתובת אימייל\" name=\"email\" class=\"field\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<input id=\"login_password\" type=\"password\" class=\"field\" value=\"\" placeholder=\"סיסמה\" name=\"password\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<input id=\"login_itemid\" type=\"hidden\" class=\"field\" value=\"5163110\">\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"stipsInfoBox mobileLoginErrMsg\">\n\t\t\t\t\t\t\t<span style=\"position:relative;\">\n\t\t\t\t\t\t\tההזדהות נכשלה, נסה שנית! \n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\tאם שכחת את הסיסמה שלך <a href=\"/usershome.asp?action=passwordforgot\">לחץ כאן</a>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"center buttonLine\">\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<a href=\"javascript:void(0)\" onclick=\"sendLoginForm()\" class=\"mobileButton green loginButton\">כניסה</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<input type=\"submit\" style=\"display:none;\">\n\t\t\t\t\t\t\t<div class=\"registerMsg\">\n\t\t\t\t\t\t\t עדיין לא הצטרפת לסטיפס? &nbsp;<a onclick=\"r_e('fastask','register-add-answer-click','5163110')\" href=\"/usersregister.asp\" class=\"mobileButton green small\">הרשמה</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\n\t\t\t\t<div class=\"after-content\">\t\n\t\t\t\t\t\n\t\t\t\t\t\t<div class=\"item-recommendations-area\" id=\"item-recommendations-area\"><div class=\"item-recommendations-area-title\">באותו הנושא:</div>\n\n<div class=\"content\"><div class=\"item  pos_0\">\t\t\t<a class=\"title\" href=\"/ask/4787214/%D7%96%D7%94-%D7%91%D7%A1%D7%93%D7%A8-%D7%A9%D7%94%D7%97%D7%9C%D7%98%D7%AA%D7%99-%D7%9C%D7%94%D7%99%D7%95%D7%AA-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">זה בסדר שהחלטתי להיות טבעוני בגךל שאריאנה גרנדה טבעונית או שזה דבילי?</a></div>\n<div class=\"item  pos_1\">\t\t\t<a class=\"title\" href=\"/ask/3699023/%D7%90%D7%AA%D7%9D-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%99%D7%9D-%D7%A4%D7%A2%D7%9D-%D7%A0%D7%99%D7%A1%D7%99%D7%AA%D7%9D-%D7%9C%D7%94%D7%99%D7%95%D7%AA\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">אתם טבעוניים? פעם ניסיתם להיות טבעוניים?</a></div>\n<div class=\"item  pos_2\">\t\t\t<a class=\"title\" href=\"/ask/1951627/%D7%A6%D7%9E%D7%97%D7%95%D7%A0%D7%99%D7%99%D7%9D-%D7%95%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%9D-%D7%9C%D7%9E%D7%94-%D7%94%D7%A4%D7%9B%D7%AA%D7%9D\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">צמחוניים וטבעונים - למה הפכתם להיות צממחוניים או טבעוניים? (בבקשה בלי ריבים זה פשוט מעניין אותי הנושא הזה (אני לא צמחונית ולא טבעונית))</a></div>\n<div class=\"item  pos_3\">\t\t\t<a class=\"title\" href=\"/ask/3766174/%D7%94%D7%94%D7%95%D7%A8%D7%99%D7%9D-%D7%A9%D7%9C%D7%99-%D7%9C%D7%90-%D7%9E%D7%A1%D7%9B%D7%99%D7%9E%D7%99%D7%9D-%D7%9C%D7%99-%D7%9C%D7%94%D7%99%D7%95%D7%AA\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">ההורים שלי לא מסכימים לי להיות צמחונית / טבעונית, זה הגיוני שאני מחכה להיות בת 18 בשביל להיות טבעונית?..</a></div>\n<div class=\"item  pos_4\">\t\t\t<a class=\"title\" href=\"/ask/4317392/%D7%9E%D7%94-%D7%90%D7%AA%D7%9D-%D7%97%D7%95%D7%A9%D7%91%D7%99%D7%9D-%D7%A2%D7%9C-%D7%A6%D7%9E%D7%97%D7%95%D7%A0%D7%99%D7%9D\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">מה אתם חושבים על צמחונים וטבעונים שמשכנעים את אוכלי בשר להפוך להיות צמחוני או טבעוני?</a></div>\n<div class=\"item  pos_5\">\t\t\t<a class=\"title\" href=\"/ask/3122395/%D7%A9%D7%90%D7%9C%D7%94-%D7%9C%D7%A6%D7%9E%D7%97%D7%95%D7%A0%D7%99%D7%9D-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%9D-%D7%9C%D7%9E%D7%94\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">שאלה לצמחונים\\טבעונים: למה בחרתם להיות צמחונים\\טבעונים?</a></div>\n<div class=\"item  pos_6\">\t\t\t<a class=\"title\" href=\"/ask/3823917/%D7%AA%D7%9E%D7%99%D7%93-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%9D-%D7%90%D7%95%D7%9E%D7%A8%D7%99%D7%9D-%D7%A9%D7%9C%D7%94%D7%99%D7%95%D7%AA\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">תמיד טבעונים אומרים שלהיות טבעוני זה הכי בריא וכל זה, אבל אם זה כל כך בריא להיות טבעוני למה רוב הטבעונים צריכים לקחת מלא תוספי תזונה?</a></div>\n<div class=\"item  pos_7\">\t\t\t<a class=\"title\" href=\"/ask/4317542/%D7%A8%D7%A7-%D7%9C%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%9D-%D7%9C%D7%9E%D7%94-%D7%90%D7%AA%D7%9D-%D7%94%D7%AA%D7%97%D7%9C%D7%AA%D7%9D\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">רק לטבעונים- למה אתם התחלתם להיות טבעונים?</a></div>\n<div class=\"item  pos_8\">\t\t\t<a class=\"title\" href=\"/ask/4269193/%D7%92%D7%9D-%D7%90%D7%AA%D7%9D-%D7%97%D7%95%D7%A9%D7%91%D7%99%D7%9D-%D7%A9%D7%9B%D7%9C\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">גם אתם חושבים שכל הטבעוניים/צמחוניים של האתר לא צריכים לשכנע אותנו להיות טבעוניים/צימחוניים?</a></div>\n<div class=\"item  pos_9\">\t\t\t<a class=\"title\" href=\"/ask/3250538/%D7%90%D7%A0%D7%99-%D7%99%D7%AA%D7%97%D7%9C%D7%AA%D7%99-%D7%9C%D7%94%D7%99%D7%95%D7%AA-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99-%D7%95%D7%90%D7%A0%D7%99\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">אני יתחלתי להיות טבעוני ואני חייב עזרה יש פה מישהו טבעוני עם ניסיון?</a></div>\n<div class=\"item  pos_10\">\t\t\t<a class=\"title\" href=\"/ask/4508115/%D7%90%D7%99%D7%9A-%D7%9C%D7%94%D7%99%D7%95%D7%AA-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99%D7%AA-%D7%A8%D7%96%D7%94-%D7%98%D7%99%D7%A4%D7%99%D7%9D\"onclick=\"return trackClick(this,'fastask-recommended-click-pos','text','mobile_mod:False');\">איך להיות טבעונית רזה? טיפים. וכן גם טבעונים יכולים להשמין גם באוכל טבעוני יש ג'אנק פוד</a></div>\n</div></div>\n\t\t\t\t\t\t<div class=\"t-recommendations-area\">\n\t\t\t\t\t\t\t\t<div class=\"title\">אולי תאהב גם את:</div>\n\t\t\t\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t\t\t\n\t<div id=\"taboola-below-article-thumbnails\"></div>\n\t<script type=\"text/javascript\">\n\t  window._taboola = window._taboola || [];\n\t  _taboola.push({\n\t\tmode: 'thumbnails-a',\n\t\tcontainer: 'taboola-below-article-thumbnails',\n\t\tplacement: 'Below Article Thumbnails',\n\t\ttarget_type: 'mix'\n\t  });\n\t</script>\n\t\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t</div>\n\t\t\n\t\t\n\t</div>\n\t\n</div>\n\n\t<script>\nfunction PageParams(){\n\tthis.itemId=5163110\n}\nvar pageParams = new PageParams;\nfunction isMobile(){\n\tvar mobileMaxWidth=600;\n\treturn (window.innerWidth<mobileMaxWidth)\n}\n\nvar itemImageMarginTop=0;\nfunction alignTopHeader(){\nitemImageMarginTop=(document.getElementById(\"item-title\").clientHeight);\nfixHeaderiritions();\n}\nfunction bindWindowScrollEvent(){\nwindow.onscroll = function() {onPageScroll()};\n}\n\nvar lastScrollTop=0;\n\nfunction ScrollManager(){\n\tthis.recommendationInViewPos=1;\n\t\n\tthis.checkIfNewRecommendationInView = function (foundFlg) {\n\t\tvar elemToCheck=$(\".recommendation-item.pos_\"+this.recommendationInViewPos)[0];\n\t\tif (elemToCheck && visibleY(elemToCheck)){\n\t\t\tif (!foundFlg){\n\t\t\t\tthis.recommendationInViewPos++;\n\t\t\t\tthis.checkIfNewRecommendationInView(true)\n\t\t\t}\n\t\t} else {\n\t\t\tif (foundFlg) {\n\t\t\t\t// עושים את זה כדי למנוע טעינה כפולה של המלצות \n\t\t\t\tvar foundPositions=this.recommendationInViewPos-1;\n\t\t\t\t//console.log('new view for recommendation item:'+foundPositions);\n\t\t\t\tr_e('fastask-scroll',foundPositions,pageParams.itemId);\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar scrollManager =new ScrollManager();\nfunction onPageScroll() {\n\tscrollManager.checkIfNewRecommendationInView(false)\n}\n\nfunction onPageScrollOld() {\n\tif (isMobile()) {\n\thideMobileHeader();\n\tfixHeaderPositions();\n\t}\n\tif (document.body.scrollTop>80){\n\t\tgetRelatedItems(2);\n\t}\n}\n\nvar navBarHeight=getNavBarHeight();\nfunction fixHeaderPositions(){\n\tvar scrollTop=document.body.scrollTop;\n\tvar pageHeader=document.getElementById(\"page-header\");\n\tif (navBarHeight-scrollTop<=0){\n\t\tdocument.getElementById(\"page-header\").style.position=\"fixed\"\n\t\tdocument.getElementById(\"item-image\").style.marginTop=itemImageMarginTop +'px';\n\t} else {\n\t\tdocument.getElementById(\"page-header\").style.position=\"relative\"\n\t\tdocument.getElementById(\"item-image\").style.marginTop=0+'px';\n\t}\n}\n\nfunction hideMobileHeader(){\n\tvar scrollTop=document.body.scrollTop;\n\tvar itemImage=document.getElementById(\"item-image-content\");\n\tvar pageHeader=document.getElementById(\"page-header\");\n\tvar imageCoverMargin=16;\n\tvar hidePosition=pageHeader.clientHeight-imageCoverMargin;\n\t//console.log(\"scrollTop:\"+scrollTop);\n\t//console.log(\"hidePosition:\"+hidePosition);\n\tif (scrollTop>hidePosition){\n\t\t$(\"#page-header\").addClass(\"hide fast-hide\");\n\t} else {\n\t\t$(\"#page-header\").removeClass(\"hide fast-hide\");\n\t}\n\t\n\tvar minParallexPos=60;\n\tvar firstBackgroundPosition=0;\n\tif (scrollTop > minParallexPos){\n\t\tvar backgroundPosition=firstBackgroundPosition+(55*((scrollTop-minParallexPos)/pageHeader.clientHeight))\n\t\tif (backgroundPosition>100){\n\t\t\tbackgroundPosition=100;\n\t\t}\n\t\titemImage.style.backgroundPosition=\"0% \"+backgroundPosition+\"%\"\n\t\ttransformScale=0.95+(scrollTop/100)/10\n\t\tif (transformScale<1) transformScale=1;\n\t\titemImage.style.transform = \"scale(\"+transformScale+\",\"+transformScale+\")\"\n\t}\n}\n\nfunction getNavBarHeight(){\n\tif (isMobile()){\n\t\treturn 52;\n\t} else {\n\t\treturn 52;\n\t}\n}\n\nvar visibleY = function(el){\n  var rect = el.getBoundingClientRect(), top = rect.top, height = rect.height, \n    el = el.parentNode;\n  do {\n    rect = el.getBoundingClientRect();\n    if (top <= rect.bottom === false) return false;\n    // Check if the element is out of view due to a container scrolling\n    if ((top + height) <= rect.top) return false\n    el = el.parentNode;\n  } while (el != document.body);\n  // Check its within the document viewport\n  return top <= document.documentElement.clientHeight;\n};\n\n\nfunction runSite(){\n\tbindWindowScrollEvent();\n\tif (isMobile() && 1==2){\n\t\t\n\t\tbindWindowScrollEvent();\n\t\talignTopHeader();\n\t} else {\n\t\tgetRelatedItems(300);\n\t}\n}\n\nfunction sendLoginForm(){\n\t\n\tfastPageLogin($(\"#login_email\")[0].value,$(\"#login_password\")[0].value,\n\tfunction(isLogged){\n\t\tr_e('fastask','sendLoginForm','isLogged:'+isLogged);\n\t\tif (isLogged){\n\t\t\twindow.location='/addans.asp?stipid='+$(\"#login_itemid\")[0].value;\n\t\t} else {\n\t\t\t$(\".mobileLoginErrMsg\")[0].style.display=\"block\";\n\t\t}\n\t})\n\t\n}\n\nfunction fastPageLogin(email,password,callback) {\n  var loginAPI = \"/scripts/login.asp\";\n  \tajax.get(loginAPI,  {\n    email: email,\n    password: password,\n    remember_me: \"true\"\n  }, function( data ) {\n\t\n\t\tif (data.indexOf(\"yes\")>0) {\n\t\t\tcallback(true);\n\t\t\n\t\t} else {\n\t\t\t\n\t\t\tcallback(false);\n\t\t}\n    })}\n\t;\n\nrunSite();\n//window.scrollTo(0,navBarHeight);\nsetTimeout(function(){\n$(\"body\").addClass(\"loaded\")\n},1)\n</script>\n\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n\tga('create', 'UA-9645047-1', 'auto');\n\tga('require', 'displayfeatures');\n\tga('send', 'pageview');\n  </script>\n\n\t<script type=\"text/javascript\">\n  window._taboola = window._taboola || [];\n  _taboola.push({flush: true});\n\t</script>\n\t\n</body>"
  },
  {
    "path": "slybot/slybot/tests/data/templates/stips.co.il.json",
    "content": "{\n    \"extractors\": {},\n    \"id\": \"3fd3-4288-b3dd\",\n    \"name\": \"3fd3-4288-b3dd\",\n    \"page_id\": \"\",\n    \"page_type\": \"item\",\n    \"plugins\": {\n        \"annotations-plugin\": {\n            \"extracts\": [\n                {\n                    \"annotations\": {\n                        \"#portia-content\": \"#dummy\"\n                    },\n                    \"container_id\": null,\n                    \"id\": \"bf9e-40b6-959f\",\n                    \"item_container\": true,\n                    \"repeated\": false,\n                    \"required\": [],\n                    \"schema_id\": \"2cdc-4284-ab08\",\n                    \"selector\": \"#page-header\",\n                    \"siblings\": 0,\n                    \"tagid\": null,\n                    \"text-content\": \"#portia-content\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \"h1\"\n                    ],\n                    \"container_id\": \"bf9e-40b6-959f\",\n                    \"data\": {\n                        \"021b-4b2d-9526\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"22a1-4765-82a1\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"daca-42ad-9d73\",\n                    \"text-content\": \"content\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"required\": [],\n                    \"repeated\": false,\n                    \"selection_mode\": \"auto\",\n                    \"selector\": \"#page-header > .item-title > h1\",\n                    \"tagid\": null,\n                    \"xpath\": \"//*[@id=\\\"page-header\\\"]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" item-title \\\")]/h1\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".name > .profile_link\"\n                    ],\n                    \"container_id\": \"bf9e-40b6-959f\",\n                    \"data\": {\n                        \"dca8-4ea1-a738\": {\n                            \"attribute\": \"href\",\n                            \"extractors\": {},\n                            \"field\": \"5983-4b80-8547\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"3f30-4f33-b79c\",\n                    \"text-content\": \"content\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"required\": [],\n                    \"repeated\": true,\n                    \"selection_mode\": \"css\",\n                    \"selector\": \".profile_link\",\n                    \"tagid\": null,\n                    \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" name \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" profile_link \\\")]\"\n                },\n                {\n                    \"accept_selectors\": [\n                        \".topics > .content > a\"\n                    ],\n                    \"container_id\": \"bf9e-40b6-959f\",\n                    \"data\": {\n                        \"e7cf-4930-aaf2\": {\n                            \"attribute\": \"content\",\n                            \"extractors\": {},\n                            \"field\": \"5ccf-4bba-92c1\",\n                            \"required\": false\n                        }\n                    },\n                    \"id\": \"7a51-40cc-b792\",\n                    \"text-content\": \"content\",\n                    \"post_text\": null,\n                    \"pre_text\": null,\n                    \"reject_selectors\": [],\n                    \"required\": [],\n                    \"repeated\": true,\n                    \"selection_mode\": \"css\",\n                    \"selector\": \".topics > .content > a\",\n                    \"tagid\": null,\n                    \"xpath\": \"//*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" topics \\\")]/*[contains(concat(\\\" \\\", @class, \\\" \\\"), \\\" content \\\")]/a\"\n                }\n            ]\n        }\n    },\n    \"results\": [{\n        \"_type\": \"4\",\n        \"title\": [\n            \"\\u05d0\\u05d9\\u05da \\u05d4\\u05d4\\u05e8\\u05d2\\u05e9\\u05d4 \\u05d6\\u05d4 \\u05dc\\u05d4\\u05d9\\u05d5\\u05ea \\u05d8\\u05d1\\u05e2\\u05d5\\u05e0\\u05d9?\"\n        ],\n        \"url\": \"http://url\",\n        \"field2\": [\n            \"/profile.asp?id=139445\",\n            \"/profile.asp?id=110198\",\n            \"/profile.asp?id=110198\",\n            \"/profile.asp?id=221475\"\n        ],\n        \"tags\": [\n            \"\\u05d8\\u05d1\\u05e2\\u05d5\\u05e0\\u05d9\\u05d9\\u05dd\",\n            \"\\u05d8\\u05d1\\u05e2\\u05d5\\u05e0\\u05d5\\u05ea\",\n            \"\\u05e8\\u05d2\\u05e9\\u05d5\\u05ea\"\n        ],\n        \"_template\": \"3fd3-4288-b3dd\"\n    }],\n    \"schemas\": {\n        \"2cdc-4284-ab08\": {\n            \"fields\": {\n                \"22a1-4765-82a1\": {\n                    \"id\": \"22a1-4765-82a1\",\n                    \"name\": \"title\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"dc27-4087-8fb8\": {\n                    \"id\": \"dc27-4087-8fb8\",\n                    \"name\": \"link\",\n                    \"required\": false,\n                    \"type\": \"url\",\n                    \"vary\": false\n                },\n                \"779a-439b-9272\": {\n                    \"id\": \"779a-439b-9272\",\n                    \"name\": \"field1\",\n                    \"required\": false,\n                    \"type\": \"url\",\n                    \"vary\": false\n                },\n                \"5983-4b80-8547\": {\n                    \"auto_created\": true,\n                    \"id\": \"5983-4b80-8547\",\n                    \"name\": \"field2\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"5ccf-4bba-92c1\": {\n                    \"id\": \"5ccf-4bba-92c1\",\n                    \"name\": \"tags\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"4\"\n        }\n    },\n    \"scrapes\": \"2cdc-4284-ab08\",\n    \"spider\": \"stips.co.il_2\",\n    \"url\": \"https://stips.co.il/ask/5163110/%D7%90%D7%99%D7%9A-%D7%94%D7%94%D7%A8%D7%92%D7%A9%D7%94-%D7%96%D7%94-%D7%9C%D7%94%D7%99%D7%95%D7%AA-%D7%98%D7%91%D7%A2%D7%95%D7%A0%D7%99\",\n    \"version\": \"0.13.0b35\"\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/templates/xceed.json",
    "content": "{\n    \"allowed_domains\": [],\n    \"exclude_patterns\": [],\n    \"follow_patterns\": [\n        \"/events/[\\\\w\\\\-]+\",\n        \"/clubs-in-[\\\\w-]+\",\n        \"/tickets-club/[\\\\w\\\\-]+\",\n        \"/events/[\\\\w\\\\-]+/\\\\d+\"\n    ],\n    \"id\": \"xceed.me\",\n    \"items\": {\n        \"21d4-4268-85cd\": {\n            \"fields\": {\n                \"0885-44ad-8d18\": {\n                    \"name\": \"name\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"3d00-45e4-a1ec\": {\n                    \"name\": \"cover\",\n                    \"required\": false,\n                    \"type\": \"image\",\n                    \"vary\": false\n                },\n                \"51ea-4fcb-a355\": {\n                    \"name\": \"location\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"54fe-468e-b804\": {\n                    \"name\": \"text\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"93f8-405c-a546\": {\n                    \"name\": \"time\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"b1da-4d02-b590\": {\n                    \"name\": \"date\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"event\"\n        },\n        \"290f-4500-acc8\": {\n            \"fields\": {\n                \"799f-4875-b9dc\": {\n                    \"name\": \"image\",\n                    \"required\": false,\n                    \"type\": \"image\",\n                    \"vary\": false\n                },\n                \"df47-43f9-aa35\": {\n                    \"name\": \"name\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"e525-4f50-b864\": {\n                    \"name\": \"address\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"venue\"\n        },\n        \"6744-4764-b73b\": {\n            \"fields\": {\n                \"1b58-4551-a224\": {\n                    \"name\": \"type\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"4ed4-4fa6-ade1\": {\n                    \"name\": \"includes\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"53cc-4161-8678\": {\n                    \"name\": \"Pay\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                },\n                \"a794-43f5-9378\": {\n                    \"name\": \"price\",\n                    \"required\": false,\n                    \"type\": \"price\",\n                    \"vary\": false\n                },\n                \"ee83-4d06-aec6\": {\n                    \"name\": \"date\",\n                    \"required\": false,\n                    \"type\": \"text\",\n                    \"vary\": false\n                }\n            },\n            \"name\": \"ticket\"\n        }\n    },\n    \"js_disable_patterns\": [],\n    \"js_enable_patterns\": [],\n    \"js_enabled\": false,\n    \"links_to_follow\": \"patterns\",\n    \"name\": \"xceed.me\",\n    \"project\": \"35182\",\n    \"respect_nofollow\": false,\n    \"results\": [\n        {\n            \"_index\": 1,\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"ticket\",\n            \"date\": [\n                \"Sales end: Jun 10, 23:45pm\"\n            ],\n            \"includes\": [\n                \"+ 1 Copa Inlc. hasta las 02.30 / 1 Long Drink Incl, untill 02.30\"\n            ],\n            \"price\": [\n                \"13.00\"\n            ],\n            \"type\": [\n                \"Guest List\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_index\": 2,\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"ticket\",\n            \"date\": [\n                \"Sales end: Jun 09, 14:00pm\"\n            ],\n            \"includes\": [\n                \"Early Bird! - Long Drink incl / Copa Incl.\"\n            ],\n            \"price\": [\n                \"15.00\"\n            ],\n            \"type\": [\n                \"Ticket\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_index\": 3,\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"ticket\",\n            \"date\": [\n                \"Sales end: Jun 10, 23:45pm\"\n            ],\n            \"includes\": [\n                \"+ 1 Copa Inlc. / 1 Long Drink Incl,\"\n            ],\n            \"price\": [\n                \"18.00\"\n            ],\n            \"type\": [\n                \"Ticket\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_index\": 4,\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"ticket\",\n            \"date\": [\n                \"Sales end: Jun 10, 23:45pm\"\n            ],\n            \"includes\": [\n                \"Prive\\u00e9 on the Dance Floor for 5 people - 1 bottle inc. + soft drinks\"\n            ],\n            \"price\": [\n                \"200.00\"\n            ],\n            \"type\": [\n                \"Bottle Service\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_index\": 5,\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"ticket\",\n            \"date\": [\n                \"Sales end: Jun 10, 23:45pm\"\n            ],\n            \"includes\": [\n                \"Prive\\u00e9 on the Backstage for 5 people - 1 bottle inc. + soft drinks\"\n            ],\n            \"price\": [\n                \"230.00\"\n            ],\n            \"type\": [\n                \"Bottle Service\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"venue\",\n            \"address\": [\n                \"Poble Espanyol , Barcelona , Spain\"\n            ],\n            \"image\": [\n                \"https://res.cloudinary.com/xceed-me/image/upload/f_auto,h_150,w_150/v1464098101/venues/logo/55c867d73589f.jpg.jpg\"\n            ],\n            \"name\": [\n                \"La Terrrazza\"\n            ],\n            \"url\": \"http://url\"\n        },\n        {\n            \"_template\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"_type\": \"event\",\n            \"cover\": [\n                \"https://res.cloudinary.com/xceed-me/image/upload/f_auto/v1464098101/events/cover/e0e1b7d7b5fb44d760e3c7e46fb127.png.jpg\"\n            ],\n            \"date\": [\n                \"Friday, 10 June 2016\"\n            ],\n            \"location\": [\n                \"La Terrrazza - Barcelona, Spain\"\n            ],\n            \"name\": [\n                \"Cover F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt\"\n            ],\n            \"text\": [\n                \"F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt\"\n            ],\n            \"time\": [\n                \"From 23:45 to 6:00\"\n            ],\n            \"url\": \"http://url\"\n        }\n    ],\n    \"start_urls\": [\n        \"https://xceed.me/\"\n    ],\n    \"templates\": [\n        {\n            \"extractors\": {},\n            \"id\": \"64d9-49f1-8c07\",\n            \"name\": \"event\",\n            \"original_body\": \"<!DOCTYPE html><html lang=\\\"en\\\" xmlns:fb=\\\"http://www.facebook.com/2008/fbml\\\"><head><title>F.U.N. at La Terrrazza with | La Terrrazza - Barcelona | 10 June</title><meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=utf-8\\\" /><meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\"><meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"en\\\"  href=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"es\\\" href=\\\"https://xceed.me/es/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"it\\\" href=\\\"https://xceed.me/it/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"ca\\\" href=\\\"https://xceed.me/ca/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"fr\\\" href=\\\"https://xceed.me/fr/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link  rel=\\\"alternate\\\" hreflang=\\\"de\\\" href=\\\"https://xceed.me/de/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><link rel=\\\"canonical\\\" href=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\" /><meta property=\\\"og:site_name\\\" content=\\\"Xceed.me\\\"><meta property=\\\"og:type\\\" content=\\\"website\\\" /><meta property=\\\"og:url\\\" content=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\" /><meta property=\\\"og:locale\\\" content=\\\"en_US\\\"><meta property=\\\"og:locale:alternate\\\" content=\\\"es_ES\\\"><meta property=\\\"og:locale:alternate\\\" content=\\\"ca_ES\\\"><meta property=\\\"og:locale:alternate\\\" content=\\\"it_IT\\\"><meta property=\\\"og:locale:alternate\\\" content=\\\"fr_FR\\\"><meta property=\\\"og:locale:alternate\\\" content=\\\"de_DE\\\"><meta name=\\\"description\\\" content=\\\"Every Friday is the Unexpected Night with International Guest Dj&#039;s at La Terrrazza | Friday 10 June 2016\\\" /><meta property=\\\"og:title\\\" content=\\\"F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt | Friday 10 June @ La Terrrazza\\\" /><meta property=\\\"og:description\\\" content=\\\"Every Friday is the Unexpected Night with International Guest Dj&#039;s at La Terrrazza\\\" /><meta property=\\\"og:image\\\" content=\\\"https://res.cloudinary.com/xceed-me/image/upload/f_auto/v1464098101/events/cover/e0e1b7d7b5fb44d760e3c7e46fb127.png.jpg\\\" /><meta property=\\\"og:image:type\\\" content=\\\"image/jpeg\\\" /><meta name=\\\"googlebot\\\" content=\\\"unavailable_after: 18-06-2016 04:00:00 UTC\\\"><meta name=\\\"robots\\\" content=\\\"index, follow\\\"><meta name=\\\"twitter:card\\\" content=\\\"summary_large_image\\\"><meta name=\\\"twitter:site\\\" content=\\\"@XceedWorld\\\"><meta name=\\\"twitter:creator\\\" content=\\\"@XceedWorld\\\"><meta name=\\\"twitter:title\\\" content=\\\"F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt | La Terrrazza - Barcelona | Friday 10 June 2016\\\"><meta name=\\\"twitter:description\\\" content=\\\"Every Friday is the Unexpected Night with International Guest Dj&#039;s at La Terrrazza\\\"><meta name=\\\"twitter:image:src\\\" content=\\\"https://res.cloudinary.com/xceed-me/image/upload/f_auto/v1464098101/events/cover/e0e1b7d7b5fb44d760e3c7e46fb127.png.jpg\\\"><meta name=\\\"revisit-after\\\" content=\\\"3 day\\\"><meta property=\\\"og:locale\\\" content=\\\"en_EN\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"57x57\\\" href=\\\"/apple-touch-icon-57x57.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"60x60\\\" href=\\\"/apple-touch-icon-60x60.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"72x72\\\" href=\\\"/apple-touch-icon-72x72.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"76x76\\\" href=\\\"/apple-touch-icon-76x76.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"114x114\\\" href=\\\"/apple-touch-icon-114x114.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"120x120\\\" href=\\\"/apple-touch-icon-120x120.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"144x144\\\" href=\\\"/apple-touch-icon-144x144.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"152x152\\\" href=\\\"/apple-touch-icon-152x152.png?v=2.4\\\"><link rel=\\\"apple-touch-icon\\\" sizes=\\\"180x180\\\" href=\\\"/apple-touch-icon-180x180.png?v=2.4\\\"><link rel=\\\"icon\\\" type=\\\"image/png\\\" href=\\\"/favicon-32x32.png?v=2.4\\\" sizes=\\\"32x32\\\"><link rel=\\\"icon\\\" type=\\\"image/png\\\" href=\\\"/favicon-194x194.png?v=2.4\\\" sizes=\\\"194x194\\\"><link rel=\\\"icon\\\" type=\\\"image/png\\\" href=\\\"/favicon-96x96.png?v=2.4\\\" sizes=\\\"96x96\\\"><link rel=\\\"icon\\\" type=\\\"image/png\\\" href=\\\"/android-chrome-192x192.png?v=2.4\\\" sizes=\\\"192x192\\\"><link rel=\\\"icon\\\" type=\\\"image/png\\\" href=\\\"/favicon-16x16.png?v=2.4\\\" sizes=\\\"16x16\\\"><link rel=\\\"manifest\\\" href=\\\"/manifest.json?v=2.4\\\"><link rel=\\\"mask-icon\\\" href=\\\"/safari-pinned-tab.svg?v=2.4\\\" color=\\\"#f83e59\\\"><link rel=\\\"shortcut icon\\\" href=\\\"/favicon.ico?v=2.4\\\"><meta name=\\\"apple-mobile-web-app-title\\\" content=\\\"Xceed - Live the Night\\\"><meta name=\\\"application-name\\\" content=\\\"Xceed - Live the Night\\\"><meta name=\\\"msapplication-TileColor\\\" content=\\\"#f83e59\\\"><meta name=\\\"msapplication-TileImage\\\" content=\\\"/mstile-144x144.png?v=2.4\\\"><meta name=\\\"theme-color\\\" content=\\\"#db1643\\\"><link href=\\\"https://plus.google.com/+XceedMe\\\" rel=\\\"publisher\\\"><!-- Facebook Pixel Code --><script>\\n                        !function (f, b, e, v, n, t, s) {\\n                            if (f.fbq)\\n                                return;\\n                            n = f.fbq = function () {\\n                                n.callMethod ?\\n                                        n.callMethod.apply(n, arguments) : n.queue.push(arguments)\\n                            };\\n                            if (!f._fbq)\\n                                f._fbq = n;\\n                            n.push = n;\\n                            n.loaded = !0;\\n                            n.version = '2.0';\\n                            n.queue = [];\\n                            t = b.createElement(e);\\n                            t.async = !0;\\n                            t.src = v;\\n                            s = b.getElementsByTagName(e)[0];\\n                            s.parentNode.insertBefore(t, s)\\n                        }(window,\\n                                document, 'script', '//connect.facebook.net/en_US/fbevents.js');\\n                        // Insert Your Facebook Pixel ID below. \\n                        fbq('init', '1561436560754888');\\n                        fbq('track', 'PageView');\\n                    </script><!-- Insert Your Facebook Pixel ID below. --><noscript><img height=\\\"1\\\" width=\\\"1\\\" style=\\\"display:none\\\"\\n                               src=\\\"https://www.facebook.com/tr?id=1561436560754888&amp;ev=PageView&amp;noscript=1\\\"\\n                               /></noscript><!-- End Facebook Pixel Code --><script type=\\\"text/javascript\\\" src=\\\"//static.criteo.net/js/ld/ld.js\\\" async=\\\"true\\\"></script><script type=\\\"text/javascript\\\">\\n                window.criteo_q = window.criteo_q || [];\\n                window.criteo_q.push(\\n                        {event: \\\"setAccount\\\", account: 29332},\\n                {event: \\\"setSiteType\\\", type: \\\"d}\\\"},\\n                {event: \\\"setHashedEmail\\\", email: \\\"\\\"},\\n                {event: \\\"viewItem\\\", item: \\\"17652\\\"}\\n                );\\n                var emailUser = '';\\n                var eventId = 17652;\\n            </script><script id=\\\"criteo-basket\\\"></script><link rel=\\\"stylesheet\\\" href=\\\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\\\"><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" media=\\\"all\\\" href=\\\"/assets/site/css/header_sidebar_footer.css\\\" /><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" media=\\\"all\\\" href=\\\"/assets/site/css/common.css\\\" /><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/site/css/new_event.css\\\"></head><body><header  class=\\\" \\\"><div id=\\\"header-cities\\\" class=\\\"header-cities-all col-xs-12 clearfix\\\"><div class=\\\"float-fix location-menu clearfix relative\\\"><span class=\\\"absolute upArrow\\\"><i class=\\\"white-c icon-arrow-up open-cities open-cities-link pull-right pointer\\\"></i></span><div class=\\\"text-left clearfix white-c float-fix col-sm-7 citiesOuterHeader\\\"><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">China</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/shanghai\\\">Shanghai</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Croatia</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/split-dubrovnik\\\">Split &amp; Dubrovnik</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Italy</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/milano\\\">Milano</a></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/palermo\\\">Palermo</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Japan</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/tokyo\\\">Tokyo</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Spain</span></li><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/alicante\\\">Alicante</a></li><li><a href=\\\"/events/barcelona\\\">Barcelona</a></li><li><a href=\\\"/events/benicassim\\\">Benic\\u00e0ssim</a></li><li><a href=\\\"/events/benidorm\\\">Benidorm</a></li><li><a href=\\\"/events/cadiz\\\">C\\u00e1diz</a></li><li><a href=\\\"/events/calafell\\\">Calafell</a></li></span><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/castellon\\\">Castell\\u00f3n</a></li><li><a href=\\\"/events/formentera\\\">Formentera</a></li><li><a href=\\\"/events/gandia\\\">Gand\\u00eda</a></li><li><a href=\\\"/events/ibiza\\\">Ibiza</a></li><li><a href=\\\"/events/madrid\\\">Madrid</a></li><li><a href=\\\"/events/malaga\\\">M\\u00e1laga</a></li></span><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/malgrat-de-mar\\\">Malgrat De Mar</a></li><li><a href=\\\"/events/murcia\\\">Murcia</a></li><li><a href=\\\"/events/sitges\\\">Sitges</a></li><li><a href=\\\"/events/valencia\\\">Valencia</a></li><li><a href=\\\"/events/vinaros\\\">Vinaros</a></li></span><span class=\\\"block col-sm-4\\\"></span></ul><ul class=\\\"col-xs-12 list-unstyled last\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">United States</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/san-francisco\\\">San Francisco</a></li></ul></div><div class=\\\"clearfix\\\"><div class=\\\"text-left clearfix white-c float-fix col-sm-7\\\"><div class=\\\"white-c managers\\\"><p>Are you a club manager?&nbsp; <a class=\\\"bgreen-c\\\" href=\\\"/business\\\">List Your Events</a></p></div></div></div></div></div><div id=\\\"header-out\\\" class=\\\"full-width\\\"><div id=\\\"header\\\" class=\\\"col-md-11 col-sm-11 col-xs-11 col-lg-11 float-fix text-center padd-0 clearfix\\\"><a class=\\\"ssm-open-nav hamb visible-xs\\\" href=\\\"#\\\" title=\\\"Open sidebar\\\"><i class=\\\"fa fa-bars\\\"></i></a><div class=\\\"col-md-6 col-xs-12 col-sm-6 col-lg-7 padd-0-l\\\" id=\\\"logo-outer\\\"><a href=\\\"/\\\"><div id=\\\"logo\\\" class=\\\"pull-left\\\"></div></a><div id=\\\"search-home\\\" class=\\\"open-search hidden-xs pull-left grey-ac-c text-left ellipsis\\\"><i class=\\\"open-search pointer icon-magnifier grey-ccc-c inline-block va-top\\\"></i><span class=\\\"inline-block va-top\\\">Where are you partying tonight?</span></div></div><div id=\\\"nav\\\" class=\\\"col-lg-5 col-sm-6 col-md-6 pull-right padd-0\\\"><nav id=\\\"top-bar\\\" class=\\\"margin-0\\\"><div id=\\\"profile\\\" class=\\\"col-md-4 col-xs-12 col-sm-4 col-lg-4 hidden-xs profileOuter headerElWidth\\\"><a href=\\\"/login\\\"><button id=\\\"login-b\\\" class=\\\"actionB\\\"><span>Login</span></button></a></div><div id=\\\"hire\\\" class=\\\"col-md-4 col-sm-4 col-lg-4 hidden-xs headerElWidth\\\"><a href=\\\"/business\\\" class=\\\"text-center text-bold padd-0\\\">Create event</a></div><div id=\\\"find\\\" class=\\\"col-md-4 col-sm-4 col-lg-4 hidden-xs headerElWidth\\\"><span href=\\\"/app-mobile\\\" class=\\\"open-cities open-cities-link text-bold pointer text-right padd-0 open-cities-2\\\">Select city</span></div></nav><nav id=\\\"side-menu\\\" class=\\\"visible-xs\\\"><div id=\\\"menu-top-part\\\" class=\\\"menu-admin-top grey-f4-bg grey-1b-c relative\\\"><div id=\\\"menu-top\\\" class=\\\"clearfix\\\"><span id=\\\"menu-search\\\" class=\\\"pull-left grey-39-c\\\"><i class=\\\"open-search icon-magnifier text-bold\\\"></i></span><a id=\\\"menu-close\\\" class=\\\"ssm-open-nav grey-39-c pull-right\\\" href=\\\"#\\\"><span class=\\\"inline-block va-top text-light\\\">\\u00d7</span></a></div><div id=\\\"menu-profile\\\"><a href=\\\"/login\\\"><span class=\\\"menu-profile-pic nopic inline-block\\\"></span><p class=\\\"text-bold grey-1b-c\\\">Sign in</p></a></div></div><div id=\\\"menu-bottom-part\\\" class=\\\"menu-admin-bottom\\\"><div id=\\\"menu-list\\\"><ul class=\\\"text-center unstyled-list\\\"><li><a href=\\\"/cities-mobile\\\" class=\\\"grey-1b-c\\\"><i class=\\\"mobileMenuIcon findEventsIcon inline-block va-top\\\"></i><span class=\\\"mobileMenu va-top\\\">Find Events</span></a></li><li><a target=\\\"_blank\\\" href=\\\"/jobs\\\" class=\\\"grey-1b-c\\\"><span id=\\\"\\\" class=\\\"mobileMenu\\\">We are hiring!</span></a></li><li><a href=\\\"/business\\\" class=\\\"grey-1b-c\\\"><span id=\\\"menu-business\\\" class=\\\"mobileMenu\\\">Business</span></a></li><li><a href=\\\"/about\\\" class=\\\"grey-1b-c\\\"><span id=\\\"menu-about\\\" class=\\\"mobileMenu\\\">About</span></a></li></ul></div><div id=\\\"menu-login-btn\\\" class=\\\"full-width text-center padd-0 absolute\\\"><a href=\\\"/login\\\" id=\\\"signInButton\\\" class=\\\"actionB block\\\">Sign in</button></a></div></div></nav></div></div><div id=\\\"header-cities-2\\\" class=\\\"header-cities-all col-xs-12 clearfix\\\"><div class=\\\"float-fix location-menu clearfix relative\\\"><span class=\\\"absolute upArrow\\\"><i class=\\\"white-c icon-arrow-up open-cities open-cities-link pull-right pointer\\\"></i></span><div class=\\\"text-left clearfix white-c float-fix col-sm-7 citiesOuterHeader\\\"><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">China</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/shanghai\\\">Shanghai</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Croatia</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/split-dubrovnik\\\">Split &amp; Dubrovnik</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Italy</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/milano\\\">Milano</a></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/palermo\\\">Palermo</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Japan</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/tokyo\\\">Tokyo</a></li></ul><ul class=\\\"col-xs-12 list-unstyled\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">Spain</span></li><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/alicante\\\">Alicante</a></li><li><a href=\\\"/events/barcelona\\\">Barcelona</a></li><li><a href=\\\"/events/benicassim\\\">Benic\\u00e0ssim</a></li><li><a href=\\\"/events/benidorm\\\">Benidorm</a></li><li><a href=\\\"/events/cadiz\\\">C\\u00e1diz</a></li><li><a href=\\\"/events/calafell\\\">Calafell</a></li></span><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/castellon\\\">Castell\\u00f3n</a></li><li><a href=\\\"/events/formentera\\\">Formentera</a></li><li><a href=\\\"/events/gandia\\\">Gand\\u00eda</a></li><li><a href=\\\"/events/ibiza\\\">Ibiza</a></li><li><a href=\\\"/events/madrid\\\">Madrid</a></li><li><a href=\\\"/events/malaga\\\">M\\u00e1laga</a></li></span><span class=\\\"block col-sm-4\\\"><li><a href=\\\"/events/malgrat-de-mar\\\">Malgrat De Mar</a></li><li><a href=\\\"/events/murcia\\\">Murcia</a></li><li><a href=\\\"/events/sitges\\\">Sitges</a></li><li><a href=\\\"/events/valencia\\\">Valencia</a></li><li><a href=\\\"/events/vinaros\\\">Vinaros</a></li></span><span class=\\\"block col-sm-4\\\"></span></ul><ul class=\\\"col-xs-12 list-unstyled last\\\"><li class=\\\"text-bold country col-xs-12\\\" style=\\\"\\\"><span class=\\\"inline-block\\\">United States</span></li><li class=\\\"col-sm-4\\\"><a href=\\\"/events/san-francisco\\\">San Francisco</a></li></ul></div><div class=\\\"clearfix\\\"><div class=\\\"text-left clearfix white-c float-fix col-sm-7\\\"><div class=\\\"white-c managers\\\"><p>Are you a club manager?&nbsp; <a class=\\\"bgreen-c\\\" href=\\\"/business\\\">List Your Events</a></p></div></div></div></div></div></div></header><div class=\\\"overlay overlay-scale\\\"><div id=\\\"searchSpinner\\\" style=\\\"display: none;\\\" class=\\\"full-width\\\"><img class=\\\"absolute-center\\\" src=\\\"data:image/gif;base64,R0lGODlhZABkAOZ/AEyj/25ucP39/fhCUvp7h/uLlPg+WCUmKlSo/6nV/+Xk5uf0//VUZk5OUoeHiJfL/zM1PFuu/5aWl6moqflte//m59nZ2Wm1/1ms/7HZ/w4RF4zG//2jqHW6//22usnl/9Tr/8fGyPZDYv7X2Lq5u/29wPVNY1Gd//hET/yYof7GyfVKa/hBW/Py8/QvRfNKXpvc//RDXPX7/ykqL1Co///z9PhMWVCl//7f4PlIVN/f4P2ushwdHjyd/2Gw/x8gIr3g//NCVvZdbkag/+vq697w/y8xN/dKYf/t7lmq//ZQXzY3P/7O0X/A/16v/664q1Wr/02m//hGX+73/1hYW5ubnURESf/4+dTT1aShp/VGZpKNlXd3eCEiJ1yi/4yMjKDQ/7Kvtc/Oz2VlZqysrF5fYPZGWMzMzJCQkT4+QsC/wbOzs6CgoPVPapDL/ywtM6+wrxgaH/dJaNHR0Y6Ojm+0/4OChHx7fqOnm+7u74CAgfj4+Fyt/6OjpJKTkv///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjNDY3MWY1NS1lYWZkLTQxNDktYjRkMi1iMzFiMzMxZTI4NGYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjM1Nzg4QzYxMURBMTFFNjlGRDJBNDg0OURDOTFCODQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjM1Nzg4QzUxMURBMTFFNjlGRDJBNDg0OURDOTFCODQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzQ2NzFmNTUtZWFmZC00MTQ5LWI0ZDItYjMxYjMzMWUyODRmIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmM0NjcxZjU1LWVhZmQtNDE0OS1iNGQyLWIzMWIzMzFlMjg0ZiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUFAH8ALAAAAABkAGQAAAeRgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyFBgIAAh+QQFBQB/ACwRABMACAAGAAAHKYB/goMCAoN/OhZ5hn9EAXpnLYZnRjx+c5JkPz9GDmKSVVx3bGdEe3+BACH5BAkFAH8ALBEAEgAXAAcAAAddgH+Cg38WX3QSVRNkZBNrajp7hIRYY3E8P5k8m5s/ZXCRhC1cm5ecp5sNVVgtAoJqXaiynGlfZ3muDrGzs0sOtwJUB5nExcaZXXchuAFczgFj0dFl1GXTY19qRJKBACH5BAUFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7tnt9XxJVfWRkE3BryMnFxMVszhLQEmh01BIkWHkCvAJoB3E/4Dzi4+Tl4uDo6eFdXGpEe7oTbz/m9fb35AdjcArwty0N8AkcWK5BHwstbs0xQo+gQ3wNqiC0NaFLF3UYM6qzSC+cxi5L0GBJWEtCAC5cAgQYw5JlmZctW6pUiRLlHT047Tj48gWNHzRA/azR0UIbr6NIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dwKOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCMjDgQAIfkEBQUAfwAsEQASAEQAEQAAB/iAf4KDhIVkhYOHf3CCfYV+aJGRdJRflpdfdGgTajpEiKCCe38zoaanhT8/PKytrjyrqzxpAWqofUaourqvvb6qZaZUu8SovseuP8OIEDzFz6DI0qxWiD/Q2IOq27Gq0zxdDYN+YwEBf2N/ZetlVO7swejpf+bmXPdcd3p2DpmYlg7s6LnDJUAaWNO6zMvGUNecO10QHjuwpqFFVHn0SOz1482oiyBBrTnAjRuPA1VCqixkYUZJbudWyvwzJ04Xbl2MUEEzc+YEmzPepKHCpUqInjMDNBjDxUEfElg+IV2Z56kaMRaItPg4VSURBXlabBXQdaaAs4QCAQAh+QQJBQB/ACwRABIARAAfAAAH/4B/goN/LYRsE4lkcGSNcHCJin9VbFWEl39ognScl359JHM6mKSDXwelqaqrpDyXYySrZEustba3fwGlebi9vq1/AphLP7/Gx5fFyKxdzc6Eyr4SmGO1uqV3en8Ogl+qd4Ndy+O/Z3qo5Om3ROCrwurwM3+u8PWl0ZhW9upYM/SCPwKi20euioaACAPKI5guTUKECxmOk3Dg4Y+IEpHp6GIRY0ZjAt44c/bm4zgrP0Z2KWkSWQOVXTy27GVF5Q9aM3/teXNAJbecvs7MGHngDS+gveikdDbDElJcAtJ0OUD1gL6nuNhMrTpDDNZbAqhUpXrtay0dAahAoPrjqFlWFiBIVOEilszbWgLyKJhDAo3Tu+4E7MmjY847wHj3HB4UCAAh+QQFBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7YtfV8SVWwTxGRwZMhwcMTFE8JVEtESfmjV1nTY2F/bX3R+fSRzOq97XwdxP+k86+zt7uvp8fLy7/U/62ljJKsTEPf1AAMKHPguXQBUeRoQXMiwIbsfVPaUEuPPocWLAK2QmtBlnsePHrt05KFOnsiTHT8S7NJglIQxAWKOmVmmZhkqVGyWmQkzpk8uXO4I1aPHgYNu3LrRMapHaIA0PLoM7DKGVyYxeg6QDHgAjtVMefRstfdGwNdMaw7c88jjQJWzmf8spPyoES4mLFo/HrCbqQo6jzP4ZkrzMbDgSxLUzjN8uJKOufEYN54k4A1KkW8mW7Ly43JmzZQaXO4iGTQkzih/pDEtac+MA5cdsI4kZsblGXlmQ6LT+eSMt7ofpelyoPiB1cEdsSFufMaZ5I32vDFe/CB0RnZeU899XZEF7cVnfOm+qAH1AxDIK4JzvssT9YgEGDmPHL4hBwdm6Lcdwr4hIqTtdwAV/hkSQH77zTBOgYPMgaB+B1jHoCDmJXgAdxOSEOAMb8QhwYSDGJFgFxCYBSIZGryh4hsa7ANiC8SteEBLIP7BBQ8rvvHDHDUSEQeHKh5QVY1U/JDjDwrUqEaVHEaoaIQGwIE4nJMk1vgHG0w6qYEaNeYRxxtGhMlDGVbewWSYHWLIoA5fhgkBD7LVaEUXYc53gIkTqqEBBHVqIEaNAuTnZhxkKqlBGkssYUQcLQCKhh13BMBFA891GYIYapBARn9WttBCHkQosKCVApS6h0RWpqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbq66+0BAIAIfkEBQUAfwAsEQATAEQAQAAAB/+Af4KDfzOEh4iJiouMg2qNfUuNk5SVh2OLVJabnI0Ch2d/PJ2kpYOfpohdjT+troSjlpqCVQFctwEBf2O8f2VlvLy5urfFd3p2yQ4OX3R+En7R0mhfDsl3qdnaf1xdP41r2+KDRHZxjEbj6oKG6+7v8PHylmzz9vf4+fr7/P3+lt8IHfhHsKDBRaEOvTnY6MsqhpUESCJkBeKiPgEtTkqnseO7gR4bLUEVMhHIkihTksqjsqXLl9keHfKjEsIhjignnIO5B1FFmEAHPVQ5VFTQlgJ+/lk48qjTpyUVHMqIssGhovJIvhSwh4hWSzMWCvph1R7XPHP6fJ004Q8EI+m9NEidx5XIHDhjqKxdlEcDXCMQNDi4tycPlglcGsRp0JNSgx8QIr+Js9ddCwtr7liBsCSOlRaT2GhYEjmwTHt71qBpUHrJgR8hGNGJUxpClzT6wlAhXXsyFTIhdCjQoYNICCo8ageei68FZOWRZ3jrMiOytze8OcfBti/LaOjgASt/o6HyPMXZwasPjMWfACM/0q9vrUECwT2dl+jfz79/YEwF7XFHHAf0Z6BtP1QBERYBVGegfka8IQER4wQCACH5BAUFAH8ALBcAMQAoAB0AAAf4gH9/AnstgoeIiYqLjIMteTpYjZOUiIUKZ2sOE5WdjHkWJBIBDRqSnqiCLWwOVBAzXRp7qagCemlvMzNvcQG0qGoaubq8Fr+de10Hb8xvXVbHnX1xRs1vGiHRlVY/1gdds9qNChq7zEZdXOKTZXHWbz8K64xEwtY/Y/OMftTWcaf6LPF4U43gASMBFZHQYKRhQw1hEiZactAhr3AS/+hg6NBIHAcZD42h1lEDkZB/WnB0+IMKyj9VNEBwCAEiSgFdCFo0iXLhzIYQuvzAKBHCAQhIISzhAS0kuaQQBPF4aUfDkqgvD+0RhjWrIAsa1vHw1WnLujh7AgEAIfkEBQUAfwAsEQAqAC4AJAAAB5CAAgp/hIWGh4iJiooCaVZ2Z4uSk5RWB5djFpSbnH9kl6ASnaOLaaCYpKmGYj8zoHFcqrJ2PK4Hb12xsqR7XQczwAddE7ukn8DIB4PFnQ2/yQ3MnQpdyMBdfdKcDtXAfwc/2pstrTOGd+KUVV3pqebt8PHy8/T19vf4+fr7/P3+/wADChxIsKBBRHHQ+dMgIBAAIfkEBQUAfwAsPQBMAAIAAgAABwaAPAFxe4EAIfkECQUAfwAsEQATAEQAOwAAB2GAf4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2IRxd8IaApaBACH5BAkFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7tnkTfoITZIJwhcODE31shmiFdIRfg88SZGoWRLBYXDw8Pz/c4OHi4N7d3ufn4+rdPAcNegqrAjoSDev3+Pn63jPHqC1i/FjRR7BgwR8SUAkA+CWNwYcQ1TUztTCEnhnm0GnU2KUjt3IbQ378pu9AlVN7iIRAM2ZMmZdlWrYMQDMAl5s37+ixY8eBgy900PgZSlSCHzpfHNjRM+ZNOXxd1PDC1GKNPZLqfrwRMDVTCCtd7nXR01XTnS4hz+Upm4lORnTt/xKyxeQgbRcqczMNDGkkL6YQaDd28YtpSWCNhC99OYwusaU1HSN3POC4Uogfkjv2rTwJC2bJMxpwnhSCR+Y4J0dH6nPgdDzVkLi0jnwgAGxIAt7M7nJgxtrbjtbM4H2gt1xQRF7bakC8eJpRVWaUYfNblvDixWecGUUCuxE/XGEJgIC9eBlSAhqUt7L91cXyB5SLEgP/wARXFuqTNRWgN3YNIbSiXnlv7IHSG83NEEd7qawBXxf3oQLHDzNUOMMBb7SQyni9VXjAc6qoZ+GF56FSRRcjHrDGKjp0aOEB/pDSgm4visaKHSiO2IWGpcim4xytcDgiD1yUYkGOHo7xCv8bXbwxYhwWkFIGkm9oIB8rabioG4ihlObkDG/EEQ0spYH5xplxrBhKGk2e2ZqBsWR5pptxhOcJHHHMiWCEsViQp55x7NfJHnGYqdsStXChgZ5GQOmJBH+6GSAtLWhgKIJ4cUJEpLqVWMsWcRihpwYMZkIFhnNqUB0tAlw4pxEHLGHnJVhEaoQGy+CyRqivaoCHJlmKasQMP8y6XBdGJCtqHHBaMgEPyt5a6i06aBBto0VasgcPMyj7g6e6BBBqtFZaose4ycahw1R7LBptFzZOQoS1yUKgwURTTaABBMraK9Ukpyp7QLFltdqtslU2+8gZ+9YL4FxqNFxvHPE+ssTHAfV2YYVfYPGb7BIajOlIFhLbe2VX1UKg8soaZOHIvEawbEdid+y7ssoapKbIHheuHKbCc7X7xs0qxzEGNogQweYSKoNMQmUkaMA00QPrQcIcCihgQdZZFDc1eRAY65e4X99MLG9vLOEUsmVrsC5nAsQRK9F01w0ByDOrpsCiklxMMGxi8G1xX0jfFoKlj8zwhxjADWIBom8owm8cVmDROCF7TGBF2oi80QAJYl8u+uikl2766ainrvrqrLfu+uuwxy777GwFAgAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7yQewpqbBLDaMXGdMjIX8tfyBJkahZEvYgCeWcOEDw/3N3cPODh4uI/PAcNegrUhL8kATPj8fLz3DNk64J7OmRlXfP/AMH9kICvhY4+VAIq/IdmXQsLVawI9Eax28SFB6pQE/BwwhcHzdD4GUlSgh86H+3oGfPmG8AuavBRarGmwbZ/P94IkFkphBV/87ro4WnpTpeK3vIQrURnW0VzBJdScoD0RxcqUitJRGokK6UQRyt28UppSViKZCd9OestraQ1Xf/iyu1ywG2kEFbndulq9xGWvHJnNOj7KAQPvXE0Em7U5wBidYsZcXEs90CAyIwEvKFMd4ZSzIrWzKB74MCMqKCIQLbVgHTpNKOqzCjD5rMs0aVLzzgzikRuI352whIAIXfpMqQENDBuhfcrPTOMH1gtSoz0AxNcWbg+1FQA07k1hGi13PibPaf2vHE9I47zVGukd8mOCs6PGfijv2mRirhp/AfApspy+UWHHCpVdFHgAWusosN/+R1wjyktbBbhYKzYoWCBXfBXymQcztGKfwXywEUpFmwI4BivsNHFGwXGYQEp/eT3hgbUsZIGhJsJGIphMM7wRhxfxGKYkG8kGUf/g6Gk8WKSjqEXy45JQhmHcJ7AEUeV69EXiwVbchlHd53sEQeSmy1RCxcacGmEjJ5IECaU49HSggZorocVJ0TMudmBtWwRhxFcavBeJlQcUKhttAigX5JGHLAElpdgMacRGrCRyxqDVokpHprsSKgRM/xAKWt7GaHqkFJaMgEPqqpq6C46aBCrqnGcaMkePMwQ6w+A6hLAoLfiaIkexOKqQy97tHlrFxhOQoStqkKgQUPUTKABBLFaG9MkicZ6gKnrOOprrDe2+sgZ21YrnkxqtFttHNE+ssQB1XZhBVE/cavqEhoU+UgW8lqbIzW1QqDwwhpk4ci0RjBsh1R3bLuwqsIaKKbIHtEtzKpUzb5xscJxjDENIkQ4uYTCAJPgFQkarDzyuHqQMIcCCliAcxalyQxBF2mcStSwPl9cKl1vLNHSXj4DPCNZAsQh6chUVw0BwA7YpUCbRVs98r3k2iUG115TvQSmJ/cVAp5LtO3223DPoIEYmFmwxJZww81tHFZgAdofe0xgRdJ5t/1GAyQI/ffijDfu+OOQRy755JRXbvnlmGeu+eacHxIIACH5BAkFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+kgJ7OmtfEi2/ngJ5IXoHP0ZqyJx7RGpcbzw8XRPSmnsKa2MH2dnc3Zff4ePkB2TnltQkATPkPD8/Yu+UyiF2S/XajOij1AJLlQY/AB6gM3ASuABG7kn8ceBYQ0gCSNxJMzHhATYXIykYA6Hjjy5lQkYa08XkDwgqIYVweTImJCMtTdp8ZCenxJY7HcHpQrRolwNBG800SlRg0kVzThqdYeXpIjVSi8bxY1URmQNM41jomugO2KIHxpBNZOTs0RkK/9YeUjPj6IEDMxyIarEHV4O7gJeMYrMkABwBtNS8AYw3mig4gNP0mbWE8QEqpPZYYUxFB6wvMxjPGEsqhOU3jlkpsHwgwKkyeAFrIL0KtuU8p1rUBTxD7Co1ortUSdXnx4zjdZf0TZUG7/EDMFVtRh5aLao+Xai3WzXHOfIDJE7tgeD9QFVWXLJTn7GcVDPqXUK02hOaOo8vpVZrx+xKQpc31MXh2SgsIfeGBgO2IkBlBnZxXihYGHfcGz9wEQsJP7yhoYZxyBdKA/9pOE57r7S14RvZIfaJGhqc2IUEs4gRx4lGaABjMtltOIMRKspSxowbGhFHXJ1MAKSI4dHSgv8GM7ho3SYtGLfhAQ3cYkccRpzo2yZldJHlGzUSWcseUmrYVhqbWHCkkGjkkgWWQWqwhiabZWlEbyTaYoWXRvRZV56TkIBln0ImmcscGhDaZxx6WSKAcYR2USUvPypaI26VbDGoERBogEUvS1r6Q0oEJdpnp3b8IoEGEBDaaT6TjPFMnwcCmsujOxI6ww89PoIFq6dqYKgvYQB7ahxPPrLnqdCd01yrwQ73SLHQdpogMr9CoK22NQ6rSAszbhuHa+8EEMe23GrgziICpNHFtrXqs0eL6LYahx0WHbIHFT8soe0S6jY0gQb+1nvUFmro0EILRLSQRxgQdFEwBMf1+g5yFXFM/G9bJ80AQRqVZaixpyHNO4PG9Z56KrpLxGGhShYkinK9NEOwxAwaWNwQi0bMXPPGCAZV7BtLFG300Uh3+5QYJyHtdNHGefhUC3RYkYYVWGed9dVZ5CvX12CHLfbYZJdt9tlop6322my37fbbuAQCACH5BAkFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNyAJ70ALTzo8CRNhEeS3R1Y0hJCRqZxYK3N6LcGUBXF9salh56IpkBzNGaVR6fVjziWo8ugg8kGbMBH+I5vwQyLALGoSHQixsGMcPRENrDjTsckDNxUIONDI8YOVjoTQiBc44Y3IQFo0HYh4I0HJQGZkxZ+wRRaaMn360LLzhmJPNqD4yx7CUZQUnQVJEIODUIwDWhBk4Z3gkNcFpAwWu9mCVOYPKqaZjD8Rp0epO1h86/04pSBtzyU5VFt7eSeXgx4y/M7o0WEXF3l+N8lDteQP4sINUaro0PmBRFRzDgA/MQYWysZGqq242npHmVBXMgeG0IoJ6RpyDpBaPLu3KjuTGa0k5uD3jTZylrfKMHjpmlALeQ83CkvDjjXPGcYCCGsPj+QweRGLtsff8zQ/anyzE6e38wF5ZcOIY6a6BBCiU1nXSshKne+C7nNRo6H5AQi0d+3XXxXmbLHaAdW+ARksZ6nUXB1ib6PHDem8YoYEYt7TAA3nO/aBcJkRU55wRPBSHix0TPmchhpkE0AWFb2jAFi4CGHGPETgeAEEmWKiHoxFxVLELCRr8iKMGsFmyxP8BPzKpYC5pvPijb/hNEkaROELQXi8AGgmkHZXssd+PcZTxSwA+/qgBhJJ8kWaMM/YiZoVNggcJEVgaoaVRwFQRBwQ/aulfJNT9eF2VvQjQBZ1ZarCVIyFoAKieGoQwDJFLQKDpehrE1YiiM2gKQRclEWNFF6JqOoMG0ikyRhyZAqpBdsTgqaeoS/hGxiJbwCpqHI8ZY4evqQLZAAkKVCmABQymSuUxNR4Qq7McLUFFGWWM0YBk0y6hQRjJ2JrquDa+AYFz4y4h2DKYjuvuu0tYGGcyEmiwxLTvuuvto8vcYe+9AAcscKYaBOtMFvsNrPB1QqLDbBpWRCzxxFakEYAZpzVlrPHGHHfs8ccghyzyyCSXbPLJKCsTCAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KdkZX5Y3YN9B+ZjZ+NES+bmeuNk7eYNCt1W8gdxLdw6M/hWe7jZ+TGj4IwfDbgJMGKw4AE63NYcaOjPArcyExsu4aYgo8E4E7jp6UKRxz5teSi++RGAG5ofb2K+mRHHorY9E2WuTCNKQK4wcYzo1EAC1J4WPnFZiaNzRpeAnfacyQP1lgUNOt90uRP1zgQdSHNR4SFUZhwinNhocKAGbFJbLf94zND5Y8wmIlipSDiDNpcdsjKNaBCjaUwXI0u4kNGha09BI5CNHDDyttKZoEKp6KmKi4SGyJA1kMHELvIBP72sHI78Jg5nSWs+R9ZQj5cO2ZHjOKi0B2vulr4CYJ5dW9Jf1hpO9mrh2zRPSXgjQ9BQJZiEOBCkU5c0hizkA10q9xLQ5Q3o6WoghdCQ3cj0dMI8L4FAH8IMDYwbkZ9R/weVYlb8UB9994nDyBhxzEefBn0NE92AS9AUxiJfJEjfErodc4eFAxrBQwMkKMCZAFhQwSEErYknzEJdKDigVgcsQUUZZYzRAEkuLkFUMnl8NuCPDL2BopAQdmHFMvL9qORMkksIplwyW2iwhItLKqljCM7owd6UXHbp5XwafAFNFlh9aeYMPLAhjQVlpGHFm3DGaUVi+Y1j55145qnnnnz26eefgAYq6KCEFmpIIAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KdkZX5Y3YN9B+ZjZ+NEEObmegLdE+3mDQrdafMHPy3cOjP5S/Zw0/NjhsEZXRpw2/PmwMF/DrjBcfjwgLhtZSgeXMJNgUaDcfpwu9Pl4Yw4ebblMfmmyxhufn68mfnmpIVtexzSbJlGYhwjOzWs4ZZG5s4fArXp0LCzJRduZXg0jWNPW4s4M45S4WbnB9CZRjTM2SagppGzRg5w3EZCA9qzGr/IEO3y9k2cpNkUuH0b5wu3AD/faqiabQ/Ttwd6bqsSBwJaCBqqkD3w5i3kENvUaFgCoTNQDTq2NfjRufQMDRex5XFbGsKSk3KzOYjDubWROFRI6MA7TUDa2qVfl4QQIIwC3s+IsG5tO42DM3ngSQuzmXnwAHB2V/uyGXjpBnRCEEEe7Y4G10vSL7HCJXsL6dWyMFVvJUCWOXnIT9MxJg2VAF+EgcV48I1j4IEIJqjgggw26OCDEEYo4YQUVrhIIAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KcSB1Rsed2CJAfnEH573QIN5+dWYt1n7+8T3WMHM+8aIdx7M7q8exPnDDc4XWYo3PemBTd3C/eV4WZBX8QDZLg5SBjxh0NtAiBYVPjjDrc+Xd5EjGOBm5WRbw5Y4abmx5ubN+OscXkAZ0weArbpiOOToB5uXDT4NKKhpbY9Gmb45BGA25Y4RnAusfIxm4AfUt+kCUAHC00Naahw6XNGR9BtDjqoVFkzh0iLtyDhtM2zB++2PXYF+GVHrrDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDMwoEACH5BAkFAH8ALAAAAABkAGQAAAfdgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvcp3BlfljdgxMH5mNn4y0Q5uZ6At1w7eYNRN1W8wcNLdw6M+0z0mTpxuXHjBkNHJDhx61LlwZ61ljI0w3Lki8S8+wZdwaODo3wxhFpsSfkuD8mT6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dIAwEAIfkEBQUAfwAsAAAAAGQAZAAAB5GAf4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxIsKDBgwgTKlzIUGAgACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAUFAH8ALBEAEwAHAAYAAAcigH+CgwKDfxUVV4IjBB6JfxwrFCWJBG1SFI5XBZwlODUCgQAh+QQFBQB/ACwTABMAFQAGAAAHS4B/giMEIiIsLIaKhgQlFVeCfwUiK1IGiJiZFBw4NQIqQisiBqSlpqRCKSOeInKnr6UMqp5tilKHmZlSWgWrApIFBMLDxMMcTEi/gQAh+QQJBQB/ACwTABMALAAGAAAHaIB/goIsg4aDIomKi4ssjo+PFDs4VwJ/loIih4eQnZ6QBqEGQilMNZh/Upuboq2ur64mBSpIAlqruLC6ulIEKhVXuLhSi1pacivJK3LGzc5aIr5IwcKbBAQF2drZKd0pHODh4R4jp3+BACH5BAUFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7tiMcvxw7wjsexcbDw8DKvynNzs8pBQXOHB4qOFevOAQsclpaIuHi4+Tl3+fo5+Xh3yIsMSYUKTWrBSIrLAb6+/ss/v78AgocSLAfCylyVsjxgIoJA3wFI0qcONEbh1Na5FDcyJHjvRSlhKzIKKekyZMoU65YuTKdS5cKpUi8x3BUtAIEclLYybNnzp8EpEmjtiwYsmTMCDDImI+gFC0jeGUqQUGERoJyjkjVxERkU4FtQG7NVGCFTIFHYmQbi4mDnK/9hrQwYUu2TUApQgjMpYtJiBwpR9rkTVECB19MFSjkLFCNCQ56hy+NsMZkRAUkNQRExoQEc40rAjRvxhRa9OjTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++fKVAACH5BAUFAH8ALBIAEgBDAB8AAAf/gH+Cg0yDfxyDO4qLhoeNj5CROyVMSJGXgiKYm5ycBkedkCyjpI2kp6Whoo0rm5qqsLGQO4+vsre3UlqIg21tuH9af3LEw4Jym8iqUn+0ggWNBLcF1CnWKYMc2tvaf9aCJraX4sDl5ufo6errgwLs6SmtjwYrzu/o8oMG9BT36kf7AhqQwsAfOiYiWAg0MECYwXMMAC4E9dBcCjkLP1U0pyKhwAEUN+IawcKMQCm/RI40YDKgiX4qb5FUGLANtpiyPGihOTBGBZyyCpgQ2EYa0FgmJA40UOMorBJyBkgd0IaX01BCAA74JOSqqhFRpZrRMsJrqBIEhJihCtPsJgEjH0qkSMugqdtNV5DgYOIhRdm7bwXU0PsTcCcBV65ACgQAIfkEBQUAfwAsEQATAEQAOAAAB/+Af4KDhIWGh4ciiIuKgiaLkJGSk5R/bSWIKkKVnJ2QHIdanqOkgiulkSung6KQrYMskh6DKSmotLUcuhw7fzu/wMB/uoIMlEy3ycrLyirMz9DR0tPU1dMMctbTr7Da3t/g4ZMG3OLm5+jp6gPq7e7v8M8Mj/GTJav1kiZHA+z5iwXa9BsgJQaSf4UqiDAzsE0BhIWEmBh4JIYAiIM8TGwICqOgI/z6HaHnMYXAgSYwebwSQwpKYx7/EDjZzwQyjxUMDBxwhEDMPxRc9rPh4qDHEgZyULQVU4jOfmYMXPTowQCKgS96eRRggKHIID9TvNh5KSYOF0r7vaDwk0CQgTltYlSIqSLpQAYPYzJIO8DGi6kYxV4dkOPFLI81XqRFYWNTTAomBqN4gSPmiBeDB5jwqVfJQL+AIe6I3A8Fg44YBVBgYCNHDiWcPeJIUYCA7QJXflZgwqSE77kxBdSogQRJhRo//whYLuBK7lKBAAAh+QQFBQB/ACwRABMARABAAAAH/4B/goOCWoSHiIl/IoyKjo+OAoMigiyQl5iZHo4MmZ6foISUoaSlikKmf3J/K6meO4MFBYMUtY61FImyfykpghx/HMLDw4QUbayXI67MiCrN0NHS09TV1tfY2c3I2tMD3eDh4uPk05bl6Onq6+ztpefu8dBH8vX29/U4Uvj8/dQv/gJmqiEQ07KAKAa9yOWPgJlBOQwUJGRiVsBvhK74g0Vo38SPIEOKPORC5MOPFglxHMmSX45ykqJp1CagBsFQJQCiSGgCXM0KTJ6BemFjJwobqGjWqKCCA4GUmAooMZrjBZNuV5imoGBDCdRHTF7kMKqEoTYkIzhQGJtDCYFLSH+IUn2BBFwFDwSK7mxL4aqiEQymGjXhC1yNFEKMkjVDIYUHFSNwjFBRwIzenUqUjNvBQDFVJTZsmAlC2oySsZ9LjLuS2bPrHLBdo2BgVpwKubJzG7XxYia5HZZ15+4qFB2H1sIVK2EAbF2JwLF1d2WwqV2NAkJQy84hhEPMZoEAACH5BAUFAH8ALBYAMQAUAB0AAAfPgH+CAlcCgoeIiX+ENUg4SIqRhI4qOyk4kYpIIx4pBEJCV5mIIzufZgNtFKOHFQRKA7E5JiOsghRHsbFHSrZ/Hm26sQZMvkK5ujYuNbYqQTnCZgW+BKi6OUG1rEgG0LpKQr4FJsIoJh6+LzbCNi++Oy8ouuYpvgywyUGQrCom3rFKVtmigE/WC22jkJj5N0AJA3FK5MVC8WKHLzPrUMizoc/WjogaNdoIZ0sJyJABbZV4kSOkRl9/CLqE+QdJEBsvaf7hYAKFzkMEfx7CeCgQACH5BAUFAH8ALBEAKgAuACEAAAeMgAJXf4SFhoeIiYqKKiYUO4OLkpOSI0dtRwwplJydhEJtA5dCI56miiNaZgMDbVolp7GGBKGsR0ewsrECL0esolqluqc7tawmL5HDnkImvwMMQsumOCKrv207054Evr9HL9uezr9/DOKdHjED6LEmNu3x8vP09fb3+Pn6+/z9/v8AAwocSLCgwXxKAgEAIfkEBQUAfwAsPgBKAAEAAQAABwOAJoEAIfkECQUAfwAsEQASADwAQQAAB1qAf4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbXyIEAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru3Khy/HDvCw8TFwMe/KcrLzMoFzDseTBWwNRxtWiLa29zd3t5a4eLZ3yLZLCxSQgUjrDUqBFIGBuj19vf4LPP7/P3+8/VEyFkhooAqARU8UND3r6HDhxD7SWlDINUVHAojaty4kcUKCqgu7hCyQo7JkyhTytGyomXLcTBjhiuphWFDFhRR1Rixg4LPn0B9EhhKoIBRo8uQKQWWgkMKAkI8inDoMQWvTCMKSFlhU6KWdlcxVSCgRd6/FULCavIg8B8LLUz/1GZiIuLIvzYg5WJSUdYfiyN6MxVY8U9K4ExHzPIDfPjSYH+MG1caEaOrgciSJ12JoXge5sySlNhdDLoSg9HzBhguPclEZxNpWUeqEcTMvgErdsiOpEKKzSOfdzMi0GafxxLCHwngPKB5m9ihauAq0Ka5ATMxkIyCnYLarBrMnRvcfjoGAe+wKFRvnrhUiupm2pjQ/YqJHDPNB7ShP0rAiyPsmTBeKyaYkJ8JDJyigoHNxTegKu/lN4AJKqCiXn7xWaUKeAA2B1sqSIQ3gBkmIJcKcRhKgYMq1El4RAzSnYKDFPg5V9Eqp0mIFypCMKiaATGqwoQBOUhYoiklvKDj/4OqEFCjhy+YYsKTZkTpChJBSDgAA0x+soMU+eXwAgewEKBkmC5oF8oVLiiBIXRXvlBkfi5oCEoKBqAZVywpnNmcDQaY6EkFRGKYlywG2CChGQl+QoGEOQSx4ixJaimgJyOsZ6MtokGaXScuKNpcDjFcYYsKckqoxKGZePDkhGTeQoGbYb4AFiZsijqAEo3eguWcf8JpSQEvoDDqC3tOx4CEKMyHyQhBzInCqrsIYIauA9hgpSVC0DpApGrqsoMJxjaHApeWuCqtCbHyooS32QYRriQM6KrEtrwwkeqBrEJSgBLlilmhWrMOgMLBYvL3CG1FGquEsLwgYUYOByNsa8YkFDBQcQ5moKcWARpXjIK2AjyCKsUHK9HlVVcEYYPI0wpRciP1VmyDGZLtADDMD8+LyKwiK+FBZgzsHDQDChciAAFGxwwaDhPDPPIL6+ygwgg44MBECkWLLOatknHQtMg2KHFzEGibYTbMDNxYGtBSe53D3FLbYMLMpV3xbtx8e/3CwLJVEMTYfW+MbnIjIFg4zDYw0O9uFcxqA8p853CvnckNMlLUcVtewKSZhy766KSXbvrpqKeu+uqst+7667DHLnvqgQAAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8kAJIIx4cwxwpxsfIxgXIOx5MFb2IAlc4HhQi2Nha29xa2d/aIiwsUkIFI9GEAjVMKUIsBvHy8/T14ywicisiBemCvyoKtKlHsCBBKW0I+LuCJOARgxAhslhBIR1AAt0yaty2Qo4WeAZZJLSIhEkxYihTnkxB4N2+kCtS+Ks0ooCUFSDrSdGCbialChilFFwhxKclD/kIstDCxGglJiIe1mtT0SklFVqE0mNxxGqlAisOeq10ROu8rmMnga2HNm2kETH/csZr6/bRlRhm59aVpESqPLp7GzHwa2CAlMCQTOQ1URRxoxpBzMgbsGKH40YqpOQ8AvgyIgID400s4XmRALwDUrdpHKoGLoGpDZiJgWQU4xTQZtVArbqf7cExCOSGRaFN6gFlS6UwbqaNCcuvmMgxc7wN9FECXhxJfcSE71YmTBw3weCUCvGpm39Xtfz4ABMqUBU/3lymqt3bUzNOhYT3ADMmkJYKaPRJgYMqsB13RAyunYKDFNSpptAqg7lHFSpCoGeYAQ2qwoQBObgXoCklvGDheqoQEKF+L5hiwopmtOgKEkG4NwADKH6ygxTH5fACB7AQYGKPLtQWyhUuKEEf/2szvhDicS7YB0oKhaWWgwtNxZLCkKnZYICAnlQAIn1VyWKADe6ZUd4nFLiXQxAHzlKijd55MoJx1U1IS19u0taJC2haGcMVtqjgpHtKlJmJByu+B+QtFCjZ4ws9YYJkoAMoseYtND7ZJZOWFPACCla+kOVrDLiHwnOYjBDEkygkuosAZmA6gA0yWiKEpAO8aaQuO5hAamoo4HiUGbCa8CgvSvB6axC/SsIApkrkygsTh46nKCQFKDGsj/GlE+kAKJTr43WPQBYiqUqAygsSyJZrLqWRUMCAvDmYMVw6BNwrLwq4CvCIoTnIq0SOvVwRhA3/xiqEwIIxXK4NZli1g5W3DbcbLSKR/qsEmEYxgLHHDKBbiAAEjOzwWDjE2zCu5uygwgg44NCOyP/6WKlVHKj8rw1KUBzE0GYE3TADeo7VccMN5+B0wS+bAHFaVzTL9NVMgxtYBUH4jHXOxiI2AnlfM20DA9vuVUGkNkCNdQ7VSunZDkK4nPXBcZam99589+3334AHLvjghBdu+OGIJ6744p4EAgAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vpNXSCopBUy/ngJXODtCKyIFx5wCNSMpQgYiKwTRmtNMKW0GBixtFNyY3uDi423b55XT1dfrLCsp75XKOxTr4lJaI/BNElChBIEj/QysECJwUo1vQlj0Y6FFRUNJODhQkNiv3EVJ1jjSO/IxkocVCf2VhCTgCMKEJFc+KoASpsxHI1iIFBfzJqMrMaTY9NlIyct1PYkqYnDUwAApShmZELrOBMOoiWoEoeq0zQ6siVRIEXnEBNhEBMKJq1fi7CEBQf8HOLU66gquAm0GyJUSA8koJUJS4KBVI67eNtBGWT0ShEAFWRTy6j1iphS4AWbamPj6igllvQO8mnI5GfErEyZAm2BwqkRqvZkTr7oM+ojFU5FBZ76nqvAR0G2unkISw4xuE21TpdUtZXAq2pNj1EA1Qovxw+5UKXl92NwpIdzNGJi+akSQ63pNeDDlGnRo2asoSHFv4oUpJejN2HdF3P17Uju8AFoOUnAACwECDuiCX6Fc4YINugnnSg0voDeAC/B5kkIQurlgTCwpJKiXDQYk5wkSBqD3gneyGAChbqx9QoF7OQThnCztgYaCCRlmMoJkejGQ3SxG0dhXJw8OGIP/XbUwYUIO7inBYiYeiLijgbdQoASNLwSUiYMvDqBEjLcgEQSUoNkgoSUFiJjDCx/exYB7O653iXlooiAlL2aEOYAN+1kixJZ61UieLjsogYKODPQIiQdm5GkClrwoQeiIQTA4iRJhKhEoL0y8gOZkU0JSgAmLDvDmbb5oqeObnEGi1aiARVNBpCjkisKbNzpCAQO65hDDY9EQAKyuKNhgApONqPCkrko4yssVQdiArJ5rLmVtrjYEgU+i12KraSJaIoucQAwoeq2lsRoiAAHq5lqrQDjgei2gQhSwgwoj4IDDN+kiy+tFHMR7L6dmBKGwGZxeK2RJ5YYrcA4Uh2uDTBIClHSFpRJ3LPALrH5UQRAGeyxwoz6NMKbJ9zJQ6koVaLmtyZ7yFpVGnNqg8846j1lAr24FLfTQRBdt9NFIJ6300kw37fTTUEd9SyAAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3JVwLR0c6QNUjXNTXQ1I0VKt9MIxXa3IsVBQQFKTslI0jlijVtUiYMFAU7TPCKR1IG/yYo7NiXiMGRfwgJEESkxB9CKUIWGroSw+G/NgUkFhoRg8VDFu80DkqxAuGANilEEjJxZMC/IzFUDvKwYoDNAVpUjEqnrxZLAy4DkorBIIaQgbJStLkpJUZIUQSWmgiIAxaSijfbKCRVAevJIzpdUVhqs58AU0pvHtHioZUKEzf/T3JAxQBu2Zyspqo9kuptXJhPT6W9aaKEqrFx2zBIdSVIS5smIqqqEeOxTZSoov4dwYqD5QFmYlQthUOKGcKSWQn53Cb1KApS4r6o4IpJjLgDTLQdNeJFXBNbXa3+G4SUGbsDbBi4Ast2jrgukIIqAfSmi92wCMS+aWY2KAHIQS+WVcHA87gUQKWobvNF2KThT77fRDmukvGzBAQ5b9PGC082HMHfC5zVwgFZWaW0yQhBoJBVcLUooURcOZhRwyZm2HCTDUGcdQsTL/CXG4SWePCCgwOgYIJ0twgx4U05EIhJDUFoaJOEu1RghohKuEYJASagGGOBuhCgBIop6mYJ+g77EUZiLjXG5Z8lFNiYnAEX9sJBkDepmNEkJXCZ5Fy/MPCiTTGOFskLVirxHzAqnIjCnCjYgN8jHDBAJwruCSOEnnsqkd4jSNRIp6DD9JbDnigo8WUjFBw5Zw5B0DZMAYDSmYOjjaQg6ZwMPDpMhoxuSoGliHAQIp3+eUhMmIsyqoQZBahQAXODjEDAqnQygF0xkTI6pw2z1igEBX+aoUSsc/aojBI2CKtpDjZUawOzw76g5jFMGCrtt4EqqIyJ0YL7LQM+JuNpuebuyQADuDZj4qfmEktBYM3gYKS1/PLbI5kyBSzwwAQXbPDBCCes8MIMN+zwwxArEwgAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29yoQhQcSN2DUkJHUgVX4wVtA1JtDCXdVzFHAwMmchzdOyb37m1SdBPi756ZNvu24ZBi5t+RF0y4sfuH74UAbkfs/WtDgJuKGA0NylHBjYIUiiZMcKsQg+IAhNwIaLxnw0WNbSxzUHQhcFuBmQNyGIio7YoLGxTNCAlV4yIuDwXvoTCRsBOTClec3nqB9J+NGDc5pUjBBElWXCVMoKDIkRNUAjv/RjTNJUQJxRwxcGwKkoNBgRIVtNrKSfHI0kwpXqwFN2IXAQZ3X8i7hMOAzgFKCujVdSVI13tKlGCiYJdmR14c1P5DwaAnJRVmLuPz4OtFaZpBwk5i8NmGaF8lXsjGd1pS6rUDpk72VXd1DsmSBJj5rIRBMBzCUWgfYOOFOEiPtWt/sRlYePEoqkMakV27kuLAkHhGn57CIwZKxNsIom4YBwb01ScYIgTkJx4DOxgTWoBKCEFSIgUokYN46hnD3oT0KfECBSmUMEIFSCCBww51YYhCDiYQZUyEAZ6oYUNBmNEQV/QxYF8ydbUoXg488hhgd/0hg4QZBupoJIq0LTNCPRBFGhkgA/Apo4JtTtLX143OjCAEAyYa2V0B06RQlw1klmkmlCqOo+aabLbp5ptwxinnnHTWaeedeOZZSCAAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29yoQgQl3YQmbVpCO+J/DCYDRyYUFd1ML2YDA20mTN0UbfYDJjH0basR44i/IzFwcEvRz58JE93W+btHgduII/UceuBGgN3BGNwE0JvYhgC3HVIm5ngxYpsAMzYmmmDAjYNHfwZabmOQ8qALbiWC5JgYIwXHjPZsBEGyDYeBoQ4rbiPAYCIKEyq2XXkR058NiNtsTvyHbpsSJROV1timwgSKiQyyTG4TgtbfSoXacLyAak+JEI5K3tpD8WKjtpddkwZZqy1FYBSQUdiQqu1sZMhK5Gbz4PZyDiVGtdG9jCKHiQJ5g9gg/ZlAPGyOSWM2Q2CHigoCqo2W/ZmeEA44rkyroFr25d8jauSW5oGrccngKginxmGv8d9MkCynVkDJ6ssMCpSQvp3ajhdKckAO7yF5+WoVCgihQCBFCRw1rrxPx7+///8ABijggAQWaOCBCCao4ICBAAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KgmQik43YMmDEdBBBXjKW0DZm1HO90CL0cDA0dtBd0lcvfu+rpRaHfvXQpuSGKY+WfGRAluBQjeOxLjCjcGJv4NaEOB24ggC/+Z8MCNgBSNJl4gjKFx475tBOz9y+ECybYaCjW6OLgtxQuNNgw83GbAhkYzDLiVyPgPhQme2pTIvGfjRY1tTEzkmClEBTcKDKhSSOF1G5IXNoQQ4KACh8VtJTsIpPDApEINAd2YMMGB5ArecUhq+B036C/hw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDi34cCAAh+QQJBQB/ACwAAAAAZABkAAAH3oB/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KhCFBxI3YNSQkdSBVfjBW0DUm0MJd1XMUcDAyZaHN07JvcDR9qo6CbE3z0hKWpwwyHFzAAhBUpU6MYOYgkcCilGxIHkioBxKjB6HCeohjqSgz6iXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnULEFAgAh+QQFBQB/ACwAAAAAZABkAAAHkYB/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMhQYCAAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsAAAAAAEAAQAABwOAf4EAIfkEBQUAfwAsEQATAAgABgAAByiAf4KDAgKDf0UfC4Z/U00dQFOGIAhRG5ECQCcAUU2YCU1uYEALMn+BACH5BAkFAH8ALBEAEgAXAAcAAAddgH+Cg38fMDAJiRmLGUAgUwKEgx8dACcnUQCamlFRPmBFMpGCC02aCKipqjQ+bh+QghmaN6q1qREbr5EPp7a+fE1AkB2Cm8bHnFEdQAsCTRt/G03THdXW101uzKKBACH5BAUFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7tjIJMAnBGcPExcYZwcnJMMwJGSALMrwyYAgAJwDZ2gBR3d7b2d3bUdcnJ911CUXSuRlQ2Qjx8vP09fb0UBdgIOy2Ux3w7gkceM/Hgw9TBNgCYY2gw4cIaDjZgFAhLSDYwGncqG0IR23eQjapWCtBEzcbNjRZ2aGly5crY25A6aammwc4wejcufNZQl5AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dwIOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrFhwIACH5BAUFAH8ALBMAEgBCABEAAAfmgH+Cg4SFhoeIgjAwYI2OD5APYAkJQCALMomFUINRUZqghicnAFEAp6ipqRgdGZpJobGaCLS1trc3N6h1U4ZNssCJt8PECAAIC4Q3wcyFxc+2ADfJzdWGpqrH0MYIvX8bf78dHZrjg03gG+p/boKR7/DvGz6o0AAX1vmJAiBuujfPAIDRR/DQAjeloChcqPBGFGoFIwr6cAoDw4VRwEncWCQJgIsIoESps7FkEU9Qail0orGkxAxRFvLx0cENEJclm7Dq0ORBhg9FcG5c8CBBBktFpmQSKnFBkQVKZQgQwHTj1KmDAgEAIfkECQUAfwAsEQASAEQAIAAAB/+Af4KDf1OEfwmHioOJi46PfxkfRYaQhwiDAJabjpqcn398oKOkpaanqIqYqayfq62whDeQUH+zghl/bn8bf01NkL+DG7tuxn8Pg2DLzM3LhBex0qAff6/T2I69j1Ge2dK1igC737AYiuFO5dhQ7YJREevZ7VBR6vKtF1H07fb4rUAA8Kt37x+qBTf20fNnMJU+flF8NEzVgQaGixhoSJx4qiLGjBs5lvKIkUY8kaRk+LiBMUIUYChHFdl3MQIUACBijkoQ5eMNcjo5CfBhEUMEGlFkBP2UgQYUjACALBXaQaHLOlM5FelwwSYNAEWybgKR4UETfdvEPhIwpciHDG4WNihVu1aAjLYfKtGFJMDu3L2bBCwKBAAh+QQFBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7ZTCTAJwQkZxMXGxsLJwTDMzGDP0A/SD2DBGR9FU64yYDQAJwAAUeHhUebn5OTm6eMn7u7p8fIAGB0ZqxkY4Qj8/f7/AAMKHNjvxg1ydRacmtJkH8GHECMKBIBAISkQCChK3MgRIkWLoYCAm0dS3pCS5c6pnHeDIBQAN7SFStDEzYYNTXJ22MmzZ86fN4PedONmmtGjRzdcIEcQwAVemUC4OdhyIhiomRZsEAelq9eu40BitfRh3NevANyMzVQkCYCzYP+drGVrDm4UPnMzZYhiV25eTBf4fo3i96+lvWcJG760wODgwospBX4c2VIHGhgyY6Dho3Kly5o3d/Y8qcON0DTwko4kw8fpzBGiNFkdqchb2C9B0IaUIEroG2p3P3JCIwKGCDSiyBDuCMjtzACAMG8kAEHx41GeTmcEhl7ml0W2LypyAoHxCDdmi1dk+nxGsesLiYSiGcDV+IcEQLlxngaN5fgZksAJoQFwT4CFTEHReVGMhiAhW2mW0QcPElJEDwjwgQEfUdRRISEdRBHBiBgModuHf3wwxHEjyoaiID6IOOJLMn2YwBAjjjjEAy/KMERxI9JwA4AfgoFjjga+eCGhFDly9uIfHQCQY4kUoghCDzk6AYB6KMboRAROlFhjhTd+qaN0KCoIxZfEQSHAixsQluMQVX5YhG9sDrHBk5exCUUP8CH4AQB8NHnfhwL4ACRyPryJYgY0OMHHlwjUWaEMD+jUwQWHfjjFB0BkYI2jKMowxQJFFAECkYgK4KoMMpD65Ky01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCYbSyAAIfkEBQUAfwAsEgAUAEMAQAAAB/+Af4J/SYOGh4iJiouMgx1TjZGSk5SElZeYlTeZnJQIlR0bf01/HR2GdYemg6SHopRubn8+nbW2Ah9/n7a8vb6/jACMr8DFxsfIycrLzM3OxlHP0tPU1daYNIcR15TZ3N/g4YgC4uXIhebp6uvs7e6YCe+J5PJJ6PJDfxj68v2Sp+0E8PFnSBjBPwYPKhS0T1A0fAsHbXsnMKKhHgt3EUz4biKAVgchLRNAj9NEJwAeMBMgY4GMTk7+OLkxURnLBR/AFLmUQFjMPxhHtvyQoIkPEJQWAMDgxIkPGgCVyZiSs8kFBFEWTOpww0dTDAh2LpMBoqgPPk9vIG3kJkrTpgiYVDKTAWTDBT4RnEYBkOClogcA8jaFgkEkswx1fAgeHOUCmAwfikguAqQDgLdwMzxb4AQK5qZPo2AFgABrFBpe3yJIJS0Bgs+fI2CYzfQzWLHSLkRJDbs3ZgRgqslwMsQHb99vjSMASW14lAjHfZ+9ccGvNRlNTvNB7gTDXjfWuX3oIBpK6fMIzEdpsrYciAwJMsifHx+3r0AAIfkEBQUAfwAsFwAwACQAIQAAB/+Af4ICgoWGh4iJiQIyMoqPkIYCjAsgH4SRmYcyU0UfCRtumqOCUyAZbh0XNA+kmlOgF3wYCEMLrpECbhF8UBgRUR24kRk0vxHIABnDjzIRNMjINAiOzIlAQ8fJrdaJq9ERULbdiCBDUNFOURfkiE0A4BhDH+2GCwDoyE40Ppj1f2CiOEkHIME/QTIw0BgYwQkCGtX+AYkCzgmADQcF1VmoT16RjEUAaNtXJ+OfJgLBzcu44BzDfU781QMzhGHDIRgPCoiCwIlPn8oyfujx04kPKCc+/hPg44aPnz7+DAHZo+HPPzdMPhjy1KdJhEMWOvlaCEQPPmQNbY2attDUtoIGosDtBiAQACH5BAUFAH8ALBIAKgANAA8AAAdpgEVTf4SFhn8+CBtAh4YdUTc3Fx+Nf0BRGBhRURuVF1EREVBRHTKHRQBQoRgAPqaGDwARGLMAHYcyCKC0EQAPh0CpmaIAlI4AGElJGJGvhAsnCJmZAG6HbqChoo0yNzTalYRDEeGFSYeBACH5BAUFAH8ALAAAAAABAAEAAAcDgH+BACH5BAkFAH8ALBEAEgBEAEAAAAdfgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvcyoEAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru2CwlgCcEZw8TFxsHIyDDLzGDOzw/RzgkZQCALrwIfHVFRAN/gAN3j4eDe4VEn6uvl7egXG0WrAiAbPgj4+fr7/P3+//lunAOQQdWUDxucAFzIsCE/AEMeoBIwBUhChxgz+rsR8RRFIE26uXM3ZCS6cSjdLeQI5pSMIhY7yKxTR6bNDk1yNtnAsydPN9GCCh3qpmiHG98AcvzAC9OCDB2S+vs2pWkmID4AIIDCtStXAG6sZpKxQavXrt6wicX0IMrWs1D/ACRYm2lDFLhQonSgm8nH3bN3+WIC8tdrN8GYnBTmSiMK4ktuAJxt/NgSEMmGb1SuBIQGFAygMXjeTOmD59Ci95KWBOTGZ9ARokhcHSkDANRx5dGG1ORG6Ag3muyGJEM0bAQ3dA9vRPg1higtQ01RXstvBAyxnQgQdbkDGLWybIeGMoSpqA9RaNyg8UBGLBnrr8dWLUrAhSgRGjsx76rscQDUhfKBZBHEFgUQroBAIHbBndIEAPLRQFArdeCHXWNVmTLFEFBEWN4qtjknVyoZDPGbhOCZIoMXNESIwXapWAebXqm4cQJqURSkioIIJOFjEgBEV8oCANzgIwYA+NBK/2R8hIZAFCmK8mCTGMTFn0EcFlhgFMKRomCHBQJAHysZ9KBlBHmBQMoFEBaIwRBquiIADS1qScOL55mpZUewXHZmBEPo+IkM+GiJwBAZwmKdluQl2kkCQ2jJR5CzDIjdnht8MgUAdeaHgXuzcHPmm3FyEtKZACBIywJZahnFBZ0U0QOYscFqi11/5sgJm04USF6AssjAVa8RKBQFqJh8EGmBToCVSwZREBvmXJjIQAMCvSqGALK2COAEDcQ68WaUk0AqbaC7DHhms11WsoBn2dJg6y4PShsBAFdK0gS4ewJ7SxG3hXvDvJKAEMWlzWZqVWT2TjjJBfw60ahY8EERLukUPZDLiJ97CmoVED344MTI93xKXBLYjkwDHzCKJQAfUYg8MruQPADAzDCXuhYIPfAx88jONqJgsU7c0y5f3Mg88r0btIwIkQjIXKXGVk0x688jv6pzIUV8+zMCQiJmLtY+NLZBAkAUofYCIICRntLYcovYBUMojXN6h94l4V0/R4CAqpttGDXWff9GOAJHb8YzFHYT7rjEGDhKWpkYNP44yVAgkO9qIA9+Ocll3+DxcJ259fm3NwO+nCBTgIGBawgY8qQTCci9OutAUHPIB7bf7vvvwAcv/PDEF2/88cgnr/zyzDfvvFiBAAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7yPAlNFQAnDCTDGx2DJyg/MyQkZQCALvYgCC0BNUVEAAFEn3+Dc4uPk3RcbRdSEMkUZHVAI8fLz9PXyN9vcGep/AjIgYOrYG0iQHoAhD9T5A3iBRsGHA28gpLbQDY183LRp1FgOwEOJYChO+ZDggRtmKFOmdMOyww1uBSV+4EdpgTuYA7lNoVkJiA+PUIIKDQrADc9KMjYAHRp027SjlB5EQcCUaAKolTZEqQolSgeslXxsZboVLCUgY4dqM0vJSdqgF//ZTnIDgGlcuZGA1FV7A29eGlAwCMYA2C+kD4AHE/5q2BGQG4EFR4iSsHGjDAAUQwGQzjKjJjcGR7jRxDMjGYQlI7jR2XQitJExRAkZChgusREwTHYiQJTeDmCeysI8GMqQmaI+RKFxg8YDGbFkNM89mbEoAReiRLjoBLkrpao5l/pQN8LkKEBcgSivm/SpJgCo0wCwj1Ud7bov7jQ1ZQgU+cetgllsAFyFSgZDiDafcKbI4AUN8mHQWyq4SeZVKm6coFgU9aWyHgJJhJgEALSVsgAAN4SIAQA+tEIXH4MhEAWDosAHIwabeadKf/+ZN1lppKzXYwQAWMdKBj34GEH/VyCQckF85mEwRJOuCEADhD7SIGFySfo4ESx6KRnBEB16IkM8PiIwxH6w4OajcWx2ksAQPvJB4izk6eblBp9MAQCW22EA3SwdaOejlFRyko2SAKRHywL+KRnFBZ0U0cOQk96ilZgccvKkE+YZ1xotMgQFagROyDgoJh/QaZ4TReWSQRSnmldgJjI4BKpbCKxqiwBO0HCqE1LSOMmctZK5C3lKwgpkJQsAtisNlPICX61E6ihJE8J6OWouRWQ27A3VTgJCFHrCyic1dGFLHyUN7QqnOtJBMSwUPRjLSJheltkLED344MTAPiAgKCQyJIHAwMHyMaFCfEQhMMMAPNvIwgMAMBxxovyA0AMfDA8cayProepEwRbTVOjEAxO5wcOInIjAxDjqS80Ul4Y88KQcF1JEsCEjUCJUyOrsw0UbJABEEUwvANByLC/sK1QXDMGyxsupudV8W4UcAQKOmtXfzDp7LVrZCKQMlsdQXF32204EFidbSGLgNtwEw6OtXACTjTfBR9/gr19AXLTw3/M5EbZnU4CBAWQD0ZrA1KZNIUwGmGeeQQIfUO7a56CHLvropJdu+umop6766qy37vrrmwQCACH5BAkFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+kgJTIGBNG0W/ngILQE1RUQAZyJwCRRkdUAgAQw/SmjJFCR0I4zdDYN2Y3+Hj4zTm6JbU1knsCOUf8JTKzBH12UNT8k2a8uHBBWxQEkIB4EYgMHAdIihM+GyBw0gyMjRxMjEhgAQXI4G4gKEjlCgdQkZqZjIKFJWQPkSh0dEZTEhOXE6kEeXmIzcAOvL06QhI0J03iDYCQhODUww0lTL60PQpjZRSFQG58RRDhCjcsibKwPXpwmNiETUp6/VGk7SI/2RAddrvBlq4hYC4fApW1JS7tXxEieA1ipNRGQB0AGNxVmKzQ/CJkknjBo0HMmLJsEz4K1ZRAi4M5ulEsqsNAOhmAxzqQ9AIX6NEawXideENp5oA6EwDWqs6g73yDGhqyhAovCOvSgzl6cdUGYY8jdC78SkZXmh0jsJHgCrBhAt/NuXmRFfZq2ojeJoEwDlTCwCsdwrARyugfJzyQRDF+ijd+fGxkGmqyOASbLBF8RYptSEHm2KvZNADgoQBQCAoF+wGGwZDsFbgTBTS0N1kPXgF2xC4wWKUiSfO9okM4yCIAECygIcgFDR+ksAQCPLh3iyusRgBip9MAYB2sNGAgf93s3QwGIIcguCJkxQCAEQtRRxHYRQXdFJEDw5+1aUtGzyJIHqbZOgEbDh6GMsUCa0ZgRM8ZZbJBxPC5gQAKd6SgZkPgpROFAismRMCdt4igA80yOkEh/5RAsYQcg7pIi6uUbjngpUsQJOhNIy5SzOVRmChJU5W2mEvRQTl6A2iSgJCFCbu2ScvQJUahaCSXNDonAsR14sMruoJRQ+RLqVhi9IA0YMT0DrhAwJ8JNqIXIVCKyKTvwiQkw/RbgrJAzdE66OU3YDQAx/h7tlQI7XNKS0CnHbjJLjRmroBt4gsQCi+JSX7yxRgtrvnBegeUgSd+DqBwHv57Ggwo1FskACGEEVkvMAwMzWMgA/WwnPBEA2bO9OMtPZGa7j9XHkRwR8bbG5JXhlML0zqQlGyzDKvJ2xIzmKwM8/Q+oDNhUD3QIMPQ7fL9A03XHoTENlkS3RvPiB90xRg8EGTP+yUm0DIUk0BRAIZpK12Bgl8QDZecMct99x012333XjnrffefPft99+5BAIAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzLECzZYCMtPTAs/QjQIg2yBFC9XYjEAPYGAZQCDf4YsZUBd1HRtgQEXrikBRUFAYPvFA9ok+0NCnD4OTBwARCdyHAQOUKBsSHvpwg2HDKAglFspwo2FDKDdAaCy0oWPDCDc6jCQkAwONkwhuLFg5KEMUjxiigBE1pd4tH1EiYIgQ9BqoDAA6gJk5CwgAj1CGfBj1IQqNGzQeyIglA6tQoipHCbgQlAYAJ1NfbXj6EYBPqgD/oEQgGiWDKxBxhfKBeKoJgK9m7bKqE3QogihTTk0ZQgPwEJGqkFoEkCBVArZDzTI9JcNL46E3t6YCKhT0hVRuTkCN8k8VXgRJYiehfGrBCdixAfho5QYAH4+HN49qMuS3QwBpV03JOzcCgCal8Mqdm/RVhh7NhSInRbY5hiFvWQkA0Lg5DT5GP33A3hxARFhOs0cYUhmUDBoImkdNHIu0/iH8eZLAENkBsJMsHzyV3RDvdbJcfnO9JJosHfzl3WOeNBHUXBgA0NosCwwx3VxR+JAeJkX0MGIUp9mywYbN1cXJBWdxCN4tUwzkxFxOQEHDhJes15wT7uWSAIzUHXiJ/wD47ehEFEmcSIsAPtCwYwROfCccJWDUONcQH+KSYHZEQmfJAjpiScNuvHRww5XUQUaJhk7OF14uRTx1pRM3tDgJCDfxWKQvD3hJomCSXGAlllAAECAvMsS1JwY9bNlIfDwOgagvQPTgxKdO+ICAE1IqIgMCUIB6Xqm7POkDqGVCUiioe8kJzHp8wEqkG47ghWWoCJg5TAclwurcBqwOsgAACLyaJRSW/jKFiroSWYethRRRpbNOIKAkMQNWWyVECWTQTRFFfNBlsZ+OCiQxFwzBLa1WITBEPmblYywCYRaz2JrVglraUNXSICwyIKg4b8AB6/MoMtdBsTDDn/oABUwCyS3TabMT6+qDDzfcsCkzQNAQxagUd6tbv81MAQYfAyEg88wyW5nAu+FMAUS5GfTscwIf4EzT0EQXbfTRSCet9NJMN+3001BHfXQgACH5BAkFAH8ALAAAAABkAGQAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvcpxkAF2AL3YIfUTQ3CA9T3QIXURE0UXwf3R8AUBERUVFA3U0AImCINyQDtylD8g2kMQQEtwxDMEiMB2DcNh/wJka5wA0EAARJQiYBkICbGwASJSKIYjGbjCj59DkB0OFhD336MACop03AOZzx+AjYBiQg0ILcMAKFMoQdqKG47g3EOWQDqAVToN7qAA8nhiE8OYHIsECG1lpF8AGN4qNTkQsP/z6UPUtrQxQnaw1uetckAYisuKbQgII3gpOVMjR9iOhjA5AidGll6IoTAJhMMmgg0NfhQZFdPmgUdsK0ZSUwAPBi8NHEaa57QGc2ubRgcGEal3k1uQsUgMNKu/GSpvGZV1rCMm9wpAQiylQnNNz8OllYHwC9ki6INgwFimteMm4g597DtKOiQBGUBJahhw8n8H0gcBJZkQwM8+EjWA5MAB+28MEXxWyPuHFDgHwgEBYwIPTAR4DwASBdIx4Zph+Bw3D1XoARALBBfYQs8NGGGEBhHjBT9EAYhDPV8dshRYS24WG5FZPAECw6EVoUGySQAQhFBPkBagDCB4UPiR1zwX4QM3J4DgJDwEQDADBBGAEC/iCTIg1NsijQRDkigCEyDR6Z45ksQoHBd8i0txqaZ/oAhYLOANEDAj50mWOeN9yAXTNAIPARnPoB4EOW0EwBRjxzIuDoowiIlkCS00wBhI8ZZKppAh9QSs6noIYq6qiklmrqqaimquqqrLYaSSAAIfkECQUAfwAsAAAAAGQAZAAAB/+Af4KDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29ynHx0JRd2DQAA3N00g41M0UFBRAGAC3WAAGBEIURdT3DIYUREi/EuygNuHIVAw3IuSRAa3JgAE3gPQgdsUADQEBgTwgFsCAAkVIgCgbtsFewoxAPDBDcSQewH5AEjAbUPEgBFoRHGobUEPKDgjRGnyECBODENKZrsIFKc+bg9u4hySYZsMBBlx0gDAMxuQl0GjbOB2gYYTnO/EaQMRBWYEJzTTLjw0GzTptgXtzr5FAGWeNjBR9L4FUFWbDCgI9DqBcoOftnJBnQAYa/KG4H9qs7mMTAPBwyFOQoeOZ/Wn6NBUt4Hp4UO0jyQktQnA2Dq0DwQnlF4D0eOtawSps9VZeXoxgDpAijimJgNj8dD5aPhokgCEDL/QgPR4LtodlCZApmCH9mA797fgrI+H5mSIj9qi+fjYAGRBV2kCLoCGz8dJevHWCNBEFN4lVMcDH9i33jQZXOBDHR1sAEaC141j4YUYZqjhhhx26OGHIIYo4ogkluhIIAAh+QQJBQB/ACwAAAAAZABkAAAH/4B/goOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3KcZABdgC92CH1E0N1APU90CF1ERNAB8H90fAFAREVFRGd1NACJgiAfA37YpAGgIjDek3rZvGCISHLfNBzyJUS5wAzEEQZKPSQCA4eZmXkQMCKJQzCYjSj59+5pwy9ADpkAAILYJOGeTBh8BD+fZHGIwmwCLNqEMWYnt3kCYQzZw6wAPJoYoObUtGPJSH40O3DbcsMrHR5GDCBAIdNJhg0NtGUloOLnQ5AGQIkC3NanjJsGHIlPyapuSAAiIBTIECNYmA7FicoIeQ55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurVrzoEAACH5BAkFAH8ALAAAAABkAGQAAAfqgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvcpx8dCUXdg0AANzcb4t1TN1AIUQBgAt1gURgRNFF1U9wyGFERImCgcUEGtw9DoGCAAoVGgm5NACz00QQMv20LANCgmADEgm4JojRJ8GGBjHncEnSccnLcnyIsUboUINOlzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdOjUQACH5BAUFAH8ALAAAAABkAGQAAAeRgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcyFBgIAAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQAh+QQFBQB/ACwAAAAAAQABAAAHA4B/gQA7\\\"></div><button type=\\\"button\\\" class=\\\"overlay-close absolute\\\">Close</button><div id=\\\"search-container-main\\\" class=\\\"full-width\\\"><input id=\\\"search-bar\\\" class=\\\"grey-39-c text-bold full-width text-uppercase padd-0\\\" type=\\\"search\\\" placeholder=\\\"Search...\\\" autocomplete=\\\"off\\\"><div id=\\\"search-results\\\" class=\\\"absolute\\\"></div></div></div><script  type=\\\"text/javascript\\\">var url_searcher = \\\"https://xceed.me/api/searcher\\\";</script><main><div itemscope itemtype=\\\"http://schema.org/MusicEvent\\\"><link itemprop=\\\"url\\\" href=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><figure id=\\\"cover\\\"><img height=\\\"500\\\" width=\\\"1350\\\" class=\\\"height-auto full-width\\\" alt=\\\"Cover F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/f_auto/v1464098101/events/cover/e0e1b7d7b5fb44d760e3c7e46fb127.png.jpg\\\" itemprop=\\\"image\\\"></figure><div id=\\\"buttons\\\" class=\\\" col-xs-12 col-md-6 clearfix\\\"><div id=\\\"share-dropdown\\\"><button id=\\\"share\\\" class=\\\"btn dropdown-toggle icon-share\\\" type=\\\"button\\\" data-toggle=\\\"dropdown\\\"></button><ul class=\\\"dropdown-menu\\\"><li><a href=\\\"https://www.facebook.com/sharer/sharer.php?app_id=276305832527334&sdk=joey&u=https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt&display=popup&ref=plugin\\\" target=\\\"_blank\\\"><i class=\\\"socIcon fa fa-facebook-square\\\"></i></a></li><li><a href=\\\"http://twitter.com/home?status=https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\" target=\\\"_blank\\\"><i class=\\\"socIcon fa fa-twitter-square\\\"></i></a></li><li><a href=\\\"https://plus.google.com/share?url=https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\" target=\\\"_blank\\\"><i class=\\\"socIcon fa fa-google-plus-square\\\"></i></a></li></ul></div><div id=\\\"date\\\" class=\\\"addeventatc\\\"><span class=\\\"start\\\">06/10/2016 23:45</span><span class=\\\"end\\\">06/11/2016 06:00</span><span class=\\\"timezone\\\">Europe/Madrid</span><span class=\\\"title\\\">F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt</span><span class=\\\"description\\\">Every Friday is the Unexpected Night with International Guest Dj&#039;s at La Terrrazza</span><span class=\\\"location\\\">La Terrrazza, Barcelona</span><span class=\\\"all_day_event\\\">false</span><span class=\\\"date_format\\\">MM/DD/YYYY</span><p><time itemprop=\\\"startDate\\\" datetime=\\\"2016-06-10T23:45\\\">\\n                                                          Friday, 10 June 2016\\n                                                      </time><meta itemprop=\\\"endDate\\\" content=\\\"2016-06-11T06:00\\\"></p><p class=\\\"small\\\">\\n                                                          From 23:45 to 6:00\\n                                                      </p><meta itemprop=\\\"doorTime\\\" content=\\\"2016-06-10T23:45\\\"><meta itemprop=\\\"duration\\\" content=\\\"T6H15M0S\\\"></div><div id=\\\"join-inner\\\"><button id=\\\"join\\\" class=\\\"actionB\\\">JOIN</button></div></div><section id=\\\"info\\\" class=\\\"col-xs-11\\\"><h1 itemprop=\\\"name\\\">F.U.N. at La Terrrazza with Cristoph | Neil Daruwala | Jade Rolt</h1><span class=\\\"location\\\"><i class=\\\"icon-location-pin\\\"></i>La Terrrazza - Barcelona, Spain</span></span></section><div id=\\\"tags\\\"><span>Tech house</span><span>Deep House</span><span>Tech house</span><span>Deep House</span></div><div class=\\\"grey-line-separator\\\"></div><form id=\\\"bookingForm\\\" method=\\\"POST\\\" action=\\\"/bookingManager\\\" ><div id=\\\"tickets\\\" class=\\\"col-xs-12 col-sm-10 col-md-9 col-lg-7\\\"><div id=\\\"titles\\\" class=\\\"clearfix\\\"><div class=\\\"col-xs-5 col-sm-7 col-md-8\\\">Ticket type</div><div class=\\\"col-xs-4 col-sm-3 col-md-2 price\\\">Price</div><div id=\\\"quantity-t\\\" class=\\\"col-xs-3 col-sm-2 col-md-2 quantity\\\"><span>Quantity</span></div></div><div id=\\\"data\\\" itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/AggregateOffer\\\"><meta itemprop=\\\"lowPrice\\\" content=\\\"13.00\\\"><meta itemprop=\\\"highPrice\\\" content=\\\"230.00\\\"><meta itemprop=\\\"offerCount\\\" content=\\\"5\\\"><link itemprop=\\\"url\\\" href=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\"><div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\" class=\\\"data clearfix\\\"><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#MasterCard\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#AmericanExpress\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#VISA\\\" /><div class=\\\"type col-xs-5 col-sm-7 col-md-8\\\"><p itemprop=\\\"name\\\">\\n                                                                                                                                                        Guest List\\n                                                                                                                                                </p><p class=\\\"small\\\">+ 1 Copa Inlc. hasta las 02.30 / 1 Long Drink Incl, untill 02.30</p></div><div class=\\\"price col-xs-4 col-sm-3 col-md-2\\\"><meta itemprop=\\\"price\\\" content=\\\"13.00\\\"><meta itemprop=\\\"priceCurrency\\\" content=\\\"EUR\\\"><p>\\u20ac13.00</p><p class=\\\"small\\\">Pay at the door</p></div><div class=\\\"quantity col-xs-3 col-sm-2 col-md-2\\\"><link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\"/><meta itemprop=\\\"availabilityStarts\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"availabilityEnds\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><meta itemprop=\\\"validFrom\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"validThrough\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><select name=\\\"rsvp_option_sel_27356\\\" id=\\\"rsvp_option_sel_27356\\\" class=\\\"form-control rsvp_option_sel\\\" data-type='GUESTLIST' data-rsvp=\\\"27356\\\" data-price=\\\"13.00\\\" data-fee=\\\"0.00\\\" data-currency=\\\"EUR\\\" data-email=\\\"0\\\" data-door=\\\"1\\\" data-idreq=\\\"0\\\"><option>-</option><option value=\\\"1\\\" >1</option><option value=\\\"2\\\" >2</option><option value=\\\"3\\\" >3</option><option value=\\\"4\\\" >4</option><option value=\\\"5\\\" >5</option><option value=\\\"6\\\" >6</option><option value=\\\"7\\\" >7</option><option value=\\\"8\\\" >8</option><option value=\\\"9\\\" >9</option><option value=\\\"10\\\" >10</option></select><p class=\\\"small closing\\\" data-show=\\\"0\\\" data-tz=\\\"7200\\\" data-time=\\\"2016,6,10,23,45,00\\\">Sales end: Jun 10, 23:45pm</p><span class=\\\"ticket-confirm\\\"><span class=\\\"ticket-confirm-inner\\\"></span></span></div></div><div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\" class=\\\"data clearfix\\\"><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#MasterCard\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#AmericanExpress\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#VISA\\\" /><div class=\\\"type col-xs-5 col-sm-7 col-md-8\\\"><p itemprop=\\\"name\\\">\\n                                                                                                                                                        Ticket    \\n                                                                                                                                                </p><p class=\\\"small\\\">Early Bird! - Long Drink incl / Copa Incl.</p></div><div class=\\\"price col-xs-4 col-sm-3 col-md-2\\\"><meta itemprop=\\\"price\\\" content=\\\"15.00\\\"><meta itemprop=\\\"priceCurrency\\\" content=\\\"EUR\\\"><p>\\u20ac15.00</p></div><div class=\\\"quantity col-xs-3 col-sm-2 col-md-2\\\"><link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\"/><meta itemprop=\\\"availabilityStarts\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"availabilityEnds\\\" content=\\\"2016-06-09CEST14:00:00+0200\\\"/><meta itemprop=\\\"validFrom\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"validThrough\\\" content=\\\"2016-06-09CEST14:00:00+0200\\\"/><select name=\\\"rsvp_option_sel_32080\\\" id=\\\"rsvp_option_sel_32080\\\" class=\\\"form-control rsvp_option_sel\\\" data-type='TICKET' data-rsvp=\\\"32080\\\" data-price=\\\"15.00\\\" data-fee=\\\" 0.99 \\\" data-currency=\\\"EUR\\\" data-email=\\\"0\\\" data-door=\\\"0\\\" data-idreq=\\\"0\\\"><option>-</option><option value=\\\"1\\\" >1</option><option value=\\\"2\\\" >2</option><option value=\\\"3\\\" >3</option><option value=\\\"4\\\" >4</option><option value=\\\"5\\\" >5</option><option value=\\\"6\\\" >6</option><option value=\\\"7\\\" >7</option><option value=\\\"8\\\" >8</option><option value=\\\"9\\\" >9</option><option value=\\\"10\\\" >10</option></select><p class=\\\"small closing\\\" data-show=\\\"0\\\" data-tz=\\\"7200\\\" data-time=\\\"2016,6,09,14,00,00\\\">Sales end: Jun 09, 14:00pm</p><span class=\\\"ticket-confirm\\\"><span class=\\\"ticket-confirm-inner\\\"></span></span></div></div><div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\" class=\\\"data clearfix\\\"><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#MasterCard\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#AmericanExpress\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#VISA\\\" /><div class=\\\"type col-xs-5 col-sm-7 col-md-8\\\"><p itemprop=\\\"name\\\">\\n                                                                                                                                                        Ticket    \\n                                                                                                                                                </p><p class=\\\"small\\\">+ 1 Copa Inlc. / 1 Long Drink Incl,</p></div><div class=\\\"price col-xs-4 col-sm-3 col-md-2\\\"><meta itemprop=\\\"price\\\" content=\\\"18.00\\\"><meta itemprop=\\\"priceCurrency\\\" content=\\\"EUR\\\"><p>\\u20ac18.00</p></div><div class=\\\"quantity col-xs-3 col-sm-2 col-md-2\\\"><link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\"/><meta itemprop=\\\"availabilityStarts\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"availabilityEnds\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><meta itemprop=\\\"validFrom\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"validThrough\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><select name=\\\"rsvp_option_sel_27355\\\" id=\\\"rsvp_option_sel_27355\\\" class=\\\"form-control rsvp_option_sel\\\" data-type='TICKET' data-rsvp=\\\"27355\\\" data-price=\\\"18.00\\\" data-fee=\\\" 0.99 \\\" data-currency=\\\"EUR\\\" data-email=\\\"0\\\" data-door=\\\"0\\\" data-idreq=\\\"0\\\"><option>-</option><option value=\\\"1\\\" >1</option><option value=\\\"2\\\" >2</option><option value=\\\"3\\\" >3</option><option value=\\\"4\\\" >4</option><option value=\\\"5\\\" >5</option><option value=\\\"6\\\" >6</option><option value=\\\"7\\\" >7</option><option value=\\\"8\\\" >8</option><option value=\\\"9\\\" >9</option><option value=\\\"10\\\" >10</option></select><p class=\\\"small closing\\\" data-show=\\\"0\\\" data-tz=\\\"7200\\\" data-time=\\\"2016,6,10,23,45,00\\\">Sales end: Jun 10, 23:45pm</p><span class=\\\"ticket-confirm\\\"><span class=\\\"ticket-confirm-inner\\\"></span></span></div></div><div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\" class=\\\"data clearfix\\\"><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#MasterCard\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#AmericanExpress\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#VISA\\\" /><div class=\\\"type col-xs-5 col-sm-7 col-md-8\\\"><p itemprop=\\\"name\\\">\\n                                                                                                                                                        Bottle Service   \\n                                                                                                                                                </p><p class=\\\"small\\\">Prive\\u00e9 on the Dance Floor for 5 people - 1 bottle inc. + soft drinks</p></div><div class=\\\"price col-xs-4 col-sm-3 col-md-2\\\"><meta itemprop=\\\"price\\\" content=\\\"200.00\\\"><meta itemprop=\\\"priceCurrency\\\" content=\\\"EUR\\\"><p>\\u20ac200.00</p></div><div class=\\\"quantity col-xs-3 col-sm-2 col-md-2\\\"><link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\"/><meta itemprop=\\\"availabilityStarts\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"availabilityEnds\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><meta itemprop=\\\"validFrom\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"validThrough\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><select name=\\\"rsvp_option_sel_27353\\\" id=\\\"rsvp_option_sel_27353\\\" class=\\\"form-control rsvp_option_sel\\\" data-type='BOTTLE SERVICE' data-rsvp=\\\"27353\\\" data-price=\\\"200.00\\\" data-fee=\\\" 4.99 \\\" data-currency=\\\"EUR\\\" data-email=\\\"0\\\" data-door=\\\"0\\\" data-idreq=\\\"0\\\"><option>-</option><option value=\\\"1\\\" >1</option><option value=\\\"2\\\" >2</option><option value=\\\"3\\\" >3</option><option value=\\\"4\\\" >4</option><option value=\\\"5\\\" >5</option></select><p class=\\\"small closing\\\" data-show=\\\"0\\\" data-tz=\\\"7200\\\" data-time=\\\"2016,6,10,23,45,00\\\">Sales end: Jun 10, 23:45pm</p><span class=\\\"ticket-confirm\\\"><span class=\\\"ticket-confirm-inner\\\"></span></span></div></div><div itemprop=\\\"offers\\\" itemscope itemtype=\\\"http://schema.org/Offer\\\" class=\\\"data clearfix\\\"><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#MasterCard\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#AmericanExpress\\\" /><link itemprop=\\\"acceptedPaymentMethod\\\" href=\\\"http://purl.org/goodrelations/v1#VISA\\\" /><div class=\\\"type col-xs-5 col-sm-7 col-md-8\\\"><p itemprop=\\\"name\\\">\\n                                                                                                                                                        Bottle Service   \\n                                                                                                                                                </p><p class=\\\"small\\\">Prive\\u00e9 on the Backstage for 5 people - 1 bottle inc. + soft drinks</p></div><div class=\\\"price col-xs-4 col-sm-3 col-md-2\\\"><meta itemprop=\\\"price\\\" content=\\\"230.00\\\"><meta itemprop=\\\"priceCurrency\\\" content=\\\"EUR\\\"><p>\\u20ac230.00</p></div><div class=\\\"quantity col-xs-3 col-sm-2 col-md-2\\\"><link itemprop=\\\"availability\\\" href=\\\"http://schema.org/InStock\\\"/><meta itemprop=\\\"availabilityStarts\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"availabilityEnds\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><meta itemprop=\\\"validFrom\\\" content=\\\"2016-06-07UTC10:56:18+0000\\\"/><meta itemprop=\\\"validThrough\\\" content=\\\"2016-06-10CEST23:45:00+0200\\\"/><select name=\\\"rsvp_option_sel_27354\\\" id=\\\"rsvp_option_sel_27354\\\" class=\\\"form-control rsvp_option_sel\\\" data-type='BOTTLE SERVICE' data-rsvp=\\\"27354\\\" data-price=\\\"230.00\\\" data-fee=\\\" 5.99 \\\" data-currency=\\\"EUR\\\" data-email=\\\"0\\\" data-door=\\\"0\\\" data-idreq=\\\"0\\\"><option>-</option><option value=\\\"1\\\" >1</option><option value=\\\"2\\\" >2</option></select><p class=\\\"small closing\\\" data-show=\\\"0\\\" data-tz=\\\"7200\\\" data-time=\\\"2016,6,10,23,45,00\\\">Sales end: Jun 10, 23:45pm</p><span class=\\\"ticket-confirm\\\"><span class=\\\"ticket-confirm-inner\\\"></span></span></div></div></div><section id=\\\"divBooking\\\" class=\\\"hidden\\\"><div class=\\\"pull-right times-close-div\\\"><a href=\\\"#cerrar\\\" class=\\\"times-close\\\">&times;</a></div><div class=\\\"clearfix\\\"></div><div id=\\\"login-form\\\" class=\\\"form-login-event\\\"><a rel=\\\"nofollow\\\" href=\\\"https://xceed.me/connect/facebook?_destination=/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\" class=\\\"login-fb-btn\\\" ><img src=\\\"/images/dd1b451.png\\\" alt=\\\"Login FB\\\" />\\n                                                                           Continue</a><p class=\\\"separate-or\\\">OR</p><div class=\\\"row form-part-one\\\"><div class=\\\"col-xs-12 padding-fix m-b-20\\\"><div class=\\\"row\\\"><div class=\\\"col-xs-12 col-sm-6 input-left m-b-20-xs\\\"><input name=\\\"fName[]\\\" type=\\\"text\\\" class=\\\"input-form input-100 normal-input required false trim\\\" required placeholder=\\\"First Name\\\" value=\\\"\\\" ></div><div class=\\\"col-xs-12 col-sm-6 input-right\\\"><input name=\\\"lName[]\\\" type=\\\"text\\\" class=\\\"input-form input-100 normal-input required false trim\\\" required placeholder=\\\"Last Name\\\" value=\\\"\\\"></div></div></div><div class=\\\"col-xs-12 padding-fix lastLine\\\"><div class=\\\"row\\\"><div class=\\\"col-xs-12 col-sm-6 input-left m-b-20-xs\\\"><input type=\\\"mail\\\" placeholder=\\\"Email\\\" class=\\\"input-form  input-100 required inputEmail false trim noenter\\\" name=\\\"email[]\\\" id=\\\"inputEmail\\\" required=\\\"required\\\" value=\\\"\\\"></div><div class=\\\"col-xs-12 col-sm-6 input-right\\\"><input name=\\\"phone[]\\\" type=\\\"text\\\" class=\\\"input-form normal-input input-100 false trim\\\" placeholder=\\\"Phone Number (optional)\\\"></div></div></div><div class=\\\"col-xs-12 padding-fix idOuter\\\"><div class=\\\"row\\\"><div class=\\\"col-xs-12 col-sm-6 input-left m-b-20-xs\\\"><select name=\\\"idType[]\\\" class=\\\"input-form input-100 required inputIDType false\\\" id=\\\"inputIDType\\\" required=\\\"required\\\"><option value=\\\"\\\">ID Type</option><option value=\\\"ID Card\\\">ID Card</option><option value=\\\"Passport\\\">Passport</option></select></div><div class=\\\"col-xs-12 col-sm-6 input-right\\\"><input name=\\\"idNumber[]\\\" type=\\\"text\\\" placeholder=\\\"ID Number\\\" class=\\\"input-form normal-input input-100 required inputID false trim\\\" id=\\\"inputID\\\" required=\\\"required\\\"></div></div></div><span class=\\\"form-confirm\\\"><span class=\\\"form-confirm-inner-1 form-confirm-inner-both\\\"></span></span></div><div id=\\\"promoter_event_container\\\" data-prid=\\\"1\\\"></div><section id=\\\"divPayment\\\" class=\\\"hidden\\\"><p class=\\\"separate-or\\\">PAYMENT INFORMATION</p><div class=\\\"row form-part-two\\\"><input name=\\\"rsvp\\\" id=\\\"inputRsvp\\\" type=\\\"hidden\\\" value=\\\"\\\"><input name=\\\"numTickets\\\" id=\\\"inputNumTickets\\\" type=\\\"hidden\\\" value=\\\"\\\"><input name=\\\"price\\\" id=\\\"inputPrice\\\" type=\\\"hidden\\\" value=\\\"\\\"><input name=\\\"fee\\\" id=\\\"inputFee\\\" type=\\\"hidden\\\" value=\\\"\\\"><input name=\\\"prid\\\" id=\\\"prid\\\" type=\\\"hidden\\\" value=\\\"\\\"><div class=\\\"col-xs-12 padding-fix m-b-20\\\"><div class=\\\"row\\\"><div class=\\\"col-xs-12 col-sm-6 input-left m-b-20-xs\\\"><input name=\\\"ccName\\\" type=\\\"text\\\" placeholder=\\\"Name\\\" class=\\\"input-form normal-input input-100 false trim\\\"></div><div class=\\\"col-xs-12 col-sm-6 input-right\\\"><input data-stripe=\\\"number\\\" name=\\\"ccNumber\\\" id=\\\"inputCardNumber\\\" placeholder=\\\"Card number\\\" class=\\\"input-form form-control input-100 false trim noenter\\\"></div></div></div><div class=\\\"col-xs-12 padding-fix\\\"><div class=\\\"row\\\"><div class=\\\"exp-date form-inline col-xs-12 col-sm-6 input-left text-right m-b-20-xs\\\"><label id=\\\"expiration-date\\\">Expiration date</label><select data-stripe=\\\"exp-month\\\" name=\\\"ccExpirationMM\\\" placeholder=\\\"MM\\\" class=\\\"input-form input-expiration required false m-b-0\\\" id=\\\"month\\\" ><option value=\\\"MM\\\">MM</option><option value=\\\"1\\\">1</option><option value=\\\"2\\\">2</option><option value=\\\"3\\\">3</option><option value=\\\"4\\\">4</option><option value=\\\"5\\\">5</option><option value=\\\"6\\\">6</option><option value=\\\"7\\\">7</option><option value=\\\"8\\\">8</option><option value=\\\"9\\\">9</option><option value=\\\"10\\\">10</option><option value=\\\"11\\\">11</option><option value=\\\"12\\\">12</option></select><select data-stripe=\\\"exp-year\\\" name=\\\"ccExpirationYY\\\" class=\\\"input-form input-expiration required false m-b-0\\\" placeholder=\\\"YY\\\" id=\\\"year\\\" ><option value=\\\"YY\\\">YY</option><option value=\\\"16\\\">16</option><option value=\\\"17\\\">17</option><option value=\\\"18\\\">18</option><option value=\\\"19\\\">19</option><option value=\\\"20\\\">20</option><option value=\\\"21\\\">21</option><option value=\\\"22\\\">22</option><option value=\\\"23\\\">23</option><option value=\\\"24\\\">24</option><option value=\\\"25\\\">25</option></select></div><div class=\\\"col-xs-12 col-sm-6 input-right\\\"><input data-stripe=\\\"cvc\\\" name=\\\"ccCVC\\\" id=\\\"inputCVC\\\" placeholder=\\\"CVC\\\" class=\\\"input-form form-control input-100 false m-b-0 trim\\\"></div></div></div><span class=\\\"form-confirm\\\"><span class=\\\"form-confirm-inner-2 form-confirm-inner-both\\\"></span></span></div><p class=\\\"payment-errors bg-danger\\\"></p></section></div><div class=\\\"clearfix\\\"></div><div id=\\\"promo\\\" class=\\\"clearfix\\\"><span id=\\\"fee\\\">Service fee<span id=\\\"price-fee\\\"></span></span></div><div id=\\\"total\\\" class=\\\"clearfix\\\"><div id=\\\"total-a\\\"><p>TOTAL AMOUNT</p><p class=\\\"small\\\">Taxes included</p></div><div id=\\\"total-amount\\\"></div></div><div class=\\\"clearfix\\\"><button id=\\\"confirm\\\" class=\\\"text-uppercase actionB confirm-btn-disabled\\\">CONFIRM</button></div><div id=\\\"cards\\\" class=\\\"credit-card clearfix\\\"><!-- Etiqueta de GeoTrust QuickSSL [tm] Smart Icon. No modificar. --><SCRIPT async LANGUAGE=\\\"JavaScript\\\" TYPE=\\\"text/javascript\\\" SRC=\\\"//smarticon.geotrust.com/si.js\\\"></SCRIPT><!-- fin etiqueta GeoTrust Smart Icon--><span class=\\\"eventIcons visa\\\"></span><span class=\\\"eventIcons mastercard\\\"></span><span class=\\\"eventIcons express\\\"></span></div></section><div class=\\\"clearfix\\\"></div></div></form><div class=\\\"grey-line-separator\\\"></div><section id=\\\"line-up\\\" class=\\\"col-xs-11 col-sm-10 col-md-9 col-lg-8\\\"><h2>LINE UP</h2><div id=\\\"artists\\\"><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><a itemprop=\\\"sameAs\\\" href=\\\"https://soundcloud.com/cristophmusic\\\" target=\\\"_blank\\\" ><span class=\\\"artistSpan\\\"><span itemprop=\\\"name\\\">Cristoph</span><i class=\\\"fa fa-soundcloud\\\"></i></span></a></span><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><span class=\\\"no-soundcloud artistSpan\\\" itemprop=\\\"name\\\">Neil Daruwala</span></span><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><a itemprop=\\\"sameAs\\\" href=\\\"https://soundcloud.com/jade-rolt-official\\\" target=\\\"_blank\\\" ><span class=\\\"artistSpan\\\"><span itemprop=\\\"name\\\">Jade Rolt</span><i class=\\\"fa fa-soundcloud\\\"></i></span></a></span><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><a itemprop=\\\"sameAs\\\" href=\\\"https://soundcloud.com/cristophmusic\\\" target=\\\"_blank\\\" ><span class=\\\"artistSpan\\\"><span itemprop=\\\"name\\\">Cristoph</span><i class=\\\"fa fa-soundcloud\\\"></i></span></a></span><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><span class=\\\"no-soundcloud artistSpan\\\" itemprop=\\\"name\\\">Neil Daruwala</span></span><span itemprop=\\\"performer\\\" itemscope itemtype=\\\"http://schema.org/Person\\\"><a itemprop=\\\"sameAs\\\" href=\\\"https://soundcloud.com/jade-rolt-official\\\" target=\\\"_blank\\\" ><span class=\\\"artistSpan\\\"><span itemprop=\\\"name\\\">Jade Rolt</span><i class=\\\"fa fa-soundcloud\\\"></i></span></a></span></section><section class=\\\"col-xs-12 col-sm-10 col-md-8 col-lg-7 float-fix text-center\\\"><div class=\\\"tagMostOuter\\\"><div class=\\\"tagBoth atmoOuter\\\"><span class=\\\"eventIcons getInline atmoIcon\\\"></span><div class=\\\"tagsOuter getInline\\\"><p class=\\\"tagsFirst\\\">Atmosphere</p><p class=\\\"tagsSecond\\\">\\n                                                                                                                                                                                                                              International\\n                                                                               -                                                                                                                                                                                                                                                                                                         Outdoor\\n                                                                                                                                                                                                                                                                                                </p></div></div><div class=\\\"tagBoth doorOuter\\\"><span class=\\\"eventIcons getInline doorIcon\\\"></span><div class=\\\"tagsOuter getInline\\\"><p class=\\\"tagsFirst\\\">Door Policy</p><p class=\\\"tagsSecond\\\">\\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Smart Casual dress code. \\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <span itemprop=\\\"typicalAgeRange\\\">+18</span></p></div></div></div></section><section><h2>DESCRIPTION</h2><div id=\\\"description-event\\\" class=\\\"col-xs-12 col-sm-10 col-md-8 col-lg-7\\\"><meta itemprop=\\\"description\\\" content=\\\"Every Friday is the Unexpected Night with International Guest Dj&amp;#039;s at La Terrrazza\\\" /><p>Every Friday is the Unexpected Night with International Guest Dj&#039;s at La Terrrazza</p></div></section><div class=\\\"grey-line-separator\\\"></div><section itemprop=\\\"location\\\" itemscope itemtype=\\\"http://schema.org/NightClub\\\"><div id=\\\"venue-event\\\" class=\\\"col-xs-12 col-sm-10 col-md-9 col-lg-7 clearfix\\\"><div id=\\\"venue-logo\\\" class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-2\\\"><a itemprop=\\\"url\\\" href=\\\"https://xceed.me/tickets-club/barcelona/la-terrrazza\\\"><img height=\\\"150\\\" width=\\\"150\\\" class=\\\"height-auto full-width venue-logo\\\" itemprop=\\\"logo\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/f_auto,h_150,w_150/v1464098101/venues/logo/55c867d73589f.jpg.jpg\\\" alt=\\\"La Terrrazza Logo\\\"></a></div><div id=\\\"venue-details\\\" class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-10\\\"><p id=\\\"venue-name\\\" itemprop=\\\"name\\\"><a href=\\\"https://xceed.me/tickets-club/barcelona/la-terrrazza\\\" itemprop=\\\"url\\\">La Terrrazza</a></p><p id=\\\"venue-address\\\" itemprop=\\\"address\\\" itemscope itemtype=\\\"http://schema.org/PostalAddress\\\"><span itemprop=\\\"streetAddress\\\">Poble Espanyol</span>, <span itemprop=\\\"addressLocality\\\">Barcelona</span>, <meta itemprop=\\\"addressCountry\\\" content=\\\"ES\\\">Spain</p><meta itemprop=\\\"description\\\" content=\\\"La Terrrazza is an incredible open-air club inside a beautiful walled replica village (Pueblo Espa\\u00f1ol) nestled at the si...\\\"><p id=\\\"venue-desc\\\" class=\\\"comment\\\">La Terrrazza is an incredible open-air club inside a beautiful walled replica village (Pueblo Espa\\u00f1ol) nestled at the side of Barcelona\\u2019s famous Montjuic Hill where masses of international and resident DJs have played since it opened 20 years ago. It has often been named within the top 50 best clubs in the world and is open for the summer season from May until October. House, electronica and techno, with a taste of Balearic sounds, are the main musical genres one can expect to hear at their fantastic parties. Many famous names have played there throughout the years, some worthy of mention include Richie Hawtin and Ricardo Villalobos. Entry +18 years of age. The club reserves the right of admission.</p></div></div><div class=\\\"photoSliderOuter\\\"><div class=\\\"photoSlider\\\"><div itemprop=\\\"photo\\\" itemscope itemtype=\\\"http://schema.org/ImageObject\\\" class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" itemprop=\\\"contentUrl\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%281%29.jpg.jpg\\\" /></div><div itemprop=\\\"photo\\\" itemscope itemtype=\\\"http://schema.org/ImageObject\\\" class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" itemprop=\\\"contentUrl\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%282%29.jpg.jpg\\\" /></div><div itemprop=\\\"photo\\\" itemscope itemtype=\\\"http://schema.org/ImageObject\\\" class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" itemprop=\\\"contentUrl\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%283%29.jpg.jpg\\\" /></div><div itemprop=\\\"photo\\\" itemscope itemtype=\\\"http://schema.org/ImageObject\\\" class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" itemprop=\\\"contentUrl\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%284%29.jpg.jpg\\\" /></div><div class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%281%29.jpg.jpg\\\" /></div><div class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%282%29.jpg.jpg\\\" /></div><div class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%283%29.jpg.jpg\\\" /></div><div class=\\\"inline-block venueImage\\\"><img height=\\\"245\\\" width=\\\"375\\\" alt=\\\"Image of La Terrrazza\\\" src=\\\"https://res.cloudinary.com/xceed-me/image/upload/c_fill,f_auto,h_245,w_375/v1/venues/images/xceed-event-la-terrrazza-barcelona-%20%284%29.jpg.jpg\\\" /></div></div></div><div id=\\\"map-event\\\" itemprop=\\\"geo\\\" itemscope itemtype=\\\"http://schema.org/GeoCoordinates\\\"><meta itemprop=\\\"latitude\\\" content=\\\"41.368728300000000\\\" /><meta itemprop=\\\"longitude\\\" content=\\\"2.148486600000100\\\" /><div id=\\\"map-event-inner\\\" style=\\\"width: 100%; height: 350px;\\\"></div><div class=\\\"pos-fix\\\"><a href=\\\"https://www.google.com/maps/place/41.368728300000000,2.148486600000100\\\" target=\\\"_blank\\\"><button>GET DIRECTIONS</button></a></div></div></section></div></main><footer class=\\\"grey-1b-bg white-c text-light margin-0 full-width pull-left\\\"><div id=\\\"footer-1\\\" class=\\\"clearfix full-width-xs text-center-xs\\\"><div class=\\\"col-md-3 col-sm-3 col-xs-6 foot-1\\\"><h3 class=\\\"text-bold grey-f4-c\\\">Club Managers</h3><ul class=\\\"list-unstyled\\\"><li><a href=\\\"/business\\\">List my events</a></li><li><a href=\\\"/business#door-management\\\">Door Management</a></li><li><a href=\\\"/business#sell-tickets-online\\\">Sell tickets online</a></li><li><a href=\\\"/nightgraph\\\">Xceed Nightgraph</a></li></ul></div><div class=\\\"col-md-3 col-sm-3 col-xs-6 foot-2\\\"><h3 class=\\\"text-bold grey-f4-c\\\">Clubbers</h3><ul class=\\\"list-unstyled\\\"><li><span class=\\\"link-fix open-cities-link pointer open-cities-2\\\" id=\\\"footerEvent\\\">Events</span></li><li id=\\\"footerEventLink\\\" style=\\\"display:none\\\"><a href=\\\"/cities-mobile\\\">Events</a></li><li><a href=\\\"/gallery\\\">Gallery</a></li><li><a href=\\\"/app-mobile\\\">Mobile App</a></li><!--<li><a href=\\\"\\\">Rewards</a></li>--></ul></div><div class=\\\"col-md-3 col-sm-3 col-xs-6 foot-3\\\"><h3 class=\\\"text-bold grey-f4-c\\\">Help Desk</h3><ul class=\\\"list-unstyled\\\"><li><a href=\\\"/business\\\">Let&#039;s do business</a></li><li><a href=\\\"/contact\\\">Contact us</a></li><!--<li><a href=\\\"\\\">FAQ</a></li>--></ul></div><div class=\\\"col-md-3 col-sm-3 col-xs-6 foot-4\\\"><div class=\\\"dropdown\\\"><button class=\\\"btn dropdown-toggle language grey-1b-bg white-c full-width text-left\\\" type=\\\"button\\\" id=\\\"dropdownMenu1\\\" data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"true\\\"><span class=\\\"footerIcons va-top inline-block\\\"></span>\\n                    ENGLISH\\n                    <span class=\\\"caret\\\"></span></button><ul id=\\\"lang\\\" class=\\\"dropdown-menu list-unstyled grey-1b-bg margin-0\\\" aria-labelledby=\\\"dropdownMenu1\\\"><li><a class=\\\"grey-1b-bg white-c\\\" rel=\\\"alternate\\\" hreflang=\\\"es\\\" href=\\\"https://xceed.me/es/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">ESPA\\u00d1OL</a></li><li><a class=\\\"grey-1b-bg white-c\\\" rel=\\\"alternate\\\" hreflang=\\\"it\\\" href=\\\"https://xceed.me/it/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">ITALIANO</a></li><li><a class=\\\"grey-1b-bg white-c\\\" rel=\\\"alternate\\\" hreflang=\\\"fr\\\" href=\\\"https://xceed.me/fr/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">FRAN\\u00c7AIS</a></li><li><a class=\\\"grey-1b-bg white-c\\\" rel=\\\"alternate\\\" hreflang=\\\"de\\\" href=\\\"https://xceed.me/de/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">DEUTSCH</a></li><li><a class=\\\"grey-1b-bg white-c\\\" rel=\\\"alternate\\\" hreflang=\\\"ca\\\" href=\\\"https://xceed.me/ca/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">CATAL\\u00c0</a></li><li style=\\\"display:none\\\"><a  rel=\\\"alternate\\\" hreflang=\\\"en\\\" href=\\\"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\">ENGLISH</a></li></ul></div><div id=\\\"apps-footer\\\" class=\\\"full-width clearfix\\\"><a target=\\\"_blank\\\" href=\\\"https://bnc.lt/xceed-app-footer\\\" class=\\\"appLink iosLink full-width pull-left\\\"><img width=\\\"120\\\" height=\\\"37\\\" alt=\\\"Download from App Store\\\" src=\\\"/images/28f4e73.png\\\"></a><a target=\\\"_blank\\\" href=\\\"https://bnc.lt/xceed-app-footer\\\" class=\\\"appLink androidLink full-width pull-left\\\"><img width=\\\"120\\\" height=\\\"36\\\" alt=\\\"Get it on Google Play\\\" src=\\\"https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png\\\" /></a></div></div></div></div><div id=\\\"footer-2\\\" class=\\\"clearfix full-width-xs text-center-xs\\\"><h4 class=\\\"text-bold grey-f4-c\\\">Cities</h4><ul class=\\\"list-unstyled\\\"><li class=\\\"inline-block\\\"><a href=\\\"/events/alicante\\\" >Alicante</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/barcelona\\\" >Barcelona</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/benicassim\\\" >Benic\\u00e0ssim</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/benidorm\\\" >Benidorm</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/cadiz\\\" >C\\u00e1diz</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/calafell\\\" >Calafell</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/castellon\\\" >Castell\\u00f3n</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/formentera\\\" >Formentera</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/gandia\\\" >Gand\\u00eda</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/ibiza\\\" >Ibiza</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/madrid\\\" >Madrid</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/malaga\\\" >M\\u00e1laga</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/malgrat-de-mar\\\" >Malgrat De Mar</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/milano\\\" >Milano</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/murcia\\\" >Murcia</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/palermo\\\" >Palermo</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/san-francisco\\\" >San Francisco</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/shanghai\\\" >Shanghai</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/sitges\\\" >Sitges</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/split-dubrovnik\\\" >Split &amp; Dubrovnik</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/tokyo\\\" >Tokyo</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/valencia\\\" >Valencia</a></li><li class=\\\"inline-block\\\"><a href=\\\"/events/vinaros\\\" >Vinaros</a></li></ul></div><div id=\\\"footer-3\\\" class=\\\"clearfix full-width-xs text-center-xs\\\"><div class=\\\"col-md-7 col-sm-7 col-xs-12\\\"><ul id=\\\"footer-menu\\\" class=\\\"text-bold list-unstyled\\\"><li><a href=\\\"/about\\\">About</a></li><li><a href=\\\"https://xceed.me/blog/\\\">Blog</a></li><li><a href=\\\"https://news.xceed.me\\\">News</a></li><li><a href=\\\"/jobs\\\" target=\\\"_blank\\\">Careers</a></li><li><a href=\\\"https://news.xceed.me\\\">Press</a></li><li><a href=\\\"/tos\\\">Terms</a></li><li><a href=\\\"/tos\\\">Privacy</a></li></ul></div><div class=\\\"col-md-5 col-sm-5 col-xs-12 padd-0-l padd-0-xs\\\"><ul class=\\\"social list-unstyled pull-right\\\"><li id=\\\"facebook\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://www.facebook.com/xceed\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-facebook\\\"></i></a></li><li id=\\\"twitter\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://twitter.com/XceedWorld\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-twitter\\\"></i></a></li><li id=\\\"instagram\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://instagram.com/xceed_world/\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-instagram\\\"></i></a></li><li id=\\\"vimeo\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://vimeo.com/xceed\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-vimeo\\\"></i></a></li><br class=\\\"visible-xs\\\"><li id=\\\"youtube\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://youtube.com/xceedmepartytonight\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-youtube-play\\\"></i></a></li><li id=\\\"linkedin\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://www.linkedin.com/company/xceed-org-\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-linkedin-square\\\"></i></a></li><li id=\\\"pinterest\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://www.pinterest.com/xceedworld/\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-pinterest-p\\\"></i></a></li><li id=\\\"g-plus\\\" class=\\\"inline-block\\\"><a target=\\\"_blank\\\" href=\\\"https://plus.google.com/+XceedMePartyTonight\\\" class=\\\"block full-width\\\"><i class=\\\"fa fa-google-plus\\\"></i></a></li></ul></div></div><div id=\\\"copyrights\\\" class=\\\"text-center clearfix full-width-xs\\\"><p class=\\\"margin-0\\\">\\u00a92015 Xceed Srl</p><p class=\\\"margin-0\\\"><b>2,015,636</b><i> reservations worldwide\\n</i></p><span id=\\\"logo\\\" class=\\\"block footerIcons\\\"></span></div></footer><script src=\\\"//code.jquery.com/jquery-2.1.4.min.js\\\"></script><!-- Latest compiled and minified JavaScript --><script src=\\\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js\\\"></script><script defer src=\\\"/assets/site/js/thirdparty_new_web.js\\\"></script><script defer src=\\\"/assets/site/js/new_header_footer.js\\\"></script><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-43970656-1', 'auto');ga('require', 'displayfeatures');ga('send', 'pageview');</script><script type=\\\"text/javascript\\\">\\n                $(function () {\\n                    setTimeout(function () {\\n                        var a = document.createElement(\\\"script\\\");\\n                        var b = document.getElementsByTagName(\\\"script\\\")[0];\\n                        a.src = document.location.protocol + \\\"//script.crazyegg.com/pages/scripts/0035/9213.js?\\\" + Math.floor(new Date().getTime() / 3600000);\\n                        a.async = true;\\n                        a.type = \\\"text/javascript\\\";\\n                        b.parentNode.insertBefore(a, b)\\n                    }, 1);\\n                });\\n    </script><script>\\n        window.fbAsyncInit = function () {\\n            // init the FB JS SDK\\n            FB.init({\\n                appId: '276305832527334', // App ID from the app dashboard\\n                channelUrl: '//xceed.me/channel.html', // Channel file for x-domain comms\\n                status: true, // Check Facebook Login status\\n                xfbml: true                                  // Look for social plugins on the page\\n            });\\n        };\\n\\n        // Load the SDK asynchronously\\n        (function (d, s, id) {\\n            var js, fjs = d.getElementsByTagName(s)[0];\\n            if (d.getElementById(id)) {\\n                return;\\n            }\\n            js = d.createElement(s);\\n            js.id = id;\\n            js.src = \\\"//connect.facebook.net/en_US/all.js\\\";\\n            fjs.parentNode.insertBefore(js, fjs);\\n        }(document, 'script', 'facebook-jssdk'));\\n\\n        $(function () {\\n            $('body').on('click', '.fb_login', function (e) {\\n                FB.getLoginStatus(function (response) {\\n                    if (response.status === 'connected') {\\n                        // connected\\n                        alert('Already connected, redirect to login page to create token.');\\n                        document.location = \\\"https://xceed.me/connect/facebook?_destination=/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\";\\n                    } else {\\n                        // not_authorized\\n                        FB.login(function (response) {\\n                            if (response.authResponse) {\\n                                document.location = \\\"https://xceed.me/connect/facebook?_destination=/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\\\";\\n                            } else {\\n                                alert('Cancelled.');\\n                            }\\n                        }, {scope: 'email, user_birthday, user_location, friends_events, friends_about_me, friends_photos, rsvp_event, user_friends'});\\n                    }\\n                });\\n            });\\n        });\\n    </script><script type=\\\"application/ld+json\\\">\\n        {\\n        \\\"@context\\\": \\\"http://schema.org\\\",\\n        \\\"@type\\\": \\\"BreadcrumbList\\\",\\n        \\\"itemListElement\\\": [{\\n        \\\"@type\\\": \\\"ListItem\\\",\\n        \\\"position\\\": 1,\\n        \\\"item\\\": {\\n        \\\"@id\\\": \\\"https://xceed.me/events/barcelona\\\",\\n        \\\"name\\\": \\\"Events in Barcelona\\\"\\n        }\\n        },{\\n        \\\"@type\\\": \\\"ListItem\\\",\\n        \\\"position\\\": 2,\\n        \\\"item\\\": {\\n        \\\"@id\\\": \\\"https://xceed.me/tickets-club/barcelona/la-terrrazza\\\",\\n        \\\"name\\\": \\\"La Terrrazza\\\"\\n        }\\n        }]\\n        }\\n    </script><script defer type=\\\"text/javascript\\\" src=\\\"//cdn.jsdelivr.net/jquery.slick/1.5.9/slick.min.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://addevent.com/libs/atc/1.6.1/atc.min.js\\\" async defer></script><script src=\\\"/js/906492f.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://js.stripe.com/v2/\\\"></script><script type=\\\"text/javascript\\\">\\n                                      //Stripe.setPublishableKey('pk_live_CMcxAZrJbpGfiqQlsnjiVFUU');\\n                                      Stripe.setPublishableKey('pk_live_2izAHT7JkSOtJlTKtyLK53j0');\\n                                      </script><script type=\\\"text/javascript\\\">\\n        var optional = '(optional)';\\n        var soldOutText = 'SOLD OUT';\\n        var salesEndText = 'Sales end in';\\n        var changePromoCode_url = '/api/change/17652?jsoncallback=?&w=0';\\n        var payAtTheDoor = 'Pay at the door!';\\n        var confirmButton = 'CONFIRM';\\n        var freeTag = 'FREE';\\n        var emailTag = 'Email';\\n        var processingTag = 'PROCESSING';\\n        var firstLang = 'First Name';\\n        var lastLang = 'Last Name';\\n        var phoneLang = 'Phone Number';\\n        var cityLang = 'City';\\n        var codeLang = 'Postcode';\\n        var birthLang = 'Date of Birth';\\n        var idLang = 'ID Number';\\n        var sexLang = 'Sex';\\n        var maleLang = 'Male';\\n        var femaleLang = 'Female';\\n        var sizeLang = 'Shirt size';\\n        var ticketLang = 'Ticket';\\n        var noPromoCodeText = 'This promo code is not valid.';\\n\\n                                                  var nominal = false;\\n                                                                        </script><script defer type=\\\"text/javascript\\\" src=\\\"https://maps.googleapis.com/maps/api/js?key=AIzaSyC_vVeSO_t7yXQyvos4iGTJsIX5UI1WmSU&amp;sensor=false\\\"></script><script type=\\\"text/javascript\\\">\\n                                      function initialize() {\\n                                          var myLatlng = new google.maps.LatLng(41.368728300000000,2.148486600000100 );\\n                                          if (window.innerWidth < 768) {\\n                                              var draggableOn = false;\\n                                          } else {\\n                                              var draggableOn = true;\\n                                          }\\n\\n                                          var mapOptions = {\\n                                              zoom: 16,\\n                                              center: myLatlng,\\n                                              scrollwheel: false,\\n                                              draggable: draggableOn,\\n                                              styles: [{\\\"featureType\\\": \\\"water\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#d3d3d3\\\"}]}, {\\\"featureType\\\": \\\"transit\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#808080\\\"}, {\\\"visibility\\\": \\\"off\\\"}]}, {\\\"featureType\\\": \\\"road.highway\\\", \\\"elementType\\\": \\\"geometry.stroke\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"on\\\"}, {\\\"color\\\": \\\"#b3b3b3\\\"}]}, {\\\"featureType\\\": \\\"road.highway\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#ffffff\\\"}]}, {\\\"featureType\\\": \\\"road.local\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"on\\\"}, {\\\"color\\\": \\\"#ffffff\\\"}, {\\\"weight\\\": 1.8}]}, {\\\"featureType\\\": \\\"road.local\\\", \\\"elementType\\\": \\\"geometry.stroke\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#d7d7d7\\\"}]}, {\\\"featureType\\\": \\\"poi\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"on\\\"}, {\\\"color\\\": \\\"#ebebeb\\\"}]}, {\\\"featureType\\\": \\\"administrative\\\", \\\"elementType\\\": \\\"geometry\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#a7a7a7\\\"}]}, {\\\"featureType\\\": \\\"road.arterial\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#ffffff\\\"}]}, {\\\"featureType\\\": \\\"road.arterial\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#ffffff\\\"}]}, {\\\"featureType\\\": \\\"landscape\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"on\\\"}, {\\\"color\\\": \\\"#efefef\\\"}]}, {\\\"featureType\\\": \\\"road\\\", \\\"elementType\\\": \\\"labels.text.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#696969\\\"}]}, {\\\"featureType\\\": \\\"administrative\\\", \\\"elementType\\\": \\\"labels.text.fill\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"on\\\"}, {\\\"color\\\": \\\"#737373\\\"}]}, {\\\"featureType\\\": \\\"poi\\\", \\\"elementType\\\": \\\"labels.icon\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"off\\\"}]}, {\\\"featureType\\\": \\\"poi\\\", \\\"elementType\\\": \\\"labels\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"off\\\"}]}, {\\\"featureType\\\": \\\"road.arterial\\\", \\\"elementType\\\": \\\"geometry.stroke\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#d6d6d6\\\"}]}, {\\\"featureType\\\": \\\"road\\\", \\\"elementType\\\": \\\"labels.icon\\\", \\\"stylers\\\": [{\\\"visibility\\\": \\\"off\\\"}]}, {}, {\\\"featureType\\\": \\\"poi\\\", \\\"elementType\\\": \\\"geometry.fill\\\", \\\"stylers\\\": [{\\\"color\\\": \\\"#dadada\\\"}]}]\\n                                          }\\n                                          var map = new google.maps.Map(document.getElementById('map-event-inner'), mapOptions);\\n                                          var infowindow = new google.maps.InfoWindow({\\n                                              content: \\\"<strong>La Terrrazza</strong><br /><strong>Poble Espanyol Barcelona</strong>\\\"\\n                                          });\\n\\n                                          var marker = new google.maps.Marker({\\n                                              position: myLatlng,\\n                                              map: map,\\n                                              title: \\\"La Terrrazza\\\"\\n                                          });\\n\\n                                          google.maps.event.addListener(marker, 'click', function () {\\n                                              infowindow.open(map, marker);\\n                                          });\\n\\n                                      }\\n\\n                                      $(document).ready(function () {\\n                                          google.maps.event.addDomListener(window, 'load', initialize);\\n                                          $(\\\".comment\\\").shorten();\\n                                          window.addeventasync = function () {\\n                                              addeventatc.settings({\\n                                                  license: \\\"au0h0y1eqz1ebfe72mig8176\\\"\\n                                              });\\n                                          }\\n                                      });\\n                                  </script><!-- Google Code for Remarketing Tag --><!--------------------------------------------------\\n    Remarketing tags may not be associated with personally identifiable information or placed on pages related to sensitive categories. See more information and instructions on how to setup the tag on: http://google.com/ads/remarketingsetup\\n    ---------------------------------------------------><script type=\\\"text/javascript\\\">\\n        /* <![CDATA[ */\\n        var google_conversion_id = 968032639;\\n        var google_custom_params = window.google_tag_params;\\n        var google_remarketing_only = true;\\n        /* ]]> */\\n    </script><script type=\\\"text/javascript\\\" src=\\\"//www.googleadservices.com/pagead/conversion.js\\\"></script><noscript><div style=\\\"display:inline;\\\"><img height=\\\"1\\\" width=\\\"1\\\" style=\\\"border-style:none;\\\" alt=\\\"\\\" src=\\\"//googleads.g.doubleclick.net/pagead/viewthroughconversion/968032639/?value=0&amp;guid=ON&amp;script=0\\\"/></div></noscript></body></html><link href='//fonts.googleapis.com/css?family=Lato:400,700,300,900' rel='stylesheet' type='text/css'><link rel=\\\"stylesheet\\\" href=\\\"https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.2.3/css/simple-line-icons.css\\\"><link rel=\\\"stylesheet\\\" href=\\\"https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css\\\"><link rel=\\\"stylesheet\\\" href=\\\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css\\\"><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/site/css/thirdparty_site.css\\\"  media=\\\"all\\\"/><link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"//cdn.jsdelivr.net/jquery.slick/1.5.9/slick.css\\\"/>\",\n            \"page_id\": \"ec891c9df77d09298c0f44f7973af3d5d4adc1e5\",\n            \"page_type\": \"item\",\n            \"plugins\": {\n                \"annotations-plugin\": {\n                    \"extracts\": [\n                        {\n                            \"accept_selectors\": [\n                                \"#cover > .height-auto\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"0e85-49c0-a8e0\": {\n                                    \"attribute\": \"src\",\n                                    \"extractors\": {},\n                                    \"field\": \"3d00-45e4-a1ec\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"d391-44fb-b74e\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > figure > .height-auto\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"#cover > .height-auto\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"bec8-4401-8f55\": {\n                                    \"attribute\": \"alt\",\n                                    \"extractors\": {},\n                                    \"field\": \"0885-44ad-8d18\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"57bb-41ce-a5c9\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > figure > .height-auto\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"h1\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"af93-4af3-bbd5\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"54fe-468e-b804\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"f910-4e47-81b8\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > section:nth-child(4) > h1\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"time\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"87a5-4d80-896e\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"b1da-4d02-b590\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"17df-4f30-90f5\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > .col-md-6 > .addeventatc > p:nth-child(9) > time\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"p:nth-child(10)\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"6e4f-4c38-9fbc\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"93f8-405c-a546\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"abf2-48cb-b4e6\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > .col-md-6 > .addeventatc > .small\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".location:nth-child(2)\"\n                            ],\n                            \"container_id\": \"770c-4cd7-a787\",\n                            \"data\": {\n                                \"8640-44d1-8e72\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"51ea-4fcb-a355\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"48bb-4e8d-af8c\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"main > div > section:nth-child(4) > .location\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"main > div\"\n                            ],\n                            \"annotations\": {\n                                \"#portia-content\": \"#dummy\"\n                            },\n                            \"container_id\": null,\n                            \"id\": \"770c-4cd7-a787\",\n                            \"item_container\": true,\n                            \"reject_selectors\": [],\n                            \"repeated\": false,\n                            \"required\": [],\n                            \"schema_id\": \"21d4-4268-85cd\",\n                            \"selector\": \"main > div\",\n                            \"siblings\": 0,\n                            \"tagid\": 70,\n                            \"text-content\": \"#portia-content\"\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"#venue-event\"\n                            ],\n                            \"annotations\": {\n                                \"#portia-content\": \"#dummy\"\n                            },\n                            \"container_id\": null,\n                            \"field\": null,\n                            \"id\": \"72b0-4bd7-85e2\",\n                            \"item_container\": true,\n                            \"required\": [],\n                            \"schema_id\": \"290f-4500-acc8\",\n                            \"selector\": \"#venue-event\",\n                            \"text-content\": \"#portia-content\"\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".venue-logo\"\n                            ],\n                            \"container_id\": \"72b0-4bd7-85e2\",\n                            \"data\": {\n                                \"6a2a-40a4-86ef\": {\n                                    \"attribute\": \"src\",\n                                    \"extractors\": {},\n                                    \"field\": \"799f-4875-b9dc\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"79fa-410e-9528\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \"#venue-event > .col-xs-3 > a > .height-auto\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"#venue-name > a\"\n                            ],\n                            \"container_id\": \"72b0-4bd7-85e2\",\n                            \"data\": {\n                                \"90c2-4acc-aa36\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": [],\n                                    \"field\": \"df47-43f9-aa35\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"b393-4844-bd4f\",\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selector\": \"#venue-name > a\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"#venue-address\"\n                            ],\n                            \"container_id\": \"72b0-4bd7-85e2\",\n                            \"data\": {\n                                \"dfbb-4a6f-8dc8\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": [],\n                                    \"field\": \"e525-4f50-b864\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"9971-4cde-bec6\",\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selector\": \"#venue-address\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".data\"\n                            ],\n                            \"annotations\": {\n                                \"#portia-content\": \"#dummy\"\n                            },\n                            \"container_id\": \"67f7-47df-b3d2#parent\",\n                            \"field\": null,\n                            \"id\": \"67f7-47df-b3d2\",\n                            \"item_container\": true,\n                            \"repeated\": true,\n                            \"required\": [],\n                            \"schema_id\": \"6744-4764-b73b\",\n                            \"selector\": \".data\",\n                            \"siblings\": 0,\n                            \"text-content\": \"#portia-content\"\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".data:nth-child(5) > .price > p:nth-child(3)\",\n                                \".data:nth-child(6) > .price > p\"\n                            ],\n                            \"container_id\": \"67f7-47df-b3d2\",\n                            \"data\": {\n                                \"3467-4d54-8814\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"a794-43f5-9378\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"bcc8-44b0-b0e1\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \".data > .price > p:nth-child(3)\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \"#data\"\n                            ],\n                            \"annotations\": {\n                                \"#portia-content\": \"#dummy\"\n                            },\n                            \"container_id\": null,\n                            \"field\": null,\n                            \"id\": \"67f7-47df-b3d2#parent\",\n                            \"item_container\": true,\n                            \"repeated\": false,\n                            \"required\": [],\n                            \"schema_id\": \"6744-4764-b73b\",\n                            \"selector\": \"#data\",\n                            \"siblings\": 0,\n                            \"text-content\": \"#portia-content\"\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".data:nth-child(5) > .type > p:nth-child(1)\"\n                            ],\n                            \"container_id\": \"67f7-47df-b3d2\",\n                            \"data\": {\n                                \"aebd-4b36-a1fd\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"1b58-4551-a224\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"6ad7-4e63-8ebd\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \".data > .type > p:nth-child(1)\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".data:nth-child(5) > .type > .small\"\n                            ],\n                            \"container_id\": \"67f7-47df-b3d2\",\n                            \"data\": {\n                                \"4c4c-4618-8390\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"4ed4-4fa6-ade1\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"dd46-465e-9aa0\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \".data > .type > .small\",\n                            \"tagid\": null\n                        },\n                        {\n                            \"accept_selectors\": [\n                                \".data:nth-child(5) > .quantity > .small\"\n                            ],\n                            \"container_id\": \"67f7-47df-b3d2\",\n                            \"data\": {\n                                \"800d-4052-9842\": {\n                                    \"attribute\": \"content\",\n                                    \"extractors\": {},\n                                    \"field\": \"ee83-4d06-aec6\",\n                                    \"required\": false\n                                }\n                            },\n                            \"id\": \"e5c9-4b71-be28\",\n                            \"post_text\": null,\n                            \"pre_text\": null,\n                            \"reject_selectors\": [],\n                            \"required\": [],\n                            \"selection_mode\": \"auto\",\n                            \"selector\": \".data > .quantity > .small\",\n                            \"tagid\": null\n                        }\n                    ]\n                }\n            },\n            \"scrapes\": \"74f1-4fb3-83e0\",\n            \"spider\": \"xceed.me\",\n            \"url\": \"https://xceed.me/events/barcelona/17652/f-u-n-at-la-terrrazza-with-cristoph-neil-daruwala-jade-rolt\",\n            \"version\": \"0.13.0b18\"\n        }\n    ]\n}\n"
  },
  {
    "path": "slybot/slybot/tests/data/test_params.txt",
    "content": "Cars\nBoats"
  },
  {
    "path": "slybot/slybot/tests/test_baseurl.py",
    "content": "\"\"\"\nTests for apply_annotations\n\"\"\"\n\nfrom unittest import TestCase\nfrom slybot.baseurl import insert_base_url, get_base_url\nfrom scrapely.htmlpage import HtmlPage\n\nclass TestApplyAnnotations(TestCase):\n    def test_insert_base_relative(self):\n        \"\"\"Replace relative base href\"\"\"\n        html_in = '<html><head><base href=\"products/\"><body></body></html>'\n        html_target = '<html><head><base href=\"http://localhost:8000/products/\" />\\\n<body></body></html>'\n        html_out = insert_base_url(html_in, \"http://localhost:8000/\")\n        self.assertEqual(html_out, html_target)\n\n    def test_insert_base_noreplace(self):\n        \"\"\"base tag dont need to be replaced\"\"\"\n        html_in = html_target = '<html><head><base href=\"http://localhost:8000/products/\"><body></body></html>'\n        html_out = insert_base_url(html_in, \"http://localhost:8000/users/blog.html\")\n        self.assertEqual(html_out, html_target)\n        \n    def test_insert_base_addbase(self):\n        \"\"\"add base tag when not present\"\"\"\n        html_in = '<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\\\n<body></body></html>'\n        html_target = '<html><head><base href=\"http://localhost:8000/\" />\\\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\\\n<body></body></html>'\n        html_out = insert_base_url(html_in, \"http://localhost:8000/\")\n        self.assertEqual(html_out, html_target)\n\n    def test_insert_base_commented(self):\n        \"\"\"Test weird case when base tag is commented in origin\"\"\"\n        html_in = '<html><head><!-- <base href=\"http://example.com/\"> --></head>\\\n<body>Body</body></html>'\n        html_target = '<html><head><base href=\"http://example.com/\" />\\\n<!-- <base href=\"http://example.com/\"> --></head><body>Body</body></html>'\n        html_out = insert_base_url(html_in, \"http://example.com/\")\n        self.assertEqual(html_out, html_target)\n\n    def test_insert_base_nohead(self):\n        \"\"\"Test base insert when no head element is present\"\"\"\n        html_in = '<html><body>Body</body></html>'\n        html_target = '<html>\\n\\\n<head><base href=\"http://localhost:8000/\" /></head>\\n\\\n<body>Body</body></html>'\n        html_out = insert_base_url(html_in, \"http://localhost:8000/\")\n        self.assertEqual(html_out, html_target)\n\n    def test_get_base_url(self):\n        \"\"\"Basic get_base_url test\"\"\"\n        html = u'<html><head><base href=\"http://example.com/products/\" />\\\n<body></body></html>'\n        page = HtmlPage(\"http://example.com/products/p19.html\", body=html)\n        self.assertEqual(get_base_url(page), \"http://example.com/products/\")\n\n    def test_get_base_url_nobase(self):\n        \"\"\"Base tag does not exists\"\"\"\n        html = u'<html><head><body></body></html>'\n        page = HtmlPage(\"http://example.com/products/p19.html\", body=html)\n        self.assertEqual(get_base_url(page), \"http://example.com/products/p19.html\")\n\n    def test_get_base_url_empty_basehref(self):\n        \"\"\"Base tag exists but href is empty\"\"\"\n        html = u'<html><head><base href=\"\" />\\\n<body></body></html>'\n        url = \"http://example.com/products/p19.html\"\n        page = HtmlPage(url, body=html)\n        self.assertEqual(get_base_url(page), url)\n\n\n"
  },
  {
    "path": "slybot/slybot/tests/test_dropmeta.py",
    "content": "# -*- coding: utf-8 -*-\nfrom unittest import TestCase\n\nfrom scrapy.settings import Settings\nfrom slybot.spidermanager import SlybotSpiderManager\nfrom slybot.meta import DropMetaPipeline\n\nfrom .utils import PATH\n\n\nclass DropMetaTest(TestCase):\n\n    def test_dupefilter(self):\n        smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % PATH)\n        name = 'books.toscrape.com'\n        spider = smanager.create(name)\n        spec = smanager._specs[\"spiders\"][name]\n        dropmeta = DropMetaPipeline(Settings({\"SLYDROPMETA_ENABLED\": True}))\n        result = {\n            \"breadcrumbs\": [\"Home\", \"Books\", \"Mystery\"],\n            \"description\": [\n                u\"WICKED above her hipbone, GIRL across her heart Words are \"\n                u\"like a road map to reporter Camille Preaker’s troubled past.\"\n                u\" Fresh from a brief stay at a psych hospital, Camille’s \"\n                u\"first assignment from the second-rate daily paper where she \"\n                u\"works brings her reluctantly back to her hometown to cover \"\n                u\"the murders of two preteen girls. NASTY on her kneecap, \"\n                u\"BABYDOLL on her leg Since WICKED above her hipbone, GIRL \"\n                u\"across her heart Words are like a road map to reporter \"\n                u\"Camille Preaker’s troubled past. Fresh from a brief stay at \"\n                u\"a psych hospital, Camille’s first assignment from the \"\n                u\"second-rate daily paper where she works brings her \"\n                u\"reluctantly back to her hometown to cover the murders of \"\n                u\"two preteen girls. NASTY on her kneecap, BABYDOLL on her leg\"\n                u\" Since she left town eight years ago, Camille has hardly \"\n                u\"spoken to her neurotic, hypochondriac mother or to the \"\n                u\"half-sister she barely knows: a beautiful thirteen-year-old \"\n                u\"with an eerie grip on the town. Now, installed again in her \"\n                u\"family’s Victorian mansion, Camille is haunted by the \"\n                u\"childhood tragedy she has spent her whole life trying to cut\"\n                u\" from her memory. HARMFUL on her wrist, WHORE on her ankle \"\n                u\"As Camille works to uncover the truth about these violent \"\n                u\"crimes, she finds herself identifying with the young \"\n                u\"victims—a bit too strongly. Clues keep leading to dead ends,\"\n                u\" forcing Camille to unravel the psychological puzzle of her \"\n                u\"own past to get at the story. Dogged by her own demons, \"\n                u\"Camille will have to confront what happened to her years \"\n                u\"before if she wants to survive this homecoming.With its \"\n                u\"taut, crafted writing, Sharp Objects is addictive, haunting,\"\n                u\" and unforgettable. ...more\"\n            ],\n            \"image\": [\n                \"http://books.toscrape.com/media/cache/c0/59/c05972805aa720117\"\n                \"1b8fc71a5b00292.jpg\"\n            ],\n            \"info\": {\n                \"price\": [\"47.82\"],\n                \"stock\": [\"20\"],\n                \"tax\": [\"0.00\"],\n                \"type\": [\"Books\"],\n                \"upc\": [\"e00eb4fd7b871a48\"]},\n            \"url\": (\"http://books.toscrape.com/catalogue/\"\n                    \"sharp-objects_997/index.html\")\n        }\n        tid = '3617-44af-a2f0'\n        extracted = next(t for t in spec[\"templates\"] if t['page_id'] == tid)\n        processed = dropmeta.process_item(extracted['results'][0], spider)\n        self.assertEqual(result, processed)\n"
  },
  {
    "path": "slybot/slybot/tests/test_dupefilter.py",
    "content": "from unittest import TestCase\nfrom os.path import dirname\n\nfrom scrapy.http import HtmlResponse\nfrom scrapy.settings import Settings\nfrom scrapy.item import DictItem\nfrom scrapy.exceptions import DropItem\n\nfrom slybot.spidermanager import SlybotSpiderManager\nfrom slybot.dupefilter import DupeFilterPipeline\n\n_PATH = dirname(__file__)\n\nclass DupeFilterTest(TestCase):\n    smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % _PATH)\n\n    def test_dupefilter(self):\n        name = \"seedsofchange2\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t1, t2 = spec[\"templates\"]\n\n        dupefilter = DupeFilterPipeline(Settings({\"SLYDUPEFILTER_ENABLED\": True}))\n\n        response1 = HtmlResponse(url=t1[\"url\"], body=t1[\"original_body\"].encode('utf-8'))\n        response2 = HtmlResponse(url=t2[\"url\"], body=t2[\"original_body\"].encode('utf-8'))\n\n        result1 = spider.handle_html(response1)\n        for item1 in result1:\n            if isinstance(item1, DictItem):\n                break\n\n        result2 = spider.handle_html(response2)\n        for item2 in result2:\n            if isinstance(item2, DictItem):\n                break\n\n        self.assertEqual(item1, dupefilter.process_item(item1, spider))\n        self.assertEqual(item2, dupefilter.process_item(item2, spider))\n\n        self.assertRaises(DropItem, dupefilter.process_item, item1, spider)\n"
  },
  {
    "path": "slybot/slybot/tests/test_extraction_speed.py",
    "content": "import json\nimport os\nfrom os.path import dirname\nfrom collections import namedtuple\nfrom unittest import TestCase\n\nfrom slybot.item import create_slybot_item_descriptor\nfrom slybot.utils import read\nfrom slybot.plugins.scrapely_annotations.extraction import (\n    SlybotIBLExtractor, BaseContainerExtractor)\n\nfrom scrapy.selector.unified import SelectorList, Selector\nfrom scrapely.extraction.pageobjects import TokenDict\nfrom scrapely.htmlpage import HtmlPage\n\n\ndef _next_3(iterable):\n    i = iter(iterable[1:-3])\n    while True:\n        try:\n            yield SelectorList((next(i), next(i), next(i)))\n        except StopIteration:\n            break\nITERATIONS = int(os.environ.get('SLYBOT_SPEED_TEST_ITERATIONS', 1))\nExtractor = namedtuple('Extractor', ['containers', 'selectors', 'group'])\nparsel_extractors = {\n    'daft': Extractor('//div[@class=\"box\"]',\n                      {u'name': './/h2/a/text()',\n                       u'price': './/strong[@class=\"price\"]/text()',\n                       u'description': './/div[@class=\"text-block\"]/p/text()',\n                       u'url': './/h2/a/@href'}, None),\n    'hn': Extractor('//table//table//tr',\n                    {u'name': './/td[@class=\"title\"]/a/text()',\n                     u'price': './/td/span[contains(@id,\"score\")]/text()',\n                     u'description': './/td/span/a//text()',\n                     u'url': './/td[@class=\"title\"]/a/@href'}, _next_3),\n    'pol': Extractor('//div[contains(@class, \"item\")]',\n                     {u'name': './/div[@class=\"product-image\"]/a/@title',\n                      u'price': './/li[@class=\"fund\"]/strong/text()',\n                      u'description': './/div[@class=\"descbox\"]/ul',\n                      u'url': './/div[@class=\"product-image\"]/a/@href',\n                      u'product_id': './/div[@class=\"product-image\"]/a/@id'},\n                     None)\n}\n\n\ndef extract(extractor, selector):\n    items = []\n    item_selectors = selector.xpath(extractor.containers)\n    if extractor.group:\n        item_selectors = extractor.group(item_selectors)\n    for row in item_selectors:\n        item = {k: row.xpath(xpath).extract()\n                for k, xpath in extractor.selectors.items()}\n        item = {k: v for k, v in item.items() if v}\n        validated = validate(item, html_page)\n        if not validated:\n            continue\n        if hasattr(validated, 'dump'):\n            validated = validated.dump()\n        validated['_template'] = None\n        items.append(validated)\n    items = list(filter(bool, items))\n    return [i for i in items if '_type' in i]\n\n_PATH = dirname(__file__)\ntd = TokenDict()\nwith open('%s/data/SampleProject/items.json' % _PATH) as f:\n    items = json.load(f)\ndescriptors = {'#default': create_slybot_item_descriptor(items['default'],\n                                                         'default')}\n\n\nclass FakeContainer(BaseContainerExtractor):\n    def __init__(self, schema, legacy=False):\n        self.schema = schema\n        self.extra_requires = []\n        self.legacy = legacy\n        self.modifiers = {}\n\n\nschema = FakeContainer(descriptors['#default'])\nvalidate = schema._validate_and_adapt_item\n_names_map = {'daft_ie': 'daft', 'patchofland': 'pol'}\nibl_extractors = {}\nibl_pages = {}\nselector_pages = {}\nfor template_name in ('daft_ie', 'hn', 'patchofland'):\n    with open('%s/data/templates/%s.html' % (_PATH, template_name), 'rb') as f:\n\n        html_page = HtmlPage(body=read(f))\n        name = _names_map.get(template_name, template_name)\n        ibl_pages[name] = html_page\n        ibl_extractors[name] = SlybotIBLExtractor([(html_page, descriptors,\n                                                    '0.13.0')])\n        selector_pages[name] = Selector(text=html_page.body)\n\n\nclass TestExtractionSpeed(TestCase):\n    def test_parsel_parse_and_extract(self):\n        for i in range(ITERATIONS):\n            for name, page in ibl_pages.items():\n                s = Selector(text=page.body)\n                extract(parsel_extractors[name], s)\n\n    def test_slybot_parse_and_extract(self):\n        for i in range(ITERATIONS):\n            for name, page in ibl_pages.items():\n                extraction_page = HtmlPage(body=page.body)\n                ibl_extractors[name].extract(extraction_page)\n\n    def test_parsel_extract(self):\n        for i in range(ITERATIONS):\n            for name, page in ibl_pages.items():\n                extract(parsel_extractors[name], selector_pages[name])\n\n    def test_slybot_extract(self):\n        for i in range(ITERATIONS):\n            for name, page in ibl_pages.items():\n                ibl_extractors[name].extract(page)\n"
  },
  {
    "path": "slybot/slybot/tests/test_extractors.py",
    "content": "from unittest import TestCase\n\nfrom datetime import datetime\n\nfrom scrapely.htmlpage import HtmlPage\nfrom scrapely.extraction import InstanceBasedLearningExtractor\n\nfrom slybot.extractors import (create_regex_extractor, apply_extractors,\n                               add_extractors_to_descriptors)\nfrom slybot.fieldtypes import TextFieldTypeProcessor\nfrom slybot.item import create_slybot_item_descriptor\nfrom slybot.plugins.scrapely_annotations.extraction import SlybotIBLExtractor\nfrom slybot.plugins.scrapely_annotations.builder import (\n    Annotations, _clean_annotation_data\n)\n\n\nclass ExtractorTest(TestCase):\n\n    annotated = u\"\"\"\n<table>\n<tr data-scrapy-annotate=\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;gender&quot;}}\">\n<th class=\"item-key\">Gender</th>\n<td >Male</td></tr>\n</table>\"\"\"\n    _target = u\"\"\"\n<table>\n<tr>\n<th class=\"item-key\">Gender</th>\n<td >Male</td></tr>\n</table>\"\"\"\n    annotated2 = u\"\"\"\n<table>\n<tr data-scrapy-annotate=\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;name&quot;}}\">\n<th class=\"item-key\">Name</th>\n<td >John</td></tr>\n<span data-scrapy-annotate=\"{&quot;required&quot;: [], &quot;variant&quot;: 0, &quot;annotations&quot;: {&quot;content&quot;: &quot;gender&quot;}}\">Male</span>\n</table>\"\"\"\n    _target2 = u\"\"\"\n<body>\n<tr>\n<th class=\"item-key\">Name</th><td>Olivia</td></tr>\n<span></span>\n</body>\"\"\"\n\n    annotations = _clean_annotation_data([{\n        'id': 'annotation1',\n        'selector': 'td > a',\n        'container_id': 'parent',\n        'data': {\n            1: {\n                'attribute': 'content',\n                'field': 'title',\n                'required': False,\n                'extractors': []\n            },\n            2: {\n                'attribute': 'content',\n                'field': 'name',\n                'required': False,\n                'extractors': ['3']\n            },\n            3: {\n                'attribute': 'href',\n                'field': 'url',\n                'required': False,\n                'extractors': ['1', '2']\n            }\n        }\n    }, {\n        'id': 'annotation2',\n        'selector': 'span',\n        'container_id': 'parent',\n        'data': {\n            1: {\n                'attribute': 'content',\n                'field': 'price',\n                'required': False,\n                'extractors': ['8', '4', '5', '6']\n            },\n            2: {\n                'attribute': 'content',\n                'field': 'date',\n                'required': False,\n                'extractors': ['4', '7']\n            }\n        }\n    }, {\n        'id': 'parent',\n        'item_container': True,\n        'selector': 'body'\n    }])\n    target3 = u\"\"\"\n    <html>\n    <body>\n    <tr>\n        <th class=\"item-key\">Name</th>\n        <td>\n            <a href=\"/olivia.html\">Name: Olivia</a>\n        </td>\n    </tr><span>2016-03-17 20:25</span>\n    </body></html>\"\"\"\n\n    template = HtmlPage(url=\"http://www.test.com/\", body=annotated)\n    target = HtmlPage(url=\"http://www.test.com/\", body=_target)\n    template2 = HtmlPage(url=\"http://www.test.com/\", body=annotated2)\n    target2 = HtmlPage(url=\"http://www.test.com/a\", body=_target2)\n    sample3 = {'plugins': {'annotations-plugin': {'extracts': annotations}},\n               'original_body': target3}\n    template3 = HtmlPage(url=\"http://www.test.com/a\",\n                         body=Annotations(sample3).apply())\n    target3 = HtmlPage(url=\"http://www.test.com/a\", body=target3)\n\n    def test_regex_extractor(self):\n        extractor = create_regex_extractor(\"(\\d+).*(\\.\\d+)\")\n        extracted = extractor(u\"The price of this product is <div>45</div> </div class='small'>.50</div> pounds\")\n        self.assertEqual(extracted, u\"45.50\")\n        processor = TextFieldTypeProcessor()\n        self.assertEqual(processor.adapt(extracted, None), u\"45.50\")\n\n    def test_raw_type_w_regex(self):\n        schema = {\n            'fields': {\n                'gender': {\n                    'required': False,\n                    'type': 'raw',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {\n            1: {\"regular_expression\": \"Gender.*(<td\\s*>(?:Male|Female)</td>)\"}\n        }\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0][0]['gender'], [u'<td >Male</td>'])\n\n    def test_negative_hit_w_regex(self):\n        schema = {\n            'fields': {\n                'gender': {\n                    'required': False,\n                    'type': 'number',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {1: {\"regular_expression\": \"Gender\\\\s+(Male|Female)\"}}\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0], None)\n\n    def test_text_type_w_regex(self):\n        schema = {\n            \"fields\": {\n                'gender': {\n                    'required': False,\n                    'type': 'text',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {1: {\"regular_expression\": \"Gender\\\\s+(Male|Female)\"}}\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0][0]['gender'], [u'Male'])\n\n    def test_type_extractor(self):\n        schema = {\n            \"fields\": {\n                'gender': {\n                    'required': False,\n                    'type': 'number',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {\n            1: {\"type_extractor\": \"text\"},\n            2: {\"regular_expression\": \"Gender\\\\s+(Male|Female)\"}\n        }\n        apply_extractors(descriptor, {\"gender\": [1, 2]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0][0]['gender'], [u'Male'])\n\n    def test_default_type_extractor(self):\n        schema = {\n            'fields': {}\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {\n            1: {\"regular_expression\": \"Gender\\\\s+(Male|Female)\"}\n        }\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0][0]['gender'], [u'Male'])\n\n    def test_text_type_w_regex_and_no_groups(self):\n        schema = {\n            'fields': {\n                'gender': {\n                    'required': False,\n                    'type': 'text',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {\n            1: {\"regular_expression\": \"Gender\"}\n        }\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target)[0][0]['gender'], [u'Gender'])\n\n    def test_extractor_w_empty_string_extraction(self):\n        schema = {\n            'fields': {\n                'gender': {\n                    'required': False,\n                    'type': 'text',\n                    'vary': False,\n                },\n                'name': {\n                    'required': True,\n                    'type': 'text',\n                    'vary': False,\n                }\n            }\n        }\n        descriptor = create_slybot_item_descriptor(schema)\n        extractors = {\n            1: {\n                \"regular_expression\": \"([0-9]+)\"\n            }\n        }\n        apply_extractors(descriptor, {\"gender\": [1]}, extractors)\n\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template2, {'#default': descriptor}, '0.12.0')])\n        self.assertEqual(ibl_extractor.extract(self.target2)[0][0]['name'], [u'Name Olivia'])\n\n    def test_per_annotation_extractors(self):\n        schema = {\n            'fields': {\n                'url': {\n                    'required': False,\n                    'type': 'text',\n                    'vary': False,\n                },\n                'name': {\n                    'required': True,\n                    'type': 'text',\n                    'vary': False,\n                }\n            }\n        }\n        extractors = {\n            '1': {\n                'type_extractor': 'url'\n            },\n            '2': {\n                'regular_expression': '(.*)\\.html'\n            },\n            '3': {\n                'regular_expression': 'Name: (.*)'\n            },\n            '4': {\n                'type_extractor': 'text'\n            },\n            '5': {\n                'type_extractor': 'price'\n            },\n            '6': {\n                'type_extractor': 'number'\n            },\n            '7': {\n                'type_extractor': 'date'\n            },\n            '8': {\n                'regular_expression': '(\\d+)-'\n            }\n        }\n        descriptors = {'#default': create_slybot_item_descriptor(schema)}\n        add_extractors_to_descriptors(descriptors, extractors)\n        ibl_extractor = SlybotIBLExtractor([\n            (self.template3, descriptors, '0.13.0')\n        ])\n        result = {u'_template': '6223d000057491040e4f411cf1f0734ea802eeb6',\n                  'name': [u'Olivia'], 'url': [u'http://www.test.com/olivia'],\n                  'title': [u'Name: Olivia'], 'price': [u'2016'],\n                  'date': [datetime(2016, 3, 17, 20, 25)]}\n        data = ibl_extractor.extract(self.target3)[0][0]\n        self.assertEqual(data, result)\n"
  },
  {
    "path": "slybot/slybot/tests/test_fieldtypes.py",
    "content": "from unittest import TestCase\nfrom scrapely.htmlpage import HtmlPage\n\nfrom slybot.fieldtypes import UrlFieldTypeProcessor, ImagesFieldTypeProcessor\n\nclass FieldTypesUrlEncoding(TestCase):\n    def test_not_standard_chars_in_url(self):\n        body = u'<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" /></html>'\n        url = u'fotos/produtos/Mam\\xe3e noel.jpg'\n        htmlpage = HtmlPage(url=u\"http://www.example.com/\", body=body, encoding='cp1252')\n        processor = UrlFieldTypeProcessor()\n        self.assertEqual(processor.adapt(url, htmlpage), u'http://www.example.com/fotos/produtos/Mam%C3%A3e%20noel.jpg')\n\n    def test_uri_stripped_of_whitespace_and_quote_characters_correctly(self):\n        urls = [u' image.jpg ', u\"    '/data.jpg'\", u'\\n\\t\"file.jpg\"\\n\\t\\t']\n        results = ['http://www.example.com/images/image.jpg',\n                   'http://www.example.com/data.jpg',\n                   'http://www.example.com/images/file.jpg']\n        htmlpage = HtmlPage(url=u\"http://www.example.com/images/\",\n                            body=u'<html><body></body></html>',\n                            encoding='utf-8')\n        url_p = UrlFieldTypeProcessor()\n        img_p = ImagesFieldTypeProcessor()\n        for text, url in zip(urls, results):\n            self.assertEqual(img_p.adapt(img_p.extract(text), htmlpage), url)\n            self.assertEqual(url_p.adapt(url_p.extract(text), htmlpage), url)\n\n    def test_uri_with_illegal_html_entities(self):\n        urls = [u'&#9;&#10 image.jpg ', u\"    '/&#11;&#0;data.jpg'\",\n                u'&#15;\\n\\t\"&#14;file.jpg\"\\n\\t\\t']\n        results = ['http://www.example.com/images/image.jpg',\n                   'http://www.example.com/data.jpg',\n                   'http://www.example.com/images/file.jpg']\n        htmlpage = HtmlPage(url=u\"http://www.example.com/images/\",\n                            body=u'<html><body></body></html>',\n                            encoding='utf-8')\n        url_p = UrlFieldTypeProcessor()\n        img_p = ImagesFieldTypeProcessor()\n        for text, url in zip(urls, results):\n            self.assertEqual(img_p.adapt(img_p.extract(text), htmlpage), url)\n            self.assertEqual(url_p.adapt(url_p.extract(text), htmlpage), url)\n\n    def test_blank_image_url(self):\n        assert ImagesFieldTypeProcessor().extract(' ') == ''\n"
  },
  {
    "path": "slybot/slybot/tests/test_fragment_generator.py",
    "content": "from unittest import TestCase\n\nfrom slybot.starturls import FragmentGenerator\n\n\nclass FragmentGeneratorTest(TestCase):\n    def test_generated_url_list(self):\n        github_start_urls = [\n            'https://github.com/scrapinghub',\n            'https://github.com/scrapy',\n            'https://github.com/scrapy-plugins'\n        ]\n        url_spec = {\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://github.com/'},\n                {'type': 'list', 'value': 'scrapinghub scrapy scrapy-plugins'},\n            ]\n        }\n        generator = FragmentGenerator()\n\n        self.assertEqual(list(generator(url_spec)), github_start_urls)\n\n    def test_generated_url_range(self):\n        github_start_urls = [\n            'https://github.com/0',\n            'https://github.com/1',\n            'https://github.com/2'\n        ]\n        url_spec = {\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://github.com/'},\n                {'type': 'range', 'value': '0-2'},\n            ]\n        }\n        generator = FragmentGenerator()\n\n        self.assertEqual(list(generator(url_spec)), github_start_urls)\n\n    def test_mixed_fragments(self):\n        donedeal_start_urls = [\n            'https://www.donedeal.ie/cars-for-sale/i/1',\n            'https://www.donedeal.ie/cars-for-sale/i/2',\n            'https://www.donedeal.ie/houses-for-sale/i/1',\n            'https://www.donedeal.ie/houses-for-sale/i/2',\n            'https://www.donedeal.ie/pets-for-sale/i/1',\n            'https://www.donedeal.ie/pets-for-sale/i/2',\n            'https://www.donedeal.ie/kitchens-for-sale/i/1',\n            'https://www.donedeal.ie/kitchens-for-sale/i/2'\n        ]\n        url_spec = {\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://www.donedeal.ie/'},\n                {\n                    'type': 'list',\n                    'value': ('cars-for-sale houses-for-sale '\n                              'pets-for-sale kitchens-for-sale')\n                },\n                {'type': 'fixed', 'value': '/i/'},\n                {'type': 'range', 'value': '1-2'},\n            ]\n        }\n        generator = FragmentGenerator()\n\n        self.assertEqual(list(generator(url_spec)), donedeal_start_urls)\n\n    def test_generated_letters(self):\n        github_start_urls = [\n            'https://github.com/scrapinghub/a',\n            'https://github.com/scrapinghub/b',\n            'https://github.com/scrapinghub/c',\n            'https://github.com/scrapinghub/d',\n        ]\n        url_spec = {\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://github.com/scrapinghub/'},\n                {'type': 'range', 'value': 'a-d'},\n            ]\n        }\n        generator = FragmentGenerator()\n\n        self.assertEqual(list(generator(url_spec)), github_start_urls)\n"
  },
  {
    "path": "slybot/slybot/tests/test_generic_form.py",
    "content": "import json\nfrom os.path import dirname, join\nfrom unittest import TestCase\n\nfrom slybot.generic_form import GenericForm\nfrom .utils import request_to_set\n\n_PATH = dirname(__file__)\n\n\nclass GenericFormTest(TestCase):\n\n    def test_simple_search_form(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\"]\n                }\n            ]\n        }\"\"\")\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n    def test_simple_search_form_2_values(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\", \"Boats\"]\n                }\n            ]\n        }\"\"\")\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', u'Boats'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n    def test_advanced_search_form(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\"]\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\"\n                }\n            ]\n        }\"\"\")\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '2'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '3'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '4'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n    def test_advanced_search_form_regex(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"xpath\": \".//*[@name='_nkw']\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\"]\n                },\n                {\n                  \"xpath\": \".//*[@name='_in_kw']\",\n                  \"type\": \"iterate\",\n                  \"value\": \"[1-2]\"\n                }\n            ]\n        }\"\"\")\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '2'), ('_nkw', u'Cars'), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n\n    def test_simple_search_form_with_named_parameter(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"name\": \"my_param\",\n                  \"type\": \"constants\",\n                  \"value\": [\"Cars\"]\n                }\n            ]\n        }\"\"\")\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), (u'my_param', u'Cars'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', ''), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n    def test_simple_search_form_with_file_type(self):\n        url = 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read()\n        form_descriptor = json.loads(\"\"\"{\n            \"type\": \"form\",\n            \"form_url\": \"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            \"xpath\": \"//form[@name='adv_search_from']\",\n            \"fields\": [\n                {\n                  \"name\": \"my_param\",\n                  \"type\": \"inurl\",\n                  \"value\": \"file://%s/test_params.txt\",\n                  \"file_values\": [\"Cars\", \"Boats\", \"Houses\", \"Electronics\"]\n                }\n            ]\n        }\"\"\" % join(_PATH, \"data\"))\n\n        generic_form = GenericForm()\n        start_requests = list(generic_form.fill_generic_form(url, body, form_descriptor))\n        expected_requests = [([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), (u'my_param', u'Cars'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', ''), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), (u'my_param', u'Boats'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', ''), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), (u'my_param', u'Houses'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', ''), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET'), ([('_adv', '1'), ('_ex_kw', ''), ('_ftrv', '1'), ('_ftrt', '901'), ('_sabdlo', u''), ('_sabdhi', u''), ('_sop', '12'), ('_samihi', u''), ('_ipg', '50'), ('_salic', '1'), (u'my_param', u'Electronics'), ('_sasl', ''), ('_udlo', ''), ('_okw', u''), ('_fsradio', '&LH_SpecificSeller=1'), ('_udhi', ''), ('_in_kw', '1'), ('_nkw', ''), ('_sacat', '0'), ('_oexkw', u''), ('_dmd', '1'), ('_saslop', '1'), ('_samilow', u'')], 'http://www.ebay.com/sch/i.html', 'GET')]\n        self.assertEqual(request_to_set(start_requests), request_to_set(expected_requests))\n\n"
  },
  {
    "path": "slybot/slybot/tests/test_linkextractors.py",
    "content": "import json\n\nfrom os.path import dirname\nfrom unittest import TestCase\nfrom scrapy.http import Request\nfrom scrapy.settings import Settings\nfrom slybot.utils import htmlpage_from_response\n\nfrom slybot.spidermanager import SlybotSpiderManager\nfrom slybot.linkextractor import create_linkextractor_from_specs\nfrom slybot.plugins.scrapely_annotations.builder import Annotations\nfrom slybot.utils import load_plugins\nfrom slybot.spider import IblSpider\nfrom .utils import UTF8HtmlResponse, UTF8TextResponse, UTF8XmlResponse, PATH\n\n\nclass Test_RegexLinkExtractor(TestCase):\n    def test_default(self):\n        specs = {\"type\": \"regex\", \"value\": ''}\n        lextractor = create_linkextractor_from_specs(specs)\n        text = \"Hello http://www.example.com/path, more text https://aws.amazon.com/product?id=23#tre?\"\n        response = UTF8TextResponse(url='http://www.example.com/', body=text)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 2)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[1].url, 'https://aws.amazon.com/product?id=23')\n\n    def test_custom(self):\n        specs = {\"type\": \"regex\", \"value\": 'url: ((?:http|https)://www.example.com/[\\w/]+)'}\n        lextractor = create_linkextractor_from_specs(specs)\n        text = \"url: http://www.example.com/path, more text url: https://www.example.com/path2. And more text url: https://aws.amazon.com/product?id=23#tre\"\n        response = UTF8TextResponse(url='http://www.example.com/', body=text)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 2)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[1].url, 'https://www.example.com/path2')\n\n    def test_custom_withargs(self):\n        specs = {\"type\": \"regex\", \"value\": 'url: ((?:http|https)://www.example.com/[\\w/]+)', 'allowed_schemes': ['http']}\n        lextractor = create_linkextractor_from_specs(specs)\n        text = \"url: http://www.example.com/path, more text url: https://www.example.com/path2. And more text url: https://aws.amazon.com/product?id=23#tre\"\n        response = UTF8TextResponse(url='http://www.example.com/', body=text)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n\nxmlfeed = \"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<rss version=\"2.0\">\n<channel>\n    <title>RSS Title</title>\n    <description>This is an example of an RSS feed</description>\n    <link>http://www.someexamplerssdomain.com/main.html</link>\n    <lastBuildDate>Mon, 06 Sep 2010 00:01:00 +0000 </lastBuildDate>\n    <pubDate>Mon, 06 Sep 2009 16:20:00 +0000 </pubDate>\n    <ttl>1800</ttl>\n\n    <item>\n        <title>Example entry</title>\n        <description>Here is some text containing an interesting description.</description>\n        <link>http://www.wikipedia.org/</link>\n        <guid>unique string per item</guid>\n        <pubDate>Mon, 06 Sep 2009 16:20:00 +0000 </pubDate>\n    </item>\n\n</channel>\n</rss>\"\"\"\n\nsitemapfeed = \"\"\"\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n        xmlns:image=\"http://www.sitemaps.org/schemas/sitemap-image/1.1\"\n        xmlns:video=\"http://www.sitemaps.org/schemas/sitemap-video/1.1\">\n\n<url><loc>http://www.accommodationforstudents.com/</loc><changefreq>daily</changefreq><priority>1.00</priority></url>\n<url><loc>http://www.accommodationforstudents.com/London.asp</loc><changefreq>daily</changefreq><priority>1.00</priority></url>\n<url><loc>http://www.accommodationforstudents.com/createaccounts.asp</loc><changefreq>daily</changefreq><priority>0.85</priority></url>\n</urlset>\n\"\"\"\n\nsitemapindex = \"\"\"\n<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n    <sitemap>\n        <loc>http://www.example.com/sitemap1.xml.gz</loc>\n        <lastmod>2004-10-01T18:23:17+00:00</lastmod>\n    </sitemap>\n</sitemapindex>\n\"\"\"\n\natomfeed = \"\"\"\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<feed xmlns=\"http://www.w3.org/2005/Atom\">\n\n    <title>Example Feed</title>\n    <subtitle>A subtitle.</subtitle>\n    <link href=\"http://example.org/feed/\" rel=\"self\" />\n    <link href=\"http://example.org/\" />\n\n    <entry>\n        <title>Atom-Powered Robots Run Amok</title>\n        <link href=\"http://example.org/2003/12/13/atom03\" />\n        <summary>Some text.</summary>\n        <author>\n            <name>John Doe</name>\n            <email>johndoe@example.com</email>\n        </author>\n    </entry>\n</feed>\n\"\"\"\n\nclass Test_XmlLinkExtractors(TestCase):\n    def setUp(self):\n        self.response = UTF8TextResponse(url='http://www.example.com/', body=xmlfeed)\n        self.sitemap = UTF8TextResponse(url='http://www.example.com/sitemap.xml', body=sitemapfeed)\n        self.sitemapindex = UTF8TextResponse(url='http://www.example.com/sitemap.xml', body=sitemapindex)\n        self.atom = UTF8TextResponse(url='http://www.example.com/atom', body=atomfeed)\n\n    def test_rss(self):\n        specs = {\"type\": \"rss\", \"value\": \"\"}\n        lextractor = create_linkextractor_from_specs(specs)\n        links = list(lextractor.links_to_follow(self.response))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.wikipedia.org/')\n\n    def test_xml(self):\n        specs = {\"type\": \"xpath\", \"value\": \"//item/link/text()\"}\n        lextractor = create_linkextractor_from_specs(specs)\n        links = list(lextractor.links_to_follow(self.response))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.wikipedia.org/')\n\n    def test_sitemap(self):\n        specs = {\"type\": \"sitemap\", \"value\": \"\"}\n        lextractor = create_linkextractor_from_specs(specs)\n        links = list(lextractor.links_to_follow(self.sitemap))\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, 'http://www.accommodationforstudents.com/')\n\n        links = list(lextractor.links_to_follow(self.sitemapindex))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.example.com/sitemap1.xml.gz')\n\n    def test_atom(self):\n        specs = {\"type\": \"atom\", \"value\": \"\"}\n        lextractor = create_linkextractor_from_specs(specs)\n        links = list(lextractor.links_to_follow(self.atom))\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, 'http://example.org/feed/')\n\n    def test_xml_remove_namespaces(self):\n        specs = {\"type\": \"xpath\", \"value\": \"//link/@href\", \"remove_namespaces\": True}\n        lextractor = create_linkextractor_from_specs(specs)\n        links = list(lextractor.links_to_follow(self.atom))\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, 'http://example.org/feed/')\n\n\nclass TestXmlLinkExtractionFromSpider(TestCase):\n    def setUp(self):\n        smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % PATH)\n        self.spider = smanager.create('books.toscrape.com_1')\n\n    def test_xml_content(self):\n        response = UTF8TextResponse(\n            url='http://www.example.com/', body=xmlfeed,\n            headers={'Content-Type': 'application/xml'})\n        links = list(self.spider.parse(response))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.wikipedia.org/')\n\n    def test_endswith_xml(self):\n        sitemap = UTF8TextResponse(\n            url='http://www.example.com/sitemap.xml', body=sitemapfeed)\n        sitemap_index = UTF8TextResponse(\n            url='http://www.example.com/sitemap.xml', body=sitemapindex)\n        links = list(self.spider.parse(sitemap))\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, 'http://www.accommodationforstudents.com/')\n\n        links = list(self.spider.parse(sitemap_index))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.example.com/sitemap1.xml.gz')\n\n    def test_atom(self):\n        atom = UTF8TextResponse(\n            url='http://www.example.com/atom', body=atomfeed,\n            headers={'Content-Type': 'application/atom+xml'},\n            encoding='utf-8')\n        links = list(self.spider.parse(atom))\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, 'http://example.org/feed/')\n\n    def test_xml_response(self):\n        xmlresponse = UTF8XmlResponse(url='http://example.com/', body=xmlfeed)\n        links = list(self.spider.parse(xmlresponse))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.wikipedia.org/')\n\n\ncsvfeed = \"\"\"\nMy feed\n\nProduct A,http://www.example.com/path,A\nProduct B,http://www.example.com/path2,B\n\"\"\"\n\ncsvfeed2 = \"\"\"\nMy feed\n\nProduct A|http://www.example.com/path|A\nProduct B|http://www.example.com/path2|B\n\"\"\"\n\ncsvfeed3 = \"\"\"\nMy feed\n\nname,url,id\nProduct A,http://www.example.com/path,A\nProduct B,http://www.example.com/path2,B\n\"\"\"\n\nclass Test_CsvLinkExtractor(TestCase):\n    def test_simple(self):\n        specs = {\"type\": \"column\", \"value\": 1}\n        lextractor = create_linkextractor_from_specs(specs)\n        response = UTF8TextResponse(url='http://www.example.com/', body=csvfeed)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 2)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[1].url, 'http://www.example.com/path2')\n\n    def test_extra_params(self):\n        specs = {\"type\": \"column\", \"value\": 1, \"delimiter\": \"|\"}\n        lextractor = create_linkextractor_from_specs(specs)\n        response = UTF8TextResponse(url='http://www.example.com/', body=csvfeed2)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 2)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[1].url, 'http://www.example.com/path2')\n\n    def test_header(self):\n        specs = {\"type\": \"column\", \"value\": 1}\n        lextractor = create_linkextractor_from_specs(specs)\n        response = UTF8TextResponse(url='http://www.example.com/', body=csvfeed3)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 2)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[1].url, 'http://www.example.com/path2')\n\nhtml = \"\"\"\n<a href=\"http://www.example.com/path\">Click here</a>\n\"\"\"\n_PATH = dirname(__file__)\nwith open('%s/data/templates/daft_list.json' % _PATH) as f:\n    daft_sample = json.load(f)\n    daft_body = Annotations(daft_sample).apply()\n    daft_sample['annotated_body'] = daft_body\n\n\nclass Test_HtmlLinkExtractor(TestCase):\n    def test_simple(self):\n        specs = {\"type\": \"html\", \"value\": None}\n        lextractor = create_linkextractor_from_specs(specs)\n        response = UTF8HtmlResponse(url='http://www.example.com/', body=html)\n        links = list(lextractor.links_to_follow(response))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[0].text, 'Click here')\n\n\nclass Test_PaginationExtractor(TestCase):\n    def test_simple(self):\n        specs = {\"type\": \"pagination\", \"value\": None}\n        lextractor = create_linkextractor_from_specs(specs)\n        html_page = htmlpage_from_response(\n            UTF8HtmlResponse(url='http://www.example.com/', body=html))\n        html_page.headers['n_items'] = 1\n        links = list(lextractor.links_to_follow(html_page))\n        self.assertEqual(len(links), 1)\n        self.assertEqual(links[0].url, 'http://www.example.com/path')\n        self.assertEqual(links[0].text, 'Click here')\n\n    def test_start_urls(self):\n        specs = {\n            \"type\": \"pagination\",\n            \"value\": None,\n            \"start_urls\": ['http://www.spam.com/?p=1',\n                           'http://www.eggs.com/?page=0']\n        }\n        lextractor = create_linkextractor_from_specs(specs)\n        html = \"\"\"\n        <a href=\"http://www.spam.com/?p=100\">Click here 1</a>\n        <a href=\"http://www.spam.com/?p=200\">Click here 2</a>\n        <a href=\"http://www.spam.com/?p=300\">Click here 3</a>\n        \"\"\"\n        html_page = htmlpage_from_response(\n            UTF8HtmlResponse(url='http://www.example.com/', body=html))\n        links = list(lextractor.links_to_follow(html_page))\n        links = sorted(links, key=lambda link: link.url)\n        self.assertEqual(len(links), 3)\n        self.assertEqual(links[0].url, \"http://www.spam.com/?p=100\")\n        self.assertEqual(links[1].url, \"http://www.spam.com/?p=200\")\n        self.assertEqual(links[2].url, \"http://www.spam.com/?p=300\")\n        self.assertEqual(links[0].text, 'Click here 1')\n        self.assertEqual(links[1].text, 'Click here 2')\n        self.assertEqual(links[2].text, 'Click here 3')\n\n    def test_trained(self):\n        base = 'http://www.daft.ie/ireland/houses-for-sale/?offset={}'.format\n        daft_url = base(10)\n        spec = {\n            'start_urls': [daft_url],\n            'links_to_follow': 'auto',\n            'respect_nofollow': False,\n            'follow_patterns': [],\n            'exclude_patterns': [],\n            'init_requests': [],\n            'templates': [daft_sample]\n        }\n        settings = Settings()\n        settings.set('LOADED_PLUGINS', load_plugins(settings))\n        spider = IblSpider('hn', spec, {}, {}, settings=settings)\n        request = Request(daft_url)\n        response = UTF8HtmlResponse(url=daft_url, body=daft_body,\n                                    request=request)\n        data = {r.url for r in spider.handle_html(response)\n                if isinstance(r, Request)}\n        self.assertEqual({base(i) for i in (90, 80, 70)}, data)\n"
  },
  {
    "path": "slybot/slybot/tests/test_migration.py",
    "content": "import unittest\n\nfrom slybot.plugins.scrapely_annotations.migration import handle_tables\n\n\nclass MigrationTests(unittest.TestCase):\n    def test_table_generalization(self):\n        selectors = [\n            ('table.mainbg > tr:nth-child(5) > td:nth-child(1) > '\n             'table:nth-child(2) > tr:nth-child(3) > td:nth-child(1) > '\n             'p:nth-child(1) > strong:nth-child(1)',\n             'table.mainbg > tr:nth-child(5) > td:nth-child(1) > '\n             'table:nth-child(2) > tr:nth-child(3) > td:nth-child(1) > '\n             'p:nth-child(1) > strong:nth-child(1), table.mainbg > * > '\n             'tr:nth-child(5) > td:nth-child(1) > table:nth-child(2) > '\n             'tr:nth-child(3) > td:nth-child(1) > p:nth-child(1) > '\n             'strong:nth-child(1), table.mainbg > tr:nth-child(5) > '\n             'td:nth-child(1) > table:nth-child(2) > * > tr:nth-child(3) > '\n             'td:nth-child(1) > p:nth-child(1) > strong:nth-child(1), '\n             'table.mainbg > * > tr:nth-child(5) > td:nth-child(1) > '\n             'table:nth-child(2) > * > tr:nth-child(3) > td:nth-child(1) > '\n             'p:nth-child(1) > strong:nth-child(1)'),\n            ('div > p > .table > div > span', 'div > p > .table > div > span'),\n            ('div > p > #table > div > span', 'div > p > #table > div > span'),\n            ('div > p > table > div > span',\n             'div > p > table > div > span, div > p > table > * > div > span'),\n            ('div > p > table:nth-child(4) > div > span',\n             'div > p > table:nth-child(4) > div > span, '\n             'div > p > table:nth-child(4) > * > div > span'),\n            ('table', 'table')\n        ]\n        for selector, generalized in selectors:\n            self.assertEqual(handle_tables(selector), generalized)\n"
  },
  {
    "path": "slybot/slybot/tests/test_multiple_item_extraction.py",
    "content": "# -*- coding: utf-8 -*-\nimport json\nimport re\n\nfrom unittest import TestCase\nfrom scrapy import Request, Item\nfrom scrapy.settings import Settings\nfrom scrapy.http.response.html import HtmlResponse\nfrom slybot.plugins.scrapely_annotations.extraction import (\n    TemplatePageMultiItemExtractor,\n    SlybotIBLExtractor)\nfrom slybot.plugins.scrapely_annotations.extraction.pageparsing import (\n    parse_template)\nfrom slybot.plugins.scrapely_annotations.extraction.container_extractors import (\n    BaseContainerExtractor, ContainerExtractor, RepeatedContainerExtractor)\nfrom slybot.plugins.scrapely_annotations.extraction.utils import group_tree\nfrom slybot.extractors import add_extractors_to_descriptors\nfrom slybot.item import create_slybot_item_descriptor\nfrom slybot.plugins.scrapely_annotations.builder import (\n    Annotations, _clean_annotation_data\n)\nfrom slybot.spider import IblSpider\nfrom slybot.spidermanager import SlybotSpiderManager\nfrom scrapely.extraction.pageobjects import TokenDict\nfrom scrapely.htmlpage import HtmlPage\nfrom scrapely.extraction.regionextract import BasicTypeExtractor\nfrom scrapely.extraction.pageparsing import parse_extraction_page\nfrom scrapely.htmlpage import HtmlTagType\n\nfrom .utils import (open_spec, open_sample_and_page, open_page, make_spider,\n                    PATH, open_spider_page_and_results)\n\n\nbase_page = u\"\"\"<html><body>\n    <ul>{}</ul>\n</body></html>\"\"\".format\n\nitem_template = u\"\"\"\n    <li>\n        <div><span>{rank}</span><h3><a href='/item/{idx}'>Item i</a></h3></div>\n        <div><p>Text {idx} Text {idx}</p><p>Text {idx} Text {idx}</p></div>\n    </li>\n\"\"\".format\n\nhtml = base_page('\\n'.join(item_template(idx=i, rank=i if i % 2 else '')\n                           for i in range(1, 11)))\n\nannotations = _clean_annotation_data([{\n    'id': 'annotation1', 'selector': 'li > div > h3 > a',\n    'container_id': 'repeated_parent',\n    'data': {1: {'attribute': 'content', 'field': 'title', 'required': False,\n                 'extractors': []},\n             2: {'attribute': 'href', 'field': 'url', 'required': False,\n                 'extractors': ['1', '2']}}},\n    {'id': 'annotation2', 'selector': 'li > div > span',\n     'container_id': 'repeated_parent',\n     'data': {1: {'attribute': 'content', 'field': 'rank',\n                  'required': True, 'extractors': []}}},\n    {'id': 'annotation3', 'selector': 'li > div:nth-child(2)',\n     'container_id': 'repeated_parent',\n     'data': {1: {'attribute': 'content', 'field': 'description',\n                  'required': True, 'extractors': []}}},\n    {'id': 'parent', 'item_container': True, 'selector': 'ul'},\n    {'id': 'repeated_parent', 'item_container': True, 'container_id': 'parent',\n     'selector': 'li', 'repeated': True}])\nschemas = {\n    '#default': {'name': 'default_item', 'fields': {}},\n    'data': {\n        'name': 'data_item',\n        'fields': {\n            'title': {'required': False, 'vary': False, 'type': 'text'},\n            'url': {'required': False, 'vary': False, 'type': 'url'},\n            'description': {'required': False, 'vary': False, 'type': 'text'},\n            'rank': {'required': False, 'vary': False, 'type': 'price'}}\n    }\n}\n\n\nsample = {'plugins': {'annotations-plugin': {'extracts': annotations}},\n          'original_body': html}\nsimple_template = HtmlPage(url=\"http://www.test.com/a\",\n                           body=Annotations(sample).apply())\ntarget1 = base_page('\\n'.join(item_template(idx=i, rank=1)\n                              for i in range(1, 11)))\ntarget2 = base_page('\\n'.join(item_template(idx=i, rank=i if i % 2 else '')\n                              for i in range(1, 11)))\ntarget1 = HtmlPage(url=\"http://www.test.com/a\", body=target1)\ntarget2 = HtmlPage(url=\"http://www.test.com/a\", body=target2)\nsimple_descriptors = {k: create_slybot_item_descriptor(v)\n                      for k, v in schemas.items()}\nadd_extractors_to_descriptors(simple_descriptors, {})\n\n\ntd = TokenDict()\nhtml_page = HtmlPage(body=open_spec('stack_overflow.html'))\nextraction_page = parse_extraction_page(td, html_page)\nwith open('%s/data/SampleProject/items.json' % PATH) as f:\n    items = json.load(f)\ndescriptors = {'#default': create_slybot_item_descriptor(items['default'],\n                                                         'default')}\ntemplate = parse_template(td, html_page, descriptors)\nunvalidated_template = parse_template(td, html_page, {})\nunvalidated_template.id = u'stack_overflow_test'\nbasic_extractors = BasicTypeExtractor.create(template.annotations)\nuncontained_annotation = basic_extractors[0]\nroot_container = basic_extractors[1]\nchild_container = basic_extractors[2]\nchild_annotations = basic_extractors[3:]\n\nsample_411, page_411 = open_sample_and_page('411_list.json')\nxceed_spider = open_spec('xceed.json')\n\n\ndef _annotation_tag_to_dict(tag):\n    return {attr: getattr(tag, attr, object())\n            for attr in ['annotation_text', 'end_index', 'metadata',\n                         'start_index', 'surrounds_attribute',\n                         'tag_attributes', 'variant_id']}\n\n\nclass ContainerExtractorTest(TestCase):\n\n    def test_get_container_info(self):\n        containers, annotations, remaining_annotations = \\\n            BaseContainerExtractor._get_container_data(basic_extractors)\n        self.assertEqual(remaining_annotations, [uncontained_annotation])\n        self.assertEqual(containers, {'root': root_container,\n                                      'child': child_container})\n        self.assertEqual(annotations, {'child': child_annotations,\n                                       'root': [child_container]})\n        # TODO: test template with missing referenced container\n\n    def test_build_extraction_tree(self):\n        containers = {'root': root_container, 'child': child_container}\n        tree = BaseContainerExtractor._build_extraction_tree(containers)\n        self.assertEqual([['root'], ['root', 'child']], tree)\n        # TODO: test cyclical tree\n\n    def test_group_tree(self):\n        annotations = {'child': child_annotations, 'root': [child_container]}\n        tree1 = [['root']]\n        self.assertEqual(group_tree(tree1, annotations),\n                         {'root': [child_container]})\n        tree2 = [['root'], ['root', 'child']]\n        self.assertEqual(group_tree(tree2, annotations),\n                         {'root': {'child': child_annotations}})\n\n    def test_find_annotation(self):\n        bce = BaseContainerExtractor(basic_extractors, template)\n        a2d = _annotation_tag_to_dict\n        self.assertEqual(a2d(bce._find_annotation(template, 'child')),\n                         a2d(child_container.annotation))\n        self.assertIsNone(bce._find_annotation(template, 'non_existant'))\n\n    def test_validate_and_adapt_item(self):\n        bce = BaseContainerExtractor(basic_extractors, template)\n        data = {'price': ['10']}\n        data['_type'] = 'skip_checks'\n        result = bce._validate_and_adapt_item(data, template).dump()\n        self.assertEqual(result,\n                         {'price': ['10'], '_type': 'skip_checks'})\n        data = {\n            'price': ['10'],\n            u'description': [u'It can do everything except make calls'],\n            u'name': ['Smartphone 6']\n        }\n        result = data.copy()\n        result['_type'] = 'default'\n        extracted = bce._validate_and_adapt_item(data, template).dump()\n        self.assertEqual(extracted,\n                         result)\n        data['pid'] = ['13532']\n        result = data.copy()\n        result['_type'] = 'default'\n        extracted = bce._validate_and_adapt_item(data, template).dump()\n        self.assertEqual(extracted, result)\n        bce.extra_requires = ['pid', '_sticky1']\n        data['_sticky1'] = True\n        extracted = bce._validate_and_adapt_item(data, template).dump()\n        self.assertEqual(extracted, result)\n\n    def test_find_tokens(self):\n        htt = HtmlTagType\n        s = RepeatedContainerExtractor._find_tokens(template.page_tokens[::-1],\n                                                    (htt.OPEN_TAG,),\n                                                    template)\n        self.assertEqual(s, [16777216, 16777217, 16777218])\n        e = RepeatedContainerExtractor._find_tokens(template.page_tokens,\n                                                    (htt.CLOSE_TAG,),\n                                                    template)\n        self.assertEqual(e, [33554432, 33554439, 33554438])\n\n    def test_extract(self):\n        extractors = ContainerExtractor.apply(unvalidated_template,\n                                              basic_extractors)\n        ibl_extractor = TemplatePageMultiItemExtractor(unvalidated_template,\n                                                       extractors)\n        data = [i.dump() for i in ibl_extractor.extract(extraction_page)]\n        self.assertEqual(len(data), 96)\n        self.assertEqual(\n            {tuple(sorted(i.keys())) for i in data},\n            {(u'_index', u'_template', u'date', u'text', u'title', u'url')})\n        self.assertDictEqual(data[0], {\n            u'_index': 1,\n            u'_template': u'stack_overflow_test',\n            u'date': [u'2015-08-07 10:09:32Z'],\n            u'text': [u\"Bootstrap navbar doesn't open - mobile view\"],\n            u'title': [u'I have a sticky nav with this code (Which is not mine'\n                       u')\\n\\n// Create a clone of the menu, right next to '\n                       u'original.\\n...'],\n            u'url': [u'https://stackoverflow.com/questions/31875193/bootstrap-'\n                     u'navbar-doesnt-open-mobile-view']\n        })\n        self.assertDictEqual(data[50], {\n            u'_index': 51,\n            u'_template': u'stack_overflow_test',\n            u'date': [u'2015-08-07 10:01:03Z'],\n            u'text': [u'Rails in production with Apache+passenger error'],\n            u'title': [u\"Last days i'm trying to put my rails app in \"\n                       u\"production with apache and passenger(no rvm), but \"\n                       u\"still nothing. In my browser i get an error like \"\n                       u\"this:\\n\\nWe're sorry, but something went wrong.\"\n                       u\"\\nWe've been ...\"],\n            u'url': [u'https://stackoverflow.com/questions/31874997/rails-in-'\n                     u'production-with-apachepassenger-error']\n        })\n        self.assertDictEqual(data[-1], {\n            u'_index': 96,\n            u'_template': u'stack_overflow_test',\n            u'date': [u'2015-08-07 08:16:43Z'],\n            u'text': [u'iPython + Spark + Cassandra - Py4JJavaError and How to'\n                      u' connect to Cassandra from Spark?'],\n            u'title': [u\"How can I connect to Cassandra from Spark with \"\n                       u\"iPython?\\n\\nI have followed the code from here and \"\n                       u\"modified it,\\n\\nimport os\\nimport sys\\n\\n# Path for \"\n                       u\"spark source folder\\nos.environ['SPARK_HOME'] = ...\"],\n            u'url': [u'https://stackoverflow.com/questions/31872831/ipython-'\n                     u'spark-cassandra-py4jjavaerror-and-how-to-connect-to-'\n                     u'cassandra-from']\n        })\n\n    def test_extract_single_attribute_to_multiple_fields(self):\n        extractors = {'1': {'regular_expression': '(.*)\\s'},\n                      '2': {'regular_expression': '\\s(.*)'}}\n        descriptors = {'#default': create_slybot_item_descriptor({'fields': {\n            'full_name': {'type': 'text', 'required': False, 'vary': False},\n            'first_name': {'type': 'text', 'required': False, 'vary': False,\n                           'name': u'prénom'},\n            'last_name': {'type': 'text', 'required': False, 'vary': False,\n                          'name': 'nom'},\n            'address': {'type': 'text', 'required': False, 'vary': False}}})}\n        add_extractors_to_descriptors(descriptors, extractors)\n        extractor = SlybotIBLExtractor([(sample_411, descriptors, '0.13.0')])\n        data = extractor.extract(page_411)[0][1]\n        self.assertEqual(data['full_name'], [u'Joe Smith'])\n        self.assertEqual(data[u'prénom'], [u'Joe'])\n        self.assertEqual(data['nom'], [u'Smith'])\n\n    def test_extract_missing_schema(self):\n        extractor = SlybotIBLExtractor([(sample_411, {}, '0.13.0')])\n        data = extractor.extract(page_411)[0][1]\n        raw_html = ('<span itemprop=\"name\"><span itemprop=\"givenName\">Joe'\n                    '</span> <span itemprop=\"familyName\">Smith</span></span>')\n        self.assertEqual(data['full_name'], [raw_html])\n        self.assertEqual(data['first_name'], [raw_html])\n        self.assertEqual(data['last_name'], [raw_html])\n\n    def test_extract_multiple_item_types(self):\n        spider = IblSpider('xceed', xceed_spider, xceed_spider['items'], {},\n                           Settings())\n        data = list(spider.parse(\n            HtmlResponse('http://url',\n                         body=xceed_spider['templates'][0]['original_body'],\n                         encoding='utf-8')\n        ))\n        items = sorted([d for d in data if not isinstance(d, Request)],\n                       key=lambda x: ('ticket', 'venue', 'event').index(x['_type']))\n        self.assertEqual(items, xceed_spider['results'])\n\n    def test_extract_repeated_field(self):\n        sample = {\n            'plugins': {'annotations-plugin': {}},\n            'url': 'https://stackoverflow.com',\n            'original_body': re.sub(\n                'data-scrapy-annotate=\".*\"', '', html_page._body),\n            'scrapes': 'default',\n            'page_id': '507f520c3bf361f4c5cd55c44307a271bccb2218',\n            'version': '0.13.0'\n        }\n        data = open_spec('so_annotations.json')\n        annos, items, results = data['annos'], data['items'], data['results']\n        sample['plugins']['annotations-plugin']['extracts'] = annos\n        spider = IblSpider('so', make_spider(sample=sample),\n                           items, {}, Settings())\n        page = HtmlResponse('http://url', body=sample['original_body'],\n                            encoding='utf-8')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        keys = {(u'_index', u'_template', u'_type', u'answered', u'tags',\n                 u'title', 'url')}\n        self.assertEqual({tuple(sorted(i.keys())) for i in items}, keys)\n        self.assertEqual([items[0], items[52], items[-1]], results)\n        self.assertEqual(len(items), 96)\n        spider, page, results = open_spider_page_and_results('autoevolution.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n\n    def test_item_merging_in_container(self):\n        spider, page, results = open_spider_page_and_results('autoevolution2.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n\n    def test_extracted_items_are_scrapy_items(self):\n        spider, page, results = open_spider_page_and_results('autoevolution2.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertTrue(len(items) > 0)\n        self.assertTrue(all(isinstance(i, Item) for i in items))\n\n    def test_required_annotation(self):\n        ibl_extractor = SlybotIBLExtractor([\n            (simple_template, simple_descriptors, '0.13.0')\n        ])\n        data, _ = ibl_extractor.extract(target1)\n        self.assertEqual(len(data), 10)\n        self.assertTrue(all('rank' in item and item['rank'] for item in data))\n        self.assertTrue(all('description' in item and item['description']\n                            for item in data))\n        data, _ = ibl_extractor.extract(target2)\n        self.assertEqual(len(data), 5)\n        self.assertTrue(all('rank' in item and item['rank'] for item in data))\n        self.assertTrue(all('description' in item and item['description']\n                            for item in data))\n\n    def test_missing_selectors(self):\n        spider, page, results = open_spider_page_and_results('cars.com.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n\n    def test_against_false_positive(self):\n        page = open_page('autoevolution.html')\n        spider, _, _ = open_spider_page_and_results('autoevolution2.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, [])\n\n    def test_nested_items(self):\n        smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % PATH)\n        name = 'books.toscrape.com'\n        spider = smanager.create(name)\n        spec = smanager._specs[\"spiders\"][name]\n        t = [t for t in spec[\"templates\"] if t['page_id'] == '3617-44af-a2f0'][0]\n        response = HtmlResponse(t['url'], body=t['original_body'].encode('utf-8'))\n        results = [i for i in spider.parse(response)\n                   if hasattr(i, '__getitem__')]\n        self.assertEqual(results, t['results'])\n\n    def test_nested_items_without_nested_structure(self):\n        spider, page, results = open_spider_page_and_results(\n            'cars.com_nested.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n\n    def test_empty_page(self):\n        spider, page, _ = open_spider_page_and_results(\n            'cars.com_nested.json')\n        page = HtmlResponse(page.url, body=u'', encoding='utf-8')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, [])\n\n    def test_repeated_css_extractors(self):\n        spider, page, results = open_spider_page_and_results('stips.co.il.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n        spider, page, results = open_spider_page_and_results('firmen.wko.at.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n"
  },
  {
    "path": "slybot/slybot/tests/test_page_actions.py",
    "content": "from unittest import TestCase\nfrom slybot.pageactions import filter_for_url, PageActionsMiddleware\nfrom os.path import dirname\nfrom scrapy import Request\nfrom scrapy import Spider\nfrom slybot.spider import IblSpider\n_PATH = dirname(__file__)\n\ndef mkreq():\n    return Request('http://localhost:9050', meta={\n        \"splash\": {\n            \"endpoint\": \"render.html\",\n            \"args\": {\n                \"url\": \"http://test.com\",\n            }\n        }\n    })\n\nclass PATest(TestCase):\n    def test_url_filter(self):\n        f = filter_for_url('http://test.com/path/foo/bar')\n        self.assertTrue(f(dict(accept=\"\\\\/\\\\/test.com\", reject=\"baz\")))\n        self.assertTrue(f(dict(accept=None, reject=\"baz\")))\n        self.assertTrue(f(dict(accept='foo/bar', reject=None)))\n\n        self.assertFalse(f(dict(accept=\"//test.com\", reject=\"foo/bar\")))\n        self.assertFalse(f(dict(accept=\"foo\", reject=\"bar\")))\n        self.assertFalse(f(dict(accept=None, reject=\"foo/bar\")))\n        self.assertFalse(f(dict(accept=\"baz\", reject=None)))\n\n    def test_middleware(self):\n        m = PageActionsMiddleware()\n        spider = Spider('test_spider')\n\n        req = mkreq()\n        spider.page_actions = [{\n            \"type\": \"click\",\n            \"selector\": \"#showmore\"\n        }]\n        m.process_request(req, spider)\n        self.assertEqual(req.meta['splash']['endpoint'], 'execute') # Page actions enabled\n\n        req = mkreq()\n        spider.page_actions = []\n        m.process_request(req, spider)\n        self.assertEqual(req.meta['splash']['endpoint'], 'render.html') # Page actions disabled\n\n        req = mkreq()\n        spider.page_actions = [{\n            \"type\": \"click\",\n            \"selector\": \"#showmore\",\n            \"reject\": \"test\\\\.com\"\n        }]\n        m.process_request(req, spider)\n        self.assertEqual(req.meta['splash']['endpoint'], 'render.html') # Page actions disabled\n\n"
  },
  {
    "path": "slybot/slybot/tests/test_schema_validation.py",
    "content": "# -*- coding: utf-8 -*-\nimport re\n\nfrom unittest import TestCase\nfrom os.path import dirname, join\n\nfrom slybot.validation.schema import get_schema_validator, \\\n            ValidationError, validate_project_schema\nfrom slybot.utils import open_project_from_dir\n\n_TEST_PROJECT_DIR = join(dirname(__file__), \"data/SampleProject\")\n\ndef spider_json(start_urls):\n    return {\n        \"start_urls\": start_urls,\n        \"links_to_follow\": \"none\",\n        \"respect_nofollow\": True,\n        \"templates\": [],\n    }\n\ndef start_url_schema(url_string):\n    return {\"url\": url_string, \"type\": \"url\"}\n\nclass JsonSchemaTest(TestCase):\n\n    def test_regex_formatting_wrong(self):\n        obj = {\n            \"0\": {\n                \"regular_expression\": \"Item: (\\d+\"\n            }\n        }\n        validator = get_schema_validator(\"extractors\")\n        with self.assertRaises(ValidationError):\n            validator.validate(obj)\n\n    def test_regex_formatting_ok(self):\n        obj = {\n            \"0\": {\n                \"regular_expression\": \"Item: (\\d+)\"\n            }\n        }\n        validator = get_schema_validator(\"extractors\")\n        self.assertEqual(validator.validate(obj), None)\n\n    def test_valid_url(self):\n        legacy_start_urls = [\n            'http://www.example.com/',\n            'http://www.example.com/經濟',\n            'http://www.example.com/?q=經濟',\n            'http://www.example.com/#經濟',\n            'http://faß.de',\n            'http://例.jp/',\n            'http://[2001:0000:1234:0000:0000:C1C0:ABCD:0876]/foo/bar',\n            'http://[2001::]/foo/bar',\n            'http://8.8.8.8/foo/bar',\n            'http://localhost:8080/foo/bar',\n            'http://foo@localhost:8080/foo/bar',\n            'http://foo:bar@localhost:8080/foo/bar',\n            'http://domain.com/path/file.html?param=FOO^111&param2=bar&param3=true&_param4=on', # Anonymized URL form sentry d46840d2457c4042b1b58f2fa40e984b\n            'https://domain.com/path/file.htm?param=foo#hash/foo/bar/baz:foo|bar:baz',          # Anonymized URL from sentry 01dd2fa09d9540b69ebd33372b2b3a2d\n            'https://domain.com/path/file.htm?param=foo#hash/foo/bar/baz:foo|bar%5B%5D:12345',  # Anonymized URL from sentry 87d49ee751494c90a8941dcbdacea634\n            'http://domain.com/path?bar[foo]=baz&foo[bar]=12345',                               # Anonymized URL from sentry 9f6835f5decd4d57b9475f04f0a58bd4\n        ]\n\n        start_urls = list(map(start_url_schema, legacy_start_urls))\n        validator = get_schema_validator(\"spider\")\n\n        self.assertEqual(validator.validate(spider_json(legacy_start_urls)), None)\n        self.assertEqual(validator.validate(spider_json(start_urls)), None)\n\n    def test_invalid_url(self):\n        legacy_start_urls = (\n            12345, # Not a string\n            'example.com', # Lacks protocol\n            'http://[:::1]/foo/bar', # Bad IPv6 addr\n            'http://http://foo.com/bar', # Double protocol\n            'spotify:foobar', # Not http/s protocol\n            '/foo', # relative\n            '?foo', # relative\n            '#foo', # relative\n        )\n\n        validator = get_schema_validator(\"spider\")\n        for invalid_url in legacy_start_urls:\n            with self.assertRaises(ValidationError):\n                validator.validate(spider_json([invalid_url]))\n\n    def test_valid_mixed_fragments(self):\n        start_urls = [\n            {'type': 'url', 'url': 'http://www.example.com/'},\n            {'type': 'generated', 'url': 'http://', 'fragments': [\n                {'type': 'fixed', 'value': 'http://'}\n            ]},\n        ]\n        validator = get_schema_validator(\"spider\")\n\n        self.assertEqual(validator.validate(spider_json(start_urls)), None)\n\n    def test_valid_fragments(self):\n        fragments = (\n            [\n                {'type': 'fixed', 'value': 'domain.com'},\n                {'type': 'range', 'value': '0-10'}\n            ],\n            [{'type': 'range', 'value': '0-10'}],\n            [{'type': 'list', 'value': 'a b c'}],\n            [{'type': 'list', 'value': 'one_element'}]\n        )\n\n        validator = get_schema_validator(\"spider\")\n        for fragment in fragments:\n            start_url = [{\n                'url': 'http://domain.com',\n                'type': 'generated',\n                'fragments': fragment\n            }]\n            self.assertEqual(validator.validate(spider_json(start_url)), None)\n\n    def test_test_project(self):\n        specs = open_project_from_dir(_TEST_PROJECT_DIR)\n        self.assertTrue(validate_project_schema(specs))\n"
  },
  {
    "path": "slybot/slybot/tests/test_selectors.py",
    "content": "from unittest import TestCase\nfrom scrapy.http import HtmlResponse, Request\nfrom slybot.spidermanager import SlybotSpiderManager\n\nfrom .utils import open_spider_page_and_results, PATH\n\n\nclass SpiderTest(TestCase):\n    smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % PATH)\n\n    def test_spider_with_selectors(self):\n        name = \"seedsofchange\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t = spec[\"templates\"][1]\n        response = HtmlResponse(t[\"url\"], body=t[\"original_body\"].encode('utf-8'))\n\n        item = {\n            '_template': u'4fac3b47688f920c7800000f',\n            '_type': u'default',\n            'image': u'previous data',\n        }\n\n        spider.plugins['Selectors'].process_item(item, response)\n\n        self.assertEqual(item['breadcrumbs'], [u'Seeds & Supplies', u'Seeds', u'Vegetables', u'Squash & Pumpkins'])\n        self.assertEqual(item['image'], [u'previous data', u'/images/product_shots/PPS14165B.jpg'])\n\n    def test_spider_with_inbuilt_selectors(self):\n        \"\"\"Test selectors for text, price, date and html extractors.\"\"\"\n        name = 'books.toscrape.com'\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t = [t for t in spec[\"templates\"]\n             if t['page_id'] == \"0a96a4dba3c62275ecf13903f42a007dd06718d8\"][0]\n        response = HtmlResponse(t['url'], body=t['original_body'].encode('utf-8'))\n        results = [i for i in spider.parse(response)\n                   if hasattr(i, '__getitem__')]\n        for result in results:\n            result['posted'] = [result['posted'][0].strftime('%Y-%m-%d %H:%M')]\n        self.assertEqual(results, t['_results'])\n\n    def test_spider_with_surrounded_selectors(self):\n        spider, page, results = open_spider_page_and_results('cs-cart.json')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        self.assertEqual(items, results)\n"
  },
  {
    "path": "slybot/slybot/tests/test_spider.py",
    "content": "from unittest import TestCase\nfrom os.path import dirname, join\nfrom contextlib import contextmanager\n\nfrom scrapy.http import Response, HtmlResponse, Request\nfrom scrapy.item import Item, DictItem\nfrom scrapy.utils.project import get_project_settings\nfrom scrapy.utils.reqser import request_to_dict\n\nfrom scrapely.htmlpage import HtmlPage\n\nfrom slybot.spidermanager import SlybotSpiderManager\n\nfrom .utils import UTF8HtmlResponse, UTF8TextResponse, UTF8XmlResponse\n_PATH = dirname(__file__)\n\n\n@contextmanager\ndef splash_spider_manager(splash_url='http://localhost:8050'):\n    settings = get_project_settings()\n    settings.set('SPLASH_URL', splash_url)\n    yield SlybotSpiderManager(\"%s/data/SampleProject\" % _PATH,\n                              settings=settings)\n\n\nclass SpiderTest(TestCase):\n    smanager = SlybotSpiderManager(\"%s/data/SampleProject\" % _PATH)\n\n    def test_list(self):\n        self.assertEqual(set(self.smanager.list()), set([\n            \"seedsofchange\", \"seedsofchange2\", \"seedsofchange.com\", \"sitemaps\",\n            \"pinterest.com\", \"ebay\", \"ebay2\", \"ebay3\", \"ebay4\", \"cargurus\",\n            \"networkhealth.com\", \"allowed_domains\", \"any_allowed_domains\",\n            \"example.com\", \"example2.com\", \"example3.com\", \"example4.com\",\n            \"books.toscrape.com\", \"books.toscrape.com_1\"]))\n\n    def test_spider_with_link_template(self):\n        name = \"seedsofchange\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t1, t2 = spec[\"templates\"]\n        target1, target2 = [HtmlPage(url=t[\"url\"], body=t[\"original_body\"]) for t in spec[\"templates\"]]\n\n        items, link_regions = spider.plugins['Annotations'].extract_items(target1)\n        self.assertEqual(items, [])\n        self.assertEqual(len(list(spider.plugins['Annotations']._process_link_regions(target1, link_regions))), 104)\n\n        items, link_regions = spider.plugins['Annotations'].extract_items(target2)\n        self.assertEqual(items[0], {\n            '_template': u'4fac3b47688f920c7800000f',\n            '_type': u'default',\n            u'category': [u'Winter Squash'],\n            u'days': [None],\n            u'description': [u'1-2 lbs. (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.'],\n            u'lifecycle': [u'Tender Annual'],\n            u'name': [u'Gold Nugget'],\n            u'price': [u'3.49'],\n            u'product_id': [u'01593'],\n            u'species': [u'Cucurbita maxima'],\n            'url': u'http://www.seedsofchange.com/garden_center/product_details.aspx?item_no=PS14165',\n            u'weight': [None]}\n        )\n        self.assertEqual(link_regions, [])\n        self.assertEqual(len(list(spider.plugins['Annotations']._process_link_regions(target2, link_regions))), 0)\n\n    def test_spider_with_link_region_but_not_link_template(self):\n        name = \"seedsofchange2\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t1, t2 = spec[\"templates\"]\n\n        target1, target2 = [HtmlPage(url=t[\"url\"], body=t[\"original_body\"]) for t in spec[\"templates\"]]\n        items, link_regions = spider.plugins['Annotations'].extract_items(target2)\n        self.assertEqual(items[0], {\n            '_template': u'4fad6a7d688f922437000017',\n            '_type': u'default',\n            u'category': [u'Winter Squash'],\n            u'days': [None],\n            u'description': [u'1-2 lbs. (75-95 days)&nbsp;This early, extremely productive, compact bush variety is ideal for small gardens.&nbsp; Miniature pumpkin-shaped fruits have pale red-orange skin and dry, sweet, dark orange flesh.&nbsp; Great for stuffing, soups and pies.'],\n            u'lifecycle': [u'Tender Annual'],\n            u'name': [u'Gold Nugget'],\n            u'price': [u'3.49'],\n            u'species': [u'Cucurbita maxima'],\n            'url': u'http://www.seedsofchange.com/garden_center/product_details.aspx?item_no=PS14165',\n            u'weight': [None]}\n        )\n        self.assertEqual(len(link_regions), 1)\n        self.assertEqual(len(list(spider.plugins['Annotations']._process_link_regions(target1, link_regions))), 25)\n\n    def test_spider_extracted_item_types(self):\n        name = \"seedsofchange2\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        t1, t2 = spec[\"templates\"]\n\n        page = HtmlResponse(t1[\"url\"], body=t2[\"original_body\"],\n                            encoding='utf-8')\n        items = [i for i in spider.parse(page) if not isinstance(i, Request)]\n        print(items)\n        print([type(item) for item in items])\n\n        self.assertIsInstance(items, list)\n        self.assertIsInstance(items[0], Item)\n        self.assertIsInstance(items[0], DictItem)\n\n    def test_login_requests(self):\n        name = \"pinterest.com\"\n        spider = self.smanager.create(name)\n        login_request = list(spider.start_requests())[0]\n\n        response = UTF8HtmlResponse(\n            url=\"https://pinterest.com/login/\",\n            body=open(join(_PATH, \"data\", \"pinterest.html\")).read())\n        response.request = login_request\n        form_request = login_request.callback(response)\n        expected = {\n            '_class': 'scrapy.http.request.form.FormRequest',\n            '_encoding': 'utf-8',\n            'body': b'email=test&password=testpass&csrfmiddlewaretoken=nLZy3NMzhTswZvweHJ4KVmq9UjzaZGn3&_ch=ecnwmar2',\n            'callback': 'after_login',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {b'Content-Type': [b'application/x-www-form-urlencoded']},\n            'meta': {},\n            'method': 'POST',\n            'priority': 0,\n            'url': u'https://pinterest.com/login/?next=%2F'}\n\n        self.assertEqual(request_to_dict(form_request, spider), expected)\n\n        # simulate a simple response to login post from which extract a link\n        response = UTF8HtmlResponse(\n            url=\"http://pinterest.com/\",\n            body=\"<html><body><a href='http://pinterest.com/categories'>\"\n                 \"</body></html>\")\n        result = list(spider.after_login(response))\n        self.assertEqual([r.url for r in result], [\n            'http://pinterest.com/categories',\n            'http://pinterest.com/popular/'\n        ])\n\n    def test_generic_form_requests(self):\n        name = \"ebay\"\n        spider = self.smanager.create(name)\n        generic_form_request = list(spider.start_requests())[0]\n\n        response = UTF8HtmlResponse(\n            url=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            body=open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read())\n        response.request = generic_form_request\n        request_list = [{k: v for k, v in request_to_dict(req, spider).items()\n                         if not k.startswith('_')}\n                        for req in generic_form_request.callback(response)]\n        expected = [{\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=1&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=2&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=3&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=4&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50')\n        }, {\n            'body': b'',\n            'callback': 'parse',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'}]\n\n        self.assertEqual(request_list, expected)\n\n    def test_generic_form_requests_with_file_field(self):\n        name = \"ebay2\"\n        spider = self.smanager.create(name)\n        generic_form_request = list(spider.start_requests())[0]\n\n        self.assertEqual(generic_form_request.url, 'file://tmp/test_params.txt')\n        response = UTF8HtmlResponse(\n            url='file://tmp/test_params.txt',\n            body=open(join(_PATH, \"data\", \"test_params.txt\")).read())\n        response.request = generic_form_request\n        requests = list(generic_form_request.callback(response))\n        request_list = [request_to_dict(req, spider) for req in requests]\n        expected = [{\n            'body': b'',\n            '_class': 'scrapy.http.request.form.FormRequest',\n            '_encoding': 'utf-8',\n            'cookies': {},\n            'flags': [],\n            'meta': {\n                u'xpath': u\"//form[@name='adv_search_from']\",\n                u'form_url': u'http://www.ebay.com/sch/ebayadvsearch/?rt=nc',\n                u'type': u'form',\n                'field_index': 1,\n                u'fields': [{\n                    u'xpath': u\".//*[@name='_nkw']\",\n                    'file_values': ['Cars', 'Boats'],\n                    u'type': u'inurl',\n                    u'value': u'file://tmp/test_params.txt'\n                }, {\n                    u'type': u'inurl',\n                    u'name': u'_nkw2',\n                    u'value': u'file://tmp/test_params.txt'\n                }, {\n                    u'xpath': u\".//*[@name='_in_kw']\",\n                    u'type': u'iterate'\n                }]\n            },\n            'headers': {},\n            'url': u'file://tmp/test_params.txt',\n            'dont_filter': True,\n            'priority': 0,\n            'callback': 'parse_field_url_page',\n            'method': 'GET',\n            'errback': None\n        }]\n        self.assertEqual(request_list, expected)\n\n        generic_form_request = requests[0]\n        self.assertEqual(generic_form_request.url, 'file://tmp/test_params.txt')\n        response = UTF8HtmlResponse(\n            url='file://tmp/test_params.txt',\n            body=open(join(_PATH, \"data\", \"test_params.txt\")).read())\n        response.request = generic_form_request\n\n        requests = list(generic_form_request.callback(response))\n        request_list = [request_to_dict(req, spider) for req in requests]\n        expected = [{\n            '_encoding': 'utf-8',\n            'cookies': {},\n            'flags': [],\n            'dont_filter': True,\n            'errback': None,\n            'meta': {\n                'fields': [{\n                    'type': 'inurl',\n                    'file_values': ['Cars', 'Boats'],\n                    'xpath': \".//*[@name='_nkw']\",\n                    'value': 'file://tmp/test_params.txt'\n                }, {\n                    'name': '_nkw2',\n                    'file_values': ['Cars', 'Boats'],\n                    'type': 'inurl',\n                    'value': 'file://tmp/test_params.txt'\n                }, {\n                    'xpath': \".//*[@name='_in_kw']\",\n                    'type': 'iterate'\n                }],\n                'type': 'form',\n                'xpath': \"//form[@name='adv_search_from']\",\n                'field_index': 1\n            },\n            'method': 'GET',\n            'priority': 0,\n            'headers': {},\n            'body': b'',\n            'url': 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc',\n            'callback': 'parse_form_page'\n        }]\n        self.assertEqual(request_list, expected)\n\n        generic_form_request = requests[0]\n        self.assertEqual(generic_form_request.url,\n                         'http://www.ebay.com/sch/ebayadvsearch/?rt=nc')\n        response = UTF8HtmlResponse(\n            url=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            body=open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read())\n        response.request = generic_form_request\n        request_list = [{k: v for k, v in request_to_dict(req, spider).items()\n                         if not k.startswith('_')}\n                        for req in generic_form_request.callback(response)]\n        expected = [{\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=1&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=2&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=3&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=4&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=1&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=2&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=3&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=4&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=1&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=2&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=3&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=4&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Cars')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=1&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=2&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=3&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'after_form_page',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Boats&_in_kw=4&_ex_kw'\n                    '=&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_'\n                    'ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsr'\n                    'adio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_d'\n                    'md=1&_ipg=50&_nkw2=Boats')\n        }, {\n            'body': b'',\n            'callback': 'parse',\n            'cookies': {},\n            'dont_filter': True,\n            'errback': None,\n            'flags': [],\n            'headers': {},\n            'meta': {},\n            'method': 'GET',\n            'priority': 0,\n            'url': 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc'}]\n\n        self.assertEqual(request_list, expected)\n\n    def test_generic_form_requests_with_spider_args(self):\n        name = \"ebay3\"\n        args = {'search_string': 'Cars'}\n        spider = self.smanager.create(name, **args)\n        generic_form_request = list(spider.start_requests())[0]\n\n        response = UTF8HtmlResponse(\n            url=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            body=open(join(_PATH, \"data\", \"ebay_advanced_search.html\")).read())\n        response.request = generic_form_request\n        request_list = [request_to_dict(req, spider)\n                        for req in generic_form_request.callback(response)]\n        expected = [{\n            'body': b'',\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=1&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50'),\n            'dont_filter': True,\n            'priority': 0,\n            'meta': {},\n            'cookies': {},\n            'callback': 'after_form_page',\n            'flags': [],\n            'method': 'GET',\n            '_encoding': 'utf-8',\n            '_class': 'scrapy.http.request.form.FormRequest',\n            'headers': {},\n            'errback': None\n        }, {\n            'body': b'',\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=2&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50'),\n            'dont_filter': True,\n            'priority': 0,\n            'meta': {},\n            'cookies': {},\n            'callback': 'after_form_page',\n            'flags': [],\n            'method': 'GET',\n            '_encoding': 'utf-8',\n            '_class': 'scrapy.http.request.form.FormRequest',\n            'headers': {},\n            'errback': None\n        }, {\n            'body': b'',\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=3&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50'),\n            'dont_filter': True,\n            'priority': 0,\n            'meta': {},\n            'cookies': {},\n            'callback': 'after_form_page',\n            'flags': [],\n            'method': 'GET',\n            '_encoding': 'utf-8',\n            '_class': 'scrapy.http.request.form.FormRequest',\n            'headers': {},\n            'errback': None\n        }, {\n            'body': b'',\n            'url': ('http://www.ebay.com/sch/i.html?_nkw=Cars&_in_kw=4&_ex_kw='\n                    '&_sacat=0&_okw=&_oexkw=&_adv=1&_udlo=&_udhi=&_ftrt=901&_f'\n                    'trv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_salic=1&_fsra'\n                    'dio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=&_sop=12&_dm'\n                    'd=1&_ipg=50'),\n            'dont_filter': True,\n            'priority': 0,\n            'meta': {},\n            'cookies': {},\n            'callback': 'after_form_page',\n            'flags': [],\n            'method': 'GET',\n            '_encoding': 'utf-8',\n            '_class': 'scrapy.http.request.form.FormRequest',\n            'headers': {},\n            'errback': None\n        }, {\n            'body': b'',\n            'url': 'http://www.ebay.com/sch/ebayadvsearch/?rt=nc',\n            'dont_filter': True,\n            'priority': 0,\n            'meta': {},\n            'cookies': {},\n            'callback': 'parse',\n            'flags': [],\n            'method': 'GET',\n            '_encoding': 'utf-8',\n            'headers': {},\n            'errback': None\n        }]\n        self.assertEqual(request_list, expected)\n\n    def test_allowed_domains(self):\n        name = \"allowed_domains\"\n        spider = self.smanager.create(name)\n        expected = ['www.ebay.com', 'www.yahoo.com']\n        self.assertEqual(spider.allowed_domains, expected)\n\n    def test_allowed_domains_all(self):\n        name = \"any_allowed_domains\"\n        spider = self.smanager.create(name)\n        expected = None\n        self.assertEqual(spider.allowed_domains, expected)\n\n    def test_allowed_domains_previous_behavior(self):\n        name = \"cargurus\"\n        spider = self.smanager.create(name)\n        expected = ['www.cargurus.com']\n        self.assertEqual(spider.allowed_domains, expected)\n\n    def test_links_from_rss(self):\n        body = open(join(_PATH, \"data\", \"rss_sample.xml\")).read()\n        response = UTF8XmlResponse(\n            url=\"http://example.com/sample.xml\", body=body,\n            headers={'Content-Type': 'application/rss+xml;charset=ISO-8859-1'})\n\n        name = \"cargurus\"\n        spider = self.smanager.create(name)\n\n        urls = [r.url for r in spider.parse(response)]\n        self.assertEqual(len(urls), 3)\n        self.assertEqual(set(urls), set([\n            \"http://www.cargurus.com/Cars/2004-Alfa-Romeo-GT-Reviews-c10012\",\n            \"http://www.cargurus.com/Cars/2005-Alfa-Romeo-GT-Reviews-c10013\",\n            \"http://www.cargurus.com/Cars/2007-Alfa-Romeo-GT-Reviews-c10015\"]))\n\n    def test_links_from_atom(self):\n        body = open(join(_PATH, \"data\", \"atom_sample.xml\")).read()\n        response = UTF8XmlResponse(\n            url=\"http://example.com/sample.xml\", body=body,\n            headers={'Content-Type': \"application/atom+xml; charset=UTF-8\"})\n\n        name = \"sitemaps\"\n        spider = self.smanager.create(name)\n\n        urls = [r.url for r in spider.parse(response)]\n        self.assertEqual(len(urls), 3)\n        self.assertEqual(set(urls), set([\n            \"http://www.webupd8.org/sitemap.xml?page=1\",\n            \"http://www.webupd8.org/sitemap.xml?page=2\",\n            \"http://www.webupd8.org/sitemap.xml?page=3\"]))\n\n    def test_links_from_sitemap(self):\n        body = open(join(_PATH, \"data\", \"sitemap_sample.xml\")).read()\n        response = UTF8XmlResponse(\n            url=\"http://example.com/sample.xml\", body=body,\n            headers={'Content-Type': \"text/xml; charset=UTF-8\"})\n\n        name = \"sitemaps\"\n        spider = self.smanager.create(name)\n\n        urls = [r.url for r in spider.parse(response)]\n        self.assertEqual(len(urls), 3)\n        self.assertEqual(set(urls), set([\n            \"https://www.siliconrepublic.com/post-sitemap1.xml\",\n            \"https://www.siliconrepublic.com/post-sitemap2.xml\",\n            \"https://www.siliconrepublic.com/post-sitemap3.xml\"]))\n\n    def test_empty_content_type(self):\n        name = \"ebay4\"\n        spider = self.smanager.create(name)\n        generic_form_request = list(spider.start_requests())[0]\n        body = open(join(_PATH, \"data\", \"ebay_advanced_search.html\"), \"rb\").read()\n        response = Response(\n            url=\"http://www.ebay.com/sch/ebayadvsearch/?rt=nc\",\n            body=body)\n        response.request = generic_form_request\n        # must not raise an error\n        for result in spider.parse(response):\n            pass\n\n    def test_variants(self):\n        \"\"\"Ensure variants are extracted as list of dicts\"\"\"\n\n        name = \"networkhealth.com\"\n        spider = self.smanager.create(name)\n        spec = self.smanager._specs[\"spiders\"][name]\n        template, = spec[\"templates\"]\n        target = HtmlPage(url=template[\"url\"], body=template[\"original_body\"])\n        items, _ = spider.plugins['Annotations'].extract_items(target)\n        for item in items:\n            for variant in item[\"variants\"]:\n                self.assertEqual(type(variant), dict)\n\n    def test_start_requests(self):\n        name = \"example.com\"\n        spider = self.smanager.create(name)\n        start_requests = list(spider.start_requests())\n        self.assertEqual(len(start_requests), 2)\n        self.assertEqual(start_requests[0].url, 'http://www.example.com/products.csv')\n        self.assertEqual(start_requests[1].url, 'http://www.example.com/index.html')\n\n        csv = \"\"\"\nMy feed\n\nname,url,id\nProduct A,http://www.example.com/path,A\nProduct B,http://www.example.com/path2,B\"\"\"\n        response = UTF8TextResponse(url=\"http://www.example.com/products.csv\", body=csv)\n        requests = list(start_requests[0].callback(spider, response))\n        self.assertEqual(len(requests), 2)\n        self.assertEqual(requests[0].url, 'http://www.example.com/path')\n        self.assertEqual(requests[1].url, 'http://www.example.com/path2')\n\n    def test_start_requests_allowed_domains(self):\n        name = \"example2.com\"\n        spider = self.smanager.create(name)\n        self.assertEqual(spider.allowed_domains, ['www.example.com'])\n\n    def test_override_start_urls(self):\n        name = \"example2.com\"\n        spider = self.smanager.create(name, start_urls=['http://www.example.com/override.html'])\n        start_requests = list(spider.start_requests())\n        self.assertEqual(start_requests[1].url, 'http://www.example.com/override.html')\n\n    def test_generate_start_urls(self):\n        spider = self.smanager.create(\"example4.com\")\n        self.assertEqual([\n            \"http://www.example.com/about_us\",\n            \"http://www.example.com/contact\",\n            \"http://www.example.com/p/2\",\n            \"http://www.example.com/p/3\",\n            \"http://www.example.com/p/4\"\n        ], [r.url for r in spider._start_requests])\n\n    def test_links_to_follow(self):\n        html = (\"<html><body><a href='http://www.example.com/link.html'>Link\"\n                \"</a></body></html>\")\n        response = UTF8HtmlResponse(url='http://www.example.com/index.html',\n                                    body=html)\n\n        name = \"example3.com\"\n        spider = self.smanager.create(name, links_to_follow='none')\n        start_requests = list(spider.start_requests())\n\n        requests = list(start_requests[0].callback(response))\n        self.assertEqual(len(requests), 0)\n\n    def test_js_enable_patterns(self):\n        with splash_spider_manager() as manager:\n            spider = manager.create(\"example3.com\", js_enabled=True,\n                                    js_enable_patterns=['/products/'])\n        product_url = 'http://www.example.com/products/1234'\n        aboutus_url = 'http://www.example.com/aboutus'\n        request = spider._add_splash_meta(Request(product_url))\n        self.assertEqual(request.meta['splash']['args']['url'], product_url)\n        request = spider._add_splash_meta(Request(aboutus_url))\n        self.assertEqual(request.meta.get('splash'), None)\n\n    def test_js_disable_patterns(self):\n        with splash_spider_manager() as manager:\n            spider = manager.create(\"example3.com\", js_enabled=True,\n                                    js_disable_patterns=['/products/'])\n        product_url = 'http://www.example.com/products/1234'\n        aboutus_url = 'http://www.example.com/aboutus'\n        request = spider._add_splash_meta(Request(product_url))\n        self.assertEqual(request.meta.get('splash'), None)\n        request = spider._add_splash_meta(Request(aboutus_url))\n        self.assertEqual(request.meta['splash']['args']['url'], aboutus_url)\n\n    def test_js_enable_and_disable_patterns(self):\n        with splash_spider_manager() as manager:\n            spider = manager.create(\"example3.com\", js_enabled=True,\n                                    js_enable_patterns=['/products/'],\n                                    js_disable_patterns=['/products/[a-zA-Z]'])\n        product_list_url = 'http://www.example.com/products/cameras'\n        product_url = 'http://www.example.com/products/1234'\n        request = spider._add_splash_meta(Request(product_list_url))\n        self.assertEqual(request.meta.get('splash'), None)\n        request = spider._add_splash_meta(Request(product_url))\n        self.assertEqual(request.meta['splash']['args']['url'], product_url)\n"
  },
  {
    "path": "slybot/slybot/tests/test_starturls.py",
    "content": "from unittest import TestCase\n\nfrom scrapy import Request\nfrom scrapy.http.response.text import TextResponse\nfrom slybot.starturls import (\n    FragmentGenerator, IdentityGenerator, StartUrlCollection, UrlGenerator,\n    FeedGenerator)\n\n\nclass StartUrlCollectionTest(TestCase):\n    def setUp(self):\n        self.generators = {\n            'start_urls': IdentityGenerator(),\n            'generated_urls': UrlGenerator(),\n            'url': IdentityGenerator(),\n            'generated': FragmentGenerator(),\n        }\n\n    def test_mixed_start_urls_generation(self):\n        start_urls = [\n            'http://google.com',\n            {\"type\": \"url\", \"url\": \"http://domain.com\"},\n            {\n                'type': 'generated',\n                'url': 'https://github.com/[0-2]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com/'},\n                    {'type': 'range', 'value': '0-2'},\n                ]\n            }\n        ]\n        generated_start_urls = [\n            'http://google.com',\n            'http://domain.com',\n            'https://github.com/0',\n            'https://github.com/1',\n            'https://github.com/2',\n        ]\n\n        generated = StartUrlCollection(start_urls, self.generators)\n        self.assertEqual(list(generated), generated_start_urls)\n\n    def test_generated_type(self):\n        generated_start_urls = [\n            'https://github.com/scrapinghub',\n            'https://github.com/scrapy',\n            'https://github.com/scrapy-plugins',\n        ]\n        start_urls = [\n            {\n                \"template\": \"https://github.com/{}\",\n                \"paths\": [{\n                    \"type\": \"options\",\n                    \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n                }],\n                \"params\": [],\n                \"params_template\": {}\n            },\n        ]\n        generated = StartUrlCollection(start_urls, self.generators)\n\n        self.assertEqual(list(generated), generated_start_urls)\n\n    def test_malformed_generated_type(self):\n        expected_format = [\n            {'fragments': [{'type': 'fixed', 'value': 'https://github.com/'},\n                           {'type': 'list',\n                            'value': 'scrapinghub scrapy scrapy-plugins'}],\n             'type': 'generated',\n             'url': 'https://github.com/[...]/'}]\n        start_urls = [\n            {\n                \"template\": \"https://github.com/{}/{}/{}\",\n                \"paths\": [{\n                    \"type\": \"options\",\n                    \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n                }],\n                \"params\": [],\n                \"params_template\": {}\n            },\n        ]\n        normalized = StartUrlCollection(start_urls, self.generators).normalize()\n\n        self.assertEqual(normalized, expected_format)\n\n\n    def test_unique_legacy_urls(self):\n        start_urls = [\n            'http://google.com',\n            'http://github.com',\n            'http://github.com',\n            'http://scrapinghub.com',\n            'http://scrapinghub.com',\n        ]\n        unique_urls = [\n            'http://google.com',\n            'http://github.com',\n            'http://scrapinghub.com',\n        ]\n\n        self.assertEqual(StartUrlCollection(start_urls).uniq(), unique_urls)\n\n    def test_unique_list_start_urls(self):\n        start_urls = [\n            {\"type\": \"url\", \"url\": \"http://domain.com\"},\n            {\n                'type': 'generated',\n                'url': 'https://github.com/[...]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com/'},\n                    {'type': 'list', 'value': 'scrapely portia'},\n                ]\n            },\n            {\n                'type': 'generated',\n                'url': 'https://github.com/[...]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com/'},\n                    {'type': 'list', 'value': 'scrapely scrapinghub portia'},\n                ]\n            },\n        ]\n\n        self.assertEqual(StartUrlCollection(start_urls).uniq(), start_urls)\n\n    def test_allowed_domains_with_many_fragments(self):\n        start_urls = [\n            {\n                'type': 'generated',\n                'url': 'https://github.com/[...]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com'},\n                    {'type': 'list', 'value': '/a /b /c'},\n                    {'type': 'range', 'value': '1-10000000'},\n                ]\n            },\n        ]\n        allowed_domains = [\n            'https://github.com/a',\n            'https://github.com/b',\n            'https://github.com/c',\n        ]\n        collection_domains = StartUrlCollection(start_urls, self.generators).allowed_domains\n        self.assertEqual(set(collection_domains), set(allowed_domains))\n\n    def test_allowed_domains_with_mixed_urls(self):\n        start_urls = [\n            {\n                'type': 'generated',\n                'url': 'https://scrapinghub.com/[...]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://scrapinghub.com/'},\n                    {'type': 'range', 'value': '1-10000000'},\n                ]\n            },\n            {\n                'type': 'generated',\n                'url': 'https://github[1-3].com/[...]',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github'},\n                    {'type': 'range', 'value': '1-3'},\n                    {'type': 'fixed', 'value': '.com/'},\n                    {'type': 'range', 'value': '1-10000000'},\n                ]\n            },\n            {\"type\": \"url\", \"url\": \"http://domain.com\"},\n            'http://google.com',\n        ]\n        allowed_domains = [\n            'https://scrapinghub.com/',\n            'https://github1.com/',\n            'https://github2.com/',\n            'https://github3.com/',\n            'http://domain.com',\n            'http://google.com',\n        ]\n        collection_domains = StartUrlCollection(start_urls, self.generators).allowed_domains\n        self.assertEqual(set(collection_domains), set(allowed_domains))\n\n    def test_empty_allowed_domains(self):\n        start_urls = [\n            {\n                'type': 'generated',\n                'url': 'https://',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://'},\n                ]\n            },\n        ]\n        collection_domains = StartUrlCollection(start_urls, self.generators).allowed_domains\n        self.assertEqual(collection_domains, [])\n\n    def test_multiple_empty_allowed_domains(self):\n        start_urls = [\n            {\n                'type': 'generated',\n                'url': 'https://',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://'},\n                    {'type': 'fixed', 'value': 'scrapy'},\n                ]\n            },\n        ]\n        collection_domains = StartUrlCollection(start_urls, self.generators).allowed_domains\n        self.assertEqual(collection_domains, [])\n\n    def test_normalize_string_url(self):\n        legacy = ['https://github.com/scrapinghub']\n        normalized = [{\n            'url': 'https://github.com/scrapinghub',\n            'type': 'url',\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(legacy[0], normalized[0]['url'])\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalize_start_url(self):\n        start_urls = [{\n            'url': 'https://github.com/scrapinghub',\n            'type': 'fixed',\n        }]\n        collection = StartUrlCollection(start_urls, self.generators)\n\n        self.assertEqual(list(collection.normalize()), start_urls)\n\n    def test_normalize_generated_options(self):\n        legacy = [{\n            \"template\": \"https://github.com/{}\",\n            \"paths\": [{\n                \"type\": \"options\",\n                \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        normalized = [{\n            'url': 'https://github.com/[...]',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://github.com/'},\n                {\n                    'type': 'list',\n                    'value': 'scrapinghub scrapy scrapy-plugins',\n                },\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalize_generated_default(self):\n        legacy = [{\n            \"template\": \"https://github.com/{}/fixed\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        normalized = [{\n            'url': 'https://github.com/scrapinghub/fixed',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://github.com/'},\n                {\n                    'type': 'fixed',\n                    'value': 'scrapinghub',\n                },\n                {'type': 'fixed', 'value': '/fixed'},\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalize_generated_dates(self):\n        legacy = [{\n            \"template\": \"http://www.commitstrip.com/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"en\"]\n            }, {\n                \"type\": \"date\",\n                \"values\": [\"%Y\"],\n            }, {\n                \"type\": \"date\",\n                \"values\": [\"%m\"]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        normalized = [{\n            'url': 'http://www.commitstrip.com/en/[...]/[...]',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'http://www.commitstrip.com/'},\n                {'type': 'fixed', 'value': 'en'},\n                {'type': 'fixed', 'value': '/'},\n                {'type': 'date', 'value': '%Y'},\n                {'type': 'fixed', 'value': '/'},\n                {'type': 'date', 'value': '%m'},\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalized_generated_range(self):\n        legacy = [{\n            \"template\": \"https://www.donedeal.ie/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"cars-for-sale\"]\n            }, {\n                \"type\": \"options\",\n                \"values\": [\"i\"],\n            }, {\n                \"type\": \"range\",\n                \"values\": [10, 20]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        normalized = [{\n            'url': 'https://www.donedeal.ie/cars-for-sale/[...]/10-19',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://www.donedeal.ie/'},\n                {'type': 'fixed', 'value': 'cars-for-sale'},\n                {'type': 'fixed', 'value': '/'},\n                {'type': 'list', 'value': 'i'},\n                {'type': 'fixed', 'value': '/'},\n                {'type': 'range', 'value': '10-19'},\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalized_generated_params_range(self):\n        legacy = [{\n            \"template\": \"http://www.smbc-comics.com/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"index.php\"]\n            }],\n            \"params\": [{\n                \"name\": \"p\",\n                \"type\": \"range\",\n                \"values\": [20, 31]\n            }, {\n                \"name\": \"q\",\n                \"type\": \"options\",\n                \"values\": ['comic']\n            }],\n            \"params_template\": {}\n        }]\n        normalized = [{\n            'url': 'http://www.smbc-comics.com/index.php?p=20-30&q=[...]',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'http://www.smbc-comics.com/'},\n                {'type': 'fixed', 'value': 'index.php'},\n                {'type': 'fixed', 'value': '?p='},\n                {'type': 'range', 'value': '20-30'},\n                {'type': 'fixed', 'value': '&q='},\n                {'type': 'list', 'value': 'comic'},\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalized_generated_template_params(self):\n        legacy = [{\n            \"template\": \"https://encrypted.google.com/search\",\n            \"paths\": [],\n            \"params\": [{\n                \"name\": \"q\",\n                \"type\": \"options\",\n                \"values\": [\"nosetests\", \"tox\"]\n            }, {\n                \"name\": \"location\",\n                \"type\": \"options\",\n                \"values\": [\"dublin\", \"cork\"]\n            }],\n            \"params_template\": [\n                (\"hl\", \"en\"),\n                (\"q\", \"python unittest\")\n            ]\n        }]\n        normalized = [{\n            'url': 'https://encrypted.google.com/search?hl=en&q=[...]&location=[...]',\n            'type': 'generated',\n            'fragments': [\n                {'type': 'fixed', 'value': 'https://encrypted.google.com/search'},\n                {'type': 'fixed', 'value': '?hl='},\n                {'type': 'fixed', 'value': 'en'},\n                {'type': 'fixed', 'value': '&q='},\n                {'type': 'list', 'value': 'nosetests tox'},\n                {'type': 'fixed', 'value': '&location='},\n                {'type': 'list', 'value': 'dublin cork'},\n            ]\n        }]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(generator_set(UrlGenerator, legacy[0]),\n                         generator_set(FragmentGenerator, normalized[0]))\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_normalized_mixed(self):\n        legacy = [\n            {\n                \"template\": \"http://www.smbc-comics.com/{}\",\n                \"paths\": [{\n                    \"type\": \"default\",\n                    \"values\": [\"index.php\"]\n                }],\n                \"params\": [{\n                    \"name\": \"p\",\n                    \"type\": \"range\",\n                    \"values\": [20, 31]\n                }, {\n                    \"name\": \"q\",\n                    \"type\": \"options\",\n                    \"values\": ['comic']\n                }],\n                \"params_template\": {}\n            },\n            'http://github.com/scrapinghub.com',\n            {\n                'url': 'https://github.com/[...]',\n                'type': 'generated',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com/'},\n                    {\n                        'type': 'list',\n                        'value': 'scrapinghub scrapy scrapy-plugins',\n                    },\n                ]\n            }\n        ]\n        normalized = [\n            {\n                'url': 'http://www.smbc-comics.com/index.php?p=20-30&q=[...]',\n                'type': 'generated',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'http://www.smbc-comics.com/'},\n                    {'type': 'fixed', 'value': 'index.php'},\n                    {'type': 'fixed', 'value': '?p='},\n                    {'type': 'range', 'value': '20-30'},\n                    {'type': 'fixed', 'value': '&q='},\n                    {'type': 'list', 'value': 'comic'},\n                ]\n            },\n            {'url': 'http://github.com/scrapinghub.com', 'type': 'url'},\n            {\n                'url': 'https://github.com/[...]',\n                'type': 'generated',\n                'fragments': [\n                    {'type': 'fixed', 'value': 'https://github.com/'},\n                    {\n                        'type': 'list',\n                        'value': 'scrapinghub scrapy scrapy-plugins',\n                    },\n                ]\n            },\n        ]\n        collection = StartUrlCollection(legacy, self.generators)\n\n        self.assertEqual(list(collection.normalize()), normalized)\n\n    def test_feed_url(self):\n        url = 'http://example.com/feed'\n        feed = FeedGenerator(lambda: 0)\n        response = TextResponse(url, body=(\n            'http://example.com/1\\r'\n            'http://example.com/2\\r\\n'\n            'http://example.com/3\\n\\r'\n            'http://example.com/4\\n'),\n            encoding='utf-8')\n        self.assertEqual([r.url for r in feed.parse_urls(response)], [\n            'http://example.com/1',\n            'http://example.com/2',\n            'http://example.com/3',\n            'http://example.com/4',\n        ])\n\ndef generator_set(generator, start_urls):\n    return set(list(generator()(start_urls)))\n"
  },
  {
    "path": "slybot/slybot/tests/test_starturls_generator.py",
    "content": "from datetime import datetime\n\nfrom unittest import TestCase\n\nfrom scrapy.settings import Settings\n\nfrom slybot.starturls import IdentityGenerator, UrlGenerator\nfrom slybot.validation.schema import get_schema_validator\n\n\nclass StartUrlGenerators(TestCase):\n    github_start_urls = [\n        'https://github.com/scrapinghub',\n        'https://github.com/scrapy',\n        'https://github.com/scrapy-plugins'\n    ]\n    donedeal_start_urls = [\n        'https://www.donedeal.ie/cars-for-sale/i/1',\n        'https://www.donedeal.ie/cars-for-sale/i/2',\n        'https://www.donedeal.ie/houses-for-sale/i/1',\n        'https://www.donedeal.ie/houses-for-sale/i/2',\n        'https://www.donedeal.ie/pets-for-sale/i/1',\n        'https://www.donedeal.ie/pets-for-sale/i/2',\n        'https://www.donedeal.ie/kitchens-for-sale/i/1',\n        'https://www.donedeal.ie/kitchens-for-sale/i/2'\n    ]\n    specs = {\n        'defaults': [{\n            \"template\": \"https://github.com/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'options': [{\n            \"template\": \"https://github.com/{}\",\n            \"paths\": [{\n                \"type\": \"options\",\n                \"values\": [\"scrapinghub\", \"scrapy\", \"scrapy-plugins\"],\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'dates': [{\n            \"template\": \"http://www.commitstrip.com/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"en\"]\n            }, {\n                \"type\": \"date\",\n                \"values\": [\"%Y\"],\n            }, {\n                \"type\": \"date\",\n                \"values\": [\"%m\"]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'range': [{\n            \"template\": \"https://www.donedeal.ie/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"cars-for-sale\"]\n            }, {\n                \"type\": \"options\",\n                \"values\": [\"i\"],\n            }, {\n                \"type\": \"range\",\n                \"values\": [100000010, 100000000, -1]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'params_range': [{\n            \"template\": \"http://www.smbc-comics.com/{}\",\n            \"paths\": [{\n                \"type\": \"default\",\n                \"values\": [\"index.php\"]\n            }],\n            \"params\": [{\n                \"name\": \"p\",\n                \"type\": \"range\",\n                \"values\": [20, 30, 5]\n            }, {\n                \"name\": \"q\",\n                \"type\": \"options\",\n                \"values\": ['comic']\n            }],\n            \"params_template\": {}\n        }],\n        'spider_args': [{\n            \"template\": \"https://www.donedeal.ie/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"spider_args\",\n                \"values\": [\"categories\", \"sections\"]\n            }, {\n                \"type\": \"options\",\n                \"values\": [\"i\"],\n            }, {\n                \"type\": \"range\",\n                \"values\": [1, 3]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'settings': [{\n            \"template\": \"https://www.donedeal.ie/{}/{}/{}\",\n            \"paths\": [{\n                \"type\": \"settings\",\n                \"values\": [\"categories\", \"sections\"]\n            }, {\n                \"type\": \"options\",\n                \"values\": [\"i\"],\n            }, {\n                \"type\": \"range\",\n                \"values\": [1, 3]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }],\n        'params': [{\n            \"template\": \"https://encrypted.google.com/search\",\n            \"paths\": [],\n            \"params\": [{\n                \"name\": \"q\",\n                \"type\": \"options\",\n                \"values\": [\"nosetests\", \"tox\"]\n            }, {\n                \"name\": \"location\",\n                \"type\": \"options\",\n                \"values\": [\"dublin\", \"cork\"]\n            }],\n            \"params_template\": [\n                (\"hl\", \"en\"),\n                (\"q\", \"python unittest\")\n            ]\n        }]\n    }\n\n    def test_schema_format(self):\n        validator = get_schema_validator('spider')\n        spider = {\n            'start_urls_type': 'generated_urls',\n            'start_urls': [],\n            'links_to_follow': 'none',\n            'respect_nofollow': True\n        }\n        for spec in self.specs.values():\n            spider['generated_urls'] = spec\n            validator.validate(spider)\n\n    def test_start_urls(self):\n        self.assertEqual(self.github_start_urls,\n                         IdentityGenerator()(self.github_start_urls))\n\n    def test_generate_start_urls_from_defaults(self):\n        genny = UrlGenerator()\n        spec = self.specs['defaults']\n        self.assertEqual([\"https://github.com/scrapinghub\"],\n                         list(genny(spec[0])))\n\n    def test_generate_start_urls_from_options(self):\n        genny = UrlGenerator()\n        spec = self.specs['options']\n        self.assertEqual(self.github_start_urls, list(genny(spec[0])))\n\n    def test_generate_start_urls_from_date(self):\n        now = datetime.now()\n        genny = UrlGenerator()\n        spec = self.specs['dates']\n        url = \"http://www.commitstrip.com/en/{}/{:02}\".format(now.year,\n                                                              now.month)\n        self.assertEqual([url], list(genny(spec[0])))\n\n    def test_generate_start_urls_from_range(self):\n        genny = UrlGenerator()\n        spec = self.specs['range']\n        urls = [\"https://www.donedeal.ie/cars-for-sale/i/%s\" % i\n                for i in range(100000010, 100000000, -1)]\n        self.assertEqual(urls, list(genny(spec[0])))\n\n    def test_generate_start_urls_from_params_range(self):\n        genny = UrlGenerator()\n        spec = self.specs['params_range']\n        urls = [\"http://www.smbc-comics.com/index.php?p=%s&q=comic\" % i\n                for i in range(20, 30, 5)]\n        self.assertEqual(urls, list(genny(spec[0])))\n\n    def test_generate_start_urls_from_spider_arg(self):\n        genny = UrlGenerator(spider_args={\n            'categories': ['cars-for-sale', 'houses-for-sale'],\n            'sections': ['pets-for-sale', 'kitchens-for-sale']\n        })\n        spec = self.specs['spider_args']\n        self.assertEqual(self.donedeal_start_urls, list(genny(spec[0])))\n\n    def test_generate_start_urls_from_setting(self):\n        genny = UrlGenerator(Settings(values={\n            'categories': 'cars-for-sale,houses-for-sale',\n            'sections': ['pets-for-sale', 'kitchens-for-sale']\n        }))\n        spec = self.specs['settings']\n        self.assertEqual(self.donedeal_start_urls, list(genny(spec[0])))\n\n    def test_generate_start_urls_from_params(self):\n        genny = UrlGenerator()\n        spec = self.specs['params']\n        base = \"https://encrypted.google.com/search?hl=en&q=%s&location=%s\"\n        n, t, d, c = \"nosetests\", \"tox\", \"dublin\", \"cork\"\n        arg = [(n, d), (n, c), (t, d), (t, c)]\n        self.assertEqual([base % (q, l) for q, l in arg], list(genny(spec[0])))\n\n    def test_misconfigured_start_urls_spec_type(self):\n        genny = UrlGenerator()\n        spec = [{\n            \"template\": \"http://www.smbc-comics.com/{}\",\n            \"paths\": [{\n                \"type\": \"defaults\",\n                \"values\": [\"index.php\"]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        self.assertEqual([], list(genny(spec[0])))\n\n    def test_missing_arg_for_start_urls_spec(self):\n        genny = UrlGenerator(Settings(values={'home': 'home.php'}), {\n            'index': 'index.php'\n        })\n        spec = [{\n            \"template\": \"http://www.smbc-comics.com/{}\",\n            \"paths\": [{\n                \"type\": \"spider_args\",\n                \"values\": [\"home\"]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        self.assertEqual([], list(genny(spec[0])))\n        spec = [{\n            \"template\": \"http://www.smbc-comics.com/{}\",\n            \"paths\": [{\n                \"type\": \"settings\",\n                \"values\": [\"index\"]\n            }],\n            \"params\": [],\n            \"params_template\": {}\n        }]\n        self.assertEqual([], list(genny(spec[0])))\n"
  },
  {
    "path": "slybot/slybot/tests/utils.py",
    "content": "import json\n\nimport six\n\nfrom scrapy.settings import Settings\nfrom os.path import dirname\n\nfrom scrapy.http.response.html import HtmlResponse\nfrom scrapy.http.response.text import TextResponse\nfrom scrapy.http.response.xml import XmlResponse\nfrom scrapy.utils.spider import arg_to_iter\n\nfrom scrapely.htmlpage import HtmlPage\n\nfrom slybot.spider import IblSpider\nfrom slybot.plugins.scrapely_annotations.builder import Annotations\nfrom slybot.utils import read\n\n\nPATH = dirname(__file__)\n\n\ndef request_to_set(requests):\n    return [(set(t[0]),) + t[1:] for t in requests]\n\n\nclass UTF8Response(TextResponse):\n    def __init__(self, *args, **kwargs):\n        body = kwargs.get('body', args[3] if len(args) >= 4 else b'')\n        if 'encoding' not in kwargs and isinstance(body, six.text_type):\n            kwargs['encoding'] = 'utf-8'\n        super(UTF8Response, self).__init__(*args, **kwargs)\n\n\nclass UTF8HtmlResponse(UTF8Response, HtmlResponse):\n    pass\n\n\nclass UTF8TextResponse(UTF8Response, TextResponse):\n    pass\n\n\nclass UTF8XmlResponse(UTF8Response, XmlResponse):\n    pass\n\n\ndef make_spider(start_urls=None, sample=None):\n    sample = [] if sample is None else arg_to_iter(sample)\n    start_urls = [] if start_urls is None else arg_to_iter(start_urls)\n    return {'start_urls': start_urls, 'templates': sample}\n\n\ndef open_spec(name):\n    use_json = True if name.endswith('.json') else False\n    with open('%s/data/templates/%s' % (PATH, name)) as f:\n        return json.load(f) if use_json else read(f)\n\n\ndef open_sample_and_page(name):\n    sample_spec = open_spec(name)\n    url = sample_spec['url']\n    return (HtmlPage(url=url, body=Annotations(sample_spec).apply()),\n            HtmlPage(url=url, body=sample_spec['original_body']))\n\n\ndef open_page(name):\n    return HtmlResponse(url=name, body=open_spec(name), encoding='utf-8')\n\n\ndef open_spider_page_and_results(name):\n    sample_spec = open_spec(name)\n    schemas = sample_spec['schemas']\n    results = sample_spec['results']\n    if 'original_body' not in sample_spec:\n        sample_spec['original_body'] = open_spec(\n            '{}.html'.format(name[:-len('.json')]))\n    page = UTF8HtmlResponse('http://url', body=sample_spec['original_body'])\n    spider = IblSpider(name, make_spider(sample=sample_spec), schemas, {},\n                       Settings())\n    return spider, page, results\n"
  },
  {
    "path": "slybot/slybot/utils.py",
    "content": "from six.moves.urllib_parse import urlparse\nimport chardet\nimport itertools\nimport json\nimport os\nimport re\nimport six\nimport sys\n\nfrom collections import OrderedDict, namedtuple\nfrom io import open\nfrom itertools import chain\n\nfrom scrapely.htmlpage import HtmlPage, HtmlTagType\nfrom scrapy.utils.misc import load_object\nfrom w3lib.encoding import html_body_declared_encoding\n\n\nTAGID = u\"data-tagid\"\nGENERATEDTAGID = u\"data-genid\"\nOPEN_TAG = HtmlTagType.OPEN_TAG\nCLOSE_TAG = HtmlTagType.CLOSE_TAG\nUNPAIRED_TAG = HtmlTagType.UNPAIRED_TAG\n# Encodings: https://w3techs.com/technologies/overview/character_encoding/all\nENCODINGS = ['UTF-8', 'ISO-8859-1', 'Windows-1251', 'Shift JIS',\n             'Windows-1252', 'GB2312', 'EUC-KR', 'EUC-JP', 'GBK', 'ISO-8859-2',\n             'Windows-1250', 'ISO-8859-15', 'Windows-1256', 'ISO-8859-9',\n             'Big5', 'Windows-1254', 'Windows-874']\nMimeType = namedtuple('MimeType', ['type', 'maintype', 'subtype', 'params'])\n\n\ndef content_type(response):\n    full_content_type = decode(response.headers.get('Content-Type') or u'')\n    type_ = full_content_type.split(';', 1)\n    split = type_[0].split('/', 1)\n    if len(split) < 2:\n        maintype = type_\n        subtype = ''\n    else:\n        maintype, subtype = split\n    # Parse params if needed\n    return MimeType(full_content_type, maintype, subtype, [])\n\n\ndef encode(html, default=None):\n    if isinstance(html, six.binary_type):\n        return html\n    return _encode_or_decode_string(html, type(html).encode, default)\n\n\ndef decode(html, default=None):\n    if isinstance(html, six.text_type):\n        return html\n    return _encode_or_decode_string(html, type(html).decode, default)\n\n\ndef _encode_or_decode_string(html, method, default):\n    if not default:\n        encoding = html_body_declared_encoding(html)\n        if encoding:\n            default = [encoding]\n        else:\n            default = []\n    elif isinstance(default, six.string_types):\n        default = [default]\n    for encoding in itertools.chain(default, ENCODINGS):\n        try:\n            return method(html, encoding)\n        except (UnicodeDecodeError, UnicodeEncodeError, LookupError):\n            pass\n        except AttributeError:\n            return html\n    encoding = chardet.detect(html).get('encoding')\n    return method(html, encoding)\n\n\ndef iter_unique_scheme_hostname(urls):\n    \"\"\"Return an iterator of tuples (scheme, hostname) over the given urls,\n    filtering dupes\n    \"\"\"\n    scheme_hostname = set()\n    for x in urls:\n        p = urlparse(x)\n        scheme_hostname.add((p.scheme, p.hostname))\n    return list(scheme_hostname)\n\n\ndef open_project_from_dir(project_dir):\n    storage = Storage(project_dir)\n    specs = {\"spiders\": SpiderLoader(storage)}\n    for name in ['project', 'items', 'extractors']:\n        try:\n            specs[name] = storage.open('{}.json'.format(name))\n        except IOError:\n            specs[name] = {}\n    return specs\n\n\ndef read(fp, encoding='utf-8'):\n    content = fp.read()\n    if hasattr(content, 'decode'):\n        content = content.decode('utf-8')\n    return content\n\n\ndef _build_sample(sample, legacy=False):\n    from slybot.plugins.scrapely_annotations.builder import Annotations\n    Annotations(sample, legacy=legacy).build()\n    sample['annotated'] = True\n    return sample\n\n\ndef htmlpage_from_response(response, _add_tagids=False):\n    body = response.body_as_unicode()\n    if _add_tagids:\n        body = add_tagids(body)\n    return HtmlPage(response.url, response.headers, body,\n                    encoding=response.encoding)\n\n\ndef load_plugins(settings):\n    if settings.get('LOADED_PLUGINS', None):\n        return settings.get('LOADED_PLUGINS', None)\n    plugins = settings['PLUGINS']\n    if plugins:\n        return [load_object(p) if isinstance(p, str) else p for p in plugins]\n    else:\n        from slybot.plugins.scrapely_annotations import Annotations\n        return [Annotations]\n\n\ndef load_plugin_names(settings):\n    \"\"\"\n    Generate a unique name for a plugin based on the class name module name\n    and path\n\n    >>> settings = {'PLUGINS': ['a', 'b.c', 'a.c']}\n    >>> load_plugin_names(settings)\n    ['a', 'c', 'a.c']\n    \"\"\"\n    seen = set()\n\n    def generate_name(path, maxsplit=0, splits=None):\n        if splits is None:\n            splits = len(path.split('.')) - 1\n        name = '.'.join(path.split('.', splits - maxsplit)[-1].rsplit('.',\n                        maxsplit))\n        if name not in seen or maxsplit >= splits:\n            seen.add(name)\n            return name\n        return generate_name(path, maxsplit + 1, splits)\n\n    if settings['PLUGINS']:\n        return [generate_name(path) for path in settings['PLUGINS']]\n    else:\n        return ['Annotations']\n\n\ndef include_exclude_filter(include_patterns, exclude_patterns):\n    filterf = None\n    includef = None\n    if include_patterns:\n        pattern = include_patterns[0] if len(include_patterns) == 1 else \\\n            \"(?:%s)\" % '|'.join(include_patterns)\n        includef = re.compile(pattern).search\n        filterf = includef\n    if exclude_patterns:\n        pattern = exclude_patterns[0] if len(exclude_patterns) == 1 else \\\n            \"(?:%s)\" % '|'.join(exclude_patterns)\n        excludef = re.compile(pattern).search\n        if not includef:\n            filterf = lambda x: not excludef(x)\n        else:\n            filterf = lambda x: includef(x) and not excludef(x)\n    return filterf if filterf else bool\n\n\nclass IndexedDict(OrderedDict):\n    \"\"\"\n    Ordered dictionary where values can also be obtained by their index as if\n    they were in a list\n\n    >>> idd = IndexedDict([('spam', 1), ('eggs', 2), ('bacon', 3)])\n    >>> idd['spam']\n    1\n    >>> idd[0]\n    1\n    >>> idd['bacon']\n    3\n    >>> idd[2]\n    3\n    >>> idd[2] = 'ham'\n    Traceback (most recent call last):\n        ...\n    TypeError: keys must not be an integers\n    >>> idd[3]\n    Traceback (most recent call last):\n        ...\n    IndexError: index out of range\n    \"\"\"\n    def __setitem__(self, key, value):\n        if isinstance(key, int):\n            raise TypeError(\"keys must not be an integers\")\n        super(IndexedDict, self).__setitem__(key, value)\n\n    def __getitem__(self, key):\n        if isinstance(key, int):\n            if key >= len(self):\n                raise IndexError('index out of range')\n            for i, k in enumerate(self):\n                if i == key:\n                    key = k\n                    break\n        return super(IndexedDict, self).__getitem__(key)\n\n\ndef _quotify(mystr):\n    \"\"\"\n    quotifies an html tag attribute value.\n    Assumes then, that any ocurrence of ' or \" in the\n    string is escaped if original string was quoted\n    with it.\n    So this function does not altere the original string\n    except for quotation at both ends, and is limited just\n    to guess if string must be quoted with '\"' or \"'\"\n    \"\"\"\n    quote = '\"'\n    length = len(mystr)\n    for i in range(length):\n        if mystr[i] == \"\\\\\" and i + 1 < length and mystr[i + 1] == \"'\":\n            quote = \"'\"\n            break\n        elif mystr[i] == \"\\\\\" and i + 1 < length and mystr[i + 1] == '\"':\n            quote = '\"'\n            break\n        elif mystr[i] == \"'\":\n            quote = '\"'\n            break\n        elif mystr[i] == '\"':\n            quote = \"'\"\n            break\n    return quote + mystr + quote\n\n\ndef serialize_tag(tag):\n    \"\"\"\n    Converts a tag into a string when a slice [tag.start:tag.end]\n    over the source can't be used because tag has been modified\n    \"\"\"\n    out = \"<\"\n    if tag.tag_type == HtmlTagType.CLOSE_TAG:\n        out += \"/\"\n    out += tag.tag\n\n    attributes = []\n    for key, val in tag.attributes.items():\n        aout = key\n        if val is not None:\n            aout += \"=\" + _quotify(val)\n        attributes.append(aout)\n    if attributes:\n        out += \" \" + \" \".join(attributes)\n\n    if tag.tag_type == HtmlTagType.UNPAIRED_TAG:\n        out += \"/\"\n    return out + \">\"\n\n\ndef _must_add_tagid(element):\n    return (hasattr(element, 'tag_type') and\n            hasattr(element, 'tag') and\n            element.tag_type != CLOSE_TAG and\n            element.tag != 'ins')\n\n\ndef _modify_tagids(source, add=True):\n    \"\"\"Add or remove tags ids to/from HTML document\"\"\"\n    output = []\n    tagcount = 0\n    if not isinstance(source, HtmlPage):\n        source = HtmlPage(body=source)\n    for element in source.parsed_body:\n        if _must_add_tagid(element):\n            if add:\n                element.attributes[TAGID] = str(tagcount)\n                tagcount += 1\n            else:  # Remove previously added tagid\n                element.attributes.pop(TAGID, None)\n            output.append(serialize_tag(element))\n        else:\n            output.append(source.body[element.start:element.end])\n    return u''.join(output)\n\n\ndef add_tagids(source):\n    \"\"\"\n    Applies a unique attribute code number for each tag element in order to be\n    identified later in the process of apply annotation\"\"\"\n    return _modify_tagids(source, True)\n\n\ndef remove_tagids(source):\n    \"\"\"remove from the given page, all tagids previously added by add_tagids()\n    \"\"\"\n    return _modify_tagids(source, False)\n\n\nclass Storage(object):\n    def __init__(self, base_path):\n        self.base_path = os.path.abspath(base_path)\n\n    def rel_path(self, *args):\n        return os.sep.join(args)\n\n    def _path(self, *args):\n        return os.path.join(self.base_path, self.rel_path(*args))\n\n    def isdir(self, *args, **kwargs):\n        return os.path.isdir(self._path(*args), **kwargs)\n\n    def listdir(self, *args, **kwargs):\n        return os.listdir(self._path(*args), **kwargs)\n\n    def open(self, *args, **kwargs):\n        \"\"\"Open files from filesystem.\"\"\"\n        raw = kwargs.pop('raw', False)\n        with open(self._path(*args), encoding='utf-8') as f:\n            return decode(f.read()) if raw else json.load(f)\n\n\nclass SpiderLoader(object):\n    def __init__(self, storage):\n        if isinstance(storage, six.string_types):\n            self.storage = Storage(storage)\n        else:\n            fsattrs = ['isdir', 'listdir', 'open', 'rel_path']\n            if any(not hasattr(storage, attr) for attr in fsattrs):\n                raise TypeError('Storage class must have \"{}\" methods'.format(\n                    '\", \"'.join(fsattrs)))\n            self.storage = storage\n        self.spider_dir = self.storage.rel_path('spiders')\n        self.spider_names = {\n            s[:-len('.json')] for s in self.storage.listdir(self.spider_dir)\n            if s.endswith('.json')\n        }\n        self._spiders = {}\n\n    def __getitem__(self, key):\n        if key not in self.spider_names:\n            raise KeyError('The spider \"{}\" does not exist'.format(key))\n        if key not in self._spiders:\n            self._spiders[key] = self.load_spider(key)\n        return self._spiders[key]\n\n    def load_spider(self, spider_name):\n        spec = self.storage.open(self.spider_dir,\n                                 '{}.json'.format(spider_name))\n        try:\n            if spec.get('templates'):\n                templates = []\n                for template in spec.get('templates', []):\n                    if template.get('version', '') < '0.13.0':\n                        templates.append(template)\n                    else:\n                        templates.append(_build_sample(template))\n                spec['templates'] = templates\n            else:\n                templates = self.load_external_templates(self.spider_dir,\n                                                         spider_name)\n                spec.setdefault(\"templates\", []).extend(templates)\n            return spec\n        except ValueError as e:\n            raise ValueError(\n                \"Error parsing spider (invalid JSON): %s: %s\" %\n                (spider_name, e)\n            )\n\n    def keys(self):\n        for spider_name in self.spider_names:\n            yield spider_name\n\n    def items(self):\n        spiders = chain(self._spiders, self.spider_names - set(self._spiders))\n        for spider_name in spiders:\n            yield spider_name, self[spider_name]\n\n    def values(self):\n        for _, spider in self.items():\n            yield spider\n\n    def load_external_templates(self, spec_base, spider_name):\n        \"\"\"A generator yielding the content of all passed `template_names` for\n        `spider_name`.\n        \"\"\"\n        spider_dir = self.storage.rel_path('spiders', spider_name)\n        if not self.storage.isdir(spider_dir):\n            if sys.version_info < (3, 6):\n                raise StopIteration\n            else:\n                return\n        for name in self.storage.listdir(spider_dir):\n            if not name.endswith('.json'):\n                continue\n            path = self.storage.rel_path(spider_dir, name)\n            sample = self.storage.open(path)\n            if not sample:\n                continue\n            sample_dir = path[:-len('.json')]\n            if self.storage.isdir(sample_dir):\n                for fname in self.storage.listdir(sample_dir):\n                    if fname.endswith('.html'):\n                        attr = fname[:-len('.html')]\n                        html = self.storage.open(sample_dir, fname, raw=1)\n                        sample[attr] = html\n            if 'original_body' not in sample:\n                sample['original_body'] = u'<html></html>'\n            version = sample.get('version', '')\n            yield _build_sample(sample, legacy=version < '0.13.0')\n"
  },
  {
    "path": "slybot/slybot/validation/__init__.py",
    "content": ""
  },
  {
    "path": "slybot/slybot/validation/schema.py",
    "content": "\"\"\"Simple validation of specifications passed to slybot\"\"\"\nfrom __future__ import absolute_import\nfrom os.path import dirname, join\nimport json\nimport re\nimport socket\n\nfrom six.moves.urllib.parse import (\n    urlsplit, urlunsplit\n)\n\nfrom jsonschema import (Draft3Validator, RefResolver, FormatChecker,\n                        ValidationError)\nimport six\n\n\n_PATH = dirname(__file__)\n\n\ndef load_schemas():\n    filename = join(_PATH, \"schemas.json\")\n    return dict((s[\"id\"], s) for s in json.load(open(filename)))\n\n_SCHEMAS = load_schemas()\n\n\nclass SlybotJsonSchemaValidator(Draft3Validator):\n    DEFAULT_TYPES = Draft3Validator.DEFAULT_TYPES.copy()\n    DEFAULT_TYPES.update({\n        \"mapping\": dict,\n    })\n\ndef is_valid_ipv6_address(address):\n    try:\n        socket.inet_pton(socket.AF_INET6, address)\n    except socket.error:  # not a valid address\n        return False\n    return True\n\ndef get_url_re():\n    \"\"\"\n    Generate a URI validation regexp.\n    Slightly modified from Django's URL validation\n    https://github.com/django/django/blob/master/django/core/validators.py\n    \"\"\"\n    ul = '\\u00a1-\\uffff'  # unicode letters range (must be a unicode string, not a raw string)\n    # IP patterns\n    ipv4_re = r'(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}'\n    ipv6_re = r'\\[[0-9a-f:\\.]+\\]' # Simple RE, validated later\n\n    # Host patterns\n    hostname_re = r'[a-z' + ul + r'0-9](?:[a-z' + ul + r'0-9-]{0,61}[a-z' + ul + r'0-9])?'\n    # Max length for domain name labels is 63 characters per RFC 1034 sec. 3.1\n    domain_re = r'(?:\\.(?!-)[a-z' + ul + r'0-9-]{1,63}(?<!-))*'\n    tld_re = r'\\.(?:[a-z' + ul + r']{2,63}|xn--[a-z0-9]{1,59})\\.?'\n    host_re = '(' + hostname_re + domain_re + tld_re + '|localhost)'\n\n    return re.compile(\n        r'^(?:https?)://'  # Only http or https links allowed\n        r'(?:\\S+(?::\\S*)?@)?'  # user:pass authentication\n        r'(?:' + ipv4_re + '|' + ipv6_re + '|' + host_re + ')'\n        r'(?::\\d{2,5})?'  # port\n        r'(?:[/?#][^\\s]*)?'  # resource path\n        r'\\Z',\n        re.IGNORECASE\n    )\n\nURL_RE = get_url_re()\n\ndef get_schema_validator(schema):\n    resolver = RefResolver(\"\", schema, _SCHEMAS)\n\n    @FormatChecker.cls_checks('url', (ValueError, UnicodeError))\n    def is_valid_uri(url):\n        if not isinstance(url, six.string_types):\n            return False\n        if isinstance(url, six.binary_type):\n            url = url.decode('utf-8')\n\n        scheme, netloc, path, query, fragment = urlsplit(url)\n        netloc = netloc.encode('idna').decode('ascii')  # IDN -> ACE\n        url = urlunsplit((scheme, netloc, path, query, fragment))\n\n        if not URL_RE.match(url):\n            return False\n\n        # Validate IPv6\n        ipv6_match = re.search(r'^\\[(.+)\\](?::\\d{2,5})?$', netloc)\n        if ipv6_match:\n            potential_ip = ipv6_match.groups()[0]\n            if not is_valid_ipv6_address(potential_ip):\n                return False\n        return True\n\n    # Workaround for https://github.com/Julian/jsonschema/pull/272\n    @FormatChecker.cls_checks('regex', (Exception))\n    def is_valid_re(re_source):\n        if not isinstance(re_source, six.string_types):\n            return False\n        if isinstance(re_source, six.binary_type):\n            re_source = re_source.decode('utf-8')\n\n        re.compile(re_source)\n        return True\n\n    return SlybotJsonSchemaValidator(_SCHEMAS[schema], resolver=resolver,\n                                     format_checker=FormatChecker())\n\n\ndef validate_project_schema(specs):\n\n    project = specs[\"project\"]\n    get_schema_validator(\"project\").validate(project)\n\n    items = specs[\"items\"]\n    get_schema_validator(\"items\").validate(items)\n\n    extractors = specs[\"extractors\"]\n    get_schema_validator(\"extractors\").validate(extractors)\n\n    spider_schema_validator = get_schema_validator(\"spider\")\n    for spider in specs[\"spiders\"].values():\n        spider_schema_validator.validate(spider)\n\n    return True\n"
  },
  {
    "path": "slybot/slybot/validation/schemas.json",
    "content": "[\n    {\n        \"id\": \"project\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"name\": {\"type\": \"string\", \"required\": true},\n            \"version\": {\"type\": \"string\", \"required\": true},\n            \"comment\": {\"type\": \"string\"}\n        }\n    },\n    {\n        \"id\": \"items\",\n        \"additionalProperties\": {\n            \"$ref\": \"item\"\n        }\n    },\n    {\n        \"id\": \"item\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"fields\": {\"additionalProperties\": {\"$ref\": \"field\"}, \"required\": true},\n            \"name\": {\"type\": \"string\", \"required\": false}\n        }\n    },\n    {\n        \"id\": \"field\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"required\": true},\n            \"required\": {\"type\": \"boolean\", \"required\": true},\n            \"vary\": {\"type\": \"boolean\", \"required\": true},\n            \"name\": {\"type\": \"string\", \"required\": false}\n        }\n    },\n    {\n        \"id\": \"extractors\",\n        \"additionalProperties\": {\"$ref\": \"extractor\"}\n    },\n    {\n        \"id\": \"extractor\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type_extractor\": {\"type\": \"string\"},\n            \"regular_expression\": {\"type\": \"string\", \"format\": \"regex\"}\n        }\n    },\n    {\n        \"id\": \"spider\",\n        \"type\": \"object\",\n        \"properties\": {\n\n            \"start_urls\": {\n                \"type\": \"array\",\n                \"items\": {\"type\": [{\"$ref\": \"fixed_url\"}, {\"$ref\": \"start_url\"}]},\n                \"required\": true\n            },\n\n            \"links_to_follow\": {\"type\": \"string\", \"enum\": [\"none\", \"patterns\", \"all\", \"auto\"], \"required\": true},\n            \"follow_patterns\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"format\": \"regex\"}},\n            \"exclude_patterns\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"format\": \"regex\"}},\n            \"js_enabled\": {\"type\": \"boolean\"},\n            \"js_enable_patterns\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"format\": \"regex\"}},\n            \"js_disable_patterns\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"format\": \"regex\"}},\n            \"respect_nofollow\": {\"type\": \"boolean\", \"required\": true},\n            \"allowed_domains\": {\"type\": [\"array\", \"null\"], \"items\": {\"type\": \"string\"}},\n            \"templates\": {\"type\": \"array\", \"items\": {\"$ref\": \"template\"}},\n            \"page_actions\": {\"type\": \"array\", \"items\": {\"$ref\": \"action\"}},\n            \"init_requests\": {\"type\": \"array\", \"items\": {\"$ref\": \"request\"}}\n        }\n    },\n    {\n        \"id\": \"fixed_url\",\n        \"type\": \"string\",\n        \"format\": \"url\"\n    },\n    {\n        \"id\": \"start_url\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"url\": {\"type\": \"string\", \"required\": true},\n            \"type\": {\"type\": \"string\", \"enum\": [\"url\", \"generated\"], \"required\": true},\n            \"fragments\": {\"type\": \"array\", \"items\": {\"$ref\": \"url_fragment\"}}\n        },\n        \"additionalProperties\": false\n    },\n    {\n        \"id\": \"url_fragment\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"enum\": [\"fixed\", \"range\", \"list\"], \"required\": true},\n            \"value\": {\"type\": \"string\", \"required\": true}\n        }\n    },\n    {\n        \"id\": \"generated_url\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"template\": {\"type\": \"string\", \"required\": true},\n            \"paths\": {\"type\": \"array\", \"items\": {\"$ref\": \"generated_path_url_component\"}, \"required\": true},\n            \"params\": {\"type\": \"array\", \"items\": {\"$ref\": \"generated_param_url_component\"}, \"required\": true}\n        }\n    },\n    {\n        \"id\": \"generated_path_url_component\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"required\": true},\n            \"values\": {\"type\": \"array\", \"required\": true}\n        }\n    },\n    {\n        \"id\": \"generated_param_url_component\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"required\": true},\n            \"values\": {\"type\": \"array\", \"required\": true},\n            \"name\": {\"type\": \"string\", \"required\": true}\n        }\n    },\n    {\n        \"id\": \"template\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"page_id\": {\"type\": \"string\", \"required\": true},\n            \"page_type\": {\"type\": \"string\", \"enum\": [\"links\", \"item\"], \"required\": true},\n            \"scrapes\": {\"type\": \"string\", \"required\": true},\n            \"url\": {\"type\": \"string\", \"format\": \"url\", \"required\": true},\n            \"extractors\": {\"additionalProperties\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}, \"required\": true},\n            \"annotated_body\": {\"type\": \"string\", \"required\": false},\n            \"original_body\": {\"type\": \"string\", \"required\": true},\n            \"selectors\": {\n                \"type\": \"object\",\n                \"patternProperties\": {\n                    \"[a-zA-Z0-9_-]+\": {\"$ref\": \"selector\"}\n                }\n            }\n        }\n    },\n    {\n        \"id\": \"selector\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"enum\": [\"xpath\", \"css\"], \"required\": true},\n            \"selector\": {\"type\": \"string\", \"required\": true}\n        }\n    },\n    {\n        \"id\": \"link_extractor\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"required\": true},\n            \"value\": {\"type\": \"any\", \"required\": true},\n            \"additionalProperties\": {\"type\": \"any\"}\n        }\n    },\n    {\n        \"id\": \"request\",\n        \"type\": \"object\",\n        \"properties\": {\n            \"type\": {\"type\": \"string\", \"required\": true},\n            \"link_extractor\": {\"$ref\": \"link_extractor\"},\n            \"additionalProperties\": {\"type\": \"any\"}\n        }\n    },\n    {\n        \"id\": \"action\",\n        \"type\": \"object\",\n        \"allOf\": [{\n            \"properties\": {\n                \"accept\": {\"type\": \"string\", \"format\": \"regex\"},\n                \"reject\": {\"type\": \"string\", \"format\": \"regex\"}\n            }\n        }, {\n            \"oneOf\": [\n                {\n                    \"properties\": {\n                        \"type\": {\"enum\": [\"wait\"]},\n                        \"timeout\": {\"type\": \"number\", \"minimum\": 0, \"required\": true}\n                    }\n                },\n                {\n                    \"properties\": {\n                        \"type\": {\"enum\": [\"click\"]},\n                        \"selector\": {\"type\": \"string\", \"required\": true}\n                    }\n                },\n                {\n                    \"properties\": {\n                        \"type\": {\"enum\": [\"scroll\"]},\n                        \"selector\": {\"type\": \"string\", \"required\": true},\n                        \"percent\": {\"type\": \"number\", \"minimum\": 0, \"maximum\": 100, \"required\": true}\n                    }\n                },\n                {\n                    \"properties\": {\n                        \"type\": {\"enum\": [\"set\"]},\n                        \"value\": {\"type\": \"string\", \"required\": true},\n                        \"selector\": {\"type\": \"string\", \"required\": true}\n                    }\n                }\n            ]\n        }]\n    }\n]\n"
  },
  {
    "path": "slybot/tox.ini",
    "content": "# Tox (http://tox.testrun.org/) is a tool for running tests\n# in multiple virtualenvs. This configuration file will run the\n# test suite on all supported python versions. To use it, \"pip install tox\"\n# and then run \"tox\" from this directory.\n\n[tox]\nenvlist = py27,py37\n\n[testenv]\ndeps =\n    -r{toxinidir}/requirements-test.txt\n    -r{toxinidir}/requirements.txt\ncommands =\n    nosetests \\\n        --with-doctest \\\n        --with-doctest-ignore-unicode \\\n        --doctest-options='+IGNORE_UNICODE'\n\n"
  },
  {
    "path": "slyd/.gitignore",
    "content": "# python\n*.py[cod]\n\n# editor files\n*.orig\n*.bak\n*.swp\n*.project\n*.sublime-*\n\n# twisted\ndropin.cache\ntwistd.log\ntwistd.pid\n_trial_temp*\n\n# local data files\ndata/*\n\n# npm files\nnode_modules/*\nnpm-debug.log\n"
  },
  {
    "path": "slyd/.jshintrc",
    "content": "{\n  \"predef\": [\n    \"document\",\n    \"window\",\n    \"$\",\n    \"URI\",\n    \"CanvasLoader\",\n    \"TreeMirror\",\n    \"Raven\",\n    \"-Promise\"\n  ],\n  \"browser\": true,\n  \"boss\": false,\n  \"curly\": true,\n  \"debug\": false,\n  \"devel\": true,\n  \"eqeqeq\": true,\n  \"evil\": true,\n  \"forin\": false,\n  \"immed\": false,\n  \"laxbreak\": false,\n  \"newcap\": true,\n  \"noarg\": true,\n  \"noempty\": false,\n  \"nonew\": false,\n  \"nomen\": false,\n  \"onevar\": false,\n  \"plusplus\": false,\n  \"regexp\": false,\n  \"undef\": true,\n  \"sub\": true,\n  \"strict\": false,\n  \"white\": false,\n  \"eqnull\": true,\n  \"esnext\": true,\n  \"unused\": true\n}\n"
  },
  {
    "path": "slyd/README.md",
    "content": "How to try it:\n--------------\n\nThe recommended way to install dependencies is to use virtualenv and\nthen do:\n\n\tpip install -r requirements.txt\n\nRun the server using:\n\n\ttwistd -n slyd\n\nand point your browser to:\n\thttp://localhost:9001/static/index.html\n\nChrome and Firefox are supported, but it works better with chrome.\n\nSlyd API Notes\n--------------\n\nThis will be moved to separate docs - it's currently some notes for developers\n\nAll resources are either under /dist/ or /projects/.\n\n\nproject listing/creation/deletion/renaming\n\nTo get list all existing projects, just GET http://localhost:9001/projects:\n\n\t$ curl http://localhost:9001/projects -> [\"project1\", \"project2\"]\n\nNew projects can be created by posting to /projects, for example:\n\n\t$ curl -d '{\"cmd\": \"create\", \"args\": [\"project_X\"]}' http://localhost:9001/projects\n\nTo delete a project:\n\n\t$ curl -d '{\"cmd\": \"rm\", \"args\": [\"project_X\"]}' http://localhost:9001/projects\n\nTo rename a project:\n\n\t$ curl -d '{\"cmd\": \"mv\", \"args\": [\"oldname\", \"newname\"]}' http://localhost:9001/projects\n\nPlease note that projects will not be overwritten when renaming or creating new ones (if a project\nwith the given name already exists an error from the 400 family will be returned).\n\nspec\n\nThe project specification is available under /projects/PROJECT_ID/spec. The path format\nmirrors the slybot format documented here:\nhttp://slybot.readthedocs.org/en/latest/project.html\n\nCurrently, this is read only, but it will soon support PUT/POST.\n\nThe entire spec is returned for a GET request to the root:\n\n\t$ curl http://localhost:9001/projects/78/spec\n\t{\"project\": {\n    \"version\": \"1308771278\",\n    \"name\": \"demo\"\n    ..\n\t}\n\nA list of available spiders can be retrieved:\n\n  $ curl http://localhost:9001/projects/78/spec/spiders\n[\"accommodationforstudents.com\", \"food.com\", \"pinterest.com\", \"pin\", \"mhvillage\"]\n\nand specific resources can be requested:\n\n\t$ curl http://localhost:9001/projects/78/spec/spiders/accommodationforstudents.com\n\t{\n    \t\"templates\":\n    ...\n\t    \"respect_nofollow\": true\n\t}\n\nThe spec can be updating by POSTing:\n\n  $ curl --data @newlinkedin.js http://localhost:9001/projects/78/spec/spiders/linkedin\n\nAn HTTP 400 will be returned if the uploaded spec does not validate.\n\nBasic commands are available for manipulating spider files. For example:\n\n  $ curl -d '{\"cmd\": \"rm\", \"args\": [\"spidername\"]}' http://localhost:9001/projects/78/spec/spiders\n\nAvailable commands are:\n* mv - move spider from first arg to second. If the second exists it is overwritten.\n* rm - delete spider\n\n\nbot/fetch\n\nAccepts json object with the following fields:\n* request - same as scrapy requst object. At least needs a url\n* spider - spider name within in the project\n* page_id - unique ID for this page, must match the id used in templates (not yet implemented)\n\nReturns a json object containing (so far):\n* page - page content, not yet annotated but will be\n* response - object containing the response data: http code and headers\n* items - array of items extracted\n* fp - request fingerprint\n* error - error message, present if there was an error\n* links - array of links followed\n\nComing soon in the response:\n* template_id - id of template that matched\n* trace - textual trace of the matching process - for debugging\n\n\nIf you want to work on an existing project, put it in data/projects/PROJECTID, these can be downloaded from dash or by:\n\n$ bin/sh2sly data/projects -p 78 -k YOURAPIKEY\n\nThen you can extract data:\n\n$ curl -d '{\"request\": {\"url\": \"http://www.pinterest.com/pin/339740365610932893/\"}, \"spider\": \"pinterest.com\"}' http://localhost:9001/projects/78/bot/fetch\n{\n  \"fp\": \"0f2686acdc6a71eeddc49045b7cea0b6f81e6b61\",\n   \"items\": [\n      {\n         \"url\": \"http://www.pinterest.com/pin/339740365610932893/\",\n         \"_template\": \"527387aa4d6c7133c6551481\",\n         \"image\": [\n            \"http://media-cache-ak0.pinimg.com/736x/6c/c5/35/6cc5352046df0f8d8852cbdfb31542bb.jpg\"\n         ],\n         \"_type\": \"pin\",\n         \"name\": [\n            \"Career Driven\"\n         ]\n      }\n   ],\n   \"page\": \"<!DOCTYPE html>\\n ....\"\n}\n\nTesting\n-------\n\nslyd can be tested using twisted:\n\n    trial tests\n"
  },
  {
    "path": "slyd/bin/init_mysql_db",
    "content": "#!/usr/bin/env python3\n\nimport os\nimport sys\n\ntry:\n    import slyd\n    import slyd.settings as settings_module\n    from scrapy.settings import Settings\n    settings = Settings()\n    settings.setmodule(settings_module)\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", settings['DJANGO_SETTINGS'])\nexcept ImportError:\n    sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__))))\n    try:\n        import slyd\n    except ImportError:\n        sys.stderr.write(\"Error: Can't find the project package 'slyd'.\\n\")\n        sys.exit(1)\n\nfrom portia_server.storage.repoman import Repoman\n\n\ndef main():\n    Repoman.setup(\n        storage_backend='slyd.gitstorage.repo.MysqlRepo',\n        location=os.environ.get('DB_URL'),\n    )\n    Repoman.pool._runWithConnection(Repoman.init_backend)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "slyd/bin/sh2sly",
    "content": "#!/usr/bin/env python3\n\"\"\"\nDownloads AS projects from scrapinghub in slybot format and saves them locally\n\nUsed for testing.\n\nThis uses the python-scrapinghub library\n\"\"\"\n\n\ndef sh2sly(apikey, projects, destination):\n    from scrapinghub import Connection, Project\n    import tempfile, zipfile, os\n    conn = Connection(apikey)\n    if not projects:\n        projects = conn.project_ids()\n        #projects = xrange(1300)\n    out = tempfile.TemporaryFile()\n    for projectid in projects:\n        project = Project(conn, projectid)\n        project.autoscraping_project_slybot(outputfile=out)\n        try:\n            zf = zipfile.ZipFile(out)\n            scount = len([f for f in zf.namelist() if f.startswith('spiders/')])\n            if scount == 0:\n                print \"skipping %s - no spiders\" % projectid\n                continue\n            pdest = os.path.join(destination, str(projectid))\n            zf.extractall(pdest)\n            print \"extracted project with %d spiders to %s\" % (scount, pdest)\n        except zipfile.BadZipfile:\n            print \"error with zipfile in project %s, skipping\" % projectid\n        out.truncate()\n\n\ndef main():\n    import argparse\n    parser = argparse.ArgumentParser(\n        description='fetch slybot projects from scrapinghub')\n    parser.add_argument('-p', '--project', type=int, action='append',\n                   help='scrapinghub project, may be repeated, default is all')\n    parser.add_argument('-k', '--apikey',\n                       help='api key')\n    parser.add_argument('destination')\n    args = parser.parse_args()\n    sh2sly(args.apikey, args.project, args.destination)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "slyd/bin/slyd",
    "content": "#!/usr/bin/env python3\n\nimport splash.server\nimport splash.defaults\nimport argparse\n\n\nDEFAULT_PORTIA_PORT = 9001\nDEFAULT_PORTIA_ROOT = '../portiaui/dist'\nsplash.defaults.SPLASH_PORT = DEFAULT_PORTIA_PORT\n\ndef parse_args():\n    op = argparse.ArgumentParser()\n    op.add_argument('-p', '--port', default=DEFAULT_PORTIA_PORT, type=int)\n    op.add_argument('-r', '--root', default=DEFAULT_PORTIA_ROOT,\n                    help='Location of Portia webserver assets')\n    return op.parse_args()\n\n\ndef make_server(*args, **kwargs):\n    from slyd.tap import makeService\n    from twisted.internet import reactor\n    opts = parse_args()\n    reactor.listenTCP(opts.port, makeService({'port': opts.port,\n                                              'docroot': opts.root}))\n\nif __name__ == '__main__':\n    splash.server.main(server_factory=make_server, argv=[])\n"
  },
  {
    "path": "slyd/requirements.txt",
    "content": "# Slyd requirements\ntwisted==19.2.1\npyOpenSSL==17.5.0\nservice_identity==18.1.0\nrequests>=2.20.0\nautobahn==18.3.1\nsix==1.12.0\nchardet==3.0.4\nparse==1.8.2\nndg-httpsclient==0.4.4\nretrying==1.3.3\nmock==2.0.0\n\n# Splash dev\nhttps://github.com/scrapinghub/splash/archive/3.2.x.tar.gz\n"
  },
  {
    "path": "slyd/setup.py",
    "content": "from setuptools import setup, find_packages\n\ninstall_requires = ['Scrapy', 'scrapely', 'loginform', 'lxml', 'jsonschema',\n                    'django', 'parse', 'marshmallow_jsonapi', 'chardet',\n                    'autobahn', 'requests', 'service_identity',\n                    'ndg-httpsclient']\ntests_requires = install_requires\n\nsetup(name='slyd',\n      license='BSD',\n      description='Portia',\n      author='Scrapinghub',\n      url='http://github.com/scrapinghub/portia',\n      packages=find_packages(),\n      platforms=['Any'],\n      scripts=['bin/sh2sly', 'bin/slyd', 'bin/init_mysql_db'],\n      classifiers=[\n          'Development Status :: 4 - Beta',\n          'License :: OSI Approved :: BSD License',\n          'Operating System :: OS Independent',\n          'Programming Language :: Python',\n          'Programming Language :: Python :: 2',\n          'Programming Language :: Python :: 2.7'\n      ])\n"
  },
  {
    "path": "slyd/slyd/__init__.py",
    "content": ""
  },
  {
    "path": "slyd/slyd/authmanager.py",
    "content": "from scrapy.utils.misc import load_object\n\n\nclass AuthManager(object):\n\n    def __init__(self, settings):\n        self.settings = settings\n        auth_settings = settings.get('AUTH_CONFIG', {})\n        self.auth_method = load_object(\n            auth_settings.get('CALLABLE', 'slyd.dummyauth.protectResource'))\n        self.config = auth_settings.get('CONFIG', {})\n\n    def protectResource(self, resource):\n        return self.auth_method(resource, config=self.config)\n"
  },
  {
    "path": "slyd/slyd/dummyauth.py",
    "content": "from twisted.web.resource import Resource\n\n\ndef protectResource(resource, config):\n    '''Dummy resource protector.'''\n    return DummyAuthResource(resource)\n\n\nclass DummyAuthResource(Resource):\n    \"\"\"A wrapper that injects dummy auth info to every passing request.\"\"\"\n\n    def __init__(self, resource):\n        Resource.__init__(self)\n        self.wrapped = resource\n\n    def getChildWithDefault(self, path, request):\n        request.auth_info = {\n            'username': 'defaultuser',\n        }\n        # Don't consume any segments.\n        request.postpath.insert(0, request.prepath.pop())\n        return self.wrapped\n"
  },
  {
    "path": "slyd/slyd/errors.py",
    "content": "class BaseError(Exception):\n    def __init__(self, status, title, body=''):\n        self._status = status\n        self._title = title\n        self._body = body\n\n    @property\n    def title(self):\n        return self._title\n\n    @property\n    def body(self):\n        return self._body\n\n    @property\n    def status(self):\n        return self._status\n\n    def __repr__(self):\n        return '%s(%s)' % (self.__class__.__name__, str(self))\n\n    def __str__(self):\n        return '%s: %s' % (self.status, self.title)\n\n\nclass BaseHTTPError(BaseError):\n    _status = 999\n\n    def __init__(self, title, body=''):\n        super(BaseHTTPError, self).__init__(self._status, title, body)\n\n\nclass BadRequest(BaseHTTPError):\n    _status = 400\n"
  },
  {
    "path": "slyd/slyd/gitstorage/__init__.py",
    "content": ""
  },
  {
    "path": "slyd/slyd/gitstorage/jsondiff.py",
    "content": "import difflib\n\nfrom collections import namedtuple\nfrom six.moves import zip_longest\n\n_BLANK = object()\n\n\nclass Conflict(object):\n    def __init__(self, mine, other, base):\n        self.mine = [mine] if mine is not _BLANK else None\n        self.other = [other] if other is not _BLANK else None\n        self.base = [base] if base is not _BLANK else None\n\n    @classmethod\n    def from_prepared(cls, mine, other, base):\n        m = mine[0] if mine else _BLANK\n        o = other[0] if other else _BLANK\n        b = base[0] if base else _BLANK\n        conflict = cls(m, o, b)\n        for m, o, b in zip_longest(mine[1:], other[1:], base[1:],\n                                   fillvalue=_BLANK):\n            conflict.update(m, o, b)\n        return conflict\n\n    @classmethod\n    def resolve_sub_conflict(cls, mine, other):\n        c = cls.from_prepared(mine, other, [])\n        return c.resolve_conflict()\n\n    def update(self, m, o, b):\n        if m is not _BLANK:\n            self.mine.append(m)\n        if o is not _BLANK:\n            self.other.append(o)\n        if b is not _BLANK:\n            self.base.append(b)\n\n    def resolve_conflict(self):\n        if self.mine is None and self.other is not None:\n            return self.other\n        if self.other is None and self.mine is not None:\n            return self.mine\n        if self.other == self.mine:\n            return self.mine\n        combined = set(self.mine or []) | set(self.other or [])\n        if (self.base is not None and\n                not any(i in combined for i in self.base)):\n            return [self]\n        mine = self.mine if self.mine else []\n        other = self.other if self.other else []\n        i_mine, i_other = iter(mine), iter(other)\n        result, new_mine, new_other = [], [], []\n        for diff in difflib.Differ().compare([str(i) for i in other],\n                                             [str(i) for i in mine]):\n            if ((diff.startswith('+') and (new_other or result)) or\n                    (diff.startswith('-') and (new_mine or result)) or\n                    (result and (new_other or new_mine))):\n                if new_mine or new_other:\n                    result.insert(0, Conflict.from_prepared(new_mine,\n                                                            new_other,\n                                                            []))\n                result.extend(Conflict.resolve_sub_conflict(\n                              [i for i in i_mine],\n                              [i for i in i_other]))\n                break\n            elif diff.startswith('-'):\n                new_other.append(next(i_other))\n            elif diff.startswith('+'):\n                new_mine.append(next(i_mine))\n            elif diff.startswith(' '):\n                next(i_other)\n                result.append(next(i_mine))\n        return result\n\n    def _asdict(self):\n        return {\n            'my_op': 'CHANGED',\n            'my_val': self.mine,\n            'other_op': 'CHANGED',\n            'other_val': self.other,\n            'base_val': self.base\n        }\n\n    def __eq__(self, other):\n        return (self.mine == other.mine and self.other == other.other and\n                self.base == other.base)\n\n    def __str__(self):\n        return 'Conflict{}'.format(str((self.mine, self.other, self.base)))\n\n    def __repr__(self):\n        return str(self)\n\n\ndef merge_lists(base, mine, other):\n    if mine == other:\n        return mine\n    if other == base:\n        return mine\n    if mine == base:\n        return other\n    result = []\n    last_conflict = False\n    for i, (m, o, b) in enumerate(zip_longest(mine, other, base,\n                                              fillvalue=_BLANK)):\n        if (m == o and _BLANK not in (m, o) or\n                isinstance(m, dict) and isinstance(o, dict)):\n            result.append(m)\n        else:  # Conflict\n            if last_conflict:\n                c = result[-1]\n                c.update(m, o, b)\n            else:\n                c = Conflict(m, o, b)\n                result.append(c)\n            last_conflict = True\n            continue\n        last_conflict = False\n    offset = 0\n    for i, r in enumerate(result[:]):\n        if isinstance(r, Conflict):\n            c = r.resolve_conflict()\n            result = result[:i + offset] + c + result[i + offset + 1:]\n            offset += len(c) - 1\n    return result\n\n\nclass JsonDiff(object):\n    \"\"\"\n    Compares two json objects and stores the differences.\n    Only the outermost objects are considered, the comparison does not recurse\n    into nested objects.\n    \"\"\"\n    def __init__(self, old, new):\n        set_new, set_old = set(new), set(old)\n        common = set_new & set_old\n        self.added = list(set_new - common)\n        self.removed = list(set_old - common)\n        self.changed = [k for k in common if new[k] != old[k]]\n        self.unchanged = [k for k in common if new[k] == old[k]]\n\n    def op_for_field(self, field_name):\n        for operation in ('ADDED', 'UNCHANGED', 'CHANGED', 'REMOVED'):\n            if field_name in getattr(self, operation.lower()):\n                return operation\n        return None\n\n\nFieldDiff = namedtuple(\n    'DiffOp', ['my_op', 'my_val', 'other_op', 'other_val', 'base_val'])\n\n\ndef merge_jsons(base, mine, other):\n    \"\"\"\n    Performs a 3-way merge of mine and other using base as the common ancestor.\n\n    Some conflicts are automatically resolved, e.g. mine and other both delete\n    the same field.\n    Conflicts that can't be automatically resolved (e.g. mine and other assign\n    different values to the same field) are serialized into the merged json in\n    a way that can be used for a later manual resolve:\n\n        field: { __CONFLICT:\n                    base_val: X,  # the original value of the field\n                    my_val: Y,    # the value assigned by mine json\n                    my_op: Z,     # the operation performed by mine json\n                    other_val: U, # the value assigned by other json\n                    other_op: W,  # the operation performed by other json\n                }\n\n        my_op and other_op can take any of this values: 'ADDED', 'REMOVED',\n        'CHANGED', 'UNCHAGED'. If my_op == 'DELETED' then my_value == None\n        (the same applies to other_op and other_val respectively).\n\n    The merge recurses into dictionaries but considers lists as atomic values.\n    Returns a tuple of the form (merged, had_conflict).\n    \"\"\"\n    def build_merge_dict(base, mine, other):\n        my_diff = JsonDiff(base, mine)\n        other_diff = JsonDiff(base, other)\n        base, mine, other = (j if isinstance(j, dict) else {}\n                             for j in (base, mine, other))\n        all_fields = set(base.keys()).union(mine.keys()).union(other.keys())\n        merge_dict = {}\n        for k in all_fields:\n            base_val, my_val, other_val = (\n                base.get(k, {}), mine.get(k), other.get(k))\n            if isinstance(my_val, dict) and isinstance(other_val, dict):\n                merge_dict[k] = build_merge_dict(base_val, my_val, other_val)\n            if isinstance(my_val, list) and isinstance(other_val, list):\n                merge_dict[k] = merge_lists(base_val, my_val, other_val)\n            else:\n                merge_dict[k] = FieldDiff(base_val=base.get(k),\n                                          my_val=my_val,\n                                          my_op=my_diff.op_for_field(k),\n                                          other_val=other_val,\n                                          other_op=other_diff.op_for_field(k))\n        return merge_dict\n\n    def eq_vals(diff):\n        return diff.other_val == diff.my_val\n\n    def conflict(diff):\n        return {'__CONFLICT': diff._asdict()}\n\n    def resolve_json(merge_dict):\n        out_json = {}\n        had_conflict = False\n        for key, diff in merge_dict.items():\n            if isinstance(diff, dict):\n                out_json[key], rconflict = resolve_json(diff)\n                had_conflict = had_conflict or rconflict\n            if isinstance(diff, list):\n                for i, item in enumerate(diff):\n                    if isinstance(item, Conflict):\n                        if (item.mine and isinstance(item.mine[0], dict) and\n                                '__CONFLICT' in item.mine[0]):\n                            diff[i] = item.mine[0]\n                        else:\n                            diff[i] = conflict(item)\n                        had_conflict = True\n                out_json[key] = diff\n            elif diff.my_op in ('UNCHANGED', None):\n                if diff.other_op != 'REMOVED':\n                    out_json[key] = diff.other_val\n            elif diff.my_op == 'ADDED':\n                if diff.other_op != 'ADDED' or eq_vals(diff):\n                    out_json[key] = diff.my_val\n                else:\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n            elif diff.my_op == 'REMOVED':\n                if diff.other_op == 'CHANGED':\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n            elif diff.my_op == 'CHANGED':\n                if diff.other_op == 'UNCHANGED' or eq_vals(diff):\n                    out_json[key] = diff.my_val\n                else:\n                    out_json[key] = conflict(diff)\n                    had_conflict = True\n        return out_json, had_conflict\n\n    return resolve_json(build_merge_dict(base, mine, other))\n"
  },
  {
    "path": "slyd/slyd/gitstorage/projects.py",
    "content": "import json\nimport re\n\nfrom os.path import splitext, split, exists\n\nfrom dulwich.errors import ObjectMissing\n\nfrom slyd.projects import ProjectsManager\nfrom slyd.errors import BadRequest\n\nfrom storage.backends import ContentFile, GitStorage\nfrom storage.repoman import Repoman\n\n_SHA = re.compile('[a-f0-9]{7,40}')\n\n\ndef wrap_callback(connection, callback, manager, retries=0, **parsed):\n    result = callback(**parsed)\n    manager.commit_changes()\n    return result\n\n\nclass GitProjectMixin(object):\n    storage_class = GitStorage\n\n    @classmethod\n    def setup(cls, storage_backend, location):\n        Repoman.setup(storage_backend)\n        cls.base_dir = ''\n        if exists(location):\n            cls.base_dir = location\n\n    def run(self, callback, **parsed):\n        pool = getattr(Repoman, 'pool', None)\n        if pool is None:\n            return wrap_callback(None, callback, self, **parsed)\n        return pool.runWithConnection(wrap_callback, callback, self, **parsed)\n\n    def _project_name(self, name):\n        if name is None:\n            name = getattr(self, 'project_name')\n        return name\n\n    def _open_repo(self, name=None, read_only=False):\n        if getattr(self, 'storage', None):\n            return self.storage.repo\n        branch, repo = self._get_branch_and_repo(None, read_only, name)\n        self.storage = self.storage_class(repo, branch,\n                                          commit=repo.last_commit,\n                                          tree=repo.last_tree)\n        return repo\n\n    def _get_branch_and_repo(self, repo=None, read_only=False, name=None):\n        if getattr(self, 'storage', None):\n            return self.storage.branch, self.storage.repo\n        if repo is None:\n            repo = self._init_or_open_project(name)\n        if repo.has_branch(self.user):\n            return self.user, repo\n        elif not read_only and self.user:\n            repo.create_branch(self.user, repo.get_branch('master'))\n            return self.user, repo\n        else:\n            return 'master', repo\n\n    def _checkout_commit_or_head(self, name=None, commit_id=None,\n                                 branch='master'):\n        branch_name, repo = self._get_branch_and_repo(\n            read_only=True, name=name)\n        commit = None\n        try:\n            if commit_id:\n                commit = repo._repo.get_object(commit_id)\n            elif branch:\n                branch_name = branch\n                commit_id = repo.refs['refs/heads/%s' % branch_name]\n                commit = repo._repo.get_object(commit_id)\n        except (ValueError, ObjectMissing) as e:\n            raise BadRequest(str(e))\n        except KeyError as e:\n            raise BadRequest('Could not find ref: %s' % e)\n        self.storage = self.storage_class(repo, branch_name, commit=commit)\n\n    def _get_branch(self, repo=None, read_only=False, name=None):\n        return self._get_branch_and_repo(repo, read_only, name)[0]\n\n    def _init_or_open_project(self, name):\n        name = self._project_name(name)\n        if not Repoman.repo_exists(name, self.connection):\n            pm = getattr(self, 'pm', self)\n            pm.create_project(name)\n            if getattr(pm, 'storage', None):\n                self.storage = pm.storage\n                return self.storage.repo\n        return Repoman.open_repo(self._project_name(name), self.connection,\n                                 self.user)\n\n    def list_spiders(self, name=None):\n        self._open_repo(self._project_name(name), read_only=True)\n        _, files = self.storage.listdir('spiders')\n        return [splitext(split(f)[1])[0] for f in files\n                if f.endswith(\".json\")]\n\n\nclass GitProjectsManager(GitProjectMixin, ProjectsManager):\n\n    def __init__(self, *args, **kwargs):\n        ProjectsManager.__init__(self, *args, **kwargs)\n        self.project_commands = {\n            'create': self.create_project,\n            'mv': self.rename_project,\n            'rm': self.remove_project,\n            'edit': self.edit_project,\n            'publish': self.publish_project,\n            'discard': self.discard_changes,\n            'revisions': self.project_revisions,\n            'conflicts': self.conflicted_files,\n            'changes': self.changed_files,\n            'save': self.save_file,\n            'copy': self.copy_data,\n            'download': self.download_project,\n            'has_tag': self.has_tag\n        }\n        self.modify_request = {\n            'download': self._render_file\n        }\n        self.connection = None\n\n    def all_projects(self):\n        return [{'name': repo, 'id': repo}\n                for repo in Repoman.list_repos(self.connection)]\n\n    def create_project(self, name):\n        self.validate_project_name(name)\n        try:\n            repo = Repoman.create_repo(name, self.connection, self.user)\n        except NameError:\n            raise BadRequest(\"Bad Request\",\n                             'A project already exists with the name \"%s\".'\n                             % name)\n        self.storage = self.storage_class(repo, 'master', tree=repo.last_tree,\n                                          commit=repo.last_commit)\n        super(GitProjectsManager, self).create_project(name)\n\n    def project_filename(self, name):\n        return name\n\n    def remove_project(self, name):\n        Repoman.delete_repo(name, self.connection)\n\n    def publish_project(self, name, force):\n        repoman = self._open_repo(name)\n        if (repoman.publish_branch(self._get_branch(repoman),\n                                   force=force) == True):\n            repoman.delete_branch(self._get_branch(repoman))\n            return {'status': 'ok'}\n        else:\n            return {'status': 'conflict'}\n\n    def has_tag(self, name, tag_name):\n        return json.dumps({'status': self._has_tag(name, tag_name)})\n\n    def _has_tag(self, name, tag_name):\n        repo = self._open_repo(name)\n        if ('refs/tags/%s' % tag_name) in repo._repo.refs:\n            return True\n        return False\n\n    def discard_changes(self, name):\n        repoman = self._open_repo(name)\n        repoman.delete_branch(self._get_branch(repoman))\n\n    def project_revisions(self, name):\n        repoman = self._open_repo(name)\n        return json.dumps({'revisions': repoman.get_published_revisions()})\n\n    def conflicted_files(self, name):\n        repoman = self._open_repo(name, read_only=True)\n        branch = self._get_branch(repoman, read_only=True)\n        conflicts = repoman.publish_branch(branch, dry_run=True)\n        return json.dumps(conflicts if conflicts is not True else {})\n\n    def changed_files(self, name):\n        return json.dumps([\n            fname or oldn for _, fname, oldn in self._changed_files(name)\n        ])\n\n    def _changed_files(self, name):\n        repoman = self._open_repo(name, read_only=True)\n        branch = self._get_branch(repoman, read_only=True)\n        changes = repoman.get_branch_changed_entries(branch)\n        return [\n            (entry.type, entry.new.path, entry.old.path) for entry in changes\n        ]\n\n    def save_file(self, name, file_path, file_contents):\n        self._open_repo(name)\n        self.storage.save(file_path, ContentFile(\n            json.dumps(file_contents, sort_keys=True, indent=4), file_path))\n\n    def _render_file(self, request, request_data, body):\n        if len(body) == 0:\n            request.setHeader('ETag', self._gen_etag(request_data))\n            request.setResponseCode(304)\n            return ''\n        try:\n            error = json.loads(body)\n            if error.get('status', 0) == 404:\n                request.setResponseCode(404)\n                request.setHeader('Content-Type', 'application/json')\n        except (TypeError, ValueError):\n            try:\n                _id = request_data.get('args')[0]\n                name = self._get_project_name(_id).encode('utf-8')\n            except (TypeError, ValueError, IndexError):\n                name = 'archive'\n            request.setHeader('ETag', self._gen_etag(request_data))\n            request.setHeader('Content-Type', 'application/zip')\n            request.setHeader('Content-Disposition', 'attachment; '\n                              'filename=\"%s.zip\"' % name)\n            request.setHeader('Content-Length', len(body))\n        return body\n\n    def _get_project_name(self, _id):\n        if 'project_data' in getattr(self.request, 'auth_info', {}):\n            for project in self.request.auth_info['project_data']:\n                if hasattr(project, 'get') and project.get('id') == _id:\n                    return project.get('name') or _id\n        return _id\n\n    def _gen_etag(self, request_data):\n        args = request_data.get('args')\n        last_commit = self.storage._commit.id\n        spiders = args[1] if len(args) > 1 and args[1] else []\n        return (last_commit + '.' + '.'.join(spiders)).encode('utf-8')\n\n    def _schedule_info(self, **kwargs):\n        return {}\n"
  },
  {
    "path": "slyd/slyd/gitstorage/projectspec.py",
    "content": "from slyd.projectspec import ProjectSpec\nfrom slyd.gitstorage.projects import GitProjectMixin\n\n\nclass GitProjectSpec(GitProjectMixin, ProjectSpec):\n    def _schedule_data(self, spider, args):\n        branch = args.pop('branch', [None])[0]\n        commit = args.pop('commit_id', [None])[0]\n        project = self.project_name\n        arg = {}\n        if commit:\n            arg['commit'] = commit\n        elif branch:\n            arg['branch'] = branch\n        if not arg and self.storage.repo.has_branch(self.user):\n            arg['branch'] = self.user\n        self._checkout_commit_or_head(project, **arg)\n        commit_id = self.storage._commit.id\n        return {\n            'project': self.project_name,\n            'version': commit_id,\n            'spider': spider\n        }\n"
  },
  {
    "path": "slyd/slyd/html_utils.py",
    "content": "\"\"\"\n    Removes JavaScript from HTML\n\n    This module removes all existing JavaScript in an HTML document.\n\n\"\"\"\nfrom __future__ import absolute_import\nimport re\nimport six\n\nfrom six.moves.urllib_parse import urljoin\n\nfrom scrapely.htmlpage import HtmlTag, HtmlTagType, parse_html\nfrom slyd.splash.css_utils import process_css, wrap_url\nfrom slybot.utils import serialize_tag, add_tagids\n\nURI_ATTRIBUTES = (\"action\", \"background\", \"cite\", \"classid\", \"codebase\",\n                  \"data\", \"href\", \"longdesc\", \"profile\", \"src\", \"usemap\")\n\nBLOCKED_TAGNAMES = ('script', 'noscript', 'object', 'embed')\n\n_ALLOWED_CHARS_RE = re.compile('[^!-~]')  # [!-~] = ascii printable characters\n\n\ndef _contains_js(url):\n    return _ALLOWED_CHARS_RE.sub('', url).lower().startswith('javascript:')\n\n\ntry:\n    from html import unescape\nexcept ImportError:\n    # https://html.spec.whatwg.org/multipage/syntax.html#character-references\n    # http://stackoverflow.com/questions/18689230/why-do-html-entity-names-with-dec-255-not-require-semicolon\n    _ENTITY_RE = re.compile(\"&#(\\d+|x[a-f\\d]+);?\", re.I)\n\n    def _replace_entity(match):\n        entity = match.group(1)\n        if entity[0].lower() == 'x':\n            return six.unichr(int(entity[1:], 16))\n        else:\n            return six.unichr(int(entity, 10))\n\n    def unescape(mystr):\n        \"\"\"replaces all numeric html entities by its unicode equivalent.\n        \"\"\"\n        return _ENTITY_RE.sub(_replace_entity, mystr)\n\n\ndef html4annotation(htmlpage, baseurl=None, proxy_resources=None):\n    \"\"\"Convert the given html document for the annotation UI\n\n    This adds tags, removes scripts and optionally adds a base url\n    \"\"\"\n    htmlpage = add_tagids(htmlpage)\n    cleaned_html = descriptify(htmlpage, baseurl, proxy=proxy_resources)\n    return cleaned_html\n\n\ndef descriptify(doc, base=None, proxy=None):\n    \"\"\"Clean JavaScript in a html source string.\n    \"\"\"\n    parsed = parse_html(doc)\n    newdoc = []\n    inserted_comment = False\n    for element in parsed:\n        if isinstance(element, HtmlTag):\n            if element.tag in BLOCKED_TAGNAMES:\n                # Asumes there are no void elements in BLOCKED_TAGNAMES\n                # http://www.w3.org/TR/html5/syntax.html#void-elements\n                if not inserted_comment and element.tag_type in (HtmlTagType.OPEN_TAG, HtmlTagType.UNPAIRED_TAG):\n                    newdoc.append('<%s>' % element.tag)\n                    inserted_comment = True\n                elif element.tag_type == HtmlTagType.CLOSE_TAG:\n                    newdoc.append('</%s>' % element.tag)\n                    inserted_comment = False\n            elif element.tag == 'base':\n                element.attributes = {}\n                newdoc.append(serialize_tag(element))\n            else:\n                for key, val in element.attributes.copy().items():\n                    # Empty intrinsic events\n                    if key.startswith('on') or key == \"http-equiv\":\n                        element.attributes[key] = \"\"\n                    elif base and proxy and key == \"style\" and val is not None:\n                        element.attributes[key] = process_css(val, -1, base)\n                    elif element.tag in ('frame', 'iframe') and key == 'src':\n                        element.attributes[key] = '/static/frames-not-supported.html'\n                    # Rewrite javascript URIs\n                    elif key in URI_ATTRIBUTES and val is not None:\n                            if _contains_js(unescape(val)):\n                                element.attributes[key] = \"#\"\n                            elif base and proxy and not (element.tag == \"a\" and key == 'href'):\n                                element.attributes[key] = wrap_url(val, -1,\n                                                                   base)\n                                element.attributes['_portia_%s' % key] = val\n                            elif base:\n                                element.attributes[key] = urljoin(base, val)\n                newdoc.append(serialize_tag(element))\n        else:\n            text = doc[element.start:element.end]\n            if inserted_comment and text.strip():\n                newdoc.append('<!-- Removed by portia -->')\n            else:\n                newdoc.append(text)\n\n    return ''.join(newdoc)\n"
  },
  {
    "path": "slyd/slyd/projects.py",
    "content": "from __future__ import absolute_import\nimport errno\nimport re\n\nfrom os.path import join\nfrom portia_api.errors import BadRequest\nfrom portia_api.utils.download import ProjectArchiver, CodeProjectArchiver\n\nfrom storage.backends import ContentFile, FsStorage\nfrom storage.projecttemplates import templates\n\n\n# stick to alphanum . and _. Do not allow only .'s (so safe for FS path)\n_INVALID_PROJECT_RE = re.compile('[^A-Za-z0-9._]|^\\.*$')\n\n\ndef allowed_project_name(name):\n    return not _INVALID_PROJECT_RE.search(name)\n\n\nclass ProjectsManager(object):\n\n    @classmethod\n    def setup(cls, location, **kwargs):\n        cls.base_dir = location\n\n    def __init__(self, auth_info):\n        self.auth_info = auth_info\n        self.user = auth_info['username']\n        self.modify_request = {\n            'download': self._render_file\n        }\n        self.project_commands = {\n            'create': self.create_project,\n            'mv': self.rename_project,\n            'rm': self.remove_project,\n            'download': self.download_project\n        }\n\n    def run(self, callback, **kwargs):\n        return callback(**kwargs)\n\n    def all_projects(self):\n        raise NotImplementedError\n\n    def list_projects(self):\n        if 'authorized_projects' in self.auth_info:\n            return self.auth_info['authorized_projects']\n        else:\n            return list(self.all_projects())\n\n    def create_project(self, name):\n        self.validate_project_name(name)\n        project_filename = self.project_filename(name)\n        project_files = {\n            'project.json': templates['PROJECT'],\n            'scrapy.cfg': templates['SCRAPY'],\n            'setup.py': templates['SETUP'] % str(name),\n            'items.json': templates['ITEMS'],\n            join('spiders', '__init__.py'): '',\n            join('spiders', 'settings.py'): templates['SETTINGS'],\n        }\n        for filename, template in project_files.items():\n            path = join(project_filename, filename)\n            self.storage.save(path, ContentFile(template, path))\n\n    def rename_project(self, from_name, to_name):\n        self.validate_project_name(from_name)\n        self.validate_project_name(to_name)\n        self.storage.move(self.project_filename(from_name),\n                          self.project_filename(to_name))\n\n    def remove_project(self, name):\n        self.storage.rmtree(self.project_filename(name))\n\n    def edit_project(self, name, revision=None):\n        # Do nothing here, but subclasses can use this method as a hook\n        # e.g. to import projects from another source.\n        return\n\n    def validate_project_name(self, name):\n        if not allowed_project_name(name):\n            raise BadRequest('Bad Request', 'Invalid project name %s.' % name)\n\n    def copy_data(self, source, destination, spiders, items):\n        raise NotImplementedError\n\n    def download_project(self, name, spiders=None, version=None, **kwargs):\n        raise NotImplementedError\n\n    def commit_changes(self):\n        if getattr(self, 'storage', None):\n            self.storage.commit()\n\n    def _render_file(self, request, request_data, body):\n        name = request_data.get('args')[0].encode('utf-8')\n        request.setHeader('Content-Type', 'application/zip')\n        request.setHeader('Content-Disposition', 'attachment; '\n                          'filename=\"%s.zip\"' % name)\n        request.setHeader('Content-Length', len(body))\n        return body\n\n    def __repr__(self):\n        return '%s(%s)' % (self.__class__.__name__, str(self))\n\n    def __str__(self):\n        return '%s' % self.user\n\n\nclass FileSystemProjectsManager(ProjectsManager):\n    storage_class = FsStorage\n    basedir = '.'\n\n    def __init__(self, auth_info):\n        super(FileSystemProjectsManager, self).__init__(auth_info)\n        self.storage = self.storage_class('')\n        self.projectsdir = self.base_dir\n\n    def all_projects(self):\n        try:\n            dirs, _ = self.storage.listdir(self.projectsdir)\n            return [{'id': project, 'name': project}for project in dirs]\n        except OSError as ex:\n            if ex.errno != errno.ENOENT:\n                raise\n\n    def project_filename(self, name):\n        return join(self.projectsdir, name)\n\n    def download_project(self, name, spiders=None, version=None, fmt=None,\n                         **kwargs):\n        storage = self.storage_class(self.project_filename(name))\n        if fmt == u'code':\n            archiver = CodeProjectArchiver(storage, name=name)\n        else:\n            archiver = ProjectArchiver(storage, name=name)\n        return archiver.archive(spiders).read()\n"
  },
  {
    "path": "slyd/slyd/projectspec.py",
    "content": "from __future__ import absolute_import\n\nimport getpass\nimport json\nimport re\n\nfrom os.path import join, splitext\n\nfrom scrapy.http import HtmlResponse\nfrom slyd.html_utils import html4annotation\nfrom slyd.errors import BadRequest\nfrom storage.backends import ContentFile, FsStorage\n\n\ndef convert_template(template):\n    \"\"\"Converts the template annotated body for being used in the UI.\"\"\"\n    template['annotated_body'] = html4annotation(\n        template['annotated_body'], template['url'], proxy_resources=True)\n\n\nclass ProjectSpec(object):\n\n    resources = ('project', 'items', 'extractors')\n    base_dir = '.'\n    plugins = []\n\n    @classmethod\n    def setup(cls, location, **kwargs):\n        cls.base_dir = location\n\n    def __init__(self, project_name, auth_info):\n        self.project_dir = join(self.base_dir, project_name)\n        self.project_name = project_name\n        self.auth_info = auth_info\n        self.user = auth_info['username']\n        self.spider_commands = {\n            'mv': self.rename_spider,\n            'rm': self.remove_spider,\n            'mvt': self.rename_template,\n            'rmt': self.remove_template,\n        }\n\n    def run(self, callback, **kwargs):\n        return callback(**kwargs)\n\n    def list_spiders(self):\n        _, files = self.storage.listdir(join(self.project_dir, \"spiders\"))\n        for fname in files:\n            if fname.endswith(\".json\"):\n                yield splitext(fname)[0]\n\n    def spider_with_templates(self, spider):\n        spider_spec = self.resource('spiders', spider)\n        templates = []\n        for template in spider_spec.get('template_names', []):\n            try:\n                templates.append(self.resource('spiders', spider, template))\n            except IOError:\n                self.remove_template(spider, template)\n        spider_spec['templates'] = templates\n        return spider_spec\n\n    def spider_json(self, name):\n        \"\"\"Loads the spider spec for the given spider name.\"\"\"\n        return self.resource('spiders', name)\n\n    def template_json(self, spider_name, template_name):\n        \"\"\"Loads the given template.\n\n        Also converts the annotated body of the template to be used by\n        the annotation UI.\"\"\"\n        template = self.resource('spiders', spider_name, template_name)\n        convert_template(template)\n        return template\n\n    def rename_spider(self, from_name, to_name):\n        if to_name == from_name:\n            return\n        # TODO: Make optional\n        if not re.match('^[a-zA-Z0-9][a-zA-Z0-9_\\.-]*$', to_name):\n            raise BadRequest('Bad Request', 'Invalid spider name')\n        if to_name in self.list_spiders():\n            raise IOError('Can\\'t rename spider as a spider with the name, '\n                          '\"%s\", already exists for this project.' % to_name)\n        self.storage.move(self._rfilename('spiders', from_name),\n                          self._rfilename('spiders', to_name))\n\n        dirname = self._rdirname('spiders', from_name)\n        if self.storage.isdir(dirname):\n            self.storage.move(dirname, self._rdirname('spiders', to_name))\n\n    def remove_spider(self, name):\n        filename = self._rfilename('spiders', name)\n        assert filename.endswith('.json')\n        dirname = filename[:-len('.json')]\n\n        self.storage.delete(filename)\n        try:\n            self.storage.rmtree(dirname)\n        except IOError:\n            pass\n\n    def rename_template(self, spider_name, from_name, to_name):\n        template = self.resource('spiders', spider_name, from_name)\n        template['name'] = to_name\n        self.savejson(template, ['spiders', spider_name, to_name])\n        self.remove_template(spider_name, from_name)\n        spider = self.spider_json(spider_name)\n        spider['template_names'].append(to_name)\n        self.savejson(spider, ['spiders', spider_name])\n\n    def remove_template(self, spider_name, name):\n        try:\n            self.storage.delete(self._rfilename('spiders', spider_name, name))\n        except IOError:\n            pass\n        spider = self.spider_json(spider_name)\n        try:\n            spider['template_names'].remove(name)\n        except ValueError:\n            pass\n        self.savejson(spider, ['spiders', spider_name])\n\n    def _rfilename(self, *resources):\n        return join(self.project_dir, *resources) + '.json'\n\n    def _rdirname(self, *resources):\n        return join(self.project_dir, *resources[:-1])\n\n    def _process_extraction_urls(self, urls):\n        if hasattr(urls, 'get'):\n            urls = urls.get('urls', [])\n        if isinstance(urls, dict):\n            return urls.items()\n        return urls\n\n    def _process_extraction_response(self, url, html):\n        return [(url, HtmlResponse(url, body=html))]\n\n    def extract_data(self, spider_name, url_info, request):\n        pass\n\n    def resource(self, *resources):\n        return json.load(self.storage.open(self._rfilename(*resources)))\n\n    def savejson(self, obj, resources):\n        # convert to json in a way that will make sense in diffs\n        fname = self._rfilename(*resources)\n        self.storage.save(fname, ContentFile(\n            json.dumps(obj, sort_keys=True, indent=4), fname))\n\n    def commit_changes(self):\n        if getattr(self, 'storage', None):\n            self.storage.commit()\n\n    def __repr__(self):\n        return '%s(%s)' % (self.__class__.__name__, str(self))\n\n    def __str__(self):\n        return '%s, %s' % (self.project_name, self.user)\n\n\nclass FileSystemProjectSpec(ProjectSpec):\n    storage_class = FsStorage\n\n    def __init__(self, project_name, auth_info):\n        super(FileSystemProjectSpec, self).__init__(project_name, auth_info)\n        self.storage = self.storage_class(project_name,\n                                          author=getpass.getuser())\n"
  },
  {
    "path": "slyd/slyd/resource.py",
    "content": "import json\nimport errno\nfrom twisted.web.resource import Resource, NoResource, ErrorPage\n\n\nclass SlydJsonErrorPage(ErrorPage):\n    def render(self, request):\n        request.setResponseCode(self.code)\n        request.setHeader(b'content-type', b\"application/json\")\n        return json.dumps({\n            'error': self.brief,\n            'detail': self.detail\n        })\n\n\nclass SlydJsonNoResource(NoResource, SlydJsonErrorPage):\n    pass\n\n\nclass SlydJsonResource(Resource):\n    \"\"\"Base Resource for Slyd Resources\n\n    This sets the content type to JSON and handles errors\n    \"\"\"\n\n    def render(self, request):\n        request.setResponseCode(200)\n        request.setHeader('Content-Type', 'application/json')\n        try:\n            return Resource.render(self, request)\n        except IOError as ex:\n            if ex.errno == errno.ENOENT:\n                if request.is_ajax():\n                    return SlydJsonNoResource().render(request)\n                else:\n                    return NoResource().render(request)\n            else:\n                raise\n        except ErrorPage as ex:\n            if request.is_ajax():\n                ex = SlydJsonErrorPage(ex.code, ex.brief, ex.detail)\n            return ex.render(request)\n\n    def error(self, request, status, why):\n        raise ErrorPage(request, status, why)\n\n    def bad_request(self, why):\n        self.error(400, \"Bad Request\", why)\n\n    def not_found(self, message=None):\n        if message is not None:\n            raise NoResource(message)\n        raise NoResource()\n\n    def read_json(self, request):\n        try:\n            return json.load(request.content)\n        except ValueError as ex:\n            self.bad_request(\"Error parsing json. %s\" % ex.message)\n\n\nclass SlydJsonObjectResource(SlydJsonResource):\n    \"\"\"Extends SlydJsonResource, converting\n    the returned data to JSON\n    \"\"\"\n\n    def render(self, request):\n        resp = SlydJsonResource.render(self, request)\n        if isinstance(resp, dict):\n            resp = json.dumps(resp)\n        return resp\n"
  },
  {
    "path": "slyd/slyd/server.py",
    "content": "from twisted.python import log\nfrom twisted.python.compat import intToBytes\nfrom twisted.web import http\nfrom twisted.web.http import _escape\nfrom twisted.web.server import Site as WebSite, Request as WebRequest\nfrom twisted.web.iweb import IAccessLogFormatter\nfrom zope.interface.declarations import provider\n\n\nclass Request(WebRequest):\n    def is_ajax(self):\n        req_with = self.requestHeaders.getRawHeaders('X-Requested-With', [])\n        return 'XMLHttpRequest' in req_with\n\n    def processingFailed(self, reason):\n        if self.is_ajax():\n            log.err(reason)\n            if self.site.displayTracebacks:\n                body = reason.getTraceback()\n            else:\n                body = b\"Processing Failed\"\n\n            self.setResponseCode(http.INTERNAL_SERVER_ERROR)\n            self.setHeader(b'content-type', b\"text/plain\")\n            self.setHeader(b'content-length', intToBytes(len(body)))\n            self.write(body)\n            self.finish()\n            return reason\n\n        return WebRequest.processingFailed(self, reason)\n\n\nclass Site(WebSite):\n    requestFactory = Request\n\n\n@provider(IAccessLogFormatter)\ndef debugLogFormatter(timestamp, request):\n    \"\"\"\n    @return: A combined log formatted log line for the given request.\n\n    @see: L{IAccessLogFormatter}\n    \"\"\"\n    referrer = _escape(request.getHeader(b\"referer\") or b\"-\")\n    agent = _escape(request.getHeader(b\"user-agent\") or b\"-\")\n    line = (\n        u'\"%(ip)s\" - - %(timestamp)s \"%(method)s %(uri)s %(protocol)s\" '\n        u'%(code)d %(length)s \"%(referrer)s\" \"%(agent)s\"' % dict(\n            ip=_escape(request.getClientIP() or b\"-\"),\n            timestamp=timestamp,\n            method=_escape(request.method),\n            uri=_escape(request.uri),\n            protocol=_escape(request.clientproto),\n            code=request.code,\n            length=request.sentLength or u\"-\",\n            referrer=referrer,\n            agent=agent,\n        )\n    )\n    return line\n"
  },
  {
    "path": "slyd/slyd/settings/__init__.py",
    "content": "from __future__ import absolute_import\nfrom .base import *\n\ntry:\n    from local_settings import *\nexcept ImportError:\n    pass\n"
  },
  {
    "path": "slyd/slyd/settings/base.py",
    "content": "\"\"\"Scrapy settings\"\"\"\nfrom os.path import join, dirname\n\nEXTENSIONS = {\n    'scrapy.contrib.logstats.LogStats': None,\n    'scrapy.webservice.WebService': None,\n    'scrapy.telnet.TelnetConsole': None,\n    'scrapy.contrib.throttle.AutoThrottle': None\n}\n\nLOG_LEVEL = 'DEBUG'\n\n# location of slybot projects - assumes a subdir per project\nDATA_DIR = join(dirname(dirname(__file__)), 'data')\nSPEC_DATA_DIR = join(DATA_DIR, 'projects')\n\nDJANGO_SETTINGS = 'portia_server.settings'\n\nSPEC_FACTORY = {\n    'PROJECT_SPEC': 'slyd.projectspec.FileSystemProjectSpec',\n    'PROJECT_MANAGER': 'slyd.projects.FileSystemProjectsManager',\n    'PARAMS': {\n        'location': SPEC_DATA_DIR,\n    },\n}\n\nPLUGINS = [{\n    \"ui\": \"portiaWeb.annotations-plugin\",\n    \"web\": \"slyd.plugins.scrapely_annotations.Annotations\",\n    \"bot\": \"slybot.plugins.scrapely_annotations.Annotations\",\n    \"type\": \"extraction\",\n    \"options\": {\n        \"fillColor\": 'rgba(88,150,220,0.4)',\n        \"strokeColor\": 'rgba(88,150,220,0.4)',\n        \"textColor\": 'white'\n    }\n}]\n\n\n# recommended for development - use scrapy to cache http responses\n# add them to local_settings.py\n# HTTPCACHE_ENABLED = True\n# HTTPCACHE_DIR = join(DATA_DIR, 'cache')\n"
  },
  {
    "path": "slyd/slyd/specmanager.py",
    "content": "from scrapy.utils.misc import load_object\n\n\nclass SpecManager(object):\n\n    def __init__(self, settings):\n        self.settings = settings\n\n        factory_settings = settings['SPEC_FACTORY']\n        self.spec_class = load_object(factory_settings['PROJECT_SPEC'])\n        plugins = []\n        for plugin in settings['PLUGINS']:\n            options = plugin['options']\n            if 'name' not in options:\n                options['name'] = plugin['ui'].split('.')[-1]\n            plugins.append((load_object(plugin['web']), options))\n\n        self.spec_class.setup(**factory_settings['PARAMS'])\n        self.spec_class.plugins = plugins\n        self.manager_class = load_object(factory_settings['PROJECT_MANAGER'])\n        self.manager_class.setup(**factory_settings['PARAMS'])\n        self.capabilities = factory_settings.get('CAPABILITIES', {})\n        self.customizations = factory_settings.get('CUSTOM', {})\n        self.capabilities['plugins'] = [\n            {'component': p['ui'], 'options': p.get('options', {})}\n            for p in factory_settings.get('PLUGINS', settings['PLUGINS'])]\n        if 'API_ROUTES' in factory_settings:\n            self.api_routes = load_object(factory_settings['API_ROUTES'])\n\n    def project_spec(self, project, auth_info):\n        return self.spec_class(str(project), auth_info)\n\n    def project_manager(self, auth_info):\n        return self.manager_class(auth_info)\n"
  },
  {
    "path": "slyd/slyd/splash/__init__.py",
    "content": ""
  },
  {
    "path": "slyd/slyd/splash/commands.py",
    "content": "import contextlib\nimport hashlib\nimport json\nimport logging\nimport re\nimport six\nimport sys\nimport socket as _socket\n\nfrom six.moves.urllib.parse import urlparse\nfrom django.utils.functional import cached_property\n\nfrom scrapy import Request\nfrom scrapy.settings import Settings\nfrom splash.browser_tab import JsError\nfrom splash.har.qt import cookies2har\n\nfrom slybot.plugins.scrapely_annotations import Annotations as BotAnnotations\nfrom slybot.utils import encode, decode\n\nfrom storage.backends import ContentFile\nfrom portia_orm.datastore import data_store_context\nfrom portia_orm.models import Project\n\nfrom .utils import extract_data, _get_viewport, _html_path, decoded_html\n_VIEWPORT_RE = re.compile('^\\d{3,5}x\\d{3,5}$')\n_SPIDER_LOG = logging.getLogger('spider')\n_SETTINGS = Settings()\n_SETTINGS.set('SPLASH_URL', 'http://splash')\n\n\nclass Commands(object):\n    def __init__(self, data, socket, storage):\n        self.data, self.socket, self.storage = data, socket, storage\n\n    @property\n    def tab(self):\n        return self.socket.tab\n\n    def cookies(self):\n        cookies_list = self.tab.network_manager.cookiejar.allCookies()\n        message = {\n            '_command': 'cookies',\n            'cookies': cookies2har(cookies_list)\n        }\n        self.socket.sendMessage(message)\n\n    def heartbeat(self):\n        return\n\n    def save_html(self, item_checker=None):\n        data = self.data\n        if item_checker is None:\n            item_checker = ItemChecker(self, data['project'], data['spider'],\n                                       data['sample'])\n        project = Project(self.storage, id=data['project'])\n        self.socket.spiderspec.project = project\n        spider = project.spiders[data['spider']]\n        samples = spider.samples\n        try:\n            sample = samples[data['sample']]\n            self._update_sample(sample)\n        except (IOError, KeyError):\n            pass  # Sample doesn't exist or may not exist yet\n        return {'ok': True}\n\n    def extract_items(self):\n        \"\"\"Use latest annotations to extract items from current page\"\"\"\n        self._open_tab()\n        project = self.data['project']\n        spider = self.data['spider']\n        sample = self.data.get('sample')\n        if not all((project, spider)):\n            return {'type': 'raw'}\n        c = ItemChecker(self, project, spider, sample)\n        # TODO: add option for user to view raw and js items in UI from WS\n        items, changes, changed_values, links = c.extract()\n        return {'links': links, 'items': items, 'changes': changes,\n                'changed': changed_values, 'type':\n                'js' if c.using_js else 'raw'}\n\n    def _load_sample(self, data, project=None):\n        project = project or self.socket.spiderspec.project\n        spiders = project.spiders\n        spider = spiders[data['spider']]\n        samples = spider.samples\n        return samples[data['sample']]\n\n    def _update_sample(self, sample=None, project=None, data=None):\n        \"\"\"Recompile sample with latest annotations\"\"\"\n        if sample is None:\n            sample = self._load_sample(data, project)\n            path = 'spiders/{}/{}/{{}}.html'.format(\n                self.data['spider'], self.data['sample'])\n        else:\n            path = _html_path(sample)\n        if hasattr(sample, 'dump'):\n            sample = sample.dump()\n        html_path = path.format\n        for name, type_ in (('original_body', 'raw'), ('rendered_body', None)):\n            try:\n                path = html_path(name)\n                html = decode(self.storage.open(path).read())\n                assert html\n            except (AssertionError, IOError):\n                if not self.tab:\n                    six.reraise(*sys.exc_info())\n                html = None\n                if type_ == 'raw':\n                    html = self.tab._raw_html\n                if not html:\n                    html = self.tab.html()\n                if html:\n                    self.storage.save(path, ContentFile(encode(html), path))\n                    html = decode(html)\n                else:\n                    html = '<html></html>'\n            sample[name] = decode(html)\n        return sample\n\n    def update_spider(self, spider=None):\n        return self.extract()\n\n    def load_page(self):\n        \"\"\"Load page in virtual url from provided url\"\"\"\n        if 'url' not in self.data:\n            return {'error': 4001, 'message': 'Required parameter url'}\n        self._open_tab()\n\n        self.tab.loaded = False\n        meta = self.data.get('_meta', {})\n\n        def on_complete(is_error, err_info=None):\n            extra_meta = {'id': meta.get('id')}\n            print('Completed page load')\n            if is_error:\n                msg = 'Unknown error' if err_info is None else err_info.text\n                extra_meta.update(error=4500, reason=msg)\n            else:\n                self.tab.loaded = True\n            with data_store_context():\n                self.socket.sendMessage(self.metadata(extra_meta))\n            self.cookies()\n\n        # Specify the user agent directly in the headers\n        # Workaround for https://github.com/scrapinghub/splash/issues/290\n        headers = {}\n        if \"user_agent\" in meta:\n            headers['User-Agent'] = meta['user_agent']\n        self.tab.go(self.data['url'],\n                    lambda: on_complete(False),\n                    lambda err=None: on_complete(True, err),\n                    baseurl=self.data.get('baseurl'),\n                    headers=headers)\n\n    def interact_page(self):\n        \"\"\"Execute JS event from front end on virtual tab\"\"\"\n        self._open_tab()\n        event = json.dumps(self.data.get('interaction', {}))\n        try:\n            self.tab.evaljs('window.livePortiaPage.sendEvent(%s);' % event)\n        except JsError as e:\n            print(e)\n        self.cookies()\n\n    def resolve(self):\n        result = {'id': self.data.get('_meta', {}).get('id')}\n        try:\n            url = self.data['url']\n            parsed = urlparse(url)\n            port = 443 if parsed.scheme == 'https' else 80\n            _socket.getaddrinfo(parsed.hostname, port)\n        except KeyError:\n            result['error'] = 'Can\\'t create a spider without a start url'\n        except _socket.gaierror:\n            result['error'] = 'Could not resolve \"%s\"' % url\n        return result\n\n    def metadata(self, extra={}):\n        if not self.tab:\n            return {'_command': 'metadata', 'loaded': False}\n        res = {'_command': 'metadata', 'loaded': self.tab.loaded}\n        if self.tab.loaded:\n            try:\n                url = self.tab.url\n            except RuntimeError:\n                url = ''\n            response = {'headers': {},  # TODO: Get headers\n                        'status': self.tab.last_http_status()}\n            res.update(\n                url=url, fp=hashlib.sha1(url.encode('utf8')).hexdigest(),\n                response=response)\n            res.update(self.extract())\n        res.update(extra)\n        return res\n\n    def extract(self):\n        \"\"\"Run spider on page URL to get extracted links and items\"\"\"\n        if (self.tab is None or not self.tab.loaded or\n                not (self.socket.spider or (self.data and self.storage))):\n            return {\n                'items': [],\n                'links': {},\n            }\n        spec = self.socket.spiderspec\n        if spec is not None:\n            c = ItemChecker(self, spec.project, spec.name)\n            items, changes, changed_values, links = c.extract()\n            using_js = c.using_js\n        else:\n            items, changes, changed_values, links, using_js = [], [], [], [], 0\n        return {'links': links, 'items': items, 'changes': changes,\n                'changed': changed_values,\n                'type': 'js' if using_js else 'raw'}\n\n    def resize(self):\n        \"\"\"Resize virtual tab viewport to match user's viewport\"\"\"\n        try:\n            self.tab.set_viewport(_get_viewport(self.data['size']))\n        except (KeyError, AttributeError):\n            pass  # Tab isn't open. The size will be set when opened\n\n    def close_tab(self):\n        \"\"\"Close virtual tab if it is open\"\"\"\n        if self.tab is not None and not self.tab._closing:\n            self.tab.close()\n            self.socket.factory[self.socket].tab = None\n\n    def _open_tab(self):\n        if self.tab is None:\n            meta = self.data.get('_meta', self.data)\n            self.socket.open_tab(meta)\n\n\ndef _process_items(items):\n    for i, item in enumerate(items):\n        if isinstance(item, dict):\n            new = {}\n            for key, value in item.items():\n                if key and key.startswith('_'):\n                    continue\n                new[key] = _process_items(value) if isinstance(value, list) \\\n                    else value\n            items[i] = new\n        elif isinstance(item, list):\n            items[i] = _process_items(item)\n    return items\n\n\n@contextlib.contextmanager\ndef _restore(spider):\n    annotations = spider.plugins['Annotations']\n    yield\n    spider.plugins['Annotations'] = annotations\n\n\ndef _compare_items(a, b):\n    change, changes = set(), []\n    lena, lenb = len(a), len(b)\n    if lenb > lena:\n        change = {'missing_items'}\n    for aitem, bitem in zip(a, b):\n        item_changes = {}\n        if aitem == bitem:\n            continue\n        afields, bfields = set(aitem.keys()), set(bitem.keys())\n        b_not_a = bfields ^ afields\n        if b_not_a:\n            change.add('missing_fields')\n            item_changes.update({k: None for k in b_not_a})\n        for field in afields:\n            afield, bfield = aitem.get(field), bitem.get(field)\n            if afield == bfield:\n                continue\n            item_changes.update({field: (afield, bfield)})\n        changes.append(item_changes)\n    return list(change), changes\n\n\nclass ItemChecker(object):\n    def __init__(self, command, project, spider=None, sample=None):\n        self.command, self.socket = command, command.socket\n        if isinstance(project, six.string_types):\n            project_name = self.socket.user.project_map.get(project, project)\n            project = Project(command.storage, id=project, name=project_name)\n        self.project = project\n        if not self.socket.spider:\n            try:\n                self.socket.open_spider(\n                    {'project': self.project.id, 'spider': spider},\n                    project=project)\n            except KeyError:\n                pass  # Ignore extraction as it is not fully set up yet\n        self.spider = spider\n        self.sample = sample\n        if (self.spider and (not self.socket.spider or\n                             self.socket.spiderspec.name != spider)):\n            self.socket.open_spider({'project': self.project,\n                                     'spider': self.spider},\n                                    project=project)\n\n    @property\n    def raw_html(self):\n        try:\n            raw_html = decoded_html(self.socket.tab, 'raw')\n            # XXX: Some pages only show a 301 page. Load the browser html\n            assert len(raw_html) > 500\n        except (AttributeError, TypeError, AssertionError):\n            raw_html = self.html\n        return raw_html\n\n    @cached_property\n    def html(self):\n        return self.socket.tab.html()\n\n    @cached_property\n    def url(self):\n        try:\n            return self.socket.tab.evaljs('location.href')\n        except JsError:\n            return self.socket.tab.url\n\n    @cached_property\n    def using_js(self):\n        add_splash_meta = self.socket.spider._add_splash_meta\n        url = self.url\n        return 'splash' in add_splash_meta(Request(url)).meta\n\n    @cached_property\n    def schemas(self):\n        return self.project.schemas.dump()\n\n    @cached_property\n    def extractors(self):\n        return self.project.extractors.dump()\n\n    def data(self):\n        return {\n            'project': self.project,\n            'spider': self.spider,\n            'sample': self.sample\n        }\n\n    def extract(self):\n        check = self._check_items_with_sample if self.sample else \\\n            self._check_items\n        return check()\n\n    def _load_items(self, body_field='original_body', live=False):\n        if not self.socket.spider:\n            # TODO: Investigate why spider is None\n            return [], [], [], []\n        socket, raw_html, html = self.socket, self.raw_html, self.html\n        schemas, extractors, url = self.schemas, self.extractors, self.url\n        spider = socket.spiderspec.spider.copy()\n        spider['body'] = body_field\n        if self.sample:\n            samples = [self.command._update_sample(data=self.data(),\n                                                   project=self.project)]\n            self._check_sample(samples[0])\n        else:\n            samples = socket.spiderspec.templates\n        spider['templates'] = samples\n        extraction = BotAnnotations()\n        extraction.setup_bot(_SETTINGS, self.socket.spider, spider, schemas,\n                             extractors, _SPIDER_LOG)\n        self.socket.spider.plugins['Annotations'] = extraction\n        live_items, js_links = extract_data(url, html, socket.spider, samples)\n        raw_items, links = extract_data(url, raw_html, socket.spider, samples)\n        return live_items, raw_items, links, js_links\n\n    def _check_items(self):\n        try:\n            js_live_items, js_raw_items, links, js_links = self._load_items(\n                'rendered_body', True)\n            live_items, raw_items, _, _ = self._load_items()\n        except MissingRequiredError as e:\n            data = [e.schema.id, list(e.fields)]\n            return [], ['missing_required_field'], data, []\n        raw_links = {l: 'raw' for l in links}\n        links = {l: 'js' for l in js_links}\n        links.update(raw_links)\n        # Decide which items to use\n        if self.using_js:\n            changes, changed_values = _compare_items(js_live_items, raw_items)\n            items = js_live_items\n            if items and not raw_items:\n                changes.append('no_items')\n        else:\n            changes, changed_values = _compare_items(raw_items, js_raw_items)\n            changes.extend(_compare_items(live_items, js_live_items)[0])\n            items = raw_items if raw_items else live_items\n        items = _process_items(items)\n        return items, changes, changed_values, links\n\n    def _check_sample(self, sample):\n        sample = self.command._load_sample(self.data())\n\n        def _check_item(item):\n            schema = item.schema\n            required = {field.id for field in schema.fields if field.required}\n            annotated = set()\n            for annotation in item.annotations:\n                if hasattr(annotation, 'field'):\n                    annotated.add(annotation.field.id)\n                else:\n                    _check_item(annotation)\n            missing = required - annotated\n            if missing:\n                raise MissingRequiredError(schema, missing)\n        for item in sample.items:\n            _check_item(item)\n\n    def _check_items_with_sample(self):\n        with _restore(self.socket.spider):\n            return self._check_items()\n\n\nclass MissingRequiredError(Exception):\n    def __init__(self, schema, fields):\n        self.schema, self.fields = schema, fields\n"
  },
  {
    "path": "slyd/slyd/splash/cookies.py",
    "content": "from splash.cookies import SplashCookieJar\nfrom splash.har.qt import cookies2har\n\nclass PortiaCookieJar(SplashCookieJar):\n    def __init__(self, web_page, socket):\n        super(SplashCookieJar, self).__init__(web_page)\n        self.socket = socket\n        self._last_cookies = None\n\n    def setCookiesFromUrl(self, cookie_list, url):\n        result = super(PortiaCookieJar, self).setCookiesFromUrl(cookie_list, url)\n        self.update_client_cookies()\n        return result\n\n    def setAllCookies(self, cookie_list):\n        result = super(PortiaCookieJar, self).setAllCookies(cookie_list)\n        self.update_client_cookies()\n        return result\n\n    def put_client_cookies(self, cookie_list):\n        \"\"\" Set all cookies without updating the client.\n        cookie_list is a list of har cookies\"\"\"\n        qt_cookies = [self.har_cookie2qt(c) for c in cookie_list]\n        return super(PortiaCookieJar, self).setAllCookies(qt_cookies)\n\n    def update_client_cookies(self):\n        cookies = self.allCookies()\n        if self._last_cookies == cookies:\n            return\n        self._last_cookies = cookies\n        self.socket.sendMessage({\n            '_command': 'cookies',\n            'cookies': cookies2har(cookies)\n        })\n"
  },
  {
    "path": "slyd/slyd/splash/css_utils.py",
    "content": "import re\nfrom urllib.parse import urlencode, urlparse\nfrom scrapy.utils.url import urljoin_rfc\nfrom slybot.utils import decode\n\n\nCSS_IMPORT = re.compile(r'''@import\\s*[\"']([^\"']+)[\"']''')\nCSS_URL = re.compile(r'''\\burl\\((\"[^\"]+\"|'[^']+'|[^\"')][^)]+)\\)''')\nBAD_CSS = re.compile(r'(-moz-binding|expression\\s*\\(|javascript\\s*:)', re.I)\n\n\ndef wrap_url(url, tabid, base=None):\n    url = url.strip()\n    referer = None\n    if base:\n        referer = urlparse(base.strip()).netloc\n        url = urljoin_rfc(base, url)\n    parsed = urlparse(url)\n    referer = referer or parsed.netloc\n\n    if parsed.scheme == 'data':\n        return url  # TODO: process CSS inside data: urls\n    if parsed.scheme not in (b'http', b'https', b'ftp'):\n        return 'data:text/plain,invalid_scheme'\n    return \"/proxy?\" + urlencode({\n        \"url\": url,\n        \"referer\": referer,\n        \"tabid\": tabid\n    })\n\n\ndef process_css(css_source, tabid, base_uri):\n    \"\"\"\n    Wraps urls in css source.\n\n    >>> url = 'http://scrapinghub.com/style.css'\n    >>> process_css('@import \"{}\"'.format(url), 0, url) # doctest: +ELLIPSIS\n    '@import \"/proxy?...\"'\n    \"\"\"\n    def _absolutize_css_import(match):\n        return '@import \"{}\"'.format(wrap_url(match.group(1), tabid,\n                                              base_uri).replace('\"', '%22'))\n\n    def _absolutize_css_url(match):\n        url = match.group(1).strip(\"\\\"'\")\n        return 'url(\"{}\")'.format(wrap_url(url, tabid,\n                                           base_uri).replace('\"', '%22'))\n    css_source = decode(css_source)\n    css_source = CSS_IMPORT.sub(_absolutize_css_import, css_source)\n    css_source = CSS_URL.sub(_absolutize_css_url, css_source)\n    css_source = BAD_CSS.sub('portia-blocked', css_source)\n    return css_source\n"
  },
  {
    "path": "slyd/slyd/splash/ferry.py",
    "content": "from __future__ import absolute_import\nfrom functools import partial\nimport json\nimport os\nimport copy\nimport re\n\nfrom six.moves.urllib_parse import urlparse\n\nfrom autobahn.twisted.resource import WebSocketResource\nfrom autobahn.twisted.websocket import (WebSocketServerFactory,\n                                        WebSocketServerProtocol)\nfrom weakref import WeakKeyDictionary, WeakValueDictionary\nfrom twisted.internet import defer, task\nfrom twisted.python import log\n\nfrom scrapy.settings import Settings\nfrom scrapy.utils.serialize import ScrapyJSONEncoder\nfrom splash import defaults\nfrom splash.browser_tab import BrowserTab, skip_if_closing\nfrom splash.network_manager import SplashQNetworkAccessManager\nfrom splash.qtutils import drop_request\nfrom splash.render_options import RenderOptions\n\nfrom slybot.spider import IblSpider\nfrom slybot.utils import decode\nfrom portia_api.errors import BaseHTTPError\n\nfrom django.conf import settings\nfrom django.db import close_old_connections\n\nfrom storage import create_project_storage\n\nfrom portia_orm.models import Project\nfrom portia_orm.datastore import data_store_context\nfrom portia_orm.utils import short_guid\nfrom portia_api.utils.spiders import load_spider_data\n\nfrom .qtutils import QObject, pyqtSlot, QWebElement\nfrom .cookies import PortiaCookieJar\nfrom .commands import Commands\nfrom .css_utils import process_css, wrap_url\nfrom .utils import _DEFAULT_VIEWPORT, ProjectsDict\nimport six\ntext = six.text_type  # unicode in py2, str in py3\n\nimport txaio\ntxaio.use_twisted()\n\n_DEFAULT_USER_AGENT = ('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 '\n                       '(KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36')\nIGNORED_TYPES = (b'video/', b'audio/', b'application/ogg')\nMEDIA_EXTENSIONS = (\n    b'.aac', b'.avi', b'.mid', b'.mpeg', b'.oga', b'.ogv', b'.ogx', b'.swf',\n    b'.wav', b'.weba', b'.webm', b'.xul', b'.3gp', b'.3g2'\n)\nSTORED_TYPES = (b'text/html', b'text/xhtml', b'text/xml', b'text/plain',\n                b'text/css', b'image/', b'application/font')\nSTORED_EXTENSIONS = (b'.jpg', b'.jpeg', b'.png', b'.webp', b'.gif', b'.svg',\n                     b'.css', b'.xml', b'.html', b'.htm', b'.xhtml', b'.woff',\n                     b'.woff2', b'.ttf', b'.otf', b'.eot')\n\n\ndef _is_xml(accepts):\n    if accepts.startswith(b'application/'):\n        has_xml = accepts.find(b'xml')\n        if has_xml > 0:\n            semicolon = accepts.find(b';')\n            if semicolon < 0 or has_xml < semicolon:\n                return True\n    return False\n\n\ndef wrap_callback(connection, callback, retries=0, **parsed):\n    result = callback(**parsed)\n    if hasattr(parsed.get('storage'), '_working_tree'):\n        parsed['storage'].commit()\n    return result\n\n\ndef create_ferry_resource(factory):\n    return FerryWebSocketResource(factory)\n\n\nclass PortiaNetworkManager(SplashQNetworkAccessManager):\n    _raw_html = None\n\n    def createRequest(self, operation, request, outgoingData=None):\n        reply = super(PortiaNetworkManager, self).createRequest(\n            operation, request, outgoingData)\n        if getattr(self, 'closed', False):\n            return reply\n        try:\n            url = six.binary_type(request.url().toEncoded())\n            frame_url = six.binary_type(\n                self.tab.web_page.mainFrame().requestedUrl().toEncoded())\n            if url == frame_url:\n                self._raw_html = ''\n                self._url = ''\n                reply.readyRead.connect(self._ready_read)\n        except:\n            log.err()\n        finally:\n            return reply\n\n    def _ready_read(self):\n        reply = self.sender()\n        self._raw_html = (self._raw_html + six.binary_type(\n            reply.peek(reply.bytesAvailable())))\n        self._url = six.text_type(reply.url().toString())\n\n\nclass PortiaBrowserTab(BrowserTab):\n    @property\n    def url(self):\n        \"\"\" Current URL \"\"\"\n        if self._closing:\n            return ''\n        return decode(self.web_page.mainFrame().url().toString())\n\n    @skip_if_closing\n    def evaljs(self, *args, **kwargs):\n        return super(PortiaBrowserTab, self).evaljs(*args, **kwargs)\n\n\nclass FerryWebSocketResource(WebSocketResource):\n    def __init__(self, factory):\n        FerryServerProtocol.assets = factory.assets\n        WebSocketResource.__init__(self, factory)\n\n    def render(self, request):\n        request.requestHeaders.setRawHeaders('X-Auth-Info',\n                                             [json.dumps(request.auth_info)])\n        return WebSocketResource.render(self, request)\n\n\nclass User(object):\n    _by_id = WeakValueDictionary()\n\n    def __init__(self, auth, tab=None, spider=None, spiderspec=None):\n        self.auth = auth\n        self.authorized_projects = auth.get('authorized_projects', None)\n        self.project_map = ProjectsDict(auth)\n        self.tab = tab\n        self.spider = spider\n        self.spiderspec = spiderspec\n        self.tabid = id(self)\n        User._by_id[self.tabid] = self\n\n    @classmethod\n    def findById(cls, tabid):\n        return cls._by_id.get(tabid, None)\n\n    @property\n    def name(self):\n        return self.auth.get('username', '')\n\n    def __getattr__(self, key):\n        try:\n            return self.auth[key]\n        except KeyError:\n            name = self.__class__.__name__\n            raise AttributeError('\"%s\" has no attribute \"%s\"' % (name, key))\n\n\nclass SpiderSpec(object):\n    def __init__(self, project, name, spider, items, extractors):\n        self.project = project\n        self.name = name\n        self._spider = spider\n        self._items = items\n        self._extractors = extractors\n\n    @property\n    def spider(self):\n        return copy.deepcopy(self._spider)\n\n    @property\n    def items(self):\n        return copy.deepcopy(self.items)\n\n    @property\n    def extractors(self):\n        return copy.deepcopy(self._extractors)\n\n    @property\n    def templates(self):\n        return self.spider['templates']\n\n    def __repr__(self):\n        return '{}({})'.format(self.__class__.__name__, str(self))\n\n    def __str__(self):\n        return '{}, {}'.format(self.project, self.name)\n\n\nclass PortiaJSApi(QObject):\n    def __init__(self, protocol):\n        super(PortiaJSApi, self).__init__()\n        self.protocol = protocol\n        self.call = None\n\n    @pyqtSlot(QWebElement)\n    def returnElement(self, element):\n        \"\"\"Hack to return an DOM node as a QWebElement instead of\n        QVariant(QVariantMap) \"\"\"\n        self.element = element\n\n    def getReturnedElement(self):\n        element = self.element\n        self.element = None\n        return element\n\n    @pyqtSlot('QString', 'QString', result='QString')\n    def processCss(self, css, baseuri):\n        return process_css(text(css), self.protocol.user.tabid, text(baseuri))\n\n    @pyqtSlot('QString', 'QString', result='QString')\n    def wrapUrl(self, url, baseuri):\n        return wrap_url(text(url), self.protocol.user.tabid, text(baseuri))\n\n    @pyqtSlot('QString')\n    def log(self, s):\n        print(s)\n\n    @pyqtSlot('QString')\n    def sendMessage(self, message):\n        message = text(message)\n        # Allocation bug somewhere leaves null characters at the end.\n        message = message.strip('\\x00')\n        try:\n            command, data = json.loads(message)\n        except ValueError as e:\n            return log.err(ValueError(\n                \"%s JSON head: %r tail: %r\" % (e.message, message[:100],\n                                               message[-100:])\n            ))\n        self.protocol.sendMessage({\n            '_command': command,\n            '_data': data\n        })\n        if command == 'mutation' and not self.call:\n            self.call = task.deferLater(self.protocol.factory.reactor, 1,\n                                        self.extract)\n\n    def extract(self):\n        commands = Commands({}, self.protocol, None)\n        self.protocol.sendMessage(commands.metadata())\n        self.call = None\n\n\ndef is_blacklisted(url):\n    return urlparse(url).netloc in settings.BLACKLIST_URLS\n\n\ndef blacklist_error(data, socket):\n    meta = data.get('_meta', {})\n    extra_meta = {'id': meta.get('id')}\n    msg = \"Sorry Portia doesn't support this page :(\"\n    extra_meta.update(error=4500, reason=msg)\n    commands = Commands({}, socket, None)\n    socket.sendMessage(commands.metadata(extra_meta))\n\n\nclass FerryServerProtocol(WebSocketServerProtocol):\n\n    _handlers = {\n        'load': 'load_page',\n        'interact': 'interact_page'\n    }\n    assets = './'\n    settings = Settings()\n\n    @property\n    def tab(self):\n        return self.factory[self].tab\n\n    @property\n    def spider(self):\n        return self.factory[self].spider\n\n    @property\n    def spiderspec(self):\n        return self.factory[self].spiderspec\n\n    @property\n    def user(self):\n        return self.factory[self]\n\n    def onConnect(self, request):\n        try:\n            auth_info = json.loads(request.headers['x-auth-info'])\n        except (KeyError, TypeError):\n            return\n        self.session_id = ''\n        self.auth_info = auth_info\n        self.factory[self] = User(auth_info)\n\n    def onOpen(self):\n        if self not in self.factory:\n            self.sendClose(1000, 'Invalid Connection missing required '\n                                 'parameters')\n\n    def onMessage(self, payload, isbinary):\n        close_old_connections()\n        payload = payload.decode('utf-8')\n        data = json.loads(payload)\n        project = data.get('project', data.get('_meta', {}).get('project'))\n        storage = create_project_storage(project, author=self.user)\n        projects = storage.__class__.get_projects(self.user)\n        if project and str(project) not in projects:\n            self.sendMessage({'status': 4004, 'message': 'Project not found'})\n            return\n        deferred = defer.maybeDeferred(\n            wrap_callback, None, self._on_message, storage=storage, data=data)\n        deferred.addCallbacks(self.sendMessage,\n                              partial(self.send_error, data))\n\n    def _on_message(self, storage, data):\n        if '_meta' in data and 'session_id' in data['_meta']:\n            self.session_id = data['_meta']['session_id']\n\n        if is_blacklisted(data.get('url', '')):\n            blacklist_error(data, self)\n            return\n\n        command = data['_command']\n        command = self._handlers.get(command, command)\n        with data_store_context():\n            commands = Commands(data, self, storage)\n            result = getattr(commands, command, lambda: None)()\n        if result:\n            result.setdefault('_command', data.get('_callback', command))\n            if '_meta' in data and 'id' in data['_meta']:\n                result['id'] = data['_meta']['id']\n        return result\n\n    def onClose(self, was_clean, code, reason):\n        if self in self.factory:\n            if self.tab is not None:\n                self.tab.close()\n                self.tab.network_manager.closed = True\n            msg_data = {'session': self.session_id,\n                        'session_time': 0,\n                        'user': self.user.name}\n            msg = (u'Websocket Closed: id=%(session)s t=%(session_time)s '\n                   u'user=%(user)s command=' % (msg_data))\n            log.err(msg)\n\n    def sendMessage(self, payload, is_binary=False):\n        if isinstance(payload, dict) and '_command' in payload:\n            data = json.dumps(\n                payload, cls=ScrapyJSONEncoder, sort_keys=True).encode('utf-8')\n            super(FerryServerProtocol, self).sendMessage(data, is_binary)\n\n    def send_error(self, data, failure):\n        e = failure.value\n        command = data.get('_callback', data.get('_command'))\n        id_ = data.get('_meta', {}).get('id')\n        if isinstance(e, BaseHTTPError):\n            code, reason, message = e.status, e.title, e.body\n        elif isinstance(e, KeyError):\n            requested_command = data.get('_command')\n            code = 4000\n            reason = \"Unknown command\"\n            if requested_command:\n                message = 'No command named \"%s\" found.' % requested_command\n            else:\n                message = \"No command received\"\n        else:\n            code = 500\n            reason = \"Internal Server Error\"\n            message = \"An unexpected error has occurred.\"\n        log.err(failure)\n        event_id = getattr(failure, 'sentry_event_id', None)\n        if event_id:\n            message = \"%s (Event ID: %s)\" % (message, event_id)\n\n        response = {\n            'error': code,\n            'reason': reason,\n            'message': message,\n        }\n        if command:\n            response['_command'] = command\n        if id_:\n            response['id'] = id_\n\n        self.sendMessage(response)\n\n    def getElementByNodeId(self, nodeid):\n        self.tab.web_page.mainFrame().evaluateJavaScript(\n            'livePortiaPage.pyGetByNodeId(%s)' % nodeid\n        )\n        return self.js_api.getReturnedElement()\n\n    def open_tab(self, meta=None):\n        if meta is None:\n            meta = {}\n        manager = SplashQNetworkAccessManager(\n            request_middlewares=[],\n            response_middlewares=[],\n            verbosity=defaults.VERBOSITY\n        )\n        manager.setCache(None)\n\n        data = {}\n        data['uid'] = id(data)\n\n        self.factory[self].tab = PortiaBrowserTab(\n            network_manager=manager,\n            splash_proxy_factory=None,\n            verbosity=defaults.VERBOSITY,\n            render_options=RenderOptions(data, defaults.MAX_TIMEOUT),\n            visible=True,\n        )\n        manager.tab = self.tab\n        self.tab.register_callback('on_request', self._configure_requests)\n        self.tab.register_callback('on_response', self._set_tab_html)\n        main_frame = self.tab.web_page.mainFrame()\n        cookiejar = PortiaCookieJar(self.tab.web_page, self)\n        manager.cookiejar = cookiejar\n        manager.setCookieJar(cookiejar)\n        if meta.get('cookies'):\n            cookiejar.put_client_cookies(meta['cookies'])\n\n        self.tab.web_page.loadStarted.connect(self._on_load_started)\n        main_frame.loadFinished.connect(self._on_load_finished)\n\n        self.js_api = PortiaJSApi(self)\n        main_frame.javaScriptWindowObjectCleared.connect(\n            self._on_javascript_window_cleared)\n        main_frame.initialLayoutCompleted.connect(self._on_layout_completed)\n\n        self.tab.set_images_enabled(True)\n        self.tab.set_viewport(meta.get('viewport') or _DEFAULT_VIEWPORT)\n        self.tab.set_user_agent(meta.get('user_agent') or _DEFAULT_USER_AGENT)\n        self.tab.loaded = False\n\n    def _on_load_started(self):\n        self.load_id = short_guid()\n        self.sendMessage({'_command': 'loadStarted', 'id': self.load_id,\n                          'url': self.tab.url})\n        self.tab.initial_layout_completed = False\n        return True\n\n    def _on_load_finished(self, ok=False):\n        if getattr(self.tab, '_raw_url', None) != self.tab.url:\n            page = self.tab.web_page\n            page.triggerAction(page.ReloadAndBypassCache, False)\n            # Avoid infinite reload loop\n            self.tab._raw_url = self.tab.url\n        self.sendMessage({'_command': 'loadFinished', 'url': self.tab.url,\n                          'id': getattr(self, 'load_id', None)})\n        return True\n\n    def _configure_requests(self, request, operation, data):\n        if request.hasRawHeader(b'Accept'):\n            url = six.binary_type(request.url().toEncoded())\n            url_path = urlparse(url).path.lower()\n            accepts = bytes(request.rawHeader(b'Accept')).lower()\n            if (accepts.startswith(STORED_TYPES) or _is_xml(accepts) or\n                    url_path.endswith(STORED_EXTENSIONS)):\n                request.track_response_body = True\n            elif (accepts.startswith(IGNORED_TYPES) or\n                  url_path.endswith(MEDIA_EXTENSIONS)):\n                drop_request(request)\n\n    def _set_tab_html(self, reply, har, content):\n        url = reply.url().toString()\n        if content is not None and url == self.tab.url:\n            self.tab._raw_html = decode(content)\n            self.tab._raw_url = decode(url)\n\n    def _on_layout_completed(self):\n        if not getattr(self.tab, 'initial_layout_completed', False):\n            self.populate_window_object()\n            self.tab.initial_layout_completed = True\n\n    def _on_javascript_window_cleared(self):\n        if getattr(self.tab, 'initial_layout_completed', False):\n            self.populate_window_object()\n\n    def populate_window_object(self):\n        main_frame = self.tab.web_page.mainFrame()\n        main_frame.addToJavaScriptWindowObject('__portiaApi', self.js_api)\n        path = os.path.join(\n            self.assets, b'splash_content_scripts').decode('utf-8')\n        self.tab.run_js_files(path, handle_errors=False)\n\n    def open_spider(self, meta, storage=None, project=None):\n        if not (meta.get('project') and meta.get('spider')):\n            return {'error': 4005, 'reason': 'No project specified'}\n\n        if (self.user.authorized_projects is not None and\n                meta['project'] not in self.user.authorized_projects and\n                not self.user.staff):\n            return {'error': 4004,\n                    'reason': 'Project \"%s\" not found' % meta['project']}\n        spider_name = meta['spider']\n\n        if project is None:\n            project = Project(storage, id=meta.get('project'))\n\n        try:\n            spider_model = project.spiders[spider_name]\n        except (IOError, KeyError):\n            return {'error': 4004,\n                    'reason': 'Spider \"%s\" not found' % spider_name}\n        spider_name, spider, items, extractors = load_spider_data(spider_model)\n        if not self.settings.get('SPLASH_URL'):\n            self.settings.set('SPLASH_URL', 'portia')\n        self.factory[self].spider = IblSpider(spider_name, spider, items,\n                                              extractors, self.settings)\n        self.factory[self].spiderspec = SpiderSpec(\n            project, spider_name, spider, items, extractors)\n\n    def __repr__(self):\n        return '{}({})'.format(self.__class__.__name__, str(self))\n\n    def __str__(self):\n        tab, spider, spec = '', '', ''\n        if self.tab:\n            try:\n                tab = '{}({})'.format(\n                    self.tab.__class__.__name__, self.tab.url)\n            except RuntimeError:\n                tab = 'MISSING'\n        if self.spider:\n            spider = '{}({})'.format(\n                self.spider.__class__.__name__, self.spider.name)\n        if self.spiderspec:\n            spec = str(self.spiderspec)\n        return ', '.join(filter(bool, (tab, spider, spec)))\n\n\nclass FerryServerFactory(WebSocketServerFactory):\n    def __init__(self, uri, assets='./'):\n        WebSocketServerFactory.__init__(self, uri)\n        self._peers = WeakKeyDictionary()\n        self.assets = assets\n\n    def __getitem__(self, key):\n        if key in self._peers:\n            return self._peers[key]\n        return None\n\n    def __setitem__(self, key, value):\n        self._peers[key] = value\n\n    def __contains__(self, key):\n        if self._peers.get(key) is not None:\n            return True\n        return False\n\n    def __repr__(self):\n        return 'Ferry(%s)' % ', '.join('User(%s)' % (\n                                       urlparse(user.tab.url).netloc\n                                       for user in self._peers.values()\n                                       if user.tab))\n"
  },
  {
    "path": "slyd/slyd/splash/proxy.py",
    "content": "from __future__ import absolute_import\nimport functools\nimport requests\n\nfrom base64 import b64decode\n\nfrom twisted.internet.threads import deferToThread\nfrom twisted.internet.defer import CancelledError\nfrom twisted.web.resource import Resource\nfrom twisted.web.server import NOT_DONE_YET\nfrom twisted.python import log\n\nfrom slybot.utils import encode\n\nfrom .qtutils import QNetworkRequest, to_py\nfrom .ferry import User, is_blacklisted\nfrom .css_utils import process_css\n\n\nclass ProxyResource(Resource):\n    def render_GET(self, request):\n        if not request.auth_info or not request.auth_info.get('username', None):\n            return self._error(request, 403, 'Auth required')\n        for arg in (b'url', b'referer', b'tabid'):\n            if arg not in request.args or len(request.args[arg]) != 1:\n                return self._error(\n                    request, 400, b'Argument required: %s' % arg)\n\n        url = request.args[b'url'][0]\n        if is_blacklisted(url):\n            return self._error(request, 404, b'Not Found')\n        referer = request.args[b'referer'][0]\n        try:\n            tabid = int(request.args[b'tabid'][0])\n        except (ValueError, TypeError):\n            return self._error(request, 400, b'Tab must exist' % arg)\n        return self._load_resource(request, url, referer, tabid)\n\n    def _load_resource(self, request, url, referer, tabid=None):\n        # It's not easy to cancel a request that's being made by splash,\n        # because it does't return the QNetworkReply and when redirecting the\n        # current QNetworkReply changes, so if the client closes the connection\n        # while fetching the content we simply note it in this object and let\n        # the request finish without aborting.\n        user = User.findById(tabid)\n        connection_status = {\"finished\": False}\n        cb = functools.partial(self.end_response, request, url, referer,\n                               connection_status, tabid)\n        if not (user and user.tab):\n            # No browser session active, proxy resource instead\n            return self._load_resource_proxy(request, url, referer, cb)\n        if request.auth_info['username'] != user.auth['username']:\n            return self._error(\n                request, 403, b\"You don't own that browser session\")\n\n        try:\n            entry = next((entry for entry in user.tab.har()['log']['entries']\n                          if entry['request']['url'] == url), None)\n            response = entry['response']\n            content = b64decode(response['content']['text'])\n            for header in response['headers']:\n                name, value = header['name'], header['value']\n                name_lower = name.lower()\n                if (name.startswith(('c', 'C')) and\n                    name_lower == 'content-type' and\n                        value.strip().startswith('text/css')):\n                    content = process_css(content, tabid, url)\n                if (name_lower.startswith('x-') or\n                        name_lower in {'server', 'date', 'connection', 'transfer-encoding', 'content-encoding'}):\n                    continue\n                request.responseHeaders.addRawHeader(name.encode('ascii'),\n                                                     value.encode('ascii'))\n            request.setResponseCode(response['status'])\n            return content\n        except (AttributeError, KeyError, AssertionError, TypeError):\n            pass\n\n        request.notifyFinish().addErrback(self._requestDisconnect, None,\n                                          connection_status)\n        try:\n            user.tab.http_client.get(url, cb, headers={'referer': referer})\n            return NOT_DONE_YET\n        except:\n            # Sometimes the browser frame has been freed and we get a\n            # \"underlying C/C++ object has been deleted\" error. Not sure if we\n            # can do something to avoid it, but if it happens we proxy the\n            # resource instead of recovering it from splash.\n            log.err()\n            return self._load_resource_proxy(request, url, referer, cb)\n\n    def _load_resource_proxy(self, request, url, referer, cb):\n        d = deferToThread(requests.get, url, headers={'referer': referer})\n        d.addCallback(cb)\n        d.addErrback(self._requestError, request)\n        request.notifyFinish().addErrback(self._requestDisconnect, deferred=d)\n        return NOT_DONE_YET\n\n    def _requestError(self, err, request):\n        if not err.check(CancelledError):\n            request.setResponseCode(500)\n            request.write('Error fetching the content')\n            request.finish()\n\n    def _requestDisconnect(self, err, deferred=None, connection_status=None):\n        if deferred:\n            deferred.cancel()\n        if connection_status:\n            connection_status[\"finished\"] = True\n\n    def end_response(self, request, original_url, referer, connection_status,\n                     tabid, reply):\n        if connection_status[\"finished\"]:\n            return\n\n        if hasattr(reply, 'readAll'):\n            content = bytes(reply.readAll())\n            status_code = to_py(reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))\n            if status_code == 400:\n                return self._load_resource(request, original_url, referer)\n            request.setResponseCode(status_code or 500)\n        else:\n            content = b''.join(chunk for chunk in reply.iter_content(65535))\n            request.setResponseCode(reply.status_code)\n\n        headers = {\n            b'cache-control': b'private',\n            b'pragma': b'no-cache',\n            b'content-type': b'application/octet-stream',\n        }\n        for header in (b'content-type', b'cache-control', b'pragma', b'vary',\n                       b'max-age'):\n            if hasattr(reply, 'hasRawHeader') and reply.hasRawHeader(header):\n                headers[header] = bytes(reply.rawHeader(header))\n            elif hasattr(reply, 'headers') and header in reply.headers:\n                headers[header] = bytes(reply.headers.get(header))\n            if header in headers:\n                request.setHeader(header, headers[header])\n\n        if bytes(headers[b'content-type']).strip().startswith(b'text/css'):\n            content = encode(process_css(content, tabid, original_url))\n        request.write(content)\n        request.finish()\n\n    def _error(self, request, code, message):\n        request.setResponseCode(code)\n        return message\n"
  },
  {
    "path": "slyd/slyd/splash/qtutils.py",
    "content": "\ntry:\n    from PyQt5.QtCore import QObject\n    from PyQt5.QtCore import pyqtSlot\n    from PyQt5.QtWebKit import QWebElement\n    from PyQt5.QtNetwork import QNetworkRequest\nexcept ImportError:\n    from PyQt4.QtCore import QObject\n    from PyQt4.QtCore import pyqtSlot\n    from PyQt4.QtWebKit import QWebElement\n    from PyQt4.QtNetwork import QNetworkRequest\n\ndef to_py(obj):\n    if hasattr(obj, 'toPyObject'):\n        return obj.toPyObject()\n    return obj\n\n"
  },
  {
    "path": "slyd/slyd/splash/utils.py",
    "content": "import six\n\nfrom scrapy.http import HtmlResponse, Request\nfrom scrapy.item import DictItem\n\nfrom portia_api.errors import BaseHTTPError\nfrom slybot.utils import encode, decode\n_DEFAULT_VIEWPORT = '1240x680'\n\n\ndef decoded_html(tab, type_=None):\n    if type_ == 'raw':\n        stated_encoding = tab.evaljs('document.characterSet')\n        return decode(tab._raw_html or tab.html(),\n                      default=stated_encoding)\n    return tab.html()\n\n\ndef extract_data(url, html, spider, templates):\n    items, links = [], []\n    if isinstance(html, six.text_type):\n        html = encode(html)\n    for value in spider.parse(page(url, html)):\n        if isinstance(value, Request):\n            links.append(value.url)\n        elif isinstance(value, DictItem):\n            value['_template_name'] = _get_template_name(value['_template'],\n                                                         templates)\n            items.append(value._values)\n        else:\n            raise ValueError(\"Unexpected type %s from spider\" %\n                             type(value))\n    return items, links\n\n\ndef page(url, html):\n    return HtmlResponse(url, 200, {}, html, encoding='utf-8')\n\n\ndef _html_path(sample):\n    path = sample.storage_path(sample)[:-len('.json')].strip('/')\n    return '{}/{{}}.html'.format(path)\n\n\ndef _get_template_name(template_id, templates):\n    for template in templates:\n        if template['page_id'] == template_id:\n            return template['name']\n\n\ndef _should_load_sample(sample):\n    a = sample.get('plugins', {}).get('annotations-plugin', {}).get('extracts')\n    if (sample.get('annotated_body', '').count('data-scrapy') > 1 or\n            (sample.get('original_body') and a)):\n        return True\n    return False\n\n\ndef _get_viewport(viewport):\n    \"\"\"Check that viewport is valid and within acceptable bounds.\n\n    >>> f = '99x99 99x100 100x99 4097x4097 1280.720 wxy'.split()\n    >>> p = '100x100 1280x720 4096x2160'.split()\n    >>> _get_viewport(None) == _DEFAULT_VIEWPORT\n    True\n    >>> all(_get_viewport(i) == _DEFAULT_VIEWPORT for i in f)\n    True\n    >>> all(_get_viewport(i) == i for i in p)\n    True\n    \"\"\"\n    try:\n        assert viewport is not None\n        v = viewport.split('x')\n        if len(v) != 2:\n            raise ValueError('Viewport must have width and height')\n        w, h = int(v[0]), int(v[1])\n        if not (99 < w < 4097 and 99 < h < 4097):\n            raise ValueError('Viewport out of bounds')\n    except (AssertionError, TypeError, ValueError):\n        return _DEFAULT_VIEWPORT\n    return viewport\n\n\nclass BaseWSError(BaseHTTPError):\n    @property\n    def status(self):\n        return self._status + 4000\n\n\nclass BadRequest(BaseWSError):\n    _status = 400\n\n\nclass Forbidden(BaseWSError):\n    _status = 403\n\n\nclass NotFound(BaseWSError):\n    _status = 404\n\n\nclass InternalServerError(BaseWSError):\n    _status = 500\n\n\nclass ProjectsDict(dict):\n    def __init__(self, auth):\n        self.allow_all = False\n        if 'projects_data' in auth:\n            for project in auth['projects_data']:\n                self[project['id']] = project['name']\n        elif 'authorized_projects' in auth:\n            for project_id in auth['authorized_projects']:\n                self[project_id] = project_id\n        else:\n            self.allow_all = True\n        self.staff = auth.get('staff', False)\n\n    def __getitem__(self, key):\n        try:\n            return super(ProjectsDict, self).__getitem__(key)\n        except KeyError:\n            if self.allow_all or self.staff:\n                return key\n            raise\n\n    def __contains__(self, key):\n        if self.allow_all or self.staff:\n            return True\n        return super(ProjectsDict, self).__contains__(key)\n"
  },
  {
    "path": "slyd/slyd/tap.py",
    "content": "'''\nThe module is used by the Twisted plugin system\n(twisted.plugins.slyd_plugin) to register twistd command to manage\nslyd server. The command can be used with 'twistd slyd'.\n'''\nfrom __future__ import absolute_import\nfrom os import listdir, environ\nfrom os.path import join, dirname, isfile, abspath\nfrom twisted.python import usage\nfrom twisted.web.resource import Resource\nfrom twisted.web.static import File\nfrom .resource import SlydJsonObjectResource\nfrom .server import Site, debugLogFormatter\n\nDEFAULT_PORT = 9001\nDEFAULT_DOCROOT = abspath(join(dirname(dirname(__file__)), '..', 'portiaui', 'dist'))\n\n\nclass Options(usage.Options):\n    optParameters = [\n        ['port', 'p', DEFAULT_PORT, 'Port number to listen on.', int],\n        ['docroot', 'd', DEFAULT_DOCROOT, 'Default doc root for static media.']\n    ]\n\n\nclass Capabilities(SlydJsonObjectResource):\n\n    isLeaf = True\n\n    def __init__(self, spec_manager):\n        self.spec_manager = spec_manager\n\n    def render_GET(self, request):\n        return {\n            'capabilities': self.spec_manager.capabilities,\n            'custom': self.spec_manager.customizations,\n            'username': request.auth_info.get('username'),\n        }\n\n\ndef configure_django(settings):\n    import django\n    environ.setdefault('DJANGO_SETTINGS_MODULE', settings['DJANGO_SETTINGS'])\n    django.setup()\n\n\ndef create_root(config, settings_module):\n    from scrapy.settings import Settings\n    settings = Settings()\n    settings.setmodule(settings_module)\n    configure_django(settings)\n\n    from .authmanager import AuthManager\n\n    from slyd.splash.ferry import (FerryServerProtocol, FerryServerFactory,\n                                   create_ferry_resource)\n    from slyd.splash.proxy import ProxyResource\n\n    root = Resource()\n    static = Resource()\n    docroot = config['docroot']\n    if hasattr(docroot, 'encode'):\n        docroot = docroot.encode('utf-8')\n    for file_name in listdir(docroot):\n        file_path = join(docroot, file_name)\n        if isfile(file_path):\n            static.putChild(file_name, File(file_path))\n    static.putChild(b'main.html', File(join(docroot, b'index.html')))\n\n    root.putChild(b'static', static)\n    root.putChild(b'assets', File(join(docroot, b'assets')))\n    root.putChild(b'fonts', File(join(docroot, b'assets', b'fonts')))\n    root.putChild(b'', File(join(docroot, b'index.html')))\n\n    # add websockets for communicating with splash\n    factory = FerryServerFactory('ws://127.0.0.1:%d' % config['port'],\n                                 assets=docroot)\n    factory.protocol = FerryServerProtocol\n    websocket = create_ferry_resource(factory)\n    root.putChild(b'ws', websocket)\n\n    root.putChild(b'proxy', ProxyResource())\n\n    auth_manager = AuthManager(settings)\n    return auth_manager.protectResource(root)\n\n\ndef makeService(config, settings_module=None):\n    if settings_module is None:\n        import slyd.settings as settings_module\n    root = create_root(config, settings_module)\n    site = Site(root, logFormatter=debugLogFormatter)\n    return site\n"
  },
  {
    "path": "slyd/twisted/plugins/slyd_plugin.py",
    "content": "\"\"\"Registers 'twistd slyd' command.\"\"\"\nfrom twisted.application.service import ServiceMaker\n\nfinger = ServiceMaker(\n    'slyd', 'slyd.tap', 'A server for creating scrapely spiders', 'slyd')\n"
  },
  {
    "path": "splash_utils/compile_slybot.sh",
    "content": "#!/bin/bash\n\n{\n    echo \";(function(){\"\n\n    cat '../portiaui/bower_components/es5-shim/es5-shim.js'\n\n    # Page actions scripts\n    cat 'waitAsync.js'\n    cat 'perform_actions.js'\n\n    echo '})();'\n} > ../slybot/slybot/splash-script-combined.js\n\n"
  },
  {
    "path": "splash_utils/filters/easylist.txt",
    "content": "[Adblock Plus 2.0]\n! Checksum: gz3aDcNyBxcKFlEoU0H3pw\n! Version: 201505140830\n! Title: EasyList\n! Last modified: 14 May 2015 08:30 UTC\n! Expires: 4 days (update frequency)\n! Homepage: https://easylist.adblockplus.org/\n! Licence: https://easylist-downloads.adblockplus.org/COPYING\n!\n! Please report any unblocked adverts or problems\n! in the forums (https://forums.lanik.us/)\n! or via e-mail (easylist.subscription@gmail.com).\n!\n!-----------------------General advert blocking filters-----------------------!\n! *** easylist:easylist/easylist_general_block.txt ***\n&ad_box_\n&ad_channel=\n&ad_classid=\n&ad_height=\n&ad_keyword=\n&ad_network_\n&ad_number=\n&ad_type=\n&ad_type_\n&ad_url=\n&ad_zones=\n&adbannerid=\n&adclient=\n&adcount=\n&adgroupid=\n&admeld_\n&admid=\n&adname=\n&adnet=\n&adnum=\n&adpageurl=\n&adsafe=\n&adserver=\n&adsize=\n&adslot=\n&adslots=\n&adsourceid=\n&adspace=\n&adstype=\n&adType=PREROLL&\n&adunit=\n&adurl=\n&adv_keywords=\n&advert_\n&advertiserid=\n&advid=\n&advtile=\n&adzone=\n&banner_id=\n&clicktag=http\n&customSizeAd=\n&displayads=\n&expandable_ad_\n&gIncludeExternalAds=\n&googleadword=\n&jumpstartadformat=\n&largead=\n&maxads=\n&popunder=\n&program=revshare&\n&prvtof=*&poru=\n&show_ad_\n&showad=\n&simple_ad_\n&smallad=\n&strategy=adsense&\n&type=ad&\n&UrlAdParam=\n&video_ads_\n&videoadid=\n&view=ad&\n+advertorial.\n+adverts/\n-2/ads/\n-2011ad_\n-300x100ad2.\n-ad-001-\n-ad-180x150px.\n-ad-200x200-\n-ad-24x24.\n-ad-300x250.\n-ad-313x232.\n-ad-340x400-\n-ad-400.\n-ad-banner.\n-ad-big.\n-ad-bottom-\n-ad-button-\n-ad-category-\n-ad-choices.\n-ad-column-\n-ad-data/\n-ad-ero-\n-ad-exo-\n-ad-gif1-\n-ad-home.\n-ad-hrule-\n-ad-hrule.\n-ad-iframe/\n-ad-large.\n-ad-left.\n-ad-limits.\n-ad-loading.\n-ad-manager/$~stylesheet\n-ad-marker.\n-ad-mpu+\n-ad-new_\n-ad-right.\n-ad-rotators/\n-ad-server/\n-ad-sidebar-\n-ad-tile.\n-ad-top.\n-ad-unit.\n-ad-unit/\n-ad-util-\n-ad-util.\n-ad-vertical-\n-ad-zone.\n-ad.jpg.pagespeed.\n-ad.jpg?\n-ad.jsp|\n-ad.php?\n-ad/main.\n-ad/right_\n-ad1.\n-ad2.\n-ad3.\n-Ad300x250.\n-Ad300x90-\n-ad4.\n-ad5.\n-ad_125x125.\n-ad_banner-\n-ad_injector/\n-ad_leaderboard/\n-adap.\n-adblack-\n-adcentre.\n-adchain.\n-adhelper.\n-adhere2.\n-adimage-\n-admarvel/\n-adrotation.\n-ads-180x\n-ads-728x\n-ads-banner.\n-ads-bottom.\n-ads-iframe.\n-ads-init&\n-ads-management/\n-ads-manager/\n-ads-placement.\n-ads-right.\n-ads-widget?\n-ads.generated.\n-ads.gif\n-ads.js?\n-ads.php?\n-ads.swf\n-ads/728x\n-ads/oas/\n-Ads_728x902.\n-ads_9_3.\n-Ads_Billboard_\n-adscript.\n-adsense2.\n-adserver-\n-adserver/\n-adsonar.\n-adspace.\n-adspace_\n-adspot-\n-adswizz-\n-adsystem-\n-adtechfront.\n-adtopbanner-\n-adtrack.\n-adv-v1/\n-adv.jpg\n-adv.js\n-advert-label-\n-advert.jpg?\n-advert.swf\n-advert1.\n-advert2.\n-advert3.\n-advertise.\n-advertise/\n-advertise01.\n-advertisement-icon.\n-advertisement.\n-advertisement_\n-advertising_\n-advertisment-\n-adwords.\n-affiliate-link.\n-affiliates/img_\n-article-ads-\n-article-advert-\n-banner-ad-\n-banner-ad.\n-banner-ads-\n-banner.swf?\n-banner468x60.\n-bannerads/\n-bg_ads.\n-billboard-ads/\n-bin/ad_\n-blog-ad-\n-book-ad-\n-Box-Ad.\n-box2-ad?\n-content-ad.\n-contest-ad.\n-cpm-ad.\n-cpm-ads.\n-criteo.\n-dfp-ads/\n-euads.\n-fe-ads/\n-feed-ads.\n-fleshlight2.\n-floater_ads_\n-floorboard-ads/\n-footerads-\n-footerads.\n-gallery_ad/\n-games/ads/\n-google-ads-\n-google-ads/\n-google2-ad-\n-gpt-ad-\n-housead-\n-iframe-ad.\n-iframe-ads/\n-image-ad.\n-image/Ads/\n-images/ad-\n-img/ads/\n-inspire-ad.\n-intern-ads/\n-layer-ad.\n-layer-ads/\n-leaderboard-ad-\n-load-ads.\n-NewAd.\n-news-ad-\n-newsletter-ad-\n-NewStockAd-\n-online-advert.\n-page-ad.\n-page-ad?\n-page-peel/\n-panel-ad.\n-panel_ad_\n-peel-ads-\n-permads.\n-pop-under/\n-popexit.\n-popunder.\n-popup-ad.\n-popup-ads-\n-printhousead-\n-publicidad.\n-rectangle/ad-\n-Results-Sponsored.\n-right-ad.\n-rightrailad-\n-rollout-ad-\n-scrollads.\n-seasonal-ad.\n-show-ads.\n-side-ad-\n-Skyscraper-Ad.\n-skyscrapper160x600.\n-small-ad.\n-source/ads/\n-sponsor-ad.\n-sponsored-links-\n-strip-ads-\n-template-ads/\n-text-ads.\n-theme/ads/\n-third-ad.\n-top-ad.\n-top-ads.\n-us/ads/\n-web-ad-\n-Web-Ad.\n-Web-Ads.\n-web-advert-\n-Web-Advert.\n-webad1.\n-your-ads-here.\n.1d/ads/\n.a3s?n=*&zone_id=\n.ace.advertising.\n.ad-cloud.\n.ad-sys.\n.ad-traffic.\n.ad.final.\n.ad.footer.\n.ad.json?\n.ad.page.\n.ad.premiere.\n.ad1.nspace\n.adbanner.\n.adbutler-\n.adcenter.\n.adforge.\n.adframesrc.\n.adlabs.$domain=~adlabs.ru\n.admarvel.\n.adnetwork.\n.adpartner.\n.adplacement=\n.adresult.$domain=~adresult.ch\n.adriver.$~object-subrequest\n.adru.\n.ads-and-tracking.\n.ads-lazy.\n.ads-min.\n.ads-tool.\n.ads.core.\n.ads.css\n.ads.darla.\n.ads.loader-\n.ads.zones.\n.ads_clickthru.\n.adsbox.\n.adsense.\n.adserv/\n.adserver.\n.adserver01.\n.adserver1.\n.adService.\n.adspace.\n.adsremote.\n.adtech_\n.adtooltip&\n.adv.cdn.\n.advert.$domain=~advert.ly\n.AdvertismentBottom.\n.advertmarket.\n.adwolf.\n.ae/ads/\n.ar/ads/\n.ashx?ad=\n.ashx?AdID=\n.asp?coad\n.aspx?ad=\n.aspx?adid=\n.at/ads/\n.au/ads/\n.banner%20ad.\n.bbn.by/\n.biz/ad.\n.biz/ad/\n.biz/ad2/\n.biz/ads/\n.bns1.net/\n.box.ad.\n.br/ads/\n.ca/ads/\n.cc/ads/\n.cfm?ad=\n.cgi?ad=\n.ch/ads/\n.ch/adv/\n.clkads.\n.co/ads/\n.co/ads?\n.com/?ad=\n.com/?wid=\n.com/a?network\n.com/a?pagetype\n.com/a?size\n.com/ad.$domain=~ad-tuning.de\n.com/ad/$domain=~channel4.com|~watchever.de\n.com/ad2/\n.com/ad6/\n.com/ad?\n.com/adclk?\n.com/adds/\n.com/adgallery\n.com/adinf/\n.com/adlib/\n.com/adlib_\n.com/adpicture\n.com/ads-\n.com/ads.\n.com/ads/$image,object,subdocument\n.com/ads?\n.com/ads_\n.com/adv/\n.com/adv3/\n.com/adv?\n.com/adv_\n.com/adx/\n.com/adx_\n.com/adz/\n.com/bads/\n.com/doubleclick/\n.com/gads/\n.com/im-ad/\n.com/im_ad/\n.com/iplgadshow\n.com/js.ng/\n.com/js/ad.\n.com/js/ads/\n.com/js/adsense\n.com/miads/\n.com/peels/\n.com/pm/ad-\n.com/promodisplay?\n.com/ss/ad/\n.com/video-ad-\n.cz/affil/\n.cz/bannery/\n.dartconfig.js\n.displayAds&\n.eg/ads/\n.eu/ads/\n.eu/adv/\n.fm/ads/\n.gg/ads/\n.gif?ad=\n.gr/ads/\n.hk/ads/\n.homad.\n.HomepageAdvertismentBottom.\n.html?ad=\n.html?ad_\n.html?clicktag=\n.iads.js\n.ie/ads/\n.il/ads/\n.in/ads/\n.info/ad_\n.info/ads-\n.info/ads/\n.initdoubleclickadselementcontent?\n.internads.\n.is/ads/\n.jp/ads/\n.jsp?adcode=\n.ke/ads/\n.lazyload-ad-\n.lazyload-ad.\n.link/ads/\n.lk/ads/\n.me/ads-\n.me/ads/\n.mobileads.\n.mv/ads/\n.mx/ads/\n.my/ads/\n.name/ads/\n.net/_adv/\n.net/ad-\n.net/ad/$~object-subrequest\n.net/ad2/\n.net/ad_\n.net/adgallery\n.net/adj;\n.net/ads-\n.net/ads.\n.net/ads/\n.net/ads?\n.net/ads_\n.net/adt?\n.net/adv/\n.net/affiliate/\n.net/bnr/\n.net/flashads\n.net/gads/\n.net/noidadx/\n.net/pfadj/\n.net/pops.js\n.net/vghd_\n.nl/ad2/\n.nl/ads/\n.no/ads/\n.nu/ads/\n.nz/ads/\n.oasfile.\n.openad.\n.openx.\n.openxtag.js\n.openxtag.min.js\n.org/ad-\n.org/ad.\n.org/ad/\n.org/ad_\n.org/adgallery1\n.org/ads-\n.org/ads/\n.org/ads_\n.org/adv/\n.org/exit.js\n.org/gads/\n.org/pops.js\n.ph/ads/\n.php/ad/\n.php/ads/\n.php?ad=\n.php?ad_\n.php?adsid=\n.php?adv=\n.php?affid=\n.php?clicktag=\n.php?nats=\n.php?zone_id=\n.php?zoneid=\n.pk/ads/\n.pl/ads/\n.popunder.js\n.popup_im.\n.popupvideoad.\n.refit.ads.\n.rolloverad.\n.se/?placement=$script,subdocument,third-party\n.se/ads/\n.shortcuts.search.\n.show_ad_\n.sk/ads/\n.spider.ad/\n.sponsorads.\n.streamads.\n.swf?1&clicktag=\n.swf?2&clicktag=\n.swf?ad=\n.swf?click=\n.swf?clicktag=\n.swf?clickthru=\n.swf?iurl=http\n.swf?link1=http\n.swf?link=http\n.swf?popupiniframe=\n.text-link-ads.\n.textads.\n.th/ads/\n.to/ads/\n.topad.\n.tv/adl.\n.tv/ads.\n.tv/ads/\n.twoads.\n.tz/ads/\n.uk/ads/\n.uk/adv/\n.us/ads/\n.vert.ad.\n.widgets.ad?\n.ws/ads/\n.xxx/ads/\n.za/ads.\n.za/ads/\n.zm/ads/\n.zw/ads/\n/!advert_\n/0/ads/*\n/04/ads-\n/1/ads/*\n/120ad.\n/120ads/*\n/125x125_banner.\n/125x125ad.\n/126_ad.\n/17/ads/*\n/1912/ads/*\n/1afr.php?\n/2010/ads/*\n/2010main/ad/*\n/2011/ads/*\n/2013/ads/*\n/2014/ads/*\n/2015/ads/*\n/24-7ads.\n/24adscript.\n/250x250_advert_\n/300-ad-\n/300250_ad-\n/300by250ad.\n/300x250ad.\n/300x250adbg.\n/300x250ads.\n/300x250advert.\n/300x500_ad\n/336x280ads.\n/3pt_ads.\n/468-banner.\n/468ad.\n/468xads.\n/728_ad_\n/728x80topad.\n/728x90banner.\n/?addyn|*\n/?adv_partner\n/?advideo/*\n/?view=ad\n/_/ads/*\n/_30/ads/*\n/_ads/*\n/_affiliatebanners/*\n/_global/ads/*\n/_img/ad_\n/_js2/oas.\n/_scripts/_oas/*\n/_svc/ad/*\n/a/ads/*\n/a1/*?sub=$third-party\n/a2/?sub=$third-party\n/a2/ads/*\n/a3/?sub=$third-party\n/aamsz=\n/ABAdsv1.\n/abm.asp?\n/abm.aspx\n/abmw.asp\n/abmw/*\n/abnl/?begun^\n/abnl/?narodads^\n/about-these-ads.\n/absolutebm.aspx?\n/acc_random=\n/ad%20banners/*\n/ad%20images/*\n/ad-125.\n/ad-300topleft.\n/ad-300x250.\n/ad-300x254.\n/ad-350x350-\n/ad-468-\n/ad-600-\n/ad-amz.\n/ad-audit.\n/ad-banner-\n/ad-banner.\n/ad-bckg.\n/ad-bin/*\n/ad-bottom.\n/ad-box-\n/ad-boxes-\n/ad-builder.\n/ad-button1.\n/ad-callback.\n/ad-cdn.\n/ad-channel-\n/ad-choices-\n/ad-choices.\n/ad-creatives-\n/ad-creatives/*\n/ad-emea.\n/ad-engine.\n/ad-exchange.\n/ad-feature-\n/ad-feedback.\n/ad-flashgame.\n/ad-format.\n/ad-frame.\n/ad-frame/*\n/ad-gallery.$~stylesheet\n/ad-half_\n/ad-hcm.\n/ad-header.\n/ad-home-\n/ad-hug.\n/ad-identifier.\n/ad-ifr.\n/ad-iframe-\n/ad-iframe.\n/ad-iframe?\n/ad-image.\n/ad-images/*\n/ad-ina.\n/ad-indicator-\n/ad-inject/*\n/ad-injection/*\n/ad-int-\n/ad-issue.\n/ad-label-\n/ad-label.\n/ad-layering-\n/ad-layout/*\n/ad-leaderboard.\n/ad-left.\n/ad-letter.\n/ad-lil.\n/ad-loader-\n/ad-loader.\n/ad-loading.\n/ad-local.\n/ad-logger/*\n/ad-manager/*\n/ad-managment/*\n/ad-methods.\n/ad-minister-\n/ad-minister.\n/ad-minister/*\n/ad-modules/*\n/ad-nytimes.\n/ad-offer1.\n/ad-openx.\n/ad-plate/*\n/ad-point/*\n/ad-position-\n/ad-pub.\n/ad-record.\n/ad-refresh-\n/ad-refresh.\n/ad-right2.\n/ad-ros-\n/ad-rotator-\n/ad-serve?\n/ad-server.\n/ad-server/*\n/ad-side/*\n/ad-sidebar-\n/ad-skyscraper.\n/ad-source/*\n/ad-specs.\n/ad-sprite.\n/ad-strip.\n/ad-studio/*\n/ad-styles.\n/ad-tag2.\n/ad-tandem.\n/ad-template.\n/ad-template/*\n/ad-text.\n/ad-title.\n/ad-top-\n/ad-top.\n/ad-top/*\n/ad-topbanner-\n/ad-unit-\n/ad-updated-\n/ad-utilities.\n/ad-vert.\n/ad-vertical-\n/ad-verticalbar.\n/ad-view-\n/ad.ashx?\n/ad.asp?\n/ad.aspx?\n/ad.cgi?\n/ad.code?\n/ad.css?\n/ad.epl?\n/ad.gif|\n/ad.html?\n/ad.info.\n/ad.jsp?\n/ad.mason?\n/ad.min.\n/ad.php3?\n/ad.php?\n/ad.php|\n/ad.popup?\n/ad.redirect.\n/ad.sense/*\n/ad.serve.\n/ad.valary?\n/ad.view?\n/ad.ytn.\n/ad/600-\n/ad/728-\n/ad/?host=\n/ad/?section=\n/ad/?site=\n/ad/a.aspx?\n/ad/afc_\n/ad/article_\n/ad/audsci.\n/ad/banner.\n/ad/banner/*\n/ad/banner?\n/ad/banner_\n/ad/bannerdetails/*\n/ad/bannerimg/*\n/ad/banners/*\n/ad/behavpixel.\n/ad/bin/*\n/ad/blank.\n/ad/blog_\n/ad/bottom.\n/ad/card-\n/ad/common/*\n/ad/common_\n/ad/content/*\n/ad/cpmstar/*\n/ad/css/*\n/ad/directcall/*\n/ad/empty.\n/ad/extra/*\n/ad/extra_\n/ad/files/*\n/ad/frame1.\n/ad/framed?\n/ad/generate?\n/ad/getban?\n/ad/getbanandfile?\n/ad/google/*\n/ad/google_\n/ad/html/*\n/ad/iframe.\n/ad/iframe/*\n/ad/image/*\n/ad/img/*\n/ad/index.\n/ad/index/*\n/ad/inline?\n/ad/integral-\n/ad/inventory/*\n/ad/jsonp/*\n/ad/leaderboard.\n/ad/live-\n/ad/load_\n/ad/loading.\n/ad/log/*\n/ad/login-\n/ad/middle.\n/ad/mpu/*\n/ad/network/*\n/ad/omakasa.\n/ad/player|\n/ad/pong?\n/ad/popup.\n/ad/preview/*\n/ad/quigo/*\n/ad/random_\n/ad/realclick.\n/ad/realclick/*\n/ad/rectangle.\n/ad/reklamy.\n/ad/request?\n/ad/right2.\n/ad/rotate?\n/ad/script/*\n/ad/select?\n/ad/serve.\n/ad/show.\n/ad/side_\n/ad/skin_\n/ad/skyscraper.\n/ad/skyscrapper.\n/ad/spacer.\n/ad/sponsored-\n/ad/sponsors/*\n/ad/status?\n/ad/superbanner.\n/ad/swf/*\n/ad/takeover/*\n/ad/textlinks/*\n/ad/timing.\n/ad/top.\n/ad/top/*\n/ad/top1.\n/ad/top2.\n/ad/top3.\n/ad/top_\n/ad/view/*\n/ad0.\n/ad000/*\n/ad02/background_\n/ad1-728-\n/ad1.\n/ad1/index.\n/ad12.\n/ad120x60.\n/ad125.\n/ad125b.\n/ad125x125.\n/ad132m.\n/ad132m/*\n/ad134m/*\n/ad136/*\n/ad15.\n/ad16.\n/ad160.\n/ad160k.\n/ad160x600.\n/ad1_\n/ad1place.\n/ad1r.\n/ad1x1home.\n/ad2-728-\n/ad2.\n/ad2/index.\n/ad2/res/*\n/ad2010.\n/ad234.\n/ad24/*\n/ad247realmedia/*\n/ad290x60_\n/ad2_\n/ad2border.\n/ad2con.\n/ad2gate.\n/ad2gather.\n/ad2push.\n/ad2you/*\n/ad3.\n/ad300.\n/ad300f.\n/ad300f2.\n/ad300s.\n/ad300ws.\n/ad300x.\n/ad300x145.\n/ad300x250-\n/ad300x250.\n/ad300x250_\n/ad350.\n/ad3_ima.\n/ad3i.\n/ad4.\n/ad41_\n/ad468.\n/ad468x60.\n/ad468x80.\n/ad4i.\n/ad5.\n/ad6.\n/ad600x250.\n/ad600x330.\n/ad7.\n/ad728-\n/ad728.\n/ad728f.\n/ad728f2.\n/ad728s.\n/ad728t.\n/ad728w.\n/ad728ws.\n/ad728x.\n/ad728x15.\n/ad728x15_\n/ad728x90.\n/ad8.\n/ad?channel=\n/ad?cid=\n/ad?count=\n/ad?currentview=\n/ad?iframe_\n/ad?pos_\n/ad?sponsor=\n/ad?type=\n/ad_120_\n/ad_200x90_\n/ad_234x60_\n/ad_250x250_\n/ad_300.\n/ad_300250.\n/ad_300_\n/ad_600_\n/ad_600x160_\n/ad_728.\n/ad_728_\n/ad_960x90_\n/ad_agency/*\n/ad_area.\n/ad_art/*\n/Ad_Arub_\n/ad_banner.\n/ad_banner/*\n/ad_banner1.\n/ad_banner2.\n/ad_banner_\n/ad_bannerPool-\n/ad_banners/*\n/ad_bar_\n/ad_base.\n/ad_big_\n/ad_blog.\n/ad_bomb/*\n/ad_bot.\n/ad_bottom.\n/ad_box.\n/ad_box1.\n/ad_box2.\n/ad_box?\n/ad_box_\n/ad_bsb.\n/ad_button.\n/ad_cache/*\n/ad_campaigns/*\n/ad_caption.\n/ad_check.\n/ad_choices.\n/ad_choices_\n/ad_code.\n/ad_commonside.\n/ad_commonside_\n/ad_configuration.\n/ad_configurations_\n/ad_container_\n/ad_content.\n/ad_contents/*\n/ad_count.\n/ad_counter.\n/ad_counter_\n/ad_creatives.\n/ad_data/*\n/ad_detect.\n/ad_digital.\n/ad_dir/*\n/ad_display.\n/ad_display_\n/ad_drivers/*\n/ad_ebound.\n/ad_editorials_\n/ad_engine?\n/ad_entry_\n/ad_feed.\n/ad_file/*\n/ad_files/*\n/ad_fill.\n/ad_filler.\n/ad_filmstrip/*\n/ad_flash/*\n/ad_flat_\n/ad_floater.\n/ad_folder/*\n/ad_footer.\n/ad_footer_\n/ad_forum_\n/ad_frame.\n/ad_frame?\n/ad_frm.\n/ad_function.\n/ad_generator.\n/ad_generator?\n/ad_gif/*\n/ad_gif_\n/ad_google.\n/ad_h.css?\n/ad_hcl_\n/ad_hcr_\n/ad_header.\n/ad_header_\n/ad_height/*\n/ad_holder/*\n/ad_home2011_\n/ad_home_\n/ad_homepage_\n/ad_horisontal.\n/ad_horiz.\n/ad_horizontal.\n/ad_html/*\n/ad_icons/*\n/ad_iframe.\n/ad_iframe_\n/ad_image.\n/ad_image2.\n/ad_images/*\n/ad_img.\n/ad_img/*\n/ad_include.\n/ad_index_\n/ad_insert.\n/ad_jnaught/*\n/ad_keywords.\n/ad_label2_\n/ad_label728.\n/ad_label_\n/ad_large.\n/ad_leader.\n/ad_leader_\n/ad_leaderboard.\n/ad_leaderboard/*\n/ad_left.\n/ad_left_\n/ad_legend_\n/ad_link.\n/ad_links/*\n/ad_load.\n/ad_loader.\n/ad_loader2.\n/ad_locations/*\n/ad_log_\n/ad_lomadee.\n/ad_manage.\n/ad_manager.\n/ad_manager/*\n/ad_master_\n/ad_mbox.\n/ad_media/*\n/ad_medium_\n/ad_mini_\n/ad_mobile.\n/ad_mpu.\n/ad_multi_\n/ad_navigbar_\n/ad_news.\n/ad_note.\n/ad_notice.\n/ad_oas/*\n/ad_offersmail_\n/ad_ops/*\n/ad_option_\n/ad_overlay.\n/ad_page_\n/ad_paper_\n/ad_parts.\n/ad_peel/*\n/ad_pics/*\n/ad_pop.\n/ad_pop1.\n/ad_pos=\n/ad_position=\n/ad_position_\n/ad_premium.\n/ad_premium_\n/ad_preroll-\n/ad_print.\n/ad_rectangle_\n/ad_refresh.\n/ad_refresher.\n/ad_reloader_\n/ad_render_\n/ad_renderv4_\n/ad_rentangle.\n/ad_req.\n/ad_request.\n/ad_right.\n/ad_right_\n/ad_rotation.\n/ad_rotator.\n/ad_rotator/*\n/ad_rotator_\n/ad_script.\n/ad_script_\n/ad_scroller.\n/ad_serv.\n/ad_serve.\n/ad_serve_\n/ad_server.\n/ad_server/*\n/ad_servlet.\n/ad_shared/*\n/ad_show.\n/ad_show?\n/ad_side.\n/ad_sidebar/*\n/ad_sizes=\n/ad_skin_\n/ad_sky.\n/ad_skyscraper.\n/ad_slideout.\n/ad_space.\n/ad_spot.\n/ad_square.\n/ad_square_\n/ad_squares.\n/ad_srv.\n/ad_stem/*\n/ad_styling_\n/ad_supertile/*\n/ad_sys/*\n/ad_syshome.\n/ad_system/*\n/ad_tab.\n/ad_tag.\n/ad_tag_\n/ad_tags_\n/ad_text.\n/ad_text_\n/ad_tickets.\n/ad_tile/*\n/ad_timer.\n/ad_title_\n/ad_top.\n/ad_top/*\n/ad_top_\n/ad_topgray2.\n/ad_tower_\n/ad_tpl.\n/ad_txt.\n/ad_units.\n/ad_units/*\n/ad_upload/*\n/ad_util.\n/ad_utils.\n/ad_utils/*\n/ad_ver/*\n/ad_vert.\n/ad_vertical.\n/ad_video.htm\n/ad_video1.\n/ad_view_\n/ad_wide_\n/ad_width/*\n/ad_wrapper.\n/ad_www_\n/adactions.\n/adaffiliate_\n/adanalytics.\n/adanim/*\n/adaptvadplayer.\n/adaptvadservervastvideo.\n/adaptvexchangevastvideo.\n/adarena/*\n/adasset/*\n/adasset4/*\n/adback.\n/adback?\n/adban.\n/adbanner.\n/adbanner/*\n/adbanner2.\n/adbanner_\n/adbanners/*\n/adbar.\n/adbar/*\n/adbar2_\n/adbar_\n/adbars.\n/adbase.\n/adbeacon.\n/adbetween/*\n/adbg.jpg\n/adblob.\n/adblock.ash\n/adblock.js\n/adblock26.\n/adblock?id=\n/adblockl.\n/adblockr.\n/adbn?\n/adboost.\n/adborder.\n/adbot160.\n/adbot300.\n/adbot728.\n/adbot_\n/adbotleft.\n/adbotright.\n/adbottom.\n/adbox.\n/adbox/*\n/adbox1.\n/adbox2.\n/adbox_\n/adboxbk.\n/adboxes/*\n/adboxtable-\n/adbrite-\n/adbrite.\n/adbrite/*\n/adbrite2.\n/adbrite_\n/adbriteinc.\n/adbriteincleft2.\n/adbriteincright.\n/adbucks/*\n/adbug_\n/adbureau.\n/adbutler/*\n/adbytes.\n/adcache.\n/adcall.\n/adcalloverride.\n/adcampaigns/*\n/adcash-\n/adcash.\n/adcast01_\n/adcast_\n/adcde.js\n/adcdn.\n/adcell/*\n/adcenter.$script\n/adcentral.\n/adcframe.\n/adcgi?\n/adchain-\n/adchain.\n/adchannel_\n/adcheck.\n/adcheck?\n/adchoice.\n/adchoice/*\n/adchoice_\n/adchoices-\n/adchoices.\n/adchoices/*\n/adchoices16.\n/adchoices2.\n/adchoices_\n/adchoicesfooter.\n/adchoicesicon.\n/adchoiceslogo.\n/adchoicesv4.\n/adcircle.\n/adclick.\n/adclick/*\n/adclient-\n/adclient.\n/adclient/*\n/adclix.\n/adclixad.\n/adclutter.\n/adcode.\n/adcode/*\n/adcode_\n/adcodes/*\n/adcollector.\n/adcommon?\n/adcomp.\n/adcomponent/*\n/adconfig.js\n/adconfig.xml?\n/adconfig/*\n/adcontainer?\n/adcontent.$~object-subrequest\n/adcontent/*\n/adcontents_\n/adcontrol.\n/adcontrol/*\n/adcontroller.\n/adcore.\n/adcore_\n/adcount.\n/adcounter.\n/adcreative.\n/adcreative/*\n/adcss/*\n/adcycle.\n/adcycle/*\n/add728.\n/addata.\n/addatasandbox?\n/addeals/*\n/addefend.\n/addefend/*\n/addelivery/*\n/addeliverymodule/*\n/addisplay.\n/adds_banner/*\n/addyn/3.0/*\n/addyn|*;adtech;\n/addyn|*|adtech;\n/adedge/*\n/adengage-\n/adengage.\n/adengage/*\n/adengage0.\n/adengage1.\n/adengage2.\n/adengage3.\n/adengage4.\n/adengage5.\n/adengage6.\n/adengage_\n/adengine/*\n/adengine_\n/adentry.\n/aderlee_ads.\n/adError/*\n/adevent.\n/adevents.\n/adexample?\n/adexclude/*\n/adexternal.\n/adf.cgi?\n/adfactor/*\n/adfactor_\n/adfactory-\n/adfactory.\n/adfactory_\n/adfarm.$domain=~watchever.de\n/adfeed.\n/adfeedback/*\n/adfeedtestview.\n/adfetch.\n/adfetch?\n/adfetcher?\n/adfever_\n/adfile.\n/adfile/*\n/adfiles.\n/adfiles/*\n/adfillers/*\n/adflash.\n/adflashes/*\n/adfly/*\n/adfolder/*\n/adfootcenter.\n/adfooter.\n/adFooterBG.\n/adfootleft.\n/adfootright.\n/adforgame160x600.\n/adforgame728x90.\n/adforgame728x90_\n/adforge.\n/adformats/*\n/adforums/*\n/adfox.\n/adfr.\n/adframe.\n/adframe/*\n/adframe120.\n/adframe120x240.\n/adframe2.\n/adframe468.\n/adframe728a.\n/adframe728b.\n/adframe728b2.\n/adframe728bot.\n/adframe?\n/adframe_\n/adframebottom.\n/adframecommon.\n/adframemiddle.\n/adframetop.\n/adframewrapper.\n/adfrequencycapping.\n/adfrm.\n/adfshow?\n/adfuncs.\n/adfunction.\n/adfunctions.\n/adgallery1.\n/adgallery1|\n/adgallery2.\n/adgallery2|\n/adgallery3.\n/adgallery3|\n/adgalleryheader.\n/adgear.js\n/adgearsegmentation.\n/adgenerator.\n/adgeo/*\n/adGet.\n/adgetter.\n/adgitize-\n/adgooglefull2.\n/adgraphics/*\n/adguard.\n/adguru.\n/adhads.\n/adhalfbanner.\n/adhandler.\n/adhandler/*$~subdocument\n/adhandlers-\n/adhandlers2.\n/adheader.\n/adheadertxt.\n/adheading_\n/adhese.\n/adhese_\n/adhints/*\n/adhomepage.\n/adhomepage2.\n/adhood.\n/adhost.\n/adhref.\n/adhtml/*\n/adhub.\n/adhug_\n/adicon_\n/adiframe.\n/adiframe/*\n/adiframe1.\n/adiframe18.\n/adiframe2.\n/adiframe7.\n/adiframe9.\n/adiframe?\n/adiframe_\n/adiframeanchor.\n/adiframem1.\n/adiframem2.\n/adiframetop.\n/adiframe|*|adtech;\n/adify_\n/adifyad.\n/adifyids.\n/adifyoverlay.\n/adim.html?ad\n/adimage.\n/adimage/*\n/adimage?\n/adimages.\n/adimages/*$~subdocument\n/adimg.\n/adimg/*\n/adinator/*\n/adinclude.\n/adinclude/*\n/adindex/*\n/adindicatortext.\n/adinit.\n/adinject.\n/adinjector.\n/adinjector_\n/adinsert.\n/adinsertionplugin.\n/adinsertjuicy.\n/adinterax.\n/adiquity.\n/adiro.\n/adition.\n/adixs.\n/adj.php?\n/adjk.\n/adjs.\n/adjs/*\n/adjs_\n/adjsmp.\n/adjug.\n/adjuggler?\n/adkeys.\n/adl.php\n/adlabel.\n/adlabel_\n/adlabs.js\n/AdLanding.\n/adlandr.\n/adlantis.\n/adlantisloader.\n/adlargefooter.\n/adlargefooter2.\n/adlayer.\n/adlayer/*\n/adleader.\n/adleaderboardtop.\n/adleft.\n/adleft/*\n/adleftsidebar.\n/adlens-\n/adlesse.\n/adlift4.\n/adlift4_\n/adline.$domain=~adline.co.il\n/adlink-\n/adlink.\n/adlink/*\n/adLink728.\n/adlink_\n/adlinks.\n/adlinks2.\n/adlinks_\n/adlist_\n/adload.\n/adloader.\n/adlock300.\n/adlog.php?\n/adm/ad/*\n/admain.\n/admain|\n/adman.\n/adman/*\n/admanagement/*\n/admanagementadvanced.\n/admanager.$~object-subrequest\n/admanager/*$~object-subrequest\n/admanager3.\n/admanager_\n/admanagers/*\n/admanagerstatus/*\n/admanproxy.\n/admantx-\n/admantx.\n/admantx/*\n/admarker.\n/admarker_\n/admarket/*\n/admarvel.\n/admaster.\n/admaster?\n/admatch-\n/admatcher.$~object-subrequest,~xmlhttprequest\n/admatcherclient.\n/admatik.\n/admax.$domain=~admax.cn|~admax.co|~admax.eu|~admax.info|~admax.net|~admax.nu|~admax.org|~admax.se|~admax.us\n/admax/*\n/admaxads.\n/admeasure.\n/admedia.\n/admedia/*\n/admega.\n/admeld.\n/admeld/*\n/admeld_\n/admeldscript.\n/admentor/*\n/admentor302/*\n/admentorasp/*\n/admentorserve.\n/admeta.\n/admez.\n/admez/*\n/admgr.\n/admicro2.\n/admicro_\n/admin/ad_\n/admin/banners/*\n/admin/sponsors/*\n/adminibanner2.\n/admixer_\n/admob.\n/admonitor-\n/admonitor.\n/adnap/*\n/adNdsoft/*\n/adnet.\n/ADNet/*\n/adnet2.\n/adnetmedia.\n/adnetwork.\n/adnetwork/*\n/adnetwork300.\n/adnetwork468.\n/adnetwork_\n/adnew2.\n/adnews.\n/AdNewsclip14.\n/AdNewsclip15.\n/adnext.\n/adnexus-\n/adng.html\n/adnl.\n/adnotice.\n/adobject.\n/adocean.\n/adometry-\n/adometry.\n/adometry?\n/adonline.\n/adonly468.\n/adops.\n/adops/*\n/adoptionicon.\n/adoptions.\n/adorika300.\n/adorika728.\n/ados.js\n/adotube_adapter.\n/adotubeplugin.\n/adoverlay.\n/adoverlay/*\n/adoverlayplugin.\n/adoverride.\n/adp-pro/*\n/adp.htm\n/adpage-\n/adpage.\n/adpage/*\n/adpagem.\n/adpages/*\n/adpan/*\n/adpanel/*\n/adpanelcontent.\n/adpartner.\n/adparts/*\n/adpatch.\n/adpeeps.\n/adpeeps/*\n/adperf_\n/adperfdemo.\n/adphoto.$domain=~adphoto.fr\n/adpic.\n/adpic/*\n/adpicture.\n/adpicture1.\n/adpicture1|\n/adpicture2.\n/adpicture2|\n/adpictures/*\n/adping.\n/adplace/*\n/adplace5_\n/adplacement.\n/adplay.\n/adplayer-\n/adplayer.\n/adplayer/*\n/adplugin.\n/adplugin_\n/adpoint.\n/adpolestar/*\n/adpool/*\n/adpop.\n/adpopup.\n/adpositionsizein-\n/AdPostInjectAsync.\n/adprime.\n/adproducts/*\n/adprove_\n/adprovider.\n/adproxy.\n/adproxy/*\n/adratio.\n/adrawdata/*\n/adreactor/*\n/adreadytractions.\n/adrec.\n/adrectanglebanner?\n/adrefresh-\n/adrefresh.\n/adrelated.\n/adreload.\n/adreload?\n/adremote.\n/adrendererfactory.\n/adreplace/*\n/adreplace160x600.\n/adreplace728x90.\n/adrequest.\n/adrequests.\n/adrequestvo.\n/adrequisitor-\n/adrevenue/*\n/adrevolver/*\n/adright.\n/adright/*\n/adrightcol.\n/adriver.$~object-subrequest\n/adriver/*\n/adriver_$~object-subrequest\n/adrobot.\n/adrolays.\n/adRoll.\n/adroller.\n/adrollpixel.\n/adroot/*\n/adrot.\n/adrot_\n/adrotat.\n/adrotate-\n/adrotate.\n/adrotate/*\n/adrotation.\n/adrotator.\n/adrotator/*\n/adrotator2.\n/adrotv2.\n/adrun.\n/adruptive.\n/ads-01.\n/ads-02.\n/ads-03.\n/ads-04.\n/ads-05.\n/ads-06.\n/ads-07.\n/ads-1.\n/ads-2.\n/ads-250.\n/ads-300-\n/ads-300.\n/ads-admin.\n/ads-arc.\n/ads-banner\n/ads-blogs-\n/ads-common.\n/ads-foot.\n/ads-footer.\n/ads-header-\n/ads-holder.\n/ads-leader|\n/ads-min.\n/ads-new.\n/ads-nodep.\n/ads-pd.\n/ads-rectangle.\n/ads-rec|\n/ads-request.\n/ads-reviews-\n/ads-right.\n/ads-sa.\n/ads-scroller-\n/ads-segmentjs.\n/ads-service.\n/ads-skyscraper.\n/ads-sky|\n/ads-top.\n/Ads.ashx\n/ads.asp?\n/ads.aspx\n/ads.cfm?\n/ads.css\n/ads.dll/*\n/ads.gif\n/ads.htm\n/ads.js.\n/ads.js/*\n/ads.js?\n/ads.json?\n/ads.jsp\n/ads.pbs\n/ads.php\n/ads.pl?\n/ads.png\n/ads.swf\n/ads.v5.js\n/ads.w3c.\n/ads/125l.\n/ads/125r.\n/ads/160.\n/ads/160/*\n/ads/2.0/*\n/ads/2010/*\n/ads/250x120_\n/ads/3.0/*\n/ads/300.\n/ads/3002.\n/ads/300x120_\n/ads/468.\n/ads/468a.\n/ads/728.\n/ads/728b.\n/ads/?QAPS_\n/ads/a.\n/ads/acctid=\n/ads/ad-\n/ads/ad.\n/ads/ad_\n/Ads/adrp0.\n/ads/ads-$~stylesheet\n/ads/ads.\n/ads/ads/*\n/ads/ads_\n/ads/adv/*\n/ads/afc/*\n/ads/aff-\n/ads/as_header.\n/ads/assets/*\n/ads/b/*\n/ads/banner-\n/ads/banner.\n/ads/banner/*\n/ads/banner01.\n/ads/banner_\n/ads/banners/*\n/ads/beacon.\n/ads/behicon.\n/ads/bilar/*\n/Ads/Biz_\n/ads/blank.\n/ads/bottom.\n/ads/box/*\n/ads/branding/*\n/ads/bt/*\n/ads/btbuckets/*\n/ads/center-\n/ads/center.\n/ads/click_\n/ads/cnvideo/*\n/ads/common/*\n/ads/contextual.\n/ads/contextual_\n/ads/contextuallinks/*\n/ads/create_\n/ads/creatives/*\n/ads/cube-\n/ads/daily.\n/ads/daily_\n/ads/dart.\n/ads/default_\n/ads/design-\n/ads/dfp.\n/ads/dfp/*\n/ads/dhtml/*\n/ads/directory/*\n/ads/display/*\n/ads/displaytrust.\n/ads/empty.\n/ads/exit.\n/ads/fb-\n/ads/flash/*\n/ads/flash_\n/ads/flashbanners/*\n/ads/footer-\n/ads/footer.\n/ads/footer_\n/ads/freewheel/*\n/ads/g/*\n/ads/generatedHTML/*\n/ads/generator/*\n/ads/google1.\n/ads/google2.\n/ads/google_\n/ads/gpt/*\n/ads/gpt_\n/ads/header-\n/ads/header_\n/ads/home/*\n/ads/homepage/*\n/ads/horizontal/*\n/ads/house/*\n/ads/house_\n/ads/html/*\n/ads/htmlparser.\n/ads/iframe\n/ads/im2.\n/ads/image/*\n/ads/images/*\n/ads/imbox-\n/ads/img/*\n/ads/index-\n/ads/index.\n/ads/indexsponsors/*\n/ads/inline.\n/ads/inner_\n/ads/interstitial.\n/ads/interstitial/*\n/ads/js.\n/ads/js/*\n/ads/js_\n/ads/jsbannertext.\n/ads/labels/*\n/ads/layer.\n/ads/leaderboard-\n/ads/leaderboard.\n/ads/leaderboard/*\n/ads/leaderboard?\n/ads/leaderboard_\n/ads/leaderbox.\n/ads/load.\n/ads/main.\n/ads/marketing/*\n/ads/masthead_\n/ads/menu_\n/ads/motherless.\n/ads/mpu/*\n/ads/mpu2?\n/ads/mpu?\n/ads/msn/*\n/ads/mt_\n/ads/navbar/*\n/ads/ninemsn.\n/ads/oas-\n/ads/oas/*\n/ads/oas_\n/ads/original/*\n/ads/oscar/*\n/ads/outbrain?\n/ads/overlay-\n/ads/overlay/*\n/ads/p/*\n/ads/page.\n/ads/panel.\n/ads/payload/*\n/ads/pencil/*\n/ads/player-\n/ads/plugs/*\n/ads/pop.\n/ads/popout.\n/ads/popshow.\n/ads/popup.\n/ads/popup_\n/ads/post-\n/ads/postscribe.\n/ads/preloader/*\n/ads/preroll-\n/ads/preroll/*\n/ads/preroll_\n/ads/promo_\n/ads/proxy-\n/AdS/RAD.\n/ads/rail-\n/ads/rawstory_\n/ads/real_\n/ads/rect_\n/ads/rectangle_\n/ads/request.\n/ads/reskins/*\n/ads/right.\n/ads/right/*\n/ads/ringtone_\n/ads/rotate/*\n/ads/rotate_\n/ads/scriptinject.\n/ads/scripts/*\n/ads/select/*\n/ads/serveIt/*\n/ads/show.\n/ads/show/*\n/ads/side-\n/ads/sidebar-\n/ads/sidedoor/*\n/ads/sitewide_\n/ads/skins/*\n/ads/sky_\n/ads/spacer.\n/ads/sponsor\n/ads/square-\n/ads/square.\n/ads/square2.\n/ads/square3.\n/ads/storysponsors/*\n/ads/sub/*\n/ads/swfobject.\n/ads/takeovers/*\n/ads/third-\n/ads/tile-\n/ads/top-\n/ads/tracker/*\n/ads/triggers/*\n/ads/vertical/*\n/ads/vg/*\n/ads/video/*\n/ads/video_\n/ads/view.\n/ads/views/*\n/ads/vip_\n/ads/web/*\n/ads/webplayer.\n/ads/welcomescreen.\n/ads/widebanner.\n/ads/widget.\n/ads/writecapture.\n/ads/www/*\n/ads/xtcore.\n/ads/yahoo/*\n/ads/zone/*\n/ads0.\n/ads01.\n/ads05.\n/ads09a/*\n/ads1.\n/ads1/*\n/ads10.\n/ads10/*\n/ads100.\n/ads11.\n/ads11/*\n/ads12.\n/ads125.\n/ads125_\n/ads160.\n/ads160x600-\n/ads160x600.\n/ads160x600px.\n/ads18.\n/ads2.\n/ads2/*\n/ads2012/*\n/ads2013/*\n/ads210.\n/ads2_\n/ads2x300new.\n/ads3.\n/ads3/*\n/ads300.\n/ads300adn2.\n/ads300x250.\n/ads300X2502.\n/ads300x250_\n/ads300x250px.\n/ads4.$domain=~ads4.city\n/ads4/*\n/ads468.\n/ads468x60.\n/ads468x60_\n/ads5.\n/ads5/*\n/ads6.\n/ads6/*\n/ads600-\n/ads620x60/*\n/ads7.\n/ads7/*\n/ads728.\n/ads728adn2.\n/ads728x90_\n/ads728x90a.\n/ads790.\n/ads8.\n/ads8/*\n/ads88.\n/ads9.\n/ads9/*\n/ads?apid\n/ads?id=\n/ads?spaceid\n/ads?zone=\n/ads?zone_id=\n/ads_1.\n/ads_160_\n/ads_3.\n/ads_300.\n/ads_300_\n/ads_6.\n/ads_728_\n/ads_ad_\n/ads_banner_\n/ads_banners/*\n/ads_bg.\n/ads_bottom.\n/ads_bottom_\n/ads_box_\n/ads_code.\n/ads_code_\n/ads_codes/*\n/ads_config.\n/ads_controller.\n/ads_display.\n/ads_event.\n/ads_files/*\n/ads_footer.\n/ads_frame.\n/ads_gallery/*\n/ads_global.\n/ads_gnm/*\n/ads_google.\n/ads_ifr.\n/ads_iframe.\n/ads_image/*\n/ads_images/*\n/ads_leaderboard_\n/ads_left_\n/ads_load/*\n/ads_loader.\n/ads_manager.\n/ads_medrec_\n/ads_min_\n/ads_new.\n/ads_new/*\n/ads_openx_\n/ads_patron.\n/ads_php/*\n/ads_premium.\n/ads_pro/*\n/ads_r.\n/ads_reporting/*\n/ads_server_\n/ads_show_\n/ads_sidebar.\n/ads_start.\n/ads_text_\n/ads_top_\n/ads_ui.\n/ads_view.\n/ads_yahoo.\n/adsa468.\n/adsa728.\n/adsadclient31.\n/adsadview.\n/AdsAjaxRefresh.\n/adsales/*\n/adsame.\n/adsample.\n/adsandbox.\n/adsandtps/*\n/adsAPI.\n/adsatt.\n/adsbanner-\n/adsbanner.\n/adsbanner/*\n/adsbannerjs.\n/adsbox.\n/adsby.\n/adsbygoogle.\n/adscale.\n/adscale1.\n/adscale_\n/adscalebigsize.\n/adscalecontentad.\n/adscaleskyscraper.\n/adscloud.\n/adscluster.\n/adscontent.\n/adscontent2.\n/adscript.\n/adscript1.\n/adscript_\n/adscripts/*\n/adscripts1.\n/adscripts2.\n/adscripts3.\n/adscroll.\n/adsdaq_\n/adsdaqbanner_\n/adsdaqbox_\n/adsdaqsky_\n/adsdelivery.\n/adsdm.\n/adsdyn160x160.\n/adsDynLoad/*\n/adsearch.\n/adSearch?\n/adsecondary.\n/adsegmentation.\n/adseller/*\n/adsence.\n/adsenceSearch.\n/adsenceSearchTop.\n/adsEnd.\n/adsense-\n/adsense.\n/adsense/*\n/adsense1.\n/adsense2.\n/adsense23.\n/adsense24.\n/adsense250.\n/adsense3.\n/adsense4.\n/adsense5.\n/adsense?\n/adsense_\n/AdsenseBlockView.\n/adsensegb.\n/adsensegoogle.\n/adsensets.\n/adsensev2.\n/adsenze.\n/adseo.\n/adseo/*\n/adseperator_\n/adser/*\n/adserv.\n/adserv/*\n/adserv1.\n/adserv2.\n/adserv3.\n/adserv_\n/adserve-\n/adserve.\n/adserve/*\n/adserve_\n/adserver-\n/adserver.\n/adserver/*\n/adserver1-\n/adserver1.\n/adserver2.\n/adserver2/*\n/adserver3.\n/adserver7/*\n/adserver8strip.\n/adserver?\n/adserver_\n/adserverdata.\n/adserverpub?\n/adservers-\n/adserversolutions/*\n/adserverstore.\n/adservervastvideovizu.\n/adservice-\n/adservice.\n/adservice/*\n/adservices/*\n/adservice|\n/adserving.\n/adserving/*\n/adserving_\n/AdServlet?\n/adserv|*|adtech;\n/adsession.\n/adsession_\n/adsetup.\n/adsetup_\n/adsfac.\n/adsfetch.\n/adsfile.\n/adsfiles.\n/adsfinal.\n/adsfloat.\n/adsfolder/*\n/adsframe.\n/adsfuse-\n/adsgame.\n/adsGooglePP3.\n/adshandler.\n/adshare.\n/adshare/*\n/adshare3.\n/adsheader.\n/adshow-\n/adshow.\n/adshow/*\n/adshow?\n/adshow_\n/adshtml2/*\n/adsi-j.\n/adsico.\n/adsico2.\n/adsico3.\n/adsicon/*\n/adsidebar.\n/adsidebarrect.\n/adsiframe.\n/adsiframe/*\n/adsign.\n/adsimage/*\n/adsimages/*\n/adsImg/*\n/adsinclude.\n/adsindie/*\n/adsinsert.\n/adsite/*\n/adsites/*\n/adsjs.\n/adskin/*\n/adsky.\n/adskyright.\n/adskyscraper.\n/adslide.\n/adslides.\n/adsline.\n/adslots.\n/adslug-\n/adslug_\n/adslugs/*\n/adsm2.\n/adsmanagement/*\n/adsmanager/*\n/adsManagerV2.\n/adsmedia_\n/adsmm.dll/*\n/adsmodules/*\n/adsnew.\n/adsnew/*\n/adsnip.\n/adsnippet.\n/adsniptrack.\n/adsonar.\n/adsopenx/*\n/adsource_\n/adsoverlay_\n/adsp/*\n/adspace.\n/adspace/*\n/adspace1.\n/AdSpace160x60.\n/adspace2.\n/adspace?\n/adspacer.\n/adspan.\n/adspeeler/*\n/adsplay.\n/adsponsor.\n/adspot.\n/adspot/*\n/adspot_\n/adspots/*\n/adspro/*\n/AdsPublisher.\n/adsq/*\n/adsquare.\n/adsquareleft.\n/adsrc.\n/adsrc300.\n/adsremote.\n/adsreporting/*\n/adsresources/*\n/adsrich.\n/adsright.\n/adsrot.\n/adsrot2.\n/adsrotate.\n/adsrotate1left.\n/adsrotate1right.\n/adsrotate2left.\n/adsrotateheader.\n/AdsRotateNEW1right.\n/AdsRotateNEW2right.\n/AdsRotateNEWHeader.\n/adsrotator.\n/adsrule.\n/adsrules/*\n/adsrv.\n/adsrv/*\n/adsrv2/*\n/adss.asp\n/adsscript.\n/adsserv.\n/adsserver.\n/AdsShow.\n/adsshow/*\n/adssp.\n/adssrv.\n/adstacodaeu.\n/adstakeover.\n/adstatic.\n/adstatic/*\n/adstemplate/*\n/adstitle.\n/adstop.\n/adstop728.\n/adstop_\n/adstorage.\n/adstracking.\n/adstract/*\n/adStrategies/*\n/adstream.\n/adstream_\n/adstreamjscontroller.\n/adStrip.\n/adstrk.\n/adstrm/*\n/adstub.\n/adstube/*\n/adstubs/*\n/adstx.\n/adstyle.\n/adsummos.\n/adsummos2.\n/adsup.\n/adsvariables.\n/adsvo.\n/adsvr.\n/adswap-\n/adswap.\n/adswap/*\n/adswide.\n/adswidejs.\n/adsword.\n/adswrapper.\n/adswrapper3.\n/adswrapperintl.\n/adsx/*\n/adsx728.\n/adsx_728.\n/adsxml/*\n/adsync/*\n/adsyndication.\n/adsyndication/*\n/adsys.\n/adsys/*\n/adsystem.\n/adsystem/*\n/ads~adsize~\n/adtable_\n/adtadd1.\n/adtag.\n/adtag/*\n/adtag?\n/adtag_\n/adtagcms.\n/adtaggingsubsec.\n/adtago.\n/adTagRequest.\n/adtags.\n/adtags/*\n/adtagtc.\n/adtagtranslator.\n/adtaily_\n/adtaobao.\n/adtech-\n/adtech.\n/adtech/*\n/adtech;\n/adtech_\n/adtechglobalsettings.js\n/adtechHeader.\n/adtechscript.\n/adtest.\n/adtest/*\n/adtext.\n/adtext2.\n/adtext4.\n/adtext_\n/adtextmpu2.\n/adtimage.\n/adtitle.\n/adtology.\n/adtomo/*\n/adtonomy.\n/adtool/*\n/adtools/*\n/adtools2.\n/adtooltip/*\n/adtop.\n/adtop160.\n/adtop300.\n/adtop728.\n/adtopcenter.\n/adtopleft.\n/adtopmidsky.\n/adtopright.\n/adtopsky.\n/adtrack.\n/adtrack/*\n/adtracker.\n/adtracker/*\n/adtracker?\n/adtracking.\n/adtracking/*\n/adtraff.\n/adttext-\n/adttext.\n/adtvideo.\n/adtxt.\n/adtype.\n/adtype=\n/adultadworldpop_\n/adultimate.\n/adunit.\n/adunit/*\n/adunits.\n/adunits/*\n/adunits?\n/adunittop|\n/adunix.\n/adutil.\n/adutils.\n/aduxads.\n/aduxads/*\n/adv-1.\n/adv-2.\n/adv-banner.\n/adv-banners/*\n/adv-div-\n/adv-expand/*\n/adv-ext-\n/adv-f.\n/adv-scroll.\n/adv-socialbar-\n/adv.asp\n/adv.css?\n/adv.html\n/adv.jsp\n/adv.php\n/adv.png\n/adv/adriver\n/adv/ads/*\n/adv/adv.\n/adv/adv_\n/adv/background/*\n/adv/banner/*\n/adv/banner1/*\n/adv/bottomBanners.\n/adv/box-\n/adv/kelkoo/*\n/adv/kelkoo_\n/adv/lrec_\n/adv/managers/*\n/adv/mjx.\n/adv/mobile/*\n/adv/preroll_\n/adv/rdb.\n/adv/script1.\n/adv/script2.\n/adv/search.\n/adv/skin.\n/adv/skin_\n/adv/sponsor/*\n/adv/sprintf-\n/adv/topBanners.\n/adv02.\n/adv03.\n/adv1.\n/Adv150.\n/adv2.\n/adv3.\n/adv4.\n/Adv468.\n/adv5.\n/adv6.\n/adv8.\n/adv_2.\n/adv_468.\n/adv_background/*\n/adv_banner_\n/adv_box_\n/adv_burt_\n/adv_flash.\n/adv_frame/*\n/adv_horiz.\n/adv_image/*\n/adv_left_\n/adv_library3.\n/adv_link.\n/adv_manager_\n/adv_player_\n/adv_script_\n/adv_server.\n/adv_top.\n/adv_vert.\n/adv_vertical.\n/advalue/*\n/advalue_\n/advaluewriter.\n/advault.\n/advbanner/*\n/advcontents.\n/advcounter.\n/advdoc/*\n/advengine.\n/adver-left.\n/adver.\n/adver_hor.\n/adverfisement.\n/adverfisement2.\n/adverserve.\n/advert-\n/advert.\n/advert/*\n/advert01.\n/advert1.\n/advert1/*\n/advert2.\n/advert3.\n/advert31.\n/advert32.\n/advert33.\n/advert34.\n/advert35.\n/advert36.\n/advert37.\n/advert4.\n/advert5.\n/advert6.\n/advert?\n/advert_\n/advertbanner.\n/advertbanner2.\n/advertbox.\n/advertguruonline1.\n/adverth.\n/adverthorisontalfullwidth.\n/advertical.\n/advertise-\n/advertise.$domain=~advertise.bingads.microsoft.com\n/advertise/*\n/advertise125x125.\n/advertise_\n/advertisehere.\n/advertisement-\n/advertisement.\n/advertisement/*\n/advertisement1.\n/advertisement160.\n/advertisement2.\n/advertisement3.\n/advertisement_\n/advertisementheader.\n/advertisementmapping.\n/advertisementrotation.\n/advertisements-\n/advertisements.\n/advertisements/*\n/advertisements2.\n/advertisements_\n/AdvertisementShare.\n/advertisementview/*\n/advertiser.$domain=~advertiser.growmobile.com\n/advertiser/*$domain=~bingads.microsoft.com|~mobileapptracking.com|~trialpay.com\n/advertisers.$image,script,subdocument\n/advertisers/*\n/advertiserwidget.\n/advertises/*\n/advertisewithus_\n/advertising-$domain=~outbrain.com\n/advertising.\n/advertising/*$~xmlhttprequest,domain=~temple.edu\n/advertising02.\n/advertising2.\n/advertising300x250.\n/advertising?\n/advertising_\n/advertisingbanner.\n/advertisingbanner/*\n/advertisingbanner1.\n/advertisingbanner_\n/advertisingcontent/*\n/AdvertisingIsPresent6?\n/advertisinglinks_\n/advertisingmanual.\n/advertisingmodule.\n/advertisings.\n/advertisingwidgets/*\n/advertisment-\n/advertisment.\n/advertisment/*\n/advertisment1-\n/advertisment_\n/advertisments/*\n/advertize_\n/advertlayer.\n/advertmedia/*\n/advertmsig.\n/advertorial/*\n/advertorial_\n/advertorials/*\n/advertphp/*\n/advertpixelmedia1.\n/advertpro/*\n/advertrail.\n/advertright.\n/adverts.\n/adverts/*\n/adverts_\n/advertserve.\n/advertsky.\n/advertsquare.\n/advertstub.\n/advertverticallong.\n/advertwebapp.\n/advf1.\n/advfiles/*\n/advhd.\n/advice-ads.\n/adview.\n/adview/*\n/adview?\n/adview_\n/adviewas3.\n/adviewed.\n/adviewer.\n/adviframe/*\n/advinfo.\n/advision.\n/adVisit.\n/advlink300.\n/advloader.\n/advolatility.\n/advpartnerinit.\n/advPop.\n/advpreload.\n/advris/*\n/advrotator.\n/advs.ads.\n/advs/*\n/advscript.\n/advscripts/*\n/advshow.\n/advt.\n/advt/*\n/advt2.\n/advtemplate/*\n/advtemplate_\n/advweb.\n/advzones/*\n/adw.shtml\n/adw2.shtml\n/adweb.\n/adweb2.\n/adwidgets/*\n/adwise/*\n/adWiseShopPlus1.\n/adwiz.\n/adwiz/*\n/adwizard.\n/adwizard_\n/adwolf.\n/adwords.$domain=~ppc.ee\n/adwords/*\n/adwordstracking.js\n/adWorking/*\n/adworks.$domain=~adworks.co.il\n/adworks/*\n/adworldmedia/*\n/adworx.\n/adworx_\n/adwrapper/*\n/adwrapperiframe.\n/adwriter2.\n/adx.\n/adx/ads?\n/adx160.\n/adx2.\n/adx_exo_\n/adx_flash.\n/adx_iframe_\n/adxsite.\n/adxx.php?\n/adyard.\n/adyard300.\n/adyea.\n/adzbotm.\n/adzerk2_\n/adzone.\n/adzone/*\n/adzone4.\n/adzone_\n/AdZoneAdXp.\n/adzonebelowplayer.\n/adzonebottom.\n/adzonecenteradhomepage.\n/adzoneleft.\n/adzonelegend.\n/adzoneplayerright.\n/adzoneright.\n/adzones/*\n/adzonesidead.\n/adzonetop.\n/adztop.\n/afc-match?q=\n/afcads.\n/afcsearchads.\n/afdsafads/*\n/aff-exchange/*\n/aff.htm\n/aff/ads_\n/aff/images/*\n/aff_ad?\n/aff_banners/*\n/aff_frame.\n/affad?\n/affads/*\n/affbanner/*\n/affbanners/*\n/affbeat/banners/*\n/affclick/*\n/affilatebanner.\n/affiliate-content/*\n/affiliate/ad/*\n/affiliate/ads/*\n/affiliate/banner/*\n/affiliate/banners/*\n/affiliate/promo-\n/affiliate/promo/*\n/affiliate/script.php?\n/affiliate/small_banner/*\n/affiliate_banner/*\n/affiliate_banners/*\n/affiliate_base/banners/*\n/affiliate_resources/*\n/affiliate_show_banner.\n/affiliate_show_iframe.\n/affiliateads/*\n/affiliateadvertisement.\n/affiliatebanner/*\n/affiliatebanners/*\n/affiliateimages/*\n/affiliates.*.aspx?\n/affiliates/*/show_banner.\n/affiliates/ban\n/affiliates/contextual.\n/affiliatetags/*\n/affiliatewiz/*\n/affiliation/*\n/affiliationcash.\n/affilinet/*\n/affilitebanners/*\n/affimages/*\n/affimg/*\n/affliate-banners/*\n/affpic/*\n/afr.php?\n/afr?auid=\n/ahmestatic/ads/*\n/ajax-ad/*\n/ajax-advert-\n/ajax-advert.\n/ajax/ad/*\n/ajax/ads/*\n/ajaxAd?\n/ajaxads.\n/ajrotator/*\n/ajs.php?\n/ajs?auid=\n/ak/ads/*\n/all/ad/*\n/all_ads/*\n/alternet.ad?\n/alwebad_\n/am/ads.\n/amazon/iframeproxy-\n/amazon/widget/*\n/amzn_omakase.\n/anchorad.\n/annonse.\n/annonse/*\n/annonser.\n/annonser/*\n/announce/adv/*\n/anyad.js\n/api.ad.\n/api/ad/*\n/api/ads/*\n/apopwin.\n/app.ads-\n/app.ads.\n/app/ads.\n/app/ads/*\n/aptads/*\n/Article-Ad-\n/article_ad.\n/articleSponsorDeriv_\n/artimediatargetads.\n/as3overstreamplatformadapter.\n/as_u/ads/*\n/aseadnshow.\n/aspbanner_inc.asp?\n/asset/ad/*\n/asset/adv/*\n/assets/ad-\n/assets/ad/*\n/assets/ads-\n/assets/ads/*\n/assets/ads_\n/assets/adv/*\n/assets/doubleclick/*\n/ast/ads/*\n/athena/tag/?\n/atnads/*\n/AttractiveAds/*\n/AttractiveAds_\n/AttractiveAdsCube.\n/au2m8_preloader/*\n/audio-ads/*\n/audioads/*\n/auditudeadunit.\n/auditudebanners.\n/austria_ad.\n/auto_ad_\n/awe2.js\n/awempire.\n/awepop.\n/b.ads.\n/back-ad.\n/background_ad_\n/BackgroundAd40.\n/backgroundAdvertising.\n/backlinxxx/js/*\n/badge_ad_\n/ban.php?\n/ban160.php\n/ban300.html\n/ban300.php\n/ban728.html\n/ban728.php\n/ban728x90.\n/ban_ad.\n/ban_m.php?\n/banimpress.\n/banman.asp?\n/banman/*\n/banmanpro/*\n/Banner-300x250.\n/banner-ad-\n/banner-ad.\n/banner-ad/*\n/banner-ad_\n/banner-ads/*\n/banner.asp?$third-party\n/banner.ca?\n/banner.cgi?\n/banner.gif?\n/banner.htm?\n/banner.php\n/banner.ws?\n/banner/468\n/banner/700\n/banner/ad.\n/banner/ad/*\n/banner/ad_\n/banner/adv/*\n/banner/adv_\n/banner/affiliate/*\n/banner/rtads/*\n/banner/sponsor_\n/banner/virtuagirl\n/banner160x600-\n/banner20468x60.\n/banner460x80.\n/banner468.\n/banner468_\n/banner468a.\n/banner468x60.\n/banner468x80.\n/banner728x90_\n/banner_125x\n/banner_468.\n/banner_468x\n/banner_ad.\n/banner_ad_\n/banner_ads.\n/banner_ads/*\n/banner_ads_\n/banner_adv/*\n/banner_control.php?\n/banner_db.php?\n/banner_file.php?\n/banner_iframe_\n/banner_image.php?\n/banner_js.*?\n/banner_OAS.js\n/banner_skyscraper.\n/banner_view.\n/banner_zanox/*\n/banner_zedo/*\n/bannerad.\n/bannerad/*\n/bannerad1-\n/bannerad2-\n/bannerad3.\n/bannerad6.\n/bannerad_\n/bannerads-\n/bannerads.\n/bannerads/*\n/banneradsajax.\n/banneradsgenerator.\n/banneradverts/*\n/banneradviva.\n/bannercode.php\n/bannerconduit.\n/bannerexchange/*\n/bannerfarm.\n/bannerfarm/*\n/bannerfile/ad_\n/bannerframe.*?\n/bannerframeopenads.\n/bannerframeopenads_\n/bannerinc.\n/bannerjs.php?\n/bannermaker/*\n/bannermanager/*\n/bannermvt.\n/bannerpump.\n/bannerrotate.\n/bannerrotater/*\n/bannerrotation.\n/bannerrotation/*\n/banners.*&iframe=\n/banners.cgi?\n/banners.php?id\n/banners/160\n/banners/300\n/banners/460\n/banners/468\n/banners/728\n/banners/ad/*\n/banners/ad10.\n/banners/ad11.\n/banners/ad_\n/banners/ads-\n/banners/ads.\n/banners/ads/*\n/banners/adv/*\n/banners/adv_\n/banners/aff.\n/banners/affil/*\n/banners/affiliate/*\n/banners/ffadult/*\n/banners/googlebanner\n/banners/promo/*\n/banners_rotation.\n/bannersAds_\n/bannerscript/*\n/bannerserve/*\n/bannerserver/*\n/bannerserver3/*\n/bannerserver3|\n/bannerserver?\n/bannersyndication.\n/bannerview.*?\n/bannerwerbung/*\n/bannery/*?banner=\n/bansrc/*\n/bar-ad.\n/baseAd.\n/baselinead.\n/basic/ad/*\n/bbad.\n/bbad1.\n/bbad10.\n/bbad2.\n/bbad3.\n/bbad4.\n/bbad5.\n/bbad6.\n/bbad7.\n/bbad8.\n/bbad9.\n/bckgrnd_ad.\n/bdcustomadsense-\n/beacon/ad/*\n/behaviorads/*\n/beta-ad.\n/betrad.js\n/bftv/ads/*\n/bg-advert-\n/bg/ads/*\n/bg_ads_\n/bgads/*\n/bi_affiliate.js\n/bigad.\n/bigad_\n/bigads/*\n/bigboxad.\n/bigtopl.swf\n/bin/ads/*\n/binary/ad/*\n/bizad.\n/bkgrndads/*\n/blockad_\n/blocks/ads/*\n/blog-ad-\n/blog/ads/*\n/blog_ad?\n/blog_ads/*\n/blogad.\n/blogad02.\n/blogad_\n/blogads-\n/blogads.\n/blogads/*\n/blogads2_\n/blogads3/*\n/blogads_\n/blogadsbg.\n/bloggerex.\n/blogoas-\n/bmndoubleclickad.\n/bnr.php?\n/bnr_show.php?id=$script\n/bnrad/*\n/bnrimg.\n/bnrsrv.\n/bodyads/*\n/bookad/*\n/bookads.\n/bookads2.\n/boomad.\n/bottom-ad-\n/bottom-ads.\n/bottom-advert-\n/bottom_ad.\n/bottom_ads.\n/bottom_adv.\n/bottom_adv_\n/bottomad.\n/bottomad/*\n/bottomads.\n/bottomsidead/*\n/box_ad_\n/box_ads_\n/boxad.\n/boxad1.\n/boxad2.\n/boxad3.\n/boxad_\n/breakad_\n/brightcovead.\n/bserver/*\n/btbuckets/btb.js\n/btmads.\n/btmadsx.\n/btn_ad_\n/bucketads.\n/buddyw_ad.\n/burt/adv_\n/butler.php?type=\n/button_ads/*\n/buttonad/*\n/buttonads.\n/buttonads/*\n/buyad.\n/buyclicks/*\n/buyer/dyad/*\n/buysellads-\n/buysellads.\n/buzz/ads/*\n/bytemark_ad.\n/cache/ads_\n/cads-min.js\n/calendar-ads/*\n/call/pubif/*\n/call/pubj/*\n/call_ads/*\n/callads5.\n/callAdserver?\n/camaoadsense.\n/camaoAdsenseHomepage.\n/camfuzeads/*\n/campus/ads/*\n/carbonads-\n/carbonads/*\n/carsadtaggenerator.js\n/cashad.\n/cashad2.\n/category-sponsorship/*\n/catfishads/*\n/cb.php?sub$script,third-party\n/cci-ads-\n/cdn-cgi/pe/bag?r[]=*cpalead.com\n/cdn.ads.\n/centerads.\n/central/ads/*\n/ceoads/*\n/cgi-bin/ad/*\n/cgi-bin/ads.\n/cgi-bin/ads/*\n/cgi-bin/ads_\n/cgi-exe/ad.\n/cgi/ad_\n/channelblockads.\n/checkm8footer_\n/checkm8header_\n/chinaadclient.\n/chitika-ad?\n/chrome-ad.\n/ciaad.\n/circads.\n/cjadsprite.\n/ck.php?nids\n/clarityray.js\n/ClassAds/*\n/classifieds/banners/*\n/click/ads_\n/clickboothad.\n/clicksor.\n/clickunder.\n/clients/ads/*\n/clkads.\n/cm/ads/*\n/cms/ads/*\n/cms/js/ad_\n/cn-advert.\n/cnads.js\n/cnnslads.\n/cnxad-\n/codaadconfig.\n/coldseal_ad.\n/collisionadmarker.\n/colorscheme/ads/*\n/columnadcounter.\n/columnads/*\n/com/ads/*\n/combo?darla/*\n/comment-ad-\n/comment-ad.\n/commercial_horizontal.\n/commercial_top.\n/common-ads/*\n/common/ad.\n/common/ad/*\n/common/ad_\n/common/ads/*\n/common/adv_\n/common/dart_wrapper_\n/common_ad.\n/commons/ad/*\n/commspace_ad.\n/companion_ad.\n/companion_ads.\n/companionAdFunc.\n/compban.html?\n/components/ads/*\n/conad.\n/conad_\n/configspace/ads/*\n/cont-adv.\n/contads.\n/contaxe_\n/content-ads.\n/content/ad/*\n/content/ad_\n/content/ads/*\n/content/adv/*\n/content_ad.\n/content_ad_\n/contentAd.\n/contentad/*\n/contentad_\n/contentAdServlet?\n/contentadvert1.\n/contentadxxl.\n/contentad|\n/context_ad/*\n/context_ads.\n/contextad.\n/contextads.\n/contextualad.\n/contpop.js|\n/contribute_ad.\n/controller/ads/*\n/controllerimg/adv/*\n/convertjsontoad.\n/core-ads-\n/core/ad/*\n/core/ads/*\n/coread/*\n/corner-ad.\n/corner_ads/*\n/cornerbig.swf\n/cornersmall.swf\n/country_ad.\n/coxads/*\n/cpm160.\n/cpm728.\n/cpm_ad.\n/cpmbanner.\n/cpmcampaigns/*\n/cpmrect.\n/cpx-ad.\n/cpx_ads.\n/cpxads.\n/cramitin/ads_\n/criteo.\n/Criteo/*\n/criteo_\n/criteoRTA.\n/crossoverad-\n/csp/ads?\n/css/ad.\n/css/ads.\n/css/adsense\n/css/adv.\n/cssjs/ads/*\n/ctamlive160x160.\n/cube_ads/*\n/cubead.\n/cubeads/*\n/cubeads_\n/curlad.\n/curveball/ads/*\n/custads/*\n/custom/ads\n/custom/doubleclick/*\n/custom11x5ad.\n/custom_ads/*\n/customad.\n/customadmode.\n/customads/*\n/customadsense.\n/customcontrols/ads/*\n/customerad_\n/cutead.\n/cvs/ads/*\n/cwggoogleadshow.\n/d/ads/*\n/daily/ads/*\n/dart_ads.\n/dart_ads/*\n/dart_enhancements/*\n/dartad/*\n/dartadengine.\n/dartadengine2.\n/dartads.\n/dartcall.\n/dartfunctions.\n/data/ads/*\n/dateads.\n/dblclick.\n/dblclickad.\n/dclk/dfp/*\n/dclk_ads.\n/dclk_ads_\n/dcloadads/*\n/ddlads/*\n/de/ads/*\n/default-adv/*\n/default/ads/*\n/default_ads/*\n/default_adv.\n/default_oas.\n/defaultad?\n/defaults_ads/*\n/defer_ads.\n/deferads.\n/defersds.\n/delayedad.\n/deliver.jphp?\n/deliver.nmi?\n/deliverad/*\n/deliverads.\n/deliverjs.nmi?\n/deliversd/*\n/deliversds.\n/delivery.ads.\n/delivery.php?pool_id=\n/delivery.php?rnd=\n/delivery/*?advplaces=\n/delivery/afr.\n/delivery/ag.\n/delivery/al.php\n/delivery/apu.php\n/delivery/avw.\n/delivery/fc.\n/delivery/fl.\n/delivery/lg.\n/delivery/spc.\n/delivery/vbafr.php\n/delivery_ads/*\n/demo/ads/*\n/DemoAd.\n/descpopup.js\n/design/ads/*\n/develop/ads_\n/devicead/*\n/dfp/dc.js\n/dfpads.\n/dfpsds.\n/dfpsearchads.\n/dictionary/ads/*\n/dif/?cid\n/dig_ad.\n/digest/ads.\n/digg_ads.\n/digg_ads_\n/dinclinx.com/*\n/direct_ads.\n/directads.\n/directadvert.\n/directrev.\n/discuss_ad/*\n/DispAd_\n/display-ad/*\n/display-ads-\n/display-ads/*\n/display.ad.\n/display?ad_\n/display_ad\n/displayad.\n/displayad/*\n/displayad?\n/displayadbanner_\n/displayadiframe.\n/displayadleader.\n/displayads.\n/displayads/*\n/displayads1.\n/displayads2.\n/displayads3.\n/displayadsiframe.\n/div-ads.\n/divad/*\n/dlfeatads.\n/dmn-advert.\n/dne_ad.\n/dns_ad/*\n/dnsads.\n/domainads/*\n/doodads/*\n/door/ads/*\n/doors/ads/*\n/doubleclick.aspx\n/doubleclick.js\n/doubleclick.php\n/doubleclick.swf\n/doubleclick/iframe.\n/doubleclick_ads.\n/doubleclick_ads/*\n/doubleclickad.\n/doubleclickads?\n/doubleclickbannerad?\n/doubleclickcontainer.\n/doubleclickinstreamad.\n/doubleclickloader.\n/doubleclickplugin.\n/doubleclicktag.\n/doublepimp2.js\n/downads.\n/download/ad.\n/download/ad/*\n/download/ads\n/drawad.\n/driveragentad1.\n/driveragentad2.\n/drivingrevenue/*\n/droelf.kit/a/*\n/dropdown_ad.\n/dsg/bnn/*\n/dspads.\n/dtiadvert125x125.\n/dtim300x250.$script\n/dtmads/*\n/dxd/ads/*\n/dyn_banner.\n/dyn_banners_\n/dynamic-ad-\n/dynamic/ads/*\n/dynamic_ads/*\n/DynamicAd/*\n/dynamicad?\n/dynamiccsad?\n/dynamicvideoad?\n/dynanews/ad-\n/dynbanner/flash/*\n/e-vertising/*\n/eas-fif.htm\n/eas?*^easformat=\n/eas?camp=*;cre=\n/eas?cu=*;cre=\n/eas?cu=*;ord=\n/eas_fif.\n/eas_tag.1.0.js\n/easyads.\n/easyads/*\n/easyadstrack.\n/easyazon-\n/ebay_ads/*\n/ebayad.\n/eco_ads/*\n/ecom/magnet.\n/editable/ads/*\n/emailads/*\n/embed_ad.\n/emediatead.\n/EmreAds.\n/ems/ads.\n/en/ads/*\n/eng/ads/*\n/eporner-banner-\n/ept_in.php?\n/ero-1.\n/ero-ads-\n/ero-ads_\n/ero-advertising.\n/ero.htm\n/ero_hosted_\n/ero_line_\n/eroad.php\n/eroad2.\n/eroads.\n/eroadvertising.\n/eroadvertorial2.\n/eroadvertorial3.\n/erobanner.\n/eroex.\n/eros.htm\n/eshopoffer.\n/esi/ads/*\n/etology.$domain=~etology.com\n/euads/*\n/event.ng/*\n/excellence/ads/*\n/exchange_banner_\n/exit_popup\n/exitpop.\n/exitpopunder.\n/exitpopunder_\n/exitpopup.\n/exitsplash.\n/exo120x60.\n/exobanner.\n/exoclick.\n/exoclickright.\n/exoclickright1.\n/exoclickright2.\n/exoclickright3.\n/expandable_ad.php\n/expandable_ad?\n/expandingads.\n/expandy-ads.\n/expop.js\n/exports/tour/*$third-party\n/exports/tour_20/*\n/ext/ads/*\n/ext_ads.\n/extadv/*\n/extendedadvert.\n/external/ad.\n/external/ad/*\n/external/ads/*\n/external_ads.\n/externalad.\n/ExternalAdNetworkViewlogLogServlet?\n/externalads/*\n/externalhtmladrenderer.\n/eyewondermanagement.\n/eyewondermanagement28.\n/facebookaff/*\n/facebookaff2/*\n/facebooksex.\n/fan-ads.$script\n/fastclick160.\n/fastclick728.\n/fatads.\n/fbads/*\n/fc_ads.\n/fea_ads.\n/featuredadshome.\n/feedads.\n/file/ad.\n/files/ad-\n/files/ad/*\n/files/ads-\n/files/ads/*\n/filter.php?pro$script\n/fimserve.\n/finads.\n/first-ad_\n/flag_ads.\n/flash-ads.\n/flash-ads/*\n/flash/ad/*\n/flash/ad_\n/flash/ads/*\n/flash/advertis\n/flash_ads.\n/flashad.\n/flashad3.\n/flashads.\n/flashads/*\n/flashpeelads/*\n/flatad.\n/flesh_banner\n/fleshlight.\n/fleshlightcash_\n/fliionosadcapture-\n/flirt4free.\n/float-ads/*\n/float_ad.\n/floatad_\n/floatads.\n/floatadv.\n/floater_ad.\n/floatingad.\n/FloatingAd_\n/floatingads.\n/floaty_rotator\n/flv-ad-\n/flvad_\n/flvads/*\n/flyad/*\n/flyads/*\n/flyers/ads/*\n/fn_ads.\n/footad-\n/footad.\n/footer-ad-\n/footer-ad.\n/footer-ads/*\n/footer_ad.\n/footer_ad_\n/footer_ads.\n/footerad.\n/footerad?\n/footerads.\n/footerads/*\n/footertextads.\n/forads.\n/forum/ads/*\n/forums/ad/*\n/frame_ads_\n/framead-\n/framead.\n/framead/*\n/framead_\n/frameads.\n/frameads1.\n/frameads_\n/frameadsz.\n/freead.\n/freead2.\n/frequencyads.\n/friendfinder_\n/frnads.\n/frontend/ads/*\n/frontpagead/*\n/ftp/adv/*\n/full/ads/*\n/fullad.\n/fulladbazee.\n/fuseads/*\n/fwadmanager.\n/gadgets/ad/*\n/gads.html\n/gads.js\n/gafc.js\n/gafsads?\n/gafv_adapter.\n/galleryad.\n/gam.html?\n/gam_ad.\n/gam_ad_\n/gam_ads.\n/gamads/*\n/game-ads.\n/gamead/*\n/gameadsync.\n/gamersad.\n/GAN_Ads/*\n/gannett/ads/*\n/gate-ad-\n/gatewayAds.\n/gazette/ads/*\n/geitonpop.\n/gen_ads_\n/genads/*\n/general-ad-\n/general/ads\n/generate_ad.\n/generate_ads.\n/generateadtag.\n/generateplayerads.\n/genericrichmediabannerad/*\n/geo-ads_\n/geo/ads.\n/geo_banner.htm?\n/geoad/*\n/geobox.html\n/GeoDynBanner.php?wmid=\n/ges_ads/*\n/get-ad.\n/get-advert-\n/get.ad?\n/get/ad.\n/get/ad/*\n/get/ad?\n/get_ad_\n/get_ads.\n/get_ads/*\n/get_banner.asp?\n/getad.\n/getad?\n/getadcontent.\n/getadds.\n/GetAdForCallBack?\n/getadframe.\n/getads-\n/getads.\n/getads/*\n/getads?\n/getadserver.\n/getadsettingsjs?\n/getads|\n/getadvertimageservlet?\n/getAdvertisement^\n/getadvertiserimage.\n/getadverts?\n/GetADVOverlay.\n/getarticleadvertimageservlet?\n/getban.php?\n/getbanner.cfm?\n/getbanner.php?\n/getdigitalad/*\n/getfeaturedadsforshow.\n/gethalfpagead.\n/getinlineads/*\n/getJsonAds?\n/getmarketplaceads.\n/getmdhlayer.\n/getmdhlink.\n/getmyad/*\n/getrcmd.js?\n/getsad.php?\n/getsponslinks.\n/getsponslinksauto.\n/getTextAD.\n/GetVASTAd?\n/getvdopiaads.\n/getvideoad.\n/getwebsitead/*\n/gexternalad.\n/gfx/ad/*\n/gfx/ads/*\n/ggadsense.\n/gifs/ads/*\n/glam160.\n/glam300.\n/glam728.\n/glam_ads.\n/global-ads_\n/global/ad/*\n/global/ads.\n/global/ads/*\n/globalad.\n/globaladprostyles.\n/globalbannerad.\n/googad300by600.\n/google-ad-\n/google-ad?\n/google-ads.\n/google-ads/*\n/google-adsense-\n/google-adsense.\n/google-adverts-\n/google-adwords\n/google-afc-\n/google-afc.\n/google/ad?\n/google/adv.\n/google160.\n/google728.\n/google_ad.\n/google_ad_\n/google_ads.\n/google_ads/*\n/google_ads_\n/google_adv/*\n/google_afc.\n/google_afc_\n/google_afs.\n/google_afs_widget/*\n/google_caf.js?\n/google_lander2.js\n/google_radlinks_\n/googlead-\n/googlead.\n/googlead1.\n/googlead160.\n/GoogleAd300.\n/googlead336x280.\n/googlead_\n/GoogleAdBg.\n/googleadcode.\n/googleaddfooter.\n/googleaddisplayframe.\n/googleadhp.\n/googleadhpbot.\n/googleadhtml/*\n/googleadiframe_\n/googleadright.\n/googleads-\n/googleads.\n/googleads/*\n/googleads1.\n/googleads2.\n/googleads3widetext.\n/googleads_\n/googleadsafc_\n/googleadsafs_\n/googleAdScripts.\n/googleadsense.\n/googleAdTaggingSubSec.\n/googleadunit?\n/googleafc.\n/googleafs.\n/googleafvadrenderer.\n/googlecontextualads.\n/googleheadad.\n/googleleader.\n/googleleads.\n/googlempu.\n/gpt_ads-\n/graphics/ad_\n/graphics/ads/*\n/grid-ad.\n/groupon/ads/*\n/gt6skyadtop.\n/guardianleader.\n/guardrailad_\n/gujAd.\n/hads-\n/Handlers/Ads.\n/hcm_ads/*\n/hdadvertisment-\n/header-ad.\n/header_ad_\n/header_ads_\n/headerad.\n/headeradd2.\n/headerads.\n/headerads1.\n/headerAdvertismentTab.\n/headermktgpromoads.\n/headvert.\n/hiadone_\n/hikaku/banner/*\n/hitbar_ad_\n/holl_ad.\n/home/_ads\n/home/ad_\n/home/ads-\n/home/ads/*\n/home/ads_\n/home/sponsor_\n/home30/ad.\n/home_adv.\n/homeoutside/ads/*\n/homepage/ads/*\n/homepage_ad_\n/homepage_ads/*$domain=~swedishbeauty.com\n/homepageadvertright.\n/homeslideadtop/*\n/HomeStaticAds/*\n/horizontal_advert_\n/horizontalAd.\n/hostedads.\n/hostedbannerads.\n/hostgator-ad.\n/hosting/ads/*\n/hostkey-ad.\n/house-ad.\n/house-ad/*\n/house-ads/*\n/house_ad-\n/house_ad_\n/house_ads/*\n/housead.\n/housead/*\n/housead_\n/houseads.\n/houseads/*\n/houseads?\n/hoverad.\n/hpcwire/ads/*\n/html.ng/*\n/html/ad.\n/html/ad/*\n/html/ads/*\n/html/ads_\n/html/sponsors/*\n/htmlads/*\n/httpads/*\n/hubxt.*/js/eht.js?\n/hubxt.*/js/ht.js\n/i/ads/*\n/i_ads.\n/ia/ads/*\n/iabadvertisingplugin.swf\n/IBNjspopunder.\n/icon_ad.\n/icon_ads_\n/icon_advertising_\n/idevaffiliate/*\n/ifolder-ads.\n/iframe-ad.\n/iframe-ads/*\n/iframe-mgid-\n/iframe.ad/*\n/iframe/ad/*\n/iframe/ad_\n/iframe/ads/*\n/iframe_ad.\n/iframe_ad?\n/iframe_ad_\n/iframe_ads/*\n/iframe_ads_\n/iframe_chitika_\n/iframe_sponsor_\n/iframead.\n/iframead/*\n/iframead_\n/iframeadcontent.\n/iframeads.\n/iframeads/*\n/iframeadsense.\n/iframeadsensewrapper.\n/iframedartad.\n/iframes/ad/*\n/ifrm_ads/*\n/ignite.partnerembed.js\n/ignitecampaigns.com/*\n/ilivid-ad-\n/im-ad/im-rotator.\n/im-ad/im-rotator2.\n/im-popup/*\n/im.cams.\n/ima/ads_\n/imaads.\n/imads.js\n/image/ad/*\n/image/ads/*\n/image/ads_\n/image/adv/*\n/image/affiliate/*\n/image_ads/*\n/imageads/*\n/imagecache_ads/*\n/images-ad/*\n/images-v2/ad_\n/images.ads.\n/images.adv/*\n/images/ad-\n/images/ad.$domain=~ngohq.com\n/images/ad/*\n/images/ad2/*\n/images/adds/*\n/images/ads-\n/images/ads.\n/images/ads/*\n/images/ads_\n/images/adv-\n/images/adv.\n/images/adv/*\n/images/adv_\n/images/adver-\n/images/aff-\n/images/affs/*\n/images/awebanner\n/images/bg_ad/*\n/images/gads_\n/images/livejasmin/*\n/images/sponsored.\n/images/sponsored/*\n/images/vghd\n/images1/ad_\n/images2/ads/*\n/images_ad/*\n/images_ads/*\n/imagesadspro/*\n/imfloat.\n/img-ads/*\n/img.ads.\n/img/_ad.\n/img/ad-\n/img/ad.\n/img/ad/*\n/img/ad_\n/img/ads/*\n/img/adv.\n/img/adv/*\n/img2/ad/*\n/img3/ads/*\n/img_ad/*\n/img_ad_\n/img_ads/*\n/img_adv/*\n/imgad.\n/imgad?\n/imgad_\n/imgAdITN.\n/imgads/*\n/imgaffl/*\n/imgs/ad/*\n/imgs/ads/*\n/imlive.gif\n/imlive300_\n/imlive5.\n/imp.ads/*\n/impop.\n/impopup/*\n/inad.\n/inc/ad-\n/inc/ad.\n/inc/ads/*\n/inc_ad.\n/inc_ad_\n/inc_ads.\n/inc_v2/ad_\n/include/ad/*\n/include/ad_\n/include/ads/*\n/include/adsdaq\n/included_ads/*\n/includes/ad.\n/includes/ad_\n/includes/ads/*\n/includes/ads_\n/incmpuad.\n/index-ad-\n/index-ad.\n/index_ads.\n/inhouse_ads/*\n/initdefineads.\n/initlayeredwelcomead-\n/injectad.\n/INjspopunder.\n/inline_ad.\n/inline_ad_\n/inline_ads.\n/inlineads/*\n/inlinetextads?\n/inner-ads-\n/inner-ads/*\n/innerads.\n/inquirer/ads/*\n/insertads.\n/instreamad/*\n/intelliad.\n/intellitext.\n/interad.\n/internAds.\n/internal-ad-\n/internet_ad_\n/internetad/*\n/interstitial-ad.\n/interstitial-ad/*\n/interstitial_ad.\n/intextadd/*\n/intextads.\n/introduction_ad.\n/inv/ads/*\n/inventory/ad/*\n/invideoad.\n/inviteads/*\n/inx-ad.\n/ip-advertising/*\n/ipadad.\n/iprom-ad/*\n/iqadcontroller.\n/irc_ad_\n/ireel/ad*.jpg\n/is.php?ipua_id=*&search_id=\n/iserver/ccid=\n/iserver/site=\n/isgadvertisement/*\n/ispy/ads/*\n/iwadsense.\n/j/ads.js\n/jamnboad.\n/javascript/ads.\n/javascript/ads/*\n/javascript/oas.\n/javascript/oas?\n/javascripts/ads/*\n/jcorner.php?partner=\n/jitads.\n/jivoxadplayer.\n/jlist-affiliates/*\n/JPlayerAdFoxAdvertisementPlugin.\n/jqads.\n/jquery-ads.\n/jquery.adx.\n/jquery/ad.\n/jqueryadvertising.\n/js.ad/size=\n/js.ng/cat=\n/js.ng/channel_\n/js.ng/pagepos=\n/js.ng/site=\n/js.ng/size=\n/js/ads-\n/js/ads.\n/js/ads_\n/js/adv.\n/js/adv/*\n/js/doubleclick/*\n/js/oas-\n/js/oas.\n/js/ppu.$script\n/js/youmuffpu.js\n/js2.ad/size=\n/js_ad_utf8.\n/js_ads/*\n/js_ads_\n/js_adv_\n/jsad.php\n/jsad/*\n/jsads-\n/jsAds/*\n/jsadscripts/*\n/jsc/ads.\n/jsfiles/ads/*\n/json/ad/*\n/jsplayerads-\n/jspopunder.\n/jstextad.\n/jsVideoPopAd.\n/jtcashbanners/*\n/juicyads_\n/jumpstartunpaidad.\n/kaksvpopup.\n/KalahariAds.\n/kampyle.js\n/kantarmedia.\n/keyade.js\n/keyword_ad.\n/kredit-ad.\n/kskads.\n/landerbanners/*\n/landingadvertisements/*\n/large_ads/*\n/layad.\n/layer-ad.\n/layer-ads.\n/layer-advert-\n/layer.php?bid=\n/layer/ad.\n/layer/ads.\n/layer160x600.\n/layer_ad?\n/layerad-\n/layerad.\n/layerAd/*\n/layerads-\n/layerads.\n/layerads_\n/layout.inc.php?img\n/layout/ad.\n/layout/ads/*\n/lazyad.\n/lbl_ad.\n/leadads/*\n/leader_ad.\n/leaderad.\n/leaderboard-advert.\n/leaderboard_ad/*\n/leaderboard_adv/*\n/leaderboardad.\n/leaderboardadblock.\n/leaderboardads.\n/ledad.\n/left-ads.\n/left_ad_\n/left_ads.\n/leftad.\n/leftad_\n/leftads.\n/leftbanner/*\n/leftsidebarads.\n/lib/ad.js\n/library/ads/*\n/lifeshowad/*\n/lightad.\n/lightboxad^\n/lightboxbannerad^\n/lijit-ad-\n/lijitads.\n/linkad2.\n/linkads.\n/linkadv.\n/linkadv_\n/linkedads/*\n/links_sponsored_\n/live_ad.\n/liveads.\n/livejasmin.\n/livejasmin/*&id=\n/livejasmin2.\n/livejasmin_\n/livejasmine03.\n/livejasmine05.\n/load-ads|\n/load_ad?\n/loadad.aspx?\n/loadads.\n/loadads/*\n/loadadsmain.\n/loadadsmainparam.\n/loadadsparam.\n/loadadwiz.\n/loading_ads.\n/local_ads_\n/localAd/*\n/LocalAd_\n/localAdData/*\n/LocalAdNet/*\n/localads.\n/localcom-ad-\n/locker.php?pub=*&gateid=$script\n/log_ad?\n/log_ad_\n/logad?\n/logo-ads.\n/logoads.\n/logoutad.\n/lotto_ad_\n/lrec_ad.\n/m0ar_ads.\n/mac-ad?\n/mad.aspx?\n/mad_ad.\n/magazine/ads.\n/magic-ad/*\n/magic-ads/*\n/main/ad_\n/main/ads/*\n/main_ad.\n/main_ad/*\n/mainad.\n/mainpagepopupadv1.\n/mapquest/Ads/*\n/marginaleadservlet?\n/marketing-banners/*\n/marketing/banners/*\n/marketing/banners_\n/markpop.js\n/masonad.gif\n/masterad.\n/match_ads.\n/maxadselect.\n/maxi_ad.\n/mbads?\n/mbn_ad.\n/mcad.php\n/mda-ads/*\n/mDialogAdModule.\n/media/ad/*\n/media/ads/*\n/media/adv/*\n/media_ads/*\n/megaad.\n/meme_ad.\n/metaad.\n/metaadserver/*\n/metsbanner.\n/mgid-ad-\n/mgid-header.\n/mgid.html\n/microad.\n/microads/*\n/microsofttag/*\n/middle_adv_\n/middleads.\n/min/ads/*\n/mini-ads/*\n/mini_ads.\n/miniadbar/*\n/miniads?\n/minify/ads-\n/minpagead/*\n/mint/ads/*\n/misc/ad-\n/misc/ads.\n/misc/ads/*\n/miva_ads.\n/MixBerryAdsProduction/*\n/mjx-oas.\n/mkadsrv.\n/mktad.\n/ml9pagepeel.\n/mmsAds.\n/mmt_ad.\n/mnads1.\n/mobile-ad.\n/mobile_ad.\n/mobile_ad/*\n/mobileads.\n/mobilephonesad/*\n/mod_ad/*\n/mod_pagepeel_banner/*\n/modalad.\n/module-ads/*\n/module/ads/*\n/modules/ad/*\n/modules/ad_\n/modules/ads/*\n/modules/adv/*\n/modules/doubleclick/*\n/modules_ads.\n/momsads.\n/moneyball/ads/*\n/mpads/*\n/mpu-dm.htm\n/mpuad.\n/mpuguardian.\n/mpumessage.\n/mrskinleftside.\n/msgads.\n/msn-1.js\n/msn-exo-\n/msnadimg.\n/msnads/*\n/msnads1.\n/msnpop.\n/msnpopsingle2.\n/msnpopup.\n/msnpopup4.\n/mstextad?\n/MTA-Ad-\n/mtvi_ads_\n/multiad/*\n/my-ad-integration.\n/myads/*\n/mydirtyhobby.$domain=~mydirtyhobby.com|~mydirtyhobby.de\n/myfreepaysitebanner.\n/mylayer-ad/*\n/mysimpleads/*\n/n/adv_\n/n4403ad.\n/n_ads/*\n/namediaad.\n/nativeads-\n/nativeads/*\n/navad/*\n/navads/*\n/nbcuadops-\n/nd_affiliate.\n/neo/ads/*\n/neoads.\n/netads.\n/netreachtextads/*\n/netseerads.\n/netshelter/*\n/netspiderads2.\n/netspiderads3.\n/network_ad.\n/neudesicad.\n/new-ads/*\n/new/ad/*\n/new/ads/*\n/new_ads/*\n/new_oas.\n/newad.\n/newad2?\n/newad?\n/newads.\n/newads/*\n/newadv/*\n/newadvert/*\n/newaff/float\n/newdesign/ad/*\n/newimages/ads/*\n/newimplugs.\n/newrightcolad.\n/news/ads/*\n/news_ad.\n/newsite/ads/*\n/newsletterads/*\n/newsletters/ads/*\n/newsmaxadcontrol.\n/newtopmsgad.\n/nextad/*\n/nflads.\n/no_ads.\n/nonrotatingads/*\n/noticead.\n/nsfw/sponsors/*\n/nymag_ads.\n/nymag_ads_\n/o2ad.\n/o2contentad.\n/oas-config.\n/oas.aspx\n/oas.js\n/oas/ad/*\n/oas/banners/*\n/oas/iframe.\n/oas/oas-\n/oas_ad.\n/oas_ad/*\n/oas_ad_\n/oas_ads.\n/oas_handler.\n/oas_home_\n/oas_mjx.\n/oas_mjx1.\n/oas_mjx2.\n/oas_mjx3.\n/oasadconnector.\n/oasadframe.\n/oasadfunction.\n/oasadfunctionlive.\n/oasbanner_\n/oascache/*\n/oascentral.$~object-subrequest\n/oascentral/*\n/oasconfig/*\n/oascontroller.\n/oasdefault/*\n/oasisi-\n/oasisi.\n/oasx/*\n/oiopub-ads/*\n/oiopub-direct/*$~stylesheet\n/old/ads-\n/omb-ad-\n/ome.ads.\n/onead.\n/onesheet-ad-\n/online/ads/*\n/online_ads/*\n/onlineads/*\n/onplayerad.\n/ontopadvertising.\n/openad.\n/openads-\n/openads.\n/openads/*\n/openads2/*\n/openads_\n/openadserver/*\n/openx-\n/openx.\n/openx/*\n/openx_\n/openxtag.\n/optonlineadcode.\n/opxads.\n/orbitads.\n/origin-ad-\n/other/ads/*\n/outbrain-min.\n/overlay-ad.\n/overlay_ad_\n/overlayad.\n/overlayads.\n/overture.$script,stylesheet\n/overture/*$script,subdocument\n/overture_\n/ovt_show.asp?\n/ox/www/*\n/ox_ultimate/www/*\n/p2/ads/*\n/p2ads/*\n/p8network.js\n/page-ads.\n/page-peel\n/page/ad/*\n/pagead/ads?\n/pagead/gen_\n/pagead2.\n/pagead46.\n/pagead?\n/pageadimg/*\n/pageads/*\n/pagecurl/*\n/pageear.\n/pageear/*\n/pageear_\n/pagepeel-\n/pagepeel.\n/pagepeel/*\n/pagepeel_\n/pagepeelads.\n/pages/ads\n/paidads/*\n/paidlisting/*\n/panelad.\n/park_html_functions.*.js\n/park_html_functions.js\n/park_html_functions_general.js\n/partner_ads/*\n/partner_ads_\n/partnerad.\n/partnerads/*\n/partnerads_\n/partneradwidget.\n/partnerbanner.\n/partnerbanner/*\n/partners/ad-\n/partners/ads/*\n/partners/get-banner.\n/partnersadbutler/*\n/parts/ad/*\n/pauseadextension.\n/payperpost.\n/pc/ads.\n/pcad.js?\n/peel.js\n/peel.php?\n/peel/?webscr=\n/peel1.js\n/peel_ads/*\n/peelad.\n/peelad/*\n/peelads/*\n/peelaway_images/*\n/peelbackscript/ad_\n/peeljs.php\n/peeltl.\n/peeltr.\n/pencilad.\n/perfads.\n/performance_ads/*\n/performancingads/*\n/permanent/ads/*\n/pfpadv.\n/pgad.\n/pgrightsideads.\n/photo728ad.\n/photoad.\n/photoads/*\n/photogallaryads.\n/php/ad/*\n/php/ads/*\n/phpads.\n/phpads/*\n/phpads2/*\n/phpadserver/*\n/phpadsnew/*\n/phpbanner/banner_\n/pic/ads/*\n/pic_adv/*\n/pickle-adsystem/*\n/pics/ads/*\n/picture/ad/*\n/pictureads/*\n/pictures/ads/*\n/pilot_ad.\n/pitattoad.\n/pix/ads/*\n/pixelads/*\n/place-ads/*\n/placead_\n/placeholder-ad-\n/placements/ad_\n/play/ad/*\n/player/ad/*\n/player/ads.\n/player/ads/*\n/player_ads/*\n/pledgead.\n/plugin/ad/*\n/plugins/ad.\n/plugins/ads/*\n/plugins/page-cornr-\n/plugins/wp-moreads/*$~stylesheet\n/plugins/wp125/*$~stylesheet\n/plugins/wp_actionpop/*\n/plugins_ads_\n/plus/ad_\n/poker-ad.\n/poll-ad-\n/pool.ads.\n/pool/ad/*\n/pop-under.\n/pop.js|\n/pop2.js|\n/pop_ad.\n/pop_adfy.\n/pop_camgirlcity.\n/pop_under.\n/pop_under/*\n/popad-\n/popad.\n/popads.\n/popads/*\n/popads_\n/poplivejasmine.\n/popounder4.\n/poprotator.\n/popshow.$~stylesheet\n/popu.js\n/popunder-\n/popunder.\n/popunder/*\n/popunder1.\n/popunder1_\n/popunder2.\n/popunder4.\n/popunder5.\n/popunder7.\n/popunder?\n/popunder_\n/popunderblogs.\n/popundercode.\n/popunderking.\n/popunders.\n/popunders/*\n/popundr.\n/popundr_\n/popup-domination/*$~stylesheet\n/popup2.js\n/popup3.js\n/popup_ad.\n/popup_code.\n/popupads.\n/popupdfp.\n/popupunder.\n/post-ad-\n/post_ads_\n/postad.\n/postprocad.\n/postprofilehorizontalad.\n/postprofileverticalad.\n/posts_ad.\n/pounder-$~image\n/ppd_ads.\n/ppd_ads_\n/predictad.\n/premierebtnad/*\n/premium_ad.\n/premiumads/*\n/premiumadzone.\n/prerollad.\n/prerollads.\n/previews/ad/*\n/printad.\n/printad/*\n/printads/*\n/PRNAd300x150.\n/proads/*\n/proadvertising.\n/proadvertising_\n/processad.\n/processads.\n/processing/impressions.asp?\n/product-ad/*\n/product-ads/*\n/production/ads/*\n/projectwonderful_\n/promo/ad_\n/promo/ads/*\n/promo/affiframe.\n/promo300by250.\n/promo300x250.\n/promoads/*\n/promobuttonad.\n/promoloaddisplay?\n/promoredirect?*&campaign=*&zone=\n/promotion/geoip/*\n/promotions/ads.\n/promotions/ads/*\n/promotions/ads?\n/promotools.\n/promotools/*\n/promotools1.\n/protection/ad/*\n/provideadcode.\n/provider_ads/*\n/proxxorad.\n/proxyadcall?\n/pub/ad/*\n/pub/ads/*\n/pub_images/*$third-party\n/pubad.\n/pubads.\n/pubads_\n/public/ad/*\n/public/ad?\n/public/ads/*\n/public/adv/*\n/publicidad.$~object-subrequest,~stylesheet\n/publicidad/*\n/publicidad_$~stylesheet\n/publicidade.\n/publicidade/*\n/pubmatic_\n/pubs_aff.asp?\n/puff_ad?\n/pullads.\n/punder.js\n/punder.php\n/qandaads/*\n/qd_ads/*\n/qpon_big_ad\n/quadadvert.\n/questions/ads/*\n/quick_ads/*\n/quigo_ad\n/r_ads/*\n/radioAdEmbed.\n/radioadembedgenre.\n/radioAdEmbedGPT.\n/radopenx?\n/rail_ad_\n/railad.\n/railads.\n/railsad.\n/railsad_\n/RainbowTGXServer/*\n/ram/ads/*\n/randomad.\n/randomad120x600nsfw.\n/randomad160x600nsfw.\n/randomad2.\n/randomad300x250nsfw.\n/randomad728x90nsfw.\n/randomad_\n/randomads.\n/rawtubelivead.\n/rcolads1.\n/rcolads2.\n/rcom-ads.\n/rcom-video-ads.\n/realmedia/ads/*\n/realmedia_banner.\n/realmedia_banner_\n/realmedia_mjx.\n/realmedia_mjx_\n/reclama/*\n/reclame/*\n/recommendations/ad.\n/recordadsall.\n/rect_ad.\n/rectangle_ad.\n/rectangle_advertorials_\n/redirect_awe.\n/refads/*\n/refreshads-\n/refreshsyncbannerad?\n/RefSplDicAdsTopL.\n/reklam.\n/reklam/*\n/reklama.$~stylesheet\n/reklama/*\n/reklama2.\n/reklama5.\n/reklame/*\n/related-ads.\n/relatedads.\n/relevance_ad.\n/remove-ads.\n/remove_ads.\n/render-ad/*\n/repeat_adv.\n/report_ad.\n/report_ad_\n/requestadvertisement.\n/requestmyspacead.\n/resources/ad.\n/resources/ads/*\n/resources/ads_\n/responsive-ads.\n/restorationad-\n/retrad.\n/retrieve-ad.\n/revealaads.\n/revealaads/*\n/revealads.\n/revealads/*\n/revealads2/*\n/rg-erdr.php$xmlhttprequest\n/rg-rlog.php$xmlhttprequest\n/rgads.\n/rhspushads/*\n/richoas.\n/right-ad-\n/right_ad.\n/right_ad^\n/right_ad_\n/right_ads.\n/rightad.\n/rightad/*\n/rightads.\n/rightbanner/*\n/rightnavads.\n/rightnavadsanswer.\n/rightrailgoogleads.\n/rightsideaddisplay.\n/righttopads.\n/rollad.\n/rolloverads/*\n/rolloverbannerad.\n/root_ad.\n/rotad/*\n/rotads/*\n/rotateads.\n/rotatedads1.\n/rotatedads13.\n/rotatedads2.\n/rotating_banner.php\n/rotatingad.\n/rotatingpeels.\n/rotatingtextad.\n/rotation/banner\n/rotationad.\n/rotatorad300x250.\n/rotatoradbottom.\n/roturl.js\n/rpc/ad/*\n/rpgetad.\n/rsads.js\n/rsads/*\n/rsc_ad_\n/rss/ads/*\n/rss2/?*&hp=*&np=$script,third-party\n/rss2/?*&np=*&hp=$script,third-party\n/rss2/?hp=*&np=$script,third-party\n/rss2/?np=*&hp=$script,third-party\n/rswebsiteads/*\n/rule34/ads/*\n/rule34v2/ads/*\n/safead/*\n/sailthru.js\n/salesad/*\n/samplead1.\n/samsung_ad.\n/satnetads.\n/satnetgoogleads.\n/savvyads.\n/sb-relevance.js\n/scanscout.\n/scanscoutoverlayadrenderer.\n/scanscoutplugin.\n/scaradcontrol.\n/script/ad.\n/script/ads.\n/script/ads_\n/script/oas/*\n/scripts/ad-\n/scripts/ad.\n/scripts/ad/*\n/scripts/ad_\n/scripts/ads.\n/scripts/ads/*\n/scripts/adv.\n/scripts/afc/*\n/scripts/feedmeCaf.php?q=*&d=*&ron=$script\n/scripts/zanox-\n/scrollads/*\n/search-ads?\n/search.php?uid=*.*&src=\n/search/ad/*\n/search/ads?\n/search/ads_\n/search_ads.\n/searchad.\n/searchad_\n/searchads/*\n/secondads.\n/secondads_\n/securepubads.\n/seo-ads.\n/serv.ads.\n/serve.ads.\n/servead.\n/servead/*\n/ServeAd?\n/serveads.\n/server/ads/*\n/servewebads/*\n/service/ads/*\n/services/ads/*\n/settings/ad.\n/sevenads.\n/sevenl_ad.\n/share/ads/*\n/shared/ad_\n/shared/ads.\n/shared/ads/*\n/shortmediads/*\n/show-ad.\n/show-ads.\n/show.ad?\n/show.cgi?adp\n/show_ad.\n/show_ad_\n/show_ads.js\n/show_ads_\n/showad.\n/showad/*\n/showAd300-\n/showAd300.\n/showad_\n/showadcode.\n/showadjs.\n/showads.\n/showads/*\n/showads_\n/showadvert.\n/showadvertising.\n/showban.asp?\n/showbanner.\n/showcasead/*\n/showflashad.\n/showindex-ad-\n/showJsAd/*\n/showmarketingmaterial.\n/showpost-ad-\n/showsidebar-ad-\n/side-ad-\n/side-ad.\n/side-ads-\n/side_adverts.\n/sidead.\n/sidead/*\n/sidead1.\n/sidead2.\n/sidead3.\n/sideadiframe.\n/sideads/*\n/sideads|\n/sideadvtmp.\n/sidebar-ad-\n/sidebar-ads/*\n/sidebar_ad.\n/sidebar_ad_\n/sidebar_ads/*\n/sidebarad/*\n/sidebaradvertisement.\n/sidecol_ad.\n/sidekickads.\n/sidelinead.\n/siframead.\n/silver/ads/*\n/silverads.\n/simpleads/*\n/simpleadvert.\n/simpleadvert/*\n/singleadextension.\n/sisterads.\n/site-ads/*\n/site-advert.\n/site/ads/*\n/site/ads?\n/site=*/size=*/viewid=\n/site=*/viewid=*/size=\n/site_ads.\n/site_ads/*\n/site_under.\n/siteads.\n/siteads/*\n/siteadvert.\n/siteafs.txt?\n/sitemanagement/ads/*\n/sites/ad_\n/sitewide/ads/*\n/size=*/random=*/viewid=\n/skin/ad/*\n/skin/ad3/*\n/skin/adv/*\n/skin3/ads/*\n/skinad.\n/skinads/*\n/skins/ads-\n/skins/ads/*\n/skyad.\n/skyad_\n/skyadjs/*\n/skyadright.\n/skybannerview.\n/skybar_ad.\n/skyframeopenads.\n/skyframeopenads_\n/skyscraper-ad.\n/skyscraper_ad_\n/skyscraperad.\n/slafc.js\n/slideadverts/*\n/slideinad.\n/slider-ad-\n/slider.ad.\n/slider_ad.\n/sliderAd/*\n/sliderad3.\n/SliderJobAdList.\n/slideshow/ads.\n/slideshowintad?\n/slidetopad.\n/smalAds.\n/small_ad.\n/small_ads/*\n/smallad-\n/smalladblockbg-\n/smalltopl.\n/smart-ad-server.\n/smartad-\n/smartad.\n/smartAd?\n/smartads.\n/smartadserver.\n/smartlinks.epl?\n/smb/ads/*\n/smeadvertisement/*\n/smedia/ad/*\n/SmpAds.\n/socialads.\n/socialads/*\n/somaadscaleskyscraperscript.\n/some-ad.\n/someads.\n/sp/delivery/*\n/spac_adx.\n/space_ad.\n/spacedesc=\n/spark_ad.\n/spc.php\n/spcjs.php\n/spcjs_min.\n/special-ads/*\n/special_ad.\n/special_ads/*\n/specialads/*\n/specialfeatureads/*\n/spiderad/*\n/splash_ads_\n/spo_show.asp?\n/sponlink.\n/spons/banners/*\n/spons_links_\n/sponser.\n/sponseredlinksros.\n/sponsers.cgi\n/sponsimages/*\n/sponslink_\n/sponsor%20banners/*\n/sponsor-ad\n/sponsor-box?\n/sponsor-links.\n/sponsor/click.\n/sponsor_ads.\n/sponsor_select.\n/sponsorad.\n/sponsoradds/*\n/sponsorads.\n/sponsorads/*\n/sponsorbanners/*\n/sponsorbg/*\n/sponsored-backgrounds/*\n/sponsored-banner-\n/sponsored-links-\n/sponsored-links/*\n/sponsored_ad.\n/sponsored_ad_\n/sponsored_ads/*\n/sponsored_by.\n/sponsored_link.\n/sponsored_links.\n/sponsored_links1.\n/sponsored_links_\n/sponsored_listings.\n/sponsored_text.\n/sponsored_title.\n/sponsored_top.\n/sponsoredads/*\n/sponsoredbanner/*\n/sponsoredcontent.\n/sponsoredheadline.\n/sponsoredlinks.\n/sponsoredlinks/*\n/sponsoredlinks?\n/sponsoredlinksiframe.\n/sponsoredlisting.\n/sponsorHeaderDeriv_\n/sponsoringbanner/*\n/sponsorpaynetwork.\n/sponsors-ads/*\n/sponsors.js?\n/sponsors/ads/*\n/sponsors/amg.php?\n/sponsors_box.\n/sponsorsgif.\n/sponsorshipimage-\n/sponsorstrips/*\n/spotlightads/*\n/spotx_adapter.\n/spotxchangeplugin.\n/spotxchangevpaid.\n/square-ad.\n/square-ads/*\n/squaread.\n/squareads.\n/src/ads_\n/srec_ad_\n/srv/ad/*\n/ss3/ads/*\n/standard_ads.\n/static.ad.\n/static/ad-\n/static/ad/*\n/static/ad_\n/static/ads/*\n/static/adv/*\n/static/js/4728ba74bc.js$~third-party\n/static_ads/*\n/staticadslot.\n/sticker_ad.\n/sticky_ad.\n/stickyad.\n/stickyad2.\n/storage/ads/*\n/storage/adv/*\n/stories/ads/*\n/story_ad.\n/story_ads_\n/storyadcode.\n/storyads.\n/stream-ad.\n/streamads.\n/streamatepop.\n/studioads/*\n/stuff/ad-\n/style_ad.\n/styles/ads.\n/styles/ads/*\n/subAd.\n/subad2_\n/subadz.\n/subnavads/*\n/subs-ads/*\n/sugar-ads.\n/sugar-ads/*\n/sugarads-\n/superads_\n/supernorthroomad.\n/survey_monkey.\n/svnad/*\n/swf/ad-\n/swf/ads/*\n/swfbin/ad-\n/swfbin/ad3-\n/swfbin/ad3_\n/switchadbanner.\n/SWMAdPlayer.\n/synad2.\n/synad3.\n/syndication/ad.\n/sys/ad/*\n/system/ad/*\n/system/ads/*\n/system_ad.\n/systemad.\n/systemad_\n/t-ads.\n/t.php?uid=*.*&src=\n/tabads/*\n/tableadnorth.\n/taboola-\n/tag-adv.\n/tag_adv/*\n/tagadv_\n/talkads/*\n/taxonomy-ads.\n/td-ads-\n/td_ads/*\n/tdlads/*\n/teamplayer-ads.\n/teaseimg/ads/*\n/technomedia.\n/teletoon_ad.\n/tempads/*\n/template/ad.\n/templateadvimages/*\n/templates/ad.\n/templates/ads/*\n/templates/adv_\n/testads/*\n/testingad.\n/text_ad.\n/text_ad_\n/text_ads.\n/text_ads_\n/textad.\n/textad/*\n/textad1.\n/textad?\n/textad_\n/textadrotate.\n/textads-\n/textads.\n/textads/*\n/textads_\n/textadspromo_\n/tfs-ad.\n/tg.php?uid=\n/thdgoogleadsense.\n/thebannerserver.net/*\n/thirdparty/ad/*\n/thirdpartyads/*\n/thirdpartyframedad/*\n/thumbs/ads/*\n/thunder/ad.\n/tickeradsget.\n/tidaladplugin.\n/tii_ads.\n/tikilink?\n/tileads/*\n/tinlads.\n/tinyad.\n/tit-ads.\n/title-ad/*\n/title_ad.\n/tizers.php?\n/tl.ads-\n/tmnadsense-\n/tmnadsense.\n/tmo/ads/*\n/tmobilead.\n/tncms/ads/*\n/toggleAds.\n/toigoogleads.\n/toolkitads.\n/tools/ad.\n/toonad.\n/top-ad-\n/top-ad.\n/top-ad_\n/top-ads.\n/top_ad.\n/top_ad/*\n/top_ad_\n/top_ads.\n/top_ads/*\n/top_ads_\n/top_adv_\n/topad.\n/topad/*\n/topad3.\n/topad_\n/topadbg.\n/topadfooter.\n/topadheader.\n/topads.\n/topads/*\n/topads1.\n/topads2.\n/topads3.\n/topads_\n/topads|\n/topadv.\n/topadvert.\n/topleftads.\n/topperad.\n/toprightads.\n/tops.ads.\n/torget_ads.\n/totalmedia/*\n/Totem-Cash/*\n/totemcash/*$image\n/totemcash1.\n/tower_ad_\n/towerbannerad/*\n/tr2/ads/*\n/track.php?click=*&domain=*&uid=$xmlhttprequest\n/track.php?uid=*.*&d=\n/track_ad_\n/trackads/*\n/tracked_ad.\n/trade_punder.\n/tradead_\n/TradeAds/*\n/tradedoubler.\n/trafficads.\n/trafficengineads.\n/trafficsynergysupportresponse_\n/transad.\n/travidia/*\n/tremoradrenderer.\n/triadshow.\n/tribalad.\n/tripplead/*\n/ttz_ad.\n/turbo_ad.\n/tvgdartads.\n/TWBadbanner.\n/twgetad3.\n/TwtAd_\n/txt_ad.\n/txt_ad_\n/txt_adv.\n/txtad.\n/txtads/*\n/u-ads.\n/u/ads/*\n/uberlayadrenderer.\n/ucstat.\n/ugoads.\n/ugoads_inner.\n/ui/ads/*\n/ui/adv.\n/ui/adv_\n/uk.ads.\n/uk/ads/*\n/ukc-ad.\n/unibluead.\n/unity/ad/*\n/up/ads/*\n/update_ads/*\n/update_layer/layer_os_new.php\n/uplimg/ads/*\n/upload/ads/*\n/uploaded/ads/*\n/uploads/ads/*\n/uploads/adv/*\n/uploads/adv_\n/upsellingads/*\n/us-ads.\n/usenext16.\n/user_ads/*\n/userad.\n/userad/*\n/userimages/ads/*\n/usernext.\n/utep/ad/*\n/utep_ad.js\n/v5/ads/*\n/v9/adv/*\n/vads/*\n/valueclick-ad.\n/valueclick.\n/valueclickbanner.\n/valueclickvert.\n/vast_ads_\n/VASTAdPlugin.\n/vb/ads/*\n/vboard/ads/*\n/vbvua.js\n/vclkads.\n/vendor-ads-\n/vericaladtitle.\n/vert728ad.\n/vert_ad.\n/verticaladrotatorv2.\n/vghd.gif\n/vghd.swf\n/vghd2.gif\n/VHDpoppingModels/*\n/viagogoads.\n/vidadv.\n/video-ad-overlay.\n/video-ads-player.\n/video.ads.php?\n/video/ads/*\n/video2adrenderer.\n/video_ad.\n/video_ad_\n/video_ads.\n/videoad.\n/videoad_new.\n/videoadrenderer.\n/videoads.\n/videoads/*\n/VideoAdsServingService/*\n/videostreaming_ads.\n/videowall-ad.\n/view/ads/*\n/view/banner/*\n/view_banner.\n/viewad.\n/viewad/*\n/viewad?\n/viewbannerad.\n/viewer/rad?\n/viewid=*/site=*/size=\n/views/ads/*\n/virtuagirl.\n/virtuagirl/*\n/virtuagirl3.\n/virtuagirlhd.\n/virtual_girl_\n/virtualgirl/*\n/virtualgirlhd-\n/visitoursponsors.\n/vnads.\n/vnads/*\n/vogue_ads/*\n/vpaidad3.\n/vpaidadrenderer.\n/vplayerad.\n/vtextads.\n/w/ads/*\n/wahoha.\n/wallpaper_ads/*\n/wallpaperads/*\n/watchit_ad.\n/wave-ad-\n/wbadvert/*\n/weather-sponsor/*\n/weather/ads/*\n/web-ad_\n/web-ads.\n/web-ads/*\n/web/ads/*\n/web_ads/*\n/webad.\n/WebAd/*\n/webad?\n/webadimg/*\n/webads.\n/webads/*\n/webads_\n/webadserver.\n/webadvert.\n/webadvert/*\n/webadvert3/*\n/webadverts/*\n/webmailad.\n/webmaster_ads/*\n/weeklyAdsLabel.\n/welcome_ad.\n/welcomead.\n/welcomeadredirect.\n/werbebanner/*\n/widget/ad/*\n/widget/ads.\n/widget/ads/*\n/widgetad.\n/widgetadsense.\n/widgets/ads.\n/wipeads/*\n/wire/ads/*\n/wired/ads/*\n/wix-ad.\n/wlbetathome/bannerflow/*\n/wmads.\n/wordpress-ads-plug-in/*\n/work.php?n=*&size=*&c=\n/wp-content/ads/*\n/wp-content/mbp-banner/*\n/wp-content/plugins/automatic-social-locker/*\n/wp-content/plugins/banner-manager/*\n/wp-content/plugins/bhcb/lock.js\n/wp-content/plugins/fasterim-optin/*\n/wp-content/plugins/platinumpopup/*\n/wp-content/plugins/useful-banner-manager/*\n/wp-content/plugins/wp-bannerize/*\n/wp-content/plugins/wp-super-popup-pro/*\n/wp-content/plugins/wp-super-popup/*$~stylesheet\n/wp-content/uploads/useful_banner_manager_banners/*\n/wp-popup-scheduler/*\n/wp-srv/ad/*\n/wp_ad_250.\n/wp_ad_250_\n/wpads/iframe.\n/wpbanners_show.php\n/wpproads.\n/wrapper/ads/*\n/writelayerad.\n/wwe_ads.\n/wwe_ads/*\n/www/ad/*\n/www/ads/*\n/www/deliverx/*\n/www/delivery/*\n/www/js/ad/*\n/x5advcorner.\n/xadvertisement.\n/xbanner.php?\n/xclicks.\n/xfiles/ads/*\n/xhr/ad/*\n/xlayer/layer.php?uid=$script\n/xml/ad/*\n/xml/ads_\n/xmladparser.\n/xnxx-ads.\n/xpiads.\n/xtendmedia.$domain=~xtendmedia.dk\n/xxxmatch_\n/yads-\n/yads.\n/yads/*\n/yads_\n/yahoo-ad-\n/yahoo-ads/*\n/yahoo/ads.\n/yahoo_overture.\n/YahooAd_\n/yahooads.\n/yahooads/*\n/yahooadsapi.\n/yahooadsobject.\n/yahoofeedproxy.\n/yellowpagesads/*\n/yhs/ads?\n/yieldads.\n/yieldlab.\n/yieldmanager/*\n/yin-ad/*\n/yld/js/*\n/yld_mgr/*\n/your-ad-\n/your-ad.\n/your_ad.\n/yourad1.\n/youradhere.\n/youradhere468-\n/youradhere_\n/ypad/*\n/ysc_csc_news\n/ysmads.\n/ysmwrapper.js\n/yume_ad_library_\n/z-ads.\n/z/ads/*\n/zagcookie_\n/zalando-ad-\n/zanox.js\n/zanox/banner/*\n/zanox_ad/*\n/zedo_\n/~cdn/ads/*\n://a.ads.\n://ad.*/jstag^\n://adcl.\n://ads.\n://adv.$domain=~forex-tv-online.com\n://affiliate.$third-party\n://affiliates.$third-party\n://ax-d.*/jstag^\n://banner.$third-party\n://banners.$third-party\n://bwp.*/search\n://delivery.*/jstag^\n://feeds.*/~a/\n://findnsave.*.*/api/groupon.json?\n://findnsave.*.*/td/portablerop.aspx?\n://oas.*@\n://ox-*/jstag^\n://pop-over.\n://promo.$third-party\n://rss.*/~a/\n://synad.\n://wrapper.*/a?\n:8080/ads/\n;adsense_\n;cue=pre;$object-subrequest\n;iframeid=ad_\n=ad-leaderboard-\n=ad-rectangle-\n=ad320x50-\n=ad_iframe&\n=ad_iframe_\n=adcenter&\n=adcode&\n=adexpert&\n=adlabs&\n=admeld&\n=adMenu&\n=admodeliframe&\n=adsCallback&\n=adscripts&\n=adsfinal.\n=adshow&\n=adslot&\n=adspremiumplacement&\n=adtech_\n=advert/\n=advertiser.\n=advertiser/\n=advertorial&\n=adView&\n=akiba_ads_\n=banners_ad&\n=clkads/\n=com_ads&\n=dartad_\n=deliverAdFrame&\n=display_ad&\n=DisplayAd&\n=displayAds&\n=dynamicads&\n=GetSponsorAds&\n=half-page-ad&\n=js_ads&\n=searchadslider|\n=showsearchgoogleads&\n=simpleads/\n=tickerReportAdCallback_\n=web&ads=\n=webad2&\n?*=x55g%3add4vv4fy.\n?action=ads&\n?ad_ids=\n?ad_size=\n?ad_tag=\n?ad_type=\n?ad_width=\n?adarea=\n?adclass=\n?adcontext=\n?adflashid=\n?adfox_\n?adloc=\n?adlocation=\n?adpage=\n?adpartner=\n?ads=\n?adsdata=\n?adsite=\n?adsize=\n?adslot=\n?adtag=\n?adTagUrl=\n?adtarget=\n?adtechplacementid=\n?adtype=\n?adunit_id=\n?adunitid=\n?adunitname=\n?adv/id=\n?adversion=\n?advertisement=\n?advertiser=\n?advertiser_id=\n?advertiserid=$domain=~outbrain.com\n?advertising=\n?advideo_\n?advsystem=\n?advtile=\n?advurl=\n?adx=\n?adzone=\n?banner.id=\n?banner_id=\n?bannerid=\n?bannerXGroupId=\n?dfpadname=\n?file=ads&\n?g1t2h=*&t1m2k3=\n?getad=&$~object-subrequest\n?goto=ad|\n?handler=ads&\n?idaffiliation=\n?module=ads/\n?OASTagURL=\n?phpAds_\n?service=ad&\n?sid=ads\n?simple_ad_\n?type=ad&\n?type=oas_pop&\n?view=ad&\n?wm=*&prm=rev&\n?wpproadszoneid=\n?ZoneID=*&PageID=*&SiteID=\n?ZoneID=*&Task=*&SiteID=\n^fp=*&prvtof=\n^mod=wms&do=view_*&zone=\n^pid=Ads^\n_125ad.\n_160_ad_\n_160x550.\n_300x250Banner_\n_468x60ad.\n_728x90ad_\n_acorn_ad_\n_ad&zone=\n_ad-125x125.\n_ad.gif|\n_ad.jsp?\n_ad.php?\n_ad.png?\n_ad/full_\n_ad/public/\n_ad/section_\n_ad01.\n_ad01_\n_ad1.$~stylesheet\n_ad103.\n_ad120x120_\n_ad1a.\n_ad1b.\n_ad2.\n_ad234x90-\n_ad3.\n_ad300.\n_ad300x250.\n_ad6.\n_ad728x90.\n_ad9.\n_ad?darttag=\n_ad?size=\n_ad_125x125.\n_ad_2012.\n_ad_300.\n_ad_350x250.\n_ad_actron.\n_ad_background.\n_ad_banner.\n_ad_banner_\n_ad_big.\n_ad_block&\n_ad_bottom.\n_ad_box.\n_ad_bsb.\n_ad_center.\n_ad_change.\n_ad_choices.\n_ad_choices_\n_ad_close.\n_ad_code.\n_ad_content.\n_ad_controller.\n_ad_count.\n_ad_count=\n_ad_courier.\n_ad_div=\n_ad_domain_\n_ad_end_\n_ad_engine/\n_ad_expand_\n_ad_feed.\n_ad_footer.\n_ad_footer_\n_ad_frame.\n_ad_handler.\n_ad_head.\n_ad_header.\n_ad_heading.\n_ad_homepage.\n_ad_ids=\n_ad_iframe.\n_ad_image_\n_ad_images/\n_ad_init/\n_ad_integration.\n_ad_interactive.\n_ad_label.\n_ad_layer_\n_ad_leaderboard.\n_ad_logo.\n_ad_middle_\n_ad_minileaderboard.\n_ad_new_\n_ad_number=\n_ad_one.\n_ad_over_\n_ad_page_\n_ad_placeholder-\n_ad_position_\n_ad_promo2.\n_ad_render_\n_ad_renderer_\n_ad_right.\n_ad_right_\n_ad_run.\n_ad_service.\n_ad_serving.\n_ad_show&\n_ad_side.\n_ad_size.\n_ad_sky.\n_ad_skyscraper.\n_ad_slot=\n_ad_small.\n_ad_sponsor/\n_ad_square.\n_ad_tall.\n_ad_template_\n_ad_url=\n_ad_vertical.\n_ad_view=\n_ad_widesky.\n_ad_wrapper.\n_ad_yellow.\n_ad_zone_\n_adagency/\n_adaptvad.\n_adbanner.\n_adbanner/\n_adbanner_\n_adbanners.\n_adbar.\n_adbg1a.\n_adbg2.\n_adbg2a.\n_adbit.\n_adblue.\n_adbox.\n_adbox_\n_adbreak.\n_adcall.\n_adcall_\n_adchoice.\n_adchoices.\n_adcom.\n_adcontent/\n_adcount=\n_adengage.\n_adengage_\n_adengine_\n_adframe.\n_adframe/\n_adframe_\n_adfunction.\n_adhoc?\n_adhome.\n_adhome_\n_adhoriz.\n_adhub_\n_adify.\n_adjug.\n_adlabel_\n_adlesse.\n_adlib.\n_adlog.\n_admanager/\n_admarking_\n_admin/ads/\n_adminka/\n_adobjects.\n_adpage=\n_adpartner.\n_adplugin.\n_adright.\n_adright2.\n_adrotator.\n_adrow-\n_ads-affiliates_\n_ads.cgi\n_ads.html\n_ads.js?\n_ads.php?\n_ads/horiz/\n_ads/horiz_\n_ads/iframe.\n_ads/inhouse/\n_ads/ip/\n_ads/js/\n_ads/square/\n_ads1.\n_ads2.\n_ads3.\n_ads?\n_ads_cached.\n_ads_contextualtargeting_\n_ads_Home.\n_ads_iframe.\n_ads_iframe_\n_ads_index_\n_ads_multi.\n_ads_new.\n_ads_only&\n_ads_reporting.\n_ads_single_\n_ads_targeting.\n_ads_text.\n_ads_top.\n_adsbgd.\n_adscript.\n_adsdaq.\n_adsense.\n_adsense_\n_adserve.\n_adserve/\n_adserved.\n_adserver.\n_adserver/\n_adsetup.\n_adsframe.\n_adshare.\n_adshow.\n_adsjs.\n_adskin.\n_adskin_\n_adsonar.\n_adspace-\n_adspace_\n_adsrv=\n_adsrv?\n_adssource.\n_adstat.\n_adsys.\n_adsystem/\n_adtags.\n_adtech&\n_adtech-\n_adtech.\n_adtech/$~stylesheet\n_adtech_\n_adtext_\n_adtitle.\n_adtoma.\n_adtop.\n_adtxt.\n_adunit.\n_adv/300.\n_adv/leaderboard_\n_adv/overlay/\n_Adv_Banner_\n_advert.\n_advert/\n_advert1.\n_advert_1.\n_advert_2.\n_advert_label.\n_advert_overview.\n_advert_vert\n_advertise-\n_advertise.\n_advertise180.\n_advertisehere.\n_advertisement-\n_advertisement.\n_advertisement/\n_advertisement_\n_advertisementbar.\n_advertisements/\n_advertisementtxt_\n_advertising.\n_advertising/\n_advertising_header.\n_advertising_iframe.\n_advertisment.\n_advertorial.\n_advertorial3.\n_advertorial_\n_advertorials/\n_advertphoto.\n_adverts.js\n_adverts/\n_adverts3.\n_advertsarea.\n_AdvertsImgs/\n_adview?\n_adview_\n_advservices.\n_adwrap.\n_adwriter.\n_afd_ads.\n_affiliate/banners/\n_affiliate_ad.\n_afs_ads.\n_alt/ads/\n_argus_ad_\n_assets/ads/\n_background_ad.\n_background_ad/\n_banner_ad.\n_banner_ad_\n_banner_ads.\n_Banner_Ads_\n_banner_adv_\n_bannerad.\n_BannerAd_\n_bannerads_\n_bannerview.php?*&aid=\n_bg_ad_left.\n_blank_ads.\n_blogads.\n_blogads_\n_bottom_ads.\n_bottom_ads_\n_box_ad_\n_btnad_\n_button_ad_\n_buttonad.\n_centre_ad.\n_cgbanners.php?\n_ChatAd_\n_companionad.\n_content_ad.\n_content_ad_\n_contest_ad_\n_custom_ad.\n_custom_ad_\n_dart_ads.\n_dart_interstitial.\n_dashad_\n_dfp.php?\n_displayad_\n_displaytopads.\n_doubleclick.\n_doubleclick_ad.\n_down_ad_\n_dropdown_ad.\n_dynamicads/\n_elements/ads/\n_engine_ads_\n_english/adv/\n_externalad.\n_fach_ad.\n_fbadbookingsystem&\n_feast_ad.\n_files/ad.\n_fixed_ad.\n_floating_ad_\n_floatingad_\n_footer_ad_\n_framed_ad/\n_friendlyduck.\n_fullscreen_ad.\n_gads_bottom.\n_gads_footer.\n_gads_top.\n_gallery_ads.\n_generic_ad.\n_geobanner.\n_google_ad.\n_google_ads.\n_google_ads/\n_google_ads_\n_googlead.\n_grid_ad?\n_header_ad.\n_header_ad_\n_headerad.\n_headline_ad.\n_homad.\n_home_ad.\n_home_ad_\n_hosting_ad.\n_house_ad_\n_hr_advt/\n_iad.html?\n_iframe_ad_\n_images/ad.\n_images/ad_\n_images/ads/\n_index_ad.\n_inlineads.\n_js/ads.js\n_jtads/\n_juiceadv.\n_juicyads.\n_layerad.\n_leaderboard_ad_\n_left_ad.\n_link_ads-\n_live/ad/\n_load_ad?\n_logadslot&\n_longad_\n_mailLoginAd.\n_main_ad.\n_mainad.\n_maxi_ad/\n_media/ads/\n_mmsadbanner/\n_Mobile_Ad_\n_mpu_widget?\n_online_ad.\n_onlinead_\n_openx.\n_openx/\n_org_ad.\n_overlay_ad.\n_paid_ads/\n_paidadvert_\n_panel_ads.\n_partner_ad.\n_platform_ads.\n_platform_ads_\n_player_ads_\n_plus/ads/\n_pop_ad.\n_pop_ad/\n_pop_under.\n_popunder.\n_popunder_\n_popupunder.\n_post_ads.\n_preorderad.\n_prime_ad.\n_promo_ad/\n_psu_ad.\n_radio_ad_\n_railads.\n_rectangle_ads.\n_reklama_$domain=~youtube.com\n_reporting_ads.\n_request_ad.\n_response_ad.\n_right_ad.\n_right_ads.\n_right_ads/\n_right_ads_\n_rightad.\n_rightad1.\n_rightad_\n_rightmn_ads.\n_search/ads.js\n_sectionfront_ad.\n_show_ads.\n_show_ads=\n_sidead.\n_sidebar_ad.\n_sidebar_ad_\n_sidebarad_\n_site_sponsor\n_skinad.\n_skybannerview.\n_skyscraper160x600.\n_small_ad.\n_smartads_\n_sponsoredlinks_\n_square_ad.\n_static/ads/\n_static_ads.\n_sticky_ad.\n_StickyAd.\n_StickyAdFunc.\n_survey_ad_\n_tagadvertising.\n_temp/ad_\n_text_ads.\n_textad_\n_textads.\n_textads/\n_theme/ads/\n_tile_ad_\n_top_ad.\n_top_ad_\n_topad.\n_tribalfusion.\n_UIM-Ads_\n_valueclick.\n_vertical_ad.\n_video_ads/\n_video_ads_\n_videoad.\n_vodaaffi_\n_web-advert.\n_Web_ad.\n_web_ad_\n_webad.\n_webad_\n_WebBannerAd_\n_widget_ad.\n_yahooads/\n_your_ad.\n_zedo.\ntakeover_background.\ntakeover_banner_\n||cacheserve.*/promodisplay/\n||cacheserve.*/promodisplay?\n||com/banners/$image,object,subdocument\n||online.*/promoredirect?key=\n||ox-d.*^auid=\n||serve.*/promoload?\n! linkbucks.com script\n/webservices/jsparselinks.aspx?$script\n! Common adserver string\n/mediahosting.engine$script,third-party\n/Tag.engine$script,third-party\n! White papers insert\n/sl/assetlisting/?\n! Peel script\n/jquery.peelback.js\n! Anti-Adblock\n/ad-blocker.js\n/adb_detector.\n/adblock-blocker/*\n/adblock_detector.\n/adblock_detector2.\n/adblock_logger.\n/adblockdetect.\n/adblockdetection.\n/adbuddy.\n/adsblocker.\n/anti-adblock/*$~stylesheet\n/anti_ab.\n/antiadblock.\n/blockblock/blockblock.jquery.js\n/FuckAdBlock-$script\n/fuckadblock.\n/no-adblock/*\n/wp-content/plugins/anti-block/*\n/wp-content/plugins/anti_ad_blocker/*\n! *** easylist:easylist/easylist_general_block_dimensions.txt ***\n,160x600;\n,468x60-\n,468x60;\n,728x90,\n,970x90;\n-120-600.\n-120_600_\n-120x240.\n-120x300.\n-120x400.\n-120x60-\n-120x60.\n-120x600-\n-120x600.\n-120x600_\n-120x600c.\n-125x40-\n-160-600.\n-160x400-\n-160x600-\n-160x600.\n-160x600_\n-160x600b.\n-161x601-\n-300-250.\n-300x250-$~xmlhttprequest\n-300x250_\n-300x600.\n-460x68.\n-468-100.\n-468-60-\n-468-60.\n-468-60_\n-468_60.\n-468by60.\n-468x060-\n-468x060_\n-468x60-\n-468x60.\n-468x60/\n-468x60_\n-468x60px-\n-468x70.\n-468x80-\n-468x80.\n-468x80/\n-468x80_\n-468x90.\n-480x120.\n-480x60-\n-480x60.\n-480x60/\n-480x60_\n-486x60.\n-500x100.\n-600x70.\n-600x90-\n-700-200.\n-720x120-\n-720x90-\n-720x90.\n-728-90.\n-728.90.\n-728x90&\n-728x90-\n-728x90.\n-728x90/\n-728x90_\n-728x90a_\n-728x90px2.\n-729x91-\n-780x90-\n-800x150.\n-980x60-\n-988x60.\n.120x600.\n.160x600.\n.160x600_\n.300x250.\n.300x250_\n.468x60-\n.468x60.\n.468x60/\n.468x60_\n.468x80-\n.468x80.\n.468x80/\n.468x80_\n.480x60-\n.480x60.\n.480x60/\n.480x60_\n.650x100.\n.728x90-\n.728x90.\n.728x90/\n.728x90_\n.900x100.\n/120-600-\n/120-600.\n/1200x70_\n/120_600.\n/120_600/*\n/120_600_\n/120x240_\n/120x600-\n/120x600.\n/120x600/*\n/120x600_\n/125x240/*\n/125x300_\n/125x400/*\n/125x600-\n/125x600_\n/130x600-\n/130x600.\n/150-500.\n/150_500.\n/150x200-\n/150x300_\n/150x600_\n/160-600-\n/160-600.\n/160.html$subdocument\n/160_600.\n/160_600_\n/160x400-\n/160x400_\n/160x600-\n/160x600.\n/160x600/*\n/160x600_\n/160x600partner.\n/170x700.\n/180x150-\n/190_900.\n/190x600.\n/230x90_\n/234x60/*\n/270x90-\n/300-250-\n/300-250.\n/300.html$subdocument\n/300_250_\n/300x150_\n/300x250-\n/300x250.\n/300x250/*\n/300x250_\n/300x250b.\n/300x250px-\n/300x250px_\n/300x350.\n/300x90_\n/320x250.\n/335x205_\n/336x280-\n/336x280.\n/336x280_\n/340x85_\n/4-6-8x60.\n/400x250/*\n/400x297.\n/428x60.\n/460x60.\n/460x80_\n/468-20.\n/468-60-\n/468-60.\n/468-60_\n/468_60.\n/468_60_\n/468_80.\n/468_80/*\n/468x060.\n/468x060_\n/468x280.\n/468x280_\n/468x60-\n/468x60.\n/468x60/*\n/468x60_\n/468x60a.\n/468x60a_\n/468x60b.\n/468x60v1_\n/468x70-\n/468x72.\n/468x72_\n/468x80-\n/468x80.\n/468x80/*\n/468x80_\n/468x80b.\n/468x80g.\n/470x030_\n/475x150-\n/480x030.\n/480x030_\n/480x60-\n/480x60.\n/480x60/*\n/480x60_\n/480x70_\n/486x60_\n/496_98_\n/500x90.\n/530x60_\n/540x80_\n/600-60.\n/600-90.\n/600_120_\n/600_90_\n/600x160_\n/600x75_\n/600x90.\n/60x468.\n/640x100/*\n/640x80-\n/660x120_\n/660x60.\n/700_100_\n/700_200.\n/700x100.\n/700x120.\n/700x250.\n/700x90.\n/728-90-\n/728-90.\n/728-90/*\n/728-90_\n/728.html$subdocument\n/728_200.\n/728_200_\n/728_90.\n/728_90/*\n/728_90_\n/728_90n.\n/728by90_\n/728x15.\n/728x180-\n/728x79_\n/728x90-\n/728x90.\n/728x90/*\n/728x901.\n/728x90?\n/728x90_\n/728x90b.\n/728x90b/*\n/728x90d.\n/728x90g.\n/728x90h.\n/728x90l.\n/728x90top.\n/750-100.\n/750x100.\n/760x120.\n/760x120_\n/760x90_\n/768x90-\n/768x90.\n/780x90.\n/800x90.\n/80x468_\n/900x130_\n/900x350_\n/950_250.\n/960_60_\n/980x90.\n/_iframe728x90.\n/ban468.\n/bottom728.html\n/bottom728x90.\n/head486x60.\n/img/468_60\n/img/728_90\n/L300xH250/*\n/lightake728x90.\n/new160x600/*\n/new300x250/*\n/top468.html\n/top728.html\n/top728x90.\n120-600.gif|\n120x500.gif|\n120x600.gif?\n120x600.gif|\n120x600.html|\n120x600.htm|\n120x600.png|\n120x600.swf?\n120x600.swf|\n125x600.gif|\n125x600.swf?\n125x600.swf|\n133x394.gif|\n160x300.gif|\n160x600.gif|\n160x600.html|\n160x600.htm|\n160x600.jpg|\n160x600.php?\n160x600.php|\n160x600.png|\n160x600.swf?\n160x600.swf|\n160x6001.jpg|\n450x55.jpg|\n460x70.jpg|\n468-60.gif|\n468-60.swf?\n468-60.swf|\n468_60.gif|\n468x60.gif|\n468x60.html|\n468x60.htm|\n468x60.jpg|\n468x60.php?\n468x60.php|\n468x60.swf?\n468x60.swf|\n468x60_1.gif|\n468x60_2.jpg|\n468x80.gif|\n470x60.gif|\n470x60.jpg|\n470x60.swf?\n470x60.swf|\n480x60.png|\n480x80.jpg|\n700_200.gif|\n700_200.jpg|\n700x200.gif|\n728x290.gif|\n728x90.gif|\n728x90.html|\n728x90.htm|\n728x90.jpg|\n728x90.php?\n728x90.php|\n728x90.png|\n728x90.swf?\n728x90.swf|\n728x90_2.jpg|\n750x80.swf|\n750x90.gif|\n760x90.jpg|\n80x468.jpg|\n=120x600,\n=120x600;\n=160x160;\n=160x600&\n=160x600,\n=160x600;\n=234x60;\n=234x60_\n=300x250&\n=300x250,\n=300x250/\n=300x250;\n=300x250_\n=300x300;\n=336x280,\n=336x280;\n=440x410;\n=468x60&\n=468x60,\n=468x60/\n=468x60;\n=468x60_\n=468x80_\n=480x60;\n=728x90&\n=728x90,\n=728x90/\n=728x90;\n=728x90_\n=760x120&\n=888x10;\n=900x60;\n_100x480_\n_115x220.\n_120_60.\n_120_600.\n_120_600_\n_120_x_600.\n_120h600.\n_120x240.\n_120x240_\n_120x500.\n_120x60.\n_120x600-\n_120x600.\n_120x600_\n_120x600a.\n_120x600px.\n_120x60_\n_120x800a.\n_125x600_\n_140x600.\n_140x600_\n_150x700_\n_160-600.\n_160_600.\n_160_600_\n_160by600_\n_160x1600.\n_160x290.\n_160x300.\n_160x300_\n_160x350.\n_160x400.\n_160x500.\n_160x600&\n_160x600-\n_160x600.\n_160x600/\n_160x600_\n_160x600b.\n_180x300_\n_180x450_\n_200x600_\n_300-250-\n_300.htm\n_300_250.\n_300_250_\n_300_60_\n_300x160_\n_300x250-\n_300x250.\n_300x250_\n_300x250a_\n_300x250b.\n_300x250px.\n_300x250v2.\n_300x600.\n_300x600_\n_320x250_\n_323x120_\n_336x120.\n_336x280_\n_336x280a.\n_336x280s.\n_336x850.\n_350_100.\n_350_100_\n_350x100.\n_370x270.\n_400-80.\n_400x60.\n_400x68.\n_420x80.\n_420x80_\n_438x50.\n_438x60.\n_438x60_\n_460_60.\n_460x60.\n_465x110_\n_468-60.\n_468.gif\n_468.htm\n_468_60-\n_468_60.\n_468_60_\n_468_80.\n_468_80_\n_468x060-\n_468x060.\n_468x060_\n_468x100.\n_468x100_\n_468x120.\n_468x60-\n_468x60.\n_468x60/\n_468x60_\n_468x60b.\n_468x60px_\n_468x6o_\n_468x80-\n_468x80.\n_468x80/\n_468x80_\n_468x90.\n_468x90_\n_480_60.\n_480_80_\n_480x60-\n_480x60.\n_480x60/\n_480x60_\n_486x60.\n_486x60_\n_490-90_\n_500x440.\n_540_70.\n_540_70_\n_550x150.\n_555x70.\n_580x100.\n_585x75-\n_585x75_\n_590x105.\n_600-90.\n_600x120_\n_600x160.\n_600x180.\n_600x80.\n_600x90.\n_620x203_\n_638x200_\n_650x350.\n_650x80_\n_672x120_\n_680x93_\n_682x90_\n_700_100_\n_700_150_\n_700_200_\n_700x200.\n_720_90.\n_720x90.\n_720x90_\n_728-90.\n_728-90_\n_728.htm\n_728_90.\n_728_90_\n_728_x_90_\n_728by90_\n_728x-90.\n_728x150.\n_728x60.\n_728x90&\n_728x90-\n_728x90.\n_728x90/\n_728x901.\n_728x90_\n_728x90a.\n_728x90a_\n_728x90b_\n_728x90pg_\n_728x90px-\n_728x90px.\n_728x90px_\n_728x90v1.\n_730_440.\n_730x60_\n_730x90_\n_745_60.\n_745_90.\n_750x100.\n_760x100.\n_760x90_\n_764x70.\n_764x70_\n_768x90_\n_796x110_\n_798x99_\n_800x100.\n_800x80_\n_80x468.\n_900x350.\n_936x60.\n_960_90.\n_970x30_\n_980x100.\n_a468x60.\n! *** easylist:easylist/easylist_general_block_popup.txt ***\n&link_type=offer$popup,third-party\n&program=revshare&$popup\n-ads-campaign/$popup\n.co/ads/$popup\n.com/?adv=$popup\n.com/ads?$popup\n.engine?PlacementId=$popup\n/?placement=*&redirect$popup\n/ad.php?tag=$popup\n/ad.php|$popup\n/ad/window.php?$popup\n/ad132m/*$popup\n/ad_pop.php?$popup\n/adclick.$popup\n/AdHandler.aspx?$popup\n/ads.htm$popup\n/adServe/sa?cid=$popup\n/adserver.$popup\n/adstream_sx.ads/*$popup\n/advlink.$popup\n/afu.php?$popup\n/bani/index.php?id=$popup\n/lr.php?zoneid=$popup\n/popout.$popup\n/popunder.$popup\n/popunder_$popup\n/popupads.$popup\n/promoredirect?*&campaign=*&zone=$popup\n/punder.php$popup\n/realmedia/ads/*$popup\n/Redirect.eng?$popup\n/Redirect.engine$popup\n/servlet/ajrotator/*$popup\n/spopunder^$popup\n://ads.$popup\n://adv.$popup\n=popunder&$popup\n=popunders&$popup\n?AdUrl=$popup\n?bannerid=*&punder=$popup\n?zoneid=*_bannerid=$popup\n_popunder+$popup\n!------------------------General element hiding rules-------------------------!\n! *** easylist:easylist/easylist_general_hide.txt ***\n###A9AdsMiddleBoxTop\n###A9AdsOutOfStockWidgetTop\n###A9AdsServicesWidgetTop\n###AD-300x250\n###AD-HOME-LEFT\n###AD1line\n###AD2line\n###AD300_VAN\n###AD300x250\n###AD300x600\n###ADEXPERT_PUSHDOWN\n###ADEXPERT_RECTANGLE\n###ADInterest\n###ADNETwallBanner1\n###ADNETwallBanner2\n###ADSLOT_1\n###ADSLOT_2\n###ADSLOT_3\n###ADSLOT_4\n###ADSLOT_SKYSCRAPER\n###ADS_2\n###ADSlideshow\n###ADSpro\n###ADV120x90\n###ADVERTISE_HERE_ROW\n###ADVleaderboard\n###AD_160\n###AD_300\n###AD_468x60\n###AD_C\n###AD_CONTROL_13\n###AD_CONTROL_22\n###AD_CONTROL_28\n###AD_CONTROL_29\n###AD_CONTROL_8\n###AD_G\n###AD_ROW\n###AD_Top\n###AD_Zone\n###AD_banner\n###AD_banner_bottom\n###AD_gallery\n###AD_google\n###AD_half\n###AD_newsblock\n###AD_rectangle\n###AD_rr_a\n###ADgoogle_newsblock\n###ADoverThePlayer\n###ADsmallWrapper\n###AFF_popup\n###APC_ads_details\n###AUI_A9AdsMiddleBoxTop\n###Ad-0-0-Slider\n###Ad-0-1-Slider\n###Ad-1-0-Slider\n###Ad-1-1-Slider\n###Ad-1-2-Slider\n###Ad-3-Slider\n###Ad-4-Slider\n###Ad-5-2-Slider\n###Ad-8-0-Slider\n###Ad-9-0-Slider\n###Ad-Container\n###Ad-Top\n###Ad160x600\n###Ad160x600_0_adchoice\n###Ad300x145\n###Ad300x250\n###Ad300x250_0\n###Ad300x600_0_adchoice\n###Ad3Left\n###Ad3Right\n###Ad3TextAd\n###Ad728x90\n###Ad990\n###AdAboveGame\n###AdArea\n###AdAreaH\n###AdAuth1\n###AdAuth2\n###AdAuth3\n###AdAuth4\n###AdBanner\n###AdBannerSmallContainer\n###AdBanner_F1\n###AdBanner_S\n###AdBar\n###AdBar1\n###AdBigBox\n###AdBlock\n###AdBlockBottomSponsor\n###AdBottomLeader\n###AdBottomRight\n###AdBox160\n###AdBox2\n###AdBox300\n###AdBox728\n###AdBoxMoreGames\n###AdButtons\n###AdColumn\n###AdContainer\n###AdContainerTop\n###AdContentModule_F\n###AdContent_0_0_pnlDiv\n###AdControl_TowerAd\n###AdDetails_GoogleLinksBottom\n###AdDetails_InsureWith\n###AdDetails_SeeMoreLink\n###AdDisclaimer\n###AdDisplay_LongLink\n###AdDisplay_TallLink\n###AdDiv\n###AdExtraBlock\n###AdFeedbackLinkID_lnkItem\n###AdFoxDiv\n###AdFrame1\n###AdFrame2\n###AdFrame4\n###AdHeader\n###AdHouseRectangle\n###AdImage\n###AdIndexTower\n###AdLayer1\n###AdLayer2\n###AdLeaderboard2RunofSite\n###AdLeaderboardBottom\n###AdLeaderboardTop\n###AdLocationMarketPage\n###AdMPUHome\n###AdMediumRectangle1300x250\n###AdMediumRectangle2300x250\n###AdMiddle\n###AdMobileLink\n###AdPanel\n###AdPanelBigBox\n###AdPanelLogo\n###AdPopUp\n###AdRectangle\n###AdRectangleBanner\n###AdSense-Skyscraper\n###AdSense1\n###AdSense2\n###AdSense3\n###AdSenseBottomAds\n###AdSenseDiv\n###AdSenseMiddleAds\n###AdSenseResults1_adSenseSponsorDiv\n###AdSenseTopAds\n###AdServer\n###AdShopSearch\n###AdShowcase\n###AdShowcase_F\n###AdShowcase_F1\n###AdSky23\n###AdSkyscraper\n###AdSlot_AF-Right-Multi\n###AdSpaceLeaderboard\n###AdSpacing\n###AdSponsor_SF\n###AdSpotMovie\n###AdSquare02\n###AdSubsectionShowcase_F1\n###AdTaily_Widget_Container\n###AdTargetControl1_iframe\n###AdTop\n###AdTopBlock\n###AdTopLeader\n###AdWidgetContainer\n###AdZone1\n###AdZone2\n###Ad_976x105\n###Ad_BelowContent\n###Ad_Block\n###Ad_Center1\n###Ad_Premier\n###Ad_Right1\n###Ad_RightBottom\n###Ad_RightTop\n###Ad_TopLeaderboard\n###Adbanner\n###Adc1_AdContainer\n###Adc2_AdContainer\n###Adc3_AdContainer\n###AdcBB_AdContainer\n###Adcode\n###Adrectangle\n###Ads470by50\n###AdsBannerTop\n###AdsBottomContainer\n###AdsBottomIframe\n###AdsCarouselBoxArea\n###AdsContainerTop\n###AdsContent\n###AdsContent_SearchShortRecB_UPSSR\n###AdsDiv\n###AdsFrame\n###AdsHome2\n###AdsLeader\n###AdsLeft_1\n###AdsPlayRight_1\n###AdsRight\n###AdsShowCase\n###AdsTopContainer\n###AdsVideo250\n###AdsWrap\n###Ads_BA_BUT_box\n###Ads_BA_CAD\n###Ads_BA_CAD2\n###Ads_BA_CAD2_Text\n###Ads_BA_CAD_box\n###Ads_BA_FLB\n###Ads_BA_SKY\n###Ads_CAD\n###Ads_OV_BS\n###Ads_Special\n###Ads_google_01\n###Ads_google_02\n###Ads_google_03\n###Ads_google_04\n###Ads_google_05\n###Adsense300x250\n###Adtag300x250Bottom\n###Adtag300x250Top\n###Adv10\n###Adv11\n###Adv8\n###Adv9\n###AdvArea\n###AdvBody\n###AdvContainer\n###AdvContainerBottom\n###AdvContainerMiddleRight\n###AdvContainerTopCenter\n###AdvContainerTopRight\n###AdvFooter\n###AdvFrame1\n###AdvHead\n###AdvHeader\n###Adv_Footer\n###Adv_Main_content\n###Advert1\n###AdvertMPU23b\n###AdvertPanel\n###AdvertText\n###AdvertiseFrame\n###Advertisement1\n###AdvertisementRightColumnRectangle\n###Advertisements\n###AdvertisingLeaderboard\n###AdvertismentHomeTopRight\n###Advertorial\n###Advertorials\n###AdvertsBottom\n###AdvertsBottomR\n###Adverts_AdDetailsBottom_300x600\n###Adverts_AdDetailsMiddle_300x250\n###ArticleBottomAd\n###BANNER_160x600\n###BANNER_300x250\n###BANNER_728x90\n###BBCPH_MCPH_MCPH_P_ArticleAd1\n###BBCPH_MCPH_MCPH_P_OasAdControl1Panel\n###BBCPH_MCPH_MCPH_P_OasAdControl2Panel\n###BBCPH_MCPH_MCPH_SponsoredLinks1\n###BBoxAd\n###BDV_fullAd\n###BackgroundAdContainer\n###Banner300x250Module\n###Banner728x90\n###BannerAd\n###BannerAds\n###BannerAdvert\n###BannerAdvertisement\n###BannerXGroup\n###BelowFoldAds\n###BigBoxAd\n###BigboxAdUnit\n###BillBoardAdd\n###BodyAd\n###BotAd\n###Bottom468x60AD\n###BottomAd0\n###BottomAdContainer\n###BottomAdSpacer\n###BottomAds\n###BottomPageAds\n###BrokerBox-AdContainer\n###ButtonAd\n###CONTENTAD\n###CSpromo120x90\n###ClickPop_LayerPop_Container\n###CommonHeaderAd\n###CompanyDetailsNarrowGoogleAdsPresentationControl\n###CompanyDetailsWideGoogleAdsPresentationControl\n###ContentAd\n###ContentAd1\n###ContentAd2\n###ContentAdPlaceHolder1\n###ContentAdPlaceHolder2\n###ContentAdView\n###ContentAdXXL\n###ContentAdtagRectangle\n###ContentPlaceHolder1_adds\n###ContentPlaceHolder1_advertControl1_advertLink\n###ContentPlaceHolder1_advertControl3_advertLink\n###ContentPolepositionAds_Result\n###ConversationDivAd\n###CornerAd\n###CountdownAdvert\n###DARTad300x250\n###DEFAULT_ADV4_SWF\n###DFM-adPos-bottomline\n###DFPAD_MR\n###DFP_in_article_mpu\n###DFP_top_leaderboard\n###DartAd300x250\n###DartAd990x90\n###DealsPageSideAd\n###DivAd\n###DivAd1\n###DivAd2\n###DivAd3\n###DivAdA\n###DivAdB\n###DivAdC\n###DivAdEggHeadCafeTopBanner\n###DivAdForumSplitBottom\n###DivMsnCamara\n###DivTopAd\n###DividerAd\n###FFN_imBox_Container\n###FIN_300_250_position2_ad\n###FIN_300_x_250_600_position2_ad\n###FIN_300x250_pos1_ad\n###FIN_300x80_facebook_ad\n###FIN_468x60_sponsor_ad\n###FIN_640x60_promo_ad\n###FIN_728_90_leaderboard_ad\n###FIN_ad_300x100_pos_1\n###FIN_videoplayer_300x250ad\n###FooterAd\n###FooterAdBlock\n###FooterAdContainer\n###ForumSponsorBanner\n###Freeforums-AdS-footer-728x90\n###Freeforums-AdS-header-728x90\n###FrontPageRectangleAd\n###GOOGLEADS_BOT\n###GOOGLEADS_CENTER\n###GOOGLE_ADS_13\n###GOOGLE_ADS_151\n###GOOGLE_ADS_16\n###GOOGLE_ADS_2\n###GOOGLE_ADS_49\n###GOOGLE_ADS_56\n###GOOGLE_ADS_94\n###GameMediumRectangleAD\n###GamePageAdDiv\n###GoogleADsense\n###GoogleADthree\n###GoogleAd\n###GoogleAd1\n###GoogleAd2\n###GoogleAd3\n###GoogleAdExploreMF\n###GoogleAdRight\n###GoogleAdTop\n###GoogleAds250X200\n###GoogleAdsPlaceHolder\n###GoogleAdsPresentationControl\n###GoogleAdsense\n###GoogleAdsenseMerlinWrapper\n###GoogleLeaderBoardAdUnit\n###GoogleLeaderBoardAdUnitSeperator\n###GoogleRelatedAds\n###GoogleSponsored\n###Google_Adsense_Main\n###HALExchangeAds\n###HALHouseAd\n###HB_News-ad\n###HEADERAD\n###HOME_TOP_RIGHT_BOXAD\n###HP_adUnits\n###H_Ad_728x90\n###H_Ad_Wrap\n###HeaderAD\n###HeaderAdBlock\n###HeaderAdSidebar\n###HeaderAdsBlock\n###HeaderAdsBlockFront\n###HeaderBannerAdSpacer\n###HeaderTextAd\n###HeroAd\n###HomeAd1\n###HomeBannerAd\n###Home_AdSpan\n###HomepageAdSpace\n###HorizontalAd\n###HouseAd\n###HouseAdInsert\n###ID_Ad_Sky\n###IM_AD\n###IN_HOUSE_AD_SWITCHER_0\n###IframeAdBannerSmallContainer\n###ImageAdSideColumn\n###ImageRotaAreaAD\n###IslandAd_DeferredAdSpacediv\n###JobsearchResultsAds\n###Journal_Ad_125\n###Journal_Ad_300\n###JuxtapozAds\n###KH-contentAd\n###LB_Row_Ad\n###LargeRectangleAd\n###LeaderTop-ad\n###LeaderboardAdvertising\n###LeaderboardNav_ad_placeholder\n###LeftAd\n###LeftAd1\n###LeftAdF1\n###LeftAdF2\n###LeftSideBarAD\n###LftAd\n###LittleAdvert\n###LoungeAdsDiv\n###LovelabAdoftheDay\n###LowerContentAd\n###MAINAD-box\n###MPUAdSpace\n###MPUadvertising\n###MPUadvertisingDetail\n###M_AD\n###MainAd\n###MainAd1\n###MainContent_ucTopRightAdvert\n###MainSponsoredLinks\n###MastheadAd\n###MediumRectangleAD\n###Meebo\\:AdElement\\.Root\n###MidPageAds\n###Module-From_Advertisers\n###MyAdHeader\n###MyAdSky\n###NavAD\n###Nightly_adContainer\n###NormalAdModule\n###OAS2\n###OAS_AD_TOPRIGHT\n###OAS_Top\n###OAS_posBottom\n###OAS_posRight\n###OAS_posTopRight\n###OpenXAds\n###OverrideAdArea\n###PPX_imBox_Container\n###PREFOOTER_LEFT_BOXAD\n###PREFOOTER_RIGHT_BOXAD\n###PageLeaderAd\n###PaneAdvertisingContainer\n###PhotoAd1\n###PostSponsorshipContainer\n###PreRollAd\n###RHS2Adslot\n###RadAdSkyscraper\n###RadAd_Skyscraper\n###RelevantAds\n###RgtAd1\n###RhsIsland_DeferredAdSpacediv\n###RightAd\n###RightAdBlock\n###RightAdSpace\n###RightAdvertisement\n###RightBottom300x250AD\n###RightColumn125x125AD\n###RightColumnSkyScraperAD\n###RightNavTopAdSpot\n###RightRailSponsor\n###RightSponsoredAd\n###RollOutAd970x66\n###RollOutAd970x66iframe\n###SE20-ad-container\n###SE_ADLINK_LAY_gd\n###SIDEMENUAD\n###SRPadsContainer\n###ScoreboardAd\n###SearchAd_PlaceHolder\n###SearchAdsBottom\n###SearchAdsTop\n###Section-Ads\n###SectionAd300-250\n###SectionSponsorAd\n###SideAdMpu\n###SideBarAdWidget\n###SideMpuAdBar\n###SidebarAdContainer\n###SkyAd\n###SpecialAds\n###Spons-Link\n###SponsorBarWrap\n###SponsoredAd\n###SponsoredAds\n###SponsoredLinks\n###SponsoredResultsTop\n###SponsorsAds\n###TDads\n###TL_footer_advertisement\n###TOPADS\n###TOP_ADROW\n###TOP_RIGHT_BOXAD\n###TPVideoPlayerAd300x250\n###Tadspacecbar\n###Tadspacefoot\n###Tadspacehead\n###Tadspacemrec\n###TextLinkAds\n###ThreadAd\n###TipTopAdSpace\n###TitleAD\n###Top-Ad-Container\n###Top468x60AD\n###TopAd\n###TopAd0\n###TopAdBox\n###TopAdContainer\n###TopAdDiv\n###TopAdPlacement\n###TopAdPos\n###TopAdTable\n###TopAdvert\n###TopBannerAd\n###TopGoogleCustomAd\n###TopSideAd\n###VM-MPU-adspace\n###VM-footer-adspace\n###VM-footer-adwrap\n###VM-header-adspace\n###VM-header-adwrap\n###VertAdBox\n###VertAdBox0\n###WNAd1\n###WNAd103\n###WNAd17\n###WNAd20\n###WNAd41\n###WNAd43\n###WNAd46\n###WNAd47\n###WNAd49\n###WNAd52\n###WNAd63\n###WarningCodecBanner\n###WelcomeAd\n###WindowAdHolder\n###XEadLeaderboard\n###XEadSkyscraper\n###YahooAdParentContainer\n###YahooAdsContainer\n###YahooAdsContainerPowerSearch\n###YahooContentAdsContainerForBrowse\n###YahooSponsoredResults\n###_ads\n###a4g-floating-ad\n###a_ad10Sp\n###a_ad11Sp\n###abHeaderAdStreamer\n###ab_adblock\n###about_adsbottom\n###above-comments-ad\n###above-fold-ad\n###above-footer-ads\n###aboveAd\n###aboveGbAd\n###aboveNodeAds\n###aboveplayerad\n###abovepostads\n###acAdContainer\n###acm-ad-tag-300x250-atf\n###acm-ad-tag-300x250-btf\n###acm-ad-tag-728x90-atf\n###acm-ad-tag-728x90-btf\n###ad-0\n###ad-1\n###ad-1000x90-1\n###ad-109\n###ad-118\n###ad-120-left\n###ad-120x600-1\n###ad-120x600-other\n###ad-120x600-sidebar\n###ad-120x60Div\n###ad-125x125\n###ad-13\n###ad-133\n###ad-143\n###ad-160\n###ad-160-long\n###ad-160x600\n###ad-160x600-sidebar\n###ad-160x600-wrapper\n###ad-162\n###ad-17\n###ad-170\n###ad-180x150-1\n###ad-19\n###ad-197\n###ad-2\n###ad-2-160x600\n###ad-21\n###ad-213\n###ad-220x90-1\n###ad-230x100-1\n###ad-240x400-1\n###ad-240x400-2\n###ad-250\n###ad-250x300\n###ad-28\n###ad-29\n###ad-3\n###ad-3-300x250\n###ad-300\n###ad-300-250\n###ad-300-additional\n###ad-300-detail\n###ad-300-sidebar\n###ad-300a\n###ad-300b\n###ad-300x-container\n###ad-300x250\n###ad-300x250-01\n###ad-300x250-02\n###ad-300x250-1\n###ad-300x250-2\n###ad-300x250-right\n###ad-300x250-right0\n###ad-300x250-sidebar\n###ad-300x250-wrapper\n###ad-300x250Div\n###ad-300x40-1\n###ad-300x40-2\n###ad-300x40-5\n###ad-300x60-1\n###ad-32\n###ad-320\n###ad-336\n###ad-350\n###ad-37\n###ad-376x280\n###ad-4\n###ad-4-300x90\n###ad-5-images\n###ad-55\n###ad-63\n###ad-635x40-1\n###ad-655\n###ad-7\n###ad-728\n###ad-728-90\n###ad-728x90\n###ad-728x90-1\n###ad-728x90-leaderboard-top\n###ad-728x90-top\n###ad-728x90-top0\n###ad-74\n###ad-88\n###ad-88-wrap\n###ad-970\n###ad-98\n###ad-a\n###ad-a1\n###ad-abs-b-0\n###ad-abs-b-1\n###ad-abs-b-10\n###ad-abs-b-2\n###ad-abs-b-3\n###ad-abs-b-4\n###ad-abs-b-5\n###ad-abs-b-6\n###ad-abs-b-7\n###ad-absolute-160\n###ad-ads\n###ad-adsensemedium\n###ad-advertorial\n###ad-affiliate\n###ad-area\n###ad-article\n###ad-article-in\n###ad-background\n###ad-ban\n###ad-banner\n###ad-banner-1\n###ad-banner-970\n###ad-banner-980\n###ad-banner-atf\n###ad-banner-body-top\n###ad-banner-bottom\n###ad-banner-image\n###ad-banner-top\n###ad-banner-wrap\n###ad-bar\n###ad-base\n###ad-beauty\n###ad-below-content\n###ad-bg\n###ad-big\n###ad-bigbox\n###ad-bigsize\n###ad-billboard\n###ad-billboard-atf\n###ad-billboard-bottom\n###ad-blade\n###ad-block\n###ad-block-125\n###ad-block-bottom\n###ad-block-container\n###ad-border\n###ad-bottom\n###ad-bottom-300x250\n###ad-bottom-banner\n###ad-bottom-right-container\n###ad-bottom-wrapper\n###ad-bottomright\n###ad-box\n###ad-box-1\n###ad-box-2\n###ad-box-bottom\n###ad-box-first\n###ad-box-second\n###ad-box1\n###ad-box2\n###ad-boxATF\n###ad-boxes\n###ad-br-container\n###ad-bs\n###ad-btm\n###ad-buttons\n###ad-campaign\n###ad-carousel\n###ad-case\n###ad-center\n###ad-circfooter\n###ad-code\n###ad-col\n###ad-colB-1\n###ad-column\n###ad-container\n###ad-container-1\n###ad-container-2\n###ad-container-adaptive-1\n###ad-container-adaptive-3\n###ad-container-fullpage\n###ad-container-inner\n###ad-container-leaderboard\n###ad-container-outer\n###ad-contentad\n###ad-cube-Bottom\n###ad-cube-Middle\n###ad-cube-sec\n###ad-cube-top\n###ad-desktop-wrap\n###ad-discover\n###ad-display-ad\n###ad-div-leaderboard\n###ad-double-spotlight-container\n###ad-e-container\n###ad-ear\n###ad-extra-flat\n###ad-f-container\n###ad-featured-right\n###ad-first-post\n###ad-five\n###ad-five-75x50s\n###ad-flex-first\n###ad-flex-top\n###ad-footer\n###ad-footer-728x90\n###ad-footprint-160x600\n###ad-for-map\n###ad-frame\n###ad-framework-top\n###ad-front-btf\n###ad-front-footer\n###ad-front-page-160x600-placeholder\n###ad-front-sponsoredlinks\n###ad-fullbanner-btf\n###ad-fullbanner-outer\n###ad-fullbanner2\n###ad-fullwidth\n###ad-giftext\n###ad-globalleaderboard\n###ad-google-chrome-sidebar\n###ad-googleAdSense\n###ad-gutter-left\n###ad-gutter-right\n###ad-halfpage\n###ad-header\n###ad-header-728x90\n###ad-header-left\n###ad-header-right\n###ad-holder\n###ad-homepage-content-well\n###ad-homepage-top-wrapper\n###ad-horizontal-header\n###ad-horizontal-top\n###ad-img\n###ad-in-post\n###ad-index\n###ad-inner\n###ad-inside1\n###ad-inside2\n###ad-introtext\n###ad-label\n###ad-label2\n###ad-large-header\n###ad-lb\n###ad-lb-secondary\n###ad-ldr-spot\n###ad-leader\n###ad-leader-atf\n###ad-leader-container\n###ad-leaderboard\n###ad-leaderboard-1\n###ad-leaderboard-1-container\n###ad-leaderboard-2\n###ad-leaderboard-2-container\n###ad-leaderboard-bottom\n###ad-leaderboard-container\n###ad-leaderboard-footer\n###ad-leaderboard-spot\n###ad-leaderboard-top\n###ad-leadertop\n###ad-left\n###ad-left-sidebar-ad-1\n###ad-left-sidebar-ad-2\n###ad-left-sidebar-ad-3\n###ad-links-content\n###ad-list-row\n###ad-lrec\n###ad-main\n###ad-main-bottom\n###ad-main-top\n###ad-makeup\n###ad-manager\n###ad-manager-ad-bottom-0\n###ad-manager-ad-top-0\n###ad-medium\n###ad-medium-lower\n###ad-medium-rectangle\n###ad-medrec\n###ad-medrec_premium\n###ad-megaban2\n###ad-mid-rect\n###ad-middle\n###ad-middlethree\n###ad-middletwo\n###ad-midpage\n###ad-minibar\n###ad-module\n###ad-mpu\n###ad-mpu-warning\n###ad-mpu1-spot\n###ad-mpu2\n###ad-mpu2-spot\n###ad-mrec\n###ad-mrec2\n###ad-new\n###ad-north\n###ad-north-base\n###ad-northeast\n###ad-one\n###ad-other\n###ad-overlay\n###ad-panel\n###ad-pencil\n###ad-placard\n###ad-placeholder\n###ad-placement\n###ad-plate\n###ad-popup1\n###ad-position-a\n###ad-post\n###ad-push\n###ad-pushdown\n###ad-r\n###ad-rbkua\n###ad-rec-atf\n###ad-rec-btf-top\n###ad-recommend\n###ad-rect\n###ad-rectangle\n###ad-rectangle-flag\n###ad-rectangle1\n###ad-rectangle1-outer\n###ad-rectangle2\n###ad-rectangle3\n###ad-region-1\n###ad-results\n###ad-rian\n###ad-right\n###ad-right-3\n###ad-right-sidebar-ad-1\n###ad-right-sidebar-ad-2\n###ad-right-skyscraper-container\n###ad-right-top\n###ad-right2\n###ad-right3\n###ad-righttop\n###ad-rotator\n###ad-row\n###ad-row-1\n###ad-s1\n###ad-safe\n###ad-section\n###ad-separator\n###ad-shop\n###ad-side\n###ad-side-text\n###ad-sidebar\n###ad-sidebar-1\n###ad-sidebar-2\n###ad-sidebar-3\n###ad-sidebar-300x80\n###ad-sidebar-btf\n###ad-sidebar-container\n###ad-sidebar1\n###ad-sidebar2\n###ad-single-spotlight-container\n###ad-skin\n###ad-sky\n###ad-sky-atf\n###ad-sky-btf\n###ad-skyscraper\n###ad-skyscraper-feedback\n###ad-sla-sidebar300x250\n###ad-slot-1\n###ad-slot-2\n###ad-slot-4\n###ad-slot-right\n###ad-slot1\n###ad-slug-wrapper\n###ad-small-banner\n###ad-software-description-300x250-placeholder\n###ad-software-sidebar-300x250-placeholder\n###ad-space\n###ad-space-1\n###ad-space-2\n###ad-space-big\n###ad-special\n###ad-splash\n###ad-sponsored-traffic\n###ad-sponsors\n###ad-spot\n###ad-spot-bottom\n###ad-spot-one\n###ad-squares\n###ad-story-bottom-in\n###ad-story-bottom-out\n###ad-story-right\n###ad-story-top\n###ad-stripe\n###ad-tab\n###ad-tail-placeholder\n###ad-tape\n###ad-target\n###ad-target-Leaderbord\n###ad-teaser\n###ad-techwords\n###ad-text\n###ad-textad-single\n###ad-three\n###ad-tlr-spot\n###ad-top\n###ad-top-300x250\n###ad-top-banner\n###ad-top-banner-placeholder\n###ad-top-leaderboard\n###ad-top-left\n###ad-top-right\n###ad-top-right-container\n###ad-top-text-low\n###ad-top-wrap\n###ad-top-wrapper\n###ad-tower\n###ad-tower1\n###ad-trailerboard-spot\n###ad-two\n###ad-typ1\n###ad-unit\n###ad-uprrail1\n###ad-video\n###ad-west\n###ad-wide-leaderboard\n###ad-wrap\n###ad-wrap-right\n###ad-wrapper\n###ad-wrapper-728x90\n###ad-wrapper-left\n###ad-wrapper-right\n###ad-wrapper1\n###ad-yahoo-simple\n###ad-zone-1\n###ad-zone-2\n###ad-zone-inline\n###ad001\n###ad002\n###ad01\n###ad02\n###ad1-468x400\n###ad1-home\n###ad1-wrapper\n###ad1006\n###ad101\n###ad10Sp\n###ad11\n###ad11Sp\n###ad120x600\n###ad120x600container\n###ad120x60_override\n###ad125B\n###ad125BL\n###ad125BR\n###ad125TL\n###ad125TR\n###ad125x125\n###ad160\n###ad160-2\n###ad160Container\n###ad160Wrapper\n###ad160a\n###ad160x600\n###ad160x600right\n###ad180\n###ad1Sp\n###ad1_top-left\n###ad2-home\n###ad2-label\n###ad2-original-placeholder\n###ad250\n###ad260x60\n###ad2CONT\n###ad2Sp\n###ad2_footer\n###ad2_iframe\n###ad2_inline\n###ad2gameslayer\n###ad300\n###ad300-250\n###ad300-title\n###ad300250top\n###ad300IndexBox\n###ad300X250\n###ad300_250\n###ad300_a\n###ad300_x_250\n###ad300b\n###ad300c\n###ad300text\n###ad300top\n###ad300x100Middle\n###ad300x150\n###ad300x250\n###ad300x250Module\n###ad300x250_336x280_300x600_336x850\n###ad300x250_336x280_bottom\n###ad300x250_callout\n###ad300x250box\n###ad300x250box2\n###ad300x250c\n###ad300x50\n###ad300x60\n###ad300x600\n###ad300x600_callout\n###ad31\n###ad32\n###ad330x240\n###ad336\n###ad336atf\n###ad336iiatf\n###ad336x280\n###ad375x85\n###ad3Article\n###ad3small\n###ad468\n###ad468_hidden\n###ad468x60\n###ad468x60-story\n###ad468x60_top\n###ad470\n###ad508x125\n###ad520x85\n###ad526x250\n###ad5_inline\n###ad6\n###ad600\n###ad650\n###ad720x90bot\n###ad728\n###ad72890foot\n###ad728Bottom\n###ad728Box\n###ad728BoxBtm\n###ad728Header\n###ad728Mid\n###ad728Top\n###ad728Wrapper\n###ad728X90\n###ad728foot\n###ad728h\n###ad728top\n###ad728x90\n###ad728x90_1\n###ad728x90asme\n###ad728x90box\n###ad76890topContainer\n###ad768top1\n###ad90\n###ad97090\n###adAd\n###adBadges\n###adBanner\n###adBanner10\n###adBanner120x600\n###adBanner160x600\n###adBanner160x610\n###adBanner2\n###adBanner3\n###adBanner336x280\n###adBanner4\n###adBanner728\n###adBanner728_bot\n###adBanner9\n###adBannerBottom\n###adBannerBreaking\n###adBannerSpacer\n###adBannerTable\n###adBannerTop\n###adBannerWrap\n###adBannerWrapperFtr\n###adBar\n###adBelt\n###adBlock01\n###adBlock125\n###adBlockContainer\n###adBlockContent\n###adBlockOverlay\n###adBlockTop\n###adBlocks\n###adBottbanner\n###adBottom\n###adBox\n###adBox11\n###adBox16\n###adBox350\n###adBox390\n###adBoxUpperRight\n###adBrandDev\n###adBreak\n###adCENTRAL\n###adCTXSp\n###adChannel\n###adChoiceFooter\n###adChoices\n###adChoicesIcon\n###adChoicesLogo\n###adCirc300X200\n###adCirc300X250\n###adCirc300x300\n###adCirc620X100\n###adCirc_620_100\n###adClickLeft\n###adClickMe\n###adClickRight\n###adCol\n###adColumn\n###adColumn3\n###adCompanionBanner\n###adCompanionSubstitute\n###adComponentWrapper\n###adContainerCC\n###adContainerForum\n###adContainer_1\n###adContainer_2\n###adContainer_3\n###adContent\n###adContentHolder\n###adContext\n###adControl1\n###adDailyDeal\n###adDiv\n###adDiv0\n###adDiv1\n###adDiv300\n###adDiv4\n###adDiv728\n###adDivContainer\n###adFiller\n###adFixFooter\n###adFlashDiv\n###adFooter\n###adFooterTitel\n###adFot\n###adFoxBanner\n###adFps\n###adFrame\n###adFtofrs\n###adGallery\n###adGmWidget\n###adGoogleText\n###adGroup1\n###adGroup4\n###adHeader\n###adHeaderTop\n###adHeaderWrapper\n###adHolder\n###adHolder1\n###adHolder2\n###adHolder3\n###adHolder300x250\n###adHolder4\n###adHolder5\n###adHolder6\n###adIframe\n###adInBetweenPosts\n###adInCopy\n###adInstoryOneWrap\n###adInstoryTwoWrap\n###adInteractive1\n###adInteractive4\n###adInteractiveInline\n###adIsland\n###adLB\n###adLContain\n###adLabel\n###adLayer\n###adLeader\n###adLeaderTop\n###adLeaderboard\n###adLeaderboard-middle\n###adLeaderboardUp\n###adLeft\n###adLink\n###adLink1\n###adLink300\n###adLocation-1\n###adLocation-2\n###adLocation-3\n###adLocation-4\n###adLounge\n###adLrec\n###adMOBILETOP\n###adMPU\n###adMPUHolder\n###adMagAd\n###adMarketplace\n###adMed\n###adMedRect\n###adMediaWidget\n###adMediumRectangle\n###adMeld\n###adMessage\n###adMid1\n###adMid2\n###adMiddle0Frontpage\n###adMiddle_imgAd\n###adMiniPremiere\n###adMonster1\n###adMpu\n###adMpuBottom\n###adNshareWrap\n###adOne\n###adOuter\n###adPLaceHolderTop728\n###adPUSHDOWNBANNER\n###adPageContainer\n###adPanelAjaxUpdate\n###adPlaceHolder1\n###adPlaceHolder2\n###adPlaceHolderRight\n###adPlacer\n###adPopover\n###adPosOne\n###adPosition0\n###adPosition14\n###adPosition5\n###adPosition6\n###adPosition7\n###adPosition9\n###adPush\n###adRContain\n###adRight\n###adRight1\n###adRight2\n###adRight3\n###adRight4\n###adRight5\n###adRightColumnHolder\n###adSPLITCOLUMNTOPRIGHT\n###adScraper\n###adSense\n###adSenseBottomDiv\n###adSenseBox\n###adSenseContentTop\n###adSenseLoadingPlaceHolder\n###adSenseModule\n###adSenseResultAdblock\n###adSenseResults\n###adSenseSidebarBottom\n###adSenseTall\n###adSenseWrapper\n###adServer_marginal\n###adSet\n###adShortTower\n###adSideButton\n###adSidebar\n###adSidebarSq\n###adSite\n###adSkin\n###adSkinBackdrop\n###adSky\n###adSkyPosition\n###adSkyscraper\n###adSlider\n###adSlot-inPage-300x250-right\n###adSlot01\n###adSlot02\n###adSlot2\n###adSlot3\n###adSlot4\n###adSlug\n###adSpace\n###adSpace0\n###adSpace1\n###adSpace10\n###adSpace11\n###adSpace12\n###adSpace13\n###adSpace14\n###adSpace15\n###adSpace16\n###adSpace17\n###adSpace18\n###adSpace19\n###adSpace2\n###adSpace20\n###adSpace21\n###adSpace22\n###adSpace23\n###adSpace24\n###adSpace25\n###adSpace3\n###adSpace300_ifrMain\n###adSpace4\n###adSpace5\n###adSpace6\n###adSpace7\n###adSpace8\n###adSpace9\n###adSpaceBottom\n###adSpace_footer\n###adSpace_right\n###adSpace_top\n###adSpacer\n###adSpecial\n###adSplotlightEm\n###adSponsor\n###adSpot-Leader\n###adSpot-banner\n###adSpot-island\n###adSpot-mrec1\n###adSpot-promobox1\n###adSpot-promobox2\n###adSpot-sponsoredlinks\n###adSpot-textbox1\n###adSpot-twin\n###adSpot-widestrip\n###adSpotAdvertorial\n###adSpotIsland\n###adSpotIslandLarge\n###adSpotSponsoredLinks\n###adSpotholder-EGN\n###adSpotlightSquare1\n###adSqb\n###adSquare\n###adStaticA\n###adStrip\n###adSuperAd\n###adSuperPremiere\n###adSuperSkyscraper\n###adSuperbanner\n###adTableCell\n###adTag\n###adTag-genre\n###adTag1\n###adTag2\n###adTeaser\n###adText\n###adTextCustom\n###adTextLink\n###adTextRt\n###adText_container\n###adThree\n###adTicker\n###adTiff\n###adTile\n###adTop\n###adTop1\n###adTop2\n###adTopBanner-inner\n###adTopBanner1\n###adTopBox300x300\n###adTopContent\n###adTopModule\n###adTopbanner\n###adTopboxright\n###adTower\n###adTower1\n###adTower2\n###adTwo\n###adUn_1\n###adUn_2\n###adUn_3\n###adUnit\n###adValue\n###adVcss\n###adWideSkyscraper\n###adWrap\n###adWrapper1\n###adWrapperLeft\n###adWrapperRight\n###adZoneTop\n###ad_0\n###ad_02\n###ad_03\n###ad_04\n###ad_1\n###ad_120_sidebar\n###ad_120x600\n###ad_120x90\n###ad_130x250_inhouse\n###ad_160\n###ad_160_600\n###ad_160_600_2\n###ad_160_container_left\n###ad_160_container_right\n###ad_160_sidebar\n###ad_160x160\n###ad_160x600\n###ad_175x300\n###ad_190x90\n###ad_2\n###ad_250\n###ad_250x250\n###ad_3\n###ad_300\n###ad_300_250\n###ad_300_250_1\n###ad_300_250_inline\n###ad_300_container\n###ad_300_interruptor\n###ad_300_wrapper\n###ad_300a\n###ad_300b\n###ad_300c\n###ad_300misc\n###ad_300x100\n###ad_300x100_m_c\n###ad_300x250\n###ad_300x250Ando\n###ad_300x250_1\n###ad_300x250_2\n###ad_300x250_container\n###ad_300x250_content_column\n###ad_300x250_m_c\n###ad_300x250_secondary\n###ad_300x250_startgame\n###ad_300x250m\n###ad_300x600\n###ad_300x90\n###ad_336\n###ad_350_200\n###ad_4\n###ad_450x280\n###ad_468_60\n###ad_468x120\n###ad_468x60\n###ad_470x60a\n###ad_5\n###ad_500\n###ad_500_label\n###ad_500x150\n###ad_6\n###ad_700_90\n###ad_700x430\n###ad_728\n###ad_728_90\n###ad_728_foot\n###ad_728_holder\n###ad_728a\n###ad_728b\n###ad_728x90\n###ad_728x90_container\n###ad_728x90_content\n###ad_728x90home\n###ad_728x91\n###ad_8\n###ad_88x31\n###ad_940\n###ad_984\n###ad_990x90\n###ad_A\n###ad_B\n###ad_B1\n###ad_Banner\n###ad_Bottom\n###ad_C\n###ad_C2\n###ad_D\n###ad_DisplayAd1\n###ad_DisplayAd2\n###ad_E\n###ad_Entry_160x600\n###ad_Entry_728x90\n###ad_F\n###ad_G\n###ad_H\n###ad_Home_300x250\n###ad_I\n###ad_J\n###ad_K\n###ad_L\n###ad_LargeRec01\n###ad_M\n###ad_Middle\n###ad_Middle1\n###ad_N\n###ad_NorthBanner\n###ad_O\n###ad_P\n###ad_Position1\n###ad_Pushdown\n###ad_R1\n###ad_Right\n###ad_Top\n###ad_Top2\n###ad_TopLongBanner\n###ad_Wrap\n###ad_YieldManager-160x600\n###ad_YieldManager-300x250\n###ad_YieldManager-728x90\n###ad_above_game\n###ad_ad\n###ad_adsense\n###ad_after_navbar\n###ad_anchor\n###ad_and_content_ad_box\n###ad_area\n###ad_article_btm\n###ad_banner\n###ad_bannerManage_1\n###ad_banner_1\n###ad_banner_120x600\n###ad_banner_125x300\n###ad_banner_300x250\n###ad_banner_468x60\n###ad_banner_728x90\n###ad_banner_728x90_bot\n###ad_banner_bot\n###ad_banner_example\n###ad_banner_top\n###ad_banners\n###ad_banners_content\n###ad_bar\n###ad_bar_rect\n###ad_bellow_post\n###ad_bg\n###ad_bg_image\n###ad_big\n###ad_bigbox\n###ad_bigbox_companion\n###ad_bigrectangle\n###ad_bigsize_wrapper\n###ad_billboard\n###ad_billboard2\n###ad_billboard_ifm\n###ad_block\n###ad_block_0\n###ad_block_1\n###ad_block_2\n###ad_block_300x250\n###ad_block_mpu\n###ad_board_after_forums\n###ad_board_before_forums\n###ad_body\n###ad_bottom\n###ad_bottom_1x1\n###ad_bottom_728x90\n###ad_bottom_another\n###ad_bottom_article_text\n###ad_bottombrandtext\n###ad_box\n###ad_box02\n###ad_box160a\n###ad_box_2\n###ad_box_ad_0\n###ad_box_ad_1\n###ad_box_colspan\n###ad_box_top\n###ad_branding\n###ad_bs_area\n###ad_bucket_med_rectangle_1\n###ad_bucket_med_rectangle_2\n###ad_buttons\n###ad_category_middle\n###ad_cell\n###ad_center\n###ad_center_monster\n###ad_channel\n###ad_chitikabanner_120x600LH\n###ad_choices\n###ad_circ300x250\n###ad_circ_300_200\n###ad_circ_300x250\n###ad_circ_300x300\n###ad_close\n###ad_cna2\n###ad_comments\n###ad_companion_banner\n###ad_complex\n###ad_comps_top\n###ad_cont\n###ad_cont1\n###ad_cont2\n###ad_container\n###ad_container_0\n###ad_container_300x250\n###ad_container_marginal\n###ad_container_side\n###ad_container_sidebar\n###ad_container_top\n###ad_content\n###ad_content_before_first_para\n###ad_content_fullsize\n###ad_content_primary\n###ad_content_right\n###ad_content_top\n###ad_content_wrap\n###ad_creative_2\n###ad_creative_3\n###ad_creative_5\n###ad_cyborg\n###ad_display_300_250\n###ad_display_728_90\n###ad_div\n###ad_div_bottom\n###ad_div_top\n###ad_embed_300x250\n###ad_fb_circ\n###ad_feature\n###ad_feedback\n###ad_fg\n###ad_firstpost\n###ad_flyrelax\n###ad_foot\n###ad_footer\n###ad_footer1\n###ad_footerAd\n###ad_footer_s\n###ad_footer_small\n###ad_frame\n###ad_frame1\n###ad_front_three\n###ad_fullbanner\n###ad_gallery\n###ad_gallery_bot\n###ad_global_300x250\n###ad_global_above_footer\n###ad_global_header\n###ad_global_header1\n###ad_global_header2\n###ad_google_content336\n###ad_googlebanner_160x600LH\n###ad_grp1\n###ad_grp2\n###ad_gutter_top\n###ad_h3\n###ad_haha_1\n###ad_haha_4\n###ad_halfpage\n###ad_hdr_2\n###ad_head\n###ad_header\n###ad_header_1\n###ad_header_container\n###ad_header_logo_placeholder\n###ad_headerlarge\n###ad_help_link_new\n###ad_hf\n###ad_hide_for_menu\n###ad_holder\n###ad_home\n###ad_home_middle\n###ad_horizontal\n###ad_horseshoe_left\n###ad_horseshoe_right\n###ad_horseshoe_spacer\n###ad_horseshoe_top\n###ad_hotpots\n###ad_houseslot1_desktop\n###ad_iframe_160_by_600_middle\n###ad_iframe_300\n###ad_img\n###ad_img_banner\n###ad_in_arti\n###ad_infoboard_box\n###ad_inplace_1\n###ad_interestmatch\n###ad_interestmatch400\n###ad_island\n###ad_island2\n###ad_island_incontent\n###ad_island_incontent2\n###ad_keywrods\n###ad_label\n###ad_large\n###ad_large_rectangular\n###ad_lastpost\n###ad_layer\n###ad_layer1\n###ad_layer2\n###ad_ldb\n###ad_lead1\n###ad_leader\n###ad_leaderBoard\n###ad_leaderboard\n###ad_leaderboard728x90\n###ad_leaderboard_1\n###ad_leaderboard_flex\n###ad_leaderboard_master\n###ad_leaderboard_middle\n###ad_leaderboard_top\n###ad_leaderboardtwo\n###ad_leaderborder_container1\n###ad_left\n###ad_left_1\n###ad_left_2\n###ad_left_3\n###ad_left_skyscraper\n###ad_left_skyscraper_2\n###ad_left_top\n###ad_lft\n###ad_link\n###ad_links\n###ad_links_footer\n###ad_lnk\n###ad_lrec\n###ad_lwr_square\n###ad_main\n###ad_marker\n###ad_mast\n###ad_med_rect\n###ad_medium\n###ad_medium_rectangle\n###ad_medium_rectangular\n###ad_mediumrectangle\n###ad_megabanner\n###ad_menu_header\n###ad_message\n###ad_messageboard_x10\n###ad_middle\n###ad_middle_122\n###ad_middle_2\n###ad_middle_bottom\n###ad_midstrip\n###ad_ml\n###ad_module\n###ad_most_pop_234x60_req_wrapper\n###ad_mpu\n###ad_mpu2\n###ad_mpu300x250\n###ad_mpu_1\n###ad_mpuav\n###ad_mrcontent\n###ad_mrec\n###ad_myFrame\n###ad_netpromo\n###ad_new\n###ad_newsletter\n###ad_num_1\n###ad_num_2\n###ad_num_3\n###ad_one\n###ad_overlay\n###ad_overlay_countdown\n###ad_overture\n###ad_panel\n###ad_pencil\n###ad_ph_1\n###ad_place\n###ad_placeholder\n###ad_play_300\n###ad_plugs\n###ad_post\n###ad_post_300\n###ad_poster\n###ad_pr_info\n###ad_primary\n###ad_primaryAd\n###ad_promoAd\n###ad_publicidad\n###ad_pushupbar-closed\n###ad_rail\n###ad_rect\n###ad_rect1\n###ad_rect2\n###ad_rect3\n###ad_rect_body\n###ad_rect_bottom\n###ad_rect_c\n###ad_rectangle\n###ad_rectangle_medium\n###ad_rectangular\n###ad_region1\n###ad_region2\n###ad_region3\n###ad_region5\n###ad_related_links_div\n###ad_related_links_div_program\n###ad_replace_div_0\n###ad_replace_div_1\n###ad_report_leaderboard\n###ad_report_rectangle\n###ad_results\n###ad_right\n###ad_right3\n###ad_rightSidebarFirstBanner\n###ad_rightSidebarSecondBanner\n###ad_right_1\n###ad_right_box\n###ad_right_column1_1\n###ad_right_column2_1\n###ad_right_content_article_page\n###ad_right_content_home\n###ad_right_main\n###ad_right_out\n###ad_right_rail_bottom\n###ad_right_rail_flex\n###ad_right_rail_top\n###ad_right_second\n###ad_right_skyscraper\n###ad_right_skyscraper_2\n###ad_right_top\n###ad_righttop-300x250\n###ad_ros_tower\n###ad_rotator-2\n###ad_rotator-3\n###ad_row\n###ad_row_home\n###ad_rr_1\n###ad_rside\n###ad_rside_link\n###ad_script_head\n###ad_sec\n###ad_sec_div\n###ad_secondary\n###ad_sense\n###ad_sense_help\n###ad_sgd\n###ad_short\n###ad_sidebar\n###ad_sidebar1\n###ad_sidebar2\n###ad_sidebar3\n###ad_sidebar_1\n###ad_sidebar_top\n###ad_silo\n###ad_sitebar\n###ad_skin\n###ad_sky\n###ad_sky1\n###ad_sky2\n###ad_sky3\n###ad_skyscraper\n###ad_skyscraper160x600\n###ad_skyscraper_1\n###ad_skyscraper_right\n###ad_skyscraper_text\n###ad_slot\n###ad_slot_bottom\n###ad_slot_leaderboard\n###ad_slot_livesky\n###ad_slot_right_bottom\n###ad_slot_right_top\n###ad_slot_sky_top\n###ad_small\n###ad_space\n###ad_space_300_250\n###ad_space_728\n###ad_space_top\n###ad_sponsored\n###ad_sponsorship_2\n###ad_spot300x250\n###ad_spot_a\n###ad_spot_b\n###ad_spotlight\n###ad_square\n###ad_squares\n###ad_ss\n###ad_stck\n###ad_strapad\n###ad_stream10\n###ad_stream11\n###ad_stream12\n###ad_stream16\n###ad_stream17\n###ad_stream19\n###ad_stream8\n###ad_strip\n###ad_table\n###ad_takeover\n###ad_tbl\n###ad_term_bottom_place\n###ad_text:not(textarea)\n###ad_thread_first_post_content\n###ad_thread_last_post_content\n###ad_tile_home\n###ad_top\n###ad_topBanner\n###ad_top_728x90\n###ad_top_banner\n###ad_top_bar\n###ad_top_header_center\n###ad_top_holder\n###ad_topbanner\n###ad_topmob\n###ad_topnav\n###ad_tp_banner_1\n###ad_tp_banner_2\n###ad_two\n###ad_txt\n###ad_under_game\n###ad_unit\n###ad_unit2\n###ad_vertical\n###ad_video_abovePlayer\n###ad_video_belowPlayer\n###ad_video_large\n###ad_website_top\n###ad_wide\n###ad_wide_box\n###ad_widget\n###ad_widget_1\n###ad_window\n###ad_wp_base\n###ad_wrap\n###ad_wrapper\n###ad_wrapper1\n###ad_wrapper2\n###ad_x10\n###ad_x20\n###ad_zone\n###ad_zone1\n###ad_zone2\n###ad_zone3\n###adamazonbox\n###adaptv_ad_player_div\n###adaptvcompanion\n###adbForum\n###adbackground\n###adbanner\n###adbanner-home-left\n###adbanner-home-right\n###adbanner-middle\n###adbanner-top-left\n###adbanner-top-right\n###adbanner00001\n###adbanner00002\n###adbanner00003\n###adbanner00004\n###adbanner00005\n###adbanner1\n###adbanner_abovethefold_300\n###adbannerbox\n###adbannerdiv\n###adbannerleft\n###adbannerright\n###adbannerwidget\n###adbar\n###adbar_ad_1_div\n###adbar_ad_2_div\n###adbar_ad_3_div\n###adbar_ad_4_div\n###adbar_ads_container_div\n###adbar_main_div\n###adbarbox\n###adbard\n###adbg_ad_0\n###adbg_ad_1\n###adbig\n###adblade\n###adbladeSp\n###adblade_ad\n###adblock\n###adblock-300x250\n###adblock-big\n###adblock-jango\n###adblock-leaderboard\n###adblock-small\n###adblock1\n###adblock2\n###adblock4\n###adblock_header_ad_1\n###adblock_header_ad_1_inner\n###adblock_sidebar_ad_2\n###adblock_sidebar_ad_2_inner\n###adblock_v\n###adblockbottom\n###adblockerMess\n###adblockerwarnung\n###adblockrighta\n###adblocktop\n###adblocktwo\n###adbn\n###adbn_UMU\n###adbnr\n###adboard\n###adbody\n###adbottom\n###adbottomgao\n###adbox\n###adbox-indivisual-body-topright\n###adbox-placeholder-topbanner\n###adbox-topbanner\n###adbox1\n###adbox2\n###adbox300600\n###adbox300x250_1\n###adbox300x250_2\n###adbox_right\n###adbrite\n###adbrite_inline_div\n###adbritebottom\n###adbutton\n###adbuttons\n###adcarousel\n###adcatfish\n###adcell\n###adcenter\n###adcenter2\n###adcenter4\n###adchoices-icon\n###adchoices_container\n###adclear\n###adclose\n###adcode\n###adcode1\n###adcode10\n###adcode2\n###adcode3\n###adcode4\n###adcolContent\n###adcolumn\n###adcolumnwrapper\n###adcontainer\n###adcontainer1\n###adcontainer125px\n###adcontainer2\n###adcontainer250x250\n###adcontainer3\n###adcontainer5\n###adcontainerRight\n###adcontainer___gelement_adbanner_2_0\n###adcontainer_top_ads\n###adcontainsm\n###adcontent\n###adcontent1\n###adcontextlinks\n###adcontrolPushSite\n###adcontrolhalfbanner\n###adcontrolisland\n###add-top\n###add720\n###add_160x600\n###add_720bottom\n###add_block_ad1\n###add_block_ad2\n###add_ciao2\n###add_space_google\n###add_space_sidebar\n###addbottomleft\n###addiv-bottom\n###addiv-top\n###addspaceleft\n###addspaceright\n###adfactor-label\n###adfloat\n###adfooter\n###adfooter_728x90\n###adfooter_hidden\n###adframe:not(frameset)\n###adframetop\n###adfreead\n###adhalfbanner_wrapper\n###adhalfpage\n###adhead\n###adhead_g\n###adheader\n###adheadhubs\n###adhide\n###adholder\n###adhome\n###adhomepage\n###adhzh\n###adid10601\n###adid2161\n###adiframe1_iframe\n###adiframe2_iframe\n###adiframe3_iframe\n###adigniter\n###adimg\n###adimg0\n###adimg1\n###adimg3\n###adimg6\n###adition_content_ad\n###adjacency\n###adjs_id\n###adkit_content-block\n###adkit_content-foot\n###adkit_footer\n###adkit_mrec1\n###adkit_mrec2\n###adkit_rectangle\n###adkit_rnav-bt\n###adkit_rnav-fb\n###adl_120x600\n###adl_250x250\n###adl_300x100\n###adl_300x120\n###adl_300x250\n###adl_300x250_td\n###adl_728x90\n###adl_individual_1\n###adl_leaderboard\n###adl_medium_rectangle\n###adlabel\n###adlabelFooter\n###adlanding\n###adlandscape\n###adlargeverti\n###adlargevertimarginauto\n###adlayer\n###adlayerContainer\n###adlayer_back\n###adlayerad\n###adleaderboard\n###adleaderboard_flex\n###adleaderboardb\n###adleaderboardb_flex\n###adleft\n###adlink-13\n###adlink-133\n###adlink-19\n###adlink-197\n###adlink-213\n###adlink-28\n###adlink-55\n###adlink-74\n###adlink-98\n###adlinks\n###adlinkws\n###adlove\n###adlrec\n###admain\n###admanagerResultListBox\n###admanager_leaderboard\n###admanager_top_banner\n###admid\n###admiddle3\n###admiddle3center\n###admiddle3left\n###admiddleCenter\n###admod2\n###admon-300x250\n###admon-728x90\n###admulti520\n###adnet\n###adnews\n###adnorth\n###adops_cube\n###adops_leaderboard\n###adops_skyscraper\n###adoptionsimg\n###adoverlaysrc\n###adpanel-block\n###adplace\n###adplaceholder_mpu01\n###adplacement\n###adplacer_preroll1\n###adplate-content\n###adpos-top\n###adpos1-leaderboard\n###adposition\n###adposition-C\n###adposition-FPMM\n###adposition-REM2\n###adposition-SHADE\n###adposition-TOCSS\n###adposition-TVSP\n###adposition-inner-REM1\n###adposition-inner-REM3\n###adposition1\n###adposition10\n###adposition1_container\n###adposition2\n###adposition3\n###adposition4\n###adpositionbottom\n###adpostloader\n###adpromo\n###adprovider-default\n###adrect\n###adrectangle\n###adrectanglea\n###adrectanglea_flex\n###adrectanglea_hidden\n###adrectangleb\n###adrectangleb_flex\n###adrectmarginauto\n###adrig\n###adright\n###adright2\n###adrightbottom\n###adrighthome\n###adrightrail\n###adriver_middle\n###adriver_top\n###adrotate_widgets-11\n###adrotate_widgets-12\n###adrotate_widgets-2\n###adrotate_widgets-20\n###adrotate_widgets-24\n###adrotate_widgets-3\n###adrotate_widgets-4\n###adrotate_widgets-5\n###adrotate_widgets-6\n###adrotate_widgets-7\n###adrow\n###adrow-house\n###adrow1\n###adrow3\n###ads-1\n###ads-125\n###ads-160x600\n###ads-200\n###ads-200x200-a\n###ads-250\n###ads-300\n###ads-300-250\n###ads-336x280\n###ads-468\n###ads-5\n###ads-728x90\n###ads-A\n###ads-B\n###ads-B1\n###ads-C\n###ads-C1\n###ads-E\n###ads-E1\n###ads-F\n###ads-G\n###ads-H\n###ads-K\n###ads-area\n###ads-banner\n###ads-block\n###ads-bot\n###ads-bottom\n###ads-box-header-pb\n###ads-by-google\n###ads-category\n###ads-col\n###ads-contain-125\n###ads-container-2\n###ads-container-anchor\n###ads-container-top\n###ads-dell\n###ads-dw\n###ads-footer\n###ads-footer-inner\n###ads-footer-wrap\n###ads-google\n###ads-h-left\n###ads-h-right\n###ads-header\n###ads-header-728\n###ads-horizontal\n###ads-hoster-2\n###ads-indextext\n###ads-king\n###ads-leader\n###ads-leaderboard\n###ads-leaderboard1\n###ads-left-top\n###ads-lrec\n###ads-main\n###ads-menu\n###ads-middle\n###ads-mn\n###ads-mpu\n###ads-outer\n###ads-panel\n###ads-prices\n###ads-rhs\n###ads-right\n###ads-right-bottom\n###ads-right-cube\n###ads-right-skyscraper\n###ads-right-top\n###ads-right-twobottom\n###ads-rt\n###ads-sidebar-skyscraper-unit\n###ads-slot\n###ads-sponsored-boxes\n###ads-sticky\n###ads-text\n###ads-top\n###ads-tp\n###ads-under-rotator\n###ads-vers7\n###ads-vertical\n###ads-vertical-wrapper\n###ads-wrap\n###ads-wrapper\n###ads100Box\n###ads100Middlei4\n###ads120\n###ads120_600-widget-2\n###ads125\n###ads160_600-widget-3\n###ads160_600-widget-5\n###ads160_600-widget-7\n###ads160left\n###ads2\n###ads250_250-widget-2\n###ads300\n###ads300-250\n###ads300Bottom\n###ads300Top\n###ads300_250-widget-10\n###ads300_250-widget-11\n###ads300_250-widget-2\n###ads300_250-widget-3\n###ads300_250-widget-4\n###ads300_250-widget-6\n###ads300hp\n###ads300k\n###ads300x200\n###ads300x250\n###ads300x250_2\n###ads300x250_single\n###ads315\n###ads336Box\n###ads336x280\n###ads7\n###ads728\n###ads72890top\n###ads728bottom\n###ads728top\n###ads728x90\n###ads728x90_2\n###ads790\n###adsBannerFrame\n###adsBar\n###adsBottom\n###adsBox-460_left\n###adsBox-dynamic-right\n###adsBoxResultsPage\n###adsCTN\n###adsContainer\n###adsContent\n###adsDisplay\n###adsDiv0\n###adsDiv1\n###adsDiv2\n###adsDiv3\n###adsDiv4\n###adsDiv5\n###adsDiv6\n###adsDiv7\n###adsGooglePos\n###adsHeader\n###adsHeading\n###adsID\n###adsIframe\n###adsIfrme1\n###adsIfrme2\n###adsIfrme3\n###adsIfrme4\n###adsLREC\n###adsLeftZone1\n###adsLeftZone2\n###adsLinkFooter\n###adsNarrow\n###adsPanel\n###adsProdHighlight_wrap\n###adsSPRBlock\n###adsSuperCTN\n###adsTop\n###adsTopLeft\n###adsZone1\n###adsZone2\n###adsZone_1\n###ads_01\n###ads_120x60_block\n###ads_160\n###ads_3\n###ads_300\n###ads_300x250\n###ads_320_260\n###ads_320_260_2\n###ads_728\n###ads_728x90\n###ads_absolute_left\n###ads_absolute_right\n###ads_back\n###ads_banner\n###ads_banner1\n###ads_banner_header\n###ads_banner_right1\n###ads_bar\n###ads_belowforumlist\n###ads_belownav\n###ads_big\n###ads_bigrec1\n###ads_bigrec2\n###ads_bigrec3\n###ads_block\n###ads_bottom\n###ads_bottom_inner\n###ads_bottom_outer\n###ads_box\n###ads_box1\n###ads_box2\n###ads_box_bottom\n###ads_box_right\n###ads_box_top\n###ads_button\n###ads_by_google\n###ads_campaign\n###ads_catDiv\n###ads_center\n###ads_center_banner\n###ads_central\n###ads_container\n###ads_dynamicShowcase\n###ads_eo\n###ads_expand\n###ads_footer\n###ads_fullsize\n###ads_h\n###ads_halfsize\n###ads_header\n###ads_header_games\n###ads_horiz\n###ads_horizontal\n###ads_html1\n###ads_html2\n###ads_im\n###ads_inner\n###ads_insert_container\n###ads_layout_bottom\n###ads_lb\n###ads_lb_frame\n###ads_leaderbottom\n###ads_left_top\n###ads_line\n###ads_mads_r1\n###ads_mads_r2\n###ads_medrect\n###ads_notice\n###ads_pave\n###ads_place\n###ads_player\n###ads_player_audio\n###ads_player_line\n###ads_postdownload\n###ads_pro_468_60_on_vid\n###ads_r_c\n###ads_right\n###ads_right_sidebar\n###ads_right_top\n###ads_section_textlinks\n###ads_side\n###ads_sidebar_bgnd\n###ads_sidebar_roadblock\n###ads_sky\n###ads_slide_div\n###ads_space\n###ads_space_header\n###ads_special_center\n###ads_sponsFeed-headline\n###ads_sponsFeed-left\n###ads_sponsored_link_pixel\n###ads_superbanner1\n###ads_superbanner2\n###ads_superior\n###ads_td\n###ads_text\n###ads_textlinks\n###ads_title\n###ads_top\n###ads_top2\n###ads_top_banner\n###ads_top_container\n###ads_top_right\n###ads_top_sec\n###ads_topbanner\n###ads_tower1\n###ads_video\n###ads_watch_top_square\n###ads_wide\n###ads_wrapper\n###ads_zone27\n###adsbottom\n###adsbottombluesleft\n###adsbox\n###adsbox-left\n###adsbox-right\n###adsbox1\n###adsbox2\n###adsbox3\n###adsbox336x280\n###adsbox4\n###adsbox728x90\n###adscenter\n###adscolumn\n###adscontainer\n###adscontent\n###adsctl00_AdsHome2\n###adsd_contentad_r1\n###adsd_contentad_r2\n###adsd_contentad_r3\n###adsd_topbanner\n###adsd_txt_sky\n###adsdaq160600\n###adsdaq300250\n###adsdaq72890\n###adsdiv\n###adsdiv300\n###adsdiv468\n###adsdiv_close\n###adsection\n###adsense\n###adsense-2\n###adsense-468x60\n###adsense-area\n###adsense-bottom\n###adsense-end-300\n###adsense-header\n###adsense-letterbox\n###adsense-link\n###adsense-middle\n###adsense-module-bottom\n###adsense-new\n###adsense-post\n###adsense-right\n###adsense-sidebar\n###adsense-tag\n###adsense-text\n###adsense-top\n###adsense-wrap\n###adsense03\n###adsense04\n###adsense05\n###adsense1\n###adsense160600\n###adsense2\n###adsense2pos\n###adsense300x250\n###adsense468\n###adsense6\n###adsense728\n###adsenseArea\n###adsenseHeader\n###adsenseLeft\n###adsenseOne\n###adsenseWrap\n###adsense_300x250\n###adsense_article_bottom\n###adsense_article_left\n###adsense_banner_top\n###adsense_block\n###adsense_block_238x200\n###adsense_block_350x320\n###adsense_bottom_ad\n###adsense_box\n###adsense_box2\n###adsense_box_video\n###adsense_honeytrap\n###adsense_image\n###adsense_inline\n###adsense_item_detail\n###adsense_leaderboard\n###adsense_overlay\n###adsense_placeholder_2\n###adsense_sidebar\n###adsense_testa\n###adsense_top\n###adsense_unit5\n###adsense_ziel\n###adsensebreadcrumbs\n###adsenseheader\n###adsensehorizontal\n###adsensempu\n###adsensepo\n###adsensepos\n###adsensequadr\n###adsenseskyscraper\n###adsensetext\n###adsensetopmobile\n###adsensetopplay\n###adsensewide\n###adsensewidget-3\n###adserv\n###adserve-Banner\n###adserve-Leaderboard\n###adserve-MPU\n###adserve-Sky\n###adsfundo\n###adshometop\n###adshowbtm\n###adshowtop\n###adside\n###adsideblock1\n###adsider\n###adsiframe\n###adsimage\n###adskinleft\n###adskinlink\n###adskinright\n###adskintop\n###adsky\n###adskyleftdiv\n###adskyrightdiv\n###adskyscraper\n###adskyscraper_flex\n###adsleft1\n###adslist\n###adslistbox\n###adslot\n###adslot-2-container\n###adslot-3-container\n###adslot-4-container\n###adslot1\n###adslot1173\n###adslot1189\n###adslot1202\n###adslot2\n###adslot3\n###adslot_c2\n###adslot_m1\n###adslot_m2\n###adslot_m3\n###adsmiddle\n###adsonar\n###adsonarBlock\n###adspace\n###adspace-1\n###adspace-2\n###adspace-300x250\n###adspace-728\n###adspace-728x90\n###adspace-bottom\n###adspace-leaderboard-top\n###adspace-one\n###adspace-panorama\n###adspace-top\n###adspace300x250\n###adspaceBox\n###adspaceBox300\n###adspaceBox300_150\n###adspaceBox300white\n###adspaceRow\n###adspace_header\n###adspace_leaderboard\n###adspace_top\n###adspacer\n###adspan\n###adspdl-container\n###adspecial_offer_box\n###adsplace1\n###adsplace2\n###adsplace4\n###adsplash\n###adsponsorImg\n###adsponsored_links_box\n###adspot\n###adspot-1\n###adspot-149x170\n###adspot-1x4\n###adspot-2\n###adspot-295x60\n###adspot-2a\n###adspot-2b\n###adspot-300x110-pos-1\n###adspot-300x125\n###adspot-300x250-pos-1\n###adspot-300x250-pos-2\n###adspot-300x250-pos1\n###adspot-300x600-pos1\n###adspot-468x60-pos-2\n###adspot-620x270-pos-1\n###adspot-620x45-pos-1\n###adspot-620x45-pos-2\n###adspot-728x90\n###adspot-728x90-pos-2\n###adspot-a\n###adspot-bottom\n###adspot-c\n###adspot-d\n###adspot-top\n###adspot300x250\n###adspot_220x90\n###adspot_300x250\n###adspot_468x60\n###adspot_728x90\n###adspotlight1\n###adsquare\n###adsquare2\n###adsright\n###adss\n###adssidebar2\n###adssidebar3\n###adsspace\n###adstd\n###adstext2\n###adstop\n###adstory\n###adstrip\n###adstripbottom\n###adstripnew\n###adstuff\n###adswidget1-quick-adsense\n###adswidget2-quick-adsense\n###adswizzBanner\n###adsxpls2\n###adszed-728x90\n###adtab\n###adtab-feedback2\n###adtable_top\n###adtag5\n###adtag8\n###adtag_right_side\n###adtagfooter\n###adtagheader\n###adtagrightcol\n###adtags_left\n###adtaily\n###adtaily-widget-light\n###adtech_0\n###adtech_1\n###adtech_2\n###adtech_3\n###adtech_728or920_2\n###adtech_googleslot_03c\n###adtech_leaderboard01\n###adtech_takeover\n###adtechbanner728\n###adtext\n###adtext-top-content\n###adtop\n###adtopHeader\n###adtop_dfp\n###adtopbanner\n###adtopbox\n###adtophp\n###adtrafficright\n###adtxt\n###adunderpicture\n###adunit\n###adunit300x500\n###adunit_video\n###adunitl\n###adv-01\n###adv-300\n###adv-box\n###adv-companion-iframe\n###adv-container\n###adv-ext-ext-1\n###adv-ext-ext-2\n###adv-fb-container\n###adv-google\n###adv-leaderboard\n###adv-left\n###adv-masthead\n###adv-middle\n###adv-middle1\n###adv-midroll\n###adv-mpux\n###adv-preroll\n###adv-right\n###adv-right1\n###adv-strip\n###adv-text\n###adv-title\n###adv-top\n###adv-x34\n###adv-x35\n###adv-x36\n###adv-x37\n###adv-x38\n###adv-x39\n###adv-x40\n###adv130x195\n###adv160x600\n###adv170\n###adv2_ban\n###adv300bottom\n###adv300top\n###adv300x250\n###adv300x250container\n###adv3_ban\n###adv468x90\n###adv728\n###adv728x90\n###adv768x90\n###advCarrousel\n###advHome\n###advMegaBanner\n###advRectangle\n###advRectangle1\n###advSidebarDocBox\n###advSkin\n###advTop\n###advTopRight_anchor\n###advWrapper\n###adv_300\n###adv_300x250_1\n###adv_300x250_2\n###adv_300x250_3\n###adv_468x60_content\n###adv_5\n###adv_52\n###adv_6\n###adv_62\n###adv_65\n###adv_7\n###adv_70\n###adv_71\n###adv_728\n###adv_728x90\n###adv_73\n###adv_94\n###adv_96\n###adv_97\n###adv_98\n###adv_Reload\n###adv_Skin\n###adv_banner_featured\n###adv_banner_sidebar\n###adv_bootom\n###adv_border\n###adv_box_a\n###adv_center\n###adv_config\n###adv_contents\n###adv_contents_tem\n###adv_google_300\n###adv_google_728\n###adv_halfpage\n###adv_halfpage_title\n###adv_holder\n###adv_leaderboard\n###adv_mpu1\n###adv_mpu2\n###adv_network\n###adv_overlay\n###adv_overlay_content\n###adv_r\n###adv_right\n###adv_skin\n###adv_sky\n###adv_sponsorRowFooter\n###adv_sponsorRowHeader\n###adv_sponsor_cat\n###adv_textlink\n###adv_textual_google_div\n###adv_top\n###adv_top_banner_wrapper\n###adv_videobox\n###adv_wallpaper\n###adv_wallpaper2\n###adv_wideleaderboard\n###adver\n###adver-top\n###adver1\n###adver2\n###adver3\n###adver4\n###adver5\n###adver6\n###adver7\n###adverFrame\n###advert-1\n###advert-120\n###advert-2\n###advert-ahead\n###advert-banner\n###advert-banner-wrap\n###advert-block\n###advert-boomer\n###advert-box\n###advert-column\n###advert-container-top\n###advert-display\n###advert-footer\n###advert-footer-hidden\n###advert-header\n###advert-hpu\n###advert-island\n###advert-leaderboard\n###advert-left\n###advert-links-bottom\n###advert-mpu\n###advert-right\n###advert-right-not-home\n###advert-sky\n###advert-skyscaper\n###advert-skyscraper\n###advert-stickysky\n###advert-text\n###advert-top\n###advert-top-banner\n###advert-wrapper\n###advert1\n###advert1hp\n###advert2\n###advert234_container\n###advert2area\n###advert2areasmall\n###advert3area\n###advert3areasmall\n###advertBanner\n###advertBox\n###advertBoxRight\n###advertBoxSquare\n###advertColumn\n###advertContainer\n###advertControl4_advertLink\n###advertCover\n###advertDB\n###advertMarkerHorizontalConatiner\n###advertMarkerVerticalConatiner\n###advertRight\n###advertSection\n###advertSeparator\n###advertTopLarge\n###advertTopSmall\n###advertTower\n###advert_01\n###advert_04\n###advert_05\n###advert_07\n###advert_1\n###advert_125x125\n###advert_250x250\n###advert_300x2502\n###advert_300x2503\n###advert_561_01\n###advert_561_02\n###advert_561_03\n###advert_561_04_container\n###advert_561_04_left_end\n###advert_561_04_right_end\n###advert_561_05\n###advert_561_07\n###advert_back_160x600\n###advert_back_300x250_1\n###advert_back_300x250_2\n###advert_banner\n###advert_belowmenu\n###advert_bottom_100x70\n###advert_box\n###advert_container\n###advert_header\n###advert_home01\n###advert_home02\n###advert_home03\n###advert_home04\n###advert_leaderboard\n###advert_lrec_format\n###advert_media\n###advert_mid\n###advert_mpu\n###advert_mpu_1\n###advert_mpu_2\n###advert_right_skyscraper\n###advert_sky\n###advert_top\n###advert_yell\n###advertblock\n###advertborder\n###advertbox2\n###advertbox3\n###advertbox4\n###adverthome\n###adverti\n###advertise\n###advertise-here\n###advertise-here-sidebar\n###advertise-now\n###advertise-sidebar\n###advertise1\n###advertiseBanner\n###advertiseGoogle\n###advertiseHere\n###advertiseLink\n###advertise_top\n###advertisediv\n###advertiseheretop\n###advertisement-300x250\n###advertisement-728x90\n###advertisement-content\n###advertisement-detail1\n###advertisement-detail2\n###advertisement-large\n###advertisement-text\n###advertisement1\n###advertisement160x600\n###advertisement2\n###advertisement3\n###advertisement728x90\n###advertisementArea\n###advertisementBottomThreadUser\n###advertisementDIV2\n###advertisementFooterTop\n###advertisementHeaderBottom\n###advertisementHorizontal\n###advertisementLigatus\n###advertisementPrio2\n###advertisementRight\n###advertisementRightcolumn0\n###advertisementRightcolumn1\n###advertisementThread\n###advertisementTop\n###advertisement_banner\n###advertisement_block\n###advertisement_box\n###advertisement_container\n###advertisement_label\n###advertisement_notice\n###advertisementblock1\n###advertisementblock2\n###advertisementblock3\n###advertisements_bottom\n###advertisements_sidebar\n###advertisements_top\n###advertisementsarticle\n###advertisementsxml\n###advertiser-container\n###advertiserLinks\n###advertiserReports\n###advertisers-caption\n###advertisetop\n###advertising-160x600\n###advertising-300x250\n###advertising-728x90\n###advertising-banner\n###advertising-caption\n###advertising-container\n###advertising-control\n###advertising-mockup\n###advertising-skyscraper\n###advertising-top\n###advertising2\n###advertising3\n###advertisingBlocksLeaderboard\n###advertisingBottomFull\n###advertisingHrefTop\n###advertisingLeftLeft\n###advertisingLink\n###advertisingModule160x600\n###advertisingModule728x90\n###advertisingRightColumn\n###advertisingRightRight\n###advertisingTop\n###advertisingTopWrapper\n###advertising_btm\n###advertising_column\n###advertising_container\n###advertising_contentad\n###advertising_header\n###advertising_holder\n###advertising_horiz_cont\n###advertising_iab\n###advertising_top_container\n###advertising_wrapper\n###advertisment-block-1\n###advertisment-horizontal\n###advertisment1\n###advertismentBottom728x90_\n###advertismentElementInUniversalbox\n###advertisment_content\n###advertisment_panel\n###advertismentgoogle\n###advertistop_td\n###advertleft\n###advertorial\n###advertorial-box\n###advertorial-wrap\n###advertorial1\n###advertorial_block_3\n###advertorial_links\n###advertorial_red_listblock\n###adverts\n###adverts-top-container\n###adverts-top-left\n###adverts-top-middle\n###adverts-top-right\n###adverts_right\n###advertscroll\n###advertsingle\n###advertspace\n###advertssection\n###adverttop\n###advetisement_300x250\n###advframe\n###advgeoul\n###advgoogle\n###advman-2\n###advsingle\n###advt\n###advt-right-skyscraper\n###advt_bottom\n###advtbar\n###advtext\n###advtop\n###advtopright\n###advx3_banner\n###adwhitepaperwidget\n###adwidget\n###adwidget-5\n###adwidget-6\n###adwidget1\n###adwidget2\n###adwidget2_hidden\n###adwidget3_hidden\n###adwidget_hidden\n###adwin\n###adwin_rec\n###adwith\n###adwords-4-container\n###adwords-box\n###adwrap-295x295\n###adwrap-722x90\n###adwrap-729x90\n###adwrap-966x90\n###adwrapper\n###adxBigAd\n###adxBigAd2\n###adxLeaderboard\n###adxMiddle\n###adxMiddle5\n###adxMiddleRight\n###adxSponLink\n###adxSponLink2\n###adxSponLinkA\n###adxToolSponsor\n###adx_ad\n###adx_ad_bottom\n###adx_ad_bottom_close\n###adxtop\n###adxtop2\n###adzbanner\n###adzerk\n###adzerk1\n###adzerk2\n###adzerk_by\n###adzone\n###adzone-middle1\n###adzone-middle2\n###adzone-right\n###adzone-sidebarSmallPromo1\n###adzone-sidebarSmallPromo2\n###adzone-top\n###adzoneBANNER\n###adzone_content\n###adzonebanner\n###adzoneheader\n###aetn_3tier_ad_bar\n###af_ad_large\n###af_ad_small\n###af_adblock\n###afc-container\n###affiliate_ad\n###affinityBannerAd\n###after-content-ad\n###after-content-ads\n###after-header-ad-left\n###after-header-ad-right\n###after-header-ads\n###after_ad\n###afterpostad\n###agencies_ad\n###agi-ad300x250\n###agi-ad300x250overlay\n###agi-sponsored\n###alert_ads\n###amazon-ads\n###amazon_bsa_block\n###ami_ad_cntnr\n###amsSparkleAdFeedback\n###analytics_ad\n###analytics_banner\n###anchorAd\n###annoying_ad\n###annoying_extra_ad_wrapper\n###ap-widget-ad\n###ap-widget-ad-label\n###ap_adframe\n###ap_adtext\n###ap_cu_overlay\n###ap_cu_wrapper\n###apiBackgroundAd\n###apiTopAdContainer\n###apiTopAdWrap\n###apmNADiv\n###apolload\n###app_advertising_pregame_content\n###app_advertising_rectangle\n###app_advertising_rectangle_ph\n###apt-homebox-ads\n###araHealthSponsorAd\n###area-adcenter\n###area-left-ad\n###area13ads\n###area1ads\n###article-ad\n###article-ad-container\n###article-advert\n###article-agora-ad\n###article-bottom-ad\n###article-box-ad\n###article-footer-sponsors\n###article-island-ad\n###article-sponspred-content\n###article-top-728x90-ad-wrapper\n###articleAd\n###articleAdReplacement\n###articleLeftAdColumn\n###articleSideAd\n###article_LeftAdWords\n###article_SponsoredLinks\n###article_ad\n###article_ad_1\n###article_ad_3\n###article_ad_bottom\n###article_ad_bottom_cont\n###article_ad_container\n###article_ad_rt1\n###article_ad_top\n###article_ad_top_cont\n###article_ad_w\n###article_adholder\n###article_ads\n###article_advert\n###article_banner_ad\n###article_bottom_ad01\n###article_box_ad\n###article_gallery_desktop_ad\n###article_left_ad01\n###article_sidebar_ad\n###article_sidebar_ad_02\n###articlead1\n###articlead2\n###articleadblock\n###articletop_ad\n###articleview_ad\n###articleview_ad2\n###artist-ad-container\n###aside_ad\n###asideads\n###asinglead\n###atad1\n###atad2\n###atlasAdDivGame\n###atwAdFrame0\n###atwAdFrame4\n###autos_banner_ad\n###aw-ad-container\n###awds-nt1-ad\n###awesome-ad\n###awp_advertisements-2\n###b-ad-choices\n###b-adw\n###b5-skyscraper-ad-3\n###b5_ad_footer\n###b5_ad_sidebar1\n###b5_ad_top\n###b5ad300\n###bLinkAdv\n###babAdTop\n###backad\n###background-adv\n###background_ads\n###backgroundadvert\n###ban_300x250\n###ban_728x90\n###banner-300x250\n###banner-300x250-north\n###banner-336x280-north\n###banner-336x280-south\n###banner-468x60\n###banner-728\n###banner-728adtag\n###banner-728adtag-bottom\n###banner-728x90\n###banner-ad\n###banner-ad-container\n###banner-ad-loader\n###banner-ads\n###banner-advert\n###banner-advert-container\n###banner-lg-ad\n###banner-skyscraper\n###banner120x600\n###banner250x250\n###banner300-top-right\n###banner300x250\n###banner468\n###banner468x60\n###banner600\n###banner728\n###banner728x90\n###banner975_container\n###bannerAd\n###bannerAdContainer1_1\n###bannerAdContainer1_2\n###bannerAdContainer1_3\n###bannerAdContainer1_4\n###bannerAdContainer1_5\n###bannerAdContainer1_6\n###bannerAdContainer2_1\n###bannerAdContainer2_2\n###bannerAdContainer2_3\n###bannerAdContainer2_4\n###bannerAdContainer2_5\n###bannerAdContainer2_6\n###bannerAdFrame\n###bannerAdLInk\n###bannerAdRight3\n###bannerAdTop\n###bannerAdWrap\n###bannerAdWrapper\n###bannerAd_ctr\n###bannerAd_rdr\n###bannerAds\n###bannerGoogle\n###banner_280_240\n###banner_300_250\n###banner_300x250_sidebar\n###banner_468x60\n###banner_ad\n###banner_ad_Sponsored\n###banner_ad_bottom\n###banner_ad_div_fw\n###banner_ad_footer\n###banner_ad_module\n###banner_ad_placeholder\n###banner_admicro\n###banner_ads\n###banner_adsense\n###banner_adv\n###banner_advertisement\n###banner_adverts\n###banner_content_ad\n###banner_sedo\n###banner_slot\n###banner_spacer\n###banner_topad\n###banner_wrapper_top\n###bannerad\n###bannerad-bottom\n###bannerad-top\n###bannerad2\n###banneradrow\n###bannerads\n###banneradspace\n###banneradvert3\n###barAdWrapper\n###baseAdvertising\n###baseboard-ad\n###baseboard-ad-wrapper\n###basket-adContainer\n###bbContentAds\n###bb_ad_container\n###bbccom_sponsor_section_text\n###bbo_ad1\n###bcaster-ad\n###before-footer-ad\n###below-listings-ad\n###below-post-ad\n###belowAd\n###belowContactBoxAd\n###belowNodeAds\n###below_comments_ad_holder\n###below_content_ad_container\n###belowad\n###belowheaderad\n###bg-footer-ads\n###bg-footer-ads2\n###bg_YieldManager-160x600\n###bg_YieldManager-300x250\n###bg_YieldManager-728x90\n###bg_banner_120x600\n###bg_banner_468x60\n###bg_banner_728x90\n###bgad\n###bh_adFrame_ag_300x250_atf\n###bh_adFrame_bh_300x250_atf\n###bh_adFrame_bh_300x250_btf\n###big-box-ad\n###bigAd\n###bigAd1\n###bigAd2\n###bigAdDiv\n###bigBoxAd\n###bigBoxAdCont\n###big_ad\n###big_ad_label\n###big_ads\n###bigad\n###bigad300outer\n###bigadbox\n###bigadframe\n###bigadspace\n###bigadspot\n###bigboard_ad\n###bigboard_ad_ini\n###bigbox-ad\n###bigsidead\n###billboard-ad-container\n###billboard_ad\n###bl11adv\n###blancco-ad\n###block--ex_dart-ex_dart_adblade_article\n###block-ad_blocks-0\n###block-ad_cube-0\n###block-ad_cube-1\n###block-adsense-0\n###block-adsense-2\n###block-adsense_managed-0\n###block-advert-content\n###block-advert-content2\n###block-advertisement\n###block-dart-dart-tag-ad_top_728x90\n###block-dart-dart-tag-gfc-ad-top-2\n###block-dctv-ad-banners-wrapper\n###block-dfp-skyscraper_left_1\n###block-dfp-skyscraper_left_2\n###block-display-ads-leaderboard\n###block-ex_dart-ex_dart_adblade_article\n###block-ex_dart-ex_dart_sidebar_ad_block_bottom\n###block-ex_dart-ex_dart_sidebar_ad_block_top\n###block-fan-ad-fan-ad-front-leaderboard-bottom\n###block-fan-ad-fan-ad-front-medrec-top\n###block-google-ads\n###block-ibtimestv-player-companion-ad\n###block-localcom-localcom-ads\n###block-openads-0\n###block-openads-1\n###block-openads-13\n###block-openads-14\n###block-openads-2\n###block-openads-3\n###block-openads-4\n###block-openads-5\n###block-openads-brand\n###block-openx-0\n###block-openx-1\n###block-openx-4\n###block-openx-5\n###block-sponsors\n###block-spti_ga-spti_ga_adwords\n###block-thewrap_ads_250x300-0\n###block-thewrap_ads_250x300-1\n###block-thewrap_ads_250x300-2\n###block-thewrap_ads_250x300-3\n###block-thewrap_ads_250x300-4\n###block-thewrap_ads_250x300-5\n###block-thewrap_ads_250x300-6\n###block-thewrap_ads_250x300-7\n###block-views-Advertorial-block_5\n###block-views-Advertorial-block_6\n###block-views-Advertorial-block_7\n###block-views-ad-directory-block\n###block-views-premium-ad-slideshow-block\n###block-views-sidebar-ad\n###block-views-sponsor-block\n###blockAd\n###blockAds\n###block_ad\n###block_ad2\n###block_ad_container\n###block_advert\n###block_advert1\n###block_advert2\n###block_advertisement\n###block_timeout_sponsored_0\n###blog-ad\n###blog-advert\n###blog-header-ad\n###blogImgSponsor\n###blog_ad_area\n###blog_ad_content\n###blog_ad_opa\n###blog_ad_right\n###blog_ad_top\n###blogad\n###blogad-wrapper\n###blogad_728x90_header\n###blogad_right_728x91_bottom\n###blogad_top_300x250_sidebar\n###blogads\n###blogads_most_right_ad\n###blox-big-ad\n###blox-big-ad-bottom\n###blox-big-ad-top\n###blox-halfpage-ad\n###blox-tile-ad\n###blox-tower-ad\n###bn_ad\n###bnr-300x250\n###bnr-468x60\n###bnr-728x90\n###bnrAd\n###bnrhd468\n###body-ads\n###bodyAd1\n###bodyAd2\n###bodyAd3\n###bodyAd4\n###body_728_ad\n###body_ad\n###bodymainAd\n###bonus-offers-advertisement\n###book-ad\n###bookmarkListDeckAdPlaceholder\n###boss_banner_ad-2\n###boss_banner_ad-3\n###bot_ads\n###botad\n###botads2\n###bott_ad2\n###bott_ad2_300\n###bottom-728-ad\n###bottom-ad\n###bottom-ad-1\n###bottom-ad-banner\n###bottom-ad-container\n###bottom-ad-leaderboard\n###bottom-ad-tray\n###bottom-ad-wrapper\n###bottom-add\n###bottom-ads\n###bottom-ads-container\n###bottom-adspot\n###bottom-advertising\n###bottom-article-ad-336x280\n###bottom-banner-spc\n###bottom-boxad\n###bottom-side-ad\n###bottom-sponsor-add\n###bottomAd\n###bottomAd300\n###bottomAdBlcok\n###bottomAdCCBucket\n###bottomAdContainer\n###bottomAdSection\n###bottomAdSense\n###bottomAdSenseDiv\n###bottomAdWrapper\n###bottomAds\n###bottomAdvBox\n###bottomBannerAd\n###bottomContentAd\n###bottomFullAd\n###bottomGoogleAds\n###bottomLeftAd\n###bottomMPU\n###bottomRightAd\n###bottomRightAdContainer\n###bottomRightAdSpace\n###bottomSponsorAd\n###bottom_ad\n###bottom_ad_area\n###bottom_ad_box\n###bottom_ad_container\n###bottom_ad_left\n###bottom_ad_region\n###bottom_ad_right\n###bottom_ad_unit\n###bottom_ad_wrapper\n###bottom_adbox\n###bottom_ads\n###bottom_ads_container\n###bottom_advert_container\n###bottom_adwrapper\n###bottom_banner_ad\n###bottom_ex_ad_holder\n###bottom_leader_ad\n###bottom_overture\n###bottom_player_adv\n###bottom_sponsor_ads\n###bottom_sponsored_links\n###bottom_text_ad\n###bottomad\n###bottomad300\n###bottomad_table\n###bottomadbanner\n###bottomadbar\n###bottomadholder\n###bottomads\n###bottomadsdiv\n###bottomadsense\n###bottomadvert\n###bottomadwrapper\n###bottomleaderboardad\n###bottommpuAdvert\n###bottommpuSlot\n###bottomsponad\n###bottomsponsoredresults\n###box-ad\n###box-ad-section\n###box-ad-sidebar\n###box-ads-small-1\n###box-ads-small-2\n###box-content-ad\n###box-googleadsense-1\n###box-googleadsense-r\n###box1ad\n###box2ad\n###boxAD\n###boxAd\n###boxAd300\n###boxAdContainer\n###boxAdvert\n###box_ad\n###box_ad_container\n###box_ad_middle\n###box_ads\n###box_advertisement\n###box_advertising_info\n###box_advertisment\n###box_articlead\n###box_mod_googleadsense\n###box_text_ads\n###boxad\n###boxad1\n###boxad2\n###boxad3\n###boxad4\n###boxad5\n###boxads\n###boxes-box-ad300x250set2\n###boxes-box-ad300x250set2block\n###boxes-box-ad_300x250_1\n###boxes-box-ad_728x90_1\n###boxtube-ad\n###bpAd\n###bps-header-ad-container\n###bq_homeMiddleAd\n###br_ad\n###brand-box-ad\n###brand-box-ad-1-container\n###branding_click\n###browse-ad-container\n###browse_ads_ego_container\n###browsead\n###bsaadvert\n###bsap_aplink\n###btm_ads\n###btmad\n###btmsponsoredcontent\n###btnAds\n###btnads\n###btr_horiz_ad\n###burn_header_ad\n###bus-center-ad\n###button-ads\n###button-ads-horizontal\n###button-ads-vertical\n###buttonAdWrapper1\n###buttonAdWrapper2\n###buttonAds\n###buttonAdsContainer\n###button_ad_container\n###button_ad_wrap\n###button_ads\n###buttonad-widget-3\n###buttonad-widget-4\n###buy-sell-ads\n###buySellAds\n###buysellads\n###buysellads-4x1\n###c-adzone\n###c4_ad\n###c4ad-Middle1\n###c4ad-Top-parent\n###c_ad_sb\n###c_ad_sky\n###c_sponsoredSquare\n###caAdLarger\n###carbonads-container\n###catad\n###catalyst-125-ads\n###catalyst-ads-2\n###category-ad\n###category-sponsor\n###category_sponsorship_ad\n###cb-ad\n###cb_medrect1_div\n###cbs-video-ad-overlay\n###cbz-ads-text-link\n###cbz-comm-advert-1\n###cellAd\n###center-ad\n###center-ad-group\n###center-ads-72980\n###center-three-ad\n###centerAdsHeadlines\n###center_ad-0\n###centerads\n###central-ads\n###cgp-bigbox-ad\n###ch-ads\n###channel-ads-300-box\n###channel-ads-300x600-box\n###channel_ad\n###channel_ads\n###chartAdWrap\n###charts_adv\n###chatAdv2\n###chatad\n###cherry_ads\n###ciHomeRHSAdslot\n###circ_ad\n###circ_ad_300x100\n###circ_ad_620x100\n###circ_ad_holder\n###circad_wrapper\n###city_House_Ad_300x137\n###clickforad\n###cliczone-advert-left\n###cliczone-advert-right\n###clientAds\n###closeAdsDiv\n###closeable-ad\n###cltAd\n###cmMediaRotatorAdTLContainer\n###cmn_ad_box\n###cmn_ad_tag_head\n###cmn_toolbar_ad\n###cnhi_premium_ads\n###cnnAboveFoldBelowAd\n###cnnBottomAd\n###cnnCMAd\n###cnnRR336ad\n###cnnSponsoredPods\n###cnnTopAd\n###cnnTowerAd\n###cnnVPAd\n###cnn_cnn_adtag-3\n###coAd\n###cobalt-ad-1-container\n###coda_ad_728x90_9\n###cokeAd\n###col3_advertising\n###colAd\n###colRightAd\n###collapseobj_adsection\n###college_special_ad\n###column-ads-bg\n###column2-145x145-ad\n###column4-google-ads\n###columnAd\n###columnTwoAdContainer\n###column_adverts\n###column_extras_ad\n###commentAdWrapper\n###commentTopAd\n###comment_ad_zone\n###comments-ad-container\n###comments-ads\n###comments_advert\n###commercial-textlinks\n###commercial_ads\n###commercial_ads_footer\n###common_right_ad_wrapper\n###common_right_adspace\n###common_right_lower_ad_wrapper\n###common_right_lower_adspace\n###common_right_lower_player_ad_wrapper\n###common_right_lower_player_adspace\n###common_right_player_ad_wrapper\n###common_right_player_adspace\n###common_right_right_adspace\n###common_top_adspace\n###community_ads\n###compAdvertisement\n###comp_AdsLeaderboardBottom\n###comp_AdsLeaderboardTop\n###companion-ad\n###companionAd\n###companionAdDiv\n###companion_Ad\n###companionad\n###componentAdRectangle\n###componentAdSkyscraper\n###conduitAdPopupWrapper\n###container-ad-content-rectangle\n###container-ad-topright\n###container-polo-ad\n###container-righttopads\n###container-topleftads\n###containerAds980\n###containerLocalAds\n###containerLocalAdsInner\n###containerMrecAd\n###containerSqAd\n###container_ad\n###container_top_ad\n###contener_pginfopop1\n###content-ad\n###content-ad-header\n###content-ads\n###content-advertising-header\n###content-advertising-right\n###content-columns-post-ad-bottom\n###content-columns-post-ad-top\n###content-header-ad\n###content-left-ad\n###content-right-ad\n###contentAd\n###contentAdSense\n###contentAdTwo\n###contentAds\n###contentAds300x200\n###contentAds300x250\n###contentAds667x100\n###contentAdsCatArchive\n###contentBottomAdLeaderboard\n###contentBoxad\n###contentFooterAD\n###contentTopAds2\n###content_0_storyarticlepage_main_0_pnlAdSlot\n###content_0_storyarticlepage_main_0_pnlAdSlotInner\n###content_0_storyarticlepage_sidebar_0_pnlAdSlot\n###content_0_storyarticlepage_sidebar_11_pnlAdSlot\n###content_0_storyarticlepage_sidebar_6_pnlAdSlot\n###content_11_pnlAdSlot\n###content_11_pnlAdSlotInner\n###content_16_pnlAdSlot\n###content_16_pnlAdSlotInner\n###content_2_pnlAdSlot\n###content_2_pnlAdSlotInner\n###content_3_twocolumnrightfocus_right_bottomright_0_pnlAdSlot\n###content_3_twocolumnrightfocus_right_bottomright_1_pnlAdSlot\n###content_4_threecolumnallfocus_right_0_pnlAdSlot\n###content_7_pnlAdSlot\n###content_7_pnlAdSlotInner\n###content_9_twocolumnleftfocus_b_right_1_pnlAdSlot\n###content_ad\n###content_ad_1\n###content_ad_2\n###content_ad_block\n###content_ad_container\n###content_ad_square\n###content_ad_top\n###content_ads\n###content_ads_content\n###content_adv\n###content_bottom_ad\n###content_bottom_ads\n###content_box_300body_sponsoredoffers\n###content_box_adright300_google\n###content_lower_center_right_ad\n###content_mpu\n###content_right_ad\n###content_right_area_ads\n###content_right_side_advertisement_on_top_wrapper\n###contentad\n###contentad_imtext\n###contentad_right\n###contentad_urban\n###contentadcontainer\n###contentads\n###contentarea-ad\n###contentarea-ad-widget-area\n###contentinlineAd\n###contents_post_ad\n###contest-ads\n###contextad\n###contextual-ads\n###contextual-ads-block\n###contextual-ads-bricklet\n###contextual-dummy-ad\n###contextualad\n###corner_ad\n###cornerad\n###cosponsor\n###cosponsorTab\n###coverADS\n###coverads\n###cph_cph_tlda_pnlAd\n###crowd-ignite\n###crowd-ignite-header\n###csBotterAd\n###csTopAd\n###ct-ad-lb\n###ctl00_AdPanel1\n###ctl00_AdPanelISRect2\n###ctl00_AdWords\n###ctl00_Adspace_Top_Height\n###ctl00_BottomAd\n###ctl00_BottomAd2_AdArea\n###ctl00_BottomAdPanel\n###ctl00_ContentMain_BanManAd468_BanManAd\n###ctl00_ContentPlaceHolder1_AdRotator3\n###ctl00_ContentPlaceHolder1_BannerAd_TABLE1\n###ctl00_ContentPlaceHolder1_DrillDown1_trBannerAd\n###ctl00_ContentPlaceHolder1_TextAd_Pulse360AdPanel\n###ctl00_ContentPlaceHolder1_ad12_adRotator_divAd\n###ctl00_ContentPlaceHolder1_blockAdd_divAdvert\n###ctl00_ContentPlaceHolder1_ctl00_StoryContainer1_ImageHouseAd\n###ctl00_ContentPlaceHolder1_ucAdHomeRightFO_divAdvertisement\n###ctl00_ContentPlaceHolder1_ucAdHomeRight_divAdvertisement\n###ctl00_ContentPlaceHolder_PageHeading_Special_divGoogleAd2\n###ctl00_ContentRightColumn_RightColumn_Ad1_BanManAd\n###ctl00_ContentRightColumn_RightColumn_Ad2_BanManAd\n###ctl00_ContentRightColumn_RightColumn_PremiumAd1_ucBanMan_BanManAd\n###ctl00_Content_SquareAd_AdBox\n###ctl00_Content_skyAd\n###ctl00_Footer1_v5footerad\n###ctl00_FooterHome1_AdFooter1_AdRotatorFooter\n###ctl00_GoogleAd1\n###ctl00_GoogleAd3\n###ctl00_GoogleSkyscraper\n###ctl00_Header1_AdHeader1_LabelHeaderScript\n###ctl00_HyperLinkHouseAd\n###ctl00_ImageHouseAd\n###ctl00_LHTowerAd\n###ctl00_LeftHandAd\n###ctl00_MainContent_adDiv1\n###ctl00_MainContent_adDiv2\n###ctl00_MasterHolder_IBanner_adHolder\n###ctl00_SiteHeader1_TopAd1_AdArea\n###ctl00_TopAd\n###ctl00_TowerAd\n###ctl00_VBanner_adHolder\n###ctl00__Content__RepeaterReplies_ctl03__AdReply\n###ctl00_adCar\n###ctl00_adFooter\n###ctl00_advert_LargeMPU_div_AdPlaceHolder\n###ctl00_advert_WideSky_Right_divOther\n###ctl00_bottom_advert_728x90\n###ctl00_cphMainContent_lblPartnerAds\n###ctl00_cphMain_adView_dlAds_ctl01_advert_AboveAds_divOther\n###ctl00_cphMain_hlAd1\n###ctl00_cphMain_hlAd2\n###ctl00_cphMain_hlAd3\n###ctl00_cphMain_phMain_ctl00_ctl03_ctl00_topAd\n###ctl00_cphRoblox_boxAdPanel\n###ctl00_ctl00_MainPlaceHolder_itvAdSkyscraper\n###ctl00_ctl00_RightColumn1_ctl04_csc300x250Ad1\n###ctl00_ctl00_RightColumn1_ctl04_pnlAdBlock300x250Ad1\n###ctl00_ctl00_RightPanePlaceHolder_pnlAdv\n###ctl00_ctl00_ctl00_Main_Main_PlaceHolderGoogleTopBanner_MPTopBannerAd\n###ctl00_ctl00_ctl00_Main_Main_SideBar_MPSideAd\n###ctl00_ctl00_ctl00_divAdsTop\n###ctl00_ctl00_ctl00_tableAdsTop\n###ctl00_ctl00_ctl00_tdBannerAd\n###ctl00_ctl00_pnlAdBottom\n###ctl00_ctl00_pnlAdTop\n###ctl00_ctl01_ctl00_tdBannerAd\n###ctl00_ctl05_ctl00_tableAdsTop\n###ctl00_ctl05_ctl00_tdBannerAd\n###ctl00_ctl08_ctl00_tableAdsTop\n###ctl00_ctl11_AdvertisementText\n###ctl00_ctrlAdvert6_iframeAdvert\n###ctl00_ctrlAdvert7_iframeAdvert\n###ctl00_ctrlAdvert8_iframeAdvert\n###ctl00_divAdSuper\n###ctl00_dlTilesAds\n###ctl00_fc_ctl02_AdControl\n###ctl00_fc_ctl03_AdControl\n###ctl00_fc_ctl04_AdControl\n###ctl00_fc_ctl06_AdControl\n###ctl00_headerAdd\n###ctl00_m_skinTracker_m_adLBL\n###ctl00_mainContent_lblSponsor\n###ctl00_phCrackerMain_ucAffiliateAdvertDisplayMiddle_pnlAffiliateAdvert\n###ctl00_phCrackerMain_ucAffiliateAdvertDisplayRight_pnlAffiliateAdvert\n###ctl00_pnlAdTop\n###ctl00_siteHeader_bannerAd\n###ctl00_tc_ctl03_AdControl\n###ctl00_tc_ctl04_AdControl\n###ctl00_tc_ctl05_AdControl\n###ctl00_tc_ctl06_AdControl\n###ctl00_tc_ctl14_AdControl\n###ctl00_tc_ctl15_AdControl\n###ctl00_tc_ctl16_AdControl\n###ctl00_tc_ctl18_AdControl\n###ctl00_tc_ctl19_AdControl\n###ctl00_topAd\n###ctl00_ucAffiliateAdvertDisplay_pnlAffiliateAdvert\n###ctl00_ucFooter_ucFooterBanner_divAdvertisement\n###ctl08_ad1\n###ctl_bottom_ad\n###ctl_bottom_ad1\n###ctr-ad\n###ctr_adtech2\n###ctr_adtech_mpu_bot\n###ctr_adtech_mpu_top\n###ctrlsponsored\n###ctx_listing_ads\n###ctx_listing_ads2\n###cubeAd\n###cube_ad\n###cube_ads\n###cube_ads_inner\n###cubead\n###cubead-2\n###cubead2\n###currencies-sponsored-by\n###custom-advert-leadboard-spacer\n###custom-small-ad\n###customAd\n###cxnAdrail\n###d-adCont543x90\n###d-adCont728x90Inner\n###d4_ad_google02\n###dAdverts\n###dItemBox_ads\n###d_AdLink\n###dap300x250\n###dart-300x250\n###dart-container-728x90\n###dart_160x600\n###dart_300x250\n###dart_ad_block\n###dart_ad_island\n###dartad11\n###dartad13\n###dartad16\n###dartad17\n###dartad19\n###dartad25\n###dartad28\n###dartad8\n###dartad9\n###dc-display-right-ad-1\n###dc_ad_data_1\n###dc_ad_data_2\n###dc_ad_data_4\n###dc_advertisement\n###dcadSpot-Leader\n###dcadSpot-LeaderFooter\n###dclinkad\n###dcol-sponsored\n###dcomad_728x90_0\n###dcomad_ad_728x90_1\n###dcomad_top_300x250_0\n###dcomad_top_300x250_1\n###dcomad_top_300x251_2\n###ddAd\n###ddAdZone2\n###defer-adright\n###desktop-aside-ad-container\n###detail_page_vid_topads\n###devil-ad\n###dfp-ad-1\n###dfp-ad-2\n###dfp-ad-boombox\n###dfp-ad-boombox-wrapper\n###dfp-ad-boombox_2\n###dfp-ad-boombox_2-wrapper\n###dfp-ad-boombox_3\n###dfp-ad-boombox_3-wrapper\n###dfp-ad-boombox_4\n###dfp-ad-boombox_4-wrapper\n###dfp-ad-boombox_5\n###dfp-ad-boombox_5-wrapper\n###dfp-ad-clone_of_sidebar_top\n###dfp-ad-content_1-wrapper\n###dfp-ad-content_2-wrapper\n###dfp-ad-content_3-wrapper\n###dfp-ad-content_4-wrapper\n###dfp-ad-fm_300x250-wrapper\n###dfp-ad-half_page-wrapper\n###dfp-ad-half_page_sidebar-wrapper\n###dfp-ad-home_1-wrapper\n###dfp-ad-home_2-wrapper\n###dfp-ad-home_3-wrapper\n###dfp-ad-homepage_300x250-wrapper\n###dfp-ad-homepage_728x90\n###dfp-ad-homepage_728x90-wrapper\n###dfp-ad-kids_300x250-wrapper\n###dfp-ad-large_rectangle\n###dfp-ad-large_rectangle-wrapper\n###dfp-ad-leaderboard\n###dfp-ad-leaderboard-wrapper\n###dfp-ad-local_300x250-wrapper\n###dfp-ad-medium_rectangle\n###dfp-ad-mediumrect-wrapper\n###dfp-ad-mediumrectangle-wrapper\n###dfp-ad-mediumrectangle2-wrapper\n###dfp-ad-mosad_1\n###dfp-ad-mosad_1-wrapper\n###dfp-ad-mpu1\n###dfp-ad-mpu2\n###dfp-ad-ne_carousel_300x250\n###dfp-ad-ne_carousel_300x250-wrapper\n###dfp-ad-ne_column3a_300x250\n###dfp-ad-ne_column3a_300x250-wrapper\n###dfp-ad-ne_news2_468x60\n###dfp-ad-ne_news2_468x60-wrapper\n###dfp-ad-pencil_pushdown\n###dfp-ad-pencil_pushdown-wrapper\n###dfp-ad-right1\n###dfp-ad-right2\n###dfp-ad-right3\n###dfp-ad-schedule_300x250-wrapper\n###dfp-ad-slot2\n###dfp-ad-slot3\n###dfp-ad-slot3-wrapper\n###dfp-ad-slot4-wrapper\n###dfp-ad-slot5\n###dfp-ad-slot5-wrapper\n###dfp-ad-slot6\n###dfp-ad-slot6-wrapper\n###dfp-ad-slot7\n###dfp-ad-slot7-wrapper\n###dfp-ad-stamp_1\n###dfp-ad-stamp_1-wrapper\n###dfp-ad-stamp_2\n###dfp-ad-stamp_2-wrapper\n###dfp-ad-stamp_3\n###dfp-ad-stamp_3-wrapper\n###dfp-ad-stamp_4\n###dfp-ad-stamp_4-wrapper\n###dfp-ad-top\n###dfp-ad-tower_1\n###dfp-ad-tower_1-wrapper\n###dfp-ad-tower_2\n###dfp-ad-tower_2-wrapper\n###dfp-ad-tower_half_page\n###dfp-ad-tower_half_page-wrapper\n###dfp-ad-tv_300x250-wrapper\n###dfp-ad-wallpaper\n###dfp-ad-wallpaper-wrapper\n###dfp-article-mpu\n###dfp-article-related-mpu\n###dfpAd\n###dfp_ad_DictHome_300x250\n###dfp_ad_DictHome_728x90\n###dfp_ad_Entry_160x600\n###dfp_ad_Entry_180x150\n###dfp_ad_Entry_300x250\n###dfp_ad_Entry_728x90\n###dfp_ad_Entry_Btm_300x250\n###dfp_ad_Entry_EntrySetA_300x250\n###dfp_ad_Entry_EntrySetA_728x90\n###dfp_ad_Entry_EntrySetB_300x250\n###dfp_ad_Entry_EntrySetB_728x90\n###dfp_ad_Entry_EntrySetC_728x90\n###dfp_ad_Home_300x250\n###dfp_ad_Home_728x90\n###dfp_ad_Home_Btm_300x250\n###dfp_ad_IC_728x90\n###dfp_ad_InternalAdX_300x250_right\n###dfp_ad_Internal_EntryBr_300x250\n###dfp_ad_Internal_Home_250x262\n###dfp_ad_Result_728x90\n###dfp_ad_SecContent_300x250\n###dfp_ad_Thesaurus_728x90\n###dfp_ad_mpu\n###dfrads-widget-6\n###dfrads-widget-7\n###dhm-bar\n###dict-adv\n###direct-ad\n###disable-ads-container\n###displayAdSet\n###displayad_bottom-page\n###div-ad-1x1\n###div-ad-1x1_3\n###div-ad-2\n###div-ad-bottom\n###div-ad-coupon_1\n###div-ad-coupon_10\n###div-ad-coupon_11\n###div-ad-coupon_12\n###div-ad-coupon_2\n###div-ad-coupon_3\n###div-ad-coupon_4\n###div-ad-coupon_5\n###div-ad-coupon_6\n###div-ad-coupon_7\n###div-ad-coupon_8\n###div-ad-coupon_9\n###div-ad-flex\n###div-ad-leaderboard\n###div-ad-r\n###div-ad-r1\n###div-ad-top\n###div-adid-4000\n###div-vip-ad-banner\n###divAd\n###divAdBox\n###divAdHere\n###divAdHorizontal\n###divAdLeft\n###divAdRight\n###divAdSpecial\n###divAdWrapper\n###divAdd728x90\n###divAdd_Right\n###divAdd_Top\n###divAds\n###divAdsTop\n###divAdv300x250\n###divAdvertisement\n###divAdvertisingSection\n###divArticleInnerAd\n###divBannerTopAds\n###divBottomad1\n###divBottomad2\n###divDoubleAd\n###divFoldersAd\n###divFooterAd\n###divFooterAds\n###divLeftAd12\n###divLeftRecAd\n###divMenuAds\n###divReklamaTop\n###divRightNavAdsLoader\n###divTopAd\n###divTopAds\n###divWNAdHeader\n###divWNAdUnitLanding\n###divWrapper_Ad\n###div_ad_TopRight\n###div_ad_float\n###div_ad_holder\n###div_ad_leaderboard\n###div_content_mid_lft_ads\n###div_googlead\n###div_header_sponsors\n###div_prerollAd_1\n###div_side_big_ad\n###div_video_ads\n###divadfloat\n###divadsensex\n###divmiddlerightad\n###divuppercenterad\n###divupperrightad\n###dlads\n###dmRosAdWrapper-MainNorth\n###dmRosAdWrapper-east\n###dni-advertising-skyscraper-wrapper\n###dni-header-ad\n###dnn_adSky\n###dnn_adTop\n###dnn_ad_banner\n###dnn_ad_island1\n###dnn_ad_skyscraper\n###dnn_ad_sponsored_links\n###dnn_banner_120x600\n###dnn_banner_486x60\n###dnn_ctl00_Ad2Pane\n###dnn_dnn_dartBanner\n###dnn_googleAdsense_a\n###dnn_playerAd\n###dnn_sponsoredLinks\n###docmainad\n###dogear_promo\n###dotnAd_300x250_c20\n###doubleClickAds3\n###doubleClickAds_bottom_big_box\n###doubleClickAds_bottom_skyscraper\n###doubleClickAds_top_banner\n###doubleclick-island\n###download-leaderboard-ad-bottom\n###download-leaderboard-ad-top\n###downloadAd\n###download_ad\n###download_ads\n###dp_ad_1\n###dp_ads1\n###ds-mpu\n###dsStoryAd\n###ds_ad_north_leaderboard\n###dvAd2Center\n###dynamicAdDiv\n###dynamicAdWinDiv\n###ear_ad\n###eastAds\n###editorsmpu\n###elite-ads\n###em_ad_superbanner\n###embedAD\n###embedded-ad\n###embeded_ad_content_container\n###entrylist_ad\n###eshopad-728x90\n###event_ads\n###evotopTen_advert\n###ex-ligatus\n###ex_dart--ex_dart_header_ad\n###exads\n###expandableAd\n###expandable_welcome_ad\n###expanderadblock\n###external-links-column-ad\n###externalAd\n###extra-search-ads\n###extraAd\n###ezadswidget-2\n###f_ad\n###f_adsky\n###facebook-ad\n###fb_adbox\n###fb_rightadpanel\n###fearless_responsive_image_ad-2\n###featAds\n###featureAd\n###featureAdSpace\n###feature_ad\n###feature_adlinks\n###featuread\n###featured-ad-left\n###featured-ad-right\n###featured-ads\n###featured-advertisements\n###featuredAdContainer2\n###featuredAdWidget\n###featuredAds\n###featuredSponsors\n###featured_ad_links\n###featured_sponsor_cnt\n###feed_links_ad_container\n###feedjiti-footerTR\n###ffsponsors\n###file_sponsored_link\n###fin_ad_728x90_bottom\n###fin_advertorial_features\n###fin_dc_ad_300x100_pos_1\n###fin_ds_homepage_adtag_468x60\n###first-300-ad\n###first-adframe\n###first-adlayer\n###firstAdUnit\n###first_ad\n###first_ad_unit\n###firstad\n###fixedAd\n###flAdData6\n###fl_hdrAd\n###flash_ads_1\n###flashad\n###flex_sponsored_links\n###flexiad\n###flipbookAd\n###floatAD_l\n###floatAD_r\n###floatads\n###floating-ad-spacer\n###floating-ads\n###floating-advert\n###floatingAd\n###floatingAds\n###floating_ad\n###floating_ad_container\n###floatyContent\n###foot-ad-1\n###foot-add\n###footAds\n###footad\n###footer-ad\n###footer-ad-728\n###footer-ad-block\n###footer-ad-box\n###footer-ad-col\n###footer-ad-google\n###footer-ad-large\n###footer-ad-loader\n###footer-ad-shadow\n###footer-ad-unit\n###footer-ad-wrapper\n###footer-ads\n###footer-adspace\n###footer-adv\n###footer-advert\n###footer-advert-area\n###footer-advertisement\n###footer-adverts\n###footer-adwrapper\n###footer-affl\n###footer-banner-ad\n###footer-leaderboard-ad\n###footer-sponsored\n###footerAd\n###footerAdBg\n###footerAdBottom\n###footerAdBox\n###footerAdDiv\n###footerAdLink\n###footerAdd\n###footerAds\n###footerAdsPlacement\n###footerAdvert\n###footerAdvertisement\n###footerAdverts\n###footerGoogleAd\n###footer_AdArea\n###footer_ad\n###footer_ad_01\n###footer_ad_block\n###footer_ad_cloud\n###footer_ad_container\n###footer_ad_holder\n###footer_ad_inventory\n###footer_ad_modules\n###footer_add\n###footer_addvertise\n###footer_ads\n###footer_adsense_ad\n###footer_adspace\n###footer_adv\n###footer_advertising\n###footer_leaderboard_ad\n###footer_text_ad\n###footerad\n###footerad728\n###footerads\n###footeradsbox\n###footeradvert\n###form_bottomad\n###forum_top_ad\n###forumlist-ad\n###four_ads\n###fp_rh_ad\n###fpad1\n###fpad2\n###fpv_companionad\n###fr_ad_center\n###frameAd\n###frameTextAd2\n###frame_admain\n###free_ad\n###frmRightnavAd\n###frnAdSky\n###frnBannerAd\n###frnContentAd\n###front-ad-cont\n###front-page-advert\n###frontPageAd\n###front_ad728\n###front_adtop_content\n###front_advert\n###front_mpu\n###front_mpu_content\n###frontlowerad\n###frontpage_ad1\n###frontpage_ad2\n###ft-ad\n###ft-ad-1\n###ft-ad-container\n###ft-ads\n###ft_mpu\n###full_banner_ad\n###fulldown_ads_box\n###fulldown_ads_frame\n###fullsizebanner_468x60\n###fullstory-google-textad\n###fusionad\n###fw-advertisement\n###fwAdBox\n###g-adblock2\n###gAds\n###gBnrAd\n###gBottomRightAd\n###g_ad\n###g_adsense\n###ga_300x250\n###gad300x250\n###gads300x250\n###gads_middle\n###galleries-tower-ad\n###gallery-ad\n###gallery-ad-m0\n###gallery-advert\n###gallery-page-ad-bigbox\n###gallery-random-ad\n###gallery-slideshow-interstitial-ad\n###gallery_ad\n###gallery_ads\n###gallery_header_ad\n###galleryad1\n###game-ad\n###game-info-ad\n###gameAdMiddle\n###gameAdTopMiddle\n###gameSquareAd\n###game_header_ad\n###game_profile_ad_300_250\n###gamead\n###gameads\n###gamepage_ad\n###gameplay_ad\n###games-mpu-container\n###games_ad_container\n###gasense\n###gbl_topmost_ad\n###gcommonad\n###genad\n###geoAd\n###gft-adChoicesCopy\n###gglads\n###gglads213A\n###gglads213B\n###ggogle_AD\n###gl_ad_300\n###glamads\n###glinkswrapper\n###global-banner-ad\n###globalHeader_divAd\n###globalLeftNavAd\n###globalTopNavAd\n###global_header_ad\n###global_header_ad_area\n###gm-ad-lrec\n###gmi-ResourcePageAd\n###gmi-ResourcePageLowerAd\n###gnadww\n###go-ads-double-2\n###go-ads-double-3\n###goad1\n###goads\n###gog_ad\n###gooadtop\n###google-ad\n###google-ad-art\n###google-ad-table-right\n###google-ad-tower\n###google-ads\n###google-ads-bottom\n###google-ads-bottom-container\n###google-ads-container\n###google-ads-container1\n###google-ads-header\n###google-ads-left-side\n###google-adsense\n###google-adsense-for-content\n###google-adsense-mpusize\n###google-adv-728x90\n###google-adwords\n###google-afc\n###google-top-ads\n###google336x280\n###google468x60\n###googleAd\n###googleAdArea\n###googleAdBottom\n###googleAdBox\n###googleAdSenseAdRR\n###googleAdTop\n###googleAdView\n###googleAdYarrp\n###googleAd_words\n###googleAds\n###googleAdsFrame\n###googleAdsSml\n###googleAdsense\n###googleAdsenseAdverts\n###googleAdsenseBanner\n###googleAdsenseBannerBlog\n###googleAdwordsModule\n###googleAfcContainer\n###googleSearchAds\n###googleShoppingAdsRight\n###googleShoppingAdsTop\n###googleSubAds\n###googleTxtAD\n###google_ad\n###google_ad_468x60_contnr\n###google_ad_EIRU_newsblock\n###google_ad_below_stry\n###google_ad_container\n###google_ad_container_right_side_bar\n###google_ad_inline\n###google_ad_test\n###google_ad_top\n###google_ads\n###google_ads_1\n###google_ads_aCol\n###google_ads_box\n###google_ads_div_Blog_300\n###google_ads_div_Front-160x600\n###google_ads_div_Raw_Override\n###google_ads_div_Second_160\n###google_ads_div_header1\n###google_ads_div_header2\n###google_ads_div_video_wallpaper_ad_container\n###google_ads_frame\n###google_ads_frame1_anchor\n###google_ads_frame2_anchor\n###google_ads_frame3_anchor\n###google_ads_frame4_anchor\n###google_ads_frame5_anchor\n###google_ads_frame6_anchor\n###google_ads_frame_quad\n###google_ads_frame_vert\n###google_ads_test\n###google_ads_top\n###google_ads_wide\n###google_adsense\n###google_adsense_ad\n###google_adsense_home_468x60_1\n###google_textlinks\n###googlead\n###googlead-leaderboard\n###googlead-left\n###googlead-post-mpu\n###googlead-sidebar-middle\n###googlead-sidebar-top\n###googlead01\n###googlead2\n###googlead_outside\n###googleadbig\n###googleadleft\n###googleads\n###googleads1\n###googleads_h_injection\n###googleads_mpu_injection\n###googleadsense\n###googleadsense300x250\n###googleadsrc\n###googleadstop\n###googlebanner\n###googleblock300\n###googlesponsor\n###googletextads\n###googtxtad\n###gpt-ad-1\n###gpt-ad-halfpage\n###gpt-ad-rectangle1\n###gpt-ad-rectangle2\n###gpt-ad-skyscraper\n###gpt-ad-story_rectangle3\n###gpt_ad_panorama_top\n###gpt_ad_small_insider_1\n###gpt_unit_videoAdSlot1_0\n###gridAdSidebar\n###gridAdSidebarRight\n###grid_ad\n###grouponAdContainer\n###gsyadrectangleload\n###gsyadrightload\n###gsyadtop\n###gsyadtopload\n###gtAD\n###gtopadvts\n###gtv_tabSponsor\n###gwt-debug-ad\n###h-ads\n###hAd\n###hAdv\n###h_ads0\n###h_ads1\n###half-page-ad\n###halfPageAd\n###halfe-page-ad-box\n###hb-header-ad\n###hd-ads\n###hd-banner-ad\n###hd_ad\n###hd_ad_wp\n###hdr-ad\n###hdr-banner-ad\n###hdrAdBanner\n###hdrAds\n###hdtv_ad_ss\n###head-ad\n###head-ad-1\n###head-ads\n###head-advertisement\n###head-banner468\n###head1ad\n###headAd\n###headAds\n###headAdv\n###headGoogleAffiliateLinkblock\n###head_ad\n###head_ad_area\n###head_ads\n###head_advert\n###headad\n###headadvert\n###header-ad\n###header-ad-background\n###header-ad-block\n###header-ad-bottom\n###header-ad-container\n###header-ad-holder\n###header-ad-label\n###header-ad-left\n###header-ad-rectangle-container\n###header-ad-right\n###header-ad-wrap\n###header-ad2\n###header-ad2010\n###header-ads\n###header-adsense\n###header-adspace\n###header-adv\n###header-advert\n###header-advert-panel\n###header-advertisement\n###header-advertising\n###header-adverts\n###header-advrt\n###header-banner-728-90\n###header-banner-ad\n###header-banner-spc\n###header-block-ads\n###header-google\n###header-house-ad\n###header-lb-ad\n###header-leader-ad\n###header-leader-ad-2\n###header-top-ads-text\n###headerAd\n###headerAdBackground\n###headerAdButton\n###headerAdContainer\n###headerAdSpace\n###headerAdUnit\n###headerAdWrap\n###headerAds\n###headerAds4\n###headerAdsWrapper\n###headerAdv\n###headerBannerAdNew\n###headerNewAdsContainer\n###headerNewAdsContainerB\n###headerTopAd\n###headerTopAdWide\n###header_ad\n###header_ad_167\n###header_ad_728\n###header_ad_728_90\n###header_ad_banner\n###header_ad_block\n###header_ad_container\n###header_ad_leaderboard\n###header_ad_units\n###header_ad_widget\n###header_ad_wrap\n###header_adbox\n###header_adcode\n###header_ads\n###header_ads2\n###header_ads_2\n###header_ads_p\n###header_adsense\n###header_adv\n###header_advert\n###header_advertisement\n###header_advertisement_top\n###header_advertising\n###header_adverts\n###header_bottom_ad\n###header_flag_ad\n###header_leaderboard_ad_container\n###header_publicidad\n###header_right_ad\n###header_sponsors\n###header_top_ad\n###headerad\n###headeradbox\n###headeradcontainer\n###headerads\n###headeradsbox\n###headeradsense\n###headeradspace\n###headeradvert1div\n###headeradvertholder\n###headeradwrap\n###headergooglead\n###headerprimaryad\n###headersponsors\n###headingAd\n###headline-sponsor\n###headline_ad\n###headlinesAdBlock\n###hi5-ad-1\n###hidadvnet\n###hiddenadAC\n###hide_ad_section_v2\n###hideads\n###hideads1\n###hl-sponsored-links\n###hl-sponsored-results\n###hl-top-ad\n###hldhdAds\n###hly_ad_side_bar_tower_left\n###hly_inner_page_google_ad\n###hmt-widget-ad-unit-3\n###holder-storyad\n###holdunderad\n###home-ad\n###home-ad-block\n###home-ad-slot\n###home-adv-300x250\n###home-advert-module\n###home-advertise\n###home-page-listing-ad\n###home-rectangle-ad\n###home-right-col-ad\n###home-side-ad\n###home-top-ads\n###homeAd\n###homeAdLeft\n###homeAds\n###homeArticlesAd\n###homeBottomAdWrapperInner\n###homeMPU\n###homePageBotAd\n###homeSideAd\n###homeTopRightAd\n###home_ad\n###home_ads_top_hold\n###home_ads_vert\n###home_bottom_ad\n###home_contentad\n###home_feature_ad\n###home_lower_center_right_ad\n###home_mpu\n###home_sec2_adverts\n###home_sidebar_ad\n###home_spensoredlinks\n###home_top_right_ad\n###homead\n###homegoogletextad\n###homeheaderad\n###homepage-ad\n###homepage-adbar\n###homepage-footer-ad\n###homepage-header-ad\n###homepage-right-rail-ad\n###homepage-sidebar-ads\n###homepageAd\n###homepageAdsTop\n###homepageFooterAd\n###homepageGoogleAds\n###homepage_ad\n###homepage_rectangle_ad\n###homepage_right_ad\n###homepage_right_ad_container\n###homepage_top_ad\n###homepage_top_ads\n###homepagead_300x250\n###homepageadvert\n###homestream-advert3\n###hometop_234x60ad\n###hometopads\n###horAd\n###hor_ad\n###horadslot\n###horizad\n###horizads728\n###horizontal-ad\n###horizontal-adspace\n###horizontal-banner-ad\n###horizontal-banner-ad-container\n###horizontalAd\n###horizontal_ad\n###horizontal_ad2\n###horizontal_ad_top\n###horizontalad\n###horizontalads\n###hot-deals-ad\n###hottopics-advert\n###hours_ad\n###houseAd\n###hp-header-ad\n###hp-mpu\n###hp-right-ad\n###hp-store-ad\n###hpSponsor\n###hpV2_300x250Ad\n###hpV2_googAds\n###hp_ad300x250\n###hp_right_ad_300\n###i_ads_table\n###iaa_ad\n###ibt_local_ad728\n###icePage_SearchLinks_AdRightDiv\n###icePage_SearchLinks_DownloadToolbarAdRightDiv\n###icePage_SearchResults_ads0_SponsoredLink\n###icePage_SearchResults_ads1_SponsoredLink\n###icePage_SearchResults_ads2_SponsoredLink\n###icePage_SearchResults_ads3_SponsoredLink\n###icePage_SearchResults_ads4_SponsoredLink\n###icom-ad-top\n###idDivAd\n###idMapAdvertising\n###idRightAdArea\n###idSponsoredresultend\n###idSponsoredresultstart\n###id_SearchAds\n###ifmSocAd\n###iframe-ad\n###iframe-ad-container-Top3\n###iframeAd_2\n###iframeRightAd\n###iframeTopAd\n###iframe_ad_2\n###iframe_ad_300\n###iframe_ad_728\n###iframe_container300x250\n###iframead-300x250\n###ignad_medrec\n###ii_banner_ads\n###imPopup\n###im_box\n###im_popupDiv\n###im_popupFixed\n###ima_ads-2\n###ima_ads-3\n###ima_ads-4\n###image_selector_ad\n###imageadsbox\n###imgCollContentAdIFrame\n###imgad1\n###imu_ad_module\n###in-content-ad\n###in-story-ad-wrapper\n###in_ad_col_a\n###in_post_ad_middle_1\n###in_serp_ad\n###inadspace\n###inarticlead\n###inc-ads-bigbox\n###index-ad\n###index-bottom-advert\n###indexSquareAd\n###index_ad\n###indexad\n###indiv_adsense\n###influads_block\n###infoBottomAd\n###injectableTopAd\n###inline-ad\n###inline-advert\n###inline-story-ad\n###inline-story-ad2\n###inlineAd\n###inlineAdCont\n###inlineAdtop\n###inlineAdvertisement\n###inlineBottomAd\n###inline_ad\n###inline_ad_section\n###inline_search_ad\n###inlinead\n###inlineads\n###inlinegoogleads\n###inlist-ad-block\n###inner-ad\n###inner-advert-row\n###inner-deals-ads\n###inner-top-ads\n###innerad\n###innerpage-ad\n###innovativeadspan\n###inside-page-ad\n###insideCubeAd\n###insidearticleBodyAd\n###insider_ad_wrapper\n###instoryad\n###instoryadtext\n###instoryadwrap\n###insurance-ad-1-container\n###int-ad\n###intAdUnit\n###int_ad\n###internalAdvert\n###internalads\n###interstitialAd\n###interstitialAdContainer\n###interstitialAdUnit\n###interstitial_ad\n###interstitial_ad_container\n###interstitial_ad_wrapper\n###interstitial_ads\n###introAds\n###invid_ad\n###ip-ad-leaderboard\n###ip-ad-skyscraper\n###ipadv\n###iqadcontainer\n###iqadoverlay\n###iqadtile1\n###iqadtile11\n###iqadtile14\n###iqadtile15\n###iqadtile2\n###iqadtile3\n###iqadtile4\n###iqadtile5\n###iqadtile8\n###iqadtile9\n###iqd_align_Ad\n###iqd_mainAd\n###iqd_rightAd\n###iqd_topAd\n###ir-sidebar-ad\n###irgoogleadsense\n###islandAd\n###islandAdPan\n###islandAdPane\n###islandAdPane2\n###islandAdPaneGoogle\n###islandAdSponsored\n###island_ad_top\n###islandad\n###isliveContainer\n###item-detail-feature-ad\n###itemGroupAd2\n###iwad\n###j_ad\n###j_special_ad\n###ji_medShowAdBox\n###jmp-ad-buttons\n###jobsAdBox\n###joead\n###joead2\n###js-ad-leaderboard\n###js-image-ad-mpu\n###js_adsense\n###jt-advert\n###jupiter-ads\n###ka_adFullBanner\n###ka_adMediumRectangle\n###ka_adRightSkyscraperWide\n###ka_adsense_container\n###ka_samplead\n###kamidarticle-adnotice\n###kamidarticle-middle-content\n###karmaAds\n###kaufDA-widget\n###kdz_ad1\n###kdz_ad2\n###keen_overlay_ad_display\n###keyadvertcontainer\n###khAdSpace\n###ksperAD\n###l_home-keen_ad_mask\n###landing-adserve\n###landing-adserver\n###lapho-top-ad-1\n###large-ads\n###large-rectange-ad\n###large-rectange-ad-2\n###largeAd\n###large_rec_ad1\n###largead\n###lateAd\n###lateralAdWrapper\n###launchpad-ads-2\n###layerAds_layerDiv\n###layerTLDADSERV\n###layer_ad\n###layer_ad_content\n###layer_ad_main\n###layer_adv1\n###layerad\n###layeradsense\n###lb-ad\n###lb-sponsor-left\n###lb-sponsor-right\n###lbAdBar\n###lbAdBarBtm\n###lblAds\n###lead-ads\n###lead_ad\n###leadad_1\n###leader-ad\n###leader-board-ad\n###leaderAd\n###leaderAdContainer\n###leaderAdContainerOuter\n###leaderBoardAd\n###leader_ad\n###leader_board_ad\n###leaderad\n###leaderad_section\n###leaderadvert\n###leaderboard-ad\n###leaderboard-ad-1\n###leaderboard-ad-1-container\n###leaderboard-ad-1_iframe\n###leaderboard-ad-2\n###leaderboard-ad-2_iframe\n###leaderboard-ad-3\n###leaderboard-ad-3_iframe\n###leaderboard-ad-4\n###leaderboard-ad-4_iframe\n###leaderboard-ad-5\n###leaderboard-ad-5_iframe\n###leaderboard-ad-bottom\n###leaderboard-ad-bottom-container\n###leaderboard-ad-container\n###leaderboard-advertisement\n###leaderboard-bottom-ad\n###leaderboardAd\n###leaderboardAdArea\n###leaderboardAdArea2\n###leaderboardAdLabel\n###leaderboardAdSibling\n###leaderboardAdTop\n###leaderboardAds\n###leaderboardAdvert\n###leaderboardAdvertFooter\n###leaderboardBottomAd\n###leaderboard_728x90\n###leaderboard_Ad\n###leaderboard_ad\n###leaderboard_ad_gam\n###leaderboard_ad_main\n###leaderboard_ad_unit\n###leaderboard_ads\n###leaderboard_bottom_ad\n###leaderboard_top_ad\n###leaderboardad\n###leaderboardadtagwidget-2\n###learad\n###leatherboardad\n###left-ad\n###left-ad-1\n###left-ad-2\n###left-ad-col\n###left-ad-skin\n###left-bottom-ad\n###left-col-ads-1\n###left-lower-adverts\n###left-lower-adverts-container\n###leftAD\n###leftAdAboveSideBar\n###leftAdCol\n###leftAdContainer\n###leftAdMessage\n###leftAdSpace\n###leftAd_fmt\n###leftAd_rdr\n###leftAds\n###leftAdsSmall\n###leftAdvert\n###leftColumnAdContainer\n###leftGoogleAds\n###leftSectionAd300-100\n###leftTopAdWrapper\n###left_ad\n###left_ads\n###left_adsense\n###left_adspace\n###left_adv\n###left_advertisement\n###left_bg_ad\n###left_block_ads\n###left_float_ad\n###left_side_ads\n###left_sidebar_ads\n###left_skyscraper_ad\n###left_ws_ad_container\n###leftad\n###leftadg\n###leftads\n###leftcolAd\n###leftcolumnad\n###leftframeAD\n###lg-banner-ad\n###lgfRightBarAd\n###lhsBottomAd\n###li-right-geobooster-oas\n###ligatus\n###ligatusdiv\n###lilo_imageAd\n###linebreak-ads\n###linkAdSingle\n###linkAds\n###link_ads\n###linkads\n###links-ads-detailnews\n###listadholder\n###liste_top_ads_wrapper\n###listing-ad\n###live-ad\n###lj_ad_row\n###load-adslargerect\n###localAds\n###logoAd\n###logoAd2\n###logo_ad\n###long-ad\n###long-ad-box\n###long-ad-space\n###long-bottom-ad-wrapper\n###longAdSpace\n###longAdWrap\n###long_advert_header\n###long_advertisement\n###lower-advertising\n###lowerAdvertisement\n###lowerAdvertisementImg\n###lower_ad\n###lowerads\n###lowerthirdad\n###lowertop-adverts\n###lowertop-adverts-container\n###lpAdPanel\n###lrec_ad\n###lrecad\n###lsadvert-left_menu_1\n###lsadvert-left_menu_2\n###lsadvert-top\n###mBannerAd\n###m_top_adblock\n###madison_ad_248_100\n###madskills-ad-manager-0\n###madskills-ad-manager-1\n###madskills-ad-manager-2\n###madskills-ad-manager-3\n###magnify_player_continuous_ad\n###main-ad\n###main-ad160x600\n###main-ad160x600-img\n###main-ad728x90\n###main-advert\n###main-advert1\n###main-advert2\n###main-advert3\n###main-bottom-ad\n###main-bottom-ad-tray\n###main-content-adcontent1\n###main-header-ad-wrap\n###main-header-ad-wrap-home\n###main-right-ad-tray\n###main-tj-ad\n###mainAd\n###mainAd1\n###mainAdUnit\n###mainAdvert\n###mainAdvertismentP\n###mainHeaderAdvertisment\n###mainMenu_divTopAd\n###mainPageAds\n###mainPlaceHolder_coreContentPlaceHolder_rightColumnAdvert_divControl\n###main_AD\n###main_ad\n###main_ads\n###main_content_ad\n###main_left_side_ads\n###main_rec_ad\n###main_top_ad\n###main_top_ad_container\n###major_ad\n###maker-rect-ad\n###mapAdvert\n###marcoad\n###marketing-promo\n###marketplace-ad-1\n###marketplace-ad-2\n###marketplaceAds\n###marquee_ad\n###masSearchAd\n###mason_adv_bp_1\n###mason_adv_bp_2\n###mason_adv_bp_3\n###mason_adv_bp_4\n###mason_adv_rn_2\n###mastAd\n###mastAdvert\n###mast_ad_wrap\n###mast_ad_wrap_btm\n###mastad\n###masterTopAds\n###mastercardAd\n###masthead-ad\n###masthead_ad\n###masthead_topad\n###matchFooterAd\n###mc_ad\n###md-sidebar-video-companion-ad-loaded\n###md_adLoader\n###md_topad\n###me-adspace-002\n###med-rect-ad\n###medRecAd\n###medReqAd\n###media-ad\n###media-ad-thumbs\n###mediaAdLeaderboard\n###media_ad\n###mediaget_box\n###mediagoogleadsense\n###mediaplayer_adburner\n###medium-ad\n###medium-rectangle-ad1\n###mediumAdContainer\n###mediumAdvertisement\n###mediumRectangleAd\n###mediumrectangle_300x250\n###medrec_bottom_ad\n###medrec_middle_ad\n###medrec_top_ad\n###medrectad\n###medrectangle_banner\n###memberad\n###mens-journal-feature-ad\n###menu-ads\n###menuAds\n###menuad\n###menubanner-ad-content\n###mgid-container\n###mhheader_ad\n###mi_story_assets_ad\n###microAdDiv\n###microsoft_ad\n###mid-ad300x250\n###mid-table-ad\n###midAD\n###midRightAds\n###midRightTextAds\n###mid_ad_div\n###mid_ad_title\n###mid_left_ads\n###mid_mpu\n###mid_roll_ad_holder\n###midadd\n###midadspace\n###midadvert\n###midbarad\n###midbnrad\n###midcolumn_ad\n###middle-ad\n###middle-ad-destin\n###middle-story-ad-container\n###middleRightColumnAdvert\n###middle_ad\n###middle_ads\n###middle_bannerad\n###middle_bannerad_section\n###middle_body_advertising\n###middle_mpu\n###middle_sponsor_ads\n###middlead\n###middleads\n###middleads2\n###midpost_ad\n###midrect_ad\n###midstrip_ad\n###mini-ad\n###mini-panel-dart_stamp_ads\n###mini-panel-dfp_stamp_ads\n###mini-panel-two_column_ads\n###miniAdsAd\n###mini_ads_inset\n###mn_ads\n###moa-ads-long\n###mobile_ad_spot_header\n###mochila-column-right-ad-300x250\n###mochila-column-right-ad-300x250-1\n###mod-partner-center\n###mod_ad\n###mod_ad_top\n###modal-ad\n###modal_videoAd_wrapper\n###module-ad-300x250\n###module-ad-728x90\n###module-google_ads\n###module_ad\n###module_box_ad\n###module_sky_scraper\n###monsterAd\n###moogleAd\n###more_ad\n###moreads\n###mos-adCarouselContainer\n###mosBannerAd\n###mosTileAds\n###most_popular_ad\n###motionAd\n###movads10\n###movieads\n###mozo-ad\n###mph-rightad\n###mpr-ad-leader\n###mpr-ad-wrapper-1\n###mpr-ad-wrapper-2\n###mpu-ad\n###mpu-advert\n###mpu-cont\n###mpu-content\n###mpu2\n###mpu2_container\n###mpu300250\n###mpuAd\n###mpuAdvert\n###mpuContainer\n###mpuDiv\n###mpuInContent\n###mpuSecondary\n###mpuSlot\n###mpuWrapper\n###mpuWrapper600\n###mpuWrapperAd\n###mpuWrapperAd2\n###mpu_300x250\n###mpu_ad\n###mpu_ad2\n###mpu_adv\n###mpu_banner\n###mpu_box\n###mpu_container\n###mpu_firstpost\n###mpu_holder\n###mpu_text_ad\n###mpuad\n###mpubox\n###mpuholder\n###mpuholder01\n###mpusLeftAd\n###mr_banner_topad\n###mrec-advertisement\n###mrecAdContainer\n###mrecPlacement\n###msAds\n###ms_ad\n###msad\n###msnAds_inner\n###msn_header_ad\n###msnau_ad_medium_rectangle\n###mtSponsor\n###mts_ad_widget\n###mu_2_ad\n###multiLinkAdContainer\n###multi_ad\n###multibar-ads\n###mvp_160_ad\n###my-ads\n###my-adsFPAD\n###my-adsFPL\n###my-adsFPT\n###my-adsLREC\n###my-adsMAST\n###my-medium-rectangle-ad-1-container\n###my-medium-rectangle-ad-2-container\n###myAd\n###myads_HeaderButton\n###n_sponsor_ads\n###na_adblock\n###name-advert\n###namecom_ad_hosting_main\n###narrow-ad\n###narrow_ad_unit\n###nat-ad-300x250\n###natadad300x250\n###nationalAd_secondary_btm\n###nationalAd_secondary_top\n###national_ad\n###national_microlink_ads\n###nationalad\n###nativeadsteaser\n###navAdBanner\n###nav_ad\n###nav_ad_728_mid\n###navads-container\n###navbar_ads\n###navi_banner_ad_780\n###navigation-ad\n###nba160PromoAd\n###nba300Ad\n###nbaGI300ad\n###nbaHeaderAds\n###nbaHouseAnd600Ad\n###nbaLeft600Ad\n###nbaMidAds\n###nbaVid300Ad\n###nbabot728ad\n###nbcAd300x250\n###nbcShowcaseAds\n###nc-header-ads\n###network_header_ad_1\n###new-ad-footer\n###new-ad-leaderboard\n###new-ad-sidebottom\n###new-ad-sidetop\n###newAd\n###newPostProfileAd\n###newPostProfileVerticalAd\n###newTopAds\n###new_ad_728_90\n###new_ad_header\n###new_topad\n###newadmpu\n###newads\n###news_advertorial_content\n###news_advertorial_top\n###news_article_ad_mrec\n###news_article_ad_mrec_right\n###news_left_ad\n###news_right_ad\n###newstream_first_ad\n###newuser_ad\n###ng_rtcol_ad\n###nib-ad\n###nlrightsponsorad\n###noresults_ad_container\n###noresultsads\n###northad\n###northbanner-advert\n###northbanner-advert-container\n###notify_ad\n###np_content_ads_module\n###nrAds\n###nrcAd_Top\n###ns_ad1\n###ns_ad2\n###ns_ad3\n###ntvads\n###nuevo_ad\n###oanda_ads\n###oas_Middle\n###oas_Middle1\n###oas_Right\n###oas_Right2\n###oas_Top\n###oas_Top1\n###oas_asponsor\n###oas_wide_skyscraper\n###ob_sponsoredcontent\n###oba_message\n###objadscript\n###oem_ad\n###ofie_ad\n###omnibar_ad\n###onespot-ads\n###online_ad\n###onpageads\n###onpageadstext\n###onscroll-ad-holder-mpu2\n###openx-slc\n###openx-text-ad\n###openx-widget\n###openx_iframe\n###osDirAd2Post\n###osads_300\n###outbrain-paid\n###outbrainAdWrapper\n###outbrain_dual_ad_fs_0_dual\n###outbrain_vertical\n###outerAd300\n###outerTwrAd\n###outer_div_top_ad\n###outsideAds\n###ovAd\n###ovAdWrap\n###ovadsense\n###overlay_ad\n###overlayadd\n###overtureSponsoredLinks\n###p-advert\n###p-googlead\n###p-googleadsense\n###p2squaread\n###p360_ad_unit\n###p_lt_zoneContent_SubContent_p_lt_zoneRight_IFrameAd_panelAd\n###page-ad-container-TopLeft\n###page-ad-top\n###page-advert-3rdrail\n###page-advertising\n###page-header-ad\n###page-top-ad\n###pageAdDiv\n###pageAdds\n###pageAds\n###pageAdsDiv\n###pageAdvert\n###pageBannerAd\n###pageOwnershipAd_side\n###page_ad\n###page_ad_top\n###page_content_top_ad\n###page_top_ad\n###pageads_top\n###pagebottomAd\n###pagelet_adbox\n###pagelet_netego_ads\n###pagelet_search_ads2\n###pagelet_side_ads\n###pagination-advert\n###paidlistingAds\n###panel-ad\n###panelAd\n###panoAdBlock\n###parade_300ad\n###parade_300ad2\n###partner-ad\n###partnerAd\n###partnerMedRec\n###partnerSitesBannerAd\n###partner_ads\n###pause-ad\n###pauseAd\n###pb_report_ad\n###pcworldAdBottom\n###pcworldAdTop\n###pencil-ad\n###pencil-ad-container\n###perm_ad\n###permads\n###pf-dialog-ads\n###pg-ad-160x600\n###pg-ad-item-160x600\n###pgFooterAd\n###pgHeaderAd\n###pgSquareAd\n###pgad_Bottom3\n###photoAdvert\n###photoAndAdBox\n###photo_ad_google\n###picad_div\n###pinball_ad\n###pixAd\n###plAds\n###player-advert\n###player-below-advert\n###player-midrollAd\n###playerAd\n###playerAdsRight\n###player_ad\n###player_ads\n###player_middle_ad\n###player_top_ad\n###playerad\n###playvideotopad\n###pmad-in1\n###pnAd2\n###pnl_BannerAdServed\n###pod-ad-video-page\n###pof_ads_Wrapper\n###pop_ad\n###popadwrap\n###popoverAd\n###popular-column-ad\n###populate_ad_bottom\n###populate_ad_left\n###populate_ad_textupper\n###populate_ad_textupper_textlink\n###popupAd\n###popupBottomAd\n###popup_domination_lightbox_wrapper\n###popupadunit\n###portlet-advertisement-left\n###portlet-advertisement-right\n###pos_ContentAd2\n###post-ad\n###post-ad-hd\n###post-ad-layer\n###post-ads\n###post-adsense-top-banner\n###post-bottom-ads\n###post-page-ad\n###post-promo-ad\n###post5_adbox\n###postAd\n###postNavigationAd\n###post_ad\n###post_addsense\n###post_adsense\n###post_adspace\n###post_advert\n###post_id_ad_bot\n###postpageaddiv\n###ppcAdverts\n###pr_ad\n###pr_advertising\n###pre-footer-ad\n###pre_advertising_wrapper\n###pregame_header_ad\n###premSpons\n###premier-ad-space\n###preminumAD\n###premiumAdTop\n###premium_ad\n###premium_ad_inside\n###premiumad\n###premiumads\n###prerollAd\n###preroll_compainion_ad\n###priceGrabberAd\n###primary_mpu_placeholder\n###prime-ad-space\n###print-advertisement\n###print-header-ad\n###print_ads\n###printads\n###privateadbox\n###privateads\n###pro_ads_custom_widgets-2\n###pro_ads_custom_widgets-3\n###pro_ads_custom_widgets-5\n###pro_ads_custom_widgets-7\n###pro_ads_custom_widgets-8\n###product-adsense\n###profileAdHeader\n###proj-bottom-ad\n###promo-ad\n###promoAds\n###promoFloatAd\n###promo_ads\n###ps-ad-iframe\n###ps-top-ads-sponsored\n###ps-vertical-ads\n###psmpopup\n###pub-right-bottom-ads\n###pub-right-top-ads\n###pub468x60\n###publicGoogleAd\n###publicidad\n###publicidad-video\n###publicidad_120\n###publicidadeLREC\n###pulse360_1\n###pushdownAdWrapper\n###pushdown_ad\n###pusher-ad\n###pvadscontainer\n###qaSideAd\n###qadserve_728x90_StayOn_div\n###qm-ad-big-box\n###qm-ad-sky\n###qm-dvdad\n###qpon_big_ad-teaser\n###qtopAd-graybg\n###quick_ads_frame_bottom\n###quidgetad\n###quigo\n###quigo-ad\n###quigo_ad\n###quinAdLeaderboard\n###r-ad-tag\n###r-ads-listings\n###r-ads-preview-top\n###r1SoftAd\n###r_ad3_ad\n###r_adver\n###rafael_side_ads_widget-5\n###rail-ad-wrap\n###rail-bottom-ad\n###railAd\n###rail_ad\n###rail_ad1\n###rail_ad2\n###rbAdWrapperRt\n###rbAdWrapperTop\n###rc_edu_span5AdDiv\n###rd_banner_ad\n###reader-ad-container\n###realEstateAds\n###rearad\n###recommendedAdContainer\n###rect-ad\n###rectAd\n###rect_ad\n###rectad\n###rectangle-ad\n###rectangleAd\n###rectangleAdSpace\n###rectangle_ad\n###rectangle_ad_smallgame\n###redirect-ad\n###redirect-ad-modal\n###redirect_ad_1_div\n###redirect_ad_2_div\n###reference-ad\n###refine-300-ad\n###refine-ad\n###refreshable_ad5\n###region-node-advert\n###region-regions-ad-top\n###region-top-ad\n###reklam-728x90\n###reklama\n###reklama_big\n###reklama_left_body\n###reklama_left_up\n###reklama_right_up\n###related-ads\n###related-projects-sponsor\n###related_ad\n###related_ads\n###related_ads_box\n###relatedvideosads2\n###relocation_ad_container\n###remove_ads_button1\n###remove_ads_button2\n###removeadlink\n###resultSponLinks\n###resultsAdsBottom\n###resultsAdsSB\n###resultsAdsTop\n###rg_right_ad\n###rh-ad\n###rh-ad-container\n###rh_tower_ad\n###rhapsodyAd\n###rhc_ads\n###rhsBottomAd\n###rhs_ads\n###rhs_adverts\n###rhsads\n###rhsadvert\n###richad\n###right-ad\n###right-ad-1\n###right-ad-block\n###right-ad-col\n###right-ad-skin\n###right-ad-title\n###right-ad1\n###right-adds\n###right-ads\n###right-ads-3\n###right-ads-4\n###right-advert\n###right-bar-ad\n###right-box-ad\n###right-col-ad-600\n###right-featured-ad\n###right-mpu-1-ad-container\n###right-uppder-adverts\n###right-uppder-adverts-container\n###right1-ad\n###right160x600ads_part\n###right2Ad_Iframe\n###rightAD\n###rightAd\n###rightAd1\n###rightAd160x600\n###rightAd160x600two\n###rightAd300x250\n###rightAd300x250Lower\n###rightAdBar\n###rightAdColumn\n###rightAdContainer\n###rightAdDiv1\n###rightAdDiv2\n###rightAdDiv3\n###rightAdHideLinkContainer\n###rightAdHolder\n###rightAd_Iframe\n###rightAd_rdr\n###rightAds\n###rightAdsDiv\n###rightBottomAd\n###rightBoxAdvertisement\n###rightBoxAdvertisementLast\n###rightColAd\n###rightColumnAds\n###rightColumnMpuAd\n###rightColumnSkyAd\n###rightDoubleClick\n###rightMortgageAd\n###rightSideAd\n###right_Ads2\n###right_ad\n###right_ad_2\n###right_ad_box\n###right_ad_container\n###right_ad_top\n###right_ad_wrapper\n###right_ads\n###right_ads_box\n###right_adsense\n###right_adv1-v2\n###right_advert\n###right_advertisement\n###right_advertising\n###right_adverts\n###right_bg_ad\n###right_block_ads\n###right_column_ad\n###right_column_ad_container\n###right_column_ads\n###right_column_adverts\n###right_column_internal_ad_container\n###right_column_top_ad_unit\n###right_gallery_ad\n###right_mini_ad\n###right_panel_ads\n###right_rail_ad_header\n###right_side_bar_ami_ad\n###right_sidebar_ads\n###right_top_gad\n###rightad\n###rightad1\n###rightad2\n###rightadBorder\n###rightadBorder1\n###rightadBorder2\n###rightadContainer\n###rightadd300\n###rightadg\n###rightadhome\n###rightadpat\n###rightads\n###rightadsarea\n###rightadvertbar-doubleclickads\n###rightbar-ad\n###rightbar_ad\n###rightcol_mgid\n###rightcol_sponsorad\n###rightcolhouseads\n###rightcollongad\n###rightcolumn_300x250ad\n###rightcolumn_ad_gam\n###rightgoogleads\n###rightinfoad\n###rightrail-ad\n###rightrail_ad-0\n###rightside-ads\n###rightside_ad\n###rightskyad\n###righttop-adverts\n###righttop-adverts-container\n###ringtone-ad-bottom\n###ringtone-ad-top\n###rm_ad_text\n###rockmelt-ad-top\n###rolldown-ad\n###ros_ad\n###rotating-ad-display\n###rotating-ads-wrap\n###rotating_ad\n###rotatingads\n###row-ad\n###row2AdContainer\n###rprightHeaderAd\n###rpuAdUnit-0\n###rrAdWrapper\n###rr_MSads\n###rr_ad\n###rr_gallery_ad\n###rside_ad\n###rside_adbox\n###rt-ad\n###rt-ad-top\n###rt-ad468\n###rtAdvertisement\n###rtMod_ad\n###rt_side_top_google_ad\n###rtcol_advert_1\n###rtcol_advert_2\n###rtm_div_562\n###rtm_html_226\n###rtm_html_920\n###rtmm_right_ad\n###rtmod_ad\n###rtn_ad_160x600\n###rubicsTextAd\n###rxgcontent\n###rxgfooter\n###rxgheader\n###rxgleftbar\n###rxgrightbar\n###sAdsBox\n###s_ads_header\n###say-center-contentad\n###sb-ad-sq\n###sb_ad_links\n###sb_advert\n###sbads-top\n###scoreAD\n###scroll-ad\n###scroll_banner_ad\n###scrollingads\n###sct_side_ads\n###sdac_bottom_ad_widget-3\n###sdac_footer_ads_widget-3\n###sdac_skyscraper_ad_widget-3\n###sdac_top_ad_widget-3\n###search-ad\n###search-ads1\n###search-google-ads\n###search-sponsor\n###search-sponsored-links\n###search-sponsored-links-top\n###searchAd\n###searchAdFrame\n###searchAdSenseBox\n###searchAdSenseBoxAd\n###searchAdSkyscraperBox\n###searchAds\n###search_ad\n###search_ads\n###search_result_ad\n###searchresult_advert_right\n###searchsponsor\n###sec_adspace\n###second-adframe\n###second-adlayer\n###second-right-ad-tray\n###second-story-ad\n###secondBoxAd\n###secondBoxAdContainer\n###second_ad_div\n###secondad\n###secondary_ad_inventory\n###secondaryad\n###secondrowads\n###sect-ad-300x100\n###sect-ad-300x250\n###sect-ad-300x250-2\n###section-ad\n###section-ad-1-728\n###section-ad-300-250\n###section-ad-4-160\n###section-ad-bottom\n###section-blog-ad\n###section-container-ddc_ads\n###section-pagetop-ad\n###section-sub-ad\n###section_ad\n###section_advertisements\n###section_advertorial_feature\n###self-ad\n###self_serve_ads\n###sensis_island_ad_1\n###sensis_island_ad_1_column\n###sensis_island_ad_2\n###sensis_island_ad_2_column\n###sensis_island_ad_3\n###sensis_island_ad_3_column\n###serveAd1\n###serveAd2\n###serveAd3\n###servfail-ads\n###sew-ad1\n###sew_advertbody\n###sgAdHeader\n###sgAdScGp160x600\n###shellnavAd\n###shoppingads\n###shortads\n###shortnews_advert\n###show-ad\n###show-player-right-ad\n###showAd\n###show_ads\n###showads\n###showcaseAd\n###sic_superBannerAd-loader\n###sic_superBannerAdTop\n###side-ad\n###side-ad-container\n###side-ads\n###side-ads-box\n###side-banner-ad\n###side-big-ad-bottom\n###side-big-ad-middle\n###side-boxad\n###side-content-ad-1\n###side-content-ad-2\n###side-halfpage-ad\n###side-skyscraper-ad\n###sideABlock\n###sideABlockHeader\n###sideAd\n###sideAd1\n###sideAd2\n###sideAdArea\n###sideAdLarge\n###sideAdSmall\n###sideAdSub\n###sideAds\n###sideBannerAd\n###sideBar-ads\n###sideBarAd\n###sideBySideAds\n###sideSponsors\n###side_ad\n###side_ad_call\n###side_ad_container_A\n###side_ad_module\n###side_ad_wrapper\n###side_ads\n###side_ads_by_google\n###side_adv_2\n###side_adverts\n###side_longads\n###side_sky_ad\n###side_skyscraper_ad\n###side_sponsors\n###sidead\n###sidead1\n###sidead1mask\n###sideadbox\n###sideads\n###sideads_container\n###sideadscol\n###sideadtop-to\n###sideadvert\n###sideadzone\n###sidebar-125x125-ads\n###sidebar-125x125-ads-below-index\n###sidebar-ad\n###sidebar-ad-300\n###sidebar-ad-block\n###sidebar-ad-boxes\n###sidebar-ad-holdd\n###sidebar-ad-holdd-middle\n###sidebar-ad-loader\n###sidebar-ad-middle\n###sidebar-ad-space\n###sidebar-ad-wrap\n###sidebar-ad1\n###sidebar-ad3\n###sidebar-ad_dbl\n###sidebar-ads\n###sidebar-ads-content\n###sidebar-ads-narrow\n###sidebar-ads-wide\n###sidebar-ads-wrapper\n###sidebar-adspace\n###sidebar-adv\n###sidebar-advertise-text\n###sidebar-advertisement\n###sidebar-banner300\n###sidebar-left-ad\n###sidebar-long-advertise\n###sidebar-main-ad\n###sidebar-post-120x120-banner\n###sidebar-post-300x250-banner\n###sidebar-scroll-ad-container\n###sidebar-sponsor-link\n###sidebar-sponsors\n###sidebar-top-ad\n###sidebar-top-ads\n###sidebar2-ads\n###sidebar2ads\n###sidebarAd\n###sidebarAd1\n###sidebarAd2\n###sidebarAdSense\n###sidebarAdSpace\n###sidebarAdUnitWidget\n###sidebarAds\n###sidebarAdvert\n###sidebarSponsors\n###sidebarTextAds\n###sidebarTowerAds\n###sidebar_ad\n###sidebar_ad_1\n###sidebar_ad_adam\n###sidebar_ad_container\n###sidebar_ad_top\n###sidebar_ad_widget\n###sidebar_ad_wrapper\n###sidebar_adblock\n###sidebar_ads\n###sidebar_ads_180\n###sidebar_box_add\n###sidebar_mini_ads\n###sidebar_sponsoredresult_body\n###sidebar_topad\n###sidebar_txt_ad_links\n###sidebarad\n###sidebarad_300x600-33\n###sidebarad_300x600-4\n###sidebaradpane\n###sidebaradsense\n###sidebaradver_advertistxt\n###sidebaradverts\n###sidebard-ads-wrapper\n###sidebargooglead\n###sidebargoogleads\n###sidebarrectad\n###sideline-ad\n###sidepad-ad\n###simple_ads_manager_ad_widget-2\n###simple_ads_manager_widget-3\n###simple_ads_manager_widget-4\n###simplyhired_job_widget\n###single-ad\n###single-ad-2\n###single-adblade\n###single-mpu\n###singleAd\n###singleAdsContainer\n###single_ad_above_content\n###singlead\n###site-ad-container\n###site-ads\n###site-leaderboard-ads\n###site-sponsors\n###siteAdHeader\n###site_body_header_banner_ad\n###site_bottom_ad_div\n###site_content_ad_div\n###site_top_ad\n###sitead\n###sitemap_ad_left\n###skcolAdSky\n###skin-ad\n###skinad-left\n###skinad-right\n###skinmid-ad\n###skinmid-ad_iframe\n###sky-ad\n###sky-ads\n###sky-left\n###sky-right\n###sky-top-ad\n###skyAd\n###skyAdContainer\n###skyAdNewsletter\n###skyScraperAd\n###skyScrapperAd\n###skyWrapperAds\n###sky_ad\n###sky_advert\n###skyads\n###skyadwrap\n###skybox-ad\n###skyline_ad\n###skyscrapeAd\n###skyscraper-ad\n###skyscraperAd\n###skyscraperAdContainer\n###skyscraperAdWrap\n###skyscraperAds\n###skyscraperWrapperAd\n###skyscraper_ad\n###skyscraper_advert\n###skyscraperadblock\n###skyscrapper-ad\n###slide_ad\n###slidead\n###slideboxad\n###slider-ad\n###sliderAdHolder\n###slider_ad\n###slideshow-middle-ad\n###slideshowAd\n###slideshow_ad_300x250\n###sm-banner-ad\n###smallAd\n###smallBannerAdboard\n###small_ad\n###small_ad_banners_vertical\n###small_ads\n###smallad\n###smallads\n###smallerAd\n###smxTextAd\n###socialAD\n###socialBarAd\n###socialBarAdMini\n###some-ads\n###some-ads-holder\n###some-more-ads\n###source_ad\n###source_content_ad\n###spec_offer_ad2\n###special-deals-ad\n###specialAd_one\n###specialAd_two\n###special_ads\n###specialadfeatures\n###specialadvertisingreport_container\n###specials_ads\n###speed_ads\n###speeds_ads\n###speeds_ads_fstitem\n###speedtest_mrec_ad\n###sphereAd\n###sphereAd-wrap\n###spl_ad\n###spnAds\n###spnslink\n###sponBox\n###sponLinkDiv_1\n###sponLinkDiv_2\n###spon_links\n###sponlink\n###sponlinks\n###sponsAds\n###sponsLinks\n###spons_links\n###sponseredlinks\n###sponsor-flyout-wrap\n###sponsor-links\n###sponsorAd\n###sponsorAd1\n###sponsorAd2\n###sponsorAdDiv\n###sponsorBanners32\n###sponsorBar\n###sponsorBorder\n###sponsorContainer0\n###sponsorFooter\n###sponsorLinkDiv\n###sponsorLinks\n###sponsorResults\n###sponsorSpot\n###sponsorTab\n###sponsorText\n###sponsorTextLink\n###sponsor_300x250\n###sponsor_ads\n###sponsor_banderole\n###sponsor_bar\n###sponsor_bottom\n###sponsor_box\n###sponsor_deals\n###sponsor_div\n###sponsor_footer\n###sponsor_header\n###sponsor_link\n###sponsor_no\n###sponsor_partner_single\n###sponsor_posts\n###sponsor_right\n###sponsored-bucket\n###sponsored-features\n###sponsored-links\n###sponsored-links-container\n###sponsored-links-list\n###sponsored-links-media-ads\n###sponsored-listings\n###sponsored-message\n###sponsored-not\n###sponsored-resources\n###sponsored-text-links\n###sponsored-widget\n###sponsored1\n###sponsoredAdvertisement\n###sponsoredBottom\n###sponsoredBox1\n###sponsoredBox2\n###sponsoredFeaturedHoz\n###sponsoredHoz\n###sponsoredLinks\n###sponsoredLinksBox\n###sponsoredLinks_Bottom\n###sponsoredLinks_Top\n###sponsoredList\n###sponsoredResults\n###sponsoredResultsWide\n###sponsoredSiteMainline\n###sponsoredSiteSidebar\n###sponsoredTop\n###sponsored_ads\n###sponsored_ads_v4\n###sponsored_container\n###sponsored_content\n###sponsored_game_row_listing\n###sponsored_head\n###sponsored_label\n###sponsored_link\n###sponsored_link_bottom\n###sponsored_links\n###sponsored_native_ad\n###sponsored_v12\n###sponsoredads\n###sponsoredlinks\n###sponsoredlinks_cntr\n###sponsoredlinks_left_wrapper\n###sponsoredlinkslabel\n###sponsoredresultsBottom_body\n###sponsoredresults_top\n###sponsoredwellcontainerbottom\n###sponsoredwellcontainertop\n###sponsorlink\n###sponsors-block\n###sponsors-home\n###sponsorsBox\n###sponsorsContainer\n###sponsors_right_container\n###sponsors_top_container\n###sponsorsads1\n###sponsorsads2\n###sponsorship-box\n###sponsorshipBadge\n###sporsored-results\n###sports_only_ads\n###spotadvert\n###spotadvert1\n###spotadvert2\n###spotadvert3\n###spotadvert5\n###spotlight-ad-container-block\n###spotlight-ad_iframe\n###spotlight-ads\n###spotlightAds\n###spotlight_ad\n###spotlightad\n###spr_ad_bg\n###spreadly-advertisement-container\n###sprint_ad\n###sqAd\n###sq_ads\n###square-ad\n###square-ad-box\n###square-ad-space\n###square-ad-space_btm\n###square-ads\n###square-sponsors\n###squareAd\n###squareAdBottom\n###squareAdSpace\n###squareAdTop\n###squareAdWrap\n###squareAds\n###square_ad\n###square_lat_adv\n###squaread\n###squareadAdvertiseHere\n###squared_ad\n###srp_adsense-top\n###ss-ad-container\n###ss-ad-overlay\n###st_topads\n###starad\n###start_middle_container_advertisment\n###stationad\n###sticky-ad\n###sticky-ad-container\n###stickyAdBlock\n###stickyBottomAd\n###stickySkyAd\n###stickyads\n###stopAdv\n###stopAdvt\n###story-90-728-area\n###story-ad\n###story-ad-a\n###story-ad-b\n###story-ad-top\n###story-ad-wrap\n###story-leaderboard-ad\n###story-page-leaderboard-ad\n###story-sponsoredlinks\n###storyAd\n###storyAdWrap\n###story_ad\n###story_ads\n###story_main_mpu\n###story_unseen_ad\n###storyad2\n###storyblock-ad\n###style_ad_bottom\n###subAdsFooter\n###subbgad\n###subheaderAd\n###submenu-ads\n###subpage-ad-right\n###subpage-ad-top\n###subpageAd\n###subpage_234x60ad\n###sugarad-stitial-overlay\n###super_ad\n###svp-ad\n###swads\n###sway-banner-ad\n###sway-banner-ad-container\n###sway-banner-ad1\n###sweep_right_ad\n###sweep_top_ad\n###swfAd1\n###swfAd5\n###syn_headerad_zone\n###synch-ad\n###systemad_background\n###t7ad\n###tabAdvertising\n###table_ads\n###taboola-ad\n###tailResultAd\n###takeover-ad\n###takeover_ad\n###takeoverad\n###targetWeeklyAd\n###targetWeeklyAdLogo\n###targeted-ads\n###tblAd\n###tblReklama2\n###tbl_googlead\n###tbo_headerads\n###tcwAd\n###td-GblHdrAds\n###td-applet-ads_2_container\n###td-applet-ads_container\n###tdBannerTopAds\n###tdGoogleAds\n###td_adunit1\n###td_adunit1_wrapper\n###td_adunit2\n###td_sponsorAd\n###teaser-adtag-left\n###teaser-adtag-right\n###temp-ads\n###template_ad_leaderboard\n###template_affiliates\n###tertiary_advertising\n###test_adunit_160_article\n###text-ad\n###text-ads\n###text-link-ads\n###text-linkAD\n###textAd\n###textAd1\n###textAds\n###textAdsTop\n###text_ad\n###text_ads\n###text_advert\n###textad\n###textad3\n###textad_block\n###textads_right_container\n###textlink-advertisement\n###textsponsor\n###tf_page_ad_content_bottom\n###tgAD_imu_2\n###tgAD_imu_3\n###tgAD_imu_4\n###the-last-ad-standing\n###theAd\n###theadsADT3\n###thefooterad\n###thelistBottomAd\n###themis-ads\n###third_party_ads\n###thisisnotanad\n###thistad\n###thread-ad\n###ti-sway-ad\n###tile-ad\n###tileAds\n###tilia_ad\n###tippytop-ad\n###title-sponsor-banner\n###title-wide-sponsored-by\n###tmcomp_ad\n###tmgAd_div_mpu_1\n###tmglBannerAd\n###tmn_ad_1\n###tmn_ad_2\n###tmn_ad_3\n###tmp2_promo_ad\n###tnt_ad_column\n###toaster_ad\n###tobsideAd\n###today_ad_bottom\n###toolbarSlideUpAd\n###top-ad\n###top-ad-970x250\n###top-ad-banner\n###top-ad-container\n###top-ad-content\n###top-ad-left-spot\n###top-ad-menu\n###top-ad-position-inner\n###top-ad-rect\n###top-ad-right-spot\n###top-ad-unit\n###top-ad-wrapper\n###top-adblock\n###top-adds\n###top-ads\n###top-ads-1\n###top-ads-contain\n###top-ads-tabs\n###top-adspot\n###top-advert\n###top-advertisement\n###top-advertisements\n###top-banner-ad\n###top-leaderboard-ad\n###top-left-ad\n###top-middle-add\n###top-right-ad\n###top-search-ad-wrapper\n###top-sidebar-ad-300x250\n###top-story-ad\n###top100_ad300right\n###top100_ad300rightbottom\n###top2_ads\n###top300x250ad\n###top3_ads\n###top728ad\n###topAD\n###topAd\n###topAd300x250_\n###topAd728x90\n###topAdArea\n###topAdBanner\n###topAdBar\n###topAdBox\n###topAdContainer\n###topAdDropdown\n###topAdHolder\n###topAdSenseDiv\n###topAdShow\n###topAdSpace\n###topAdSpace_div\n###topAdcontainer\n###topAds\n###topAds1\n###topAds2\n###topAdsContainer\n###topAdsDiv\n###topAdsG\n###topAdv\n###topAdvBox\n###topAdvert\n###topAdvert-09\n###topBannerAd\n###topBannerAdContainer\n###topContentAdTeaser\n###topImgAd\n###topLBAd\n###topLeaderAdAreaPageSkin\n###topLeaderboardAd\n###topMPU\n###topMpuContainer\n###topNavLeaderboardAdHolder\n###topOpenXAdSlot\n###topOverallAdArea\n###topRightBlockAdSense\n###topSponsoredLinks\n###top_AD\n###top_ad\n###top_ad-sense\n###top_ad_area\n###top_ad_banner\n###top_ad_block\n###top_ad_box\n###top_ad_container\n###top_ad_game\n###top_ad_inventory\n###top_ad_parent\n###top_ad_strip\n###top_ad_td\n###top_ad_unit\n###top_ad_wrapper\n###top_ad_zone\n###top_adblock_fix\n###top_add\n###top_ads\n###top_ads_container\n###top_ads_region\n###top_ads_wrap\n###top_adsense_cont\n###top_adspace\n###top_adv\n###top_adv-v2\n###top_adv_220\n###top_adv_728\n###top_advert\n###top_advert_box\n###top_advertise\n###top_advertising\n###top_container_ad\n###top_content_ad_inner_container\n###top_google_ad_container\n###top_google_ads\n###top_header_ad_wrapper\n###top_mpu\n###top_mpu_ad\n###top_rectangle_ad\n###top_right_ad\n###top_span_ad\n###top_sponsor_ads\n###top_sponsor_text\n###top_wide_ad\n###topad\n###topad-728x90\n###topad1\n###topad2\n###topad728\n###topad_holder\n###topad_left\n###topad_right\n###topad_table\n###topadbar\n###topadblock\n###topadcontainer\n###topaddwide\n###topadh\n###topadone\n###topads-spacer\n###topads-wrapper\n###topadsblock\n###topadsdiv\n###topadsense\n###topadspace\n###topadvert\n###topadvertisements\n###topadvertisementwrapper\n###topadwrap\n###topadz\n###topadzone\n###topbanner_ad\n###topbanner_sponsor\n###topbannerad\n###topbanneradtitle\n###topbar-ad\n###topbarAd\n###topbar_Adc1_AdContainer\n###topbarads\n###topcustomad\n###topheader_ads\n###topicPageAdsense\n###topleaderAd\n###topleaderboardad\n###topnav-ad-shell\n###topnavad\n###toppannonse\n###topright-ad\n###toprightAdvert\n###toprightad\n###toprow-ad\n###topsidebar-ad\n###topsponad\n###topsponsorads\n###topsponsored\n###toptextad\n###tour300Ad\n###tour728Ad\n###tourSponsoredLinksContainer\n###tower1ad\n###towerAdContainer\n###towerad\n###tr-ad\n###tr-adv-banner\n###trafficrevenue2\n###transparentad\n###travel_ad\n###trc_google_ad\n###trendex-sponsor-ad\n###trib2-footer-ad-back\n###trib2-leaderboard-ad-back\n###tripleAdInner\n###tripleAdOuter\n###ts-ad_module\n###ttp_ad_slot1\n###ttp_ad_slot2\n###tube_ad\n###turnAD\n###tut_ads\n###twogamesAd\n###txfPageMediaAdvertVideo\n###txtAdcontainer2\n###txtTextAd\n###txt_link_ads\n###txtads\n###ugly-ad\n###ui-about-these-ads-img\n###ultraWideAdContainer\n###under_content_ad\n###under_story_ad\n###undergameAd\n###universalAdContainer\n###uploadMrecAd\n###upper-ads\n###upperAdvertisementImg\n###upperMpu\n###upperRightAds\n###upper_adbox\n###upper_advertising\n###upper_small_ad\n###upperad\n###urban_contentad_1\n###urban_contentad_2\n###urban_contentad_article\n###usa_ad_728x90\n###usenetAdsTable\n###uvp_ad_container\n###uzcrsite\n###v_ad\n###vap_adsense-top\n###variant_adsLazyLoad\n###vc_side_ad\n###vdiAd\n###vdls-adv\n###vdls-advs\n###vert-ads\n###vertAd2\n###vert_ad\n###vert_ad_placeholder\n###vertad1\n###vertical_ad\n###vertical_ads\n###vhDivAdSlot300x250\n###vid-left-ad\n###vid-right-ad\n###vidAdTop\n###video-ad-companion-rectangle\n###video-adv\n###video-coverage-ad-300x250\n###video-embed-ads\n###video-header-advert\n###video-in-player-ad\n###video-in-player-ad-container\n###video-under-player-ad\n###videoAd\n###videoAdvert\n###videoCompanionAd\n###videoPlayerAdLayer\n###video_ads_background\n###video_ads_overdiv\n###video_adv\n###video_advert\n###video_advert2\n###video_advert3\n###video_advert_top\n###video_cnv_ad\n###video_embed_ads\n###video_hor_bottom_ads\n###video_overlay_ad\n###video_vert_right_ads\n###videoadlogo\n###videoads\n###videopageadblock\n###view-photo-ad\n###viewAd1\n###view_ads_bottom_bg\n###view_ads_bottom_bg_middle\n###view_ads_content_bg\n###view_ads_top_bg\n###view_ads_top_bg_middle\n###view_adtop\n###viewer-ad-bottom\n###viewer-ad-top\n###viewer_ads_wrapper\n###viewportAds\n###viewvid_ad300x250\n###visual-ad\n###votvAds_inner\n###vsw-ads\n###vsw_ad\n###wTopAd\n###wXcds12-ad\n###wallAd\n###wall_advert\n###wallpaper-ad-link\n###wallpaperAd_left\n###wallpaperAd_left3\n###wallpaperAd_right\n###wallpaperAd_right2\n###wallpaperAd_right2_1\n###wallpaper_flash_ad\n###wallpaper_header_ad\n###walltopad\n###watch7-sidebar-ads\n###weather-ad\n###weather_sponsor\n###weatherad\n###weblink_ads_container\n###websearchAdvert\n###welcomeAdsContainer\n###welcome_ad\n###welcome_ad_mrec\n###welcome_advertisement\n###wf_ContentAd\n###wf_FrontSingleAd\n###wf_SingleAd\n###wf_bottomContentAd\n###wg_ads\n###wgtAd\n###wh_ad_4\n###whatsnews_footer_ad\n###whatsnews_top_ad\n###whitepaper-ad\n###whoisRightAdContainer\n###whoisRightAdContainerBottom\n###whoisRightAdContainerTop\n###wibiyaAdRotation\n###wibiyaToolbarAdUnitFlash\n###wideAdd\n###wide_ad_unit\n###wide_ad_unit2\n###wide_ad_unit_2\n###wide_ad_unit_top\n###wide_ad_unit_up\n###wide_adv\n###wide_right_ad\n###wideskyscraper_160x600_left\n###wideskyscraper_160x600_right\n###widget-ads-3\n###widget-ads-4\n###widget-adv-12\n###widget-box-ad-1\n###widget-box-ad-2\n###widget-style-ad\n###widgetADT3\n###widget_Adverts\n###widget_ad\n###widget_advertisement\n###widgetwidget_adserve2\n###wl-pencil-ad\n###wog-300x250-ads\n###wow-ads\n###wp-insert-ad-widget-1\n###wp-topAds\n###wp125adwrap_2c\n###wp_ad_marker\n###wp_pro_ad_system_ad_zone\n###wrapAd\n###wrapAdRight\n###wrapAdTop\n###wrapCommentAd\n###wrapperAdsTopLeft\n###wrapperAdsTopRight\n###wrapperRightAds\n###wrapper_ad_Top\n###wrapper_ad_island2\n###wrapper_sponsoredlinks\n###x-ad-item-themed-skyscraper-placekeeper\n###x-houseads\n###x01-ad\n###x300_ad\n###xColAds\n###xlAd\n###xybrad\n###y-ad-units\n###y708-ad-expedia\n###y708-ad-lrec\n###y708-ad-partners\n###y708-ad-ysm\n###y708-advertorial-competitions\n###y708-advertorial-marketplace\n###yahoo-ads\n###yahoo-ads-content\n###yahoo-sponsors\n###yahooAdsBottom\n###yahooSponsored\n###yahoo_ad\n###yahoo_ad_contanr\n###yahoo_ads\n###yahoo_sponsor_links\n###yahoo_sponsor_links_title\n###yahoo_text_ad\n###yahooad-tbl\n###yahooads\n###yan-advert-north\n###yan-advert-nt1\n###yan-question-advert\n###yan-sponsored\n###yatadsky\n###ybf-ads\n###yfi-sponsor\n###yfi_ads_4x4\n###yfi_fp_ad_fx\n###yfi_fp_ad_mort\n###yfi_fp_ad_nns\n###yfi_pf_ad_mort\n###ygrp-sponsored-links\n###yieldaddiv\n###ylf-lrec\n###ylf-lrec2\n###ymap_adbanner\n###yn-gmy-ad-lrec\n###yom-ad-tbs-as\n###yrail_ads\n###yreSponsoredLinks\n###ysm_ad_iframe\n###yt-adsfull-widget-2\n###yt-adsfull-widget-3\n###yw-sponsoredad\n###zMSplacement1\n###zMSplacement2\n###zMSplacement3\n###zMSplacement4\n###zMSplacement5\n###zMSplacement6\n###zoneAdserverMrec\n###zoneAdserverSuper\n###zoneAdvertisment\n###zone_a_ad\n###zone_b_ad\n###zone_c_ads\n###zztextad\n##.AD-POST\n##.AD-Rotate\n##.AD-label300x250\n##.AD300x600-wrapper\n##.AD355125\n##.ADBAR\n##.ADBnrArea\n##.ADCLOUD\n##.ADFooter\n##.ADITION\n##.ADLeader\n##.ADMiddle1\n##.ADPod\n##.ADStyle\n##.ADTextSingle\n##.ADV-Space\n##.AD_2\n##.AD_300x100\n##.AD_300x250\n##.AD_300x265\n##.AD_302x252\n##.AD_ALBUM_ITEMLIST\n##.AD_MOVIE_ITEM\n##.AD_MOVIE_ITEMLIST\n##.AD_MOVIE_ITEMROW\n##.AD_area\n##.AD_mid300\n##.AD_textinfo\n##.ADbox\n##.ADmid\n##.ADouter_div\n##.ADwidget\n##.Ad-300x100\n##.Ad-Container\n##.Ad-Container-976x166\n##.Ad-Header\n##.Ad-IframeWrap\n##.Ad-MPU\n##.Ad-Wrapper-300x100\n##.Ad-label\n##.Ad120x600\n##.Ad160x600\n##.Ad160x600left\n##.Ad160x600right\n##.Ad247x90\n##.Ad300x\n##.Ad300x250\n##.Ad300x250L\n##.Ad728x90\n##.AdBar\n##.AdBody:not(body)\n##.AdBorder\n##.AdBox\n##.AdBox160\n##.AdBox7\n##.AdBox728\n##.AdBoxStyle\n##.AdBoxStyleHome\n##.AdCaption\n##.AdCommercial\n##.AdContainer160x600\n##.AdContainerBottom\n##.AdContainerBox308\n##.AdContainerModule\n##.AdFrameLB\n##.AdGraph\n##.AdGrayBox\n##.AdHeader\n##.AdHere\n##.AdHolder\n##.AdIndicator\n##.AdInfo\n##.AdInline\n##.AdInline_left\n##.AdLeftbarBorderStyle\n##.AdMedium\n##.AdMessage\n##.AdModule\n##.AdModule_Content\n##.AdModule_ContentLarge\n##.AdModule_Hdr\n##.AdMultiPage\n##.AdPanel\n##.AdPlaceHolder\n##.AdProS728x90Container\n##.AdProduct\n##.AdRingtone\n##.AdScriptBox\n##.AdSectionHeader\n##.AdSense\n##.AdSenseLeft\n##.AdSidebar\n##.AdSlot\n##.AdSlotHeader\n##.AdSpace\n##.AdTextSmallFont\n##.AdTitle\n##.AdTop\n##.AdUnit\n##.AdUnit300\n##.AdUnit300x250\n##.AdUnitBox\n##.AdWidget_ImageWidget\n##.AdZone120\n##.AdZone316\n##.Ad_120x600\n##.Ad_120x600_holder\n##.Ad_160x600_holder\n##.Ad_160x600_inner\n##.Ad_300x250\n##.Ad_300x250_holder\n##.Ad_468x60\n##.Ad_728x90\n##.Ad_728x90_holder\n##.Ad_C\n##.Ad_D\n##.Ad_D_Wrapper\n##.Ad_E_Wrapper\n##.Ad_Label\n##.Ad_Label_foursquare\n##.Ad_Right\n##.Ad_Tit\n##.Ad_container\n##.Adbuttons\n##.Adbuttons-sidebar\n##.AdnetBox\n##.Ads-768x90\n##.AdsBottom\n##.AdsBottom336X280\n##.AdsBoxBottom\n##.AdsBoxSection\n##.AdsBoxTop\n##.AdsLeft_list\n##.AdsLinks1\n##.AdsLinks2\n##.AdsPlayRight_list\n##.AdsRec\n##.Ads_3\n##.Ads_4\n##.Ads_forum\n##.Adsense\n##.AdsenseBox\n##.AdsenseBoxCenter\n##.AdsenseDivFooter\n##.AdsenseDownload\n##.AdsenseForum\n##.AdsenseLarge\n##.AdsenseTechsupport\n##.Adspottop\n##.Adv300x250\n##.Adv468\n##.AdvBoxSidebar\n##.Adv_Left\n##.Advert300x250\n##.AdvertContainer\n##.AdvertMidPage\n##.AdvertiseWithUs\n##.Advertisehere2\n##.AdvertisementTextTag\n##.AdvertisementTop\n##.Advertisment\n##.AdvertorialTeaser\n##.Advman_Widget\n##.AffAD\n##.AffiliateAds\n##.AmazonSimpleAdmin_widget\n##.ArticleAd\n##.ArticleInlineAd\n##.BCA_Advertisement\n##.BGoogleAds300\n##.Banner300x250\n##.Banner468X60\n##.BannerAD728\n##.BannerAd\n##.Banner_Group\n##.Banner_Group_Ad_Label\n##.BigBoxAd\n##.BigBoxAdLabel\n##.BlockAd\n##.BlueTxtAdvert\n##.BottomAdContainer\n##.BottomAffiliate\n##.BottomGoogleAds\n##.BoxAd\n##.BoxAdWrap\n##.BoxSponsorBottom\n##.BtmAd\n##.BtmSponsAd\n##.ButtonAd\n##.CG_adkit_leaderboard\n##.CG_details_ad_dropzone\n##.CWReviewsProdInfoAd\n##.CollisionAdMarker\n##.ComAread\n##.CommentAd\n##.CommentGoogleAd\n##.ContentAd\n##.ContentAd2\n##.ContentAds\n##.DAWRadvertisement\n##.DartAdvert\n##.DeptAd\n##.DetachedAd\n##.DetailAds\n##.DisplayAd\n##.DomAdsDiv\n##.DoubleClickRefreshable\n##.EzAdsLUPro\n##.EzAdsSearchPro\n##.EzAdsWidget\n##.FT_Ad\n##.FeaturedAdIndexAd\n##.FlatAds\n##.FooterAdContainer\n##.FooterAds\n##.FooterTileAdOuter_Div\n##.Footer_AD_Links_DIV\n##.Footer_Default_AD_Message_DIV\n##.GAME_Ad160x600\n##.GOOGLE_AD\n##.G_ads\n##.G_ads_m\n##.GetRightAds\n##.GoogleAd\n##.GoogleAdInfo\n##.GoogleAdSencePanel\n##.GoogleAdSenseBottomModule\n##.GoogleAdSenseRightModule\n##.GoogleAdWords_container\n##.GoogleAdsBox\n##.GoogleAdsItem\n##.GoogleAdv\n##.Googleads728\n##.GreenHomeAd\n##.GridHouseAdRight\n##.HGLoneAdTitleFrame\n##.HPG_Ad_B\n##.HPNewAdsBannerDiv\n##.HPRoundedAd\n##.HeaderAd\n##.HeaderAds\n##.HeaderBannerAd\n##.HeaderLeaderAd\n##.HeadingAdSpace\n##.HomeAd1Label\n##.HomeAds\n##.HomeContentAd\n##.HomeSidebarAd\n##.IABAdSpace\n##.IM_ad_unit\n##.InArticleAd\n##.IndexRightAd\n##.InternalAdPanel1\n##.JobListMidAd\n##.LL_Widget_Advertorial\n##.LargeOuterBoxAdsense\n##.LargeRightAd\n##.LastAd\n##.LazyLoadAd\n##.LeaderAdvertisement\n##.LeaderboardAdTagWidget\n##.LeftAd\n##.LeftButtonAdSlot\n##.LeftTowerAd\n##.LeftWideSkyscraperAdPanel\n##.Left_Content_Google_Ad\n##.Ligatus\n##.Loge_AD\n##.LoungeAdsBottomLinks\n##.M2Advertisement\n##.MBoxAdM\n##.MBoxAdMain\n##.MBoxAdR\n##.MBoxAdRight\n##.MDCadSummary\n##.MD_adZone\n##.MOS-ad-hack\n##.MPUHolder\n##.MPUTitleWrapperClass\n##.MPUad\n##.MREC_ads\n##.MainAdCont\n##.Main_right_Adv_incl\n##.MarketGid_container\n##.MasterLeftContentColumnThreeColumnAdLeft\n##.MbanAd\n##.MediumRectangleAdPanel\n##.MiddleAd\n##.MiddleAdContainer\n##.MiddleAdvert\n##.MspAd\n##.NAPmarketAdvert\n##.NewsAds\n##.OAS_position_TopLeft\n##.OSOasAdModule\n##.OSProfileAdSenseModule\n##.OpaqueAdBanner\n##.OpenXad\n##.OuterAdvertisingContainer\n##.PERFORMANCE_AD_COMPLETE\n##.PERFORMANCE_AD_RELATED\n##.PU_DoubleClickAdsContent\n##.PencilAd\n##.Post5ad\n##.Post8ad\n##.Post9ad\n##.PostSidebarAd\n##.PremiumObitAdBar\n##.ProductAd\n##.PushDownAdPane\n##.PushdownAd\n##.RBboxAd\n##.RGAdBoxMainDiv\n##.RR_ad\n##.RW_ad300\n##.RectangleAd\n##.RelatedAds\n##.ResponsiveAd\n##.Right-Column-AD-Container\n##.Right300x250AD\n##.RightAd\n##.RightAd1\n##.RightAd2\n##.RightAdvertiseArea\n##.RightAdvertisement\n##.RightGoogleAFC\n##.RightGoogleAd\n##.RightRailAd\n##.RightRailAdbg\n##.RightRailAdtext\n##.RightRailTop300x250Ad\n##.RightSponsoredAdTitle\n##.RightTowerAd\n##.SRPads\n##.STR_AdBlock\n##.SecondaryAd\n##.SecondaryAdLink\n##.SectionSponsor\n##.ShootingAd\n##.ShootingAdLeft\n##.ShowAdDisplay\n##.SideAdCol\n##.SideAds\n##.SidebarAd\n##.SidebarAdvert\n##.SidebarMiddleAdContainer\n##.SidekickItem-Ads\n##.SimpleAcceptableTextAds\n##.SimpleAcceptebleTextAds\n##.SitesGoogleAdsModule\n##.Sitewide_AdLabel\n##.SkyAdContainer\n##.SkyAdContent\n##.SkyScraperAd\n##.SmartAdZoneList\n##.Sponsor-container\n##.SponsorAds\n##.SponsorIsland\n##.SponsorLink\n##.SponsoredAdTitle\n##.SponsoredArticleAd\n##.SponsoredContent\n##.SponsoredLinkItemTD\n##.SponsoredLinks\n##.SponsoredLinksGrayBox\n##.SponsoredLinksModule\n##.SponsoredLinksPadding\n##.SponsoredLinksPanel\n##.SponsoredResults\n##.Sponsored_link\n##.SponsorshipText\n##.SquareAd\n##.Squareadspot\n##.StandardAdLeft\n##.StandardAdRight\n##.TRADING_AD_RELATED\n##.TRU-onsite-ads-leaderboard\n##.TTButtAd\n##.Tadspacemrec\n##.TextAd\n##.TextAdds\n##.TheEagleGoogleAdSense300x250\n##.ThreeAds\n##.TmnAdsense\n##.TopAd\n##.TopAdContainer\n##.TopAdL\n##.TopAdR\n##.TopAds\n##.TopBannerAd\n##.TopLeaderboardAdPanel\n##.Top_Ad\n##.TrafficAd\n##.UFSquareAd\n##.UIStandardFrame_SidebarAds\n##.UIWashFrame_SidebarAds\n##.UnderAd\n##.UpperAdsContainer\n##.VerticalAd\n##.Video-Ad\n##.VideoAd\n##.WPBannerizeWidget\n##.WideAdContainer\n##.WideAdTile\n##.WideAdsLeft\n##.WidgetAdvertiser\n##.WiredWidgetsDartAds\n##.WiredWidgetsGoogleAds\n##.WithAds\n##.XEad\n##.YEN_Ads_120\n##.YEN_Ads_125\n##.ZventsSponsoredLabel\n##.ZventsSponsoredList\n##.__xX20sponsored20banners\n##._bannerAds\n##._bottom_ad_wrapper\n##._top_ad_wrapper\n##.a-d-container\n##.a160x600\n##.a300x250\n##.a468x60\n##.a728x90\n##.aa_AdAnnouncement\n##.aa_ad-160x600\n##.aa_ad-728x15\n##.aadsection_b1\n##.aadsection_b2\n##.abAdArea\n##.abAdPositionBoxB\n##.abBoxAd\n##.about_adsense\n##.aboveCommentAdBladeWrapper\n##.aboveCommentAds\n##.aboveCommentAdsWrapper\n##.above_discussion_ad\n##.above_miniscore_ad\n##.abovead\n##.absoluteAd_wss\n##.ac_adbox\n##.acm_ad_zones\n##.ad--300\n##.ad--468\n##.ad--article-top\n##.ad--dart\n##.ad--footer\n##.ad--google\n##.ad--inner\n##.ad--large\n##.ad--leaderboard\n##.ad--mpu\n##.ad--top-label\n##.ad-1\n##.ad-120-60\n##.ad-120-600-inner\n##.ad-120x60\n##.ad-120x600\n##.ad-120x90\n##.ad-125\n##.ad-125x125\n##.ad-140x45-2\n##.ad-150\n##.ad-160\n##.ad-160-160\n##.ad-160-600\n##.ad-160x600\n##.ad-160x600-gallery\n##.ad-160x600-home\n##.ad-160x600-wrap\n##.ad-160x600x1\n##.ad-160x600x2\n##.ad-160x600x3\n##.ad-2\n##.ad-200\n##.ad-200-big\n##.ad-200-small\n##.ad-200x200\n##.ad-228x94\n##.ad-234\n##.ad-246x90\n##.ad-250\n##.ad-250x125\n##.ad-250x300\n##.ad-260x60\n##.ad-270x100\n##.ad-300\n##.ad-300-250\n##.ad-300-250-600\n##.ad-300-600\n##.ad-300-b\n##.ad-300-b-absolute\n##.ad-300-block\n##.ad-300-blog\n##.ad-300-dummy\n##.ad-300-flex\n##.ad-300x\n##.ad-300x100\n##.ad-300x200\n##.ad-300x250\n##.ad-300x250-first\n##.ad-300x250-home\n##.ad-300x250-right0\n##.ad-300x250-singlepost\n##.ad-300x250_600x250\n##.ad-300x600\n##.ad-300x70\n##.ad-300x75\n##.ad-319x128\n##.ad-336x280\n##.ad-336x280B\n##.ad-350\n##.ad-355x75\n##.ad-3x1\n##.ad-4\n##.ad-468\n##.ad-468x120\n##.ad-468x60\n##.ad-5\n##.ad-544x250\n##.ad-560\n##.ad-6\n##.ad-600\n##.ad-635x40\n##.ad-7\n##.ad-728\n##.ad-728-90\n##.ad-728x90\n##.ad-728x90-1\n##.ad-728x90-top\n##.ad-728x90-top0\n##.ad-728x90_forum\n##.ad-768\n##.ad-88-60\n##.ad-88-text\n##.ad-90x600\n##.ad-970x50\n##.ad-970x90\n##.ad-BANNER\n##.ad-CUSTOM\n##.ad-E\n##.ad-LREC\n##.ad-MPU\n##.ad-MediumRectangle\n##.ad-RR\n##.ad-S\n##.ad-SuperBanner\n##.ad-W\n##.ad-a\n##.ad-abc\n##.ad-above-header\n##.ad-adSense\n##.ad-adcode\n##.ad-adlink-bottom\n##.ad-adlink-side\n##.ad-adsense-block-250\n##.ad-alsorectangle\n##.ad-area\n##.ad-area-small\n##.ad-atf\n##.ad-atf-medRect\n##.ad-b\n##.ad-background\n##.ad-banner\n##.ad-banner-300\n##.ad-banner-bkgd\n##.ad-banner-container\n##.ad-banner-label\n##.ad-banner-leaderboard\n##.ad-banner-placeholder\n##.ad-banner-smaller\n##.ad-banner-top\n##.ad-banner-top-wrapper\n##.ad-banner728-top\n##.ad-banr\n##.ad-bar\n##.ad-below-player\n##.ad-belowarticle\n##.ad-bg\n##.ad-big\n##.ad-big-box\n##.ad-bigbox\n##.ad-bigboxSub\n##.ad-bigsize\n##.ad-billboard\n##.ad-bline\n##.ad-block\n##.ad-block-300-widget\n##.ad-block-300x250\n##.ad-block-big\n##.ad-block-holder\n##.ad-block-in-post\n##.ad-block-square\n##.ad-block-wide\n##.ad-blog2biz\n##.ad-blogads\n##.ad-board\n##.ad-body\n##.ad-boombox\n##.ad-border\n##.ad-bordered\n##.ad-bot\n##.ad-bottom\n##.ad-bottom728x90\n##.ad-bottomLeft\n##.ad-bottomleader\n##.ad-bottomline\n##.ad-box-300x250\n##.ad-box-container\n##.ad-box-up\n##.ad-box1\n##.ad-box2\n##.ad-box3\n##.ad-boxes\n##.ad-break\n##.ad-breaker\n##.ad-breakout\n##.ad-browse-rectangle\n##.ad-bt\n##.ad-btn\n##.ad-btn-heading\n##.ad-bug-300w\n##.ad-button\n##.ad-calendar\n##.ad-call-300x250\n##.ad-callout\n##.ad-caption\n##.ad-card-container\n##.ad-cat\n##.ad-catfish\n##.ad-cell\n##.ad-center\n##.ad-chartbeatwidget\n##.ad-choices\n##.ad-circ\n##.ad-click\n##.ad-cluster\n##.ad-codes\n##.ad-col\n##.ad-col-02\n##.ad-column\n##.ad-comment\n##.ad-companion\n##.ad-contain\n##.ad-contain-300x250\n##.ad-contain-top\n##.ad-container--taboola\n##.ad-container-160x600\n##.ad-container-300x250\n##.ad-container-728\n##.ad-container-728x90\n##.ad-container-994x282\n##.ad-container-LEADER\n##.ad-container-bot\n##.ad-container-dk\n##.ad-container-embedded\n##.ad-container-leaderboard\n##.ad-container-responsive\n##.ad-container-right\n##.ad-container-side\n##.ad-container-tool\n##.ad-container-top\n##.ad-container-topad\n##.ad-container__ad-slot\n##.ad-container_row\n##.ad-content\n##.ad-content-rectangle\n##.ad-context\n##.ad-d\n##.ad-desktop\n##.ad-dfp-column\n##.ad-dfp-row\n##.ad-disclaimer\n##.ad-display\n##.ad-div\n##.ad-diver\n##.ad-divider\n##.ad-e\n##.ad-enabled\n##.ad-entry-wrapper\n##.ad-exchange\n##.ad-expand\n##.ad-external\n##.ad-f-monster\n##.ad-fadein\n##.ad-feature-content\n##.ad-feature-text\n##.ad-feedback\n##.ad-field\n##.ad-filler\n##.ad-fix\n##.ad-flag\n##.ad-flex\n##.ad-footer\n##.ad-footer-empty\n##.ad-footer-leaderboard\n##.ad-forum\n##.ad-fullbanner\n##.ad-fullbanner-btf-container\n##.ad-google\n##.ad-google-contextual\n##.ad-gpt-breaker\n##.ad-gpt-container\n##.ad-gpt-main\n##.ad-gpt-vertical\n##.ad-graphic-large\n##.ad-gray\n##.ad-grey\n##.ad-grid-125\n##.ad-group\n##.ad-grp\n##.ad-hdr\n##.ad-head\n##.ad-header\n##.ad-header-sidebar\n##.ad-heading\n##.ad-here\n##.ad-hldr-tmc\n##.ad-hold\n##.ad-holder\n##.ad-home-right\n##.ad-homeleaderboard\n##.ad-homepage\n##.ad-homepage-1\n##.ad-homepage-2\n##.ad-hor\n##.ad-horizontal-top\n##.ad-iab-txt\n##.ad-icon\n##.ad-identifier\n##.ad-iframe\n##.ad-imagehold\n##.ad-img\n##.ad-in-content-300\n##.ad-in-post\n##.ad-index\n##.ad-index-main\n##.ad-indicator-horiz\n##.ad-inline\n##.ad-inner\n##.ad-innr\n##.ad-insert\n##.ad-inserter\n##.ad-internal\n##.ad-interruptor\n##.ad-island\n##.ad-item\n##.ad-item-related\n##.ad-label\n##.ad-lable\n##.ad-landscape\n##.ad-large-game\n##.ad-layer\n##.ad-lazy-support-yes\n##.ad-lb\n##.ad-lead\n##.ad-lead-bottom\n##.ad-leader\n##.ad-leader-bottom\n##.ad-leader-plus-top\n##.ad-leader-top\n##.ad-leader-wrap\n##.ad-leaderboard\n##.ad-leaderboard-companion\n##.ad-leaderboard-container\n##.ad-leaderboard-marquee\n##.ad-leaderboard_river\n##.ad-leadtop\n##.ad-left\n##.ad-left3\n##.ad-leftrail\n##.ad-line\n##.ad-link\n##.ad-link-left\n##.ad-link-right\n##.ad-links\n##.ad-loaded\n##.ad-location\n##.ad-location-header\n##.ad-lower_rec\n##.ad-lower_river\n##.ad-lrec\n##.ad-manager-ad\n##.ad-marker\n##.ad-marketplace\n##.ad-marketplace-horizontal\n##.ad-marketswidget\n##.ad-med\n##.ad-med-rec\n##.ad-med-rect\n##.ad-med-rect-tmp\n##.ad-medRec\n##.ad-medium\n##.ad-medium-rectangle\n##.ad-medium-two\n##.ad-medrect\n##.ad-megaboard\n##.ad-message\n##.ad-messaging\n##.ad-midleader\n##.ad-mobile\n##.ad-mobile-banner\n##.ad-mod\n##.ad-module\n##.ad-mpl\n##.ad-mpu\n##.ad-mpu-bottom\n##.ad-mpu-middle\n##.ad-mpu-middle2\n##.ad-mpu-placeholder\n##.ad-mpu-plus-top\n##.ad-mpu-top\n##.ad-mrec\n##.ad-mrect\n##.ad-msg\n##.ad-msgunit\n##.ad-msn\n##.ad-national-1\n##.ad-new\n##.ad-no-style\n##.ad-noBorderAndMargin\n##.ad-noline\n##.ad-note\n##.ad-notice\n##.ad-on\n##.ad-one\n##.ad-other\n##.ad-outlet\n##.ad-outside\n##.ad-packs\n##.ad-padding\n##.ad-page-leader\n##.ad-page-medium\n##.ad-pagehead\n##.ad-panel\n##.ad-panorama\n##.ad-parallax-wrap\n##.ad-parent-hockey\n##.ad-passback-o-rama\n##.ad-pb\n##.ad-peg\n##.ad-permalink\n##.ad-personalise\n##.ad-place-active\n##.ad-place-holder\n##.ad-placeholder\n##.ad-placement\n##.ad-plea\n##.ad-position\n##.ad-position-1\n##.ad-post\n##.ad-postText\n##.ad-poster\n##.ad-primary\n##.ad-primary-sidebar\n##.ad-priority\n##.ad-pro70\n##.ad-promo\n##.ad-promoted-game\n##.ad-pushdown\n##.ad-r\n##.ad-rail\n##.ad-rect\n##.ad-rect-atf-01\n##.ad-rect-top-right\n##.ad-rectangle\n##.ad-rectangle-banner\n##.ad-rectangle-long\n##.ad-rectangle-long-sky\n##.ad-rectangle-text\n##.ad-rectangle-wide\n##.ad-rectangle-xs\n##.ad-region-delay-load\n##.ad-related\n##.ad-relatedbottom\n##.ad-responsive-wide\n##.ad-rh\n##.ad-ri\n##.ad-right\n##.ad-right-header\n##.ad-right-txt\n##.ad-right1\n##.ad-right2\n##.ad-right3\n##.ad-rotation\n##.ad-row\n##.ad-row-viewport\n##.ad-s\n##.ad-s-rendered\n##.ad-scl\n##.ad-script-processed\n##.ad-section\n##.ad-section-body\n##.ad-sense\n##.ad-sep\n##.ad-served\n##.ad-shifted\n##.ad-show-label\n##.ad-showcase\n##.ad-side\n##.ad-side-one\n##.ad-sidebar\n##.ad-sidebar-180-150\n##.ad-sidebar-300-250\n##.ad-sidebar-ad-message\n##.ad-sidebar-border\n##.ad-sidebar-outer\n##.ad-sidebar300\n##.ad-siderail\n##.ad-signup\n##.ad-sitewide\n##.ad-sky\n##.ad-skyscr\n##.ad-skyscraper\n##.ad-skyscraper-label\n##.ad-slider\n##.ad-slot\n##.ad-slot--inline\n##.ad-slot--mpu-banner-ad\n##.ad-slot-1\n##.ad-slot-2\n##.ad-slot-234-60\n##.ad-slot-300-250\n##.ad-slot-728-90\n##.ad-slot-a\n##.ad-slot-container\n##.ad-slot-sidebar\n##.ad-slot-sidebar-b\n##.ad-slot__label\n##.ad-slot__oas\n##.ad-smallBP\n##.ad-source\n##.ad-sp\n##.ad-space\n##.ad-space-mpu-box\n##.ad-space-topbanner\n##.ad-spacer\n##.ad-speedbump\n##.ad-sponsor\n##.ad-sponsor-large-container\n##.ad-sponsor-text\n##.ad-sponsored-links\n##.ad-sponsored-post\n##.ad-sponsors\n##.ad-spot\n##.ad-spotlight\n##.ad-square\n##.ad-square2-container\n##.ad-square300\n##.ad-squares\n##.ad-stack\n##.ad-statement\n##.ad-sticky\n##.ad-story-inject\n##.ad-story-top\n##.ad-strip\n##.ad-subtitle\n##.ad-t\n##.ad-table\n##.ad-tabs\n##.ad-tag\n##.ad-tag-square\n##.ad-tall\n##.ad-target2-wrapper\n##.ad-text\n##.ad-text-blockA01\n##.ad-text-blockB01\n##.ad-text-label\n##.ad-text-link\n##.ad-text-links\n##.ad-textG01\n##.ad-textads\n##.ad-thanks\n##.ad-tile\n##.ad-tl1\n##.ad-top\n##.ad-top-300x250\n##.ad-top-728\n##.ad-top-728x90\n##.ad-top-box-right\n##.ad-top-in\n##.ad-top-lboard\n##.ad-top-left\n##.ad-top-rectangle\n##.ad-top-wrapper\n##.ad-top1\n##.ad-top2\n##.ad-topleader\n##.ad-topright\n##.ad-tower\n##.ad-txt\n##.ad-type1\n##.ad-type10\n##.ad-type2\n##.ad-type3\n##.ad-unit\n##.ad-unit-300\n##.ad-unit-300-wrapper\n##.ad-unit-anchor\n##.ad-unit-container\n##.ad-unit-inline-center\n##.ad-unit-medium-retangle\n##.ad-unit-mpu\n##.ad-unit-top\n##.ad-update\n##.ad-upper_rec\n##.ad-us\n##.ad-vert\n##.ad-vertical\n##.ad-vertical-container\n##.ad-vertical-stack-ad\n##.ad-vtu\n##.ad-w300\n##.ad-wallpaper-panorama-container\n##.ad-warning\n##.ad-wgt\n##.ad-wide\n##.ad-widget\n##.ad-widget-area\n##.ad-widget-list\n##.ad-windowshade-full\n##.ad-wings__link\n##.ad-with-background\n##.ad-with-us\n##.ad-wrap\n##.ad-wrapper\n##.ad-x10x20x30\n##.ad-x31-full\n##.ad-zone\n##.ad-zone-s-q-l\n##.ad.super\n##.ad01\n##.ad02\n##.ad03\n##.ad04\n##.ad08sky\n##.ad1-left\n##.ad1-right\n##.ad10\n##.ad100\n##.ad1000\n##.ad1001\n##.ad100x100\n##.ad120\n##.ad120_600\n##.ad120x120\n##.ad120x240GrayBorder\n##.ad120x240backgroundGray\n##.ad120x60\n##.ad120x600\n##.ad125\n##.ad125x125\n##.ad125x125a\n##.ad125x125b\n##.ad140\n##.ad160\n##.ad160600\n##.ad160_blk\n##.ad160_l\n##.ad160_r\n##.ad160x160\n##.ad160x600\n##.ad160x600GrayBorder\n##.ad160x600box\n##.ad170x30\n##.ad18\n##.ad180\n##.ad185x100\n##.ad19\n##.ad1Image\n##.ad1_bottom\n##.ad1_latest\n##.ad1_top\n##.ad1b\n##.ad1left\n##.ad1x1\n##.ad200\n##.ad200x60\n##.ad220x50\n##.ad230\n##.ad233x224\n##.ad234\n##.ad234x60\n##.ad236x62\n##.ad240\n##.ad250\n##.ad250-h1\n##.ad250-h2\n##.ad250c\n##.ad250wrap\n##.ad250x250\n##.ad260x60\n##.ad284x134\n##.ad2content_box\n##.ad300\n##.ad300-hp-top\n##.ad3001\n##.ad300250\n##.ad300Block\n##.ad300Wrapper\n##.ad300_2\n##.ad300_250\n##.ad300_bg\n##.ad300_ver2\n##.ad300b\n##.ad300banner\n##.ad300mrec1\n##.ad300shows\n##.ad300top\n##.ad300w\n##.ad300x-placeholder\n##.ad300x100\n##.ad300x111\n##.ad300x120\n##.ad300x150\n##.ad300x250\n##.ad300x250-1\n##.ad300x250-2\n##.ad300x250-home\n##.ad300x250-hp-features\n##.ad300x250-inline\n##.ad300x250-stacked\n##.ad300x2501\n##.ad300x250GrayBorder\n##.ad300x250Module\n##.ad300x250Right\n##.ad300x250Top\n##.ad300x250_box\n##.ad300x250_container\n##.ad300x250a\n##.ad300x250b\n##.ad300x250box\n##.ad300x250box2\n##.ad300x250flex\n##.ad300x250s\n##.ad300x40\n##.ad300x50-right\n##.ad300x600\n##.ad300x77\n##.ad300x90\n##.ad310\n##.ad315\n##.ad320x250\n##.ad336\n##.ad336x280\n##.ad336x362\n##.ad343x290\n##.ad350\n##.ad360\n##.ad400right\n##.ad400x40\n##.ad450\n##.ad468\n##.ad468_60\n##.ad468x60\n##.ad468x60Wrap\n##.ad468x60_main\n##.ad470x60\n##.ad530\n##.ad540x90\n##.ad590\n##.ad590x90\n##.ad5_container\n##.ad600\n##.ad612x80\n##.ad620x70\n##.ad626X35\n##.ad640x480\n##.ad640x60\n##.ad644\n##.ad650x140\n##.ad652\n##.ad670x83\n##.ad728\n##.ad72890\n##.ad728By90\n##.ad728_90\n##.ad728_blk\n##.ad728_cont\n##.ad728_wrap\n##.ad728cont\n##.ad728h\n##.ad728x90\n##.ad728x90-1\n##.ad728x90-2\n##.ad728x90WithLabel\n##.ad728x90_2\n##.ad728x90_container\n##.ad728x90box\n##.ad728x90btf\n##.ad728x90container\n##.ad768x90\n##.ad90\n##.ad90x780\n##.ad940x30\n##.ad954x60\n##.ad960\n##.ad960x185\n##.ad960x90\n##.ad970x30\n##.ad970x90\n##.ad980\n##.ad980x120\n##.ad980x50box\n##.ad987\n##.adAgate\n##.adAlert\n##.adAlone300\n##.adArea\n##.adArea674x60\n##.adAreaLC\n##.adArticleBanner\n##.adArticleBody\n##.adArticleRecommend\n##.adArticleSidetile\n##.adArticleTopText\n##.adAuto\n##.adBGcolor\n##.adBan\n##.adBanner\n##.adBanner300x250\n##.adBanner728x90\n##.adBannerTyp1\n##.adBannerTypSortableList\n##.adBannerTypW300\n##.adBar\n##.adBarCenter\n##.adBarLeft\n##.adBarRight\n##.adBelt\n##.adBgBottom\n##.adBgClick\n##.adBgMId\n##.adBgTop\n##.adBigBoxFirst\n##.adBillboard\n##.adBkgd\n##.adBlock\n##.adBlock-300-250\n##.adBlock160x600Spot1\n##.adBlockBottom\n##.adBlockBottomBreak\n##.adBlockNext\n##.adBlockSpacer\n##.adBlockSpot\n##.adBlock_1\n##.adBlock_14\n##.adBlock_15\n##.adBlock_17\n##.adBlock_2\n##.adBlock_3\n##.adBlock_6\n##.adBlock_8\n##.adBlock_9\n##.adBodyBlockBottom\n##.adBorder\n##.adBorders\n##.adBottomBoard\n##.adBottomLink\n##.adBottomboxright\n##.adBox\n##.adBox-mr\n##.adBox1\n##.adBox2\n##.adBox230X96\n##.adBox250\n##.adBox3b\n##.adBox5\n##.adBox6\n##.adBox728\n##.adBox728X90\n##.adBox728X90_header\n##.adBoxBody\n##.adBoxBorder\n##.adBoxContainer\n##.adBoxContent\n##.adBoxFooter\n##.adBoxHeader\n##.adBoxInBignews\n##.adBoxSidebar\n##.adBoxSingle\n##.adBoxTitle\n##.adBox_1\n##.adBox_3\n##.adBrandpanel\n##.adBtm\n##.adBuyRight\n##.adBwrap\n##.adCMRight\n##.adCMSlide\n##.adCall\n##.adCell\n##.adCenter\n##.adCenterAd\n##.adCentered\n##.adCentertile\n##.adChoice\n##.adChoiceLogo\n##.adChoicesLogo\n##.adClm\n##.adClose\n##.adCode\n##.adColBgBottom\n##.adColumn\n##.adColumnLeft\n##.adComponent\n##.adCont\n##.adContRight\n##.adContTop\n##.adContainer1\n##.adContainerRectangle\n##.adContainer_125x125\n##.adContainer_728x90\n##.adContainerg6\n##.adContent\n##.adContentAd\n##.adContour\n##.adCreative\n##.adCs\n##.adCube\n##.adDialog\n##.adDingT\n##.adDiv\n##.adDivSmall\n##.adElement\n##.adEmployment\n##.adFender3\n##.adFooterLinks\n##.adFrame\n##.adFrameCnt\n##.adFrameContainer\n##.adFrames\n##.adFtr\n##.adFull\n##.adFullWidth\n##.adFullWidthBottom\n##.adFullWidthMiddle\n##.adGlobalHeader\n##.adGogleBox\n##.adGoogle\n##.adGroup\n##.adHead\n##.adHeader\n##.adHeaderAdbanner\n##.adHeaderText\n##.adHeaderblack\n##.adHeadline\n##.adHeadlineSummary\n##.adHed\n##.adHolder\n##.adHolder2\n##.adHoldert\n##.adHome300x250\n##.adHorisontal\n##.adHorisontalNoBorder\n##.adHorizontalTextAlt\n##.adHplaceholder\n##.adIMm\n##.adIframeCount\n##.adImg\n##.adImgIM\n##.adInArticle\n##.adInNews\n##.adInner\n##.adInnerLeftBottom\n##.adInteractive\n##.adIsland\n##.adItem\n##.adLabel\n##.adLabel160x600\n##.adLabel300x250\n##.adLabelLine\n##.adLabels\n##.adLargeRec\n##.adLargeRect\n##.adLeader\n##.adLeaderForum\n##.adLeaderboard\n##.adLeft\n##.adLink\n##.adLinkCnt\n##.adListB\n##.adLoaded\n##.adLoader\n##.adLocal\n##.adLocation\n##.adMPU\n##.adMPUHome\n##.adMarker\n##.adMarkerBlock\n##.adMastheadLeft\n##.adMastheadRight\n##.adMedRectBox\n##.adMedRectBoxLeft\n##.adMediaMiddle\n##.adMediumRectangle\n##.adMegaBoard\n##.adMeldGuts\n##.adMessage\n##.adMiddle\n##.adMiniTower\n##.adMinisLR\n##.adMkt2Colw\n##.adMod\n##.adModule\n##.adModule300\n##.adModuleAd\n##.adModule_square2\n##.adMpu\n##.adMpuHolder\n##.adNetPromo\n##.adNewsChannel\n##.adNoBorder\n##.adNoOutline\n##.adNone\n##.adNote\n##.adNotice\n##.adNotice90\n##.adNoticeOut\n##.adNotification\n##.adObj\n##.adOne\n##.adOuterContainer\n##.adOverlay\n##.adPageBorderL\n##.adPageBorderR\n##.adPanel\n##.adPanelContent\n##.adPlaceholder\n##.adPlaceholder35\n##.adPlaceholder54\n##.adPlaceholder_foot\n##.adPod\n##.adPosition\n##.adRecommend\n##.adRecommendRight\n##.adRect\n##.adRectangle\n##.adRectangleUnit\n##.adRegionSelector\n##.adRemove\n##.adReportsLink\n##.adResult\n##.adResults\n##.adRight\n##.adRotator\n##.adRow\n##.adSKY\n##.adSTHomePage\n##.adSection\n##.adSection_rt\n##.adSelfServiceAdvertiseLink\n##.adSenceImagePush\n##.adSense\n##.adSepDiv\n##.adServer\n##.adSeven\n##.adSide\n##.adSide203\n##.adSide230\n##.adSidebarButtons\n##.adSidetileplus\n##.adSize_MedRec\n##.adSky\n##.adSky600\n##.adSkyOrMpu\n##.adSkyscaper\n##.adSkyscraper\n##.adSkyscraperHolder\n##.adSlice\n##.adSlide\n##.adSlot\n##.adSlotContainer\n##.adSlug\n##.adSpBelow\n##.adSpace\n##.adSpace300x250\n##.adSpace950x90\n##.adSpacer\n##.adSplash\n##.adSponsor\n##.adSponsorText\n##.adSpot\n##.adSpot-brought\n##.adSpot-mrec\n##.adSpot-searchAd\n##.adSpot-textBox\n##.adSpot-textBoxGraphicRight\n##.adSpot-twin\n##.adSpotIsland\n##.adSquare\n##.adStatementText\n##.adStyle1\n##.adSubColPod\n##.adSummary\n##.adSuperboard\n##.adSupertower\n##.adTD\n##.adTXTnew\n##.adTab\n##.adTag\n##.adTag-wrap\n##.adText\n##.adTextPmpt\n##.adTicker\n##.adTileWrap\n##.adTiler\n##.adTitle\n##.adTitleR\n##.adTopBanner_nomobile\n##.adTopBk\n##.adTopHome\n##.adTopLeft\n##.adTopLink\n##.adTopRight\n##.adTopboxright\n##.adTout\n##.adTower\n##.adTwo\n##.adTxt\n##.adType2\n##.adUnit\n##.adUnitHorz\n##.adUnitVert\n##.adUnitVert_noImage\n##.adVar\n##.adVertical\n##.adVideo\n##.adVplaceholder\n##.adWarning\n##.adWebBoard\n##.adWideSkyscraper\n##.adWideSkyscraperRight\n##.adWidget\n##.adWidgetBlock\n##.adWithTab\n##.adWord\n##.adWrap\n##.adWrapLg\n##.adZone\n##.adZoneRight\n##.ad_0\n##.ad_1\n##.ad_1000x90\n##.ad_100x100\n##.ad_120x60\n##.ad_120x600\n##.ad_120x90\n##.ad_125\n##.ad_130x90\n##.ad_150x150\n##.ad_160\n##.ad_160_600\n##.ad_160x600\n##.ad_180x150\n##.ad_1day9\n##.ad_2\n##.ad_200\n##.ad_200x200\n##.ad_234x60\n##.ad_240\n##.ad_240x400\n##.ad_242_90_top\n##.ad_250\n##.ad_250x200\n##.ad_250x250\n##.ad_250x250_w\n##.ad_3\n##.ad_300\n##.ad_300250\n##.ad_300Home\n##.ad_300Side\n##.ad_300_120\n##.ad_300_250\n##.ad_300_250_1\n##.ad_300_250_2\n##.ad_300_250_cpv\n##.ad_300_250_wrapper\n##.ad_300_600\n##.ad_300s\n##.ad_300x100\n##.ad_300x240\n##.ad_300x250\n##.ad_300x250_box_right\n##.ad_300x250_live\n##.ad_300x50\n##.ad_300x500\n##.ad_300x60\n##.ad_300x600\n##.ad_320x250_async\n##.ad_320x360\n##.ad_326x260\n##.ad_330x110\n##.ad_336\n##.ad_336_gr_white\n##.ad_336x280\n##.ad_336x90\n##.ad_338_282\n##.ad_350x100\n##.ad_350x250\n##.ad_4\n##.ad_400x200\n##.ad_468\n##.ad_468x60\n##.ad_4_row\n##.ad_5\n##.ad_600\n##.ad_630x130\n##.ad_640x90\n##.ad_680x15\n##.ad_728\n##.ad_72890\n##.ad_72890_box\n##.ad_728Home\n##.ad_728_90\n##.ad_728_90_1\n##.ad_728_90_top\n##.ad_728_90b\n##.ad_728_in\n##.ad_728_top\n##.ad_728_v2\n##.ad_728x90\n##.ad_728x90-1\n##.ad_728x90-2\n##.ad_728x90_top\n##.ad_728x90b\n##.ad_88x31\n##.ad_925x90\n##.ad_954-60\n##.ad_960\n##.ad_970x90_prog\n##.ad_980x260\n##.ad_CustomAd\n##.ad_Flex\n##.ad_Left\n##.ad_Right\n##.ad__label\n##.ad__rectangle\n##.ad__wrapper\n##.ad_a\n##.ad_adInfo\n##.ad_ad_160\n##.ad_ad_300\n##.ad_adblade\n##.ad_adsense_spacer\n##.ad_adv\n##.ad_amazon\n##.ad_area_two\n##.ad_article_top_left\n##.ad_atf_300x250\n##.ad_atf_728x90\n##.ad_avu_300x250\n##.ad_back\n##.ad_background\n##.ad_bank_wrapper\n##.ad_banner\n##.ad_banner2\n##.ad_banner_2\n##.ad_banner_234\n##.ad_banner_468\n##.ad_banner_728x90_inner\n##.ad_banner_border\n##.ad_banner_div\n##.ad_bar\n##.ad_below_content\n##.ad_belowmenu\n##.ad_bg\n##.ad_bg_300x250\n##.ad_big_banner\n##.ad_bigbox\n##.ad_billboard\n##.ad_biz\n##.ad_blk\n##.ad_block\n##.ad_block_1\n##.ad_block_2\n##.ad_block_300x250\n##.ad_block_336\n##.ad_block_338\n##.ad_block__336_d1\n##.ad_block_leader2\n##.ad_body\n##.ad_border\n##.ad_botbanner\n##.ad_bottom\n##.ad_bottom_728\n##.ad_bottom_leaderboard\n##.ad_bottom_left\n##.ad_bottom_mpu\n##.ad_bottom_space\n##.ad_bottomline\n##.ad_box\n##.ad_box1\n##.ad_box2\n##.ad_box_2\n##.ad_box_ad\n##.ad_box_div\n##.ad_box_new\n##.ad_box_righ\n##.ad_box_right_120\n##.ad_box_spacer\n##.ad_box_title\n##.ad_boxright1\n##.ad_break\n##.ad_btf\n##.ad_btf_300x250\n##.ad_btf_728x90\n##.ad_buttom_banner\n##.ad_buttons_300\n##.ad_buttons_320\n##.ad_callout\n##.ad_caption\n##.ad_center\n##.ad_center_bottom\n##.ad_centered\n##.ad_cheat\n##.ad_choice\n##.ad_choices\n##.ad_claim\n##.ad_click\n##.ad_code\n##.ad_col\n##.ad_col_a\n##.ad_column\n##.ad_column_box\n##.ad_column_hl\n##.ad_common\n##.ad_cont\n##.ad_cont_footer\n##.ad_contain\n##.ad_container\n##.ad_container_300x250\n##.ad_container_5\n##.ad_container_6\n##.ad_container_7\n##.ad_container_728x90\n##.ad_container_8\n##.ad_container_9\n##.ad_container__sidebar\n##.ad_container__top\n##.ad_container_body\n##.ad_content\n##.ad_content_wide\n##.ad_contents\n##.ad_custombanner\n##.ad_db\n##.ad_default\n##.ad_deferrable\n##.ad_description\n##.ad_descriptor\n##.ad_desktop\n##.ad_disclaimer\n##.ad_div_banner\n##.ad_embed\n##.ad_eniro\n##.ad_entry_title_under\n##.ad_entrylists_end\n##.ad_eyebrow\n##.ad_feature\n##.ad_filler\n##.ad_flash\n##.ad_flat-boxright10\n##.ad_flat-boxright6\n##.ad_flat-boxright9\n##.ad_float\n##.ad_font\n##.ad_footer\n##.ad_for_layout\n##.ad_frame\n##.ad_framed\n##.ad_front_promo\n##.ad_full_click\n##.ad_fullwidth\n##.ad_gal\n##.ad_global_header\n##.ad_gpt\n##.ad_grid\n##.ad_gutter_top\n##.ad_half_page\n##.ad_halfpage\n##.ad_hat_728\n##.ad_hat_banner_300\n##.ad_hat_top\n##.ad_head\n##.ad_head_rectangle\n##.ad_head_wide\n##.ad_header\n##.ad_header_lb\n##.ad_header_left\n##.ad_header_noad\n##.ad_heading\n##.ad_headline\n##.ad_help_link\n##.ad_holder\n##.ad_home_block\n##.ad_honcode_label\n##.ad_hpm\n##.ad_hr\n##.ad_hyper_wrap\n##.ad_identifier\n##.ad_iframe2\n##.ad_ifrwrap\n##.ad_image\n##.ad_image_container\n##.ad_img\n##.ad_index02\n##.ad_indicator\n##.ad_info_block\n##.ad_inline\n##.ad_inset\n##.ad_island\n##.ad_island2_spacer\n##.ad_island_feedback\n##.ad_island_spacer\n##.ad_isolation\n##.ad_item\n##.ad_jnaught\n##.ad_keywords_bot\n##.ad_keywords_bot_r\n##.ad_l\n##.ad_label\n##.ad_large\n##.ad_launchpad\n##.ad_leader\n##.ad_leader_bottom\n##.ad_leader_plus_top\n##.ad_leaderboard\n##.ad_leaderboard_top\n##.ad_left_cell\n##.ad_left_column\n##.ad_lft\n##.ad_line\n##.ad_line2\n##.ad_link\n##.ad_link1\n##.ad_link_468\n##.ad_link_area\n##.ad_link_label\n##.ad_link_label_vert\n##.ad_links\n##.ad_linkunit\n##.ad_lnks\n##.ad_loc\n##.ad_lrec\n##.ad_lt\n##.ad_main\n##.ad_margin\n##.ad_masthead\n##.ad_med\n##.ad_medium_rectangle\n##.ad_medrec\n##.ad_medrect\n##.ad_middle\n##.ad_middle_banner\n##.ad_middle_hub_page\n##.ad_mobile\n##.ad_mod\n##.ad_module\n##.ad_mp\n##.ad_mpu\n##.ad_mpu_top\n##.ad_mr\n##.ad_mrec\n##.ad_mrec_title_article\n##.ad_mrect\n##.ad_mrectangle\n##.ad_msg\n##.ad_new_box01\n##.ad_new_box02\n##.ad_news\n##.ad_newsstream\n##.ad_no_border\n##.ad_note\n##.ad_notice\n##.ad_nsRT_300_250\n##.ad_nsbd_300_250\n##.ad_one\n##.ad_outer\n##.ad_overlays\n##.ad_p360\n##.ad_pagebody\n##.ad_panel\n##.ad_partner\n##.ad_partners\n##.ad_perma-panorama\n##.ad_pic\n##.ad_placeholder\n##.ad_placement\n##.ad_placement_300x250\n##.ad_placement_small\n##.ad_plane_336\n##.ad_plus\n##.ad_policy_link_br\n##.ad_position\n##.ad_post\n##.ad_posttop\n##.ad_power\n##.ad_primary\n##.ad_promo\n##.ad_promo1\n##.ad_promo_spacer\n##.ad_r\n##.ad_rakuten\n##.ad_rakuten_wrapper\n##.ad_rec\n##.ad_rect\n##.ad_rect_contr\n##.ad_rectangle\n##.ad_rectangle_300_250\n##.ad_rectangle_medium\n##.ad_rectangular\n##.ad_regular1\n##.ad_regular2\n##.ad_regular3\n##.ad_reminder\n##.ad_report_btn\n##.ad_rightSky\n##.ad_right_cell\n##.ad_right_col\n##.ad_right_column\n##.ad_right_column160\n##.ad_rightside\n##.ad_row\n##.ad_row_bottom_item\n##.ad_rtg300\n##.ad_secondary\n##.ad_section_300x250\n##.ad_section_728x90\n##.ad_segment\n##.ad_sense_01\n##.ad_sense_footer_container\n##.ad_share_box\n##.ad_shuffling_text\n##.ad_side\n##.ad_sidebar\n##.ad_sidebar_bigbox\n##.ad_size_160x600\n##.ad_sky\n##.ad_skyscpr\n##.ad_skyscraper\n##.ad_skyscrapper\n##.ad_slot\n##.ad_slot_right\n##.ad_slug\n##.ad_slug_font\n##.ad_slug_healthgrades\n##.ad_slug_table\n##.ad_small\n##.ad_sonar\n##.ad_space\n##.ad_space_300_250\n##.ad_space_730\n##.ad_space_holder\n##.ad_space_in\n##.ad_space_rgt\n##.ad_space_w300_h250\n##.ad_spacer\n##.ad_special_badge\n##.ad_spons_box\n##.ad_sponsor\n##.ad_sponsor_fp\n##.ad_sponsoredlinks\n##.ad_sponsoredsection\n##.ad_spot\n##.ad_spot_b\n##.ad_spot_c\n##.ad_square\n##.ad_square_r\n##.ad_square_r_top\n##.ad_square_top\n##.ad_story_island\n##.ad_sub\n##.ad_supersize\n##.ad_swf\n##.ad_tag\n##.ad_tag_middle\n##.ad_text\n##.ad_text_link\n##.ad_text_links\n##.ad_text_vertical\n##.ad_text_w\n##.ad_textlink_box\n##.ad_thumbnail_header\n##.ad_title\n##.ad_title_small\n##.ad_tlb\n##.ad_top\n##.ad_top1\n##.ad_top_1\n##.ad_top_2\n##.ad_top_3\n##.ad_top_banner\n##.ad_top_leaderboard\n##.ad_top_left\n##.ad_top_mpu\n##.ad_top_right\n##.ad_topic_content\n##.ad_topright\n##.ad_topshop\n##.ad_tower\n##.ad_trailer_header\n##.ad_trick_header\n##.ad_trick_left\n##.ad_ttl\n##.ad_type_adsense\n##.ad_type_dfp\n##.ad_under\n##.ad_unit\n##.ad_unit_300_x_250\n##.ad_unit_rail\n##.ad_url\n##.ad_v2\n##.ad_v3\n##.ad_v300\n##.ad_vertisement\n##.ad_w300i\n##.ad_w_us_a300\n##.ad_warn\n##.ad_warning\n##.ad_wid300\n##.ad_wide\n##.ad_widget\n##.ad_widget_200_100\n##.ad_widget_200_200\n##.ad_word\n##.ad_wrap\n##.ad_wrapper\n##.ad_wrapper_false\n##.ad_wrapper_fixed\n##.ad_wrapper_top\n##.ad_wrp\n##.ad_zone\n##.adamazon\n##.adarea\n##.adarea-long\n##.adb-728x90\n##.adback\n##.adbadge\n##.adban-hold-narrow\n##.adbanner\n##.adbanner-300-250\n##.adbanner1\n##.adbanner2nd\n##.adbannerbox\n##.adbanneriframe\n##.adbannerright\n##.adbannertop\n##.adbar\n##.adbase\n##.adbbox\n##.adbckgrnd\n##.adbetween\n##.adblade\n##.adblade-container\n##.adbladeimg\n##.adblk\n##.adblock-240-400\n##.adblock-300-300\n##.adblock-600-120\n##.adblock-bottom\n##.adblock-header\n##.adblock-header1\n##.adblock-main\n##.adblock-top\n##.adblock-top-left\n##.adblock-wide\n##.adblock300\n##.adblock300250\n##.adblock300x250Spot1\n##.adblock728x90\n##.adblock_noborder\n##.adblock_primary\n##.adblocks-topright\n##.adboard\n##.adborder\n##.adbot\n##.adbot_postbit\n##.adbot_showthread\n##.adbottom\n##.adbottomright\n##.adbox-300x250\n##.adbox-468x60\n##.adbox-box\n##.adbox-outer\n##.adbox-rectangle\n##.adbox-slider\n##.adbox-title\n##.adbox-topbanner\n##.adbox-wrapper\n##.adbox1\n##.adbox160\n##.adbox2\n##.adbox300\n##.adbox300x250\n##.adbox336\n##.adbox728\n##.adboxVert\n##.adbox_300x600\n##.adbox_366x280\n##.adbox_468X60\n##.adbox_border\n##.adbox_bottom\n##.adbox_br\n##.adbox_cont\n##.adbox_largerect\n##.adbox_left\n##.adboxbg\n##.adboxbot\n##.adboxclass\n##.adboxcontent\n##.adboxes\n##.adboxesrow\n##.adboxlong\n##.adboxo\n##.adbreak\n##.adbrite2\n##.adbrite_post\n##.adbucks\n##.adbug\n##.adbutton\n##.adbutton-block\n##.adbuttons\n##.adbygoogle\n##.adcard\n##.adcasing\n##.adcenter\n##.adchange\n##.adchoices\n##.adchoices-link\n##.adclass\n##.adcode\n##.adcode2\n##.adcode_container\n##.adcodetop\n##.adcol1\n##.adcol2\n##.adcolumn\n##.adcolumn_wrapper\n##.adcomment\n##.adcont\n##.adcontent_box\n##.adcopy\n##.adctr\n##.add-column2\n##.add-header-area\n##.add-sidebar\n##.add300\n##.add300top\n##.add300x250\n##.add768\n##.addResources\n##.add_300_250\n##.add_300x250\n##.add_728x90_teckpage\n##.add_baner\n##.add_topbanner\n##.addarea\n##.addarearight\n##.addbanner\n##.addboxRight\n##.addiv\n##.adds2\n##.adds300x250\n##.adds620x90\n##.addtitle\n##.addvert\n##.addwide\n##.adengageadzone\n##.adenquire\n##.adexpl\n##.adf_tisers\n##.adfbox\n##.adfeeds\n##.adfieldbg\n##.adfix\n##.adfix-300x250\n##.adflag\n##.adflexi\n##.adfloatleft\n##.adfloatright\n##.adfoot\n##.adfootbox\n##.adfooter\n##.adframe\n##.adframe2\n##.adframe_banner\n##.adframe_rectangle\n##.adfree\n##.adgear\n##.adgear-bb\n##.adgear_header\n##.adgeletti-ad-div\n##.adgoogle_block\n##.adhalfhome\n##.adhead\n##.adhead_h\n##.adhead_h_wide\n##.adheader\n##.adheader100\n##.adheader401\n##.adheader416\n##.adherebox\n##.adhi\n##.adhide\n##.adhint\n##.adholder\n##.adholder-300\n##.adholderban\n##.adhoriz\n##.adhref_box_ads\n##.adical_contentad\n##.adiframe\n##.adinfo\n##.adinjwidget\n##.adinner\n##.adinsert\n##.adinsert-bdr\n##.adinsert160\n##.adinside\n##.adintro\n##.adits\n##.adjlink\n##.adkicker\n##.adkit\n##.adkit-advert\n##.adkit-lb-footer\n##.adkit_free_html\n##.adl125\n##.adlabel-horz\n##.adlabel-vert\n##.adlabelleft\n##.adlarge\n##.adlarger\n##.adlayer\n##.adleader\n##.adleft1\n##.adline\n##.adlink\n##.adlinkdiv\n##.adlinks\n##.adlinks-class\n##.adlist\n##.adlist1\n##.adlist2\n##.adlnklst\n##.adlsot\n##.admain\n##.adman\n##.admaster\n##.admediumred\n##.admedrec\n##.admeldBoxAd\n##.admessage\n##.admiddle\n##.admiddlesidebar\n##.administer-ad\n##.admods\n##.admodule\n##.admoduleB\n##.admpu\n##.admpu-small\n##.admz\n##.adnation-banner\n##.adnet120\n##.adnet_area\n##.adnotecenter\n##.adnotice\n##.adocean728x90\n##.adonmedianama\n##.adops\n##.adp-AdPrefix\n##.adpacks\n##.adpacks_content\n##.adpad300\n##.adpad300spacer\n##.adpadding\n##.adpadtwo_div\n##.adpane\n##.adpic\n##.adplace\n##.adplace_center\n##.adplacement\n##.adplate-background\n##.adpod\n##.adpos-19\n##.adpos-20\n##.adpos-25\n##.adpos-26\n##.adpos-8\n##.adpost\n##.adproxy\n##.adrec\n##.adrect\n##.adrectangle\n##.adrectwrapper\n##.adright\n##.adright300\n##.adrightsm\n##.adrighttop\n##.adriverBanner\n##.adroot\n##.adrotate_widget\n##.adrow\n##.adrow-post\n##.adrow1\n##.adrow1box1\n##.adrow1box3\n##.adrow1box4\n##.adrow2\n##.adrule\n##.ads--sidebar\n##.ads-1\n##.ads-120x600\n##.ads-125\n##.ads-125-widget\n##.ads-160-head\n##.ads-160x600\n##.ads-160x600-outer\n##.ads-166-70\n##.ads-180-65\n##.ads-2\n##.ads-220x90\n##.ads-250\n##.ads-290\n##.ads-3\n##.ads-300\n##.ads-300-250\n##.ads-300-box\n##.ads-300x250\n##.ads-300x300\n##.ads-300x80\n##.ads-336-197-qu\n##.ads-468\n##.ads-468x60-bordered\n##.ads-560-65\n##.ads-600-box\n##.ads-728-90\n##.ads-728by90\n##.ads-728x90\n##.ads-728x90-wrap\n##.ads-above-comments\n##.ads-ad\n##.ads-ads-top\n##.ads-area\n##.ads-articlebottom\n##.ads-banner\n##.ads-banner-bottom\n##.ads-banner-js\n##.ads-banner-middle\n##.ads-banner-top-right\n##.ads-beforecontent\n##.ads-below-content\n##.ads-below-home\n##.ads-bg\n##.ads-bigbox\n##.ads-block\n##.ads-block-bottom-wrap\n##.ads-block-link-000\n##.ads-block-link-text\n##.ads-block-marketplace-container\n##.ads-border\n##.ads-bottom\n##.ads-bottom-block\n##.ads-box\n##.ads-box-border\n##.ads-box-header\n##.ads-box-header-marketplace-right\n##.ads-box-header-pb\n##.ads-box-header-ws\n##.ads-box-header-wsl\n##.ads-btm\n##.ads-by\n##.ads-by-google-0\n##.ads-card\n##.ads-cars-larger\n##.ads-cars-top2\n##.ads-categories-bsa\n##.ads-col\n##.ads-container-mediumrectangle\n##.ads-content\n##.ads-custom\n##.ads-divider\n##.ads-favicon\n##.ads-fieldset\n##.ads-fif\n##.ads-flow\n##.ads-footer\n##.ads-google\n##.ads-half\n##.ads-header\n##.ads-here\n##.ads-holder\n##.ads-home-top-buttons-wrap\n##.ads-horizontal\n##.ads-horizontal-banner\n##.ads-inarticle\n##.ads-inline\n##.ads-item\n##.ads-label\n##.ads-leaderboard\n##.ads-leaderboard-border\n##.ads-left\n##.ads-line\n##.ads-links-general\n##.ads-long\n##.ads-main\n##.ads-margin\n##.ads-medium-rect\n##.ads-middle\n##.ads-middle-top\n##.ads-mini\n##.ads-module\n##.ads-movie\n##.ads-mpu\n##.ads-native-wrapper\n##.ads-note\n##.ads-outer\n##.ads-player-03\n##.ads-popup-corner\n##.ads-post\n##.ads-post-closing\n##.ads-post-full\n##.ads-profile\n##.ads-rectangle\n##.ads-right\n##.ads-right-min\n##.ads-rotate\n##.ads-scroller-box\n##.ads-section\n##.ads-side\n##.ads-sidebar\n##.ads-sidebar-boxad\n##.ads-single\n##.ads-site\n##.ads-sky\n##.ads-small\n##.ads-sponsors\n##.ads-sponsors-125-left\n##.ads-sponsors-125-right\n##.ads-square\n##.ads-squares\n##.ads-story\n##.ads-stripe\n##.ads-text\n##.ads-title\n##.ads-top\n##.ads-top-spacer\n##.ads-ul\n##.ads-wide\n##.ads-widget\n##.ads-widget-partner-gallery\n##.ads-widget-sponsor-gallery\n##.ads-wrapper\n##.ads-zone\n##.ads01\n##.ads02\n##.ads03\n##.ads04\n##.ads05\n##.ads06\n##.ads07\n##.ads08\n##.ads09\n##.ads1\n##.ads10\n##.ads1000x100\n##.ads11\n##.ads12\n##.ads120_600\n##.ads120_600-widget\n##.ads120_80\n##.ads120x\n##.ads123\n##.ads125\n##.ads125-widget\n##.ads13\n##.ads14\n##.ads15\n##.ads160\n##.ads160-600\n##.ads160_600-widget\n##.ads160x600\n##.ads180x150\n##.ads1_250\n##.ads1_label\n##.ads24Block\n##.ads250-250\n##.ads250_250-widget\n##.ads250_96\n##.ads3\n##.ads300\n##.ads300-200\n##.ads300-250\n##.ads300250\n##.ads300_250\n##.ads300_250-widget\n##.ads300_600-widget\n##.ads300box\n##.ads300n\n##.ads300nb\n##.ads300x\n##.ads300x100\n##.ads300x250\n##.ads300x250-thumb\n##.ads315\n##.ads320x100\n##.ads324-wrapper\n##.ads324-wrapper2ads\n##.ads336_280\n##.ads336x280\n##.ads4\n##.ads460\n##.ads460_home\n##.ads468\n##.ads468x60\n##.ads486x100\n##.ads486x100-1\n##.ads598x98\n##.ads5blocks\n##.ads667x100\n##.ads720x90\n##.ads728\n##.ads728_90\n##.ads728x90\n##.ads728x90-1\n##.ads728x90-thumb\n##.ads970\n##.adsArea\n##.adsBelowHeadingNormal\n##.adsBlock\n##.adsBot\n##.adsBottom\n##.adsBox\n##.adsBoxTop\n##.adsCategoryIcon\n##.adsCategoryTitleLink\n##.adsCell\n##.adsCont\n##.adsDef\n##.adsDisclaimer\n##.adsDiv\n##.adsFull\n##.adsHeader\n##.adsHeaderFlog\n##.adsHeading\n##.adsImages\n##.adsInner\n##.adsInsideResults_v3\n##.adsLabel\n##.adsLibrary\n##.adsLine\n##.adsMPU\n##.adsMiddle\n##.adsOuter\n##.adsOverPrimary\n##.adsRectangleMedium\n##.adsRight\n##.adsRow\n##.adsSpacing\n##.adsTableBlox\n##.adsTag\n##.adsText\n##.adsTextHouse\n##.adsThema\n##.adsTop\n##.adsTopBanner\n##.adsTopCont\n##.adsTower2\n##.adsTowerWrap\n##.adsWidget\n##.adsWithUs\n##.adsYN\n##.ads_1\n##.ads_120x60\n##.ads_120x60_index\n##.ads_125_square\n##.ads_160\n##.ads_180\n##.ads_2\n##.ads_3\n##.ads_300\n##.ads_300250_wrapper\n##.ads_300x100\n##.ads_300x239\n##.ads_300x250\n##.ads_300x600\n##.ads_305\n##.ads_320\n##.ads_320_100\n##.ads_330\n##.ads_337x280\n##.ads_3col\n##.ads_4\n##.ads_460up\n##.ads_468\n##.ads_468x60\n##.ads_672\n##.ads_728\n##.ads_728x90\n##.ads_admeld\n##.ads_after\n##.ads_after_more\n##.ads_amazon\n##.ads_amazon_outer\n##.ads_area\n##.ads_article\n##.ads_banner\n##.ads_banner_between\n##.ads_banner_between_string\n##.ads_bar\n##.ads_before\n##.ads_bg\n##.ads_big\n##.ads_big-half\n##.ads_big_right\n##.ads_big_right_code\n##.ads_bigrec\n##.ads_block\n##.ads_block250\n##.ads_border\n##.ads_box\n##.ads_box_headline\n##.ads_brace\n##.ads_by\n##.ads_by_tico\n##.ads_catDiv\n##.ads_catDivRight\n##.ads_code\n##.ads_column\n##.ads_container\n##.ads_der\n##.ads_disc_anchor\n##.ads_disc_leader\n##.ads_disc_lwr_square\n##.ads_disc_rectangle\n##.ads_disc_skyscraper\n##.ads_disc_square\n##.ads_div\n##.ads_entrymore\n##.ads_folat_left\n##.ads_foot\n##.ads_footer\n##.ads_footerad\n##.ads_frame_wrapper\n##.ads_google\n##.ads_h\n##.ads_header\n##.ads_header_bottom\n##.ads_holder\n##.ads_horizontal\n##.ads_infoBtns\n##.ads_inside2\n##.ads_item\n##.ads_layout_sky\n##.ads_lb\n##.ads_leader\n##.ads_leaderboard\n##.ads_left\n##.ads_loc_bottom\n##.ads_loc_side\n##.ads_lr_wrapper\n##.ads_lr_wrapper2\n##.ads_main\n##.ads_main_hp\n##.ads_medrect\n##.ads_middle\n##.ads_middle_container\n##.ads_mpu\n##.ads_mpu_small\n##.ads_obrazek\n##.ads_outer\n##.ads_outline\n##.ads_post\n##.ads_post_end\n##.ads_post_end_code\n##.ads_post_start\n##.ads_post_start_code\n##.ads_r\n##.ads_rectangle\n##.ads_rem\n##.ads_remove\n##.ads_right\n##.ads_rightbar_top\n##.ads_sc_bl\n##.ads_sc_bl_i\n##.ads_sc_ls_i\n##.ads_sc_tb\n##.ads_sc_tl_i\n##.ads_sep\n##.ads_show_if\n##.ads_side\n##.ads_sideba\n##.ads_sidebar\n##.ads_sidebar_360\n##.ads_sidebar_360_b\n##.ads_singlepost\n##.ads_slice\n##.ads_small_rectangle\n##.ads_space_long\n##.ads_spacer\n##.ads_square\n##.ads_takeover\n##.ads_text\n##.ads_ticker_main\n##.ads_title\n##.ads_top\n##.ads_top_both\n##.ads_top_promo\n##.ads_topbanner\n##.ads_topleft\n##.ads_topright\n##.ads_tower\n##.ads_tr\n##.ads_under_fileinfo\n##.ads_under_player\n##.ads_up\n##.ads_up_big2\n##.ads_verticalSpace\n##.ads_vtlLink\n##.ads_vtlList\n##.ads_wide\n##.ads_widesky\n##.ads_without_height\n##.ads_wrapper\n##.ads_wrapperads_top\n##.adsafp\n##.adsanity-group\n##.adsarea\n##.adsbantop\n##.adsbar\n##.adsbg300\n##.adsblock\n##.adsblockvert\n##.adsbnr\n##.adsbody\n##.adsborder\n##.adsbottom\n##.adsbottombox\n##.adsbox\n##.adsbox-square\n##.adsboxBtn\n##.adsbox_300x250\n##.adsboxitem\n##.adsbttmpg\n##.adsbygoogle\n##.adsbygoogle-box\n##.adsbygoogle2\n##.adsbysinodia\n##.adsbyyahoo\n##.adsc\n##.adscaleAdvert\n##.adscaleP6_canvas\n##.adscaleTop\n##.adscatalog\n##.adsclick\n##.adscontainer\n##.adscontent250\n##.adscontentcenter\n##.adscreen\n##.adsd_shift100\n##.adsdisplaygames\n##.adsdiv\n##.adsection_a2\n##.adsection_c2\n##.adsection_c3\n##.adsence-domain\n##.adsens\n##.adsense-250\n##.adsense-300x256-widget\n##.adsense-300x256-widget-2\n##.adsense-336\n##.adsense-468\n##.adsense-ad\n##.adsense-ads\n##.adsense-afterpost\n##.adsense-attribution\n##.adsense-block\n##.adsense-category\n##.adsense-category-bottom\n##.adsense-center\n##.adsense-code\n##.adsense-container\n##.adsense-div\n##.adsense-float\n##.adsense-googleAds\n##.adsense-header\n##.adsense-heading\n##.adsense-image-detail\n##.adsense-left\n##.adsense-links\n##.adsense-links2\n##.adsense-mod-border\n##.adsense-module\n##.adsense-overlay\n##.adsense-post\n##.adsense-review\n##.adsense-reviews-float\n##.adsense-right\n##.adsense-slot\n##.adsense-square\n##.adsense-title\n##.adsense-top\n##.adsense-top-bar\n##.adsense-topics-detail\n##.adsense-unit\n##.adsense-wide-background\n##.adsense-widget\n##.adsense-widget-horizontal\n##.adsense1\n##.adsense160x600\n##.adsense250\n##.adsense3\n##.adsense300\n##.adsense728\n##.adsense728x90\n##.adsenseAds\n##.adsenseBlock\n##.adsenseContainer\n##.adsenseGreenBox\n##.adsenseInPost\n##.adsenseLargeRectangle\n##.adsenseList\n##.adsenseRow\n##.adsenseSky\n##.adsenseWrapper\n##.adsense_200\n##.adsense_200x200\n##.adsense_728x15_center\n##.adsense_bdc_v2\n##.adsense_block\n##.adsense_bottom\n##.adsense_box01\n##.adsense_container\n##.adsense_div_wrapper\n##.adsense_full_width\n##.adsense_leader\n##.adsense_left_lu\n##.adsense_mainbox01\n##.adsense_managed\n##.adsense_managed_\n##.adsense_media\n##.adsense_menu\n##.adsense_mpu\n##.adsense_rectangle\n##.adsense_results\n##.adsense_right\n##.adsense_sidebar\n##.adsense_single\n##.adsense_small_square\n##.adsense_top\n##.adsense_top_ad\n##.adsense_top_lu\n##.adsense_x88\n##.adsensebig\n##.adsenseblock_bottom\n##.adsenseblock_top\n##.adsenseformat\n##.adsenseframe\n##.adsenseleaderboard\n##.adsenselr\n##.adsensem_widget\n##.adsensemainpage\n##.adsensesky\n##.adsensesq\n##.adsensex336\n##.adsenvelope\n##.adsep\n##.adseparator\n##.adserve_728\n##.adserver_zone\n##.adset\n##.adsforums\n##.adsghori\n##.adsgrd\n##.adsgvert\n##.adshome\n##.adshowcase\n##.adshp\n##.adside\n##.adside-box-index\n##.adside-box-single\n##.adsidebar\n##.adsidebox\n##.adsider\n##.adsincs2\n##.adsinfo\n##.adsingle\n##.adsitem\n##.adsize728\n##.adsizer\n##.adsleaderboard\n##.adsleaderboardbox\n##.adsleft\n##.adsleftblock\n##.adslibraryArticle\n##.adslider\n##.adslink\n##.adslist\n##.adslogan\n##.adslot\n##.adslot-mpu\n##.adslot-widget\n##.adslot_1\n##.adslot_300\n##.adslot_728\n##.adslot_blurred\n##.adslot_bot_300x250\n##.adslothead\n##.adslotleft\n##.adslotright\n##.adslug\n##.adsmall\n##.adsmaller\n##.adsmalltext\n##.adsmanag\n##.adsmedrect\n##.adsmedrectright\n##.adsmessage\n##.adsnippet_widget\n##.adsns\n##.adsonar-after\n##.adspace\n##.adspace-300x600\n##.adspace-MR\n##.adspace-leaderboard\n##.adspace-mpu\n##.adspace-widget\n##.adspace1\n##.adspace180\n##.adspace2\n##.adspace728x90\n##.adspace_2\n##.adspace_bottom\n##.adspace_buysell\n##.adspace_rotate\n##.adspace_skyscraper\n##.adspace_top\n##.adspacer\n##.adspan\n##.adspanel\n##.adspecial390\n##.adspeed\n##.adsplash-160x600\n##.adsplat\n##.adspost\n##.adspot\n##.adspot-title\n##.adspot1\n##.adspot200x90\n##.adspot468x60\n##.adspot728x90\n##.adspot_468x60\n##.adspot_728x90\n##.adsrecnode\n##.adsskyscraper\n##.adssmall\n##.adssquare\n##.adssquare2\n##.adstext\n##.adstextpad\n##.adstipt\n##.adstitle\n##.adstop\n##.adstory\n##.adstrip\n##.adstxt\n##.adstyle\n##.adsupperugo\n##.adsupperugo_txt\n##.adswidget\n##.adswitch\n##.adsxpls\n##.adsystem_ad\n##.adszone\n##.adtab\n##.adtable\n##.adtag\n##.adtech\n##.adtech-ad-widget\n##.adtech-banner\n##.adtech-boxad\n##.adtext_gray\n##.adtext_horizontal\n##.adtext_onwhite\n##.adtext_vertical\n##.adtext_white\n##.adtextleft\n##.adtextright\n##.adtexts\n##.adtile\n##.adtips\n##.adtips1\n##.adtoggle\n##.adtop\n##.adtop-border\n##.adtops\n##.adtower\n##.adtravel\n##.adtv_300_250\n##.adtxt\n##.adtxtlinks\n##.adult-adv\n##.adunit\n##.adunit-300-250\n##.adunit-active\n##.adunit-middle\n##.adunit-parent\n##.adunit125\n##.adunit160\n##.adunit300x250\n##.adunit468\n##.adunit_210x509\n##.adunit_300x100\n##.adunit_300x250\n##.adunit_300x600\n##.adunit_607x110\n##.adunit_728x90\n##.adunit_content\n##.adunit_footer\n##.adunit_maincol_right\n##.adv-160\n##.adv-200-200\n##.adv-250-250\n##.adv-300\n##.adv-300-1\n##.adv-300-250\n##.adv-300x250\n##.adv-336-280\n##.adv-4\n##.adv-468-60\n##.adv-700\n##.adv-970\n##.adv-ad\n##.adv-background\n##.adv-banner\n##.adv-block\n##.adv-border\n##.adv-bottom\n##.adv-box\n##.adv-box-wrapper\n##.adv-click\n##.adv-cont\n##.adv-container\n##.adv-dvb\n##.adv-format-1\n##.adv-google\n##.adv-halfpage\n##.adv-intext\n##.adv-intext-label\n##.adv-key\n##.adv-label\n##.adv-leaderboard\n##.adv-leaderboard-banner\n##.adv-mpu\n##.adv-outer\n##.adv-p\n##.adv-right\n##.adv-right-300\n##.adv-search-ad\n##.adv-sidebar\n##.adv-slide-block-wrapper\n##.adv-square-banner\n##.adv-squarebox-banner\n##.adv-teaser-divider\n##.adv-top\n##.adv-top-container\n##.adv-x61\n##.adv200\n##.adv250\n##.adv300\n##.adv300-250\n##.adv300-250-2\n##.adv300-70\n##.adv300left\n##.adv300x100\n##.adv300x250\n##.adv300x70\n##.adv336\n##.adv350\n##.adv460x60\n##.adv468\n##.adv468x90\n##.adv728\n##.advBottom\n##.advBottomHome\n##.advBox\n##.advImagesbox\n##.advLB_PageMiddle\n##.advLeaderboard\n##.advSquare\n##.advText\n##.advVideobox\n##.adv_1\n##.adv_120\n##.adv_120_600\n##.adv_120x240\n##.adv_120x600\n##.adv_160_600\n##.adv_160x600\n##.adv_2\n##.adv_250_250\n##.adv_300\n##.adv_300_300\n##.adv_300_top\n##.adv_300x250\n##.adv_336_280\n##.adv_468_60\n##.adv_630\n##.adv_728_90\n##.adv_728x90\n##.adv_90\n##.adv_PageTop\n##.adv_aff\n##.adv_banner\n##.adv_banner_hor\n##.adv_bg\n##.adv_box_narrow\n##.adv_cnt\n##.adv_code\n##.adv_default_box_container\n##.adv_flash\n##.adv_headerleft\n##.adv_headerright\n##.adv_hed\n##.adv_here\n##.adv_in_body_a\n##.adv_info_text\n##.adv_leaderboard\n##.adv_left\n##.adv_link\n##.adv_main_middle\n##.adv_main_middle_wrapper\n##.adv_main_right_down\n##.adv_main_right_down_wrapper\n##.adv_medium_rectangle\n##.adv_panel\n##.adv_pointer_home\n##.adv_pointer_section\n##.adv_right\n##.adv_sd_dx\n##.adv_side1\n##.adv_side2\n##.adv_sidebar\n##.adv_sidebar_300x250\n##.adv_top\n##.adv_underpost\n##.adv_x_1\n##.adv_x_2\n##.advbanner_300x250\n##.advbanner_300x600\n##.advbanner_970x90\n##.advbig\n##.advbptxt\n##.adver\n##.adver-left\n##.adver-text\n##.adverTag\n##.adverTxt\n##.adver_bot\n##.adver_cont_below\n##.adverdown\n##.adverhrz\n##.adverserve145\n##.adverstisement_right\n##.advert--banner-wrap\n##.advert--mpu\n##.advert--mpu--rhs\n##.advert--vc\n##.advert--vc__wrapper\n##.advert-100\n##.advert-120x90\n##.advert-160x600\n##.advert-300\n##.advert-300-side\n##.advert-300x100-side\n##.advert-300x250-container\n##.advert-728\n##.advert-728-90\n##.advert-728x90\n##.advert-760\n##.advert-arch-top\n##.advert-article-bottom\n##.advert-banner\n##.advert-banner-holder\n##.advert-bannerad\n##.advert-bg-250\n##.advert-block\n##.advert-bloggrey\n##.advert-body-not-home\n##.advert-bot-box\n##.advert-box\n##.advert-btm\n##.advert-center\n##.advert-center_468x60\n##.advert-col-center\n##.advert-competitions\n##.advert-container\n##.advert-content\n##.advert-content-item\n##.advert-detail\n##.advert-featured\n##.advert-footer\n##.advert-full-raw\n##.advert-group\n##.advert-head\n##.advert-header-728\n##.advert-home-380x120\n##.advert-horizontal\n##.advert-iab-300-250\n##.advert-iab-468-60\n##.advert-label\n##.advert-leaderboard\n##.advert-leaderboard2\n##.advert-loader\n##.advert-lower-right\n##.advert-mini\n##.advert-mpu\n##.advert-mrec\n##.advert-note\n##.advert-overlay\n##.advert-pane\n##.advert-right\n##.advert-section\n##.advert-sky\n##.advert-skyscraper\n##.advert-stub\n##.advert-text\n##.advert-three\n##.advert-tile\n##.advert-title\n##.advert-top\n##.advert-top-footer\n##.advert-txt\n##.advert-under-hedaer\n##.advert-unit\n##.advert-wide\n##.advert-words\n##.advert-wrap\n##.advert-wrap1\n##.advert-wrap2\n##.advert-wrapper\n##.advert1\n##.advert120\n##.advert1Banner\n##.advert2\n##.advert300\n##.advert300-home\n##.advert300x250\n##.advert300x300\n##.advert300x440\n##.advert300x600\n##.advert350ih\n##.advert4\n##.advert5\n##.advert728_90\n##.advert728x90\n##.advert8\n##.advertBanner\n##.advertBar\n##.advertBlock\n##.advertBottom\n##.advertBox\n##.advertCaption\n##.advertColumn\n##.advertCont\n##.advertContainer\n##.advertContent\n##.advertFullBanner\n##.advertGenerator\n##.advertHeadline\n##.advertIslandWrapper\n##.advertLink\n##.advertLink1\n##.advertRight\n##.advertSideBar\n##.advertSign\n##.advertSuperBanner\n##.advertText\n##.advertTitleSky\n##.advert_300x250\n##.advert_336\n##.advert_468x60\n##.advert__container\n##.advert_area\n##.advert_back_160x600\n##.advert_back_300x250\n##.advert_back_300xXXX\n##.advert_banner\n##.advert_block\n##.advert_box\n##.advert_cont\n##.advert_container\n##.advert_div\n##.advert_djad\n##.advert_google_content\n##.advert_google_title\n##.advert_header\n##.advert_home_300\n##.advert_img\n##.advert_in_post\n##.advert_label\n##.advert_leaderboard\n##.advert_line\n##.advert_list\n##.advert_main\n##.advert_main_bottom\n##.advert_mpu_body_hdr\n##.advert_nav\n##.advert_note\n##.advert_small\n##.advert_societe_general\n##.advert_source\n##.advert_surr\n##.advert_top\n##.advert_txt\n##.advert_wrapper\n##.advertasingtxt\n##.advertbar\n##.advertbox\n##.advertheader-red\n##.adverthome\n##.advertis-left\n##.advertis-right\n##.advertise-box\n##.advertise-here\n##.advertise-homestrip\n##.advertise-horz\n##.advertise-info\n##.advertise-inquiry\n##.advertise-leaderboard\n##.advertise-link\n##.advertise-link-post-bottom\n##.advertise-list\n##.advertise-small\n##.advertise-square\n##.advertise-top\n##.advertise-vert\n##.advertiseBlack\n##.advertiseContainer\n##.advertiseHere\n##.advertiseLabel234x60\n##.advertiseLabel300x250\n##.advertiseText\n##.advertise_ads\n##.advertise_box\n##.advertise_box1\n##.advertise_box4\n##.advertise_here\n##.advertise_link\n##.advertise_link_sidebar\n##.advertise_links\n##.advertise_sec\n##.advertise_txt\n##.advertise_verRight\n##.advertisebtn\n##.advertisedBy\n##.advertisement-1\n##.advertisement-160-600\n##.advertisement-2\n##.advertisement-234-60\n##.advertisement-300-250\n##.advertisement-300x250\n##.advertisement-300x600\n##.advertisement-728-90\n##.advertisement-728x90\n##.advertisement-750-60\n##.advertisement-BottomRight\n##.advertisement-after\n##.advertisement-background\n##.advertisement-banner\n##.advertisement-before\n##.advertisement-bkg\n##.advertisement-block\n##.advertisement-bottom\n##.advertisement-caption\n##.advertisement-content\n##.advertisement-copy\n##.advertisement-dashed\n##.advertisement-header\n##.advertisement-label\n##.advertisement-label-up-white\n##.advertisement-layout\n##.advertisement-leader-board\n##.advertisement-leader-board-second\n##.advertisement-leaderboard\n##.advertisement-nav\n##.advertisement-other\n##.advertisement-placeholder\n##.advertisement-position1\n##.advertisement-right\n##.advertisement-right-rail\n##.advertisement-sidebar\n##.advertisement-space\n##.advertisement-sponsor\n##.advertisement-swimlane\n##.advertisement-tag\n##.advertisement-text\n##.advertisement-top\n##.advertisement-txt\n##.advertisement-wrapper\n##.advertisement1\n##.advertisement300x250\n##.advertisement468\n##.advertisementBackground\n##.advertisementBannerVertical\n##.advertisementBar\n##.advertisementBlock\n##.advertisementBox\n##.advertisementCenterer\n##.advertisementColumnGroup\n##.advertisementContainer\n##.advertisementFull\n##.advertisementGif\n##.advertisementHeader\n##.advertisementImg\n##.advertisementLabel\n##.advertisementLabelFooter\n##.advertisementOutsider\n##.advertisementPanel\n##.advertisementReloadable\n##.advertisementRotate\n##.advertisementSmall\n##.advertisementText\n##.advertisementTop\n##.advertisement_160x600\n##.advertisement_300x250\n##.advertisement_below_news_article\n##.advertisement_block_234_60\n##.advertisement_block_468_60\n##.advertisement_btm\n##.advertisement_caption\n##.advertisement_container\n##.advertisement_flag\n##.advertisement_flag_sky\n##.advertisement_g\n##.advertisement_header\n##.advertisement_horizontal\n##.advertisement_post\n##.advertisement_river\n##.advertisement_sky\n##.advertisement_top\n##.advertisement_watchFooter\n##.advertisementonblue\n##.advertisementonwhite\n##.advertisements-right\n##.advertisementsOutterDiv\n##.advertisements_contain\n##.advertisementsubtitle\n##.advertiser\n##.advertiser-links\n##.advertisesingle\n##.advertisespace_div\n##.advertising-aside-top\n##.advertising-banner\n##.advertising-block\n##.advertising-box-top-teaser\n##.advertising-content\n##.advertising-fixed\n##.advertising-header\n##.advertising-leaderboard\n##.advertising-local-links\n##.advertising-lrec\n##.advertising-mention\n##.advertising-srec\n##.advertising-top\n##.advertising-top-box\n##.advertising-top-category\n##.advertising160\n##.advertising2\n##.advertising300_home\n##.advertising300x250\n##.advertising728\n##.advertising728_3\n##.advertisingBanner\n##.advertisingBlock\n##.advertisingBlocks\n##.advertisingLegend\n##.advertisingLrec\n##.advertisingTable\n##.advertising_300x250\n##.advertising_banner\n##.advertising_block\n##.advertising_bottom_box\n##.advertising_box_bg\n##.advertising_images\n##.advertising_widget\n##.advertisment\n##.advertisment-label\n##.advertisment-left-panal\n##.advertisment-module\n##.advertisment-top\n##.advertismentBox\n##.advertismentContainer\n##.advertismentContent\n##.advertismentText\n##.advertisment_bar\n##.advertisment_caption\n##.advertisment_full\n##.advertisment_two\n##.advertize\n##.advertize_here\n##.advertlabel\n##.advertleft\n##.advertnotice\n##.advertorial\n##.advertorial-2\n##.advertorial-promo-box\n##.advertorial-wrapper\n##.advertorial2\n##.advertorial_728x90\n##.advertorial_red\n##.advertorialitem\n##.advertorialtitle\n##.advertorialview\n##.advertorialwidget\n##.advertplay\n##.adverts\n##.adverts-125\n##.adverts_RHS\n##.adverttext\n##.adverttop\n##.advfrm\n##.advhere\n##.advimg160600\n##.advimg300250\n##.advrectangle\n##.advslideshow\n##.advspot\n##.advt\n##.advt-banner-3\n##.advt-block\n##.advt-sec\n##.advt300\n##.advt720\n##.advtBlock\n##.advt_160x600\n##.advt_468by60px\n##.advt_indieclick\n##.advt_single\n##.advt_widget\n##.advtext\n##.advtimg\n##.advtitle\n##.advtop\n##.advtop-leaderbord\n##.advttopleft\n##.adwhitespace\n##.adwide\n##.adwolf-holder\n##.adword-box\n##.adword-structure\n##.adword-text\n##.adword-title\n##.adword1\n##.adwordListings\n##.adwords\n##.adwords-container\n##.adwordsHeader\n##.adwords_in_content\n##.adwrap\n##.adwrap-widget\n##.adwrapper-lrec\n##.adwrapper1\n##.adwrapper948\n##.adxli\n##.adz728x90\n##.adzone\n##.adzone-footer\n##.adzone-sidebar\n##.adzone_ad_5\n##.adzone_ad_6\n##.adzone_ad_7\n##.adzone_ad_8\n##.adzone_ad_9\n##.afc-box\n##.afffix-custom-ad\n##.affiliate-ad\n##.affiliate-footer\n##.affiliate-link\n##.affiliate-mrec-iframe\n##.affiliate-sidebar\n##.affiliate-strip\n##.affiliateAdvertText\n##.affiliate_ad\n##.affiliate_header_ads\n##.affiliate_header_ads_container\n##.affiliates-sidebar\n##.affiliation728x90\n##.affinityAdHeader\n##.afns-ad-sponsor-logo\n##.afsAdvertising\n##.afsAdvertisingBottom\n##.afs_ads\n##.aftContentAdLeft\n##.aftContentAdRight\n##.after-post-ad\n##.after_ad\n##.after_comments_ads\n##.after_post_ad\n##.afterpostadbox\n##.agi-adsaleslinks\n##.agi-adtop\n##.aisle-ad\n##.aisoad\n##.ajaxads\n##.al-wss-ad\n##.alb-content-ad\n##.alignads\n##.allpages_ad_bottom\n##.allpages_ad_top\n##.alt-ad-box\n##.alt_ad\n##.alternatives_ad\n##.amAdvert\n##.am_ads\n##.amsSparkleAdWrapper\n##.anchor-ad-wrapper\n##.anchorAd\n##.annonce_textads\n##.annons_themeBlock\n##.annonstext\n##.another_text_ad\n##.answer_ad_content\n##.aol-knot-fullscreen-right-ad\n##.aol-twist-flyout-ad\n##.aolSponsoredLinks\n##.aopsadvert\n##.ap_str_ad\n##.apiAdMarkerAbove\n##.apiAds\n##.apiButtonAd\n##.app-advertisements\n##.app_advertising_skyscraper\n##.apxContentAd\n##.archive-ad\n##.archive-ads\n##.area1_2_ad1\n##.area5_ad\n##.areaAd\n##.aroundAdUnit\n##.artAdInner\n##.art_ads\n##.art_new_ads_468_60\n##.artcl_promo_ad\n##.article-ad\n##.article-ad-300x250\n##.article-ad-box\n##.article-ad-cont\n##.article-ad-left\n##.article-ad-main\n##.article-ad-primary\n##.article-ads\n##.article-aside-ad\n##.article-content-adwrap\n##.article-header-ad\n##.articleAd\n##.articleAd300x250\n##.articleAdBlade\n##.articleAdSlot2\n##.articleAdTop\n##.articleAdTopRight\n##.articleAds\n##.articleAdsL\n##.articleAdvert\n##.articleEmbeddedAdBox\n##.articleFooterAd\n##.articleHeadAdRow\n##.articleTopAd\n##.article_ad\n##.article_ad250\n##.article_ad_container2\n##.article_adbox\n##.article_ads_banner\n##.article_bottom_ad\n##.article_google_ads\n##.article_inline_ad\n##.article_inner_ad\n##.article_middle_ad\n##.article_mpu_box\n##.article_page_ads_bottom\n##.article_sponsored_links\n##.article_tower_ad\n##.articlead\n##.articleads\n##.articlebodyad\n##.articlepage_ads_1\n##.articlepage_ads_top\n##.artist-ad-wrapper\n##.as_ad\n##.aseadn\n##.aside-ad-wrapper\n##.aside-ads\n##.aside_AD01\n##.aside_AD02\n##.aside_AD06\n##.aside_AD08\n##.aside_AD09\n##.aside_banner_ads\n##.aside_google_ads\n##.associated-ads\n##.atf-ad-medRect\n##.atf-ad-medrec\n##.atf_ad_box\n##.attachment-sidebar-ad\n##.attachment-sidebarAd\n##.attachment-sidebar_ad\n##.attachment-squareAd\n##.attachment-weather-header-ad\n##.auction-nudge\n##.autoshow-top-ad\n##.aux-ad-widget-1\n##.aux-ad-widget-2\n##.avertissement-download\n##.b-ad\n##.b-ad-footerBanner\n##.b-ad-topBanner\n##.b-ads728\n##.b-ads_300\n##.b-ads_gpt\n##.b-ads_iframe\n##.b-adsuniversal-wrap\n##.b-advert\n##.b-advert__grid\n##.b-aside-ads\n##.b-astro-sponsored-links_horizontal\n##.b-astro-sponsored-links_vertical\n##.b5-ad-pushdown\n##.b5_widget_skyscraper_ad\n##.b5ad_bigbox\n##.b5ad_skyscraper\n##.b_ad\n##.b_ads\n##.b_ads_cont\n##.b_ads_r\n##.b_ads_top\n##.back300ad\n##.backgroundAd\n##.bads300\n##.badxcn\n##.bam-dcRefreshableAd\n##.ban-720-container\n##.ban300side\n##.ban420x200\n##.ban420x260\n##.ban680x450\n##.ban728\n##.ban980x90\n##.bank-rate-ad\n##.banmanad\n##.banner-125\n##.banner-300\n##.banner-300x250\n##.banner-300x600\n##.banner-468\n##.banner-468-60\n##.banner-468x60\n##.banner-728\n##.banner-728x90\n##.banner-ad\n##.banner-ad-300x250\n##.banner-ad-footer\n##.banner-ad-row\n##.banner-ad-space\n##.banner-ad-wrapper\n##.banner-ads\n##.banner-ads-300x250\n##.banner-ads-sidebar\n##.banner-adsense\n##.banner-adv\n##.banner-advert\n##.banner-adverts\n##.banner-buysellads\n##.banner-paid-ad-label\n##.banner-rectangleMedium\n##.banner-sidebar-300x250\n##.banner-top-ads\n##.banner-top-banner-728x90\n##.banner1-728x90\n##.banner120x600\n##.banner125x125\n##.banner160\n##.banner160x600\n##.banner250_250\n##.banner300\n##.banner300by250\n##.banner336\n##.banner336x280\n##.banner350\n##.banner468\n##.banner468by60\n##.banner728\n##.banner728-ad\n##.banner728-container\n##.banner728x90\n##.bannerADV\n##.bannerAd\n##.bannerAd3\n##.bannerAd300x250\n##.bannerAdContainer\n##.bannerAdLeaderboard\n##.bannerAdRectangle\n##.bannerAdSidebar\n##.bannerAdTower\n##.bannerAdWrap\n##.bannerAdWrapper300x250\n##.bannerAdWrapper730x86\n##.bannerAd_rdr\n##.bannerAds\n##.bannerAdvert\n##.bannerAside\n##.bannerGAd\n##.bannerRightAd\n##.bannerTopAdLeft\n##.bannerTopAdRight\n##.bannerWrapAdwords\n##.banner_160x600\n##.banner_250x250\n##.banner_300_250\n##.banner_300x250\n##.banner_300x250_2\n##.banner_300x250_3\n##.banner_468_60\n##.banner_468x60\n##.banner_728_90\n##.banner_728x90\n##.banner_ad\n##.banner_ad-728x90\n##.banner_ad_233x90\n##.banner_ad_728x90\n##.banner_ad_footer\n##.banner_ad_leaderboard\n##.banner_ads\n##.banner_ads1\n##.banner_adv\n##.banner_mpu_integrated\n##.banner_reklam\n##.banner_reklam2\n##.banner_slot\n##.bannerad\n##.bannerad-125tower\n##.bannerad-468x60\n##.banneradbottomholder\n##.banneradd\n##.bannerads\n##.banneradv\n##.bannerandads\n##.bannergoogle\n##.bannergroup-ads\n##.banneritem-ads\n##.banneritem_ad\n##.bar_ad\n##.barkerAd\n##.base-ad-mpu\n##.base_ad\n##.base_printer_widgets_AdBreak\n##.bb-adv-160x600\n##.bb-adv-300x250\n##.bbccom-advert\n##.bbsTopAd\n##.bcom_ad\n##.bean-bag-ad\n##.beauty_ads\n##.before-comment-ad\n##.belowNavAds\n##.below_game_ad\n##.below_player_ad\n##.belowthread_advert\n##.belowthread_advert_container\n##.belt_ad\n##.bet_AdBlock\n##.between_page_ads\n##.bex_ad\n##.bg-ad-link\n##.bg-ads\n##.bgAdBlue\n##.bgadgray10px\n##.bgcolor_ad\n##.bgnavad\n##.big-ad\n##.big-ads\n##.big-box-ad\n##.big-right-ad\n##.bigAd\n##.bigAdContainer\n##.bigAdvBanner\n##.bigBoxAdArea\n##.bigCubeAd\n##.big_ad\n##.big_ads\n##.big_center_ad\n##.big_rectangle_page_ad\n##.bigad\n##.bigad1\n##.bigad2\n##.bigadleft\n##.bigadright\n##.bigads\n##.bigadtxt1\n##.bigbox-ad\n##.bigbox_ad\n##.bigboxad\n##.billboard-ad\n##.billboard300x250\n##.billboardAd\n##.billboard_ad\n##.biz-ad\n##.biz-ads\n##.biz-adtext\n##.biz-details-ad\n##.bizCardAd\n##.bizDetailAds\n##.bkg-ad-browse\n##.bl_adv_right\n##.blacboard-ads-container\n##.blk_advert\n##.blocAdInfo\n##.bloc_adsense_acc\n##.block--ad-superleaderboard\n##.block--ads\n##.block--simpleads\n##.block--views-premium-ad-slideshow-block\n##.block-ad\n##.block-ad-leaderboard\n##.block-ad300\n##.block-ad_injector\n##.block-ad_tag\n##.block-admanager\n##.block-ads\n##.block-ads-bottom\n##.block-ads-home\n##.block-ads-top\n##.block-ads1\n##.block-ads2\n##.block-ads3\n##.block-ads_top\n##.block-adsense\n##.block-adsense-managed\n##.block-adsense_managed\n##.block-adspace-full\n##.block-advertisement\n##.block-advertising\n##.block-adzerk\n##.block-altads\n##.block-ami-ads\n##.block-bf_ads\n##.block-bg-advertisement\n##.block-bg-advertisement-region-1\n##.block-boxes-ad\n##.block-deca_advertising\n##.block-dennis-adsense-afc\n##.block-display-ads\n##.block-doubleclick_ads\n##.block-ec_ads\n##.block-eg_adproxy\n##.block-fan-ad\n##.block-fc_ads\n##.block-featured-sponsors\n##.block-gc_ad\n##.block-gg_ads\n##.block-google-admanager\n##.block-google-admanager-dfp\n##.block-google_admanager\n##.block-google_admanager2\n##.block-hcm-ads\n##.block-hcm_ads\n##.block-inner-adds\n##.block-maniad\n##.block-module-ad\n##.block-module-ad-300x250\n##.block-module-ad-300x600\n##.block-nmadition\n##.block-ohtdisplayad\n##.block-openads\n##.block-openadstream\n##.block-openx\n##.block-reklama\n##.block-simpleads\n##.block-skyscraper-ad\n##.block-sn-ad-blog-wrapper\n##.block-sponsor\n##.block-sponsored-links\n##.block-thirdage-ads\n##.block-vh-adjuggler\n##.block-wtg_adtech\n##.block-zagat_ads\n##.block1--ads\n##.blockAd\n##.blockAds\n##.blockAdvertise\n##.block_ad\n##.block_ad_floating_bar\n##.block_ad_sb_text\n##.block_ad_sb_text2\n##.block_ad_sponsored_links\n##.block_ad_sponsored_links-wrapper\n##.block_ad_sponsored_links_localized\n##.block_ad_sponsored_links_localized-wrapper\n##.block_ads\n##.block_adslot\n##.block_adv\n##.block_advert\n##.blockad\n##.blocked-ads\n##.blockrightsmallads\n##.blocsponsor\n##.blog-ad\n##.blog-ad-leader-inner\n##.blog-ads\n##.blog-ads-container\n##.blog-ads-top\n##.blog-advertisement\n##.blog-view-ads\n##.blog2AdIntegrated\n##.blogAd\n##.blogAdvertisement\n##.blogArtAd\n##.blogBigAd\n##.blog_ad\n##.blog_ad_continue\n##.blog_divider_ad\n##.blogads\n##.blogads-sb-home\n##.blogroll-ad-img\n##.blogs_2_square_ad\n##.blox3featuredAd\n##.blue-ad\n##.blxAdopsPlacement\n##.bmg-sidebar-ads-125\n##.bmg-sidebar-ads-300\n##.bn_textads\n##.bnr_ad\n##.bodaciousad\n##.body-ads\n##.body-adzone\n##.bodyAd\n##.body_ad\n##.body_sponsoredresults_bottom\n##.body_sponsoredresults_middle\n##.body_sponsoredresults_top\n##.body_width_ad\n##.bodyads\n##.bodyads2\n##.bodybannerad\n##.bodyrectanglead\n##.bomAd\n##.bonnier-ads\n##.bonnier-ads-ad-bottom\n##.bonnier-ads-ad-top\n##.bookseller-header-advt\n##.booster-ad\n##.bostad\n##.bot-728x90-ad\n##.botAd\n##.botRectAd\n##.bot_ad\n##.bot_ads\n##.botad2\n##.bottom-ad\n##.bottom-ad-box\n##.bottom-ad-fr\n##.bottom-ad-large\n##.bottom-ad-placeholder\n##.bottom-ad-wrapper\n##.bottom-ad2\n##.bottom-ads\n##.bottom-ads-wrapper\n##.bottom-ads728\n##.bottom-banner-ad\n##.bottom-center-adverts\n##.bottom-game-ad\n##.bottom-leaderboard-adslot\n##.bottom-left-ad\n##.bottom-right-advert\n##.bottom-rightadvtsment\n##.bottom-slider-ads\n##.bottomAd\n##.bottomAdBlock\n##.bottomAds\n##.bottomAdvTxt\n##.bottomAdvert\n##.bottomAdvertisement\n##.bottomAdvt\n##.bottomArticleAds\n##.bottomBannerAd\n##.bottomBannerAdsSmallBotLeftHolder\n##.bottomELAd\n##.bottomFriendsAds\n##.bottomReviewAd\n##.bottom_ad\n##.bottom_ad_block\n##.bottom_ad_placeholder\n##.bottom_adbreak\n##.bottom_ads\n##.bottom_ads_wrapper_inner\n##.bottom_adsense\n##.bottom_advert_728x90\n##.bottom_advertise\n##.bottom_banner_ad\n##.bottom_banner_advert_text\n##.bottom_bar_ads\n##.bottom_right_ad\n##.bottom_rightad\n##.bottom_side_ad\n##.bottom_sponsor\n##.bottomad\n##.bottomad-bg\n##.bottomadarea\n##.bottomads\n##.bottomadtop\n##.bottomadvert\n##.bottomadwords\n##.bottombarad\n##.bottomleader\n##.bottomleader-ad-wrapper\n##.bottomrightrailAd\n##.bottomvidad\n##.box-ad\n##.box-ad-a\n##.box-ad-grey\n##.box-ad-mr1\n##.box-ad-unit-j\n##.box-ad-wsr\n##.box-ads\n##.box-ads-small\n##.box-adsense\n##.box-adv-300-home\n##.box-adv-social\n##.box-advert\n##.box-advert-sponsored\n##.box-advertisement\n##.box-adverts\n##.box-entry-ad-bottom-single\n##.box-google-text-ad\n##.box-radvert\n##.box-recommend-ad\n##.box-sidebar-ad\n##.box-sidebar-ad-125\n##.box-sidebar-ad-160\n##.box-sidebar-ad-300\n##.boxAd\n##.boxAdContainer\n##.boxAdFields\n##.boxAdMrec\n##.boxAds\n##.boxAdsInclude\n##.boxAdvertisement\n##.boxOuterAD\n##.boxSponsor\n##.box_ad\n##.box_ad_container\n##.box_ad_content\n##.box_ad_horizontal\n##.box_ad_spacer\n##.box_ad_wrap\n##.box_ads\n##.box_ads728x90_holder\n##.box_adv\n##.box_adv1\n##.box_adv2\n##.box_adv_728\n##.box_adv_new\n##.box_advertising\n##.box_advertising_info\n##.box_advertisment_62_border\n##.box_content_ad\n##.box_content_ads\n##.box_publicidad\n##.box_sidebar-ads\n##.box_textads\n##.box_title_ad\n##.boxad\n##.boxad120\n##.boxadcont\n##.boxads\n##.boxadv\n##.boxcontentad\n##.boxsponsor2\n##.boxyads\n##.bps-ad-wrapper\n##.bps-advertisement\n##.bps-advertisement-inline-ads\n##.bps-advertisement-placeholder\n##.bps-search-chitika-ad\n##.bq_ad_320x250\n##.bq_adleaderboard\n##.bq_rightAd\n##.br-ad\n##.br-ad-text\n##.br-banner-ad\n##.br-right-rail-ad\n##.branding-ad-gallery\n##.branding-ad-wrapper\n##.breadads\n##.breakad_container\n##.breakerAd\n##.breakingNewsModuleSponsor\n##.breakthrough-ad\n##.broker-ad\n##.broker-ads\n##.broker-ads-center\n##.brokerad\n##.browse-ad-container\n##.browse-banner_ad\n##.browse-by-make-ad\n##.browser_boot_ad\n##.bs-ad\n##.bsAdvert\n##.bsa-in-post-ad-125-125\n##.bsa_ads\n##.bsa_it_ad\n##.bt_ad\n##.btf-ad-medRect\n##.btm_ad\n##.btm_ad_container\n##.btn-ad\n##.btn-newad\n##.btn_ad\n##.budget_ads_1\n##.budget_ads_2\n##.budget_ads_3\n##.budget_ads_bg\n##.bullet-sponsored-links\n##.bullet-sponsored-links-gray\n##.bunyad-ad\n##.burstContentAdIndex\n##.businessads\n##.busrep_poll_and_ad_container\n##.button-ad\n##.button-ads\n##.buttonAd\n##.buttonAdSpot\n##.buttonAds\n##.button_ad\n##.button_ads\n##.button_advert\n##.buttonad\n##.buttonad_v2\n##.buttonadbox\n##.buttonads\n##.buySellAdsContainer\n##.buysellAds\n##.buysellAdsSmall\n##.buzzAd\n##.buzz_ad_block\n##.buzz_ad_wrap\n##.bx_ad\n##.bx_ad_right\n##.bxad\n##.bz-ad\n##.bzads-ic-ad-300-250-600\n##.c300x250-advert\n##.c3_adverts\n##.cA-adStack\n##.cA-adStrap\n##.cColumn-TextAdsBox\n##.cLeftTextAdUnit\n##.c_adsky\n##.c_ligatus_nxn\n##.calendarAd\n##.calloutAd\n##.can_ad_slug\n##.canoeAdvertorial\n##.carbonad\n##.carbonad-tag\n##.card--ad\n##.cards-categorical-list-ad\n##.care2_adspace\n##.careerAdviceAd1\n##.carouselbanner_advert\n##.cat_context_ad\n##.catalog_ads\n##.catalyst-ads\n##.cate_right_ad\n##.category-ad\n##.category-advertorial\n##.categorySponsorAd\n##.category__big_game_container_body_games_advertising\n##.categoryfirstad\n##.categoryfirstadwrap\n##.categorypage_ad1\n##.categorypage_ad2\n##.catfish_ad\n##.cb-ad-banner\n##.cb-ad-container\n##.cb_ads\n##.cb_navigation_ad\n##.cbs-ad\n##.cbs-ad-unit\n##.cbs-ad-unit-wrapper\n##.cbstv_ad_label\n##.cbzadvert\n##.cbzadvert_block\n##.cc-advert\n##.cdAdContainer\n##.cdAdTitle\n##.cdLanderAd\n##.cdc-ad\n##.cde_ads_right_top_300x250\n##.cdmainlineSearchAdParent\n##.cdo-ad\n##.cdo-ad-section\n##.cdo-dicthomepage-btm-ad\n##.cdsidebarSearchAdParent\n##.center-ad\n##.center-ad-banner\n##.centerAd\n##.centerAdBar\n##.centerAds\n##.center_ad\n##.center_add\n##.center_ads\n##.center_adsense\n##.centerad\n##.centerads\n##.centeradv\n##.centered-ad\n##.centered_wide_ad\n##.cg_ad_slug\n##.ch_advertisement\n##.change-ad-h-btn\n##.change_AdContainer\n##.changeableadzone\n##.channel-adv\n##.chartad\n##.chitika-ad\n##.chitikaAdBlock\n##.chitikaAdCopy\n##.cinemabotad\n##.clHeader_Ad\n##.classifiedAdSplit\n##.classifiedAdThree\n##.clearerad\n##.client-ad\n##.close-ad-wrapper\n##.close2play-ads\n##.cm-ad\n##.cm-ad-row\n##.cm-hero-ad\n##.cm-rp01-ad\n##.cm-rp02-ad\n##.cmAd\n##.cmAdCentered\n##.cmAdContainer\n##.cmAdFind\n##.cmAdSponsoredLinksBox\n##.cmBottomAdRight\n##.cmMediaRotatorAd\n##.cmMediaRotatorAdSponsor\n##.cmRecentOnAirAds\n##.cmTeaseAdSponsoredLinks\n##.cm_ads\n##.cmam_responsive_ad_widget_class\n##.cmg-ads\n##.cms-Advert\n##.cnAdContainer\n##.cn_ad_placement\n##.cnbcHeaderAd\n##.cnbcRailAd\n##.cnbc_badge_banner_ad_area\n##.cnbc_banner_ad_area\n##.cnbc_leaderboard_ad\n##.cnn160AdFooter\n##.cnnAd\n##.cnnSearchSponsorBox\n##.cnnStoreAd\n##.cnnStoryElementBoxAd\n##.cnnWCAdBox\n##.cnnWireAdLtgBox\n##.cnn_728adbin\n##.cnn_adbygbin\n##.cnn_adcntr300x100\n##.cnn_adcntr728x90\n##.cnn_adcntr728x90t\n##.cnn_adspc300x100\n##.cnn_adspc336cntr\n##.cnn_adtitle\n##.cnn_fabcatad\n##.cnn_grpnadclk\n##.cnn_pt_ad\n##.cnn_sectprtnrbox_cb\n##.cnn_sectprtnrbox_grpn336\n##.cnt-half-page-ads\n##.cnt-header-ad\n##.cnt-right-box-ad\n##.cnt-right-vertical-ad\n##.cnt-right-vertical-ad-home\n##.cnt_ad\n##.cntrad\n##.cobalt-ad\n##.col-ad\n##.col-line-ad\n##.colRightAd\n##.col_ad\n##.col_header_ads_300x250\n##.column-ad\n##.column2-ad\n##.columnBoxAd\n##.columnRightAdvert\n##.column_3_ad\n##.com-ad-server\n##.comment-ad\n##.comment-ad-wrap\n##.comment-advertisement\n##.comment_ad\n##.comment_ad_box\n##.commentsFavoritesAd\n##.commentsbannerad\n##.commercialAd\n##.common-adv-box\n##.common_advertisement_title\n##.communityAd\n##.comp_AdsFrontPage_300x600\n##.companion-ad\n##.companion-ads\n##.companionAd\n##.companion_ad\n##.compareBrokersAds\n##.component-sponsored-links\n##.conTSponsored\n##.con_widget_advertising\n##.conductor_ad\n##.confirm_ad_left\n##.confirm_ad_right\n##.confirm_leader_ad\n##.consoleAd\n##.cont-ad\n##.contads_middle\n##.container-adds\n##.container-adwords\n##.container-rectangle-ad\n##.container-top-adv\n##.containerAdsense\n##.containerSqAd\n##.container_ad\n##.container_row_ad\n##.container_serendipity_plugin_google_adsense\n##.contains-ad\n##.content-ad\n##.content-ad-outer-container\n##.content-ad-side\n##.content-ad-widget\n##.content-ad-wrapper\n##.content-advert\n##.content-advertisment\n##.content-box-inner-adsense\n##.content-footer-ad\n##.content-footer-ad-block\n##.content-header-ad\n##.content-item-ad-top\n##.content-result-ads\n##.content-unit-ad\n##.contentAd\n##.contentAd510\n##.contentAdBox\n##.contentAdContainer\n##.contentAdFoot\n##.contentAdIndex\n##.contentAds\n##.contentAdsCommon\n##.contentAdsWrapper\n##.contentAdvertisement\n##.contentTopAd\n##.contentTopAdSmall\n##.contentTopAds\n##.content_468_ad\n##.content_ad\n##.content_ad_728\n##.content_ad_head\n##.content_ads\n##.content_ads_index\n##.content_adsense\n##.content_adsq\n##.content_advert\n##.content_advertising\n##.content_bottom_adsense\n##.content_column2_ad\n##.content_middle_adv\n##.content_tagsAdTech\n##.contentad\n##.contentad-home\n##.contentad300x250\n##.contentad_right_col\n##.contentadarticle\n##.contentadfloatl\n##.contentadleft\n##.contentads1\n##.contentads2\n##.contentadstartpage\n##.contentadstop1\n##.contentleftad\n##.contentpage_searchad\n##.contents-ads-bottom-left\n##.contenttextad\n##.contentwellad\n##.contentwidgetads\n##.contest_ad\n##.context-ads\n##.contextualAds\n##.contextual_ad_unit\n##.copy-adChoices\n##.core-adplace\n##.cornerBoxInnerWhiteAd\n##.cornerad\n##.cosmo-ads\n##.cp-adsInited\n##.cp_ad\n##.cpaAdPosition\n##.cpmstarHeadline\n##.cpmstarText\n##.cr_ad\n##.cranky-ads-zone\n##.create_ad\n##.credited_ad\n##.criAdv\n##.cross_delete_ads\n##.crumb-ad\n##.cs-adv-wrapper\n##.cs-mpu\n##.csPromoAd\n##.cscTextAd\n##.cse_ads\n##.csiAd_medium\n##.cspAd\n##.ct-ad-article\n##.ct-ad-article-wrapper\n##.ct-ads\n##.ct-bottom-ads\n##.ct_ad\n##.ctn-advertising\n##.ctnAdSkyscraper\n##.ctnAdSquare300\n##.ctr-tss-ads\n##.cube-ad\n##.cubeAd\n##.cube_ad\n##.cube_ads\n##.cubead-widget\n##.currency_ad\n##.custom-ad\n##.custom-ad-container\n##.custom-ads\n##.custom-advert-banner\n##.customAd\n##.custom_ads\n##.custom_banner_ad\n##.custom_footer_ad\n##.customadvert\n##.customized_ad_module\n##.cwAdvert\n##.cwv2Ads\n##.cxAdvertisement\n##.cyads650x100\n##.da-custom-ad-box\n##.darla_ad\n##.dart-ad\n##.dart-ad-content\n##.dart-ad-grid\n##.dart-ad-taboola\n##.dart-ad-title\n##.dart-advertisement\n##.dart-leaderboard\n##.dart-leaderboard-top\n##.dart-medsquare\n##.dartAd300\n##.dartAd491\n##.dartAdImage\n##.dart_ad\n##.dart_tag\n##.dartad\n##.dartadbanner\n##.dartadvert\n##.dartiframe\n##.datafile-ad\n##.dc-ad\n##.dc-banner\n##.dc-half-banner\n##.dc-widget-adv-125\n##.dcAdvertHeader\n##.deckAd\n##.deckads\n##.desktop-ad\n##.desktop-aside-ad\n##.desktop-aside-ad-hide\n##.desktop-postcontentad-wrapper\n##.desktop_ad\n##.detail-ads\n##.detailMpu\n##.detailSidebar-adPanel\n##.detail_ad\n##.detail_article_ad\n##.detail_top_advert\n##.devil-ad-spot\n##.dfad\n##.dfad_first\n##.dfad_last\n##.dfad_pos_1\n##.dfad_pos_2\n##.dfad_pos_3\n##.dfad_pos_4\n##.dfad_pos_5\n##.dfad_pos_6\n##.dfads-javascript-load\n##.dfp-ad\n##.dfp-ad-advert_mpu_body_1\n##.dfp-ad-unit\n##.dfp-ad-widget\n##.dfp-banner\n##.dfp-leaderboard\n##.dfp-plugin-advert\n##.dfp_ad\n##.dfp_ad_caption\n##.dfp_ad_content_bottom\n##.dfp_ad_content_top\n##.dfp_ad_footer\n##.dfp_ad_header\n##.dfrads\n##.diggable-ad-sponsored\n##.display-ad\n##.display-ads-block\n##.display-advertisement\n##.displayAd\n##.displayAd728x90Js\n##.displayAdCode\n##.displayAdSlot\n##.displayAdUnit\n##.displayAds\n##.display_ad\n##.div-google-adx\n##.divAd\n##.divAdright\n##.divAdsBanner\n##.divAdsLeft\n##.divAdsRight\n##.divAdvTopRight\n##.divGoogleAdsTop\n##.divReklama\n##.divRepAd\n##.divSponsoredBox\n##.divSponsoredLinks\n##.divTopADBanner\n##.divTopADBannerWapper\n##.div_adv300\n##.div_adv620\n##.div_adv728\n##.div_advertisement\n##.div_advertorial\n##.div_advstrip\n##.div_banner468\n##.divad1\n##.divad2\n##.divad3\n##.divads\n##.divadsensex\n##.divider_ad\n##.dlSponsoredLinks\n##.dm-ads-125\n##.dm-ads-350\n##.dmRosMBAdBox\n##.dmco_advert_iabrighttitle\n##.dod_ad\n##.double-ad\n##.double-click-ad\n##.double-square-ad\n##.doubleGoogleTextAd\n##.double_adsense\n##.double_click_widget\n##.doubleclick-ad\n##.doubleclick_adtype\n##.download-ad\n##.downloadAds\n##.download_ad\n##.downloadad\n##.drop-ad\n##.dropdownAds\n##.dsq_ad\n##.dualAds\n##.dwn_link_adv\n##.dynamic-ad-wrap-b\n##.dynamic-ads\n##.dynamicLeadAd\n##.dynamic_ad\n##.dynamic_adslot\n##.dynamicad1\n##.dynamicad2\n##.e-ad\n##.eads\n##.earAdv\n##.east_ad_bg\n##.east_ad_block\n##.easy-ads\n##.easyazon-block\n##.eb_ad280\n##.ebayads\n##.ec-ads\n##.ec-ads-remove-if-empty\n##.ec_ad_banner\n##.ecosia-ads\n##.editor_ad\n##.editorial-adsense\n##.editors-ads\n##.ehs-adbridge\n##.ej-advertisement-text\n##.element-adplace\n##.em-ad\n##.em-ads-widget\n##.em_ad_300x250\n##.em_ads_box_dynamic_remove\n##.embAD\n##.embed-ad\n##.embeddedAd\n##.embeddedAds\n##.emm-ad\n##.empty-ad\n##.endemic_ads\n##.engagement_ad\n##.eniro_ad\n##.enterpriseAd\n##.entry-ad\n##.entry-ads\n##.entry-ads-110\n##.entry-body-ad\n##.entry-bottom-ad\n##.entry-injected-ad\n##.entry-top-ad\n##.entryAd\n##.entry_sidebar_ads\n##.entryad\n##.eol-ads\n##.epicgame-ads\n##.esp_publicidad\n##.et-single-post-ad\n##.exec-advert-flash\n##.expanding-ad\n##.expertsAd\n##.external-add\n##.externalAdComponent\n##.extrasColumnFuseAdLocal\n##.ez-ad\n##.ez-clientAd\n##.ezAdsWidget\n##.ezAdsense\n##.ezoic-ad\n##.fN-affiliateStrip\n##.f_Ads\n##.fbCalendarAds\n##.fbPhotoSnowboxAds\n##.fblockad\n##.fc_splash_ad\n##.fd-display-ad\n##.feat_ads\n##.featureAd\n##.feature_ad\n##.featured-ad\n##.featured-ads\n##.featured-sponsors\n##.featuredAdBox\n##.featuredAds\n##.featuredBoxAD\n##.featured_ad\n##.featured_ad_item\n##.featured_advertisers_box\n##.featuredadvertising\n##.feedBottomAd\n##.fg_Ad\n##.fi_adsense\n##.finpostsads\n##.fireplaceadleft\n##.fireplaceadright\n##.fireplaceadtop\n##.first-ad\n##.first_ad\n##.firstad\n##.firstpost_advert\n##.firstpost_advert_container\n##.fiveMinCompanionBanner\n##.fixed-ad-160x600\n##.fixedAds\n##.fixedRightAd\n##.fl-adsense\n##.flagads\n##.flash-advertisement\n##.flashAd\n##.flash_ad\n##.flash_advert\n##.flashad\n##.flashadd\n##.flex-ad\n##.flexAd\n##.flexad\n##.flexadvert\n##.flexbanneritemad\n##.flexiad\n##.flipbook_v2_sponsor_ad\n##.floatad\n##.floatads\n##.floated-ad\n##.floated_right_ad\n##.floating-advert\n##.floatingAds\n##.fm-badge-ad\n##.fnadvert\n##.fns_td_wrap\n##.fold-ads\n##.follower-ad-bottom\n##.foot-ad\n##.foot-ads\n##.foot-advertisement\n##.foot_adsense\n##.footad\n##.footer-300-ad\n##.footer-ad\n##.footer-ad-section\n##.footer-ad-squares\n##.footer-ads\n##.footer-ads-wrapper\n##.footer-adsbar\n##.footer-adsense\n##.footer-advert\n##.footer-advert-large\n##.footer-advertisement\n##.footer-advertisements\n##.footer-advertising-area\n##.footer-banner-ad\n##.footer-floating-ad\n##.footer-leaderboard-ad\n##.footer-text-ads\n##.footerAd\n##.footerAdModule\n##.footerAdUnit\n##.footerAdWrapper\n##.footerAds\n##.footerAdsWrap\n##.footerAdslot\n##.footerAdverts\n##.footerFullAd\n##.footerGoogleAdMainWarp\n##.footerTextAd\n##.footer_ad\n##.footer_ad336\n##.footer_ads\n##.footer_adv\n##.footer_advertisement\n##.footer_banner_ad_container\n##.footer_block_ad\n##.footer_bottom_ad\n##.footer_bottomad\n##.footer_line_ad\n##.footer_text_ad\n##.footer_text_adblog\n##.footerad\n##.footerads\n##.footeradspace\n##.footertextadbox\n##.forex_ad_links\n##.forum-ad-2\n##.forumAd\n##.forum_ad_beneath\n##.forumtopad\n##.four-ads\n##.four-six-eight-ad\n##.four_button_threeone_ad\n##.four_percent_ad\n##.fp_ad_text\n##.frame_adv\n##.framead\n##.freedownload_ads\n##.freegame_bottomad\n##.frn_adbox\n##.frn_cont_adbox\n##.frontads\n##.frontpage-google-ad\n##.frontpage-right-ad\n##.frontpage-right-ad-hide\n##.frontpage_ads\n##.fs-ad-block\n##.fs1-advertising\n##.fs_ad_300x250\n##.ft-ad\n##.ftdAdBar\n##.ftdContentAd\n##.ftr_ad\n##.full-ad\n##.full-width-ad\n##.fullSizeAd\n##.full_ad_box\n##.full_ad_row\n##.full_width_ad\n##.fulladblock\n##.fullbannerad\n##.fusionAdLink\n##.future_dfp-inline_ad\n##.fw-mod-ad\n##.fwAdTags\n##.g-ad\n##.g-ad-slot\n##.g-ad-slot-toptop\n##.g-adblock3\n##.g-advertisement-block\n##.g2-adsense\n##.g3-adsense\n##.g3rtn-ad-site\n##.gAdRows\n##.gAdSky\n##.gAds\n##.gAds1\n##.gAdsBlock\n##.gAdsContainer\n##.gAdvertising\n##.g_ad\n##.g_ad336\n##.g_ads_200\n##.g_ads_728\n##.g_adv\n##.g_ggl_ad\n##.ga-ad-split\n##.ga-ads\n##.ga-textads-bottom\n##.ga-textads-top\n##.gaTeaserAds\n##.gaTeaserAdsBox\n##.gad_container\n##.gads300x250\n##.gads_cb\n##.gads_container\n##.gadsense\n##.gadstxtmcont2\n##.galleria-AdOverlay\n##.gallery-ad\n##.gallery-ad-holder\n##.gallery-ad-wrapper\n##.gallery-sidebar-ad\n##.galleryAdvertPanel\n##.galleryLeftAd\n##.galleryRightAd\n##.gallery_300x100_ad\n##.gallery__aside-ad\n##.gallery__footer-ad\n##.gallery_ad\n##.gallery_ads_box\n##.galleryads\n##.gam-300x250-default-ad-container\n##.gam_ad_slot\n##.game-ads\n##.game-right-ad-container\n##.gameAd\n##.gameBottomAd\n##.game__adv_containerLeaderboard\n##.game_right_ad\n##.game_under_ad\n##.gamepage_boxad\n##.gamepageadBox\n##.gameplayads\n##.games-ad-wrapper\n##.games-ad300\n##.gamesPage_ad_container\n##.gamesPage_ad_content\n##.gamezebo_ad\n##.gamezebo_ad_info\n##.gbl_adstruct\n##.gbl_advertisement\n##.gdgt-header-advertisement\n##.gdgt-postb-advertisement\n##.geeky_ad\n##.gels-inlinead\n##.gen_side_ad\n##.general-adzone\n##.generic-ad-module\n##.generic-ad-title\n##.generic_300x250_ad\n##.geoAd\n##.getridofAds\n##.getridofAdsBlock\n##.gfp-banner\n##.ggads\n##.ggadunit\n##.ggadwrp\n##.gglAds\n##.gglads300\n##.gl_ad\n##.glamsquaread\n##.glance_banner_ad\n##.globalAd\n##.globalAdLargeRect\n##.globalAdLeaderBoard\n##.global_banner_ad\n##.gm-ad-lrec\n##.gn_ads\n##.go-ad\n##.go-ads-widget-ads-wrap\n##.goog_ad\n##.googad\n##.googads\n##.google-ad\n##.google-ad-728-90\n##.google-ad-block\n##.google-ad-container\n##.google-ad-content\n##.google-ad-image\n##.google-ad-side_ad\n##.google-ad-square-sidebar\n##.google-ad-widget\n##.google-ads\n##.google-ads-boxout\n##.google-ads-group\n##.google-ads-leaderboard\n##.google-ads-long\n##.google-ads-obj\n##.google-ads-responsive\n##.google-ads-right\n##.google-ads-rodape\n##.google-ads-sidebar\n##.google-ads-slim\n##.google-ads-widget\n##.google-ads-wrapper\n##.google-ads2\n##.google-adsbygoogle\n##.google-adsense\n##.google-afc-wrapper\n##.google-csi-ads\n##.google-entrepreneurs-ad\n##.google-right-ad\n##.google-sponsored\n##.google-sponsored-ads\n##.google-sponsored-link\n##.google-sponsored-links\n##.google-text-ads\n##.google-user-ad\n##.google300x250\n##.google300x250BoxFooter\n##.google300x250TextDetailMiddle\n##.google300x250TextFooter\n##.google468\n##.google468_60\n##.google728x90\n##.google728x90TextDetailTop\n##.googleAd\n##.googleAd-content\n##.googleAd-list\n##.googleAd300x250\n##.googleAd300x250_wrapper\n##.googleAdBox\n##.googleAdContainer\n##.googleAdContainerSingle\n##.googleAdFoot\n##.googleAdSearch\n##.googleAdSense\n##.googleAdSenseModule\n##.googleAdTopTipDetails\n##.googleAdWrapper\n##.googleAd_160x600\n##.googleAd_1x1\n##.googleAd_728x90\n##.googleAd_body\n##.googleAdd\n##.googleAds\n##.googleAds336\n##.googleAds728\n##.googleAds_article_page_above_comments\n##.googleAdsense\n##.googleAdsense468x60\n##.googleAdv1\n##.googleBannerWrapper\n##.googleContentAds\n##.googleInsideAd\n##.googleLgRect\n##.googleProfileAd\n##.googleSearchAd_content\n##.googleSearchAd_sidebar\n##.googleSideAd\n##.googleSkyWrapper\n##.googleSubjectAd\n##.google_728x90\n##.google_ad\n##.google_ad3\n##.google_ad336\n##.google_ad_bg\n##.google_ad_btn\n##.google_ad_container\n##.google_ad_label\n##.google_ad_mrec\n##.google_ad_right\n##.google_ad_wide\n##.google_add\n##.google_add_container\n##.google_admanager\n##.google_ads\n##.google_ads_468x60\n##.google_ads_bom_block\n##.google_ads_bom_title\n##.google_ads_content\n##.google_ads_header11\n##.google_ads_sidebar\n##.google_ads_v3\n##.google_adsense\n##.google_adsense1\n##.google_adsense1_footer\n##.google_adsense_footer\n##.google_adsense_sidebar_left\n##.google_afc\n##.google_afc_ad\n##.google_afc_categorymain\n##.google_top_adsense\n##.google_top_adsense1\n##.google_top_adsense1_footer\n##.google_top_adsense_footer\n##.google_txt_ads_mid_big_img\n##.googlead\n##.googlead-sidebar\n##.googleadArea\n##.googlead_idx_b_97090\n##.googlead_idx_h_97090\n##.googlead_iframe\n##.googlead_outside\n##.googleadbottom\n##.googleadcontainer\n##.googleaddiv\n##.googleaddiv2\n##.googleadiframe\n##.googleads\n##.googleads-bottommiddle\n##.googleads-container\n##.googleads-topmiddle\n##.googleads_300x250\n##.googleads_title\n##.googleadsense\n##.googleadsrectangle\n##.googleadvertisemen120x600\n##.googleadvertisement\n##.googleadwrap\n##.googleafc\n##.googlebanwide\n##.googleimagead1\n##.googleimagead2\n##.googlepostads\n##.googley_ads\n##.gpAdBox\n##.gpAdFooter\n##.gpAds\n##.gp_adbanner--bottom\n##.gp_adbanner--top\n##.gpadvert\n##.gpt-ad\n##.gpt-ads\n##.gr-adcast\n##.gradientAd\n##.graphic_ad\n##.grev-ad\n##.grey-ad-line\n##.grey-ad-notice\n##.greyAd\n##.greyad\n##.grid-ad\n##.grid-advertisement\n##.grid-item-ad\n##.gridAd\n##.gridAdRow\n##.gridSideAd\n##.gridstream_ad\n##.group-google-ads\n##.group_ad\n##.grv_is_sponsored\n##.gsAd\n##.gsfAd\n##.gsl-ads\n##.gt_ad\n##.gt_ad_300x250\n##.gt_ad_728x90\n##.gt_adlabel\n##.gtadlb\n##.gtop_ad\n##.gujAd\n##.gutter-ad-left\n##.gutter-ad-right\n##.gutter-ad-wrapper\n##.gutterAdHorizontal\n##.gx_ad\n##.h-ad\n##.h-ad-728x90-bottom\n##.h-ad-remove\n##.h-ads\n##.h-large-ad-box\n##.h-top-ad\n##.h11-ad-top\n##.h_Ads\n##.h_ad\n##.half-ad\n##.halfPageAd\n##.half_ad_box\n##.halfpage_ad_container\n##.has-ad\n##.hbPostAd\n##.hbox_top_sponsor\n##.hcf-ad\n##.hcf-ad-rectangle\n##.hcf-cms-ad\n##.hd-adv\n##.hdTopAdContainer\n##.hd_advert\n##.hd_below_player_ad\n##.hdr-ad\n##.hdr-ad-text\n##.hdr-ads\n##.hdrAd\n##.hdr_ad\n##.head-ads\n##.headAd\n##.head_ad\n##.head_ad_wrapper\n##.head_ads\n##.head_adv\n##.head_advert\n##.headad\n##.headadcontainer\n##.header--ad-space\n##.header-ad\n##.header-ad-banner\n##.header-ad-new-wrap\n##.header-ad-space\n##.header-ad-wrap\n##.header-ad-wrapper\n##.header-ad234x60left\n##.header-ad234x60right\n##.header-adplace\n##.header-ads\n##.header-ads-holder\n##.header-adsense\n##.header-adv\n##.header-advert\n##.header-advert-container\n##.header-banner-ads\n##.header-bannerad\n##.header-google-ads\n##.header-sponsor\n##.header-taxonomy-image-sponsor\n##.header-top-ad\n##.header15-ad\n##.header3-advert\n##.header728-ad\n##.headerAd\n##.headerAd1\n##.headerAdArea\n##.headerAdCode\n##.headerAdWrapper\n##.headerAds\n##.headerAdspace\n##.headerAdvert\n##.headerTextAd\n##.headerTopAds\n##.header_ad\n##.header_ad_2\n##.header_ad_center\n##.header_ad_div\n##.header_ads\n##.header_ads_promotional\n##.header_adsense_banner\n##.header_advert\n##.header_advertisement\n##.header_advertisement_text\n##.header_advertisment\n##.header_classified_ads\n##.header_leaderboard_ad\n##.header_right_ad\n##.headerad\n##.headerad-720\n##.headerad-placeholder\n##.headeradarea\n##.headeradhome\n##.headeradinfo\n##.headeradright\n##.headerads\n##.heading-ad-space\n##.heatmapthemead_ad_widget\n##.hero-ad\n##.hi5-ad\n##.hidden-ad\n##.hideAdMessage\n##.hidePauseAdZone\n##.hide_ad\n##.highlights-ad\n##.highlightsAd\n##.hl-post-center-ad\n##.hm_advertisment\n##.hm_top_right_google_ads\n##.hm_top_right_google_ads_budget\n##.hn-ads\n##.home-300x250-ad\n##.home-ad\n##.home-ad-container\n##.home-ad-links\n##.home-ad728\n##.home-ads\n##.home-ads-container\n##.home-ads-container1\n##.home-advert\n##.home-area3-adv-text\n##.home-body-ads\n##.home-features-ad\n##.home-sidebar-ad-300\n##.home-slider-ads\n##.home-sticky-ad\n##.home-top-of-page__top-box-ad\n##.home-top-right-ads\n##.homeAd\n##.homeAd1\n##.homeAd2\n##.homeAdBox\n##.homeAdBoxA\n##.homeAdBoxBetweenBlocks\n##.homeAdBoxInBignews\n##.homeAdFullBlock\n##.homeAdSection\n##.homeAddTopText\n##.homeCentreAd\n##.homeMainAd\n##.homeMediumAdGroup\n##.homePageAds\n##.homeSubAd\n##.homeTextAds\n##.home_ad\n##.home_ad_300x100\n##.home_ad_300x250\n##.home_ad_bottom\n##.home_ad_large\n##.home_adblock\n##.home_advert\n##.home_advertisement\n##.home_advertorial\n##.home_box_latest_ads\n##.home_mrec_ad\n##.home_offer_adv\n##.home_sidebar_ads\n##.home_sway_adv\n##.home_top_right_ad\n##.home_top_right_ad_label\n##.homead\n##.homeadnews\n##.homefront468Ad\n##.homepage-300-250-ad\n##.homepage-ad\n##.homepage-ad-block-padding\n##.homepage-ad-buzz-col\n##.homepage-advertisement\n##.homepage-footer-ad\n##.homepage-footer-ads\n##.homepage-right-rail-ad\n##.homepage-sponsoredlinks-container\n##.homepage300ad\n##.homepageAd\n##.homepageFlexAdOuter\n##.homepageMPU\n##.homepage__ad\n##.homepage__ad--middle-leader-board\n##.homepage__ad--top-leader-board\n##.homepage__ad--top-mrec\n##.homepage_ads\n##.homepage_block_ad\n##.homepage_middle_right_ad\n##.homepageinline_adverts\n##.homestream-ad\n##.hor_ad\n##.hori-play-page-adver\n##.horisont_ads\n##.horiz_adspace\n##.horizontal-ad-holder\n##.horizontalAd\n##.horizontalAdText\n##.horizontalAdvert\n##.horizontal_ad\n##.horizontal_adblock\n##.horizontal_ads\n##.horizontalbtad\n##.horizontaltextadbox\n##.horizsponsoredlinks\n##.hortad\n##.house-ad\n##.house-ads\n##.houseAd\n##.houseAd1\n##.houseAdsStyle\n##.housead\n##.hover_300ad\n##.hover_ads\n##.hoverad\n##.hp-col4-ads\n##.hp-content__ad\n##.hp-inline-ss-service-ad\n##.hp-main__rail__footer__ad\n##.hp-slideshow-right-ad\n##.hp-ss-service-ad\n##.hp2-adtag\n##.hpPollQuestionSponsor\n##.hpPriceBoardSponsor\n##.hp_320-250-ad\n##.hp_ad_300\n##.hp_ad_box\n##.hp_ad_cont\n##.hp_ad_text\n##.hp_horizontal_ad\n##.hp_t_ad\n##.hp_w_ad\n##.hpa-ad1\n##.hr-ads\n##.hr_ad\n##.hss-ad\n##.hss-ad-300x250_1\n##.hss_static_ad\n##.hst-contextualads\n##.ht_ad_widget\n##.html-advertisement\n##.html-component-ad-filler\n##.html5-ad-progress-list\n##.hyad\n##.hype_adrotate_widget\n##.i360ad\n##.i_ad\n##.ib-adv\n##.ib-figure-ad\n##.ibm_ad_bottom\n##.ibm_ad_text\n##.ibt-top-ad\n##.ic-ads\n##.ico-adv\n##.icon-advertise\n##.iconAdChoices\n##.icon_ad_choices\n##.idGoogleAdsense\n##.idMultiAd\n##.idc-adContainer\n##.idc-adWrapper\n##.idgGoogleAdTag\n##.iframe-ad\n##.iframe-ads\n##.iframeAd\n##.iframead\n##.iframeadflat\n##.im-topAds\n##.image-ad-336\n##.image-advertisement\n##.image-viewer-ad\n##.image-viewer-mpu\n##.imageAd\n##.imageAdBoxTitle\n##.imageads\n##.imagetable_ad\n##.img_ad\n##.img_ads\n##.imgad\n##.imgur-ad\n##.imuBox\n##.in-ad\n##.in-between-ad\n##.in-node-ad-300x250\n##.in-page-ad\n##.in-story-ads\n##.in-story-text-ad\n##.inArticleAdInner\n##.inPageAd\n##.inStoryAd-news2\n##.in_article_ad\n##.in_content_ad_container\n##.in_up_ad_game\n##.indEntrySquareAd\n##.indent-advertisement\n##.index-adv\n##.index-after-second-post-ad\n##.index_728_ad\n##.index_ad\n##.index_right_ad\n##.indexad\n##.indie-sidead\n##.indy_googleads\n##.info-ads\n##.info-advert-160x600\n##.info-advert-300x250\n##.info-advert-728x90\n##.info-advert-728x90-inside\n##.infoBoxThreadPageRankAds\n##.ingameadbox\n##.ingameboxad\n##.ingridAd\n##.inhouseAdUnit\n##.inhousead\n##.injectedAd\n##.inline-ad\n##.inline-ad-wrap\n##.inline-ad-wrapper\n##.inline-adblock\n##.inline-mpu\n##.inline-mpu-left\n##.inlineAd\n##.inlineAdContainer\n##.inlineAdImage\n##.inlineAdInner\n##.inlineAdNotice\n##.inlineAdText\n##.inlineAdTour\n##.inlineAd_content\n##.inlineAdvert\n##.inlineAdvertisement\n##.inlineSideAd\n##.inline_ad\n##.inline_ad_container\n##.inline_ad_title\n##.inline_ads\n##.inlinead\n##.inlinead-tagtop\n##.inlineadsense\n##.inlineadtitle\n##.inlist-ad\n##.inlistAd\n##.inner-ad\n##.inner-advt-banner-3\n##.inner468ad\n##.innerAds\n##.innerContentAd\n##.inner_ad\n##.inner_ad_advertise\n##.inner_big_ad\n##.innerad\n##.innerpostadspace\n##.inpostad\n##.insert-advert-ver01\n##.insert-post-ads\n##.insertAd_AdSlice\n##.insertAd_Rectangle\n##.insertAd_TextAdBreak\n##.insert_ad\n##.insert_advertisement\n##.insertad\n##.insideStoryAd\n##.inside_ad\n##.inside_ad_box\n##.instructionAdvHeadline\n##.insurance-ad\n##.intad\n##.inteliusAd_image\n##.interest-based-ad\n##.internal-ad\n##.internalAdSection\n##.internalAdsContainer\n##.internal_ad\n##.interstitial-ad\n##.interstitial-ad600\n##.interstitial468x60\n##.interstitial_ad_wrapper\n##.ion-ad\n##.ione-widget-dart-ad\n##.ipm-sidebar-ad-middle\n##.iprom-ad\n##.ipsAd\n##.iqadlinebottom\n##.is-sponsored\n##.is24-adplace\n##.isAd\n##.is_trackable_ad\n##.isad_box\n##.island-ad\n##.islandAd\n##.islandAdvert\n##.island_ad\n##.islandad\n##.isocket_ad_row\n##.item-ad\n##.item-ad-leaderboard\n##.item-ads\n##.item-advertising\n##.item-container-ad\n##.item-housead\n##.item-housead-last\n##.itemAdvertise\n##.item_ads\n##.ja-ads\n##.jalbum-ad-container\n##.jam-ad\n##.jimdoAdDisclaimer\n##.jobkeywordads\n##.jobs-ad-box\n##.jobs-ad-marker\n##.joead728\n##.jp-advertisment-promotional\n##.js-ad-home\n##.js-ad-wrapper\n##.js-advert\n##.js-advert--vc\n##.js-header-ad\n##.js-stream-featured-ad\n##.jsx-adcontainer\n##.juicyads_300x250\n##.jumboAd\n##.kd_ads_block\n##.kdads-empty\n##.kdads-link\n##.keyword-ads-block\n##.kip-banner-ad\n##.knowledgehub_ad\n##.kw_advert\n##.kw_advert_pair\n##.l-ad-300\n##.l-ad-728\n##.l-adsense\n##.l-bottom-ads\n##.l-header-advertising\n##.l300x250ad\n##.l_ad_sub\n##.label-ad\n##.labelads\n##.labeled_ad\n##.landing-page-ads\n##.landingAdRail\n##.landing_adbanner\n##.large-btn-ad\n##.large-right-ad\n##.largeAd\n##.largeRecAdNewsContainerRight\n##.largeRectangleAd\n##.largeUnitAd\n##.large_ad\n##.large_add_container\n##.largesideadpane\n##.lastAdvertorial\n##.lastRowAd\n##.lastads\n##.lastpost_advert\n##.layer_text_ad\n##.layeradinfo\n##.layout_communityad_right_ads\n##.lazyad\n##.lazyload_ad\n##.lazyload_ad_article\n##.lb-ad\n##.lbc-ad\n##.lcontentbox_ad\n##.lead-ad\n##.lead-ads\n##.leadAd\n##.leader-ad\n##.leaderAd\n##.leaderAdSlot\n##.leaderAdTop\n##.leaderAdvert\n##.leaderBoardAdHolder\n##.leaderBoardAdvert\n##.leaderOverallAdArea\n##.leader_ad\n##.leader_aol\n##.leaderboard-ad\n##.leaderboard-ad-container\n##.leaderboard-ad-green\n##.leaderboard-ad-grid\n##.leaderboard-ad-inner\n##.leaderboard-ad-main\n##.leaderboard-adblock\n##.leaderboard-ads\n##.leaderboard-advert\n##.leaderboard-advertisement\n##.leaderboardAd\n##.leaderboardAdContainer\n##.leaderboardAdContainerInner\n##.leaderboardFooter_ad\n##.leaderboard_ad\n##.leaderboard_ad_unit\n##.leaderboard_ad_unit_groups\n##.leaderboard_adv\n##.leaderboard_banner_ad\n##.leaderboardad\n##.leaderboardadmiddle\n##.leaderboardadtop\n##.leaderboardadwrap\n##.left-ad\n##.left-ad180\n##.left-ads\n##.left-advert\n##.left-column-rectangular-ad\n##.left-column-virtical-ad\n##.left-rail-ad\n##.left-rail-horizontal-ads\n##.left-sidebar-box-ads\n##.left-takeover-ad\n##.left-takeover-ad-sticky\n##.left120X600AdHeaderText\n##.leftAd\n##.leftAdColumn\n##.leftAdContainer\n##.leftAd_bottom_fmt\n##.leftAd_top_fmt\n##.leftAds\n##.leftAdvert\n##.leftCol_advert\n##.leftColumnAd\n##.left_300_ad\n##.left_ad\n##.left_ad_160\n##.left_ad_areas\n##.left_ad_box\n##.left_ad_container\n##.left_adlink\n##.left_ads\n##.left_adsense\n##.left_advertisement_block\n##.left_col_ad\n##.left_google_add\n##.left_sidebar_wide_ad\n##.leftad\n##.leftadd\n##.leftadtag\n##.leftbar_ad_160_600\n##.leftbarads\n##.leftbottomads\n##.leftnavad\n##.leftrighttopad\n##.leftsidebar_ad\n##.lefttopad1\n##.legacy-ads\n##.legal-ad-choice-icon\n##.lgRecAd\n##.lg_ad\n##.liboxads\n##.ligatus\n##.lightad\n##.lijit-ad\n##.linead\n##.linkAD\n##.link_adslider\n##.link_advertise\n##.linkads\n##.linkedin-sponsor\n##.links_google_adx\n##.list-ad\n##.list-ads\n##.listAdvertGenerator\n##.listad\n##.listing-content-ad-container\n##.listing-item-ad\n##.listingAd\n##.listings-bottom-ad-w\n##.listings_ad\n##.little_vid_ads\n##.live-search-list-ad-container\n##.live_tv_sponsorship_ad\n##.liveads\n##.livingsocial-ad\n##.ljad\n##.llsAdContainer\n##.lnad\n##.loadadlater\n##.local-ads\n##.localad\n##.location-ad\n##.log_ads\n##.logo-ad\n##.logoAd-hanging\n##.logoAds\n##.logo_AdChoices\n##.logoad\n##.logoutAd\n##.logoutAdContainer\n##.longAd\n##.longAdBox\n##.longAds\n##.longBannerAd\n##.long_ad\n##.longform-ad\n##.loop-ad\n##.loop_google_ad\n##.lottery-ad-container\n##.lower-ads\n##.lowerAd\n##.lowerAds\n##.lowerContentBannerAd\n##.lowerContentBannerAdInner\n##.lower_ad\n##.lpt_adsense_bottom_content\n##.lqm-ads\n##.lqm_ad\n##.lr-ad\n##.lr_skyad\n##.lsn-yahooAdBlock\n##.lt_ad_call\n##.luma-ad\n##.luxeAd\n##.m-ad\n##.m-ad-tvguide-box\n##.m-advertisement\n##.m-advertisement--container\n##.m-layout-advertisement\n##.m-mem--ad\n##.m-sponsored\n##.m4-adsbygoogle\n##.mTopAd\n##.m_ad300\n##.m_banner_ads\n##.macAd\n##.macad\n##.mad_adcontainer\n##.madison_ad\n##.magad\n##.magazine_box_ad\n##.main-ad\n##.main-ads\n##.main-advert\n##.main-column-ad\n##.main-footer-ad\n##.main-right-ads\n##.main-tabs-ad-block\n##.mainAd\n##.mainAdContainer\n##.mainAds\n##.mainEcoAd\n##.mainLeftAd\n##.mainLinkAd\n##.mainRightAd\n##.main_ad\n##.main_ad_adzone_5_ad_0\n##.main_ad_adzone_6_ad_0\n##.main_ad_adzone_7_ad_0\n##.main_ad_adzone_7_ad_1\n##.main_ad_adzone_8_ad_0\n##.main_ad_adzone_8_ad_1\n##.main_ad_adzone_9_ad_0\n##.main_ad_adzone_9_ad_1\n##.main_ad_bg\n##.main_ad_bg_div\n##.main_ad_container\n##.main_adbox\n##.main_ads\n##.main_adv\n##.main_intro_ad\n##.main_right_ad\n##.main_wrapper_upper_ad_area\n##.mainadWrapper\n##.mainadbox\n##.mantis-ad\n##.manual-ad\n##.mapAdvertising\n##.map_google_ad\n##.map_media_banner_ad\n##.mapped-ad\n##.marginadsthin\n##.market-ad\n##.market-ad-small\n##.marketing-ad\n##.marketplace-ad\n##.marketplaceAd\n##.marketplaceAdShell\n##.markplace-ads\n##.marquee-ad\n##.master_post_advert\n##.masthead-ad\n##.masthead-ad-control\n##.masthead-ads\n##.mastheadAds\n##.masthead_ad_banner\n##.masthead_ads_new\n##.masthead_topad\n##.matador_sidebar_ad_600\n##.mb-list-ad\n##.mcx-content-ad\n##.md-adv\n##.mdl-ad\n##.mdl-quigo\n##.medColModAd\n##.medRecContainer\n##.medRect\n##.med_ad_box\n##.media--ad\n##.media-ad-rect\n##.media-advert\n##.mediaAd\n##.mediaAdContainer\n##.mediaResult_sponsoredSearch\n##.media_ad\n##.medium-rectangle-ad\n##.medium-rectangle-advertisement\n##.mediumRectangleAd\n##.mediumRectangleAdvert\n##.medium_ad\n##.medium_rectangle_ad_container\n##.mediumad\n##.medo-ad-section\n##.medo-ad-wideskyscraper\n##.medrect-ad\n##.medrect-ad2\n##.medrectAd\n##.medrect_ad\n##.medrectadv4\n##.member-ads\n##.memberAdsContainer\n##.member_ad_banner\n##.meme_adwrap\n##.memrise_ad\n##.menu-ad\n##.menuAd\n##.menuAds-cage\n##.menuItemBannerAd\n##.menuad\n##.menueadimg\n##.merchantAdsBoxColRight\n##.messageBoardAd\n##.message_ads\n##.metaRedirectWrapperBottomAds\n##.metaRedirectWrapperTopAds\n##.meta_ad\n##.metaboxType-sponsor\n##.mf-ad300-container\n##.mgid-wrapper\n##.micro_ad\n##.mid-ad-wrapper\n##.mid-advert\n##.mid_4_ads\n##.mid_ad\n##.mid_article_ad_label\n##.mid_banner_ad\n##.mid_page_ad\n##.mid_page_ad_big\n##.mid_right_ads\n##.midad\n##.middle-ad\n##.middle-ads728\n##.middle-footer-ad\n##.middleAd\n##.middleAdLeft\n##.middleAdMid\n##.middleAdRight\n##.middleAds\n##.middle_AD\n##.middle_ad\n##.middle_ads\n##.middlead\n##.middleadouter\n##.midpost-ad\n##.min_navi_ad\n##.mini-ad\n##.miniHeaderAd\n##.mini_ads\n##.mini_ads_bottom\n##.mini_ads_right\n##.miniad\n##.miniads\n##.misc-ad\n##.misc-ad-label\n##.miscAd\n##.ml-adverts-sidebar-1\n##.ml-adverts-sidebar-2\n##.ml-adverts-sidebar-4\n##.ml-adverts-sidebar-bottom-1\n##.ml-adverts-sidebar-bottom-2\n##.ml-adverts-sidebar-bottom-3\n##.ml-adverts-sidebar-random\n##.mlaAd\n##.mm-ad-mpu\n##.mm-ad-sponsored\n##.mmc-ad\n##.mmc-ad-wrap-2\n##.mmcAd_Iframe\n##.mnopolarisAd\n##.mo_googlead\n##.mobile-ad\n##.mobileAdWrap\n##.mobileAdvertInStreamHighlightText\n##.mobileAppAd\n##.mobile_ad_container\n##.mobile_featuredad\n##.mobile_featuredad_article\n##.mod-ad\n##.mod-ad-1\n##.mod-ad-2\n##.mod-ad-box\n##.mod-ad-lrec\n##.mod-ad-n\n##.mod-adblock\n##.mod-adcpc\n##.mod-adopenx\n##.mod-ads\n##.mod-google-ads\n##.mod-horizontal-ad\n##.mod-sponsored-links\n##.mod-trbad\n##.mod-tss-ads-wrapper\n##.mod-vertical-ad\n##.mod_ad\n##.mod_ad_imu\n##.mod_ad_top\n##.mod_admodule\n##.mod_ads\n##.mod_openads\n##.modal-ad\n##.module-ad\n##.module-ad-small\n##.module-ads\n##.module-advert\n##.module-advertisement\n##.module-image-ad\n##.module-rectangleads\n##.module-sponsored-ads\n##.moduleAd\n##.moduleAdSpot\n##.moduleAdvert\n##.moduleAdvertContent\n##.moduleBannerAd\n##.module_ad\n##.module_ad_disclaimer\n##.module_box_ad\n##.module_header_sponsored\n##.modulegad\n##.moduletable-adsponsor\n##.moduletable-advert\n##.moduletable-bannerAd6\n##.moduletable-centerad\n##.moduletable-googleads\n##.moduletable-rectangleads\n##.moduletable_ad-right\n##.moduletable_ad160x600_center\n##.moduletable_ad300x250\n##.moduletable_adtop\n##.moduletable_advertisement\n##.moduletable_top_ad\n##.moduletableadvert\n##.moduletableexclusive-ads\n##.moduletablesquaread\n##.moduletabletowerad\n##.mom-ad\n##.moneyball-ad\n##.monsterad\n##.moreAdBlock\n##.mos-ad\n##.mosaicAd\n##.mostpop_sponsored_ad\n##.motherboard-ad\n##.mp-ad\n##.mpu-ad\n##.mpu-ad-con\n##.mpu-ad-top\n##.mpu-advert\n##.mpu-c\n##.mpu-container-blank\n##.mpu-footer\n##.mpu-fp\n##.mpu-holder\n##.mpu-leaderboard\n##.mpu-left\n##.mpu-mediatv\n##.mpu-right\n##.mpu-title\n##.mpu-top-left\n##.mpu-top-left-banner\n##.mpu-top-right\n##.mpu-unit\n##.mpu-wrapper\n##.mpu01\n##.mpu250\n##.mpu600\n##.mpuAd\n##.mpuAdArea\n##.mpuAdSlot\n##.mpuAdvert\n##.mpuArea\n##.mpuBox\n##.mpuContainer\n##.mpuMiddle\n##.mpuTextAd\n##.mpu_Ad\n##.mpu_ad\n##.mpu_advert\n##.mpu_advertisement_border\n##.mpu_container\n##.mpu_gold\n##.mpu_holder\n##.mpu_placeholder\n##.mpu_platinum\n##.mpu_side\n##.mpu_text_ad\n##.mpuad\n##.mpuads\n##.mpuholderportalpage\n##.mrec_advert\n##.ms-ad-superbanner\n##.ms-ads-link\n##.ms_header_ad\n##.msat-adspace\n##.msfg-shopping-mpu\n##.msnChannelAd\n##.msn_ad_wrapper\n##.mt-ad-container\n##.mt-header-ads\n##.mtv-adChoicesLogo\n##.mtv-adv\n##.multiadwrapper\n##.mvAd\n##.mvAdHdr\n##.mvp_block_type_ad_module\n##.mvw_onPageAd1\n##.mwaads\n##.mxl_ad_inText_250\n##.my-ad250x300\n##.my-ads\n##.myAds\n##.myAdsGroup\n##.mypicadsarea\n##.myplate_ad\n##.nSponsoredLcContent\n##.nSponsoredLcTopic\n##.n_ad\n##.naMediaAd\n##.nadvt300\n##.narrow_ad_unit\n##.narrow_ads\n##.native-ad\n##.native-ad-link\n##.native-ad-promoted-provider\n##.nature-ad\n##.nav-ad\n##.nav-adWrapper\n##.navAdsBanner\n##.navBads\n##.nav_ad\n##.nav_textads\n##.navad\n##.navadbox\n##.navcommercial\n##.navi_ad300\n##.naviad\n##.nba300Ad\n##.nba728Ad\n##.nbaAdNotice\n##.nbaAroundAd2\n##.nbaT3Ad160\n##.nbaTVPodAd\n##.nbaTextAds\n##.nbaTwo130Ads\n##.nbc_ad_carousel_wrp\n##.ndmadkit\n##.netPost_ad1\n##.netPost_ad3\n##.netads\n##.netshelter-ad\n##.network-ad-two\n##.new-ad-box\n##.new-ads-scroller\n##.newHeaderAd\n##.newPex_forumads\n##.newTopAdContainer\n##.new_ad1\n##.newad\n##.newad1\n##.newadsky-wrapper\n##.news-ad\n##.news-place-ad-info\n##.newsAd\n##.news_ad_box\n##.news_article_ad_google\n##.news_footer_ad_container\n##.newsblock-ads\n##.newsletter_ad\n##.newsstackedAds\n##.newstream_ad\n##.newsviewAdBoxInNews\n##.newsvinemsn_adtype\n##.nexusad\n##.nf-adbox\n##.ninemsn-footer-ad\n##.ninth-box-ad\n##.nn-mpu\n##.no1postadvert\n##.noAdForLead\n##.noTitleAdBox\n##.node-ad\n##.node-content-ad\n##.node_ad_wrapper\n##.nomobilead\n##.nonsponserIABAdBottom\n##.normalAds\n##.normalad\n##.northad\n##.not-an-ad-header\n##.note-advertisement\n##.npAdGoogle\n##.npSponsorTextAd\n##.nrAds\n##.nr_partners\n##.nrelate .nr_partner\n##.nsAdRow\n##.nscr300Ad\n##.nscrMidAdBlock\n##.nscrT1AdBlock\n##.ntnlad\n##.nu2ad\n##.nuffnangad\n##.nw-ad\n##.nw-ad-468x60\n##.nw-ad-label\n##.nzs-ads\n##.oad-ad\n##.oas-ad\n##.oas-bottom-ads\n##.oas-leaderboard-ads\n##.oasInAds\n##.oas_ad\n##.oas_add\n##.oas_advertisement\n##.oas_sidebar_v7\n##.oasad\n##.oasads\n##.ob_ads_header\n##.ob_container .item-container-obpd\n##.ob_dual_right > .ob_ads_header ~ .odb_div\n##.oba_message\n##.ocp-sponsor\n##.odc-nav-ad\n##.ody-sponsor\n##.offer_sponsoredlinks\n##.oi_horz_ad_container\n##.oio-banner-zone\n##.oio-link-sidebar\n##.oio-openslots\n##.oio-zone-position\n##.old-advertorial-block\n##.omnitureAdImpression\n##.on-demand-ad\n##.on_single_ad_box\n##.one-ad\n##.oneColumnAd\n##.onethirdadholder\n##.opaAd\n##.openads\n##.openadstext_after\n##.openx\n##.openx-ad\n##.openx_10\n##.openx_11\n##.openx_15\n##.openx_16\n##.openx_17\n##.openx_3\n##.openx_4\n##.openx_ad\n##.openx_frame\n##.openxbuttons\n##.optional-ad\n##.os-advertisement\n##.osan-ads\n##.other-posts-ads\n##.other_adv2\n##.otj_adspot\n##.outbrain_ad_li\n##.outbrain_dual_ad_whats_class\n##.outbrain_ul_ad_top\n##.outer-ad-container\n##.outerAd_300x250_1\n##.outermainadtd1\n##.outgameadbox\n##.outside_ad\n##.ovAdLabel\n##.ovAdPromo\n##.ovAdSky\n##.ovAdartikel\n##.ov_spns\n##.ovadsenselabel\n##.overflow-ad\n##.overlay-ad-container\n##.overlay_ad\n##.ox-holder\n##.ox_ad\n##.ozadtop\n##.ozadtop3\n##.p2_right_ad\n##.p75_sidebar_ads\n##.p_topad\n##.pa_ads_label\n##.paddingBotAd\n##.pads2\n##.padvertlabel\n##.page-ad\n##.page-ad-container\n##.page-advert\n##.page-pencil-ad-container-bottom\n##.pageAds\n##.pageBottomGoogleAd\n##.pageGoogleAd\n##.pageGoogleAdFlat\n##.pageGoogleAdSubcontent\n##.pageGoogleAds\n##.pageGoogleAdsContainer\n##.pageLeaderAd\n##.pageSkinAds\n##.page_ad\n##.page_content_right_ad\n##.pagead\n##.pagebuilder_ad\n##.pageclwideadv\n##.pagenavindexcontentad\n##.pair_ads\n##.pane-ad-block\n##.pane-ad-manager-bottom-right-rail-circ\n##.pane-ad-manager-middle\n##.pane-ad-manager-middle1\n##.pane-ad-manager-right\n##.pane-ad-manager-right1\n##.pane-ad-manager-right2\n##.pane-ad-manager-right3\n##.pane-ad-manager-shot-business-circ\n##.pane-ad-manager-subscribe-now\n##.pane-ads\n##.pane-frontpage-ad-banner\n##.pane-frontpage-ad-banner-hk\n##.pane-openx\n##.pane-site-ads\n##.pane-sponsored-links\n##.pane-textlinkads-26\n##.pane-tw-ad-master-ad-300x250a\n##.pane-tw-ad-master-ad-300x600\n##.pane-tw-adjuggler-tw-adjuggler-half-page-ad\n##.pane-two-column-ads\n##.pane_ad_wide\n##.panel-ad\n##.panel-advert\n##.panel-body-adsense\n##.panel__column--vc-advert\n##.panel__row--with-vc-advert\n##.panel_ad\n##.paneladvert\n##.partial-ad\n##.partner-ad\n##.partner-ads-container\n##.partnerAd\n##.partnerAdTable\n##.partner_ads\n##.partnerad_container\n##.partnersTextLinks\n##.patronad\n##.pb-f-ad-flex\n##.pb-mod-ad-flex\n##.pb-mod-ad-leaderboard\n##.pc-ad\n##.pd-ads-mpu\n##.peg_ad\n##.pencil-ad\n##.pencil-ad-container\n##.pencil_ad\n##.performancingads_region\n##.pfAd\n##.pfimgAds\n##.pg-ad-block\n##.pgAdSection_Home_MasterSponsers\n##.photo-ad\n##.photoad\n##.photobox-adbox\n##.pics_detail_ad\n##.pics_footer_ad\n##.picto_ad\n##.pkgTemplateAdWrapper\n##.pla_ad\n##.placeholder-ad\n##.placeholderAd\n##.plainAd\n##.play-page-ads\n##.playAds1\n##.playAds2\n##.player-ads\n##.player-leaderboard-ad-wrapper\n##.player-under-ad\n##.playerAd\n##.player_ad\n##.player_ad2\n##.player_ad_box\n##.player_hover_ad\n##.player_page_ad_box\n##.plistaList > .itemLinkPET\n##.plista_inimg_box\n##.plista_widget_belowArticleRelaunch_item[data-type=\"pet\"]\n##.pm-ad\n##.pm-banner-ad\n##.pmad-in2\n##.pmg-sponsoredlinks\n##.pn-ad\n##.pn_dfpads\n##.pnp_ad\n##.pod-ad\n##.pod-ad-300\n##.pod-ad-box\n##.podRelatedAdLinksWidget\n##.podSponsoredLink\n##.poll_sponsor_ad\n##.pop-up-ad\n##.popadtext\n##.popunder-adv\n##.popup-ad\n##.popupAd\n##.popupAdOuter\n##.popupAdWrapper\n##.popup_ad\n##.portalCenterContentAdBottom\n##.portalCenterContentAdMiddle\n##.portalCenterContentAdTop\n##.portal_searchresultssponsoredlist\n##.portalcontentad\n##.pos_advert\n##.post-ad\n##.post-adsense-bottom\n##.post-advert\n##.post-advertisement\n##.post-googlead\n##.post-load-ad\n##.post-nativeadcarousel\n##.post-sponsored\n##.postAd\n##.postWideAd\n##.post__ad\n##.post__inarticle-ad-template\n##.post_ad\n##.post_ads\n##.post_advert\n##.post_seperator_ad\n##.post_sponsor_unit\n##.post_sponsored\n##.postad\n##.postads\n##.postadsense\n##.postbit_ad_block\n##.postbit_adbit_register\n##.postbit_adcode\n##.postbody_ads\n##.poster_ad\n##.postfooterad\n##.postgroup-ads\n##.postgroup-ads-middle\n##.power_by_sponsor\n##.ppp_interior_ad\n##.pq-ad\n##.pr-ad-tower\n##.pr-widget\n##.pre-title-ad\n##.prebodyads\n##.premium-ad\n##.premium-ads\n##.premium-adv\n##.premiumAdOverlay\n##.premiumAdOverlayClose\n##.premiumInHouseAd\n##.premium_ad_container\n##.premiumad\n##.preview-ad\n##.pricead-border\n##.primary-ad\n##.primary-advertisment\n##.primary_sidebar_ad\n##.printAds\n##.pro_ad_adzone\n##.pro_ad_system_ad_container\n##.pro_ad_zone\n##.prod_grid_ad\n##.product-ads\n##.product-inlist-ad\n##.profile_ad_bottom\n##.profile_ad_top\n##.promo-ad\n##.promo-box--ad\n##.promo-class-brand-getprice\n##.promoAd\n##.promoAds\n##.promoAdvertising\n##.promo_ad\n##.promo_border\n##.promoad\n##.promoboxAd\n##.promotionTextAd\n##.proof_ad\n##.ps-ad\n##.ps-ligatus_placeholder\n##.pub_300x250\n##.pub_300x250m\n##.pub_728x90\n##.publiboxright300\n##.publication-ad\n##.publicidad\n##.publicidadSuperior\n##.publicidad_horizontal\n##.publicidade-dotted\n##.puff-ad\n##.puff-advertorials\n##.pull_top_ad\n##.pulse360ad\n##.pulsir-ad\n##.puppyAd\n##.push-ad\n##.pushDownAd\n##.pushdown-ad\n##.pushdownAd\n##.pw_wb_ad_300x250\n##.pwgAdWidget\n##.pxz-ad-widget\n##.pxz-taskbar-anchor\n##.qa_ad_left\n##.qm-ad\n##.qm-ad-content\n##.qm-ad-content-news\n##.quick-tz-ad\n##.quicklinks-ad\n##.quigo\n##.quigo-ad\n##.quigoAdCenter\n##.quigoAdRight\n##.quigoMod\n##.quigoads\n##.quotead\n##.qzvAdDiv\n##.r_ad\n##.r_ad_1\n##.r_ad_box\n##.r_adbx_top\n##.r_ads\n##.r_col_add\n##.rad_container\n##.raff_ad\n##.rail-ad\n##.rail-article-sponsored\n##.rail_ad\n##.railad\n##.railadspace\n##.rbFooterSponsors\n##.rbRectAd\n##.rc_ad_300x100\n##.rc_ad_300x250\n##.rd_header_ads\n##.rdio-homepage-widget\n##.readerads\n##.readermodeAd\n##.realtor-ad\n##.recentAds\n##.recent_ad_holder\n##.rect-ad\n##.rect-ad-1\n##.rect_ad\n##.rect_ad_module\n##.rect_advert\n##.rectad\n##.rectadv\n##.rectangle-ad\n##.rectangle-ad-container\n##.rectangle-embed-ad\n##.rectangleAd\n##.rectangleAdContainer\n##.rectangle_ad\n##.rectanglead\n##.rectangleads\n##.redads_cont\n##.reedwan_adds300x250_widget\n##.referrerDetailAd\n##.refreshAds\n##.refreshable_ad\n##.region-ads\n##.region-dfp-ad-content-bottom\n##.region-dfp-ad-content-top\n##.region-dfp-ad-footer\n##.region-dfp-ad-header\n##.region-header-ad\n##.region-header-ads\n##.region-leader-ad-bottom\n##.region-leader-ad-top\n##.region-middle-ad\n##.region-regions-ad-top\n##.region-regions-ad-top-inner\n##.region-top-ad-position\n##.region-widget-ad-top-0\n##.regular_728_ad\n##.regularad\n##.reklam\n##.reklam-block\n##.reklam2\n##.reklam728\n##.reklama\n##.reklama-c\n##.reklama-vert\n##.reklama1\n##.reklame-right-col\n##.reklame-wrapper\n##.reklamka\n##.rel_ad_box\n##.related-ad\n##.related-ads\n##.related-al-ads\n##.related-al-content-w150-ads\n##.related-guide-adsense\n##.relatedAds\n##.relatedContentAd\n##.related_post_google_ad\n##.relatesearchad\n##.remads\n##.remnant_ad\n##.remove-ads\n##.removeAdsLink\n##.reportAdLink\n##.residentialads\n##.resourceImagetAd\n##.respAds\n##.responsive-ad\n##.result-ad\n##.result-sponsored\n##.resultAd\n##.result_ad\n##.result_item_ad-adsense\n##.resultad\n##.resultsAdsBlockCont\n##.results_sponsor_right\n##.rev_square_side_door\n##.review-ad\n##.reviewMidAdvertAlign\n##.reviewpage_ad2\n##.reviews-box-ad\n##.rf_circ_ad_460x205\n##.rght300x250\n##.rgt-300x250-ad\n##.rgt-ad\n##.rgt_ad\n##.rhads\n##.rhc-ad-bottom\n##.rhs-ad\n##.rhs-ads-panel\n##.rhs-advert-container\n##.rhs-advert-link\n##.rhs-advert-title\n##.rhs_ad_title\n##.rhsad\n##.rhsadvert\n##.ribbon-ad-matte\n##.right-ad\n##.right-ad-300x250\n##.right-ad-block\n##.right-ad-holder\n##.right-ad2\n##.right-ads\n##.right-ads2\n##.right-adsense\n##.right-advert\n##.right-col-ad\n##.right-column-ad\n##.right-navAdBox\n##.right-rail-ad\n##.right-rail-ad-banner\n##.right-rail-broker-ads\n##.right-side-ad\n##.right-side-ads\n##.right-sidebar-box-ad\n##.right-sidebar-box-ads\n##.right-square-ad-blocks\n##.right-takeover-ad\n##.right-takeover-ad-sticky\n##.right-top-ad\n##.rightAD\n##.rightAd\n##.rightAdBox\n##.rightAdColumn\n##.rightAdContainer\n##.rightAd_bottom_fmt\n##.rightAd_top_fmt\n##.rightAds_ie_fix\n##.rightAdvert\n##.rightAdverts\n##.rightBoxAd\n##.rightBoxMidAds\n##.rightColAd\n##.rightColAdBox\n##.rightColumnAd\n##.rightColumnAdd\n##.rightColumnAdsTop\n##.rightColumnRectAd\n##.rightHeaderAd\n##.rightRailAd\n##.rightRailMiddleAd\n##.rightSecAds\n##.rightSideBarAd\n##.rightSideSponsor\n##.rightTopAdWrapper\n##.right_ad\n##.right_ad_160\n##.right_ad_box\n##.right_ad_box1\n##.right_ad_common_block\n##.right_ad_innercont\n##.right_ad_text\n##.right_ad_top\n##.right_ad_unit\n##.right_ads\n##.right_ads_column\n##.right_adsense_box_2\n##.right_adv\n##.right_advert\n##.right_advertise_cnt\n##.right_advertisement\n##.right_block_advert\n##.right_box_ad\n##.right_box_ad_rotating_container\n##.right_col_ad\n##.right_col_ad_300_250\n##.right_column_ads\n##.right_content_ad\n##.right_content_ad_16\n##.right_google_ads\n##.right_hand_advert_column\n##.right_image_ad\n##.right_long_ad\n##.right_outside_ads\n##.right_picAd\n##.right_side-partyad\n##.right_side_ads\n##.right_side_box_ad\n##.rightad\n##.rightad250\n##.rightad_1\n##.rightad_2\n##.rightadbig\n##.rightadblock\n##.rightadbox1\n##.rightadd\n##.rightads\n##.rightadunit\n##.rightadv\n##.rightbigcolumn_ads\n##.rightbigcolumn_ads_nobackground\n##.rightbox_content_ads\n##.rightboxads\n##.rightcol-adbox\n##.rightcol-block-ads\n##.rightcol_boxad\n##.rightcol_div_openx2\n##.rightcoladvert\n##.rightcoltowerad\n##.rightmenu_ad\n##.rightnav_adsense\n##.rightpanelad\n##.rightrail-ad-block\n##.rightrail_ads\n##.rightsideAd\n##.ringtone-ad\n##.risingstar-ad\n##.risingstar-ad-inner\n##.riverSponsor\n##.rmx-ad\n##.rnav_ad\n##.rngtAd\n##.rockmelt-ad\n##.rockmeltAdWrapper\n##.rolloverad\n##.rot_ads\n##.rotating-ad\n##.rotating-ads\n##.rotatingAdvertisement\n##.rotatingadsection\n##.rotator_ad_overlay\n##.round_box_advert\n##.roundedCornersAd\n##.roundingrayboxads\n##.rowad\n##.rowgoogleads\n##.rr-300x250-ad\n##.rr-300x600-ad\n##.rr_ads\n##.rr_skyad\n##.rs_ad_bot\n##.rs_ad_top\n##.rside_adbox\n##.rtAdFtr\n##.rtSideHomeAd\n##.rt_ad\n##.rt_ad1_300x90\n##.rt_ad_300x250\n##.rt_ad_call\n##.rt_advert_name\n##.rt_el_advert\n##.rtd_ads_text\n##.rtmad\n##.rtmm_right_ad\n##.runner-ad\n##.s-ad\n##.s-ads\n##.s2k_ad\n##.sType-ad\n##.s_ad\n##.s_ad2\n##.s_ad_160x600\n##.s_ad_300x250\n##.s_ads\n##.s_ads_label\n##.s_sponsored_ads\n##.sa_AdAnnouncement\n##.sadvert\n##.sam-ad\n##.sam_ad\n##.savvyad_unit\n##.say-center-contentad\n##.sb-ad\n##.sb-ad-sq-bg\n##.sb-ad2\n##.sb-ad3\n##.sb-ads-here\n##.sbAd\n##.sbAdUnitContainer\n##.sbTopadWrapper\n##.sb_ad\n##.sb_ad_holder\n##.sb_adsN\n##.sb_adsNv2\n##.sb_adsW\n##.sb_adsWv2\n##.sc-ad\n##.sc_ad\n##.sc_iframe_ad\n##.scad\n##.scanAd\n##.scc_advert\n##.schedule_ad\n##.sci-ad-main\n##.sci-ad-sub\n##.scoopads\n##.scraper_ad_unit\n##.script-ad\n##.scroll-ads\n##.scrolling-ads\n##.search-ad\n##.search-advertisement\n##.search-results-ad\n##.search-sponsor\n##.search-sponsored\n##.searchAd\n##.searchAdTop\n##.searchAds\n##.searchCenterBottomAds\n##.searchCenterTopAds\n##.searchResultAd\n##.searchRightBottomAds\n##.searchRightMiddleAds\n##.searchSponsorItem\n##.searchSponsoredResultsBox\n##.searchSponsoredResultsList\n##.search_ad_box\n##.search_column_results_sponsored\n##.search_inline_web_ad\n##.search_results_ad\n##.search_results_sponsored_top\n##.searchad\n##.searchads\n##.sec-ad\n##.secondary-advertisment\n##.secondaryAdModule\n##.secondary_ad\n##.section-ad\n##.section-ad-related\n##.section-ad-wrapper\n##.section-ad2\n##.section-adbox-bottom\n##.section-adbox1\n##.section-ads\n##.section-adtag\n##.section-advert-banner\n##.section-aside-ad\n##.section_ad\n##.section_ad_left\n##.section_mpu_wrapper\n##.section_mpu_wrapper_wrapper\n##.selection-grid-advert\n##.selfServeAds\n##.seoTopAds\n##.sepContentAd\n##.series-ad\n##.serp_sponsored\n##.servedAdlabel\n##.servsponserLinks\n##.set_ad\n##.sfsp_adadvert\n##.sgAd\n##.shadvertisment\n##.shareToolsItemAd\n##.shift-ad\n##.shoppingGoogleAdSense\n##.shortads\n##.shortadvertisement\n##.showAd\n##.showAdContainer\n##.showAd_No\n##.showAd_Yes\n##.showad_box\n##.showcaseAd\n##.showcasead\n##.si-adRgt\n##.sidbaread\n##.side-ad\n##.side-ad-120-bottom\n##.side-ad-120-middle\n##.side-ad-120-top\n##.side-ad-160-bottom\n##.side-ad-160-middle\n##.side-ad-160-top\n##.side-ad-300\n##.side-ad-300-bottom\n##.side-ad-300-middle\n##.side-ad-300-top\n##.side-ad-big\n##.side-ad-blocks\n##.side-ad-container\n##.side-ads\n##.side-ads-block\n##.side-ads-wide\n##.side-ads300\n##.side-bar-ad-position1\n##.side-bar-ad-position2\n##.side-sky-banner-160\n##.side-video-ads-wrapper\n##.sideAd\n##.sideAdTall\n##.sideAdWide\n##.sideBannerAdsLarge\n##.sideBannerAdsSmall\n##.sideBannerAdsXLarge\n##.sideBarAd\n##.sideBarCubeAd\n##.sideBlockAd\n##.sideBoxAd\n##.sideBoxM1ad\n##.sideBoxMiddleAd\n##.sideBySideAds\n##.sideToSideAd\n##.side_300_ad\n##.side_ad\n##.side_ad2\n##.side_ad300\n##.side_ad_1\n##.side_ad_2\n##.side_ad_3\n##.side_ads\n##.side_adsense\n##.side_adv\n##.side_adv_01\n##.side_adv_left\n##.side_adv_right\n##.sidead\n##.sidead_150\n##.sidead_300\n##.sidead_300250_ht\n##.sidead_550125\n##.sideads\n##.sideads_l\n##.sideadsbox\n##.sideadtable\n##.sideadvert\n##.sidebar-350ad\n##.sidebar-ad\n##.sidebar-ad-300\n##.sidebar-ad-300x250-cont\n##.sidebar-ad-a\n##.sidebar-ad-b\n##.sidebar-ad-c\n##.sidebar-ad-cont\n##.sidebar-ad-container\n##.sidebar-ad-container-1\n##.sidebar-ad-container-2\n##.sidebar-ad-container-3\n##.sidebar-ad-rect\n##.sidebar-ad-slot\n##.sidebar-adbox\n##.sidebar-ads\n##.sidebar-advertisement\n##.sidebar-atf-ad-wrapper\n##.sidebar-big-ad\n##.sidebar-block-adsense\n##.sidebar-box-ad\n##.sidebar-box-ads\n##.sidebar-content-ad\n##.sidebar-header-ads\n##.sidebar-paid-ad-label\n##.sidebar-skyscraper-ad\n##.sidebar-sponsors\n##.sidebar-square-ad\n##.sidebar-text-ad\n##.sidebar-top-ad\n##.sidebar300adblock\n##.sidebarAd\n##.sidebarAdBlock\n##.sidebarAdNotice\n##.sidebarAdUnit\n##.sidebarAds300px\n##.sidebarAdvert\n##.sidebarCloseAd\n##.sidebarNewsletterAd\n##.sidebar_ADBOX\n##.sidebar_ad\n##.sidebar_ad_300\n##.sidebar_ad_300_250\n##.sidebar_ad_580\n##.sidebar_ad_container\n##.sidebar_ad_container_div\n##.sidebar_ad_holder\n##.sidebar_ad_leaderboard\n##.sidebar_ad_module\n##.sidebar_ads\n##.sidebar_ads-300x250\n##.sidebar_ads_336\n##.sidebar_ads_left\n##.sidebar_ads_right\n##.sidebar_ads_title\n##.sidebar_adsense\n##.sidebar_advertising\n##.sidebar_box_ad\n##.sidebar_right_ad\n##.sidebar_skyscraper_ad\n##.sidebar_small_ad\n##.sidebarad\n##.sidebarad160\n##.sidebarad_bottom\n##.sidebaradbox\n##.sidebaradcontent\n##.sidebarads\n##.sidebaradsense\n##.sidebarboxad\n##.sideheadnarrowad\n##.sideheadsponsorsad\n##.sidelist_ad\n##.sideskyad\n##.simple_ads_manager_block_widget\n##.simple_ads_manager_widget\n##.simple_ads_manager_zone_widget\n##.simple_adsense_widget\n##.simplead-container\n##.simpleads-item\n##.single-ad\n##.single-ad-anchor\n##.single-ad-wrap\n##.single-ads\n##.single-google-ad\n##.single-post-ad\n##.single-post-ads-750x90\n##.single-top-ad\n##.singleAd\n##.singleAdBox\n##.singleAdsContainer\n##.single_ad\n##.single_advert\n##.single_bottom_ad\n##.single_fm_ad_bottom\n##.single_top_ad\n##.singlead\n##.singleads\n##.singleadstopcstm2\n##.singlepageleftad\n##.singlepostad\n##.singlepostadsense\n##.singpagead\n##.site-ad-block\n##.site-ads\n##.site-footer__ad-area\n##.site-head-ads\n##.site-top-ad\n##.siteWideAd\n##.site_ad\n##.site_ad_120_600\n##.site_ad_300x250\n##.site_sponsers\n##.sitesponsor\n##.sitesprite_ads\n##.skinAd\n##.skin_ad_638\n##.skinad-l\n##.skinad-r\n##.sky-ad\n##.skyAd\n##.skyAdd\n##.skyAdvert\n##.skyAdvert2\n##.skyCraper_bannerLong\n##.skyCraper_bannerShort\n##.sky_ad\n##.sky_ad_top\n##.sky_scraper_ad\n##.skyjobsadtext\n##.skyscraper-ad\n##.skyscraperAd\n##.skyscraper_ad\n##.skyscraper_bannerAdHome\n##.skyscraper_banner_ad\n##.sl-art-ad-midflex\n##.sl-header-ad\n##.sl_admarker\n##.sleekadbubble\n##.slide-ad\n##.slideAd\n##.slide_ad\n##.sliderad\n##.slideshow-ad\n##.slideshow-ad-wrapper\n##.slideshow-ads\n##.slideshow-advertisement-note\n##.slideshowAd\n##.slideshow_ad_300\n##.slideshow_ad_note\n##.slot_728_ad\n##.slot_integrated_ad\n##.slpBigSlimAdUnit\n##.slpSquareAdUnit\n##.sm-ad\n##.smAdText_r\n##.sm_ad\n##.small-ad-header\n##.small-ads\n##.smallAd\n##.smallAdContainer\n##.smallAdvertisments\n##.smallSkyAd1\n##.smallSkyAd2\n##.small_ad\n##.small_ad_bg\n##.small_ads\n##.smallad\n##.smallad-left\n##.smalladblock\n##.smallads\n##.smalladscontainer\n##.smalladword\n##.smallbutton-adverts\n##.smallsideadpane\n##.smallsponsorad\n##.smart_ads_bom_title\n##.sml-item-ad\n##.sn-ad-300x250\n##.snarcy-ad\n##.snoadnetwork\n##.social-ad\n##.softronics-ad\n##.southad\n##.sp-ad\n##.spLinks\n##.spaceAdds\n##.specialAd175x90\n##.specialAdsContent\n##.specialAdsLabel\n##.specialAdsLink\n##.specialAdvertising\n##.special_ad_section\n##.specials_ads\n##.speedyads\n##.sphereAdContainer\n##.spl-ads\n##.spl_ad\n##.spl_ad2\n##.spl_ad_plus\n##.splitAd\n##.splitAdResultsPane\n##.splitter_ad\n##.splitter_ad_holder\n##.spn_links_box\n##.spnsrAdvtBlk\n##.spnsrCntnr\n##.spon-links\n##.spon125\n##.spon_link\n##.sponadbox\n##.sponlinkbox\n##.spons-link\n##.spons-wrap\n##.sponsBox\n##.sponsLinks\n##.sponsWrap\n##.spons_link_header\n##.spons_links\n##.sponser-link\n##.sponserIABAdBottom\n##.sponserLink\n##.sponsersads\n##.sponsertop\n##.sponslink\n##.sponsor-728\n##.sponsor-ad\n##.sponsor-ad-wrapper\n##.sponsor-area\n##.sponsor-block\n##.sponsor-bottom\n##.sponsor-box\n##.sponsor-btns\n##.sponsor-left\n##.sponsor-link\n##.sponsor-links\n##.sponsor-module-target\n##.sponsor-post\n##.sponsor-promo\n##.sponsor-right\n##.sponsor-services\n##.sponsor-spot\n##.sponsor-text\n##.sponsor-text-container\n##.sponsor120x600\n##.sponsor728x90\n##.sponsorArea\n##.sponsorBannerWrapper\n##.sponsorBlock\n##.sponsorBottom\n##.sponsorBox\n##.sponsorBox_right_rdr\n##.sponsorLabel\n##.sponsorLink\n##.sponsorLinks\n##.sponsorMaskhead\n##.sponsorPanel\n##.sponsorPost\n##.sponsorPostWrap\n##.sponsorPuffsHomepage\n##.sponsorStrip\n##.sponsorText\n##.sponsorTitle\n##.sponsorTxt\n##.sponsor_ad\n##.sponsor_ad1\n##.sponsor_ad2\n##.sponsor_ad3\n##.sponsor_ad_area\n##.sponsor_advert_link\n##.sponsor_area\n##.sponsor_bar\n##.sponsor_block\n##.sponsor_button_ad\n##.sponsor_columns\n##.sponsor_div\n##.sponsor_div_title\n##.sponsor_footer\n##.sponsor_image\n##.sponsor_label\n##.sponsor_line\n##.sponsor_links\n##.sponsor_logo\n##.sponsor_placement\n##.sponsor_units\n##.sponsorad\n##.sponsoradlabel\n##.sponsorads\n##.sponsoradtitle\n##.sponsored-ad\n##.sponsored-ad-label\n##.sponsored-ad-ob\n##.sponsored-ads\n##.sponsored-b\n##.sponsored-chunk\n##.sponsored-container-bottom\n##.sponsored-default\n##.sponsored-display-ad\n##.sponsored-editorial\n##.sponsored-features\n##.sponsored-header\n##.sponsored-headshop\n##.sponsored-link\n##.sponsored-links\n##.sponsored-links-alt-b\n##.sponsored-links-col\n##.sponsored-links-holder\n##.sponsored-links-right\n##.sponsored-links-tbl\n##.sponsored-offers-box\n##.sponsored-post\n##.sponsored-post_ad\n##.sponsored-result\n##.sponsored-result-row-2\n##.sponsored-results\n##.sponsored-right\n##.sponsored-right-border\n##.sponsored-rule\n##.sponsored-slot\n##.sponsored-tag\n##.sponsored-text\n##.sponsored-title\n##.sponsored-top\n##.sponsoredAd\n##.sponsoredAdLine\n##.sponsoredAds\n##.sponsoredBar\n##.sponsoredBottom\n##.sponsoredBox\n##.sponsoredEntry\n##.sponsoredFeature\n##.sponsoredInfo\n##.sponsoredInner\n##.sponsoredLabel\n##.sponsoredLeft\n##.sponsoredLink\n##.sponsoredLinks\n##.sponsoredLinks2\n##.sponsoredLinksBox\n##.sponsoredLinksGadget\n##.sponsoredLinksHead\n##.sponsoredLinksHeader\n##.sponsoredName\n##.sponsoredProduct\n##.sponsoredResults\n##.sponsoredSearch\n##.sponsoredShowcasePanel\n##.sponsoredSideInner\n##.sponsoredStats\n##.sponsoredTop\n##.sponsored_ad\n##.sponsored_ads\n##.sponsored_box\n##.sponsored_box_search\n##.sponsored_by\n##.sponsored_content\n##.sponsored_glinks\n##.sponsored_link\n##.sponsored_links\n##.sponsored_links2\n##.sponsored_links_box\n##.sponsored_links_container\n##.sponsored_links_section\n##.sponsored_links_title_container\n##.sponsored_links_title_container_top\n##.sponsored_links_top\n##.sponsored_result\n##.sponsored_results\n##.sponsored_ss\n##.sponsored_text\n##.sponsored_well\n##.sponsoredby\n##.sponsoredibbox\n##.sponsoredlink\n##.sponsoredlinkHed\n##.sponsoredlinks\n##.sponsoredlinks-article\n##.sponsoredlinkscontainer\n##.sponsoredresults\n##.sponsoredtabl\n##.sponsoredtextlink_container_ovt\n##.sponsorheader\n##.sponsoring_link\n##.sponsoringbanner\n##.sponsorlink\n##.sponsorlink2\n##.sponsormsg\n##.sponsors-box\n##.sponsors-footer\n##.sponsors-module\n##.sponsorsBanners\n##.sponsors_300x250\n##.sponsors_box_container\n##.sponsors_fieldset\n##.sponsors_links\n##.sponsors_spacer\n##.sponsorsbig\n##.sponsorship-box\n##.sponsorship-container\n##.sponsorshipContainer\n##.sponsorship_ad\n##.sponsorshipbox\n##.sponsorwrapper\n##.sport-mpu-box\n##.spot-ad\n##.spotlight-ad\n##.spotlight-ad-left\n##.spotlightAd\n##.sprite-ad_label_vert\n##.sqAd2\n##.sq_ad\n##.square-ad\n##.square-ad--latest-video\n##.square-ad--neg-margin\n##.square-ad-1\n##.square-ad-container\n##.square-advt\n##.square-sidebar-ad\n##.square-sponsorship\n##.squareAd\n##.squareAdWrap\n##.squareAdd\n##.squareAddtwo\n##.squareAds\n##.square_ad\n##.square_ads\n##.square_advert_inner\n##.square_banner_ad\n##.square_button_ads\n##.squaread\n##.squaread-container\n##.squareads\n##.squared_ad\n##.sr-adsense\n##.sr-in-feed-ads\n##.sr-side-ad-block\n##.sr_google_ad\n##.src_parts_gen_ad\n##.ss-ad-banner\n##.ss-ad-mpu\n##.ss-ad-tower\n##.ss-ad_mrec\n##.stProAd\n##.stack-l-ad-center\n##.stackedads1\n##.stackedads2\n##.stand-alone-adzone\n##.standalone_txt_ad\n##.standard-ad\n##.star-ad\n##.start__advertising_container\n##.start__newest__big_game_container_body_games_advertising\n##.start_overview_adv_container\n##.statTop_adsense\n##.staticAd\n##.ste-ad\n##.sticky-ad\n##.sticky-ad-wrapper\n##.stickyAdLink\n##.sticky_ad_wrapper\n##.stmAdHeightWidget\n##.stock-ticker-ad-tag\n##.stock_ad\n##.stocks-ad-tag\n##.store-ads\n##.story-ad\n##.story-page-embedded-ad\n##.storyAdvert\n##.storyInlineAdBlock\n##.story_AD\n##.story_ad_div\n##.story_ads_right_spl\n##.story_ads_right_spl_budget\n##.story_body_advert\n##.story_right_adv\n##.storyad\n##.storyad300\n##.stpro_ads\n##.str-top-ad\n##.stream-ad\n##.streamAd\n##.strip-ad\n##.stripad\n##.sub-feature-ad\n##.sub-header-ad\n##.subAdBannerArea\n##.subAdBannerHeader\n##.subNavAd\n##.sub_cont_AD01\n##.sub_cont_AD02\n##.sub_cont_AD04\n##.sub_cont_AD06\n##.sub_cont_AD07\n##.subad\n##.subadimg\n##.subcontent-ad\n##.subheadAdPanel\n##.subheaderAdlogo\n##.subheader_adsense\n##.subjects_ad\n##.submenu_ad\n##.subtitle-ad-container\n##.sugarad\n##.suit-ad-inject\n##.super-ad\n##.superLeaderOverallAdArea\n##.supercommentad_left\n##.supercommentad_right\n##.superscroll-ad\n##.supp-ads\n##.support-adv\n##.supportAdItem\n##.support_ad\n##.surveyad\n##.syAd\n##.syHdrBnrAd\n##.sykscraper-ad\n##.szoAdBox\n##.szoSponsoredPost\n##.t10ad\n##.tAd\n##.tabAd\n##.tabAds\n##.tab_ad\n##.tab_ad_area\n##.table-ad\n##.table_ad_bg\n##.tablebordersponsor\n##.taboola_advertising\n##.tadsanzeige\n##.tadsbanner\n##.tadselement\n##.tallAdvert\n##.tallad\n##.tangential-ad\n##.tblAds\n##.tblTopAds\n##.tbl_ad\n##.tbox_ad\n##.tckr_adbrace\n##.td-Adholder\n##.td-TrafficWeatherWidgetAdGreyBrd\n##.td-a-rec-id-custom_ad_1\n##.td-header-ad-wrap\n##.td-header-sp-ads\n##.tdAdHeader\n##.tdBannerAd\n##.tdFeaturedAdvertisers\n##.td_ad\n##.td_footer_ads\n##.td_left_widget_ad\n##.td_reklama_bottom\n##.td_reklama_top\n##.td_spotlight_ads\n##.td_topads\n##.tdad125\n##.teaser-ad\n##.teaser-sponsor\n##.teaserAdContainer\n##.teaserAdHeadline\n##.teaser_adtiles\n##.teaser_advert_content\n##.text-ad\n##.text-ad-300\n##.text-ad-links\n##.text-ad-links2\n##.text-ad-top\n##.text-ads\n##.text-advertisement\n##.text-g-advertisement\n##.text-g-group-short-rec-ad\n##.text-g-net-group-news-half-page-ad-300x600-or-300x250\n##.text-g-net-grp-google-ads-article-page\n##.text-g-nn-web-group-ad-halfpage\n##.text-g-sponsored-ads\n##.text-g-sponsored-links\n##.textAd\n##.textAd3\n##.textAdBG\n##.textAdBlock\n##.textAdBlwPgnGrey\n##.textAdBox\n##.textAdMinimum\n##.textAds\n##.textLinkAd\n##.textSponsor\n##.text_ad\n##.text_ad_description\n##.text_ad_title\n##.text_ad_website\n##.text_ads\n##.text_ads_2\n##.textad\n##.textadContainer\n##.textad_headline\n##.textadbox\n##.textadheadline\n##.textadlink\n##.textads\n##.textads_left\n##.textads_right\n##.textadscontainer\n##.textadsds\n##.textadsfoot\n##.textadtext\n##.textadtxt\n##.textadtxt2\n##.textbanner-ad\n##.textlink-ads\n##.textlinkads\n##.tf_page_ad_search\n##.tfagAd\n##.theAdvert\n##.the_list_ad_zone\n##.theleftad\n##.themeblvd-ad-square-buttons\n##.themidad\n##.third-box-ad\n##.third-party-ad\n##.thirdAd160Cont\n##.thirdAdBot\n##.thirdAdHead\n##.thirdage_ads_300x250\n##.thirdage_ads_728x90\n##.thisIsAd\n##.thisIsAnAd\n##.this_is_an_ad\n##.thisisad\n##.thread-ad\n##.thread-ad-holder\n##.threadAdsHeadlineData\n##.three-ads\n##.tibu_ad\n##.ticket-ad\n##.tile-ad\n##.tileAdContainer\n##.tileAdWrap\n##.tileAds\n##.tile_AdBanner\n##.tile_ad_container\n##.tips_advertisement\n##.title-ad\n##.title_adbig\n##.tj_ad_box\n##.tj_ad_box_top\n##.tl-ad\n##.tl-ad-dfp\n##.tl-ad-display-3\n##.tl-ad-render\n##.tm_ad200_widget\n##.tm_topads_468\n##.tm_widget_ad200px\n##.tmg-ad\n##.tmg-ad-300x250\n##.tmg-ad-mpu\n##.tmnAdsenseContainer\n##.tmz-dart-ad\n##.tncms-region-ads\n##.toolad\n##.toolbar-ad\n##.toolsAd\n##.toolssponsor-ads\n##.top-300-ad\n##.top-ad\n##.top-ad-area\n##.top-ad-block\n##.top-ad-center\n##.top-ad-container\n##.top-ad-content\n##.top-ad-horizontal\n##.top-ad-inside\n##.top-ad-right\n##.top-ad-sidebar\n##.top-ad-space\n##.top-ad-unit\n##.top-ad-wrapper\n##.top-adbox\n##.top-ads\n##.top-ads-wrapper\n##.top-adsense\n##.top-adsense-banner\n##.top-adspace\n##.top-adv\n##.top-adverbox\n##.top-advert\n##.top-advertisement\n##.top-banner-468\n##.top-banner-ad\n##.top-banner-ad-container\n##.top-banner-ad-wrapper\n##.top-banner-add\n##.top-bar-ad-related\n##.top-box-right-ad\n##.top-content-adplace\n##.top-header-ad\n##.top-horiz-ad\n##.top-item-ad\n##.top-left-nav-ad\n##.top-menu-ads\n##.top-outer-ad-container\n##.top-primary-sponsored\n##.top-right-ad\n##.top-right-advert\n##.top-rightadvtsment\n##.top-sidebar-adbox\n##.top-treehouse-ad\n##.top-wide-ad-container\n##.top300ad\n##.topAD\n##.topAd728x90\n##.topAdBanner\n##.topAdCenter\n##.topAdContainer\n##.topAdLeft\n##.topAdRight\n##.topAdWrap\n##.topAdWrapper\n##.topAdd\n##.topAds\n##.topAdvBox\n##.topAdvert\n##.topAdvertisement\n##.topAdvertistemt\n##.topAdverts\n##.topArticleAds\n##.topBannerAd\n##.topBannerAdSectionR\n##.topBarAd\n##.topBoxAdvertisement\n##.topLeaderboardAd\n##.topNavRMAd\n##.topPC-adWrap\n##.topPagination_ad\n##.topRightAd\n##.top_Ad\n##.top_ad\n##.top_ad1\n##.top_ad_336x280\n##.top_ad_728\n##.top_ad_728_90\n##.top_ad_banner\n##.top_ad_big\n##.top_ad_disclaimer\n##.top_ad_div\n##.top_ad_holder\n##.top_ad_inner\n##.top_ad_label\n##.top_ad_list\n##.top_ad_long\n##.top_ad_post\n##.top_ad_seperate\n##.top_ad_short\n##.top_ad_wrap\n##.top_ad_wrapper\n##.top_adbox1\n##.top_adbox2\n##.top_adh\n##.top_ads\n##.top_adsense\n##.top_adv\n##.top_adv_content\n##.top_advert\n##.top_advertisement\n##.top_advertising_lb\n##.top_advertizing_cnt\n##.top_bar_ad\n##.top_big_ads\n##.top_container_ad\n##.top_corner_ad\n##.top_header_ad\n##.top_header_ad_inner\n##.top_right_ad\n##.top_rightad\n##.top_sponsor\n##.topad-area\n##.topad-bar\n##.topad-bg\n##.topad2\n##.topadbar\n##.topadblock\n##.topadbox\n##.topads\n##.topads-spacer\n##.topadspace\n##.topadspot\n##.topadtara\n##.topadvertisementsegment\n##.topbar-ad-unit\n##.topboardads\n##.topcontentadvertisement\n##.topfootad\n##.topicDetailsAdRight\n##.topic_inad\n##.topnavSponsor\n##.topratedBoxAD\n##.topsidebarad\n##.topstoriesad\n##.toptenAdBoxA\n##.tourFeatureAd\n##.tower-ad\n##.tower-ad-abs\n##.tower-ads-container\n##.towerAd\n##.towerAdLeft\n##.towerAds\n##.tower_ad\n##.tower_ad_disclaimer\n##.towerad\n##.tp-ad-label\n##.tp_ads\n##.tr-ad-adtech-placement\n##.tr-ad-inset\n##.trafficAdSpot\n##.trb_gptAd\n##.trb_header_adBanner_large\n##.trb_masthead_adBanner\n##.trb_pageAdHolder\n##.trc-content-sponsored\n##.trc-content-sponsoredUB\n##.treeAdBlockWithBanner_right\n##.tribal-ad\n##.trip_ad_center\n##.trueads\n##.ts-ad_unit_bigbox\n##.ts-banner_ad\n##.ts-featured_ad\n##.tsmAd\n##.ttlAdsensel\n##.tto-sponsored-element\n##.tucadtext\n##.tvs-mpu\n##.two-col-ad-inArticle\n##.twoColumnAd\n##.two_ads\n##.twoadcoll\n##.twoadcolr\n##.tx_smartadserver_pi1\n##.txt-ads\n##.txtAd\n##.txtAd5\n##.txtAds\n##.txt_ad\n##.txt_ads\n##.txtad_area\n##.txtadvertise\n##.tynt-ad-container\n##.type_ads_default\n##.type_adscontainer\n##.type_miniad\n##.type_promoads\n##.tz_ad300_widget\n##.tz_ad_widget\n##.uds-ad\n##.uds-ads\n##.ui-ad\n##.ukAds\n##.ukn-banner-ads\n##.ukn-inline-advert\n##.unSponsored\n##.under-player-ads\n##.under_ads\n##.undertimyads\n##.uniAdBox\n##.uniAds\n##.uniblue-text-ad\n##.unit-ad\n##.universalboxADVBOX01\n##.universalboxADVBOX03\n##.universalboxADVBOX04a\n##.unspoken-adplace\n##.upcloo-adv-content\n##.upper-ad-space\n##.us-advertisement\n##.us-txt-ad\n##.useful_banner_manager_rotation_widget\n##.useful_banner_manager_widget\n##.usenext\n##.v5rc_336x280ad\n##.vAd_160x600\n##.vadvert\n##.vbox-verticalad\n##.ve2_post_adsense\n##.vert-ad\n##.vert-ad-ttl\n##.vert-ads\n##.vert-adsBlock\n##.vertad\n##.vertical-adsense\n##.verticalAd\n##.verticalAdText\n##.vertical_ad\n##.vertical_ads\n##.verticalad\n##.verysmallads\n##.vidadtext\n##.video-about-ad\n##.video-ad-short\n##.video-ads\n##.video-adtech-mpu-ad\n##.video-innerAd-320x250\n##.videoAd-wrapper\n##.videoBoxAd\n##.video_ad\n##.video_ads\n##.video_ads_overdiv\n##.video_ads_overdiv2\n##.video_advertisement_box\n##.video_detail_box_ads\n##.video_top_ad\n##.view-adverts\n##.view-image-ads\n##.view-promo-mpu-right\n##.view-site-ads\n##.view-video-advertisements\n##.viewContentItemAd\n##.view_ad\n##.view_ads_advertisements\n##.view_ads_bottom_bg\n##.view_ads_bottom_bg_middle\n##.view_ads_content_bg\n##.view_ads_top_bg\n##.view_ads_top_bg_middle\n##.view_rig_ad\n##.views-field-field-ad\n##.views-field-field-adbox-1\n##.views-field-field-adbox-2\n##.virgin-mpu\n##.vl-ad-item\n##.vod_ad\n##.vs-advert-300x250\n##.vs_dfp_standard_postbit_ad\n##.vsw-ads\n##.vswAdContainer\n##.vt_h1_ad\n##.vxp_ad300x250\n##.w-ad-box\n##.wAdvert\n##.w_AdExternal\n##.wa_adsbottom\n##.wahAd\n##.wahAdRight\n##.wallAd\n##.wall_ad\n##.wall_ad_hd\n##.wallad\n##.wantads\n##.waterfall-ad-anchor\n##.wazi-ad-link\n##.wd-adunit\n##.wdca_ad_item\n##.wdca_custom_ad\n##.wdp_ad\n##.wdp_adDiv\n##.wdt_ads\n##.weather-ad-wrapper\n##.weather-sponsor-ad\n##.weather-sponsorDiv\n##.weatherAdSpot\n##.weather_ad\n##.weatherad\n##.web-result-sponsored\n##.webad-cnt\n##.webads336x280\n##.webadvert-container\n##.well-ad\n##.wfb-ad\n##.wg-ad-square\n##.wide-ad\n##.wide-ad-container\n##.wide-ad-outer\n##.wide-advert\n##.wide-footer-ad\n##.wide-header-ad\n##.wide-skyscraper-ad\n##.wideAd\n##.wideAdTable\n##.widePageAd\n##.wide_ad\n##.wide_ad_unit\n##.wide_ad_unit_top\n##.wide_ads\n##.wide_google_ads\n##.wide_grey_ad_box\n##.wide_sponsors\n##.widead\n##.wideadbox\n##.widget-ad\n##.widget-ad-codes\n##.widget-ad-sky\n##.widget-ad-zone\n##.widget-ad300x250\n##.widget-adcode\n##.widget-ads\n##.widget-adsense\n##.widget-adv\n##.widget-advertisement\n##.widget-entry-ads-160\n##.widget-group-Ads\n##.widget-highlight-ads\n##.widget-text-ad\n##.widgetAdScrollContainer\n##.widgetYahooAds\n##.widget_ad\n##.widget_ad-widget\n##.widget_ad125\n##.widget_ad_300x250_atf\n##.widget_ad_300x250_btf\n##.widget_ad_300x250_btf_b\n##.widget_ad_boxes_widget\n##.widget_ad_rotator\n##.widget_ad_widget\n##.widget_admanagerwidget\n##.widget_adrotate_widgets\n##.widget_ads\n##.widget_adsblock\n##.widget_adsensem\n##.widget_adsensewidget\n##.widget_adsingle\n##.widget_adv_location\n##.widget_advert_content\n##.widget_advert_widget\n##.widget_advertisement\n##.widget_advertisements\n##.widget_advertisment\n##.widget_advwidget\n##.widget_adwidget\n##.widget_bestgoogleadsense\n##.widget_boss_banner_ad\n##.widget_catchbox_adwidget\n##.widget_cevo_contentad\n##.widget_customadvertising\n##.widget_cxad\n##.widget_econaabachoadswidget\n##.widget_emads\n##.widget_fearless_responsive_image_ad\n##.widget_googleads\n##.widget_ima_ads\n##.widget_internationaladserverwidget\n##.widget_ione-dart-ad\n##.widget_island_ad\n##.widget_maxbannerads\n##.widget_nb-ads\n##.widget_new_sponsored_content\n##.widget_openxwpwidget\n##.widget_plugrush_widget\n##.widget_sdac_bottom_ad_widget\n##.widget_sdac_companion_video_ad_widget\n##.widget_sdac_footer_ads_widget\n##.widget_sdac_skyscraper_ad_widget\n##.widget_sdac_top_ad_widget\n##.widget_sej_sidebar_ad\n##.widget_sidebarad_300x250\n##.widget_sidebarad_300x600\n##.widget_sidebaradwidget\n##.widget_sponsored_content\n##.widget_uds-ads\n##.widget_vb_sidebar_ad\n##.widget_wnd_ad_widget\n##.widget_wpshower_ad\n##.widgetads\n##.width-ad-slug\n##.wikia-ad\n##.wikia_ad_placeholder\n##.wingadblock\n##.wis_adControl\n##.withAds\n##.wixAdsdesktopBottomAd\n##.wl-ad\n##.wn-ad\n##.wnIframeAd\n##.wnMultiAd\n##.wnad\n##.wp125_write_ads_widget\n##.wp125ad\n##.wp125ad_1\n##.wp125ad_2\n##.wpInsertInPostAd\n##.wp_bannerize\n##.wpadvert\n##.wpbrad\n##.wpbrad-ad\n##.wpbrad-zone\n##.wpfp_custom_ad\n##.wpi_ads\n##.wpn_ad_content\n##.wpproadszone\n##.wptouch-ad\n##.wpx-bannerize\n##.wrap-ads\n##.wrap_boxad\n##.wrapad\n##.wrapper-ad\n##.wrapper-ad-sidecol\n##.wrapper-google-ads\n##.wrapper_ad\n##.ws-ad\n##.wsSearchResultsRightSponsoredLinks\n##.wsSponsoredLinksRight\n##.wsTopSposoredLinks\n##.wx-adchoices\n##.wx-gptADS\n##.x-ad\n##.x-home-ad__content\n##.x-home-ad__content-inner\n##.x01-ad\n##.x03-adunit\n##.x04-adunit\n##.x81_ad_detail\n##.xads-blk-bottom-hld\n##.xads-blk-top-hld\n##.xads-blk-top2-hld\n##.xads-blk1\n##.xads-blk2\n##.xads-ojedn\n##.xmlad\n##.xs_epic_circ_ad\n##.xs_epic_sponsor_label\n##.xtopadvert\n##.y-ads\n##.y-ads-wide\n##.y5_ads\n##.y5_ads2\n##.y7-advertisement\n##.y7adHEAD\n##.y7adS\n##.y7s-lrec\n##.yaAds\n##.yad-sponsored\n##.yahoo-ad-leader-north\n##.yahoo-ad-leader-south\n##.yahoo-ad-lrec-north\n##.yahoo-banner-ad-container\n##.yahoo-sponsored\n##.yahoo-sponsored-links\n##.yahoo-sponsored-result\n##.yahooAd\n##.yahooAds\n##.yahooContentMatch\n##.yahoo_ad\n##.yahoo_ads\n##.yahooad-image\n##.yahooad-urlline\n##.yahooads\n##.yahootextads_content_bottom\n##.yam-plus-ad-container\n##.yan-sponsored\n##.yat-ad\n##.yellow_ad\n##.yfi-fp-ad-logo\n##.ygrp-ad\n##.yieldads-160x600\n##.yieldads-728x90\n##.yl-lrec-wrap\n##.yls-sponlink\n##.yom-ad\n##.yom-ad-LREC\n##.yom-ad-LREC2\n##.yom-ad-LREC3\n##.yom-ad-MREC2\n##.yom-ad-moneyball\n##.youradhere\n##.youtubeSuperLeaderBoardAdHolder\n##.youtubeSuperLeaderOverallAdArea\n##.yrail_ad_wrap\n##.yrail_ads\n##.ysmsponsor\n##.ysp-dynamic-ad\n##.ysponsor\n##.yt-adsfull-widget\n##.yui3-ad\n##.yw-ad\n##.z-sponsored-block\n##.zRightAdNote\n##.zc-grid-ad\n##.zc-grid-position-ad\n##.zem_rp_promoted\n##.zeti-ads\n##[onclick^=\"window.open('http://adultfriendfinder.com/search/\"]\n##a[data-redirect^=\"this.href='http://paid.outbrain.com/network/redir?\"]\n##a[href$=\"/vghd.shtml\"]\n##a[href*=\"/adrotate-out.php?\"]\n##a[href^=\" http://ads.ad-center.com/\"]\n##a[href^=\"//adbit.co/?a=Advertise&\"]\n##a[href^=\"//ads.ad-center.com/\"]\n##a[href^=\"http://1phads.com/\"]\n##a[href^=\"http://360ads.go2cloud.org/\"]\n##a[href^=\"http://NowDownloadAll.com\"]\n##a[href^=\"http://ad-apac.doubleclick.net/\"]\n##a[href^=\"http://ad-emea.doubleclick.net/\"]\n##a[href^=\"http://ad.au.doubleclick.net/\"]\n##a[href^=\"http://ad.doubleclick.net/\"]\n##a[href^=\"http://ad.yieldmanager.com/\"]\n##a[href^=\"http://adexprt.me/\"]\n##a[href^=\"http://adf.ly/?id=\"]\n##a[href^=\"http://adfarm.mediaplex.com/\"]\n##a[href^=\"http://adlev.neodatagroup.com/\"]\n##a[href^=\"http://ads.activtrades.com/\"]\n##a[href^=\"http://ads.ad-center.com/\"]\n##a[href^=\"http://ads.affbuzzads.com/\"]\n##a[href^=\"http://ads.betfair.com/redirect.aspx?\"]\n##a[href^=\"http://ads.integral-marketing.com/\"]\n##a[href^=\"http://ads.pheedo.com/\"]\n##a[href^=\"http://ads2.williamhill.com/redirect.aspx?\"]\n##a[href^=\"http://adserver.adtech.de/\"]\n##a[href^=\"http://adserver.adtechus.com/\"]\n##a[href^=\"http://adserver.itsfogo.com/\"]\n##a[href^=\"http://adserving.liveuniversenetwork.com/\"]\n##a[href^=\"http://adserving.unibet.com/\"]\n##a[href^=\"http://adsrv.keycaptcha.com\"]\n##a[href^=\"http://adtransfer.net/\"]\n##a[href^=\"http://adultfriendfinder.com/p/register.cgi?pid=\"]\n##a[href^=\"http://affiliate.coral.co.uk/processing/\"]\n##a[href^=\"http://affiliate.glbtracker.com/\"]\n##a[href^=\"http://affiliate.godaddy.com/\"]\n##a[href^=\"http://affiliates.score-affiliates.com/\"]\n##a[href^=\"http://aflrm.com/\"]\n##a[href^=\"http://amzn.to/\"] > img[src^=\"data\"]\n##a[href^=\"http://api.ringtonematcher.com/\"]\n##a[href^=\"http://api.taboola.com/\"][href*=\"/recommendations.notify-click?app.type=\"]\n##a[href^=\"http://at.atwola.com/\"]\n##a[href^=\"http://banners.victor.com/processing/\"]\n##a[href^=\"http://bc.vc/?r=\"]\n##a[href^=\"http://bcp.crwdcntrl.net/\"]\n##a[href^=\"http://bestorican.com/\"]\n##a[href^=\"http://bluehost.com/track/\"]\n##a[href^=\"http://bonusfapturbo.nmvsite.com/\"]\n##a[href^=\"http://bs.serving-sys.com/\"]\n##a[href^=\"http://buysellads.com/\"]\n##a[href^=\"http://c.actiondesk.com/\"]\n##a[href^=\"http://campaign.bharatmatrimony.com/track/\"]\n##a[href^=\"http://cdn3.adexprts.com/\"]\n##a[href^=\"http://centertrust.xyz/\"]\n##a[href^=\"http://chaturbate.com/affiliates/\"]\n##a[href^=\"http://cinema.friendscout24.de?\"]\n##a[href^=\"http://clickandjoinyourgirl.com/\"]\n##a[href^=\"http://clickserv.sitescout.com/\"]\n##a[href^=\"http://clk.directrev.com/\"]\n##a[href^=\"http://clkmon.com/adServe/\"]\n##a[href^=\"http://codec.codecm.com/\"]\n##a[href^=\"http://connectlinking6.com/\"]\n##a[href^=\"http://cpaway.afftrack.com/\"]\n##a[href^=\"http://d2.zedo.com/\"]\n##a[href^=\"http://data.ad.yieldmanager.net/\"]\n##a[href^=\"http://databass.info/\"]\n##a[href^=\"http://down1oads.com/\"]\n##a[href^=\"http://dwn.pushtraffic.net/\"]\n##a[href^=\"http://easydownload4you.com/\"]\n##a[href^=\"http://elitefuckbook.com/\"]\n##a[href^=\"http://feedads.g.doubleclick.net/\"]\n##a[href^=\"http://fileloadr.com/\"]\n##a[href^=\"http://finaljuyu.com/\"]\n##a[href^=\"http://freesoftwarelive.com/\"]\n##a[href^=\"http://fsoft4down.com/\"]\n##a[href^=\"http://fusionads.net\"]\n##a[href^=\"http://galleries.pinballpublishernetwork.com/\"]\n##a[href^=\"http://galleries.securewebsiteaccess.com/\"]\n##a[href^=\"http://games.ucoz.ru/\"][target=\"_blank\"]\n##a[href^=\"http://gca.sh/user/register?ref=\"]\n##a[href^=\"http://getlinksinaseconds.com/\"]\n##a[href^=\"http://go.seomojo.com/tracking202/\"]\n##a[href^=\"http://greensmoke.com/\"]\n##a[href^=\"http://hd-plugins.com/download/\"]\n##a[href^=\"http://hdplugin.flashplayer-updates.com/\"]\n##a[href^=\"http://hyperlinksecure.com/go/\"]\n##a[href^=\"http://install.securewebsiteaccess.com/\"]\n##a[href^=\"http://k2s.cc/pr/\"]\n##a[href^=\"http://keep2share.cc/pr/\"]\n##a[href^=\"http://landingpagegenius.com/\"]\n##a[href^=\"http://latestdownloads.net/download.php?\"]\n##a[href^=\"http://lp.ezdownloadpro.info/\"]\n##a[href^=\"http://lp.ilivid.com/\"]\n##a[href^=\"http://lp.ncdownloader.com/\"]\n##a[href^=\"http://marketgid.com\"]\n##a[href^=\"http://mgid.com/\"]\n##a[href^=\"http://n.admagnet.net/\"]\n##a[href^=\"http://online.ladbrokes.com/promoRedirect?\"]\n##a[href^=\"http://paid.outbrain.com/network/redir?\"][target=\"_blank\"]\n##a[href^=\"http://partner.sbaffiliates.com/\"]\n##a[href^=\"http://pokershibes.com/index.php?ref=\"]\n##a[href^=\"http://pubads.g.doubleclick.net/\"]\n##a[href^=\"http://refer.webhostingbuzz.com/\"]\n##a[href^=\"http://ryushare.com/affiliate.python\"]\n##a[href^=\"http://secure.hostgator.com/~affiliat/\"]\n##a[href^=\"http://secure.signup-page.com/\"]\n##a[href^=\"http://secure.signup-way.com/\"]\n##a[href^=\"http://serve.williamhill.com/promoRedirect?\"]\n##a[href^=\"http://server.cpmstar.com/click.aspx?poolid=\"]\n##a[href^=\"http://sharesuper.info/\"]\n##a[href^=\"http://t.wowtrk.com/\"]\n##a[href^=\"http://taboola-\"][href*=\"/redirect.php?app.type=\"]\n##a[href^=\"http://tour.affbuzzads.com/\"]\n##a[href^=\"http://track.adform.net/\"]\n##a[href^=\"http://tracking.crazylead.com/\"]\n##a[href^=\"http://tracking.deltamediallc.com/\"]\n##a[href^=\"http://ul.to/ref/\"]\n##a[href^=\"http://uploaded.net/ref/\"]\n##a[href^=\"http://us.marketgid.com\"]\n##a[href^=\"http://www.123-reg.co.uk/affiliate2.cgi\"]\n##a[href^=\"http://www.1clickdownloader.com/\"]\n##a[href^=\"http://www.1clickmoviedownloader.info/\"]\n##a[href^=\"http://www.FriendlyDuck.com/AF_\"]\n##a[href^=\"http://www.TwinPlan.com/AF_\"]\n##a[href^=\"http://www.adbrite.com/mb/commerce/purchase_form.php?\"]\n##a[href^=\"http://www.adshost2.com/\"]\n##a[href^=\"http://www.adxpansion.com\"]\n##a[href^=\"http://www.affbuzzads.com/affiliate/\"]\n##a[href^=\"http://www.amazon.co.uk/exec/obidos/external-search?\"]\n##a[href^=\"http://www.babylon.com/welcome/index?affID\"]\n##a[href^=\"http://www.badoink.com/go.php?\"]\n##a[href^=\"http://www.bet365.com/home/?affiliate\"]\n##a[href^=\"http://www.clickansave.net/\"]\n##a[href^=\"http://www.clkads.com/adServe/\"]\n##a[href^=\"http://www.dealcent.com/register.php?affid=\"]\n##a[href^=\"http://www.dl-provider.com/search/\"]\n##a[href^=\"http://www.down1oads.com/\"]\n##a[href^=\"http://www.download-provider.org/\"]\n##a[href^=\"http://www.downloadthesefiles.com/\"]\n##a[href^=\"http://www.downloadweb.org/\"]\n##a[href^=\"http://www.drowle.com/\"]\n##a[href^=\"http://www.epicgameads.com/\"]\n##a[href^=\"http://www.faceporn.net/free?\"]\n##a[href^=\"http://www.fbooksluts.com/\"]\n##a[href^=\"http://www.firstclass-download.com/\"]\n##a[href^=\"http://www.firstload.com/affiliate/\"]\n##a[href^=\"http://www.firstload.de/affiliate/\"]\n##a[href^=\"http://www.fleshlight.com/\"]\n##a[href^=\"http://www.fonts.com/BannerScript/\"]\n##a[href^=\"http://www.fpcTraffic2.com/blind/in.cgi?\"]\n##a[href^=\"http://www.freefilesdownloader.com/\"]\n##a[href^=\"http://www.friendlyduck.com/AF_\"]\n##a[href^=\"http://www.google.com/aclk?\"]\n##a[href^=\"http://www.graboid.com/affiliates/\"]\n##a[href^=\"http://www.idownloadplay.com/\"]\n##a[href^=\"http://www.incredimail.com/?id=\"]\n##a[href^=\"http://www.ireel.com/signup?ref\"]\n##a[href^=\"http://www.linkbucks.com/referral/\"]\n##a[href^=\"http://www.liutilities.com/\"]\n##a[href^=\"http://www.menaon.com/installs/\"]\n##a[href^=\"http://www.mobileandinternetadvertising.com/\"]\n##a[href^=\"http://www.my-dirty-hobby.com/?sub=\"]\n##a[href^=\"http://www.myfreepaysite.com/sfw.php?aid\"]\n##a[href^=\"http://www.myfreepaysite.com/sfw_int.php?aid\"]\n##a[href^=\"http://www.mysuperpharm.com/\"]\n##a[href^=\"http://www.myvpn.pro/\"]\n##a[href^=\"http://www.on2url.com/app/adtrack.asp\"]\n##a[href^=\"http://www.paddypower.com/?AFF_ID=\"]\n##a[href^=\"http://www.pheedo.com/\"]\n##a[href^=\"http://www.pinkvisualgames.com/?revid=\"]\n##a[href^=\"http://www.plus500.com/?id=\"]\n##a[href^=\"http://www.quick-torrent.com/download.html?aff\"]\n##a[href^=\"http://www.revenuehits.com/\"]\n##a[href^=\"http://www.ringtonematcher.com/\"]\n##a[href^=\"http://www.roboform.com/php/land.php\"]\n##a[href^=\"http://www.seekbang.com/cs/\"]\n##a[href^=\"http://www.sex.com/?utm_source=\"]\n##a[href^=\"http://www.sfippa.com/\"]\n##a[href^=\"http://www.socialsex.com/\"]\n##a[href^=\"http://www.streamate.com/exports/\"]\n##a[href^=\"http://www.streamtunerhd.com/signup?\"]\n##a[href^=\"http://www.text-link-ads.com/\"]\n##a[href^=\"http://www.torntv-downloader.com/\"]\n##a[href^=\"http://www.torntvdl.com/\"]\n##a[href^=\"http://www.uniblue.com/cm/\"]\n##a[href^=\"http://www.urmediazone.com/signup\"]\n##a[href^=\"http://www.usearchmedia.com/signup?\"]\n##a[href^=\"http://www.wantstraffic.com/\"]\n##a[href^=\"http://www.webtrackerplus.com/\"]\n##a[href^=\"http://www.yourfuckbook.com/?\"]\n##a[href^=\"http://www1.clickdownloader.com/\"]\n##a[href^=\"http://wxdownloadmanager.com/dl/\"]\n##a[href^=\"http://xads.zedo.com/\"]\n##a[href^=\"http://yads.zedo.com/\"]\n##a[href^=\"http://z1.zedo.com/\"]\n##a[href^=\"http://zevera.com/afi.html\"]\n##a[href^=\"https://ad.doubleclick.net/\"]\n##a[href^=\"https://bs.serving-sys.com\"]\n##a[href^=\"https://dltags.com/\"]\n##a[href^=\"https://secure.eveonline.com/ft/?aid=\"]\n##a[href^=\"https://www.FriendlyDuck.com/AF_\"]\n##a[href^=\"https://www.dsct1.com/\"]\n##a[href^=\"https://www.firstload.com/affiliate/\"]\n##a[href^=\"https://www.oboom.com/ad/\"]\n##a[href^=\"https://www.share-online.biz/affiliate/\"]\n##a[onmousedown^=\"this.href='http://paid.outbrain.com/network/redir?\"][target=\"_blank\"]\n##a[onmousedown^=\"this.href='http://paid.outbrain.com/network/redir?\"][target=\"_blank\"] + .ob_source\n##a[onmousedown^=\"this.href='http://staffpicks.outbrain.com/network/redir?\"][target=\"_blank\"]\n##a[onmousedown^=\"this.href='http://staffpicks.outbrain.com/network/redir?\"][target=\"_blank\"] + .ob_source\n##a[onmousedown^=\"this.href='https://paid.outbrain.com/network/redir?\"][target=\"_blank\"]\n##a[onmousedown^=\"this.href='https://paid.outbrain.com/network/redir?\"][target=\"_blank\"] + .ob_source\n##a[style=\"display:block;width:300px;min-height:250px\"][href^=\"http://li.cnet.com/click?\"]\n##div[id^=\"MarketGid\"]\n##div[id^=\"YFBMSN\"]\n##div[id^=\"acm-ad-tag-\"]\n##div[id^=\"div-gpt-ad-\"]\n##iframe[id^=\"google_ads_frame\"]\n##iframe[id^=\"google_ads_iframe\"]\n##iframe[src^=\"http://ad.yieldmanager.com/\"]\n##iframe[src^=\"http://cdn1.adexprt.com/\"]\n##iframe[src^=\"http://cdn2.adexprt.com/\"]\n##img[alt^=\"Fuckbook\"]\n##input[onclick^=\"window.open('http://www.FriendlyDuck.com/AF_\"]\n##input[onclick^=\"window.open('http://www.friendlyduck.com/AF_\"]\n##p[id^=\"div-gpt-ad-\"]\n##script[src^=\"http://free-shoutbox.net/app/webroot/shoutbox/sb.php?shoutbox=\"] + #freeshoutbox_content\n! In advert promo\n##.brandpost_inarticle\n! Forumotion.com related sites\n###main-content > [style=\"padding:10px 0 0 0 !important;\"]\n##td[valign=\"top\"] > .mainmenu[style=\"padding:10px 0 0 0 !important;\"]\n! Whistleout widget\n###rhs_whistleout_widget\n###wo-widget-wrap\n! Asset Listings\n###assetsListings[style=\"display: block;\"]\n! Magnify transparient advert on video\n###magnify_widget_playlist_item_companion\n! Playbb.me / easyvideo.me / videozoo.me / paypanda.net\n###flowplayer > div[style=\"position: absolute; width: 300px; height: 275px; left: 222.5px; top: 85px; z-index: 999;\"]\n###flowplayer > div[style=\"z-index: 208; position: absolute; width: 300px; height: 275px; left: 222.5px; top: 85px;\"]\n##.Mpopup + #Mad > #MadZone\n! https://adblockplus.org/forum/viewtopic.php?f=2&t=17016\n##.l-container > #fishtank\n! Google\n###center_col > #\\5f Emc\n###center_col > #resultStats + #tads\n###center_col > #resultStats + #tads + #res + #tads\n###center_col > #resultStats + div + #res + #tads\n###center_col > #resultStats + div[style=\"border:1px solid #dedede;margin-bottom:11px;padding:5px 7px 5px 6px\"]\n###center_col > #taw > #tvcap > .rscontainer\n###center_col > div[style=\"font-size:14px;margin-right:0;min-height:5px\"] > div[style=\"font-size:14px;margin:0 4px;padding:1px 5px;background:#fff8e7\"]\n###cnt #center_col > #res > #topstuff > .ts\n###main_col > #center_col div[style=\"font-size:14px;margin:0 4px;padding:1px 5px;background:#fff7ed\"]\n###mbEnd[cellspacing=\"0\"][cellpadding=\"0\"]\n###mclip_container:last-child\n###mn #center_col > div > h2.spon:first-child\n###mn #center_col > div > h2.spon:first-child + ol:last-child\n###resultspanel > #topads\n###rhs_block > #mbEnd\n###rhs_block > .ts[cellspacing=\"0\"][cellpadding=\"0\"][style=\"padding:0\"]\n###rhs_block > ol > .rhsvw > .kp-blk > .xpdopen > ._OKe > ol > ._DJe > .luhb-div\n###rhswrapper > #rhssection[border=\"0\"][bgcolor=\"#ffffff\"]\n###ssmiwdiv[jsdisplay]\n###tads + div + .c\n###tads.c\n###tadsb.c\n###tadsto.c\n###topstuff > #tads\n##.GB3L-QEDGY .GB3L-QEDF- > .GB3L-QEDE-\n##.GFYY1SVD2 > .GFYY1SVC2 > .GFYY1SVF5\n##.GFYY1SVE2 > .GFYY1SVD2 > .GFYY1SVG5\n##.GHOFUQ5BG2 > .GHOFUQ5BF2 > .GHOFUQ5BG5\n##.GJJKPX2N1 > .GJJKPX2M1 > .GJJKPX2P4\n##.GKJYXHBF2 > .GKJYXHBE2 > .GKJYXHBH5\n##.GPMV2XEDA2 > .GPMV2XEDP1 > .GPMV2XEDJBB\n##.ch[onclick=\"ga(this,event)\"]\n##.commercial-unit-desktop-rhs\n##.commercial-unit-desktop-top\n##.lads[width=\"100%\"][style=\"background:#FFF8DD\"]\n##.mod > ._jH + .rscontainer\n##.mw > #rcnt > #center_col > #taw > #tvcap > .c\n##.mw > #rcnt > #center_col > #taw > .c\n##.ra[align=\"left\"][width=\"30%\"]\n##.ra[align=\"right\"][width=\"30%\"]\n##.ra[width=\"30%\"][align=\"right\"] + table[width=\"70%\"][cellpadding=\"0\"]\n##.rhsvw[style=\"background-color:#fff;margin:0 0 14px;padding-bottom:1px;padding-top:1px;\"]\n##.rscontainer > .ellip\n! Sedo\n###ads > .dose > .dosesingle\n###content > #center > .dose > .dosesingle\n###content > #right > .dose > .dosesingle\n###header + #content > #left > #rlblock_left\n! Taboola\n###recommendations a[rel=\"nofollow\"][onclick^=\"window.open('http://api.taboola.com/\"][href=\"#\"]\n##.trc_rbox .syndicatedItem\n##.trc_rbox_border_elm .syndicatedItem\n##.trc_rbox_div .syndicatedItem\n##.trc_rbox_div .syndicatedItemUB\n##.trc_rbox_div a[target=\"_blank\"][href^=\"http://tab\"]\n##.trc_related_container div[data-item-syndicated=\"true\"]\n! Tripadvisor\n###MAIN.ShowTopic > .ad\n! uCoz\n! https://adblockplus.org/forum/viewtopic.php?f=2&t=13414\n##div[id^=\"mainads\"]\n! yavli.com Sponsored content\n##.__y_elastic .__y_item\n##.__y_inner > .__y_item\n##.__y_outer\n##.__yinit .__y_item\n##.__ywl .__y_item\n##.__ywvr .__y_item\n##.__zinit .__y_item\n##.icons-rss-feed + .icons-rss-feed div[class$=\"_item\"]\n##.inlineNewsletterSubscription + .inlineNewsletterSubscription div[class$=\"_item\"]\n##.jobs-information-call-to-action + .jobs-information-call-to-action div[class$=\"_item\"]\n! zergnet\n###boxes-box-zergnet_module\n###zergnet\n###zergnet-widget\n###zergnet-wrapper\n##.module-zerg\n##.widget-ami-zergnet\n##.widget_ok_zergnet_widget\n##.zergnet\n##.zergnet-widget-container\n##.zergnetBLock\n##.zergnetpower\n##div[id^=\"zergnet-widget-\"]\n! *** easylist:easylist/easylist_whitelist_general_hide.txt ***\nthedailygreen.com#@##AD_banner\nwebmail.verizon.net#@##AdColumn\njobs.wa.gov.au,lalovings.com#@##AdContainer\njobs.wa.gov.au,ksl.com#@##AdHeader\nsprouts.com,tbns.com.au#@##AdImage\ngames.com#@##Adcode\ndesignspotter.com#@##AdvertiseFrame\nwikimedia.org,wikipedia.org#@##Advertisements\nnewser.com#@##BottomAdContainer\nfreeshipping.com,freeshippingrewards.com#@##BottomAds\norientaldaily.on.cc#@##ContentAd\nkizi.com,playedonline.com#@##PreRollAd\njapantimes.co.jp#@##RightAdBlock\nisource.com,nytimes.com#@##TopAd\ndailyfinancegroup.com#@##ad-area\ndormy.se,marthastewart.com#@##ad-background\nchinradioottawa.com#@##ad-bg\nfropper.com,themonthly.com.au#@##ad-container\napnaohio.com,ifokus.se,miradiorumba.com#@##ad-header\negreetings.com#@##ad-header-728x90\nelle.com#@##ad-leaderboard\nchicagocrusader.com,garycrusader.com#@##ad-main\nharpcolumn.com#@##ad-text\ngismeteo.com,gismeteo.lt,gismeteo.lv,gismeteo.md#@##ad-top\nafterdawn.com#@##ad-top-banner-placeholder\nbabyzone.com#@##ad-top-wrapper\nedgesuite.net#@##ad-unit\namctv.com,collegeslackers.com,ufoevidence.org,wg-gesucht.de#@##ad-wrapper\negotastic.com,nehandaradio.com#@##ad468\nbristol247.com,zap2it.com#@##ad728\nnatgeo.tv#@##ad728x90\ncampusdish.com#@##adBanner\n4029tv.com,wesh.com,wmur.com#@##adBelt\nimdb.com#@##adComponentWrapper\nremixshare.com#@##adDiv\nsurf.to#@##adFrame\nginatricot.com#@##adGallery\njobs.wa.gov.au,ksl.com#@##adHeader\nindecisionforever.com#@##adHolder\nyoukioske.com#@##adLayer\nmediabistro.com#@##adLeader\ncontracostatimes.com,mercurynews.com#@##adPosition0\nmautofied.com,segundamano.es#@##adText\nsanmarcosrecord.com#@##ad_1\nsanmarcosrecord.com#@##ad_2\nsanmarcosrecord.com#@##ad_3\nsanmarcosrecord.com#@##ad_4\nsanmarcosrecord.com#@##ad_5\nvgchartz.com#@##ad_728_90\nkarjalainen.fi#@##ad_area\ntodaystmj4.com#@##ad_banner\nsexzindian.com#@##ad_center\napnaohio.com,syfygames.com#@##ad_content\nmichaels.com#@##ad_header\neonline.com#@##ad_leaderboard\n9stream.com,seeon.tv,sportlemon.tv#@##ad_overlay\nneonalley.com,streetinsider.com,vizanime.com#@##ad_space\nwretch.cc#@##ad_square\nbestadsontv.com#@##ad_table\nnbc.com,syfygames.com,theawl.com#@##ad_unit\nafro-ninja.com#@##ad_wrap\nadspot.lk,amnestyusa.org,commoncause.org,drownedinsound.com,hardocp.com,prosperityactions.com#@##ad_wrapper\nlivestrong.com#@##adaptv_ad_player_div\nanalogplanet.com,audiostream.com,hometheater.com,innerfidelity.com,shutterbug.com,stereophile.com#@##adbackground\nhomeclick.com#@##adbanner\nbplaced.net,explosm.net,pocket-lint.com,tweakguides.com#@##adbar\nadblockplus.org,clipconverter.cc#@##adblock\namfiindia.com#@##adbody\n2leep.com,landwirt.com,quaintmere.de#@##adbox\ngames.com#@##adcode\ngamesfreak.net,gifmagic.com,jobs.wa.gov.au,lalovings.com#@##adcontainer\nabout.com,ehow.com#@##adcontainer1\nguloggratis.dk#@##adcontent\nchangeofaddressform.com#@##adhead\njobs.wa.gov.au#@##adheader\nchoone.com#@##adimg1\npopcap.com#@##adlayer\nadnews.pl#@##adnews\ncontracostatimes.com,insidebayarea.com,mercurynews.com,siliconvalley.com#@##adposition3\ngamecopyworld.com,gamecopyworld.eu,morningstar.com#@##adright\nlifeinvader.com#@##ads-col\nskelbiu.lt#@##adsHeader\nmexx.ca#@##ads_bottom\ngamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.se#@##ads_right\nhcplzen.cz,lamag.com#@##ads_top\ngayexpress.co.nz#@##ads_wrapper\nvideozed.net#@##adsdiv\ncarryconcealed.net,haberler.com,promoce.cz,ps3scenefiles.com,sondakika.com#@##adsense\nremixshare.com#@##adsense_block\njeeppatriot.com#@##adsense_inline\nautoweek.com,cooperhewitt.org,core77.com,metblogs.com,oreilly.com,thisisthehive.net#@##adspace\ne24.se#@##adspace_top\nsmh.com.au,theage.com.au#@##adspot-300x250-pos-1\ntheage.com.au#@##adspot-300x250-pos-2\nmautofied.com,thisisads.co.uk#@##adtext\n4sysops.com,autogidas.lt,ew.com,globalsecurity.org#@##adtop\nal.com,cleveland.com,gulflive.com,lehighvalleylive.com,masslive.com,mlive.com,nj.com,nola.com,oregonlive.com,pennlive.com,silive.com,syracuse.com#@##adv-masthead\nlawinfo.com#@##adv-top\ninverterbolsa.com#@##advert1\nlakeviewfinancial.net#@##advert2\ntiv.pw#@##advertisement1\ntelkomspeedy.com#@##advertisetop\ngovolsxtra.com,legacy.com#@##advertising_wrapper\nflyroyalbrunei.com#@##adverts\ntirebusiness.com#@##advtop\nbionity.com,frumforum.com,windows7gadgets.net#@##adwrapper\nallieiswired.com,catb.org#@##banner-ad\nasuragen.com#@##bannerAd\nvisitscotland.com#@##bannerAdWrapper\nmacrumors.com#@##banner_topad\nalltimesgames.com,go.com,kennedyhealth.org,modernmedicine.com#@##bannerad\nhotels.mapov.com,redcanoecu.com#@##bigAd\nsudoku.com.au#@##bigad\nthemediaonline.co.za#@##body_ad\nfreeshipping.com#@##bottomAds\nunicreatures.com#@##bottom_ad\nhifi-forsale.co.uk#@##centerads\nshoryuken.com#@##cmn_ad_tag_head\nstickam.com#@##companionAd\nlava360.com#@##content-header-ad\narquivo.wiki.br,orientaldaily.on.cc#@##contentAd\ngamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.se#@##content_ads\ntgfcer.com#@##content_adv\norientaldaily.on.cc#@##contentad\nbestbuy.com#@##dart-container-728x90\noxforddictionaries.com#@##dfp_ad_Entry_728x90\noxforddictionaries.com#@##dfp_ad_Home_728x90\nisraelnationalnews.com,mtanyct.info,presstv.com,presstv.ir#@##divAd\nchicagotribune.com,latimes.com,puzzles.usatoday.com,washingtonpost.com#@##div_prerollAd_1\nepicshare.net#@##download_ad\ndiscuss.com.hk,uwants.com#@##featuread\nclickbd.com#@##featured-ads\nracingjunk.com#@##featuredAds\nheadlinestoday.intoday.in#@##footer_ad\ninvestopedia.com#@##footer_ads\nadultswim.com#@##game-ad\npescorner.net#@##googlead\nsfexaminer.com#@##gridAdSidebar\ncozi.com,uwcu.org#@##head-ad\nfashionmagazine.com#@##header-ads\nnewgrowbook.com#@##headerAd\nindependenttraveler.com#@##headerAdContainer\nairplaydirect.com,cmt.com,hollywoodoops.com#@##header_ad\nguysen.com#@##homead\naetv.com#@##ka_adRightSkyscraperWide\njournalrecord.com#@##leaderAd\nnewegg.com#@##leaderBoardAd\nblogcritics.org#@##leaderboard-ad\nratecity.com.au#@##leaderboard-advertisement\nboattrader.com#@##left-ad\neva.vn#@##left_ads\nbriefing.com#@##leftad\nwyomingnews.com#@##leftads\nsunnewsnetwork.ca#@##logoAd\ntruecar.com#@##logo_ad\nwellsfargo.com#@##mainAd\nstraighttalk.com,theloop.com.au#@##main_ad\ncyclingnews.com#@##mpu2\ncyclingnews.com#@##mpu2_container\ncyclingnews.com#@##mpu_container\ntei-c.org#@##msad\n4kidstv.com#@##myAd\n180upload.nl,epicshare.net,lemuploads.com,megarelease.org#@##player_ads\ngovolsxtra.com#@##pre_advertising_wrapper\nbox10.com,chicagotribune.com,enemy.com,flashgames247.com,hackedarcadegames.com,latimes.com,puzzles.usatoday.com,washingtonpost.com#@##prerollAd\nflickr.com#@##promo-ad\ndailygames.com#@##publicidad\nmmgastro.pl#@##reklama\nsmilelocal.com#@##rh-ad\neva.vn#@##right_ads\nrepair-home.com#@##right_adsense\nrollingstone.com#@##search-sponsor\ngumtree.co.za,gumtree.pl,kijiji.ca#@##searchAd\nlogic-immo.be#@##search_ads\nspinner.com#@##sideAd\njapantoday.com#@##side_ads\ngaelick.com,romstone.net#@##sidebar-ads\nfacebook.com,japantoday.com#@##sidebar_ads\nallthingsd.com#@##skybox-ad\nzapak.com#@##sponsorAdDiv\nmarketwatch.com#@##sponsoredlinks\nmembers.portalbuzz.com#@##sponsors-home\n3dmark.com,yougamers.com#@##takeover_ad\nfoodbeast.com#@##top-ad\nisource.com#@##topAd\nplaystationlifestyle.net#@##topAdSpace\nsdtimes.com#@##topAdSpace_div\ninverterbolsa.com#@##topAdvert\nneowin.net#@##topBannerAd\nmorningstar.se,zootoo.com#@##top_ad\nhbwm.com#@##top_ads\n72tips.com,bumpshack.com,isource.com,millionairelottery.com,pdrhealth.com,psx-scene.com,stickydillybuns.com#@##topad\naudiostream.com,foxsports540.com,soundandvision.com#@##topbannerad\ntheblaze.com#@##under_story_ad\nmy-magazine.me,nbc.com,theglobeandmail.com#@##videoAd\nsudoku.com.au#@#.ADBAR\nsuperbikeplanet.com#@#.AdBody:not(body)\nco-operative.coop,co-operativetravel.co.uk,cooptravel.co.uk#@#.AdBox\nbackpage.com#@#.AdInfo\nbuy.com,superbikeplanet.com#@#.AdTitle\nhome-search.org.uk#@#.AdvertContainer\nhomeads.co.nz#@#.HomeAds\ntravelzoo.com#@#.IM_ad_unit\nehow.com#@#.RelatedAds\neverydayhealth.com#@#.SponsoredContent\napartments.com#@#.ad-300x250\noptimum.net#@#.ad-banner\nbash.fm,tbns.com.au#@#.ad-block\nauctionstealer.com#@#.ad-border\nmembers.portalbuzz.com#@#.ad-btn\nassetbar.com,jazzradio.com,o2.pl#@#.ad-button\nasiasold.com,bahtsold.com,propertysold.asia#@#.ad-cat\nsmall-universe.com#@#.ad-cell\njobmail.co.za,odysseyware.com#@#.ad-display\nfoxnews.com,yahoo.com#@#.ad-enabled\nbigfishaudio.com,dublinairport.com,yahoo.com#@#.ad-holder\nfreebitco.in,recycler.com#@#.ad-img\nkijiji.ca#@#.ad-inner\ndaanauctions.com,queer.pl#@#.ad-item\ncnet.com#@#.ad-leader-top\nbusinessinsider.com#@#.ad-leaderboard\ndaanauctions.com,jerseyinsight.com#@#.ad-left\nreformgovernmentsurveillance.com#@#.ad-link\nguloggratis.dk#@#.ad-links\ngumtree.com#@#.ad-panel\nforums.soompi.com#@#.ad-placement\njerseyinsight.com#@#.ad-right\nsignatus.eu#@#.ad-section\nwmagazine.com#@#.ad-served\nasterisk.org,ifokus.se#@#.ad-sidebar\n10tv.com#@#.ad-square\nspeedtest.net#@#.ad-stack\njobmail.co.za,junkmail.co.za,version2.dk#@#.ad-text\nbuccaneers.com,dallascowboys.com,jaguars.com,kcchiefs.com,liveside.net,neworleanssaints.com,patriots.com,philadelphiaeagles.com,seahawks.com,steelers.com,sulekha.com,vikings.com,washingtonpost.com#@#.ad-top\netonline.com,interscope.com#@#.ad-unit\nbillboard.com#@#.ad-unit-300-wrapper\nspeedtest.net#@#.ad-vertical-container\ntvlistings.aol.com#@#.ad-wide\nhowtopriest.com,nydailynews.com#@#.ad-wrap\ncitylab.com,dealsonwheels.com,happypancake.com,lifeinvader.com,makers.com#@#.ad-wrapper\nharpers.org#@#.ad300\nparade.com#@#.ad728\ninterviewmagazine.com#@#.ad90\nabcfamily.go.com,livestrong.com,locatetv.com#@#.adBlock\naftenposten.no#@#.adBottomBoard\nexpedia.com,ksl.com#@#.adBox\namfiindia.com,expressz.hu,gumtree.co.za,hotgamesforgirls.com,mycareer.com.au,quotefx.com#@#.adContent\nsuperbikeplanet.com#@#.adDiv\ncontracostatimes.com,insidebayarea.com,mercurynews.com,siliconvalley.com#@#.adElement\nbirdchannel.com,catchannel.com,dogchannel.com,fishchannel.com,horsechannel.com,smallanimalchannel.com,youngrider.com#@#.adFrame\ninterpals.net#@#.adFrameCnt\nautotrader.co.za#@#.adHead\nautotrader.co.za,ctv.ca,ctvnews.ca#@#.adHeader\nctvbc.ctv.ca#@#.adHeaderblack\nthebulletinboard.com#@#.adHeadline\nnamesecure.com,superhry.cz#@#.adHolder\nsuperhry.cz#@#.adHoldert\nautotrader.co.za,gumtree.co.nz,gumtree.co.za,gumtree.com,gumtree.com.au,gumtree.ie,gumtree.pl,gumtree.sg,ikea.com,kijiji.ca,ksl.com#@#.adImg\nceskatelevize.cz,ct24.cz#@#.adItem\ngreatergood.com,uol.com.br#@#.adLink\nseznam.cz#@#.adMiddle\ncheaptickets.com,orbitz.com#@#.adMod\noutspark.com#@#.adModule\nhotels.mapov.com#@#.adOverlay\nadvertiser.ie#@#.adPanel\nshockwave.com#@#.adPod\naggeliestanea.gr#@#.adResult\npogo.com#@#.adRight\nis.co.za,smc.edu,ticketsnow.com#@#.adRotator\nmicrosoft.com,northjersey.com#@#.adSpace\n1520wbzw.com,760kgu.biz,880thebiz.com,ap.org,biz1190.com,business1110ktek.com,kdow.biz,kkol.com,money1055.com,takealot.com#@#.adSpot\nautotrader.co.za,thebulletinboard.com#@#.adText\nautotrader.co.za,ksl.com,superbikeplanet.com#@#.adTitle\nempowher.com#@#.adTopHome\nstreamcloud.eu#@#.adWidget\ncocktailsoftheworld.com,hotgamesforgirls.com,supersonicads.com#@#.adWrap\nsanmarcosrecord.com#@#.ad_1\ntechreport.com#@#.ad_160\ncourierpostonline.com#@#.ad_160x600\nfocustaiwan.tw,sanmarcosrecord.com#@#.ad_2\nsanmarcosrecord.com#@#.ad_3\nelledecor.com,nydailynews.com,tvland.com#@#.ad_728x90\nglobest.com#@#.ad_960\nnirmaltv.com#@#.ad_Right\nfocustaiwan.tw#@#.ad_block\npanarmenian.net#@#.ad_body\ngo.com#@#.ad_container\nbebusiness.eu,environmentjob.co.uk,lowcarbonjobs.com,myhouseabroad.com#@#.ad_description\n318racing.org,linuxforums.org,modelhorseblab.com#@#.ad_global_header\ngizmodo.jp,kotaku.jp,lifehacker.jp#@#.ad_head_rectangle\nhorsemart.co.uk,merkatia.com,mysportsclubs.com,news.yahoo.com#@#.ad_header\nolx.pt,whatuni.com#@#.ad_img\nbebusiness.eu,myhouseabroad.com,njuskalo.hr,starbuy.sk.data10.websupport.sk#@#.ad_item\ntimesofmalta.com#@#.ad_leaderboard\ntvrage.com#@#.ad_line\nyirmidorthaber.com#@#.ad_middle\nrediff.com#@#.ad_outer\ntvland.com#@#.ad_promo\nweather.yahoo.com#@#.ad_slug_table\nchinapost.com.tw#@#.ad_space\nhuffingtonpost.co.uk#@#.ad_spot\nbbs.newhua.com,starbuy.sk.data10.websupport.sk#@#.ad_text\nfastseeksite.com,njuskalo.hr#@#.ad_title\noxforddictionaries.com#@#.ad_trick_header\noxforddictionaries.com#@#.ad_trick_left\nwg-gesucht.de#@#.ad_wrap\nathensmagazine.gr#@#.ad_wrapper\ncitypress.co.za#@#.ad_zone\nchoone.com,usairways.com#@#.adarea\nespni.go.com,nownews.com,nva.gov.lv#@#.adbanner\nfifthinternational.org,sudoku.com.au#@#.adbar\nsmilelocal.com#@#.adbottom\nthelog.com#@#.adbutton\nlancasteronline.com#@#.adcolumn\narchiwumallegro.pl#@#.adcont\nbmwoglasnik.si,completemarkets.com,superbikeplanet.com#@#.addiv\nlinux.com#@#.adframe\nnick.com#@#.adfree\nchoone.com#@#.adheader\nnorthjersey.com,rabota.by#@#.adholder\nbackpage.com#@#.adinfo\npcmag.com#@#.adkit\ninsomnia.gr,kingsinteriors.co.uk,superbikeplanet.com#@#.adlink\nbmwoglasnik.si,clickindia.com#@#.adlist\nfind-your-horse.com#@#.admain\nsmilelocal.com#@#.admiddle\ntomwans.com#@#.adright\nskatteverket.se#@#.adrow1\nskatteverket.se#@#.adrow2\ncommunity.pictavo.com#@#.ads-1\ncommunity.pictavo.com#@#.ads-2\ncommunity.pictavo.com#@#.ads-3\npch.com#@#.ads-area\nqueer.pl#@#.ads-col\nburzahrane.hr#@#.ads-header\nmembers.portalbuzz.com#@#.ads-holder\nt3.com#@#.ads-inline\ncelogeek.com,checkrom.com#@#.ads-item\nbannerist.com#@#.ads-right\napple.com#@#.ads-section\ncommunity.pictavo.com,juicesky.com#@#.ads-title\nqueer.pl#@#.ads-top\nuploadbaz.com#@#.ads1\njw.org#@#.adsBlock\ndownload.cnet.com#@#.ads_catDiv\nsantabanta.com#@#.ads_div\nshopmos.net#@#.ads_top\nquebarato.com.br,search.conduit.com#@#.ads_wrapper\nalluc.org#@#.adsbottombox\nadvancedrenamer.com,epicbundle.com,weightlosereally.com,willyoupressthebutton.com#@#.adsbygoogle\ncopart.com#@#.adscontainer\nlive365.com#@#.adshome\nchupelupe.com#@#.adside\nwg-gesucht.de#@#.adslot_blurred\n4kidstv.com,banknbt.com,kwik-fit.com,mac-sports.com#@#.adspace\ncutepdf-editor.com#@#.adtable\nabsolute.com#@#.adtile\nsmilelocal.com#@#.adtop\npromodj.com#@#.adv300\ngoal.com#@#.adv_300\npistonheads.com#@#.advert-block\neatsy.co.uk#@#.advert-box\nchycor.co.uk#@#.advert-container\npistonheads.com#@#.advert-content\nmobifrance.com#@#.advert-horizontal\nhorsedeals.com.au#@#.advert-wrapper\njamesedition.com#@#.advert2\npdc.tv#@#.advertColumn\nbasingstokehomebid.org.uk,homefindersomerset.co.uk#@#.advertContainer\nlongstonetyres.co.uk#@#.advertLink\nlongstonetyres.co.uk#@#.advertText\nniedziela.nl#@#.advert_container\nbrowsershots.org#@#.advert_list\npets4homes.co.uk#@#.advertbox\nitavisen.no#@#.advertisement-1\nzalora.co.id,zalora.co.th,zalora.com.my,zalora.com.ph,zalora.sg#@#.advertisement-block\nmocpages.com#@#.advertisement-swimlane\nbuyout.pro,news.com.au,zlinked.com#@#.advertiser\nalusa.org#@#.advertising_block\nanobii.com#@#.advertisment\ngrist.org#@#.advertorial\nransquawk.com,trh.sk#@#.adverts\nstjornartidindi.is#@#.adverttext\nstaircase.pl#@#.adwords\nconsumerist.com#@#.after-post-ad\ndeluxemusic.tv#@#.article_ad\njiji.ng#@#.b-advert\nannfammed.org#@#.banner-ads\nplus.net,putlocker.com#@#.banner300\nmlb.com#@#.bannerAd\nmilenio.com#@#.banner_728x90\nmergermarket.com#@#.banner_ad\ncumbooks.co.za,eurweb.com,infoplease.com#@#.bannerad\npopporn.com,webphunu.net#@#.block-ad\ndiena.lt#@#.block-simpleads\noliveoiltimes.com#@#.blog-ads\nhispanicbusiness.com#@#.bottom-ad\nnewagestore.com#@#.bottom-ads\nnytimes.com#@#.bottom-left-ad\n123poi.com#@#.bottomAds\nixbtlabs.com#@#.bottom_ad_block\nqueer.pl#@#.box-ads\nwired.com#@#.box-radvert\ntheonion.com#@#.boxad\nweather.yahoo.com#@#.can_ad_slug\ndeployhappiness.com,dmitrysotnikov.wordpress.com,faravirusi.com#@#.category-ad\ngegenstroemung.org#@#.change_AdContainer\nfindicons.com,tattoodonkey.com#@#.container_ad\ninsidefights.com#@#.container_row_ad\ntheology.edu#@#.contentAd\nverizonwireless.com#@#.contentAds\nfreevoipdeal.com,voipstunt.com#@#.content_ads\nglo.msn.com#@#.cp-adsInited\ngottabemobile.com#@#.custom-ad\ntheweek.com#@#.desktop-ad\ndn.se#@#.displayAd\ndeviantart.com#@#.download_ad\nboattrader.com#@#.featured-ad\nracingjunk.com#@#.featuredAdBox\nwebphunu.net#@#.flash-advertisement\nsonglyrics.com#@#.footer-ad\nemploymentguide.com#@#.footer-ads\nkoopik.com#@#.footerad\nebayclassifieds.com,guloggratis.dk#@#.gallery-ad\ntime.com#@#.google-sponsored\ngumtree.co.za#@#.googleAdSense\nnicovideo.jp#@#.googleAds\nwaer.org#@#.has-ad\nassetbar.com,burningangel.com,donthatethegeek.com,intomobile.com,thenationonlineng.net,wccftech.com#@#.header-ad\ngreenbayphoenix.com,photobucket.com#@#.headerAd\ndailytimes.com.pk,swns.com#@#.header_ad\nassociatedcontent.com#@#.header_ad_center\nkidzworld.com#@#.header_advert\nplugcomputer.org#@#.headerad\nhaaretz.com#@#.headerads\ngnc.co.uk,iedrc.org#@#.home-ad\nkazg1440.com,theworldwidewolf.com#@#.home-ads\nheals.co.uk,questapartments.com.au#@#.homeAd\nworldsnooker.com#@#.homead\ngq.com#@#.homepage-ad\nstraighttalk.com#@#.homepage_ads\nradaronline.com#@#.horizontal_ad\nbodas.com.mx,bodas.net,mariages.net,matrimonio.com,weddingspot.co.uk#@#.img_ad\na-k.tel,baldai.tel,boracay.tel,covarrubias.tel#@#.imgad\nlespac.com#@#.inner_ad\nclassifiedads.com#@#.innerad\nforbes.com#@#.interstitial_ad_wrapper\nsilveradoss.com#@#.ipsAd\nmagazines-download.com#@#.item-ads\namazinglytimedphotos.com#@#.item-container-ad\neverybodysucksbutus.com,usatoday.com#@#.leaderboard-ad\najcn.org,annfammed.org#@#.leaderboard-ads\nlolhit.com#@#.leftAd\nlolhit.com#@#.leftad\nebayclassifieds.com#@#.list-ad\nasiasold.com,bahtsold.com,comodoroenventa.com,propertysold.asia#@#.list-ads\neuspert.com#@#.listad\nap.org,atea.com,ateadirect.com,knowyourmobile.com#@#.logo-ad\neagleboys.com.au#@#.marketing-ad\ndriverscollection.com#@#.mid_ad\ndonga.com#@#.middle_AD\nlatimes.com#@#.mod-adopenx\nthenewamerican.com#@#.module-ad\nziehl-abegg.com#@#.newsAd\ndn.se#@#.oasad\nantronio.com,frogueros.com#@#.openx\nadn.com,wiktionary.org#@#.page-ad\nrottentomatoes.com#@#.page_ad\nbachofen.ch#@#.pfAd\niitv.info#@#.player_ad\nputlocker.com,vodu.ch#@#.player_hover_ad\nlatimes.com#@#.pm-ad\nbigfootpage.com,gumtree.com#@#.post-ad\nventurebeat.com#@#.post-sponsored\nayosdito.ph,christianhouseshare.com.au,trovit.pl#@#.post_ad\npersonalpost.washingtonpost.com#@#.post_ads\nfreeads.co.uk,gumtree.co.za,sahibinden.com#@#.postad\nwesh.com#@#.premiumAdOverlay\nwesh.com#@#.premiumAdOverlayClose\ntimeoutbengaluru.net,timeoutdelhi.net,timeoutmumbai.net#@#.promoAd\n4-72.com.co,bancainternet.com.ar,frogueros.com,northwestfm.co.za,tushop.com.ar,vukanifm.org,wrlr.fm,zibonelefm.co.za#@#.publicidad\nebay.co.uk,theweek.com#@#.pushdown-ad\nengadget.com#@#.rail-ad\ninterpals.net#@#.rbRectAd\ncollegecandy.com#@#.rectangle_ad\nsalon.com#@#.refreshAds\nforeignaffairs.com#@#.region-top-ad-position\nuploadic.com#@#.reklam\ndoradcy24.pl,mmgastro.pl,offmoto.com,slovaknhl.sk#@#.reklama\ntradera.com#@#.reportAdLink\n7-eleven.com#@#.right-ad\ntheberrics.com,weddingchannel.com#@#.rightAd\npost-gazette.com#@#.right_ad\ndailymotion.com#@#.right_ads_column\ntheberrics.com,w3schools.com,x17online.com#@#.rightad\ntobarandualchais.co.uk#@#.rightadv\nwebtoolhub.com#@#.sb_adsNv2\ngumtree.co.za#@#.searchAds\nmail.yahoo.com#@#.searchad\navizo.cz,bisexual.com#@#.searchads\narbetsformedlingen.se,wunderground.com#@#.showAd\nagelioforos.gr,domainrural.com.au#@#.side-ad\nsuntimes.com#@#.side-bar-ad-position1\nadspot.lk,recycler.com#@#.single-ad\nmyaccount.nytimes.com#@#.singleAd\ncbsnews.com#@#.skinAd\nradaronline.com#@#.sky_ad\ncomicbookmovie.com#@#.skyscraperAd\nreuters.com#@#.slide-ad\ncaarewards.ca#@#.smallAd\nboylesports.com#@#.small_ad\nhebdenbridge.co.uk,store.gameshark.com#@#.smallads\ntheforecaster.net#@#.sponsor-box\nxhamster.com#@#.sponsorBottom\ngetprice.com.au#@#.sponsoredLinks\ngolfmanagerlive.com#@#.sponsorlink\ngiantlife.com,hellobeautiful.com,newsone.com,theurbandaily.com#@#.sticky-ad\nkanui.com.br,nytimes.com#@#.text-ad\nkingsofchaos.com#@#.textad\nantronio.com,cdf.cl,frogueros.com#@#.textads\nanythinghollywood.com,aylak.com#@#.top-ad\nprogrammableweb.com#@#.top-ad-wrapper\nnypress.com,timescall.com#@#.topAds\nhorsemart.co.uk,torrentv.org#@#.top_ad\nconversations.nokia.com#@#.top_ad_div\negmnow.com#@#.top_ad_wrap\nimagepicsa.com,sun.mv,trailvoy.com#@#.top_ads\nearlyamerica.com,infojobs.net#@#.topads\nnfl.com#@#.tower-ad\nyahoo.com#@#.type_ads_default\nvinden.se#@#.view_ad\nnytimes.com#@#.wideAd\nbritannica.com,cam4.com#@#.withAds\ntheuspatriot.com#@#.wpInsertInPostAd\nweather.yahoo.com#@#.yom-ad\nbitrebels.com#@#a[href*=\"/adrotate-out.php?\"]\nsantander.co.uk#@#a[href^=\"http://ad-emea.doubleclick.net/\"]\njabong.com,people.com,techrepublic.com,time.com#@#a[href^=\"http://ad.doubleclick.net/\"]\nwatchever.de#@#a[href^=\"http://adfarm.mediaplex.com/\"]\nbetbeaver.com,betwonga.com#@#a[href^=\"http://ads.betfair.com/redirect.aspx?\"]\nbetwonga.com#@#a[href^=\"http://ads2.williamhill.com/redirect.aspx?\"]\nbetwonga.com#@#a[href^=\"http://adserving.unibet.com/\"]\nadultfriendfinder.com#@#a[href^=\"http://adultfriendfinder.com/p/register.cgi?pid=\"]\nbetwonga.com#@#a[href^=\"http://affiliate.coral.co.uk/processing/\"]\nmarketgid.com,mgid.com#@#a[href^=\"http://marketgid.com\"]\nmarketgid.com,mgid.com#@#a[href^=\"http://mgid.com/\"]\nbetwonga.com#@#a[href^=\"http://online.ladbrokes.com/promoRedirect?\"]\nlinkedin.com,tasteofhome.com#@#a[href^=\"http://pubads.g.doubleclick.net/\"]\nmarketgid.com,mgid.com#@#a[href^=\"http://us.marketgid.com\"]\nbetbeaver.com,betwonga.com#@#a[href^=\"http://www.bet365.com/home/?affiliate\"]\nfbooksluts.com#@#a[href^=\"http://www.fbooksluts.com/\"]\nfleshjack.com,fleshlight.com#@#a[href^=\"http://www.fleshlight.com/\"]\nwww.google.com#@#a[href^=\"http://www.google.com/aclk?\"]\ngoogle.ca,google.co.nz,google.co.uk,google.com,google.com.au,google.de#@#a[href^=\"http://www.liutilities.com/\"]\nsocialsex.com#@#a[href^=\"http://www.socialsex.com/\"]\nfuckbookhookups.com#@#a[href^=\"http://www.yourfuckbook.com/?\"]\nmarketgid.com,mgid.com#@#a[id^=\"mg_add\"]\nmarketgid.com,mgid.com#@#div[id^=\"MarketGid\"]\nbeqala.com,drupalcommerce.org,ensonhaber.com,eurweb.com,faceyourmanga.com,isc2.org,liverc.com,mit.edu,peekyou.com,podomatic.com,virginaustralia.com,wlj.net,zavvi.com#@#div[id^=\"div-gpt-ad-\"]\nbodas.com.mx,bodas.net,mariages.net,matrimonio.com,weddingspot.co.uk#@#iframe[id^=\"google_ads_frame\"]\nbodas.com.mx,bodas.net,mariages.net,matrimonio.com,weddingspot.co.uk#@#iframe[id^=\"google_ads_iframe\"]\nweather.yahoo.com#@#iframe[src^=\"http://ad.yieldmanager.com/\"]\n! Anti-Adblock\nincredibox.com,litecoiner.net#@##ad-bottom\nincredibox.com#@##ad-header\nlitecoiner.net#@##ad-right\nbitcoiner.net,litecoiner.net#@##ad-top\nzeez.tv#@##ad_overlay\ncnet.com#@##adboard\nolweb.tv#@##ads1\ngooprize.com,jsnetwork.fr#@##ads_bottom\nunixmen.com#@##adsense\nspoilertv.com#@##adsensewide\n8muses.com#@##adtop\nanisearch.com,lilfile.com#@##advertise\nyafud.pl#@##bottomAd\ndizi-mag.com#@##header_ad\nthesimsresource.com#@##leaderboardad\nlinkshrink.net#@##overlay_ad\nexashare.com#@##player_ads\niphone-tv.eu#@##sidebar_ad\nfreebitcoins.nx.tc,getbitcoins.nx.tc#@##sponsorText\ndailybitcoins.org#@#.ad-img\nuptobox.com#@#.ad-leader\nuptobox.com#@#.ad-square\nafreesms.com#@#.adbanner\napkmirror.com#@#.adsWidget\nafreesms.com#@#.adsbox\nafreesms.com,anonymousemail.me,anonymousemail.us,bitcoin-faucet.eu,btcinfame.com,classic-retro-games.com,coingamez.com,doulci.net,eveskunk.com,filecore.co.nz,freebitco.in,get-bitcoin-free.eu,gnomio.com,incredibox.com,mangacap.com,mangakaka.com,niresh.co,nzb.su,r1db.com,spoilertv.com,unlocktheinbox.com,zeperfs.com#@#.adsbygoogle\nafreesms.com#@#.adspace\nbrowsershots.org#@#.advert_area\nvelasridaura.com#@#.advertising_block\nguitarforum.co.za,tf2r.com#@#.adverts\ncheatpain.com,directwonen.nl,dramacafe.in,eveskunk.com,exashare.com,farsondigitalwatercams.com,file4go.com,freeccnaworkbook.com,gaybeeg.info,hack-sat.com,keygames.com,latesthackingnews.com,localeyes.dk,manga2u.co,mangasky.co,minecraftskins.com,moneyinpjs.com,online.dramacafe.tv,ps3news.com,psarips.com,thenewboston.com,tubitv.com#@#.afs_ads\ncoindigger.biz#@#.banner160x600\nanisearch.com#@#.chitikaAdBlock\ntheladbible.com#@#.content_tagsAdTech\ntopzone.lt#@#.forumAd\nlinkshrink.net#@#.overlay_ad\nlocaleyes.dk#@#.pub_300x250\nlocaleyes.dk#@#.pub_300x250m\nlocaleyes.dk#@#.pub_728x90\nlocaleyes.dk#@#.text-ad\nlocaleyes.dk#@#.text-ad-links\nlocaleyes.dk#@#.text-ads\nlocaleyes.dk#@#.textAd\nlocaleyes.dk#@#.text_ad\nincredibox.com,localeyes.dk,turkanime.tv,videopremium.tv#@#.text_ads\nmenstennisforums.com#@#.top_ads\ncoingamez.com,mangaumaru.com,milfzr.com,pencurimovie.cc#@#div[id^=\"div-gpt-ad-\"]\nafreesms.com#@#iframe[id^=\"google_ads_frame\"]\n!---------------------------Third-party advertisers---------------------------!\n! *** easylist:easylist/easylist_adservers.txt ***\n||007-gateway.com^$third-party\n||0icep80f.com^$third-party\n||101m3.com^$third-party\n||103092804.com^$third-party\n||10fbb07a4b0.se^$third-party\n||10pipsaffiliates.com^$third-party\n||1100i.com^$third-party\n||123date.me^$third-party\n||152media.com^$third-party\n||15f3c01a.info^$third-party\n||15f3c01c.info^$third-party\n||174.142.194.177^$third-party\n||17a898b9.info^$third-party\n||17a898bb.info^$third-party\n||188.138.1.45^$third-party,domain=~shatecraft.com.ip\n||188server.com^$third-party\n||18clicks.com^$third-party\n||194.71.107.25^$third-party\n||199.102.225.178^$third-party,domain=~adsimilate.ip\n||1clickdownloads.com^$third-party\n||1phads.com^$third-party\n||1sadx.net^$third-party\n||1yk851od.com^$third-party\n||204.93.181.78^$third-party,domain=~discountmags.ip\n||206ads.com^$third-party\n||209.222.8.217^$third-party,domain=~p2p.adserver.ip\n||20dollars2surf.com^$third-party\n||213.163.70.183^$third-party\n||247realmedia.com^$third-party\n||254a.com^$third-party\n||2d4c3870.info^$third-party\n||2d4c3872.info^$third-party\n||2dpt.com^$third-party\n||2mdn.net/dot.gif$object-subrequest,third-party\n||2mdn.net^$object-subrequest,third-party,domain=101cargames.com|1025thebull.com|1031iheartaustin.com|1037theq.com|1041beat.com|1053kissfm.com|1057ezrock.com|1067litefm.com|10news.com|1310news.com|247comedy.com|3news.co.nz|49ers.com|610cktb.com|680news.com|700wlw.com|850koa.com|923jackfm.com|92q.com|940winz.com|94hjy.com|970espn.com|99kisscountry.com|abc15.com|abc2news.com|abcactionnews.com|am1300thezone.com|am570radio.com|am760.net|ap.org|atlantafalcons.com|automobilemag.com|automotive.com|azcardinals.com|baltimoreravens.com|baynews9.com|bbc.co.uk|bbc.com|belfasttelegraph.co.uk|bengals.com|bet.com|big1059.com|bigdog1009.ca|bloomberg.com|bnn.ca|boom92houston.com|boom945.com|boom973.com|boom997.com|boomphilly.com|box10.com|brisbanetimes.com.au|buccaneers.com|buffalobills.com|bullz-eye.com|businessweek.com|calgaryherald.com|caller.com|canada.com|capitalfm.ca|cbsnews.com|cbssports.com|channel955.com|chargers.com|chez106.com|chfi.com|chicagobears.com|chicagotribune.com|cj104.com|cjad.com|cjbk.com|clevelandbrowns.com|cnettv.cnet.com|coast933.com|colts.com|commercialappeal.com|country1011.com|country1043.com|country1067.com|country600.com|courierpress.com|cp24.com|cricketcountry.com|csmonitor.com|ctvnews.ca|dallascowboys.com|denverbroncos.com|detroitlions.com|drive.com.au|earthcam.com|edmontonjournal.com|egirlgames.net|elvisduran.com|enjoydressup.com|entrepreneur.com|eonline.com|escapegames.com|euronews.com|evolution935.com|fansportslive.com|fm98wjlb.com|foodnetwork.ca|four.co.nz|foxradio.ca|foxsportsradio.com|fresh100.com|gamingbolt.com|ghananation.com|giantbomb.com|giants.com|globalpost.com|globaltoronto.com|globaltv.com|globaltvbc.com|globaltvcalgary.com|go.com|gorillanation.com|gosanangelo.com|hallelujah1051.com|hellobeautiful.com|heraldsun.com.au|hgtv.ca|hiphopnc.com|hot1041stl.com|hotair.com|hothiphopdetroit.com|hotspotatl.com|houstontexans.com|ibtimes.co.uk|iheart.com|independent.ie|independentmail.com|indyhiphop.com|ipowerrichmond.com|jackfm.ca|jaguars.com|kase101.com|kcchiefs.com|kcci.com|kcra.com|kdvr.com|kfiam640.com|kgbx.com|khow.com|kiisfm.com|kiss925.com|kissnorthbay.com|kisssoo.com|kisstimmins.com|kitsapsun.com|kitv.com|kjrh.com|kmov.com|knoxnews.com|kogo.com|komonews.com|kshb.com|kwgn.com|kwnr.com|kxan.com|kysdc.com|latinchat.com|leaderpost.com|livestream.com|local8now.com|magic96.com|majorleaguegaming.com|metacafe.com|miamidolphins.com|mix923fm.com|mojointhemorning.com|moneycontrol.com|montrealgazette.com|motorcyclistonline.com|mtv.ca|myboom1029.com|mycolumbusmagic.com|mycolumbuspower.com|myezrock.com|mymagic97.com|naplesnews.com|nationalpost.com|nba.com|nba.tv|ndtv.com|neworleanssaints.com|news1130.com|newsinc.com|newsmax.com|newsmaxhealth.com|newsnet5.com|newsone.com|newstalk1010.com|newstalk1130.com|newyorkjets.com|nydailynews.com|nymag.com|oktvusa.com|oldschoolcincy.com|ottawacitizen.com|packers.com|panthers.com|patriots.com|pcworld.com|philadelphiaeagles.com|player.screenwavemedia.com|prowrestling.com|q92timmins.com|raaga.com|radio.com|radionowindy.com|raiders.com|rapbasement.com|redding.com|redskins.com|reporternews.com|reuters.com|rollingstone.com|rootsports.com|rottentomatoes.com|seahawks.com|sherdog.com|skynews.com.au|slice.ca|smh.com.au|sploder.com|sportsnet590.ca|sportsnet960.ca|steelers.com|stlouisrams.com|streetfire.net|stuff.co.nz|tcpalm.com|telegraph.co.uk|theage.com.au|theaustralian.com.au|thebeatdfw.com|theboxhouston.com|thedenverchannel.com|thedrocks.com|theindychannel.com|theprovince.com|thestarphoenix.com|theteam1260.com|tide.com|timescolonist.com|timeslive.co.za|timesrecordnews.com|titansonline.com|totaljerkface.com|townhall.com|tripadvisor.ca|tripadvisor.co.id|tripadvisor.co.uk|tripadvisor.com|tripadvisor.com.au|tripadvisor.com.my|tripadvisor.com.sg|tripadvisor.ie|tripadvisor.in|turnto23.com|tvone.tv|tvoneonline.com|twitch.tv|twitchy.com|usmagazine.com|vancouversun.com|vcstar.com|veetle.com|vice.com|videojug.com|vikings.com|virginradio.ca|vzaar.com|wapt.com|washingtonpost.com|washingtontimes.com|wcpo.com|wdfn.com|weather.com|wescfm.com|wgci.com|wibw.com|wikihow.com|windsorstar.com|wiod.com|wiznation.com|wjdx.com|wkyt.com|wmyi.com|wor710.com|wptv.com|wsj.com|wxyz.com|wyff4.com|yahoo.com|youtube.com|z100.com|zhiphopcleveland.com\n||2mdn.net^$~object-subrequest,third-party\n||2xbpub.com^$third-party\n||32b4oilo.com^$third-party\n||3393.com^$third-party\n||350media.com^$third-party\n||360ads.com^$third-party\n||360yield.com^$third-party\n||365sbaffiliates.com^$third-party\n||3cnce854.com^$third-party\n||3lift.com^$third-party\n||3lr67y45.com^$third-party\n||3omb.com^$third-party\n||3rdads.com^$third-party\n||3redlightfix.com^$third-party\n||3t7euflv.com^$third-party\n||43plc.com^$third-party\n||46.165.197.153^\n||46.165.197.231^\n||46.246.120.230^$third-party,domain=~adexprt.com.ip\n||4affiliate.net^$third-party\n||4dsply.com^$third-party\n||4e43ac9c.info^$third-party\n||4uvjosuc.com^$third-party\n||4wnet.com^$third-party\n||50.7.243.123^$third-party\n||5362367e.info^$third-party\n||5clickcashsoftware.com^$third-party\n||5gl1x9qc.com^$third-party\n||600z.com^$third-party\n||62.27.51.163^$third-party,domain=~adlive.de.ip\n||63.225.61.4^$third-party\n||64.20.60.123^$third-party\n||74.117.182.77^\n||777seo.com^$third-party\n||78.138.126.253^$third-party\n||78.140.131.214^\n||7insight.com^$third-party\n||7search.com^$third-party\n||7u8a8i88.com^$third-party\n||82d914.se^$third-party\n||87.230.102.24^$third-party,domain=~p2p.adserver.ip\n||888media.net^$third-party\n||888medianetwork.com^$third-party\n||888promos.com^$third-party\n||8yxupue8.com^$third-party\n||97d73lsi.com^$third-party\n||9ts3tpia.com^$third-party\n||a-ads.com^$third-party\n||a-static.com^$third-party\n||a.raasnet.com^$third-party\n||a2dfp.net^$third-party\n||a2pub.com^$third-party\n||a3pub.com^$third-party\n||a433.com^$third-party\n||a4dtrk.com^$third-party\n||a5pub.com^$third-party\n||aa.voice2page.com^$third-party\n||aaa.at4.info^$third-party\n||aaa.dv0.info^$third-party\n||abletomeet.com^$third-party\n||abnad.net^$third-party\n||aboutads.quantcast.com^$third-party\n||abtracker.us^$third-party\n||accelacomm.com^$third-party\n||access-mc.com^$third-party\n||accmgr.com^$third-party\n||accounts.pkr.com^$third-party\n||accuserveadsystem.com^$third-party\n||acf-webmaster.net^$third-party\n||acronym.com^$third-party\n||actiondesk.com^$third-party\n||activedancer.com^$third-party\n||ad-back.net^$third-party\n||ad-balancer.net^$third-party\n||ad-bay.com^$third-party\n||ad-clicks.com^$third-party\n||ad-delivery.net^$third-party\n||ad-flow.com^$third-party\n||ad-gbn.com^$third-party\n||ad-indicator.com^$third-party\n||ad-m.asia^$third-party\n||ad-maven.com^$third-party\n||ad-media.org^$third-party\n||ad-server.co.za^$third-party\n||ad-serverparc.nl^$third-party\n||ad-sponsor.com^$third-party\n||ad-srv.net^$third-party\n||ad-stir.com^$third-party\n||ad-vice.biz^$third-party\n||ad.atdmt.com/i/a.html$third-party\n||ad.atdmt.com/i/a.js$third-party\n||ad.doubleclick.net^$~object-subrequest,third-party\n||ad.mo.doubleclick.net/dartproxy/$third-party\n||ad.yieldpartners.com^$third-party\n||ad120m.com^$third-party\n||ad121m.com^$third-party\n||ad122m.com^$third-party\n||ad123m.com^$third-party\n||ad125m.com^$third-party\n||ad127m.com^$third-party\n||ad128m.com^$third-party\n||ad129m.com^$third-party\n||ad131m.com^$third-party\n||ad132m.com^$third-party\n||ad134m.com^$third-party\n||ad20.net^$third-party\n||ad2387.com^$third-party\n||ad2adnetwork.biz^$third-party\n||ad2games.com^$third-party,domain=~jobvite.com\n||ad2up.com^$third-party\n||ad4game.com^$third-party\n||ad6media.fr^$third-party\n||adacado.com^$third-party\n||adaction.se^$third-party\n||adadvisor.net^$third-party\n||adagora.com^$third-party\n||adaos-ads.net^$third-party\n||adap.tv^$~object-subrequest,third-party\n||adapd.com^$third-party\n||adbard.net^$third-party\n||adbasket.net^$third-party\n||adblade.com^$third-party\n||adboost.com^$third-party\n||adbooth.net^$third-party\n||adbrau.com^$third-party\n||adbrite.com^$third-party\n||adbroo.com^$third-party\n||adbull.com^$third-party\n||adbureau.net^$third-party\n||adbutler.com^$third-party\n||adbuyer.com^$third-party\n||adcade.com^$third-party\n||adcash.com^$third-party\n||adcastplus.net^$third-party\n||adcde.com^$third-party\n||adcdnx.com^$third-party\n||adcentriconline.com^$third-party\n||adcfrthyo.tk^$third-party\n||adchap.com^$third-party\n||adchemical.com^$third-party\n||adchoice.co.za^$third-party\n||adclick.lv^$third-party\n||adclick.pk^$third-party\n||adclickafrica.com^$third-party\n||adclickmedia.com^$third-party\n||adcloud.net^$third-party\n||adcolo.com^$third-party\n||adcount.in^$third-party\n||adcron.com^$third-party\n||adcru.com^$third-party\n||addaim.com^$third-party\n||addelive.com^$third-party\n||addiply.com^$third-party\n||addoer.com^$third-party\n||addroid.com^$third-party\n||addynamics.eu^$third-party\n||addynamix.com^$third-party\n||addynamo.net^$third-party\n||adecn.com^$third-party\n||adedy.com^$third-party\n||adelement.com^$third-party\n||ademails.com^$third-party\n||adengage.com^$third-party\n||adespresso.com^$third-party\n||adexcite.com^$third-party\n||adexprt.com^$third-party\n||adexprts.com^$third-party\n||adextent.com^$third-party\n||adf01.net^$third-party\n||adfactory88.com^$third-party\n||adfeedstrk.com^$third-party\n||adfootprints.com^$third-party\n||adforgames.com^$third-party\n||adforgeinc.com^$third-party\n||adform.net^$third-party\n||adframesrc.com^$third-party\n||adfrika.com^$third-party\n||adfrog.info^$third-party\n||adfrontiers.com^$third-party\n||adfunkyserver.com^$third-party\n||adfusion.com^$third-party\n||adgalax.com^$third-party\n||adgardener.com^$third-party\n||adgatemedia.com^$third-party\n||adgear.com^$third-party\n||adgebra.co.in^$third-party\n||adgent007.com^$third-party\n||adgila.com^$third-party\n||adgine.net^$third-party\n||adgitize.com^$third-party\n||adglamour.net^$third-party\n||adgorithms.com^$third-party\n||adgoto.com^$third-party\n||adgroups.com^$third-party\n||adgrx.com^$third-party\n||adhese.be^$third-party\n||adhese.com^$third-party\n||adhese.net^$third-party\n||adhitzads.com^$third-party\n||adhostingsolutions.com^$third-party\n||adhub.co.nz^$third-party\n||adicate.com^$third-party\n||adigniter.org^$third-party\n||adimise.com^$third-party\n||adimpact.com^$third-party\n||adimperia.com^$third-party\n||adimpression.net^$third-party\n||adinch.com^$third-party\n||adincon.com^$third-party\n||adindigo.com^$third-party\n||adinfinity.com.au^$third-party\n||adinterax.com^$third-party\n||adip.ly^$third-party\n||adiqglobal.com^$third-party\n||adireland.com^$third-party\n||adisfy.com^$third-party\n||adisn.com^$third-party\n||adition.com^$third-party\n||adjal.com^$third-party\n||adjector.com^$third-party\n||adjug.com^$third-party\n||adjuggler.com^$third-party\n||adjuggler.net^$third-party\n||adjungle.com^$third-party\n||adk2.co^$third-party\n||adk2.com^$third-party\n||adkengage.com^$third-party\n||adkick.net^$third-party\n||adklip.com^$third-party\n||adknowledge.com^$third-party\n||adkonekt.com^$third-party\n||adlayer.net^$third-party\n||adlegend.com^$third-party\n||adlink.net^$third-party\n||adlinx.info^$third-party\n||adlisher.com^$third-party\n||adloaded.com^$third-party\n||adlooxtracking.com^$third-party\n||adlure.biz^$third-party\n||adlux.com^$third-party\n||adm.fwmrm.net/crossdomain.xml$domain=cc.com|mtv.com\n||adm.fwmrm.net/p/msnbc_live/$object-subrequest,third-party,domain=~msnbc.msn.com|~www.nbcnews.com\n||adm.fwmrm.net/p/mtvn_live/$object-subrequest,third-party\n||admagnet.net^$third-party\n||admailtiser.com^$third-party\n||admamba.com^$third-party\n||adman.gr^$third-party\n||admanage.com^$third-party\n||admarketplace.net^$third-party\n||admaxim.com^$third-party\n||admaya.in^$third-party\n||admedia.com^$third-party\n||admedias.net^$third-party\n||admeld.com^$third-party\n||admeta.com^$third-party\n||admission.net^$third-party\n||admitad.com^$third-party\n||admixer.net^$third-party\n||admngronline.com^$third-party\n||admpads.com^$third-party\n||admulti.com^$third-party\n||admzn.com^$third-party\n||adne.tv^$third-party\n||adnectar.com^$third-party\n||adnet-media.net^$third-party\n||adnet.biz^$third-party\n||adnet.com^$third-party\n||adnet.de^$third-party\n||adnet.lt^$third-party\n||adnet.ru^$third-party\n||adnet.vn^$third-party\n||adnetworkme.com^$third-party\n||adnext.fr^$third-party\n||adngin.com^$third-party\n||adnimation.com^$third-party\n||adnoble.com^$third-party\n||adnxs.com^$third-party\n||adnxs.net^$third-party\n||adnxs1.com^$third-party\n||adocean.pl^$third-party\n||adonion.com^$third-party\n||adonly.com^$third-party\n||adonweb.ru^$third-party\n||adoperator.com^$third-party\n||adoptim.com^$third-party\n||adorika.com^$third-party\n||adorika.net^$third-party\n||adotic.com^$third-party\n||adotomy.com^$third-party\n||adotube.com^$third-party\n||adpacks.com^$third-party\n||adparlor.com^$third-party\n||adpath.mobi^$third-party\n||adpay.com^$third-party\n||adperfect.com^$third-party\n||adperium.com^$third-party\n||adphreak.com^$third-party\n||adpinion.com^$third-party\n||adpionier.de^$third-party\n||adplans.info^$third-party\n||adplxmd.com^$third-party\n||adppv.com^$third-party\n||adpremo.com^$third-party\n||adprofit2share.com^$third-party\n||adproper.info^$third-party\n||adprotected.com^$third-party\n||adprovi.de^$third-party\n||adprs.net^$third-party\n||adquest3d.com^$third-party\n||adready.com^$third-party\n||adreadytractions.com^$third-party\n||adresellers.com^$third-party\n||adrevolver.com^$third-party\n||adrich.cash^$third-party\n||adrise.de^$third-party\n||adrocket.com^$third-party\n||adroll.com^$third-party\n||ads-elsevier.net^$third-party\n||ads-stats.com^$third-party\n||ads01.com^$third-party\n||ads2ads.net^$third-party\n||ads2srv.com^$third-party\n||ads4cheap.com^$third-party\n||adsafeprotected.com^$third-party\n||adsalvo.com^$third-party\n||adsame.com^$third-party\n||adsbookie.com^$third-party\n||adsbrook.com^$third-party\n||adscale.de^$third-party\n||adscampaign.net^$third-party\n||adscendmedia.com^$third-party\n||adsclickingnetwork.com^$third-party\n||adsdk.com^$third-party\n||adsdot.ph^$third-party\n||adsensecamp.com^$third-party\n||adserv8.com^$third-party\n||adserve.com^$third-party\n||adserve.ph^$third-party\n||adserver-fx.com^$third-party\n||adserverplus.com^$third-party\n||adserverpub.com^$third-party\n||adservinginternational.com^$third-party\n||adservpi.com^$third-party\n||adservr.de^$third-party\n||adsfac.eu^$third-party\n||adsfac.net^$third-party\n||adsfac.us^$third-party\n||adsfactor.net^$third-party\n||adsfast.com^$third-party\n||adsforindians.com^$third-party\n||adsfundi.com^$third-party\n||adsfundi.net^$third-party\n||adsfuse.com^$third-party\n||adshack.com^$third-party\n||adshexa.com^$third-party\n||adshopping.com^$third-party\n||adshost1.com^$third-party\n||adshost2.com^$third-party\n||adshot.de^$third-party\n||adshuffle.com^$third-party\n||adsignals.com^$third-party\n||adsimilis.com^$third-party\n||adsinimages.com^$third-party\n||adskeeper.co.uk^$third-party\n||adslidango.com^$third-party\n||adslingers.com^$third-party\n||adslot.com^$third-party\n||adsmarket.com^$third-party\n||adsmarket.es^$third-party\n||adsmedia.cc^$third-party\n||adsmile.biz^$third-party\n||adsmoon.com^$third-party\n||adsmws.cloudapp.net^$third-party\n||adsnative.com^$third-party\n||adsnext.net^$third-party\n||adsniper.ru^$third-party\n||adsonar.com^$third-party\n||adsopx.com^$third-party\n||adsovo.com^$third-party\n||adspaper.org^$third-party\n||adspdbl.com^$third-party\n||adspeed.com^$third-party\n||adspirit.de^$third-party\n||adspring.to^$third-party\n||adspruce.com^$third-party\n||adspynet.com^$third-party\n||adsrevenue.net^$third-party\n||adsring.com^$third-party\n||adsrv.us^$third-party\n||adsrvmedia.com^$third-party\n||adsrvmedia.net^$third-party\n||adsrvr.org^$third-party\n||adssites.net^$third-party\n||adstatic.com^$third-party\n||adsummos.net^$third-party\n||adsupermarket.com^$third-party\n||adsupply.com^$third-party\n||adsurve.com^$third-party\n||adsvert.com^$third-party\n||adswizz.com^$third-party\n||adsxgm.com^$third-party\n||adsymptotic.com^$third-party\n||adtaily.com^$third-party\n||adtaily.eu^$third-party\n||adtaily.pl^$third-party\n||adtdp.com^$third-party\n||adtecc.com^$third-party\n||adtech.de^$third-party\n||adtechus.com^$third-party\n||adtegrity.net^$third-party\n||adteractive.com^$third-party\n||adtgs.com^$third-party\n||adtlgc.com^$third-party\n||adtoadd.com^$third-party\n||adtoll.com^$third-party\n||adtology1.com^$third-party\n||adtology2.com^$third-party\n||adtology3.com^$third-party\n||adtoma.com^$third-party\n||adtomafusion.com^$third-party\n||adtoox.com^$third-party\n||adtotal.pl^$third-party\n||adtpix.com^$third-party\n||adtrace.org^$third-party\n||adtransfer.net^$third-party\n||adtrgt.com^$third-party\n||adtrix.com^$third-party\n||adtrovert.com^$third-party\n||adtruism.com^$third-party\n||adtwirl.com^$third-party\n||aduacni.com^$third-party\n||adult-adv.com^$third-party\n||adultadworld.com^$third-party\n||adultimate.net^$third-party\n||adulttds.com^$third-party\n||adurr.com^$third-party\n||adv-adserver.com^$third-party\n||adv9.net^$third-party\n||advanseads.com^$third-party\n||advantageglobalmarketing.com^$third-party\n||advard.com^$third-party\n||advatar.to^$third-party\n||adventori.com^$third-party\n||adversal.com^$third-party\n||adversaldisplay.com^$third-party\n||adversalservers.com^$third-party\n||adverserve.net^$third-party\n||advertarium.com.ua^$third-party\n||advertbox.us^$third-party\n||adverteerdirect.nl^$third-party\n||adverticum.net^$third-party\n||advertise.com^$third-party\n||advertiseforfree.co.za^$third-party\n||advertisegame.com^$third-party\n||advertisespace.com^$third-party\n||advertiseyourgame.com^$third-party\n||advertising-department.com^$third-party\n||advertising.com^$third-party\n||advertising365.com^$third-party\n||advertisingiq.com^$third-party\n||advertisingpath.net^$third-party\n||advertisingvalue.info^$third-party\n||advertjunction.com^$third-party\n||advertlead.net^$third-party\n||advertlets.com^$third-party\n||advertmarketing.com^$third-party\n||advertmedias.com^$third-party\n||advertpay.net^$third-party\n||advertrev.com^$third-party\n||advertserve.com^$third-party\n||advertstatic.com^$third-party\n||advertstream.com^$third-party\n||advertur.ru^$third-party\n||advertxi.com^$third-party\n||advg.jp^$third-party\n||advgoogle.com^$third-party\n||adviva.net^$third-party\n||advmd.com^$third-party\n||advmedialtd.com^$third-party\n||advombat.ru^$third-party\n||advpoints.com^$third-party\n||advrtice.com^$third-party\n||advsnx.net^$third-party\n||adwires.com^$third-party\n||adwordsservicapi.com^$third-party\n||adworkmedia.com^$third-party\n||adworldmedia.com^$third-party\n||adworldmedia.net^$third-party\n||adxcore.com^$third-party\n||adxion.com^$third-party\n||adxpose.com^$third-party\n||adxpower.com^$third-party\n||adyoulike.com^$third-party\n||adyoz.com^$third-party\n||adz.co.zw^$third-party\n||adzerk.net^$third-party\n||adzhub.com^$third-party\n||adzonk.com^$third-party\n||adzouk.com^$third-party\n||adzs.nl^$third-party\n||afcyhf.com^$third-party\n||afdads.com^$third-party\n||aff.biz^$third-party\n||affbot1.com^$third-party\n||affbot3.com^$third-party\n||affbot7.com^$third-party\n||affbot8.com^$third-party\n||affbuzzads.com^$third-party\n||affec.tv^$third-party\n||affiliate-b.com^$third-party\n||affiliate-gate.com^$third-party\n||affiliate-robot.com^$third-party\n||affiliate.com^$third-party\n||affiliate.cx^$third-party\n||affiliatebannerfarm.com^$third-party\n||affiliateedge.com^$third-party\n||affiliateer.com^$third-party\n||affiliatefuel.com^$third-party\n||affiliatefuture.com^$third-party\n||affiliategateways.co^$third-party\n||affiliategroove.com^$third-party\n||affiliatelounge.com^$third-party\n||affiliatemembership.com^$third-party\n||affiliatesensor.com^$third-party\n||affiliation-france.com^$third-party\n||affiliationcash.com^$third-party\n||affiliationworld.com^$third-party\n||affiliationzone.com^$third-party\n||affilijack.de^$third-party\n||affiliproducts.com^$third-party\n||affiliserve.com^$third-party\n||affimo.de^$third-party\n||affinitad.com^$third-party\n||affinity.com^$third-party\n||affiz.net^$third-party\n||affplanet.com^$third-party\n||afftrack.com^$third-party\n||aflrm.com^$third-party\n||africawin.com^$third-party\n||afterdownload.com^$third-party\n||afterdownloads.com^$third-party\n||afy11.net^$third-party\n||agcdn.com^$third-party\n||agentcenters.com^$third-party\n||aggregateknowledge.com^$third-party\n||aglocobanners.com^$third-party\n||agmtrk.com^$third-party\n||agvzvwof.com^$third-party\n||aim4media.com^$third-party\n||aimatch.com^$third-party\n||ajansreklam.net^$third-party\n||alchemysocial.com^$third-party\n||alfynetwork.com^$third-party\n||alimama.com^$third-party\n||allabc.com^$third-party\n||alleliteads.com^$third-party\n||allmt.com^$third-party\n||alloydigital.com^$third-party\n||allyes.com^$third-party\n||alphabird.com^$third-party\n||alphabirdnetwork.com^$third-party\n||alphagodaddy.com^$third-party\n||alternads.info^$third-party\n||alternativeadverts.com^$third-party\n||altitude-arena.com^$third-party\n||am-display.com^$third-party\n||am10.ru^$third-party\n||am11.ru^$third-party\n||am15.net^$third-party\n||amazon-adsystem.com^$third-party\n||amazon-cornerstone.com^$third-party\n||amazonily.com^$third-party\n||amertazy.com^$third-party\n||amgdgt.com^$third-party\n||ampxchange.com^$third-party\n||anastasiasaffiliate.com^$third-party\n||andohs.net^$third-party\n||andomedia.com^$third-party\n||andomediagroup.com^$third-party\n||angege.com^$third-party\n||anonymousads.com^$third-party\n||anrdoezrs.net^$third-party\n||anwufkjjja.com^$third-party\n||anymedia.lv^$third-party\n||anyxp.com^$third-party\n||aoqneyvmaz.com^$third-party\n||aorms.com^$third-party\n||aorpum.com^$third-party\n||apex-ad.com^$third-party\n||apmebf.com^$third-party\n||appendad.com^$third-party\n||applebarq.com^$third-party\n||apptap.com^$third-party\n||april29-disp-download.com^$third-party\n||apsmediaagency.com^$third-party\n||apxlv.com^$third-party\n||arab4eg.com^$third-party\n||arabweb.biz^$third-party\n||arcadebannerexchange.net^$third-party\n||arcadebannerexchange.org^$third-party\n||arcadebanners.com^$third-party\n||arcadebe.com^$third-party\n||arcadechain.com^$third-party\n||areasnap.com^$third-party\n||arti-mediagroup.com^$third-party\n||as5000.com^$third-party\n||asafesite.com^$third-party\n||aseadnet.com^$third-party\n||asklots.com^$third-party\n||asooda.com^$third-party\n||asrety.com^$third-party\n||assetize.com^$third-party\n||assoc-amazon.ca^$third-party\n||assoc-amazon.co.uk^$third-party\n||assoc-amazon.com^$third-party\n||assoc-amazon.de^$third-party\n||assoc-amazon.es^$third-party\n||assoc-amazon.fr^$third-party\n||assoc-amazon.it^$third-party\n||asterpix.com^$third-party\n||astree.be^$third-party\n||atemda.com^$third-party\n||atmalinks.com^$third-party\n||ato.mx^$third-party\n||atomex.net^$third-party\n||atrinsic.com^$third-party\n||atwola.com^$third-party\n||au2m8.com^$third-party\n||auctionnudge.com^$third-party\n||audience2media.com^$third-party\n||audiencefuel.com^$third-party\n||audienceprofiler.com^$third-party\n||auditude.com^$third-party\n||aunmdhxrco.com^$third-party\n||auspipe.com^$third-party\n||auto-im.com^$third-party\n||auto-insurance-quotes-compare.com^$third-party\n||automatedtraffic.com^$third-party\n||automateyourlist.com^$third-party\n||avads.co.uk^$third-party\n||avalanchers.com^$third-party\n||avazu.net^$third-party\n||avazutracking.net^$third-party\n||avercarto.com^$third-party\n||awaps.net^$third-party\n||awempire.com^$third-party\n||awin1.com^$third-party\n||awltovhc.com^$third-party\n||awsmer.com^$third-party\n||awsurveys.com^$third-party\n||axill.com^$third-party\n||ayboll.com^$third-party\n||azads.com^$third-party\n||azjmp.com^$third-party\n||azoogleads.com^$third-party\n||azorbe.com^$third-party\n||b117f8da23446a91387efea0e428392a.pl^$third-party\n||b6508157d.website^$third-party\n||babbnrs.com^$third-party\n||backbeatmedia.com^$third-party\n||backlinks.com^$third-party\n||badjocks.com^$third-party\n||baldiro.de^$third-party\n||bananaflippy.com^$third-party\n||banner-clix.com^$third-party\n||banner-rotation.com^$third-party\n||bannerbank.ru^$third-party\n||bannerblasters.com^$third-party\n||bannerbridge.net^$third-party\n||bannercde.com^$third-party\n||bannerconnect.com^$third-party\n||bannerconnect.net^$third-party\n||bannerdealer.com^$third-party\n||bannerexchange.com.au^$third-party\n||bannerflow.com^$third-party\n||bannerflux.com^$third-party\n||bannerignition.co.za^$third-party\n||bannerjammers.com^$third-party\n||bannerlot.com^$third-party\n||bannerperformance.net^$third-party\n||bannerrage.com^$third-party\n||bannersmania.com^$third-party\n||bannersnack.com^$third-party\n||bannersnack.net^$third-party\n||bannersurvey.biz^$third-party\n||bannertgt.com^$third-party\n||bannertracker-script.com^$third-party\n||bannerweb.com^$third-party\n||baronsoffers.com^$third-party\n||bbelements.com^$third-party\n||beaconads.com^$third-party\n||beatchucknorris.com^$third-party\n||beead.co.uk^$third-party\n||beead.net^$third-party\n||beforescence.com^$third-party\n||begun.ru^$third-party\n||belointeractive.com^$third-party\n||belvertising.be^$third-party\n||bentdownload.com^$third-party\n||bepolite.eu^$third-party\n||beringmedia.com^$third-party\n||bestcasinopartner.com^$third-party\n||bestdeals.ws^$third-party\n||bestfindsite.com^$third-party\n||bestforexpartners.com^$third-party\n||bestgameads.com^$third-party\n||besthitsnow.com^$third-party\n||bestofferdirect.com^$third-party\n||bestonlinecoupons.com^$third-party\n||bet3000partners.com^$third-party\n||bet365affiliates.com^$third-party\n||betaffs.com^$third-party\n||betrad.com^$third-party\n||bettingpartners.com^$third-party\n||bfast.com^$third-party\n||bh3.net^$third-party\n||bidgewatr.com^$third-party\n||bidsystem.com^$third-party\n||bidvertiser.com^$third-party\n||biemedia.com^$third-party\n||bigadpoint.net^$third-party\n||bigfineads.com^$third-party\n||bijscode.com^$third-party\n||bimlocal.com^$third-party\n||bin-layer.de^$third-party\n||bin-layer.ru^$third-party\n||binaryoptionssystems.org^$third-party\n||bingo4affiliates.com^$third-party\n||binlayer.com^$third-party\n||binlayer.de^$third-party\n||bitads.net^$third-party\n||bitcoinadvertisers.com^$third-party\n||bitfalcon.tv^$third-party\n||bittads.com^$third-party\n||bitx.tv^$third-party\n||bizographics.com^$third-party\n||bizrotator.com^$third-party\n||bizzclick.com^$third-party\n||blamads.com^$third-party\n||blamcity.com^$third-party\n||blardenso.com^$third-party\n||blinkadr.com^$third-party\n||blogads.com^$third-party\n||blogbannerexchange.com^$third-party\n||blogclans.com^$third-party\n||bloggerex.com^$third-party\n||blogherads.com^$third-party\n||blogohertz.com^$third-party\n||blueadvertise.com^$third-party\n||bluestreak.com^$third-party\n||blumi.to^$third-party\n||bmanpn.com^$third-party\n||bnetworx.com^$third-party\n||bnmla.com^$third-party\n||bnr.sys.lv^$third-party\n||bogads.com^$third-party\n||bonusfapturbo.com^$third-party\n||boo-box.com^$third-party\n||booklandonline.info^$third-party\n||boostclic.com^$third-party\n||bormoni.ru^$third-party\n||bororas.com^$third-party\n||boydadvertising.co.uk^$third-party\n||boylesportsreklame.com^$third-party\n||bptracking.com^$third-party\n||br.rk.com^$third-party\n||brainient.com^$third-party\n||branchr.com^$third-party\n||brand-display.com^$third-party\n||brand.net^$third-party\n||brandaffinity.net^$third-party\n||brandclik.com^$third-party\n||brandreachsys.com^$third-party\n||bravenetmedianetwork.com^$third-party\n||breadpro.com^$third-party\n||brealtime.com^$third-party\n||bridgetrack.com^$third-party\n||brighteroption.com^$third-party\n||brightshare.com^$third-party\n||broadstreetads.com^$third-party\n||brucelead.com^$third-party\n||bstrtb.com^$third-party\n||btnibbler.com^$third-party\n||btrll.com^$third-party\n||bttbgroup.com^$third-party\n||bu520.com^$third-party\n||bubblesmedia.ru^$third-party\n||bucketsofbanners.com^$third-party\n||budurl.com^$third-party\n||buildtrafficx.com^$third-party\n||bunchofads.com^$third-party\n||bunny-net.com^$third-party\n||burbanked.info^$third-party\n||burjam.com^$third-party\n||burnsoftware.info^$third-party\n||burstnet.com^$third-party\n||businesscare.com^$third-party\n||businessclick.com^$third-party\n||busterzaster.de^$third-party\n||buxflow.com^$third-party\n||buxp.org^$third-party\n||buyflood.com^$third-party\n||buyorselltnhomes.com^$third-party\n||buysellads.com^$third-party\n||buzzcity.net^$third-party\n||buzzparadise.com^$third-party\n||bwinpartypartners.com^$third-party\n||byspot.com^$third-party\n||byzoo.org^$third-party\n||c-on-text.com^$third-party\n||c-planet.net^$third-party\n||c8.net.ua^$third-party\n||camleyads.info^$third-party\n||campanja.com^$third-party\n||canoeklix.com^$third-party\n||capacitygrid.com^$third-party\n||capitatmarket.com^$third-party\n||captainad.com^$third-party\n||captifymedia.com^$third-party\n||carambo.la^$third-party\n||carbonads.com^$third-party\n||carrier.bz^$third-party\n||cartorkins.com^$third-party\n||casalemedia.com^$third-party\n||cash-duck.com^$third-party\n||cash4members.com^$third-party\n||cashatgsc.com^$third-party\n||cashmylinks.com^$third-party\n||cashonvisit.com^$third-party\n||cashtrafic.com^$third-party\n||cashtrafic.info^$third-party\n||cashworld.biz^$third-party\n||caspion.com^$third-party\n||casterpretic.com^$third-party\n||castplatform.com^$third-party\n||caygh.com^$third-party\n||cb-content.com^$third-party\n||cbaazars.com^$third-party\n||cbclickbank.com^$third-party\n||cbclicks.com^$third-party\n||cbleads.com^$third-party\n||cbn.tbn.ru^$third-party\n||cc-dt.com^$third-party\n||cdn-image.com^$third-party\n||cdn.mobicow.com^$third-party\n||cdna.tremormedia.com^$third-party\n||cdnads.com^$third-party\n||cdnrl.com^$third-party\n||cdnservr.com^$third-party\n||centralnervous.net^$third-party\n||cerotop.com^$third-party\n||cgecwm.org^$third-party\n||chango.com^$third-party\n||chanished.net^$third-party\n||charltonmedia.com^$third-party\n||checkm8.com^$third-party\n||checkmystats.com.au^$third-party\n||checkoutfree.com^$third-party\n||cherytso.com^$third-party\n||chicbuy.info^$third-party\n||china-netwave.com^$third-party\n||chinagrad.ru^$third-party\n||chipleader.com^$third-party\n||chitika.com^$third-party\n||chitika.net^$third-party\n||chronicads.com^$third-party\n||cibleclick.com^$third-party\n||city-ads.de^$third-party\n||citysite.net^$third-party\n||cjt1.net^$third-party\n||clarityray.com^$third-party\n||clash-media.com^$third-party\n||claxonmedia.com^$third-party\n||clayaim.com^$third-party\n||cleafs.com^$third-party\n||clear-request.com^$third-party\n||clente.com^$third-party\n||clevv.com^$third-party\n||click.scour.com^$third-party\n||click2jump.com^$third-party\n||click4free.info^$third-party\n||clickable.com^$third-party\n||clickad.pl^$third-party\n||clickagy.com^$third-party\n||clickbet88.com^$third-party\n||clickbooth.com^$third-party\n||clickboothlnk.com^$third-party\n||clickbubbles.net^$third-party\n||clickcash.com^$third-party\n||clickcertain.com^$third-party\n||clickequations.net^$third-party\n||clickexa.com^$third-party\n||clickexperts.net^$third-party\n||clickfuse.com^$third-party\n||clickintext.com^$third-party\n||clickintext.net^$third-party\n||clickkingdom.net^$third-party\n||clickmyads.info^$third-party\n||clicknano.com^$third-party\n||clickosmedia.com^$third-party\n||clicks2count.com^$third-party\n||clicksor.com^$third-party\n||clicksor.net^$third-party\n||clicksurvey.mobi^$third-party\n||clickthrucash.com^$third-party\n||clicktripz.com^$third-party\n||clickupto.com^$third-party\n||clickwinks.com^$third-party\n||clickxchange.com^$third-party\n||clixgalore.com^$third-party\n||clixsense.com^$third-party\n||clixtrac.com^$third-party\n||clkrev.com^\n||clnk.me^$third-party\n||cltomedia.info^$third-party\n||clz3.net^$third-party\n||cmfads.com^$third-party\n||cmllk1.info^$third-party\n||cnt.my^$third-party\n||cntdy.mobi^$third-party\n||coadvertise.com^$third-party\n||codezap.com^$third-party\n||codigobarras.net^$third-party\n||coedmediagroup.com^$third-party\n||cogocast.net^$third-party\n||cogsdigital.com^$third-party\n||coguan.com^$third-party\n||coinadvert.net^$third-party\n||collection-day.com^$third-party\n||collective-media.net^$third-party\n||colliersads.com^$third-party\n||comclick.com^$third-party\n||commission-junction.com^$third-party\n||commission.bz^$third-party\n||commissionfactory.com.au^$third-party\n||commissionlounge.com^$third-party\n||commissionmonster.com^$third-party\n||completecarrd.com^$third-party\n||comscore.com^$third-party\n||conduit-banners.com^$third-party\n||connatix.com^$third-party\n||connectedads.net^$third-party\n||connectionads.com^$third-party\n||connexity.net^$third-party\n||connexplace.com^$third-party\n||connextra.com^$third-party\n||construment.com^$third-party\n||consumergenepool.com^$third-party\n||contadd.com^$third-party\n||contaxe.com^$third-party\n||content-cooperation.com^$third-party\n||content.ad^$third-party\n||contentclick.co.uk^$third-party\n||contentdigital.info^$third-party\n||contenture.com^$third-party\n||contentwidgets.net^$third-party\n||contexlink.se^$third-party\n||contextads.net^$third-party\n||contextuads.com^$third-party\n||contextweb.com^$third-party\n||coolerads.com^$third-party\n||coolmirage.com^$third-party\n||copacet.com^$third-party\n||coretarget.co.uk^$third-party\n||cornflip.com^$third-party\n||coull.com^$third-party\n||coupon2buy.com^$third-party\n||covertarget.com^*_*.php\n||cpabeyond.com^$third-party\n||cpaclicks.com^$third-party\n||cpaclickz.com^$third-party\n||cpagrip.com^$third-party\n||cpalead.com^$third-party\n||cpalock.com^$third-party\n||cpanuk.com^$third-party\n||cpaway.com^$third-party\n||cpays.com^$third-party\n||cpcadnet.com^$third-party\n||cpfclassifieds.com^$third-party\n||cpm.biz^$third-party\n||cpmadvisors.com^$third-party\n||cpmaffiliation.com^$third-party\n||cpmleader.com^$third-party\n||cpmmedia.net^$third-party\n||cpmrocket.com^$third-party\n||cpmstar.com^$third-party\n||cpmtree.com^$third-party\n||cpuim.com^$third-party\n||cpulaptop.com^$third-party\n||cpvads.com^$third-party\n||cpvadvertise.com^$third-party\n||cpvmarketplace.info^$third-party\n||cpvtgt.com^$third-party\n||cpx24.com^$third-party\n||cpxadroit.com^$third-party\n||cpxinteractive.com^$third-party\n||crakmedia.com^$third-party\n||crazylead.com^$third-party\n||crazyvideosempire.com^$third-party\n||creative-serving.com^$third-party\n||creditcards15x.tk^$third-party\n||crispads.com^$third-party\n||criteo.com^$third-party\n||criteo.net^$third-party\n||crossrider.com^$third-party\n||crowdgatheradnetwork.com^$third-party\n||crowdgravity.com^$third-party\n||cruiseworldinc.com^$third-party\n||ctasnet.com^$third-party\n||ctm-media.com^$third-party\n||ctrhub.com^$third-party\n||cubics.com^$third-party\n||cuelinks.com^$third-party\n||curancience.com^$third-party\n||currentlyobsessed.me^$third-party\n||curtisfrierson.com^$third-party\n||cybmas.com^$third-party\n||cygnus.com^$third-party\n||d.m3.net^$third-party\n||d03x2011.com^$third-party\n||d1110e4.se^$third-party\n||d2ship.com^$third-party\n||da-ads.com^$third-party\n||dadegid.ru^$third-party\n||danitabedtick.net^$third-party\n||dapper.net^$third-party\n||darwarvid.com^$third-party\n||dashboardad.net^$third-party\n||dating-banners.com^$third-party\n||datinggold.com^$third-party\n||dbbsrv.com^$third-party\n||dbclix.com^$third-party\n||dealcurrent.com^$third-party\n||decisionmark.com^$third-party\n||decisionnews.com^$third-party\n||decknetwork.net^$third-party\n||dedicatedmedia.com^$third-party\n||dedicatednetworks.com^$third-party\n||deepmetrix.com^$third-party\n||defaultimg.com^$third-party\n||deguiste.com^$third-party\n||dehtale.ru^$third-party\n||delivery45.com^$third-party\n||delivery47.com^$third-party\n||delivery49.com^$third-party\n||delivery51.com^$third-party\n||deplayer.net^$third-party\n||deployads.com^$third-party\n||derlatas.com^$third-party\n||destinationurl.com^$third-party\n||detroposal.com^$third-party\n||developermedia.com^$third-party\n||deximedia.com^$third-party\n||dexplatform.com^$third-party\n||dgmatix.com^$third-party\n||dgmaustralia.com^$third-party\n||dgmaxinteractive.com^$third-party\n||dhundora.com^$third-party\n||diamondtraff.com^$third-party\n||dianomioffers.co.uk^$third-party\n||digipathmedia.com^$third-party\n||digitrevenue.com^$third-party\n||dinclinx.com^$third-party\n||dipads.net^$~image,third-party\n||directaclick.com^$third-party\n||directile.info^$third-party\n||directile.net^$third-party\n||directleads.com^$third-party\n||directoral.info^$third-party\n||directorym.com^$third-party\n||directrev.com^$third-party\n||directtrack.com^$third-party\n||dispop.com^$third-party\n||districtm.ca^$third-party\n||dl-rms.com^$third-party\n||dmu20vut.com^$third-party\n||dntrck.com^$third-party\n||dollarade.com^$third-party\n||dollarsponsor.com^$third-party\n||domainadvertising.com^$third-party\n||domainbuyingservices.com^$third-party\n||domainsponsor.com^$third-party\n||domdex.com^$third-party\n||doogleonduty.com^$third-party\n||dorenga.com^$third-party\n||dotandad.com^$third-party\n||dotomi.com^$third-party\n||double.net^$third-party\n||doubleclick.com^$third-party\n||doubleclick.net/*/ch_news.com/$third-party\n||doubleclick.net/*/pfadx/lin.$third-party\n||doubleclick.net/ad/$third-party\n||doubleclick.net/adi/$~object-subrequest,third-party\n||doubleclick.net/adj/$~object-subrequest,third-party\n||doubleclick.net/adj/*.collegehumor/sec=videos_originalcontent;$third-party\n||doubleclick.net/adx/$~object-subrequest,third-party\n||doubleclick.net/adx/*.collegehumor/$third-party\n||doubleclick.net/adx/*.NPR.MUSIC/$third-party\n||doubleclick.net/adx/*.NPR/$third-party\n||doubleclick.net/adx/*.ted/$third-party\n||doubleclick.net/adx/CBS.$third-party\n||doubleclick.net/adx/ibs.$third-party\n||doubleclick.net/adx/tsg.$third-party\n||doubleclick.net/adx/wn.loc.$third-party\n||doubleclick.net/adx/wn.nat.$third-party\n||doubleclick.net/crossdomain.xml$object-subrequest,domain=abcnews.go.com\n||doubleclick.net/N2/pfadx/video.*.wsj.com/$third-party\n||doubleclick.net/N2/pfadx/video.allthingsd.com/$third-party\n||doubleclick.net/N2/pfadx/video.marketwatch.com/\n||doubleclick.net/N2/pfadx/video.wsj.com/$third-party\n||doubleclick.net/N3626/pfadx/thehothits.com.au/$third-party\n||doubleclick.net/N4117/pfadx/*.sbs.com.au/$third-party\n||doubleclick.net/N4526/pfadx/*.muzu/$third-party\n||doubleclick.net/N5202/pfadx/cmn_livemixtapes/$third-party\n||doubleclick.net/N5479/pfadx/ctv.$third-party\n||doubleclick.net/N6088/pfadx/ssp.kshb/$third-party\n||doubleclick.net/N6872/pfadx/shaw.mylifetimetv.ca/$third-party\n||doubleclick.net/pfadx/*.ABC.com/$third-party\n||doubleclick.net/pfadx/*.BLIPTV/$third-party\n||doubleclick.net/pfadx/*.ESPN/$third-party\n||doubleclick.net/pfadx/*.MCNONLINE/$third-party\n||doubleclick.net/pfadx/*.MTV-Viacom/$third-party\n||doubleclick.net/pfadx/*.mtvi$third-party\n||doubleclick.net/pfadx/*.muzu/$third-party\n||doubleclick.net/pfadx/*.nbc.com/$third-party\n||doubleclick.net/pfadx/*.NBCUNI.COM/$third-party\n||doubleclick.net/pfadx/*.NBCUNIVERSAL-CNBC/$third-party\n||doubleclick.net/pfadx/*.NBCUNIVERSAL/$third-party\n||doubleclick.net/pfadx/*.reuters/$third-party\n||doubleclick.net/pfadx/*.sevenload.com_$third-party\n||doubleclick.net/pfadx/*.VIACOMINTERNATIONAL/$third-party\n||doubleclick.net/pfadx/*.WALTDISNEYINTERNETGROU/$third-party\n||doubleclick.net/pfadx/*/kidstv/$third-party\n||doubleclick.net/pfadx/*adcat=$third-party\n||doubleclick.net/pfadx/*CBSINTERACTIVE/$third-party\n||doubleclick.net/pfadx/aetn.aetv.shows/$third-party\n||doubleclick.net/pfadx/belo.king5.pre/$third-party\n||doubleclick.net/pfadx/bet.com/$third-party\n||doubleclick.net/pfadx/blp.video/midroll$third-party\n||doubleclick.net/pfadx/bzj.bizjournals/$third-party\n||doubleclick.net/pfadx/cblvsn.nwsd.videogallery/$third-party\n||doubleclick.net/pfadx/CBS.$third-party\n||doubleclick.net/pfadx/ccr.$third-party\n||doubleclick.net/pfadx/comedycentral.$third-party\n||doubleclick.net/pfadx/csn.$third-party\n||doubleclick.net/pfadx/ctv.ctvwatch.ca/$third-party\n||doubleclick.net/pfadx/ctv.muchmusic.com/$third-party\n||doubleclick.net/pfadx/ctv.spacecast/$third-party\n||doubleclick.net/pfadx/ddm.ksl/$third-party\n||doubleclick.net/pfadx/gn.movieweb.com/$third-party\n||doubleclick.net/pfadx/intl.sps.com/$third-party\n||doubleclick.net/pfadx/ltv.wtvr.video/$third-party\n||doubleclick.net/pfadx/mc.channelnewsasia.com^$third-party\n||doubleclick.net/pfadx/miniclip.midvideo/$third-party\n||doubleclick.net/pfadx/miniclip.prevideo/$third-party\n||doubleclick.net/pfadx/muzumain/$third-party\n||doubleclick.net/pfadx/muzuoffsite/$third-party\n||doubleclick.net/pfadx/nbcu.nbc/$third-party\n||doubleclick.net/pfadx/nbcu.nhl.$third-party\n||doubleclick.net/pfadx/nbcu.nhl/$third-party\n||doubleclick.net/pfadx/ndm.tcm/$third-party\n||doubleclick.net/pfadx/nfl.$third-party\n||doubleclick.net/pfadx/ng.videoplayer/$third-party\n||doubleclick.net/pfadx/ssp.kgtv/$third-party\n||doubleclick.net/pfadx/storm.no/$third-party\n||doubleclick.net/pfadx/sugar.poptv/$third-party\n||doubleclick.net/pfadx/tmg.telegraph.$third-party\n||doubleclick.net/pfadx/tmz.video.wb.dart/$third-party\n||doubleclick.net/pfadx/trb.$third-party\n||doubleclick.net/pfadx/ugo.gv.1up/$third-party\n||doubleclick.net/pfadx/video.marketwatch.com/$third-party\n||doubleclick.net/pfadx/video.wsj.com/$third-party\n||doubleclick.net/pfadx/www.tv3.co.nz$third-party\n||doubleclick.net^$third-party,domain=3news.co.nz|92q.com|abc-7.com|addictinggames.com|allbusiness.com|allthingsd.com|bizjournals.com|bloomberg.com|bnn.ca|boom92houston.com|boom945.com|boomphilly.com|break.com|cbc.ca|cbs19.tv|cbs3springfield.com|cbsatlanta.com|cbslocal.com|complex.com|dailymail.co.uk|darkhorizons.com|doubleviking.com|euronews.com|extratv.com|fandango.com|fox19.com|fox5vegas.com|gorillanation.com|hawaiinewsnow.com|hellobeautiful.com|hiphopnc.com|hot1041stl.com|hothiphopdetroit.com|hotspotatl.com|hulu.com|imdb.com|indiatimes.com|indyhiphop.com|ipowerrichmond.com|joblo.com|kcra.com|kctv5.com|ketv.com|koat.com|koco.com|kolotv.com|kpho.com|kptv.com|ksat.com|ksbw.com|ksfy.com|ksl.com|kypost.com|kysdc.com|live5news.com|livestation.com|livestream.com|metro.us|metronews.ca|miamiherald.com|my9nj.com|myboom1029.com|mycolumbusmagic.com|mycolumbuspower.com|myfoxdetroit.com|myfoxorlando.com|myfoxphilly.com|myfoxphoenix.com|myfoxtampabay.com|nbcrightnow.com|neatorama.com|necn.com|neopets.com|news.com.au|news4jax.com|newsone.com|nintendoeverything.com|oldschoolcincy.com|own3d.tv|pagesuite-professional.co.uk|pandora.com|player.theplatform.com|ps3news.com|radio.com|radionowindy.com|rottentomatoes.com|sbsun.com|shacknews.com|sk-gaming.com|ted.com|thebeatdfw.com|theboxhouston.com|theglobeandmail.com|timesnow.tv|tv2.no|twitch.tv|universalsports.com|ustream.tv|wapt.com|washingtonpost.com|wate.com|wbaltv.com|wcvb.com|wdrb.com|wdsu.com|wflx.com|wfmz.com|wfsb.com|wgal.com|whdh.com|wired.com|wisn.com|wiznation.com|wlky.com|wlns.com|wlwt.com|wmur.com|wnem.com|wowt.com|wral.com|wsj.com|wsmv.com|wsvn.com|wtae.com|wthr.com|wxii12.com|wyff4.com|yahoo.com|youtube.com|zhiphopcleveland.com\n||doubleclick.net^*/ad/$~object-subrequest,third-party\n||doubleclick.net^*/adi/$~object-subrequest,third-party\n||doubleclick.net^*/adj/$~object-subrequest,third-party\n||doubleclick.net^*/pfadx/cmn_complextv/$third-party\n||doubleclick.net^*/pfadx/embed.ytpwatch.$third-party\n||doubleclick.net^*/pfadx/ibs.orl.news/$third-party\n||doubleclick.net^*/pfadx/muzumain/$third-party\n||doubleclick.net^*/pfadx/ssp.wews/$third-party\n||doubleclick.net^*/pfadx/team.dal/$third-party\n||doubleclick.net^*/pfadx/team.sd/$third-party\n||doubleclick.net^*;afv_flvurl=http://cdn.c.ooyala.com/$third-party\n||doubleclicks.me^$third-party\n||doublemax.net^$third-party\n||doublepimp.com^$third-party\n||doublerads.com^$third-party\n||doublerecall.com^$third-party\n||doubleverify.com^$third-party\n||down1oads.com^$third-party\n||downsonglyrics.com^$third-party\n||dp25.kr^$third-party\n||dpbolvw.net^$third-party\n||dpmsrv.com^$third-party\n||dpsrexor.com^$third-party\n||dpstack.com^$third-party\n||dreamaquarium.com^$third-party\n||dreamsearch.or.kr^$third-party\n||drowle.com^$third-party\n||dsero.net^$third-party\n||dsnextgen.com^$third-party\n||dsnr-affiliates.com^$third-party\n||dsultra.com^$third-party\n||dt00.net^$third-party,domain=~marketgid.com|~marketgid.ru|~marketgid.ua|~mgid.com|~thechive.com\n||dt07.net^$third-party,domain=~marketgid.com|~marketgid.ru|~marketgid.ua|~mgid.com|~thechive.com\n||dtmpub.com^$third-party\n||dtzads.com^$third-party\n||dualmarket.info^$third-party\n||dudelsa.com^$third-party\n||duetads.com^$third-party\n||dumedia.ru^$third-party\n||durnowar.com^$third-party\n||durtz.com^$third-party\n||dvaminusodin.net^$third-party\n||dyino.com^$third-party\n||dynamicoxygen.com^$third-party\n||dynamitedata.com^$third-party\n||e-find.co^$third-party\n||e-generator.com^$third-party\n||e-planning.net^$third-party\n||e-viral.com^$third-party\n||e9mlrvy1.com^$third-party\n||eads-adserving.com^$third-party\n||eads.to^$third-party\n||easy-adserver.com^$third-party\n||easyad.com^$third-party\n||easydownload4you.com^$third-party\n||easyflirt-partners.biz^$third-party\n||easyhits4u.com^$third-party\n||easyinline.com^$third-party\n||ebannertraffic.com^$third-party\n||ebayobjects.com.au^$third-party\n||ebayobjects.com^$third-party\n||eblastengine.com^$third-party\n||ebuzzing.com^$third-party\n||ebz.io^$third-party\n||edgeads.org^$third-party\n||edgevertise.com^$third-party\n||edomz.net^$third-party\n||eedr.org^$third-party\n||effectivemeasure.net^$third-party\n||egamingonline.com^$third-party\n||ekmas.com^$third-party\n||ektezis.ru^$third-party\n||elasticad.net^$third-party\n||electnext.com^$third-party\n||elefantsearch.com^$third-party\n||elvate.net^$third-party\n||emberads.com^$third-party\n||emediate.ch^$third-party\n||emediate.dk^$third-party\n||emediate.eu^$third-party\n||emediate.se^$third-party\n||emjcd.com^$third-party\n||empiremoney.com^$third-party\n||employers-freshly.org^$third-party\n||emptyspaceads.com^$third-party\n||engineseeker.com^$third-party\n||enlnks.com^$third-party\n||enterads.com^$third-party\n||entrecard.com^$third-party\n||entrecard.s3.amazonaws.com^$third-party\n||epicgameads.com^$third-party\n||epnredirect.ru^$third-party\n||eptord.com^$third-party\n||eptum.com^$third-party\n||erado.org^$third-party\n||erendri.com^$third-party\n||ergerww.net^$third-party\n||ergodob.ru^$third-party\n||ero-advertising.com^$third-party\n||erovation.com^$third-party\n||erovinmo.com^$third-party\n||escalatenetwork.com^$third-party\n||escale.to^$third-party\n||especifican.com^$third-party\n||essayads.com^$third-party\n||essaycoupons.com^$third-party\n||etargetnet.com^$third-party\n||etgdta.com^$third-party\n||etmanly.ru^$third-party\n||etology.com^$third-party\n||eurew.com^$third-party\n||euroclick.com^$third-party\n||europacash.com^$third-party\n||euros4click.de^$third-party\n||evolvenation.com^$third-party\n||exactdrive.com^$third-party\n||excellenceads.com^$third-party\n||exchange4media.com^$third-party\n||exitexplosion.com^$third-party\n||exitjunction.com^$third-party\n||exoclick.com^$third-party\n||exponential.com^$third-party\n||expresswebtraffic.com^$third-party\n||extra33.com^$third-party\n||eyere.com^$third-party\n||eyereturn.com^$third-party\n||eyeviewads.com^$third-party\n||eyewond.hs.llnwd.net^$third-party\n||eyewonder.com^$third-party\n||ezadserver.net^$third-party\n||ezmob.com^$third-party\n||ezoic.net^$third-party\n||fairadsnetwork.com^$third-party\n||falkag.net^$third-party\n||fast2earn.com^$third-party\n||fastapi.net^$third-party\n||fastates.net^$third-party\n||fastclick.net^$third-party\n||fasttracktech.biz^$third-party\n||fb-plus.com^$third-party\n||fbgdc.com^$third-party\n||fbsvu.com^$third-party\n||featuredusers.com^$third-party\n||featurelink.com^$third-party\n||feed-ads.com^$third-party\n||feljack.com^$third-party\n||fenixm.com^$third-party\n||fidel.to^$third-party\n||filetarget.com^$third-party\n||filtermomosearch.com^$third-party\n||fimserve.com^$third-party\n||find-abc.com^$third-party\n||find-cheap-hotels.org^$third-party\n||findbestsolution.net^$third-party\n||findsthat.com^$third-party\n||firaxtech.com^$third-party\n||firefeeder.com^$third-party\n||firegob.com^$third-party\n||firmharborlinked.com^$third-party\n||first-rate.com^$third-party\n||firstadsolution.com^$third-party\n||firstimpression.io^$third-party\n||firstlightera.com^$third-party\n||fixionmedia.com^$third-party\n||fl-ads.com^$third-party\n||flagads.net^$third-party\n||flashclicks.com^$third-party\n||flashtalking.com^$third-party\n||fliionos.co.uk^$third-party\n||flite.com^$third-party\n||fllwert.net^$third-party\n||flodonas.com^$third-party\n||fluidads.co^$third-party\n||fluxads.com^$third-party\n||flyertown.ca^$third-party\n||flymyads.com^$third-party\n||fmpub.net^$third-party\n||fmsads.com^$third-party\n||focalex.com^$third-party\n||foodieblogroll.com^$third-party\n||foonad.com^$third-party\n||footar.com^$third-party\n||footerslideupad.com^$third-party\n||footnote.com^$third-party\n||forced-lose.de^$third-party\n||forex-affiliate.com^$third-party\n||forex-affiliate.net^$third-party\n||forexyard.com^$third-party\n||forifiha.com^$third-party\n||forpyke.com^$third-party\n||forrestersurveys.com^$third-party\n||frameptp.com^$third-party\n||freebannerswap.co.uk^$third-party\n||freebiesurveys.com^$third-party\n||freecouponbiz.com^$third-party\n||freedownloadsoft.net^$third-party\n||freepaidsurveyz.com^$third-party\n||freerotator.com^$third-party\n||freeskreen.com^$third-party\n||freesoftwarelive.com^$third-party\n||friendlyduck.com^$third-party\n||fruitkings.com^$third-party\n||ftjcfx.com^$third-party\n||ftv-publicite.fr^$third-party\n||fulltraffic.net^$third-party\n||funklicks.com^$third-party\n||fusionads.net^$third-party\n||futureresiduals.com^$third-party\n||futureus.com^$third-party\n||fwmrm.net^$~object-subrequest,third-party\n||fxdepo.com^$third-party\n||fxyc0dwa.com^$third-party\n||g-cash.biz^$third-party\n||g4whisperermedia.com^$third-party\n||gagacon.com^$third-party\n||gagenez.com^$third-party\n||gainmoneyfast.com^$third-party\n||galleyn.com^$third-party\n||gambling-affiliation.com^$third-party\n||game-advertising-online.com^$third-party\n||game-clicks.com^$third-party\n||gameads.com^$third-party\n||gamecetera.com^$third-party\n||gamehotus.com^$third-party\n||gamersad.com^$third-party\n||gamersbanner.com^$third-party\n||gamesbannerexchange.com^$third-party\n||gamesrevenue.com^$third-party\n||gan.doubleclick.net^$third-party\n||gandrad.org^$third-party\n||gannett.gcion.com^$third-party\n||garristo.com^$third-party\n||garvmedia.com^$third-party\n||gate-ru.com^$third-party\n||gatikus.com^$third-party\n||gayadnetwork.com^$third-party\n||geek2us.net^$third-party\n||gefhasio.com^$third-party\n||geld-internet-verdienen.net^$third-party\n||gemineering.com^$third-party\n||genericlink.com^$third-party\n||genericsteps.com^$third-party\n||genesismedia.com^$third-party\n||genovesetacet.com^$third-party\n||geo-idm.fr^$third-party\n||geoipads.com^$third-party\n||geopromos.com^$third-party\n||geovisite.com^$third-party\n||gestionpub.com^$third-party\n||getgamers.eu^$third-party\n||getgscfree.com^$third-party\n||getscorecash.com^$third-party\n||getthislistbuildingvideo.biz^$third-party\n||gettipsz.info^$third-party\n||ggncpm.com^$third-party\n||giantaffiliates.com^$third-party\n||gigamega.su^$third-party\n||gimiclub.com^$third-party\n||gklmedia.com^$third-party\n||glical.com^$third-party\n||global-success-club.net^$third-party\n||globaladsales.com^$third-party\n||globaladv.net^$third-party\n||globalinteractive.com^$third-party\n||globalsuccessclub.com^$third-party\n||globaltakeoff.net^$third-party\n||glowdot.com^$third-party\n||gmads.net^$third-party\n||go2jump.org^$third-party\n||go2media.org^$third-party\n||go2speed.org^$third-party\n||goember.com^$third-party\n||gogoplexer.com^$third-party\n||gojoingscnow.com^$third-party\n||goodadvert.ru^$third-party\n||goodadvertising.info^$third-party\n||googleadservicepixel.com^$third-party\n||googlesyndicatiion.com^$third-party\n||googletagservices.com/tag/js/gpt_$third-party\n||googletagservices.com/tag/static/$third-party\n||gopjn.com^$third-party\n||gorgonkil.com^$third-party\n||gourmetads.com^$third-party\n||governmenttrainingexchange.com^$third-party\n||goviral-content.com^$third-party\n||goviral.hs.llnwd.net^$third-party\n||gpacalculatorhighschoolfree.com^$third-party\n||grabmyads.com^$third-party\n||grabo.bg^$third-party\n||grafpedia.com^$third-party\n||grapeshot.co.uk^$third-party\n||gratisnetwork.com^$third-party\n||greenads.org^$third-party\n||greenlabelppc.com^$third-party\n||grenstia.com^$third-party\n||gretzalz.com^$third-party\n||gripdownload.co^$third-party\n||grllopa.com^$third-party\n||groovinads.com^$third-party\n||groupcommerce.com^$third-party\n||gscontxt.net^$third-party\n||gscsystemwithdarren.com^$third-party\n||guardiandigitalcomparison.co.uk^$third-party\n||guitaralliance.com^$third-party\n||gumgum.com^$third-party\n||gunpartners.com^$third-party\n||gururevenue.com^$third-party\n||gwallet.com^$third-party\n||gx101.com^$third-party\n||h-images.net^$third-party\n||h12-media.com^$third-party\n||halfpriceozarks.com^$third-party\n||halogennetwork.com^$third-party\n||hanaprop.com^$third-party\n||harrenmedianetwork.com^$third-party\n||havamedia.net^$third-party\n||havetohave.com^$third-party\n||hb-247.com^$third-party\n||hd-plugin.com^$third-party\n||hdplayer-download.com^$third-party\n||hdvid-codecs-dl.net^$third-party\n||hdvidcodecs.com^$third-party\n||headup.com^$third-party\n||healthaffiliatesnetwork.com^$third-party\n||healthcarestars.com^$third-party\n||hebiichigo.com^$third-party\n||helloreverb.com^$third-party\n||hexagram.com^$third-party\n||hiadone.com^$third-party\n||hijacksystem.com^$third-party\n||hilltopads.net^$third-party\n||himediads.com^$third-party\n||himediadx.com^$third-party\n||hiplair.com^$third-party\n||hit-now.com^$third-party\n||hits.sys.lv^$third-party\n||hokaybo.com^$third-party\n||holidaytravelguide.org^$third-party\n||hopfeed.com^$third-party\n||horse-racing-affiliate-program.co.uk^$third-party\n||horsered.com^$third-party\n||horyzon-media.com^$third-party\n||hosticanaffiliate.com^$third-party\n||hot-hits.us^$third-party\n||hotelscombined.com.au^$third-party\n||hotelscombined.com^$third-party\n||hotfeed.net^$third-party\n||hotkeys.com^$third-party\n||hotptp.com^$third-party\n||hotwords.com.br^$third-party\n||hotwords.com.mx^$third-party\n||hotwords.com^$third-party\n||hover.in^$third-party\n||hplose.de^$third-party\n||hstpnetwork.com^$third-party\n||httpool.com^$third-party\n||httpsecurity.org^$third-party\n||hype-ads.com^$third-party\n||hypeads.org^$third-party\n||hypemakers.net^$third-party\n||hyperlinksecure.com^$third-party\n||hypertrackeraff.com^$third-party\n||hypervre.com^$third-party\n||hyperwebads.com^$third-party\n||i-media.co.nz^$third-party\n||i.skimresources.com^$third-party\n||iamediaserve.com^$third-party\n||iasbetaffiliates.com^$third-party\n||iasrv.com^$third-party\n||ibannerexchange.com^$third-party\n||ibatom.com^$third-party\n||ibryte.com^$third-party\n||icdirect.com^$third-party\n||icqadvnew.com^$third-party\n||idealmedia.com^$third-party\n||identads.com^$third-party\n||idownloadgalore.com^$third-party\n||iframe.mediaplazza.com^$third-party\n||igameunion.com^$third-party\n||igloohq.com^$third-party\n||ignitioninstaller.com^$third-party\n||imasdk.googleapis.com^$third-party\n||imedia.co.il^$third-party\n||imediaaudiences.com^$third-party\n||imediarevenue.com^$third-party\n||img-giganto.net^$third-party\n||imgfeedget.com^$third-party\n||imglt.com^$third-party\n||imgwebfeed.com^$third-party\n||imho.ru^$third-party\n||imiclk.com^$third-party\n||impact-ad.jp^$third-party\n||impactradius.com^$third-party\n||implix.com^$third-party\n||impresionesweb.com^$third-party\n||impressionaffiliate.com^$third-party\n||impressionaffiliate.mobi^$third-party\n||impressioncontent.info^$third-party\n||impressiondesk.com^$third-party\n||impressionperformance.biz^$third-party\n||impressionvalue.mobi^$third-party\n||in-appadvertising.com^$third-party\n||incentaclick.com^$third-party\n||incomeliberation.com^$third-party\n||increase-marketing.com^$third-party\n||indexww.com^$third-party\n||indiabanner.com^$third-party\n||indiads.com^$third-party\n||indianbannerexchange.com^$third-party\n||indianlinkexchange.com^$third-party\n||indicate.to^$third-party\n||indieclick.com^$third-party\n||indofad.com^$third-party\n||industrybrains.com^$third-party\n||inentasky.com^$third-party\n||inetinteractive.com^$third-party\n||infectiousmedia.com^$third-party\n||infinite-ads.com^$third-party\n||infinityads.com^$third-party\n||influads.com^$third-party\n||info4.a7.org^$third-party\n||infolinks.com^$third-party\n||information-sale.com^$third-party\n||infra-ad.com^$third-party\n||inktad.com^$third-party\n||innity.com^$third-party\n||innity.net^$third-party\n||innovid.com^$third-party\n||insightexpress.com^$third-party\n||insightexpressai.com^$third-party\n||insitepromotion.com^$third-party\n||insitesystems.com^$third-party\n||inskinad.com^$third-party\n||inskinmedia.com^$~stylesheet,third-party\n||insta-cash.net^$third-party\n||instantbannercreator.com^$third-party\n||instantdollarz.com^$third-party\n||instinctiveads.com^$third-party\n||instivate.com^$third-party\n||integral-marketing.com^$third-party\n||intellibanners.com^$third-party\n||intellitxt.com^$third-party\n||intenthq.com^$third-party\n||intentmedia.net^$third-party\n||interactivespot.net^$third-party\n||interclick.com^$third-party\n||interestably.com^$third-party\n||interesting.cc^$third-party\n||intermarkets.net^$third-party\n||internetadbrokers.com^$third-party\n||interpolls.com^$third-party\n||interworksmedia.co.kr^$third-party\n||intextdirect.com^$third-party\n||intextscript.com^$third-party\n||intextual.net^$third-party\n||intgr.net^$third-party\n||intopicmedia.com^$third-party\n||inttrax.com^$third-party\n||intuneads.com^$third-party\n||inuvo.com^$third-party\n||inuxu.co.in^$third-party\n||investingchannel.com^$third-party\n||inviziads.com^$third-party\n||ip-adress.com^$third-party\n||ipredictive.com^$third-party\n||ipromote.com^$third-party\n||isohits.com^$third-party\n||isparkmedia.com^$third-party\n||itrengia.com^$third-party\n||iu16wmye.com^$third-party\n||iv.doubleclick.net^$third-party\n||iwantmoar.net^$third-party\n||ixnp.com^$third-party\n||izeads.com^$third-party\n||j2ef76da3.website^$third-party\n||jadcenter.com^$third-party\n||jango.com^$third-party\n||jangonetwork.com^$third-party\n||jbrlsr.com^$third-party\n||jdoqocy.com^$third-party\n||jdproject.net^$third-party\n||jeetyetmedia.com^$third-party\n||jemmgroup.com^$third-party\n||jiwire.com^$third-party\n||jizzontoy.com^$third-party\n||jmp9.com^$third-party\n||jo7cofh3.com^$third-party\n||jobsyndicate.com^$third-party\n||jobtarget.com^$third-party\n||joytocash.com^$third-party\n||jque.net^$third-party\n||js.cdn.ac^$third-party\n||jscount.com^$third-party\n||jsfeedadsget.com^$third-party\n||jsretra.com^$third-party\n||jssearch.net^$third-party\n||jtrakk.com^$third-party\n||judicated.com^$third-party\n||juiceadv.com^$third-party\n||juiceadv.net^$third-party\n||jujuads.com^$third-party\n||jujzh9va.com^$third-party\n||jumboaffiliates.com^$third-party\n||jumbolt.ru^$third-party\n||jumpelead.com^$third-party\n||jumptap.com^$third-party\n||jursp.com^$third-party\n||justrelevant.com^$third-party\n||jwaavsze.com^$third-party\n||jyvtidkx.com^$third-party\n||k0z09okc.com^$third-party\n||kanoodle.com^$third-party\n||kantarmedia.com^$third-party\n||kavanga.ru^$third-party\n||keewurd.com^$third-party\n||kehalim.com^$third-party\n||kerg.net^$third-party\n||ketoo.com^$third-party\n||keywordblocks.com^$third-party\n||kikuzip.com^$third-party\n||kinley.com^$third-party\n||kintokup.com^$third-party\n||kiosked.com^$third-party\n||kitnmedia.com^$third-party\n||klikadvertising.com^$third-party\n||kliksaya.com^$third-party\n||klikvip.com^$third-party\n||klipmart.com^$third-party\n||klixfeed.com^$third-party\n||kloapers.com^$third-party\n||klonedaset.org^$third-party\n||knorex.asia^$third-party\n||knowd.com^$third-party\n||kolition.com^$third-party\n||komoona.com^$third-party\n||kontextua.com^$third-party\n||koocash.com^$third-party\n||korrelate.net^$third-party\n||kqzyfj.com^$third-party\n||kr3vinsx.com^$third-party\n||kromeleta.ru^$third-party\n||kumpulblogger.com^$third-party\n||l3op.info^$third-party\n||ladbrokesaffiliates.com.au^$third-party\n||lakequincy.com^$third-party\n||lakidar.net^$third-party\n||lanistaconcepts.com^$third-party\n||largestable.com^$third-party\n||laserhairremovalstore.com^$third-party\n||launchbit.com^$third-party\n||layer-ad.org^$third-party\n||layerloop.com^$third-party\n||layerwelt.com^$third-party\n||lazynerd.info^$third-party\n||lbm1.com^$third-party\n||lcl2adserver.com^$third-party\n||ldgateway.com^$third-party\n||lduhtrp.net^$third-party\n||leadacceptor.com^$third-party\n||leadad.mobi^$third-party\n||leadadvert.info^$third-party\n||leadbolt.net^$third-party\n||leadcola.com^$third-party\n||leaderpub.fr^$third-party\n||leadmediapartners.com^$third-party\n||leetmedia.com^$third-party\n||legisland.net^$third-party\n||letsgoshopping.tk^$third-party\n||lfstmedia.com^$third-party\n||lgse.com^$third-party\n||liftdna.com^$third-party\n||ligational.com^$third-party\n||ligatus.com^$third-party\n||lightad.co.kr^$third-party\n||lightningcast.net^$~object-subrequest,third-party\n||linicom.co.il^$third-party\n||linkbuddies.com^$third-party\n||linkclicks.com^$third-party\n||linkconnector.com^$third-party\n||linkelevator.com^$third-party\n||linkexchange.com^$third-party\n||linkexchangers.net^$third-party\n||linkgrand.com^$third-party\n||linkmads.com^$third-party\n||linkoffers.net^$third-party\n||linkreferral.com^$third-party\n||links.io^$third-party\n||linkshowoff.com^$third-party\n||linksmart.com^$third-party\n||linkstorm.net^$third-party\n||linksynergy.com^$third-party\n||linkwash.de^$third-party\n||linkworth.com^$third-party\n||linkybank.com^$third-party\n||linkz.net^$third-party\n||liqwid.net^$third-party\n||listingcafe.com^$third-party\n||liveadoptimizer.com^$third-party\n||liveadserver.net^$third-party\n||liverail.com^$~object-subrequest,third-party\n||liveuniversenetwork.com^$third-party\n||loading-resource.com^$third-party\n||localadbuy.com^$third-party\n||localedgemedia.com^$third-party\n||localsearch24.co.uk^$third-party\n||lockhosts.com^$third-party\n||logo-net.co.uk^$third-party\n||loodyas.com^$third-party\n||lookit-quick.com^$third-party\n||looksmart.com^$third-party\n||looneyads.com^$third-party\n||looneynetwork.com^$third-party\n||lose-ads.de^$third-party\n||loseads.eu^$third-party\n||losomy.com^$third-party\n||lotteryaffiliates.com^$third-party\n||love-banner.com^$third-party\n||loxtk.com^$third-party\n||lqcdn.com^$third-party\n||lqw.me^$third-party\n||ltassrv.com.s3.amazonaws.com^$third-party\n||ltassrv.com/goads.swf\n||ltassrv.com/serve/\n||lucidmedia.com^$third-party\n||luminate.com^$third-party\n||lushcrush.com^$third-party\n||luxadv.com^$third-party\n||luxbetaffiliates.com.au^$third-party\n||luxup.ru^$third-party\n||lx2rv.com^$third-party\n||lzjl.com^$third-party\n||m1.fwmrm.net^$object-subrequest,third-party\n||m2pub.com^$third-party\n||m4pub.com^$third-party\n||m57ku6sm.com^$third-party\n||m5prod.net^$third-party\n||madadsmedia.com^$third-party\n||madserving.com^$third-party\n||madsone.com^$third-party\n||magicalled.info^$third-party\n||magnetisemedia.com^$third-party\n||mainadv.com^$third-party\n||mainroll.com^$third-party\n||makecashtakingsurveys.biz^$third-party\n||makemoneymakemoney.net^$third-party\n||mallsponsor.com^$third-party\n||mangoforex.com^$third-party\n||marbil24.co.za^$third-party\n||marfeel.com^$third-party\n||marketbanker.com^$third-party\n||marketfly.net^$third-party\n||markethealth.com^$third-party\n||marketingenhanced.com^$third-party\n||marketleverage.com^$third-party\n||marketnetwork.com^$third-party\n||marketoring.com^$third-party\n||marsads.com^$third-party\n||martiniadnetwork.com^$third-party\n||masternal.com^$third-party\n||mastertraffic.cn^$third-party\n||matiro.com^$third-party\n||maudau.com^$third-party\n||maxserving.com^$third-party\n||mb01.com^$third-party\n||mb102.com^$third-party\n||mb104.com^$third-party\n||mb38.com^$third-party\n||mb57.com^$third-party\n||mbn.com.ua^$third-party\n||mdadvertising.net^$third-party\n||mdialog.com^$third-party\n||mdn2015x1.com^$third-party\n||meadigital.com^$third-party\n||media-general.com^$third-party\n||media-ks.net^$third-party\n||media-networks.ru^$third-party\n||media-servers.net^$third-party\n||media.net^$third-party\n||media303.com^$third-party\n||media6degrees.com^$third-party\n||media970.com^$third-party\n||mediaadserver.org^$third-party\n||mediaclick.com^$third-party\n||mediacpm.com^$third-party\n||mediaffiliation.com^$third-party\n||mediaflire.com^$third-party\n||mediaforge.com^$third-party\n||mediag4.com^$third-party\n||mediagridwork.com^$third-party\n||mediakeywords.com^$third-party\n||medialand.ru^$third-party\n||medialation.net^$third-party\n||mediaonenetwork.net^$third-party\n||mediaonpro.com^$third-party\n||mediapeo.com^$third-party\n||mediaplex.com^$third-party,domain=~watchever.de\n||mediatarget.com^$third-party\n||mediative.ca^$third-party\n||mediatraffic.com^$third-party\n||mediatraks.com^$third-party\n||medleyads.com^$third-party\n||medrx.sensis.com.au^$third-party\n||medyanet.net^$third-party\n||medyanetads.com^$third-party\n||meendocash.com^$third-party\n||meetic-partners.com^$third-party\n||megacpm.com^$third-party\n||megbase.com^$third-party\n||meinlist.com^$third-party\n||mentad.com^$third-party\n||mentalks.ru^$third-party\n||merchenta.com^$third-party\n||mercuras.com^$third-party\n||messagespaceads.com^$third-party\n||metaffiliation.com^$~image,~subdocument,third-party\n||metaffiliation.com^*^maff=\n||metaffiliation.com^*^taff=\n||metavertising.com^$third-party\n||metavertizer.com^$third-party\n||metrics.io^$third-party\n||meviodisplayads.com^$third-party\n||meya41w7.com^$third-party\n||mezimedia.com^$third-party\n||mgcash.com^$third-party\n||mgcashgate.com^$third-party\n||mgid.com^$third-party,domain=~marketgid.com|~marketgid.com.ua\n||mgplatform.com^$third-party\n||mibebu.com^$third-party\n||microad.jp^$third-party\n||microadinc.com^$third-party\n||microsoftaffiliates.net^$third-party\n||milabra.com^$third-party\n||minimumpay.info^$third-party\n||mirago.com^$third-party\n||mirrorpersonalinjury.co.uk^$third-party\n||miva.com^$third-party\n||mixmarket.biz^$third-party\n||mixpo.com^$third-party\n||mktseek.com^$third-party\n||mlnadvertising.com^$third-party\n||mm1x.nl^$third-party\n||mmadsgadget.com^$third-party\n||mmgads.com^$third-party\n||mmismm.com^$third-party\n||mmngte.net^$third-party\n||mmondi.com^$third-party\n||mmotraffic.com^$third-party\n||moatads.com^$third-party\n||mobatori.com^$third-party\n||mobatory.com^$third-party\n||mobday.com^$third-party\n||mobicont.com^$third-party\n||mobifobi.com^$third-party\n||mobikano.com^$third-party\n||mobiright.com^$third-party\n||mobisla.com^$third-party\n||mobitracker.info^$third-party\n||mobiyield.com^$third-party\n||moborobot.com^$third-party\n||mobstrks.com^$third-party\n||mobtrks.com^$third-party\n||mobytrks.com^$third-party\n||modelegating.com^$third-party\n||moffsets.com^$third-party\n||mogointeractive.com^$third-party\n||mojoaffiliates.com^$third-party\n||mokonocdn.com^$third-party\n||money-cpm.fr^$third-party\n||money4ads.com^$third-party\n||moneycosmos.com^$third-party\n||moneywhisper.com^$third-party\n||monkeybroker.net^$third-party\n||monsoonads.com^$third-party\n||mookie1.com^$third-party\n||mootermedia.com^$third-party\n||mooxar.com^$third-party\n||moregamers.com^$third-party\n||moreplayerz.com^$third-party\n||morgdm.ru^$third-party\n||moselats.com^$third-party\n||movad.net^$third-party\n||mpnrs.com^$third-party\n||mpression.net^$third-party\n||mprezchc.com^$third-party\n||msads.net^$third-party\n||mtrcss.com^$third-party\n||mujap.com^$third-party\n||multiadserv.com^$third-party\n||munically.com^$third-party\n||music-desktop.com^$third-party\n||mutary.com^$third-party\n||mxtads.com^$third-party\n||my-layer.net^$third-party\n||myaffiliates.com^$third-party\n||myclickbankads.com^$third-party\n||mycooliframe.net^$third-party\n||mydreamads.com^$third-party\n||myemailbox.info^$third-party\n||myinfotopia.com^$third-party\n||mylinkbox.com^$third-party\n||mynewcarquote.us^$third-party\n||myplayerhd.net^$third-party\n||mythings.com^$third-party\n||myuniques.ru^$third-party\n||myvads.com^$third-party\n||mz28ismn.com^$third-party\n||n388hkxg.com^$third-party\n||n4403ad.doubleclick.net^$third-party\n||nabbr.com^$third-party\n||nagrande.com^$third-party\n||nanigans.com^$third-party\n||nativead.co^$third-party\n||nativeads.com^$third-party\n||nbjmp.com^$third-party\n||nbstatic.com^$third-party\n||ncrjsserver.com^$third-party\n||neblotech.com^$third-party\n||negolist.com^$third-party\n||neobux.com^$third-party\n||neodatagroup.com^$third-party\n||neoffic.com^$third-party\n||net-ad-vantage.com^$third-party\n||net3media.com^$third-party\n||netaffiliation.com^$~script,third-party\n||netavenir.com^$third-party\n||netflixalternative.net^$third-party\n||netliker.com^$third-party\n||netloader.cc^$third-party\n||netpondads.com^$third-party\n||netseer.com^$third-party\n||netshelter.net^$third-party\n||netsolads.com^$third-party\n||networkplay.in^$third-party\n||networkxi.com^$third-party\n||networld.hk^$third-party\n||networldmedia.net^$third-party\n||neudesicmediagroup.com^$third-party\n||newdosug.eu^$third-party\n||newgentraffic.com^$third-party\n||newideasdaily.com^$third-party\n||newsadstream.com^$third-party\n||newsnet.in.ua^$third-party\n||newstogram.com^$third-party\n||newtention.net^$third-party\n||nexac.com^$third-party\n||nexage.com^$third-party\n||nextmobilecash.com^$third-party\n||ngecity.com^$third-party\n||nicheadgenerator.com^$third-party\n||nicheads.com^$third-party\n||nighter.club^$third-party\n||nkredir.com^$third-party\n||nmcdn.us^$third-party\n||nmwrdr.net^$third-party\n||nobleppc.com^$third-party\n||nobsetfinvestor.com^$third-party\n||nonstoppartner.de^$third-party\n||noretia.com^$third-party\n||normkela.com^$third-party\n||northmay.com^$third-party\n||nowlooking.net^$third-party\n||nowspots.com^$third-party\n||nplexmedia.com^$third-party\n||npvos.com^$third-party\n||nquchhfyex.com^$third-party\n||nrnma.com^$third-party\n||nscontext.com^$third-party\n||nsdsvc.com^$third-party\n||nsmartad.com^$third-party\n||nspmotion.com^$third-party\n||nster.net^$third-party,domain=~nster.com\n||ntent.com^$third-party\n||numberium.com^$third-party\n||nuseek.com^$third-party\n||nvadn.com^$third-party\n||nvero.net^$third-party\n||nwfhalifax.com^$third-party\n||nxtck.com^$third-party\n||nyadmcncserve-05y06a.com^$third-party\n||nzads.net.nz^$third-party\n||nzphoenix.com^$third-party\n||oads.co^$third-party\n||oainternetservices.com^$third-party\n||obesw.com^$third-party\n||obeus.com^$third-party\n||obibanners.com^$third-party\n||objects.tremormedia.com^$~object-subrequest,third-party\n||objectservers.com^$third-party\n||oceanwebcraft.com^$third-party\n||oclasrv.com^$third-party\n||oclsasrv.com^$third-party\n||oclus.com^$third-party\n||oehposan.com^$third-party\n||offeradvertising.biz^$third-party\n||offerforge.com^$third-party\n||offerpalads.com^$third-party\n||offerserve.com^$third-party\n||offersquared.com^$third-party\n||ofino.ru^$third-party\n||oggifinogi.com^$third-party\n||ohmcasting.com^$third-party\n||oldtiger.net^$third-party\n||omclick.com^$third-party\n||omg2.com^$third-party\n||omgpm.com^$third-party\n||omguk.com^$third-party\n||onad.eu^$third-party\n||onads.com^$third-party\n||onclickads.net^$third-party\n||onedmp.com^$third-party\n||onenetworkdirect.com^$third-party\n||onenetworkdirect.net^$third-party\n||onespot.com^$third-party\n||online-adnetwork.com^$third-party\n||online-media24.de^$third-party\n||onlineadtracker.co.uk^$third-party\n||onlinedl.info^$third-party\n||onlyalad.net^$third-party\n||onrampadvertising.com^$third-party\n||onscroll.com^$third-party\n||onsitemarketplace.net^$third-party\n||onvertise.com^$third-party\n||oodode.com^$third-party\n||ooecyaauiz.com^$third-party\n||oofte.com^$third-party\n||oos4l.com^$third-party\n||opap.co.kr^$third-party\n||openbook.net^$third-party\n||openetray.com^$third-party\n||opensourceadvertisementnetwork.info^$third-party\n||openxadexchange.com^$third-party\n||openxenterprise.com^$third-party\n||openxmarket.asia^$third-party\n||operatical.com^$third-party\n||opt-intelligence.com^$third-party\n||opt-n.net^$third-party\n||opteama.com^$third-party\n||optiad.net^$third-party\n||optimalroi.info^$third-party\n||optimatic.com^$third-party\n||optimizeadvert.biz^$third-party\n||optinemailpro.com^$third-party\n||orangeads.fr^$third-party\n||orarala.com^$third-party\n||orbengine.com^$third-party\n||oskale.ru^$third-party\n||ospreymedialp.com^$third-party\n||othersonline.com^$third-party\n||ourunlimitedleads.com^$third-party\n||oveld.com^$third-party\n||overture.com^$third-party\n||overturs.com^$third-party\n||oxado.com^$third-party\n||oxsng.com^$third-party\n||oxtracking.com^$third-party\n||ozertesa.com^$third-party\n||ozonemedia.com^$third-party\n||p-advg.com^$third-party\n||p-comme-performance.com^$third-party\n||p-digital-server.com^$third-party\n||p2ads.com^$third-party\n||paads.dk^$third-party\n||padsdelivery.com^$third-party\n||padstm.com^$third-party\n||pagefair.net^$third-party\n||pagesinxt.com^$third-party\n||paid4ad.de^$third-party\n||paidonresults.net^$third-party\n||paidsearchexperts.com^$third-party\n||pakbanners.com^$third-party\n||panachetech.com^$third-party\n||pantherads.com^$third-party\n||paperg.com^$third-party\n||paradocs.ru^$third-party\n||partner-ads.com^$third-party\n||partner.googleadservices.com^$third-party\n||partner.video.syndication.msn.com^$~object-subrequest,third-party\n||partnerearning.com^$third-party\n||partnermax.de^$third-party\n||partycasino.com^$third-party\n||partypartners.com^$third-party\n||partypoker.com^$third-party\n||passionfruitads.com^$third-party\n||pautaspr.com^$third-party\n||pay-click.ru^$third-party\n||paydotcom.com^$third-party\n||payperpost.com^$third-party\n||pc-ads.com^$third-party\n||pe2k2dty.com^$third-party\n||peakclick.com^$third-party\n||peelawaymaker.com^$third-party\n||peemee.com^$third-party\n||peer39.net^$third-party\n||penuma.com^$third-party\n||pepperjamnetwork.com^$third-party\n||percularity.com^$third-party\n||perfb.com^$third-party\n||perfcreatives.com^$third-party\n||perfoormapp.info^$third-party\n||performance-based.com^$third-party\n||performanceadvertising.mobi^$third-party\n||performancetrack.info^$third-party\n||performancingads.com^$third-party\n||permutive.com^$third-party\n||pezrphjl.com^$third-party\n||pgmediaserve.com^$third-party\n||pgpartner.com^$third-party\n||pgssl.com^$third-party\n||pharmcash.com^$third-party\n||pheedo.com^$third-party\n||philbardre.com^$third-party\n||philipstreehouse.info^$third-party\n||philosophere.com^$third-party\n||phonespybubble.com^$third-party\n||pianobuyerdeals.com^$third-party\n||picadmedia.com^$third-party\n||picbucks.com^$third-party\n||picsti.com^$third-party\n||pictela.net^$third-party\n||pinballpublishernetwork.com^$third-party\n||pioneeringad.com^$third-party\n||pivotalmedialabs.com^$third-party\n||pivotrunner.com^$third-party\n||pixazza.com^$third-party\n||pixeltrack66.com^$third-party\n||pixfuture.net^$third-party\n||pixxur.com^$third-party\n||pjatr.com^$third-party\n||pjtra.com^$third-party\n||platinumadvertisement.com^$third-party\n||play24.us^$third-party\n||playertraffic.com^$third-party\n||pleeko.com^$third-party\n||plenomedia.com^$third-party\n||pllddc.com^$third-party\n||plocap.com^$third-party\n||plugerr.com^$third-party\n||plusfind.net^$third-party\n||plxserve.com^$third-party\n||pmsrvr.com^$third-party\n||pnoss.com^$third-party\n||pntra.com^$third-party\n||pntrac.com^$third-party\n||pntrs.com^$third-party\n||pointclicktrack.com^$third-party\n||pointroll.com^$third-party\n||points2shop.com^$third-party\n||polluxnetwork.com^$third-party\n||polmontventures.com^$third-party\n||polyad.net^$third-party\n||polydarth.com^$third-party\n||popads.net^$third-party\n||popadscdn.net^$third-party\n||popcash.net^$third-party\n||popcpm.com^$third-party\n||popcpv.com^$third-party\n||popearn.com^$third-party\n||popmarker.com^$third-party\n||popmyad.com^$third-party\n||popmyads.com^$third-party\n||poponclick.com^$third-party\n||popsads.com^$third-party\n||popshow.info^$third-party\n||poptarts.me^$third-party\n||popularitish.com^$third-party\n||popularmedia.net^$third-party\n||populis.com^$third-party\n||populisengage.com^$third-party\n||popunder.ru^$third-party\n||popunderz.com^$third-party\n||popuptraffic.com^$third-party\n||popupvia.com^$third-party\n||pornv.org^$third-party\n||posternel.com^$third-party\n||postrelease.com^$third-party\n||poweradvertising.co.uk^$third-party\n||powerfulbusiness.net^$third-party\n||powerlinks.com^$third-party\n||ppcindo.com^$third-party\n||ppclinking.com^$third-party\n||ppctrck.com^$third-party\n||ppcwebspy.com^$third-party\n||ppsearcher.ru^$third-party\n||precisionclick.com^$third-party\n||predictad.com^$third-party\n||prestadsng.com^$third-party\n||prexista.com^$third-party\n||prf.hn^$third-party\n||prickac.com^$third-party\n||primaryads.com^$third-party\n||pro-advert.de^$third-party\n||pro-advertising.com^$third-party\n||pro-market.net^$third-party\n||proadsdirect.com^$third-party\n||probannerswap.com^$third-party\n||prod.untd.com^$third-party\n||proffigurufast.com^$third-party\n||profitpeelers.com^$third-party\n||programresolver.net^$third-party\n||projectwonderful.com^$third-party\n||promo-reklama.ru^$third-party\n||promobenef.com^$third-party\n||promotionoffer.mobi^$third-party\n||promotiontrack.mobi^$third-party\n||propellerads.com^$third-party\n||propellerpops.com^$third-party\n||propelplus.com^$third-party\n||prosperent.com^$third-party\n||protally.net^$third-party\n||proximic.com^$third-party\n||prre.ru^$third-party\n||psclicks.com^$third-party\n||pseqcs05.com^$third-party\n||ptmzr.com^$third-party\n||ptp.lolco.net^$third-party\n||ptp22.com^$third-party\n||ptp24.com^$third-party\n||pub-fit.com^$third-party\n||pubdirecte.com^$third-party,domain=~debrideurstream.fr\n||pubgears.com^$third-party\n||publicidad.net^$third-party\n||publicidees.com^$third-party\n||publicityclerks.com^$third-party\n||publisher.to^$third-party\n||publisheradnetwork.com^$third-party\n||pubmatic.com^$third-party\n||pubserve.net^$third-party\n||pubted.com^$third-party\n||pulse360.com^$third-party\n||pulsemgr.com^$third-party\n||purpleflag.net^$third-party\n||push2check.com^$third-party\n||pxlad.io^$third-party\n||pzaasocba.com^$third-party\n||pzuwqncdai.com^$third-party\n||q1media.com^$third-party\n||q1mediahydraplatform.com^$third-party\n||q1xyxm89.com^$third-party\n||qadservice.com^$third-party\n||qdmil.com^$third-party\n||qksrv.net^$third-party\n||qksz.net^$third-party\n||qnrzmapdcc.com^$third-party\n||qnsr.com^$third-party\n||qservz.com^$third-party\n||quantumads.com^$third-party\n||quensillo.com^$third-party\n||questionmarket.com^$third-party\n||questus.com^$third-party\n||quickcash500.com^$third-party\n||quinstreet.com^$third-party\n||qwobl.net^$third-party\n||qwzmje9w.com^$third-party\n||rabilitan.com^$third-party\n||radeant.com^$third-party\n||radicalwealthformula.com^$third-party\n||radiusmarketing.com^$third-party\n||raiggy.com^$third-party\n||rainbowtgx.com^$third-party\n||rainwealth.com^$third-party\n||rampanel.com^$third-party\n||rapt.com^$third-party\n||rawasy.com^$third-party\n||rbnt.org^$third-party\n||rcads.net^$third-party\n||rcurn.com^$third-party\n||rddywd.com^$third-party\n||reachjunction.com^$third-party\n||reachlocal.com^$third-party\n||reachmode.com^$third-party\n||readserver.net^$third-party\n||realclick.co.kr^$third-party\n||realmatch.com^$third-party\n||realmedia.com^$third-party\n||realsecuredredirect.com^$third-party\n||realvu.net^$third-party\n||recomendedsite.com^$third-party\n||redcourtside.com^$third-party\n||redintelligence.net^$third-party\n||reduxmediagroup.com^$third-party\n||reelcentric.com^$third-party\n||refban.com^$third-party\n||referback.com^$third-party\n||regdfh.info^$third-party\n||registry.cw.cm^$third-party\n||regurgical.com^$third-party\n||reklamz.com^$third-party\n||relatedweboffers.com^$third-party\n||relestar.com^$third-party\n||relevanti.com^$third-party\n||relytec.com^$third-party\n||remiroyal.ro^$third-party\n||resideral.com^$third-party\n||respecific.net^$third-party\n||respond-adserver.cloudapp.net^$third-party\n||respondhq.com^$third-party\n||resultlinks.com^$third-party\n||resultsz.com^$third-party\n||retargeter.com^$third-party\n||reussissonsensemble.fr^$third-party\n||rev2pub.com^$third-party\n||revcontent.com^$third-party\n||revenue.com^$third-party\n||revenuegiants.com^$third-party\n||revenuehits.com^$third-party\n||revenuemantra.com^$third-party\n||revenuemax.de^$third-party\n||revfusion.net^$third-party\n||revmob.com^$third-party\n||revokinets.com^$third-party\n||revresda.com^$third-party\n||revresponse.com^$third-party\n||revsci.net^$third-party\n||rewardisement.com^$third-party\n||rewardsaffiliates.com^$third-party\n||rewardstyle.com^$third-party\n||rfihub.net^$third-party\n||rhown.com^$third-party\n||ricead.com^$third-party\n||richmedia247.com^$third-party\n||richwebmedia.com^$third-party\n||ringrevenue.com^$third-party\n||ringtonematcher.com^$third-party\n||ringtonepartner.com^$third-party\n||ripplead.com^$third-party\n||riverbanksand.com^$third-party\n||rixaka.com^$third-party\n||rmxads.com^$third-party\n||rnmd.net^$third-party\n||robocat.me^$third-party\n||rocketier.net^$third-party\n||rogueaffiliatesystem.com^$third-party\n||roicharger.com^$third-party\n||roirocket.com^$third-party\n||romance-net.com^$third-party\n||rotaban.ru^$third-party\n||rotatingad.com^$third-party\n||rotorads.com^$third-party\n||rovion.com^$third-party\n||roxyaffiliates.com^$third-party\n||rtbidder.net^$third-party\n||rtbmedia.org^$third-party\n||rtbpop.com^$third-party\n||rtbpops.com^$third-party\n||rubiconproject.com^$third-party\n||rummyaffiliates.com^$third-party\n||runadtag.com^$third-party\n||rwpads.com^$third-party\n||ryminos.com^$third-party\n||s2d6.com^$third-party\n||sa.entireweb.com^$third-party\n||safeadnetworkdata.net^$third-party\n||safecllc.com^$third-party\n||safelistextreme.com^$third-party\n||saltamendors.com^$third-party\n||salvador24.com^$third-party\n||saple.net^$third-party\n||satgreera.com^$third-party\n||saveads.net^$third-party\n||saveads.org^$third-party\n||sayadcoltd.com^$third-party\n||saymedia.com^$third-party\n||sba.about.co.kr^$third-party\n||sbaffiliates.com^$third-party\n||sbcpower.com^$third-party\n||scanmedios.com^$third-party\n||scanscout.com^$third-party\n||sceno.ru^$third-party\n||scootloor.com^$third-party\n||scratchaffs.com^$third-party\n||search123.uk.com^$third-party\n||seccoads.com^$third-party\n||secondstreetmedia.com^$third-party\n||secure-softwaremanager.com^$third-party\n||securesoft.info^$third-party\n||securewebsiteaccess.com^$third-party\n||securitain.com^$third-party\n||sedoparking.com^$third-party\n||seductionprofits.com^$third-party\n||seekads.net^$third-party\n||sekindo.com^$third-party\n||sellhealth.com^$third-party\n||selsin.net^$third-party\n||sendptp.com^$third-party\n||senzapudore.net^$third-party\n||serialbay.com^$third-party\n||seriousfiles.com^$third-party\n||servali.net^$third-party\n||serve-sys.com^$third-party\n||servebom.com^$third-party\n||servedbyadbutler.com^$third-party\n||servedbyopenx.com^$third-party\n||servemeads.com^$third-party\n||serving-sys.com^$third-party\n||sethads.info^$third-party\n||sev4ifmxa.com^$third-party\n||sevenads.net^$third-party\n||sevendaystart.com^$third-party\n||sexmoney.com^$third-party\n||shakamech.com^$third-party\n||share-server.com^$third-party\n||shareasale.com^$third-party\n||sharegods.com^$third-party\n||shareresults.com^$third-party\n||sharethrough.com^$third-party\n||shoogloonetwork.com^$third-party\n||shopalyst.com^$third-party\n||shoppingads.com^$third-party\n||showyoursite.com^$third-party\n||siamzone.com^$third-party\n||silence-ads.com^$third-party\n||silstavo.com^$third-party\n||silverads.net^$third-party\n||simpio.com^$third-party\n||simply.com^$third-party\n||simplyhired.com^$third-party\n||sitebrand.com^$third-party\n||siteencore.com^$third-party\n||sitescout.com^$third-party\n||sitescoutadserver.com^$third-party\n||sitesense-oo.com^$third-party\n||sitethree.com^$third-party\n||sittiad.com^$third-party\n||skimlinks.com^$third-party\n||skinected.com^$third-party\n||skoovyads.com^$third-party\n||skyactivate.com^$third-party\n||skyscrpr.com^$third-party\n||slimspots.com^$third-party\n||slimtrade.com^$third-party\n||slinse.com^$third-party\n||smart-feed-online.com^$third-party\n||smart.allocine.fr^$third-party\n||smart2.allocine.fr^$third-party\n||smartad.ee^$third-party\n||smartadserver.com^$third-party\n||smartdevicemedia.com^$third-party\n||smarterdownloads.net^$third-party\n||smarttargetting.co.uk^$third-party\n||smarttargetting.com^$third-party\n||smarttargetting.net^$third-party\n||smarttds.ru^$third-party\n||smileycentral.com^$third-party\n||smilyes4u.com^$third-party\n||smowtion.com^$third-party\n||smpgfx.com^$third-party\n||sms-mmm.com^$third-party\n||sn00.net^$third-party\n||snap.com^$third-party\n||sndkorea.co.kr^$third-party\n||so-excited.com^$third-party\n||sochr.com^$third-party\n||socialbirth.com^$third-party\n||socialelective.com^$third-party\n||sociallypublish.com^$third-party\n||socialmedia.com^$third-party\n||socialreach.com^$third-party\n||socialspark.com^$third-party\n||society6.com^$third-party\n||sociocast.com^$third-party\n||sociomantic.com^$third-party\n||sodud.com^$third-party\n||soft4dle.com^$third-party\n||softonicads.com^$third-party\n||softpopads.com^$third-party\n||sokitosa.com^$third-party\n||solapoka.com^$third-party\n||solarmosa.com^$third-party\n||solocpm.com^$third-party\n||solutionzip.info^$third-party\n||sonnerie.net^$third-party\n||sonobi.com^$third-party\n||sophiasearch.com^$third-party\n||sparkstudios.com^$third-party\n||specificclick.net^$third-party\n||specificmedia.com^$third-party\n||spectato.com^$third-party\n||speeb.com^$third-party\n||speedshiftmedia.com^$third-party\n||speedsuccess.net^$third-party\n||spiderhood.net^$third-party\n||spinbox.freedom.com^$third-party\n||spinbox.net^$third-party\n||splinky.com^$third-party\n||splut.com^$third-party\n||spmxs.com^$third-party\n||spongecell.com^$third-party\n||sponsoredby.me^$third-party\n||sponsoredtweets.com^$third-party\n||sponsormob.com^$third-party\n||sponsorpalace.com^$third-party\n||sponsorpay.com^$third-party\n||sponsorselect.com^$third-party\n||sportsyndicator.com^$third-party\n||spotrails.com^$third-party\n||spotscenered.info^$third-party\n||spottt.com^$third-party\n||spotxchange.com^$third-party\n||sprintrade.com^$third-party\n||sproose.com^$third-party\n||sq2trk2.com^$third-party\n||srtk.net^$third-party\n||srx.com.sg^$third-party\n||sta-ads.com^$third-party\n||stackadapt.com^$third-party\n||stackattacka.com^$third-party\n||stalesplit.com^$third-party\n||standartads.com^$third-party\n||star-advertising.com^$third-party\n||stargamesaffiliate.com^$third-party\n||starlayer.com^$third-party\n||startpagea.com^$third-party\n||statcamp.net^$third-party\n||statelead.com^$third-party\n||stealthlockers.com^$third-party\n||stickyadstv.com^$third-party\n||stocker.bonnint.net^$third-party\n||streamate.com^$third-party\n||streamdownloadonline.com^$third-party\n||strikead.com^$third-party\n||struq.com^$third-party\n||style-eyes.eu^$third-party\n||sublimemedia.net^$third-party\n||submitexpress.co.uk^$third-party\n||suggesttool.com^$third-party\n||suite6ixty6ix.com^$third-party\n||suitesmart.com^$third-party\n||sumarketing.co.uk^$third-party\n||sunmedia.net^$third-party\n||suparewards.com^$third-party\n||super-links.net^$third-party\n||superloofy.com^$third-party\n||supersitetime.com^$third-party\n||supplyframe.com^$third-party\n||supremeadsonline.com^$third-party\n||surf-bar-traffic.com^$third-party\n||survey-poll.com^$third-party\n||surveyvalue.mobi^$third-party\n||surveyvalue.net^$third-party\n||surveywidget.biz^$third-party\n||suthome.com^$third-party\n||svlu.net^$third-party\n||swadvertising.org^$third-party\n||swbdds.com^$third-party\n||swelen.com^$third-party\n||switchadhub.com^$third-party\n||swoop.com^$third-party\n||symbiosting.com^$third-party\n||syndicatedsearchresults.com^$third-party\n||t3q7af0z.com^$third-party\n||tacastas.com^$third-party\n||tacoda.net^$third-party\n||tacticalrepublic.com^$third-party\n||tafmaster.com^$third-party\n||taggify.net^$third-party\n||tagjunction.com^$third-party\n||tagshost.com^$third-party\n||tailsweep.com^$third-party\n||takensparks.com^$third-party\n||talaropa.com^$third-party\n||tangozebra.com^$third-party\n||tapad.com^$third-party\n||tardangro.com^$third-party\n||targetadverts.com^$third-party\n||targetnet.com^$third-party\n||targetpoint.com^$third-party\n||targetspot.com^$third-party\n||tattomedia.com^$third-party\n||tbaffiliate.com^$third-party\n||tcadops.ca^$third-party\n||td553.com^$third-party\n||teads.tv^$third-party\n||teambetaffiliates.com^$third-party\n||teasernet.com^$third-party\n||techclicks.net^$third-party\n||technoratimedia.com^$third-party\n||telemetryverification.net^$third-party\n||teosredic.com^$third-party\n||teracent.net^$third-party\n||teracreative.com^$third-party\n||testfilter.com^$third-party\n||testnet.nl^$third-party\n||text-link-ads.com^$third-party\n||textonlyads.com^$third-party\n||textsrv.com^$third-party\n||tfag.de^$third-party\n||tgtmedia.com^$third-party\n||theads.me^$third-party\n||thebannerexchange.com^$third-party\n||thebflix.info^$third-party\n||theequalground.info^$third-party\n||thelistassassin.com^$third-party\n||theloungenet.com^$third-party\n||themidnightmatulas.com^$third-party\n||thepiratereactor.net^$third-party\n||thewebgemnetwork.com^$third-party\n||thewheelof.com^$third-party\n||thoseads.com^$third-party\n||thoughtleadr.com^$third-party\n||thoughtsondance.info^$third-party\n||tidaltv.com^$third-party\n||tinbuadserv.com^$third-party\n||tisadama.com^$third-party\n||tiser.com^$third-party\n||tissage-extension.com^$third-party\n||tkqlhce.com^$third-party\n||tldadserv.com^$third-party\n||tlvmedia.com^$third-party\n||tnyzin.ru^$third-party\n||toboads.com^$third-party\n||tokenads.com^$third-party\n||tollfreeforwarding.com^$third-party\n||tomekas.com^$third-party\n||tonefuse.com^$third-party\n||tool-site.com^$third-party\n||top26.net^$third-party\n||topauto10.com^$third-party\n||topcasino10.com^$third-party\n||topeuro.biz^$third-party\n||topfox.co.uk^$third-party\n||tophotoffers.com^$third-party\n||torads.me^$third-party\n||torconpro.com^$third-party\n||toroadvertising.com^$third-party\n||torrida.net^$third-party\n||torrpedoads.net^$third-party\n||total-media.net^$third-party\n||totalprofitplan.com^$third-party\n||totemcash.com^$third-party\n||tower-colocation.de^$third-party\n||tower-colocation.info^$third-party\n||tpnads.com^$third-party\n||tqlkg.com^$third-party\n||tqlkg.net^$third-party\n||traceadmanager.com^$third-party\n||trackadvertising.net^$third-party\n||trackcorner.com^$third-party\n||tracking.to^$third-party\n||tracking101.com^$third-party\n||tracking11.com^$third-party\n||trackingoffer.info^$third-party\n||trackingoffer.net^$third-party\n||trackpath.biz^$third-party\n||trackpromotion.net^$third-party\n||trackstarsengland.net^$third-party\n||trackthatad.com^$third-party\n||tracktor.co.uk^$third-party\n||trackword.net^$third-party\n||trackyourlinks.com^$third-party\n||tradedoubler.com^$third-party\n||tradeexpert.net^$third-party\n||tradepopups.com^$third-party\n||traff-advertazer.com^$third-party\n||traffboost.net^$third-party\n||traffic-supremacy.com^$third-party\n||trafficbarads.com^$third-party\n||trafficbroker.com^$third-party\n||trafficfactory.biz^$third-party\n||trafficforce.com^$third-party\n||traffichaus.com^$third-party\n||trafficjunky.net^$third-party\n||trafficmasterz.net^$third-party\n||trafficmp.com^$third-party\n||trafficrevenue.net^$third-party\n||trafficspaces.net^$third-party\n||trafficswarm.com^$third-party\n||trafficsway.com^$third-party\n||trafficsynergy.com^$third-party\n||traffictrader.net^$third-party\n||trafficular.com^$third-party\n||trafficvance.com^$third-party\n||trafficwave.net^$third-party\n||trafficz.com^$third-party\n||trafficzap.com^$third-party\n||traffirms.com^$third-party\n||trahic.ru^$third-party\n||trapasol.com^$third-party\n||traveladvertising.com^$third-party\n||travelscream.com^$third-party\n||travidia.com^$third-party\n||tredirect.com^$third-party\n||trenpyle.com^$third-party\n||triadmedianetwork.com^$third-party\n||tribalfusion.com^$third-party\n||trigami.com^$third-party\n||trk4.com^$third-party\n||trkalot.com^$third-party\n||trkclk.net^$third-party\n||trker.com^$third-party\n||trklnks.com^$third-party\n||trks.us^$third-party\n||trtrccl.com^$third-party\n||trygen.co.uk^$third-party\n||ttzmedia.com^$third-party\n||tubberlo.com^$third-party\n||tubemogul.com^$third-party\n||tubereplay.com^$third-party\n||tumri.net^$third-party\n||turbotraff.net^$third-party\n||turn.com^$third-party\n||tusno.com^$third-party\n||tutvp.com^$third-party\n||tvprocessing.com^$third-party\n||twalm.com^$third-party\n||tweard.com^$third-party\n||twinpinenetwork.com^$third-party\n||twistads.com^$third-party\n||twittad.com^$third-party\n||twtad.com^$third-party\n||tyroo.com^$third-party\n||u-ad.info^$third-party\n||u1hw38x0.com^$third-party\n||ubudigital.com^$third-party\n||udmserve.net^$third-party\n||ugaral.com^$third-party\n||ughus.com^$third-party\n||uglyst.com^$third-party\n||uiadserver.com^$third-party\n||uiqatnpooq.com^$third-party\n||ukbanners.com^$third-party\n||unanimis.co.uk^$third-party\n||underclick.ru^$third-party\n||undertone.com^$third-party\n||unicast.com^$third-party\n||unitethecows.com^$third-party\n||universityofinternetscience.com^$third-party\n||unlockr.com^$third-party\n||unrulymedia.com^$third-party\n||unterary.com^$third-party\n||upads.info^$third-party\n||upliftsearch.com^$third-party\n||urbation.net^$third-party\n||ureace.com^$third-party\n||urlads.net^$third-party\n||urlcash.net^$third-party\n||usbanners.com^$third-party\n||usemax.de^$third-party\n||usenetjunction.com^$third-party\n||usenetpassport.com^$third-party\n||usercash.com^$third-party\n||usurv.com^$third-party\n||utarget.co.uk^$third-party\n||utarget.ru^$third-party\n||utokapa.com^$third-party\n||utubeconverter.com^$third-party\n||v.fwmrm.net^$object-subrequest,third-party\n||v.movad.de^$third-party\n||v11media.com^$third-party\n||v2cigs.com^$third-party\n||v2mlblack.biz^$third-party\n||vadpay.com^$third-party\n||validclick.com^$third-party\n||valuead.com^$third-party\n||valueaffiliate.net^$third-party\n||valueclick.com^$third-party\n||valueclick.net^$third-party\n||valueclickmedia.com^$third-party\n||valuecommerce.com^$third-party\n||valuecontent.net^$third-party\n||vapedia.com^$third-party\n||vcmedia.com^$third-party\n||vcommission.com^$third-party\n||vdopia.com^$third-party\n||vectorstock.com^$third-party\n||vellde.com^$third-party\n||velmedia.net^$third-party\n||velti.com^$third-party\n||vemba.com^$third-party\n||vendexo.com^$third-party\n||veoxa.com^$third-party\n||versahq.com^$third-party\n||versetime.com^$third-party\n||vhmnetwork.com^$third-party\n||vianadserver.com^$third-party\n||vibrant.co^$third-party\n||vibrantmedia.com^$third-party\n||video-loader.com^$third-party\n||video1404.info^$third-party\n||videoadex.com^$third-party\n||videoclick.ru^$third-party\n||videodeals.com^$third-party\n||videoegg.com^$third-party\n||videohub.com^$third-party\n||videolansoftware.com^$third-party\n||videologygroup.com^$third-party\n||videoplaza.com^$object-subrequest,third-party,domain=autoexpress.co.uk|evo.co.uk|givemefootball.com|mensfitness.co.uk|mpora.com|tribalfootball.com\n||videoplaza.com^$~object-subrequest,third-party\n||videoplaza.tv/proxy/distributor^$object-subrequest,third-party\n||videoplaza.tv^$object-subrequest,third-party,domain=tv4play.se\n||videoplaza.tv^$~object-subrequest,third-party\n||vidpay.com^$third-party\n||viedeo2k.tv^$third-party\n||view-ads.de^$third-party\n||view.atdmt.com^*/iview/$third-party\n||viewablemedia.net^$third-party\n||viewclc.com^$third-party\n||viewex.co.uk^$third-party\n||viewivo.com^$third-party\n||vindicosuite.com^$third-party\n||vipcpms.com^$third-party\n||vipquesting.com^$third-party\n||visiads.com^$third-party\n||visiblegains.com^$third-party\n||visiblemeasures.com^$~object-subrequest,third-party\n||visitdetails.com^$third-party\n||visitweb.com^$third-party\n||visualsteel.net^$third-party\n||vitalads.net^$third-party\n||vivamob.net^$third-party\n||vntsm.com^$third-party\n||vogosita.com^$third-party\n||vpico.com^$third-party\n||vs20060817.com^$third-party\n||vs4entertainment.com^$third-party\n||vs4family.com^$third-party\n||vsservers.net^$third-party\n||vth05dse.com^$third-party\n||vuiads.de^$third-party\n||vuiads.info^$third-party\n||vuiads.net^$third-party\n||w00tads.com^$third-party\n||w00tmedia.net^$third-party\n||w3exit.com^$third-party\n||w4.com^$third-party\n||w5statistics.info^$third-party\n||w9statistics.info^$third-party\n||wagershare.com^$third-party\n||wahoha.com^$third-party\n||wamnetwork.com^$third-party\n||wangfenxi.com^$third-party\n||warezlayer.to^$third-party\n||warfacco.com^$third-party\n||watchfree.flv.in^$third-party\n||wateristian.com^$third-party\n||waymp.com^$third-party\n||wbptqzmv.com^$third-party\n||wcmcs.net^$third-party\n||wcpanalytics.com^$third-party\n||web-adservice.com^$third-party\n||webads.co.nz^$third-party\n||webads.nl^$third-party\n||webadvertise123.com^$third-party\n||webgains.com^$third-party\n||webmedia.co.il^$third-party\n||weborama.fr^$third-party\n||webseeds.com^$third-party\n||webtraffic.ttinet.com^$third-party\n||webusersurvey.com^$third-party\n||wegetpaid.net^$third-party\n||wegotmedia.com^$third-party\n||werbe-sponsor.de^$third-party\n||wfnetwork.com^$third-party\n||wgreatdream.com^$third-party\n||wh5kb0u4.com^$third-party\n||where.com^$third-party\n||whtsrv9.com^$third-party\n||why-outsource.net^$third-party\n||widget.yavli.com^$third-party\n||widgetadvertising.biz^$third-party\n||widgetbanner.mobi^$third-party\n||widgetbucks.com^$third-party\n||widgetlead.net^$third-party\n||widgets.fccinteractive.com^$third-party\n||widgetsurvey.biz^$third-party\n||widgetvalue.net^$third-party\n||widgetwidget.mobi^$third-party\n||wigetmedia.com^$third-party\n||wigetstudios.com^$third-party\n||winbuyer.com^$third-party\n||wingads.com^$third-party\n||winsspeeder.info^$third-party\n||wlmarketing.com^$third-party\n||wmmediacorp.com^$third-party\n||wonclick.com^$third-party\n||wootmedia.net^$third-party\n||wordbankads.com^$third-party\n||wordego.com^$third-party\n||worlddatinghere.com^$third-party\n||worthathousandwords.com^$third-party\n||worthyadvertising.com^$third-party\n||wulium.com^$third-party\n||wurea.com^$third-party\n||wwbn.com^$third-party\n||wwv4ez0n.com^$third-party\n||wwwadcntr.com^$third-party\n||wwwpromoter.com^$third-party\n||x.mochiads.com^$third-party\n||x4300tiz.com^$third-party\n||xad.com^$third-party\n||xadcentral.com^$third-party\n||xcelltech.com^$third-party\n||xcelsiusadserver.com^$third-party\n||xchangebanners.com^$third-party\n||xdev.info^$third-party\n||xeontopa.com^$third-party\n||xfs5yhr1.com^$third-party\n||xgraph.net^$third-party\n||xjfjx8hw.com^$third-party\n||xmasdom.com^$third-party\n||xmlconfig.ltassrv.com^$third-party\n||xs.mochiads.com^$third-party\n||xtcie.com^$third-party\n||xtendadvert.com^$third-party\n||xtendmedia.com^$third-party\n||xubob.com^$third-party\n||xvika.com^$third-party\n||xx00.info^$third-party\n||xxlink.net^$third-party\n||ya88s1yk.com^$third-party\n||yabuka.com^$third-party\n||yadomedia.com^$third-party\n||yambotan.ru^$third-party\n||yawnedgtuis.org^$third-party\n||yb0t.com^$third-party\n||ycasmd.info^$third-party\n||yceml.net^$third-party\n||yeabble.com^$third-party\n||yes-messenger.com^$third-party\n||yesadsrv.com^$third-party\n||yesnexus.com^$third-party\n||yieldads.com^$third-party\n||yieldadvert.com^$third-party\n||yieldbuild.com^$third-party\n||yieldkit.com^$third-party\n||yieldlab.net^$third-party\n||yieldmanager.com^$third-party\n||yieldmanager.net^$third-party\n||yieldoptimizer.com^$third-party\n||yieldselect.com^$third-party\n||yieldx.com^$third-party\n||yldbt.com^$third-party\n||yldmgrimg.net^$third-party\n||yllix.com^$third-party\n||ymads.com^$third-party\n||yoc-adserver.com^$third-party\n||yottacash.com^$third-party\n||youcandoitwithroi.com^$third-party\n||youlamedia.com^$third-party\n||youlouk.com^$third-party\n||your-tornado-file.com^$third-party\n||your-tornado-file.org^$third-party\n||youradexchange.com^$third-party\n||yourfastpaydayloans.com^$third-party\n||yourquickads.com^$third-party\n||ytsa.net^$third-party\n||yuarth.com^$third-party\n||yucce.com^$third-party\n||yumenetworks.com^$third-party\n||yvoria.com^$third-party\n||yz56lywd.com^$third-party\n||yzrnur.com^$third-party\n||yzus09by.com^$third-party\n||z5x.net^$third-party\n||zangocash.com^$third-party\n||zanox-affiliate.de^$third-party\n||zanox.com^$third-party\n||zaparena.com^$third-party\n||zappy.co.za^$third-party\n||zapunited.com^$third-party\n||zde-engage.com^$third-party\n||zeads.com^$third-party\n||zedo.com^$third-party\n||zeesiti.com^$third-party\n||zenoviaexchange.com^$third-party\n||zenoviagroup.com^$third-party\n||zercstas.com^$third-party\n||zerezas.com^$third-party\n||zferral.com^$third-party\n||zidae.com^$third-party\n||ziffdavis.com^$third-party\n||zipropyl.com^$third-party\n||znaptag.com^$third-party\n||zoglafi.info^$third-party\n||zompmedia.com^$third-party\n||zonealta.com^$third-party\n||zonplug.com^$third-party\n||zoomdirect.com.au^$third-party\n||zugo.com^$third-party\n||zwaar.org^$third-party\n||zxxds.net^$third-party\n||zypenetwork.com^$third-party\n! Mobile\n||adbuddiz.com^$third-party\n||adcolony.com^$third-party\n||adiquity.com^$third-party\n||admob.com^$third-party\n||adwhirl.com^$third-party\n||adwired.mobi^$third-party\n||adzmob.com^$third-party\n||airpush.com^$third-party\n||amobee.com^$third-party\n||appads.com^$third-party\n||buxx.mobi^$third-party\n||dmg-mobile.com^$third-party\n||doubleclick.net^*/pfadx/app.ytpwatch.$third-party\n||greystripe.com^$third-party\n||inmobi.com^$third-party\n||kuad.kusogi.com^$third-party\n||mad-adz.com^$third-party\n||millennialmedia.com^$third-party\n||mkhoj.com^$third-party\n||mobgold.com^$third-party\n||mobizme.net^$third-party\n||mobpartner.mobi^$third-party\n||mocean.mobi^$third-party\n||mojiva.com^$third-party\n||mysearch-online.com^$third-party\n||sascdn.com^$third-party\n||smaato.net^$third-party\n||startappexchange.com^$third-party\n||stepkeydo.com^$third-party\n||tapjoyads.com^$third-party\n||vungle.com^$third-party\n||wapdollar.in^$third-party\n||waptrick.com^$third-party\n||yieldmo.com^$third-party\n! Non-English (instead of whitelisting ads)\n||adhood.com^$third-party\n||atresadvertising.com^$third-party\n! Yavli.com\n||accmndtion.org^$third-party\n||addo-mnton.com^$third-party\n||allianrd.net^$third-party\n||anomiely.com^$third-party\n||appr8.net^$third-party\n||artbr.net^$third-party\n||baordrid.com^$third-party\n||batarsur.com^$third-party\n||baungarnr.com^$third-party\n||biankord.net^$third-party\n||blazwuatr.com^$third-party\n||blipi.net^$third-party\n||bluazard.net^$third-party\n||buhafr.net^$third-party\n||casiours.com^$third-party\n||chansiar.net^$third-party\n||chiuawa.net^$third-party\n||chualangry.com^$third-party\n||compoter.net^$third-party\n||contentolyze.net^$third-party\n||contentr.net^$third-party\n||crhikay.me^$third-party\n||d3lens.com^$third-party\n||dilpy.org^$third-party\n||domri.net^$third-party\n||draugonda.net^$third-party\n||drfflt.info^$third-party\n||dutolats.net^$third-party\n||edabl.net^$third-party\n||elepheny.com^$third-party\n||entru.co^$third-party\n||ergers.net^$third-party\n||ershgrst.com^$third-party\n||esults.net^$third-party\n||exciliburn.com^$third-party\n||excolobar.com^$third-party\n||exernala.com^$third-party\n||extonsuan.com^$third-party\n||faunsts.me^$third-party\n||flaudnrs.me^$third-party\n||flaurse.net^$third-party\n||foulsomty.com^$third-party\n||fowar.net^$third-party\n||frxle.com^$third-party\n||frxrydv.com^$third-party\n||fuandarst.com^$third-party\n||gghfncd.net^$third-party\n||gusufrs.me^$third-party\n||hapnr.net^$third-party\n||havnr.com^$third-party\n||heizuanubr.net^$third-party\n||hobri.net^$third-party\n||hoppr.co^$third-party\n||ignup.com^$third-party\n||iunbrudy.net^$third-party\n||ivism.org^$third-party\n||jaspensar.com^$third-party\n||jdrm4.com^$third-party\n||jellr.net^$third-party\n||juruasikr.net^$third-party\n||jusukrs.com^$third-party\n||kioshow.com^$third-party\n||kuangard.net^$third-party\n||lesuard.com^$third-party\n||lia-ndr.com^$third-party\n||lirte.org^$third-party\n||loopr.co^$third-party\n||nuaknamg.net^$third-party\n||oplo.org^$third-party\n||opner.co^$third-party\n||pikkr.net^$third-party\n||polawrg.com^$third-party\n||prfffc.info^$third-party\n||q3sift.com^$third-party\n||qewa33a.com^$third-party\n||qzsccm.com^$third-party\n||r3seek.com^$third-party\n||rdige.com^$third-party\n||regersd.net^$third-party\n||rhgersf.com^$third-party\n||rlex.org^$third-party\n||rterdf.me^$third-party\n||rugistoto.net^$third-party\n||selectr.net^$third-party\n||simusangr.com^$third-party\n||splazards.com^$third-party\n||spoa-soard.com^$third-party\n||sxrrxa.net^$third-party\n||t3sort.com^$third-party\n||th4wwe.net^$third-party\n||thrilamd.net^$third-party\n||topdi.net^$third-party\n||trllxv.co^$third-party\n||trndi.net^$third-party\n||uppo.co^$third-party\n||viewscout.com^$third-party\n||vopdi.com^$third-party\n||waddr.com^$third-party\n||wensdteuy.com^$third-party\n||wopdi.com^$third-party\n||wuarnurf.net^$third-party\n||wuatriser.net^$third-party\n||wudr.net^$third-party\n||xcrsqg.com^$third-party\n||xplrer.co^$third-party\n||xylopologyn.com^$third-party\n||yardr.net^$third-party\n||yobr.net^$third-party\n||yodr.net^$third-party\n||yomri.net^$third-party\n||yopdi.com^$third-party\n||ypprr.com^$third-party\n||yrrrbn.me^$third-party\n||z4pick.com^$third-party\n||zomri.net^$third-party\n||zrfrornn.net^$third-party\n! *** easylist:easylist/easylist_adservers_popup.txt ***\n||123vidz.com^$popup,third-party\n||1phads.com^$popup,third-party\n||32d1d3b9c.se^$popup,third-party\n||4dsply.com^$popup,third-party\n||5dimes.com^$popup,third-party\n||83nsdjqqo1cau183xz.com^$popup,third-party\n||888casino.com^$popup,third-party\n||888games.com^$popup,third-party\n||888media.net^$popup,third-party\n||888poker.com^$popup,third-party\n||888promos.com^$popup,third-party\n||9newstoday.net^$popup,third-party\n||abbeyblog.me^$popup,third-party\n||ad-apac.doubleclick.net^$popup,third-party\n||ad-emea.doubleclick.net^$popup,third-party\n||ad-feeds.com^$popup,third-party\n||ad.doubleclick.net^$popup,third-party\n||ad.zanox.com/ppv/$popup,third-party\n||ad131m.com^$popup,third-party\n||ad2387.com^$popup,third-party\n||ad2games.com^$popup,third-party\n||ad4game.com^$popup,third-party\n||adbma.com^$popup,third-party\n||adcash.com^$popup,third-party\n||adfarm.mediaplex.com^$popup,third-party\n||adform.net^$popup,third-party\n||adimps.com^$popup,third-party\n||aditor.com^$popup,third-party\n||adjuggler.net^$popup,third-party\n||adk2.co^$popup,third-party\n||adk2.com^$popup,third-party\n||adk2.net^$popup,third-party\n||adlure.net^$popup,third-party\n||adnxs.com^$popup,third-party\n||adonweb.ru^$popup,third-party\n||adplxmd.com^$popup,third-party\n||ads.sexier.com^$popup,third-party\n||adserverplus.com^$popup,third-party\n||adshostnet.com^$popup,third-party\n||adsmarket.com^$popup,third-party\n||adsupply.com^$popup,third-party\n||adsurve.com^$popup,third-party\n||adtrace.org^$popup,third-party\n||adtraffic.org^$popup,third-party\n||advertserve.com^$popup,third-party\n||advmedialtd.com^$popup,third-party\n||affbuzzads.com^$popup,third-party\n||aflrm.com^$popup,third-party\n||allslotscasino.com^$popup,third-party\n||alpinedrct.com^$popup,third-party\n||alternads.info^$popup,third-party\n||am10.ru^$popup,third-party\n||angege.com^$popup,third-party\n||annualinternetsurvey.com^$popup,third-party\n||answered-questions.com^$popup,third-party\n||ar.voicefive.com^$popup,third-party\n||awempire.com^$popup,third-party\n||awsclic.com^$popup,third-party\n||bannerflow.com^$popup,third-party\n||baypops.com^$popup,third-party\n||becoquin.com^$popup,third-party\n||becoquins.net^$popup,third-party\n||bentdownload.com^$popup,third-party\n||bestproducttesters.com^$popup,third-party\n||bidsystem.com^$popup,third-party\n||bidvertiser.com^$popup,third-party\n||bighot.ru^$popup,third-party\n||binaryoptionsgame.com^$popup,third-party\n||blinko.es^$popup,third-party\n||blinkogold.es^$popup,third-party\n||blockthis.es^$popup,third-party\n||blogscash.info^$popup,third-party\n||bongacams.com^$popup,third-party\n||bonzuna.com^$popup,third-party\n||brandreachsys.com^$popup,third-party\n||bzrvwbsh5o.com^$popup,third-party\n||careerjournalonline.com^$popup\n||casino.betsson.com^$popup,third-party\n||clickmngr.com^$popup,third-party\n||clickosmedia.com^$popup,third-party\n||clicksor.com^$popup,third-party\n||clicksvenue.com^$popup,third-party\n||clickter.net^$popup,third-party\n||clkads.com^$popup,third-party\n||clkmon.com^$popup,third-party\n||clkrev.com^$popup,third-party\n||cloudtracked.com^$popup,third-party\n||cmllk2.info^$popup,third-party\n||contentabc.com^$popup,third-party\n||cpmstar.com^$popup,third-party\n||cpmterra.com^$popup,third-party\n||cpvadvertise.com^$popup,third-party\n||crazyad.net^$popup,third-party\n||directrev.com^$popup,third-party\n||distantnews.com^$popup,third-party\n||distantstat.com^$popup,third-party\n||dojerena.com^$popup,third-party\n||doublepimp.com^$popup,third-party\n||down1oads.com^$popup,third-party\n||downloadboutique.com^$popup,third-party\n||downloadthesefile.com^$popup,third-party\n||easydownloadnow.com^$popup,third-party\n||easykits.org^$popup,third-party\n||ebzkswbs78.com^$popup,third-party\n||epicgameads.com^$popup,third-party\n||euromillionairesystem.me^$popup,third-party\n||ewebse.com^$popup,third-party\n||exoclick.com^$popup,third-party\n||ezdownloadpro.info^$popup,third-party\n||f-hookups.com^$popup,third-party\n||f-questionnaire.com^$popup,third-party\n||fhserve.com^$popup,third-party\n||fidel.to^$popup,third-party\n||filestube.com^$popup,third-party\n||finance-reporting.org^$popup,third-party\n||findonlinesurveysforcash.com^$popup,third-party\n||firstclass-download.com^$popup,third-party\n||firstmediahub.com^$popup,third-party\n||fmdwbsfxf0.com^$popup,third-party\n||friendlyduck.com^$popup,third-party\n||g05.info^$popup,third-party\n||ganja.com^$popup,third-party\n||gofindmedia.net^$popup,third-party\n||googleads.g.doubleclick.net^$popup,third-party\n||gotoplaymillion.com^$popup,third-party\n||greatbranddeals.com^$popup,third-party\n||gsniper2.com^$popup,third-party\n||hd-plugin.com^$popup,third-party\n||highcpms.com^$popup,third-party\n||homecareerforyou1.info^$popup,third-party\n||hornygirlsexposed.com^$popup,third-party\n||hotchatdirect.com^$popup,third-party\n||hstpnetwork.com^$popup,third-party\n||iiasdomk1m9812m4z3.com^$popup,third-party\n||ilividnewtab.com^$popup,third-party\n||inbinaryoption.com^$popup,third-party\n||indianmasala.com^$popup,third-party,domain=masalaboard.com\n||indianweeklynews.com^$popup,third-party\n||insta-cash.net^$popup,third-party\n||instantpaydaynetwork.com^$popup,third-party\n||jdtracker.com^$popup,third-party\n||jujzh9va.com^$popup,third-party\n||junbi-tracker.com^$popup,third-party\n||kanoodle.com^$popup,third-party\n||landsraad.cc^$popup,third-party\n||legisland.net^$popup,third-party\n||ligatus.com^$popup,third-party\n||livechatflirt.com^$popup,third-party\n||livepromotools.com^$popup,third-party\n||liversely.net^$popup,third-party\n||lmebxwbsno.com^$popup,third-party\n||lnkgt.com^$popup,third-party\n||m57ku6sm.com^$popup,third-party\n||marketresearchglobal.com^$popup,third-party\n||media-app.com^$popup,third-party\n||media-servers.net^$popup,third-party\n||mediaseeding.com^$popup,third-party\n||meetgoodgirls.com^$popup,third-party\n||meetsexygirls.org^$popup,third-party\n||menepe.com^$popup,third-party\n||metodoroleta24h.com^$popup,third-party\n||millionairesurveys.com^$popup,third-party\n||mktmobi.com^$popup,third-party\n||mobileraffles.com^$popup,third-party\n||moneytec.com^$popup,third-party\n||my-layer.net^$popup,third-party\n||n388hkxg.com^$popup,third-party\n||netliker.com^$popup,third-party\n||nturveev.com^$popup,third-party\n||nymphdate.com^$popup,third-party\n||onad.eu^$popup,third-party\n||onclickads.net^$popup,third-party\n||onhitads.net^$popup,third-party\n||onlinecareerpackage.com^$popup,third-party\n||onlinecashmethod.com^$popup,third-party\n||open-downloads.net^$popup,third-party\n||openadserving.com^$popup,third-party\n||overturs.com^$popup,third-party\n||partypills.org^$popup,third-party\n||pdfcomplete.com^$popup,third-party\n||perfcreatives.com^$popup,third-party\n||pexu.com^$popup,third-party\n||pgmediaserve.com^$popup,third-party\n||pipaoffers.com^$popup,third-party\n||pointroll.com^$popup,third-party\n||popads.net^$popup,third-party\n||popmyads.com^$popup,third-party\n||print3.info^$popup,third-party\n||prizegiveaway.org^$popup,third-party\n||promotions-paradise.org^$popup,third-party\n||promotions.sportsbet.com.au^$popup,third-party\n||propellerads.com^$popup,third-party\n||propellerpops.com^$popup,third-party\n||prowlerz.com^$popup,third-party\n||pubads.g.doubleclick.net^$popup,third-party\n||pubdirecte.com^$popup,third-party\n||pulse360.com^$popup,third-party\n||raoplenort.biz^$popup,third-party\n||ratari.ru^$popup,third-party\n||rdsrv.com^$popup,third-party\n||rehok.km.ua^$popup,third-party\n||rgadvert.com^$popup,third-party\n||rikhov.ru^$popup,third-party\n||ringtonepartner.com^$popup,third-party\n||ronetu.ru^$popup,third-party\n||roulettebotplus.com^$popup,third-party\n||rubikon6.if.ua^$popup,third-party\n||secureintl.com^$popup,third-party\n||senzapudore.it^$popup,third-party\n||serving-sys.com^$popup,third-party\n||sexitnow.com^$popup,third-party\n||silstavo.com^$popup,third-party\n||simpleinternetupdate.com^$popup,third-party\n||singlesexdates.com^$popup,third-party\n||slimspots.com^$popup,third-party\n||smartwebads.com^$popup,third-party\n||sms-mmm.com^$popup,third-party\n||smutty.com^$popup,third-party\n||sparkstudios.com^$popup,third-party\n||srv-ad.com^$popup,third-party\n||srv2trking.com^$popup,third-party\n||srvpub.com^$popup,third-party\n||statstrackeronline.com^$popup,third-party\n||surveyend.com^$popup,third-party\n||surveysforgifts.org^$popup,third-party\n||surveyspaid.com^$popup,third-party\n||surveystope.com^$popup,third-party\n||swadvertising.org^$popup,third-party\n||symkashop.ru^$popup,third-party\n||syncedvision.com^$popup,third-party\n||technicssurveys.info^$popup,third-party\n||textsrv.com^$popup,third-party\n||the-consumer-reporter.org^$popup,third-party\n||therewardsurvey.com^$popup,third-party\n||topshelftraffic.com^$popup,third-party\n||toroadvertisingmedia.com^$popup,third-party\n||totrack.ru^$popup,third-party\n||trafficforce.com^$popup,third-party\n||traffichaus.com^$popup,third-party\n||trklnks.com^$popup,third-party\n||trw12.com^$popup,third-party\n||tutvp.com^$popup,third-party\n||updater-checker.net^$popup,third-party\n||vgsgaming-ads.com^$popup,third-party\n||vipcpms.com^$popup,third-party\n||vprmnwbskk.com^$popup,third-party\n||w4statistics.info^$popup,third-party\n||wahoha.com^$popup,third-party\n||wbsadsdel.com^$popup,third-party\n||wbsadsdel2.com^$popup,third-party\n||weareheard.org^$popup,third-party\n||websearchers.net^$popup,third-party\n||webtrackerplus.com^$popup,third-party\n||weliketofuckstrangers.com^$popup,third-party\n||wigetmedia.com^$popup,third-party\n||wonderlandads.com^$popup,third-party\n||worldrewardcenter.net^$popup,third-party\n||wwwpromoter.com^$popup,third-party\n||wzus1.ask.com^$popup,third-party\n||xclicks.net^$popup,third-party\n||xtendmedia.com^$popup,third-party\n||yieldmanager.com^$popup,third-party\n||yieldtraffic.com^$popup,third-party\n||yupiromo.ru^$popup,third-party\n||z5x.net^$popup,third-party\n||zedo.com^$popup,third-party\n! *** easylist:easylist_adult/adult_adservers.txt ***\n||0llii0g6.com^$third-party\n||100pour.com^$third-party\n||10y5gehv.com^$third-party\n||123advertising.nl^$third-party\n||15yomodels.com^$third-party\n||173.245.86.115^$domain=~yobt.com.ip\n||18naked.com^$third-party\n||195.228.74.26^$third-party\n||1loop.com^$third-party\n||1tizer.com^$third-party\n||206.217.206.137^$third-party\n||212.150.34.117^$third-party\n||21sexturycash.com^$third-party\n||247teencash.net^$third-party\n||24smile.org^$third-party\n||24x7adservice.com^$third-party\n||33traffic.com^$third-party\n||40xbfzk8.com^$third-party\n||45i73jv6.com^$third-party\n||4link.it^$third-party\n||59zs1xei.com^$third-party\n||699fy4ne.com^$third-party\n||750industries.com^$third-party\n||76.76.5.113^$third-party\n||777-partner.com^$third-party\n||777-partner.net^$third-party\n||777-partners.com^$third-party\n||777-partners.net^$third-party\n||777partner.com^$third-party\n||777partner.net^$third-party\n||7cxcrejm.com^$third-party\n||7vws1j1j.com^$third-party\n||80.77.113.200^$third-party\n||85.17.210.202^$third-party\n||89.248.172.46^$third-party\n||8ipztcc1.com^$third-party\n||aaovn.info^$third-party\n||abakys.ru^$third-party\n||abusedbabysitters.com^$third-party\n||acmexxx.com^$third-party\n||acnescarsx.info^$third-party\n||actionlocker.com^$third-party\n||ad-411.com^$third-party\n||ad-u.com^$third-party\n||ad001.ru^$third-party\n||ad4partners.com^$third-party\n||adbars.net^$third-party\n||adcell.de^$third-party\n||addbags.com^$third-party\n||adfux.com^$third-party\n||adjunky.com^$third-party\n||admez.com^$third-party\n||adnetxchange.com^$third-party\n||adparad.net^$third-party\n||adperiun.com^$third-party\n||adpron.com^$third-party\n||adrent.net^$third-party\n||adsbr.info^$third-party\n||adsgangsta.com^$third-party\n||adshostview.com^$third-party\n||adskape.ru^$third-party\n||adsyst.biz^$third-party\n||adult3dcomics.com^$third-party\n||adultaccessnow.com^$third-party\n||adultadmedia.com^$third-party\n||adultadvertising.net^$third-party\n||adultcommercial.net^$third-party\n||adultdatingtraffic.com^$third-party\n||adultlinkexchange.com^$third-party\n||adultmediabuying.com^$third-party\n||adultmoviegroup.com^$third-party\n||adultoafiliados.com.br^$third-party\n||adultpopunders.com^$third-party\n||adultsense.com^$third-party\n||adultsense.org^$third-party\n||adulttiz.com^$third-party\n||adulttubetraffic.com^$third-party\n||adv-plus.com^$third-party\n||adv777.com^$third-party\n||adventory.com^$third-party\n||advertisingsex.com^$third-party\n||advertom.com^$third-party\n||advertrtb.com^$third-party\n||advmaker.ru^$third-party\n||advmania.com^$third-party\n||advprotraffic.com^$third-party\n||advredir.com^$third-party\n||advsense.info^$third-party\n||adxite.com^$third-party\n||adxmarket.com^$third-party\n||adxpansion.com^$third-party\n||adxregie.com^$third-party\n||adzs.com^$third-party\n||aeesy.com^$third-party\n||affiliatewindow.com^$third-party\n||affiliation-int.com^$third-party\n||affiligay.net^$third-party\n||aipbannerx.com^$third-party\n||aipmedia.com^$third-party\n||alfatraffic.com^$third-party\n||all-about-tech.com^$third-party\n||alladultcash.com^$third-party\n||allosponsor.com^$third-party\n||allotraffic.com^$third-party\n||amtracking01.com^$third-party\n||amvotes.ru^$third-party\n||anastasia-international.com^$third-party\n||angelpastel.com^$third-party\n||antaraimedia.com^$third-party\n||antoball.com^$third-party\n||apromoweb.com^$third-party\n||asiafriendfinder.com^$third-party\n||augrenso.com^$third-party\n||awmcenter.eu^$third-party\n||awmpartners.com^$third-party\n||ax47mp-xp-21.com^$third-party\n||azerbazer.com^$third-party\n||aztecash.com^$third-party\n||basesclick.ru^$third-party\n||baskodenta.com^$third-party\n||bcash4you.com^$third-party\n||belamicash.com^$third-party\n||belasninfetas.org^$third-party\n||bestholly.com^$third-party\n||bestssn.com^$third-party\n||betweendigital.com^$third-party\n||bgmtracker.com^$third-party\n||biksibo.ru^$third-party\n||black-ghettos.info^$third-party\n||blossoms.com^$third-party\n||board-books.com^$third-party\n||boinkcash.com^$third-party\n||bookofsex.com^$third-party\n||branzas.com^$third-party\n||brightcpm.net^$third-party\n||brothersincash.com^$third-party\n||brqvld0p.com^$third-party\n||bumblecash.com^$third-party\n||bumskontakte.ch^$third-party\n||cache.imagehost123.com^$third-party\n||cam-lolita.net^$third-party\n||cam4flat.com^$third-party\n||camads.net^$third-party\n||camcrush.com^$third-party\n||camdough.com^$third-party\n||camduty.com^$third-party\n||campartner.com^$third-party\n||camprime.com^$third-party\n||campromos.nl^$third-party\n||camsense.com^$third-party\n||camsitecash.com^$third-party\n||camzap.com^$third-party\n||cash-program.com^$third-party\n||cash4movie.com^$third-party\n||cashlayer.com^$third-party\n||cashthat.com^$third-party\n||cashtraff.com^$third-party\n||cdn.nsimg.net^$third-party\n||ceepq.com^$third-party\n||celeb-ads.com^$third-party\n||celogera.com^$third-party\n||cennter.com^$third-party\n||certified-apps.com^$third-party\n||cervicalknowledge.info^$third-party\n||chatischat.com^$third-party\n||che-ka.com^$third-party\n||chestyry.com^$third-party\n||chopstick16.com^$third-party\n||citysex.com^$third-party\n||clearac.com^$third-party\n||clickganic.com^$third-party\n||clickpapa.com^$third-party\n||clicksvenue.com^$third-party\n||clickthruserver.com^$third-party\n||clicktrace.info^$third-party\n||cmdfnow.com^$third-party\n||codelnet.com^$third-party\n||coldhardcash.com^$third-party\n||coloredguitar.com^$third-party\n||colpory.com^$third-party\n||comunicazio.com^$third-party\n||cpacoreg.com^$third-party\n||cpl1.ru^$third-party\n||crakbanner.com^$third-party\n||crakcash.com^$third-party\n||creoads.com^$third-party\n||crocoads.com^$third-party\n||crtracklink.com^$third-party\n||cwgads.com^$third-party\n||cyberbidhost.com^$third-party\n||cybernetentertainment.com^$third-party\n||d0main.ru^$third-party\n||d29gqcij.com^$third-party\n||daffaite.com^$third-party\n||dallavel.com^$third-party\n||dana123.com^$third-party\n||danzabucks.com^$third-party\n||darangi.ru^$third-party\n||data-ero-advertising.com^$third-party\n||datefunclub.com^$third-party\n||datetraders.com^$third-party\n||datexchanges.net^$third-party\n||dating-adv.com^$third-party\n||datingadnetwork.com^$third-party\n||datingamateurs.com^$third-party\n||datingidol.com^$third-party\n||dblpmp.com^$third-party\n||deecash.com^$third-party\n||demanier.com^$third-party\n||denotyro.com^$third-party\n||depilflash.tv^$third-party\n||depravedwhores.com^$third-party\n||desiad.net^$third-party\n||digitaldesire.com^$third-party\n||directadvert.ru^$third-party\n||directchat.tv^$third-party\n||direction-x.com^$third-party\n||discreetlocalgirls.com^$third-party\n||divascam.com^$third-party\n||divertura.com^$third-party\n||dofolo.ru^$third-party\n||dosugcz.biz^$third-party\n||double-check.com^$third-party\n||doublegear.com^$third-party\n||drevil.to^$third-party\n||dro4icho.ru^$third-party\n||dtiserv2.com^$third-party\n||dvdkinoteatr.com^$third-party\n||eadulttraffic.com^$third-party\n||easy-dating.org^$third-party\n||easyflirt.com^$third-party\n||ebdr2.com^$third-party\n||elekted.com^$third-party\n||eltepo.ru^$third-party\n||emediawebs.com^$third-party\n||enoratraffic.com^$third-party\n||eragi.ru^$third-party\n||erosadv.com^$third-party\n||erotikdating.com^$third-party\n||erotizer.info^$third-party\n||escortso.com^$third-party\n||eu2xml.com^$third-party\n||euro-rx.com^$third-party\n||euro4ads.de^$third-party\n||exchangecash.de^$third-party\n||exclusivepussy.com^$third-party\n||exoclickz.com^$third-party\n||exogripper.com^$third-party\n||eyemedias.com^$third-party\n||facebookofsex.com^$third-party\n||faceporn.com^$third-party\n||facetz.net^$third-party\n||fanmalinin.ru^$third-party\n||feeder.xxx^$third-party\n||felixflow.com^$third-party\n||fickads.net^$third-party\n||filthads.com^$third-party\n||findandtry.com^$third-party\n||flashadtools.com^$third-party\n||fleshcash.com^$third-party\n||fleshlightgirls.com^$third-party\n||flipflapflo.info^$third-party\n||flipflapflo.net^$third-party\n||flirt4e.com^$third-party\n||flirt4free.com^$third-party\n||flirtingsms.com^$third-party\n||fmscash.com^$third-party\n||fncash.com^$third-party\n||forgetstore.com^$third-party\n||freakads.com^$third-party\n||free-porn-vidz.com^$third-party\n||frestacero.com^$third-party\n||frestime.com^$third-party\n||frivol-ads.com^$third-party\n||frutrun.com^$third-party\n||fuckbook.cm^$third-party\n||fuckbookdating.com^$third-party\n||fuckermedia.com^$third-party\n||fuckyoucash.com^$third-party\n||fuelbuck.com^$third-party\n||funcel.mobi^$third-party\n||funnypickuplinesforgirls.com^$third-party\n||g6ni40i7.com^$third-party\n||g726n8cy.com^$third-party\n||gamblespot.ru^$third-party\n||ganardineroreal.com^$third-party\n||gayadpros.com^$third-party\n||gayxperience.com^$third-party\n||gefnaro.com^$third-party\n||genialradio.com^$third-party\n||geoaddicted.net^$third-party\n||geofamily.ru^$third-party\n||geoinventory.com^$third-party\n||getiton.com^$third-party\n||gfhdkse.com^$third-party\n||ggwcash.com^$third-party\n||gl-cash.com^$third-party\n||glbtrk.com^$third-party\n||go2euroshop.com^$third-party\n||goallurl.ru^$third-party\n||goklics.ru^$third-party\n||golderotica.com^$third-party\n||govereign.com^$third-party\n||greatcpm.com^$third-party\n||gridlockparadise.com^$third-party\n||gtsads.com^$third-party\n||gunzblazingpromo.com^$third-party\n||helltraffic.com^$third-party\n||hentaibiz.com^$third-party\n||herezera.com^$third-party\n||hiddenbucks.com^$third-party\n||highnets.com^$third-party\n||hipals.com^$third-party\n||hizlireklam.com^$third-party\n||home-soon.com^$third-party\n||hookupbucks.com^$third-party\n||hopilos.com^$third-party\n||hornymatches.com^$third-party\n||hornyspots.com^$third-party\n||host-go.info^$third-party\n||hostave4.net^$third-party\n||hot-dances.com^$third-party\n||hot-socials.com^$third-party\n||hotsocials.com^$third-party\n||hsmclick.com^$third-party\n||hubtraffic.com^$third-party\n||icetraffic.com^$third-party\n||icqadvert.org^$third-party\n||ideal-sexe.com^$third-party\n||idolbucks.com^$third-party\n||igiplay.net^$third-party\n||iheartbucks.com^$third-party\n||ilovecheating.com^$third-party\n||impotencehelp.info^$third-party\n||inheart.ru^$third-party\n||intellichatadult.com^$third-party\n||internebula.net^$third-party\n||intrapromotion.com^$third-party\n||iprofit.cc^$third-party\n||itmcash.com^$third-party\n||itrxx.com^$third-party\n||itslive.com^$third-party\n||itw.me^$third-party\n||iwinnersadvantage.com^$third-party\n||ixspublic.com^$third-party\n||jackao.net^$third-party\n||javbucks.com^$third-party\n||jaymancash.com^$third-party\n||jerrcotch.com^$third-party\n||jfresi.com^$third-party\n||joinnowinstantly.com^$third-party\n||jowapt.com^$third-party\n||joyourself.com^$third-party\n||juicyads.com^$third-party\n||juicycash.net^$third-party\n||justresa.com^$third-party\n||jz9ugaqb.com^$third-party\n||k9x.net^$third-party\n||kadam.ru^$third-party\n||kaplay.com^$third-party\n||kingpinmedia.net^$third-party\n||kinopokaz.org^$third-party\n||kliklink.ru^$third-party\n||kolestence.com^$third-party\n||kolitat.com^$third-party\n||kolort.ru^$third-party\n||kuhnivsemisrazu.ru^$third-party\n||kwot.biz^$third-party\n||lavantat.com^$third-party\n||leche69.com^$third-party\n||legendarylars.com^$third-party\n||lickbylick.com^$third-party\n||lifepromo.biz^$third-party\n||limon.biz^$third-party\n||links-and-traffic.com^$third-party\n||livecam.com^$third-party\n||livejasmin.tv^$third-party\n||liveprivates.com^$third-party\n||livepromotools.com^$third-party\n||livetraf.com^$third-party\n||lizads.com^$third-party\n||loa-traffic.com^$third-party\n||loading-delivery1.com^$third-party\n||lostun.com^$third-party\n||loveadverts.com^$third-party\n||lovecam.com.br^$third-party\n||lovercash.com^$third-party\n||lsawards.com^$third-party\n||lucidcommerce.com^$third-party\n||luvcash.com^$third-party\n||luvcom.com^$third-party\n||madbanner.com^$third-party\n||magical-sky.com^$third-party\n||mahnatka.ru^$third-party\n||mallcom.com^$third-party\n||mallorcash.com^$third-party\n||manfys.com^$third-party\n||markswebcams.com^$third-party\n||masterwanker.com^$third-party\n||matrimoniale3x.ro^$third-party\n||matrix-cash.com^$third-party\n||maxcash.com^$third-party\n||maxiadv.com^$third-party\n||mb103.com^$third-party\n||mc-nudes.com^$third-party\n||mdlsrv.com^$third-party\n||meccahoo.com^$third-party\n||media-click.ru^$third-party\n||mediagra.com^$third-party\n||mediumpimpin.com^$third-party\n||megoads.eu^$third-party\n||meineserver.com^$third-party\n||menteret.com^$third-party\n||meta4-group.com^$third-party\n||methodcash.com^$third-party\n||meubonus.com^$third-party\n||might-stay.info^$third-party\n||millioncash.ru^$third-party\n||mmaaxx.com^$third-party\n||mo8mwxi1.com^$third-party\n||mobalives.com^$third-party\n||mobbobr.com^$third-party\n||mobilerevenu.com^$third-party\n||mopilod.com^$third-party\n||morehitserver.com^$third-party\n||mp3vicio.com^$third-party\n||mpmcash.com^$third-party\n||mrskincash.com^$third-party\n||msquaredproductions.com^$third-party\n||mtoor.com^$third-party\n||mtree.com^$third-party\n||myadultbanners.com^$third-party\n||mymirror.biz^$third-party\n||myprecisionads.com^$third-party\n||mywebclick.net^$third-party\n||n9nedegrees.com^$third-party\n||nastydollars.com^$third-party\n||nature-friend.com^$third-party\n||netosdesalim.info^$third-party\n||neuesdate.com^$third-party\n||newads.bangbros.com^$third-party\n||newagerevenue.com^$third-party\n||newnudecash.com^$third-party\n||newsexbook.com^$third-party\n||ngbn.net^$third-party\n||nikkiscash.com^$third-party\n||ningme.ru^$third-party\n||njmaq.com^$third-party\n||nkk31jjp.com^$third-party\n||nscash.com^$third-party\n||nsfwads.com^$third-party\n||nummobile.com^$third-party\n||nvp2auf5.com^$third-party\n||oddads.net^$third-party\n||odzb5nkp.com^$third-party\n||okeo.ru^$third-party\n||onhercam.com^$third-party\n||onyarysh.ru^$third-party\n||ordermc.com^$third-party\n||orodi.ru^$third-party\n||otaserve.net^$third-party\n||otherprofit.com^$third-party\n||outster.com^$third-party\n||owlopadjet.info^$third-party\n||owpawuk.ru^$third-party\n||ozelmedikal.com^$third-party\n||ozon.ru^$third-party\n||ozone.ru^$third-party,domain=~ozon.ru|~ozonru.co.il|~ozonru.com|~ozonru.eu|~ozonru.kz\n||ozonru.eu^$third-party\n||paid-to-promote.net^$third-party\n||parkingpremium.com^$third-party\n||partnercash.com^$third-party\n||partnercash.de^$third-party\n||pecash.com^$third-party\n||pepipo.com^$third-party\n||philstraffic.com^$third-party\n||pictureturn.com^$third-party\n||pinkhoneypots.com^$third-party\n||plachetde.biz^$third-party\n||plantaosexy.com^$third-party\n||plugrush.com^$third-party\n||pnads.com^$third-party\n||polimantu.com^$third-party\n||poonproscash.com^$third-party\n||pop-bazar.net^$third-party\n||popander.biz^$third-party\n||popander.com^$third-party\n||popdown.biz^$third-party\n||poppcheck.de^$third-party\n||popupclick.ru^$third-party\n||porkolt.com^$third-party\n||porn-ad.org^$third-party\n||porn-hitz.com^$third-party\n||porn-site-builder.com^$third-party\n||porn88.net^$third-party\n||porn99.net^$third-party\n||pornattitude.com^$third-party\n||pornconversions.com^$third-party\n||pornearn.com^$third-party\n||pornkings.com^$third-party\n||pornleep.com^$third-party\n||porno-file.ru^$third-party\n||pornoow.com^$third-party\n||porntrack.com^$third-party\n||portable-basketball.com^$third-party\n||pourmajeurs.com^$third-party\n||ppc-direct.com^$third-party\n||premature-ejaculation-causes.org^$third-party\n||premiumhdv.com^$third-party\n||privacyprotector.com^$third-party\n||private4.com^$third-party\n||privateseiten.net^$third-party\n||privatewebseiten.com^$third-party\n||profistats.net^$third-party\n||profitstat.biz^$third-party\n||program3.com^$third-party\n||promo4partners.com^$third-party\n||promocionesweb.com^$third-party\n||promotion-campaigns.com^$third-party\n||promotools.biz^$third-party\n||promowebstar.com^$third-party\n||protect-x.com^$third-party\n||protizer.ru^$third-party\n||prscripts.com^$third-party\n||ptclassic.com^$third-party\n||ptrfc.com^$third-party\n||ptwebcams.com^$third-party\n||publish4.com^$third-party\n||pussyeatingclub.com^$third-party\n||pussyeatingclubcams.com^$third-party\n||putags.com^$third-party\n||putanapartners.com^$third-party\n||pyiel2bz.com^$third-party\n||quagodex.com^$third-party\n||queronamoro.com^$third-party\n||quexotac.com^$third-party\n||r7e0zhv8.com^$third-party\n||rack-media.com^$third-party\n||ragazzeinvendita.com^$third-party\n||ramctrlgate.com^$third-party\n||rareru.ru^$third-party\n||reachword.com^$third-party\n||real2clean.ru^$third-party\n||realdatechat.com^$third-party\n||realitycash.com^$third-party\n||realitytraffic.com^$third-party\n||redcash.net^$third-party\n||redirectoptimizer.com^$third-party\n||redlightcenter.com^$third-party\n||redpineapplemedia.com^$third-party\n||reliablebanners.com^$third-party\n||reprak.com^$third-party\n||retargetpro.net^$third-party\n||retoxo.com^$third-party\n||rexbucks.com^$third-party\n||rivcash.com^$third-party\n||rmbn.net^$third-party\n||rmkflouh.com^$third-party\n||robotadserver.com^$third-party\n||royal-cash.com^$third-party\n||rsdisp.ru^$third-party\n||rtbsystem.com^$third-party\n||rubanners.com^$third-party\n||rukplaza.com^$third-party\n||rulerclick.com^$third-party\n||rulerclick.ru^$third-party\n||runetki.co^$third-party\n||runetki.com^$third-party\n||russianlovematch.com^$third-party\n||safelinktracker.com^$third-party\n||sancdn.net^$third-party\n||sascentral.com^$third-party\n||sbs-ad.com^$third-party\n||scenesgirls.com^$third-party\n||searchpeack.com^$third-party\n||searchx.eu^$third-party\n||secretbehindporn.com^$third-party\n||seekbang.com^$third-party\n||seemybucks.com^$third-party\n||seitentipp.com^$third-party\n||senkinar.com^$third-party\n||sesxc.com^$third-party\n||sexad.net^$third-party\n||sexdatecash.com^$third-party\n||sexlist.com^$third-party\n||sexole.com^$third-party\n||sexopages.com^$third-party\n||sexplaycam.com^$third-party\n||sexsearch.com^$third-party\n||sextracker.com^$third-party\n||sextubecash.com^$third-party\n||sexvertise.com^$third-party\n||sexy-ch.com^$third-party\n||sexypower.net^$third-party\n||shopping-centres.org^$third-party\n||siccash.com^$third-party\n||sixsigmatraffic.com^$third-party\n||sjosteras.com^$third-party\n||skeettools.com^$third-party\n||slendastic.com^$third-party\n||smartbn.ru^$third-party\n||sms-xxx.com^$third-party\n||smutty.com^$third-party\n||socialsexnetwork.net^$third-party\n||solutionsadultes.com^$third-party\n||spcwm.com^$third-party\n||spunkycash.com^$third-party\n||squeeder.com^$third-party\n||startede.com^$third-party\n||startwebpromo.com^$third-party\n||stat-data.net^$third-party\n||steamtraffic.com^$third-party\n||sterrencash.nl^$third-party\n||streamateaccess.com^$third-party\n||stripsaver.com^$third-party\n||sunnysmedia.com^$third-party\n||sv2.biz^$third-party\n||sweetmedia.org^$third-party\n||sweetstudents.com^$third-party\n||talk-blog.com^$third-party\n||targetingnow.com^$third-party\n||targettrafficmarketing.net^$third-party\n||tarkita.ru^$third-party\n||teasernet.ru^$third-party\n||teaservizio.com^$third-party\n||tech-board.com^$third-party\n||teendestruction.com^$third-party\n||the-adult-company.com^$third-party\n||thebunsenburner.com^$third-party\n||thepayporn.com^$third-party\n||thesocialsexnetwork.com^$third-party\n||thumbnail-galleries.net^$third-party\n||timteen.com^$third-party\n||tingrinter.com^$third-party\n||tinyweene.com^$third-party\n||titsbro.net^$third-party\n||titsbro.org^$third-party\n||titsbro.pw^$third-party\n||tizernet.com^$third-party\n||tkhigh.com^$third-party\n||tm-core.net^$third-party\n||tmserver-1.com^$third-party\n||tmserver-2.net^$third-party\n||todayssn.com^$third-party\n||toget.ru^$third-party\n||top-sponsor.com^$third-party\n||topbucks.com^$third-party\n||tossoffads.com^$third-party\n||tracelive.ru^$third-party\n||tracker2kss.eu^$third-party\n||trackerodss.eu^$third-party\n||traffbiz.ru^$third-party\n||traffic-in.com^$third-party\n||traffic.ru^$third-party\n||trafficholder.com^$third-party\n||traffichunt.com^$third-party\n||trafficlearn.com^$third-party\n||trafficpimps.com^$third-party\n||trafficshop.com^$third-party\n||trafficstars.com^$third-party\n||trafficundercontrol.com^$third-party\n||traficmax.fr^$third-party\n||trafogon.net^$third-party\n||transexy.it^$third-party\n||trustedadserver.com^$third-party\n||trw12.com^$third-party\n||try9.com^$third-party\n||ttlmodels.com^$third-party\n||tubeadnetwork.com^$third-party\n||tubedspots.com^$third-party\n||tufosex.com.br^$third-party\n||tvzavr.ru^$third-party\n||twistyscash.com^$third-party\n||ukreggae.ru^$third-party\n||unaspajas.com^$third-party\n||unlimedia.net^$third-party\n||uxernab.com^$third-party\n||ver-pelis.net^$third-party\n||verticalaffiliation.com^$third-party\n||video-people.com^$third-party\n||virtuagirlhd.com^$third-party\n||vividcash.com^$third-party\n||vktr073.net^$third-party\n||vlexokrako.com^$third-party\n||vlogexpert.com^$third-party\n||vod-cash.com^$third-party\n||vogopita.com^$third-party\n||vogorana.ru^$third-party\n||vroll.net^$third-party\n||vrstage.com^$third-party\n||walprater.com^$third-party\n||wamcash.com^$third-party\n||warsomnet.com^$third-party\n||webcambait.com^$third-party\n||webcampromotions.com^$third-party\n||webclickengine.com^$third-party\n||webclickmanager.com^$third-party\n||websitepromoserver.com^$third-party\n||webstats.com.br^$third-party\n||webteaser.ru^$third-party\n||weownthetraffic.com^$third-party\n||weselltraffic.com^$third-party\n||wetpeachcash.com^$third-party\n||whaleads.com^$third-party\n||wifelovers.com^$third-party\n||wildhookups.com^$third-party\n||wildmatch.com^$third-party\n||wood-pen.com^$third-party\n||worldsbestcams.com^$third-party\n||wwwmobiroll.com^$third-party\n||x-adservice.com^$third-party\n||x-exchanger.co.uk^$third-party\n||x3v66zlz.com^$third-party\n||xclickdirect.com^$third-party\n||xclicks.net^$third-party\n||xfuckbook.com^$third-party\n||xhamstercams.com^$third-party\n||xidx.org^$third-party\n||xlovecam.com^$third-party\n||xmediawebs.net^$third-party\n||xoliter.com^$third-party\n||xpollo.com^$third-party\n||xpop.co^$third-party\n||xxltr.com^$third-party\n||xxxallaccesspass.com^$third-party\n||xxxbannerswap.com^$third-party\n||xxxblackbook.com^$third-party\n||xxxex.com^$third-party\n||xxxlnk.com^$third-party\n||xxxmatch.com^$third-party\n||xxxvipporno.com^$third-party\n||xxxwebtraffic.com^$third-party\n||y72yuyr9.com^$third-party\n||yazcash.com^$third-party\n||yesmessenger.com^$third-party\n||yfum.com^$third-party\n||yobihost.com^$third-party\n||yoshatia.com^$third-party\n||your-big.com^$third-party\n||yourdatelink.com^$third-party\n||yourfuckbook.com^$third-party,domain=~fuckbookhookups.com\n||ypmadserver.com^$third-party\n||yu0123456.com^$third-party\n||yuppads.com^$third-party\n||yx0banners.com^$third-party\n||zinzimo.info^$third-party\n||ziphentai.com^$third-party\n! Mobile\n||reporo.net^$third-party\n! *** easylist:easylist_adult/adult_adservers_popup.txt ***\n||33traffic.com^$popup\n||3file.info^$popup,third-party\n||3questionsgetthegirl.com^$popup\n||45i73jv6.com^$popup,third-party\n||adtgs.com^$popup\n||adultadmedia.com^$popup,third-party\n||adultadworld.com^$popup,third-party\n||adultmoda.com^$popup,third-party\n||adxite.com^$popup,third-party\n||adxpansion.com^$popup,third-party\n||banners.cams.com^$popup,third-party\n||bitterstrawberry.com^$popup\n||buy404s.com^$popup\n||c4tracking01.com^$popup,third-party\n||chokertraffic.com^$popup,third-party\n||chtic.net^$popup,third-party\n||doublegear.com^$popup,third-party\n||dverser.ru^$popup,third-party\n||easysexdate.com^$popup\n||ebocornac.com^$popup,third-party\n||ekod.info^$popup,third-party\n||ero-advertising.com^$popup,third-party\n||everyporn.net^$popup,third-party\n||exgfpunished.com^$popup,third-party\n||exogripper.com^$popup\n||fbay.tv^$popup\n||filthads.com^$popup,third-party\n||flagads.net^$popup\n||foaks.com^$popup,third-party\n||fox-forden.ru^$popup,third-party\n||fpctraffic2.com^$popup,third-party\n||freecamsexposed.com^$popup\n||freewebcams.com^$popup,third-party\n||gothot.org^$popup,third-party\n||hanaprop.com^$popup,third-party\n||hapend.biz^$popup,third-party\n||herezera.com^$popup\n||hizlireklam.com^$popup,third-party\n||hornymatches.com^$popup,third-party\n||imagesnake.com^$popup,third-party\n||imgcarry.com^$popup,third-party\n||indianfriendfinder.com^$popup,third-party\n||ipvertising.com^$popup\n||juicyads.com^$popup,third-party\n||kaizentraffic.com^$popup,third-party\n||legacyminerals.net^$popup,third-party\n||loltrk.com^$popup,third-party\n||naughtyplayful.com^$popup,third-party\n||needlive.com^$popup\n||njmaq.com^$popup,third-party\n||pinkberrytube.com^$popup\n||playgirl.com^$popup\n||plinx.net^$popup,third-party\n||plugrush.com^$popup,third-party\n||popcash.net^$popup,third-party\n||pornbus.org^$popup\n||prexista.com^$popup,third-party\n||prpops.com^$popup,third-party\n||reviewdollars.com^$popup,third-party\n||sascentral.com^$popup,third-party\n||setravieso.com^$popup,third-party\n||sex-journey.com^$popup,third-party\n||sexad.net^$popup,third-party\n||sexflirtbook.com^$popup,third-party\n||sexintheuk.com^$popup,third-party\n||socialsex.biz^$popup,third-party\n||socialsex.com^$popup,third-party\n||targetingnow.com^$popup,third-party\n||trafficbroker.com^$popup\n||trafficholder.com^$popup,third-party\n||trafficstars.com^$popup\n||vlexokrako.com^$popup\n||voyeurbase.com^$popup,third-party\n||watchmygf.com^$popup\n||xdtraffic.com^$popup,third-party\n||xmatch.com^$popup\n||xpeeps.com^$popup,third-party\n||xvika.com^$popup,third-party\n||xvika.net^$popup,third-party\n||xxxbunker.com^$popup,third-party\n||xxxmatch.com^$popup\n||y72yuyr9.com^$popup,third-party\n!-----------------------------Third-party adverts-----------------------------!\n! *** easylist:easylist/easylist_thirdparty.txt ***\n-api.adyoulike.com\n||000webhost.com/images/banners/\n||04stream.com/pop*.js\n||1-million-usd.com/images/banners/\n||108.166.93.81/rotate/$domain=~infowars.com.ip\n||109.201.134.110^$domain=04stream.com\n||110.45.173.103/ad/$third-party\n||110mb.com/images/banners/\n||12dayswidget.com/widgets/\n||173.199.120.7/delivery/$domain=~p2p.adserver.ip\n||173.225.186.54^$third-party,domain=~apps.su.ip\n||178.238.233.242/open.js\n||1page.co.za/affiliate/\n||1stag.com/main/img/banners/\n||1whois.org/static/popup.js\n||208.43.84.120/trueswordsa3.gif$third-party,domain=~trueswords.com.ip\n||209.15.224.6^$third-party,domain=~liverail-mlgtv.ip\n||216.41.211.36/widget/$third-party,domain=~bpaww.com.ip\n||217.115.147.241/media/$third-party,domain=~elb-kind.de.ip\n||24.com//flashplayer/ova-jw.swf$object-subrequest\n||247hd.net/ad|\n||24casino.cz/poker300-$third-party\n||24hrlikes.com/images/$third-party\n||2beon.co.kr/nad/$third-party\n||2leep.com/ticker2/$third-party\n||2yu.in/banner/$third-party\n||360pal.com/ads/$third-party\n||3dots.co.il/pop/\n||4getlikes.com/promo/\n||69.50.226.158^$third-party,domain=~worth1000.com.ip\n||6angebot.ch^$third-party,domain=netload.in\n||6theory.com/pub/\n||770.com/banniere.php?\n||80.94.76.4/abd.php?\n||95.131.238.35^$third-party,domain=~maltatoday.mt.ip\n||96.9.176.245^$third-party\n||a.livesportmedia.eu^\n||a.ucoz.net^\n||a.watershed-publishing.com^\n||a04296f070c0146f314d-0dcad72565cb350972beb3666a86f246.r50.cf5.rackcdn.com^\n||a1channel.net/img/downloadbtn2.png\n||a1channel.net/img/watch_now.gif\n||abacast.com/banner/\n||ablacrack.com/popup-pvd.js$third-party\n||ad.23blogs.com^$third-party\n||ad.about.co.kr^\n||ad.accessmediaproductions.com^\n||ad.adriver.ru^$domain=firstrownow.eu|kyivpost.com|uatoday.tv|unian.info\n||ad.aquamediadirect.com^$third-party\n||ad.e-kolay.net^$third-party\n||ad.flux.com^\n||ad.foxnetworks.com^\n||ad.ghfusion.com^$third-party\n||ad.icasthq.com^\n||ad.idgtn.net^\n||ad.imad.co.kr^$third-party\n||ad.indomp3z.us^$third-party\n||ad.jamba.net^\n||ad.jokeroo.com^$third-party\n||ad.lijit.com^$third-party\n||ad.linkstorms.com^$third-party\n||ad.livere.co.kr^\n||ad.mail.ru^\n||ad.mesomorphosis.com^\n||ad.mygamesol.com^$third-party\n||ad.netcommunities.com^$third-party\n||ad.outsidehub.com^\n||ad.pickple.net^\n||ad.premiumonlinemedia.com^$third-party\n||ad.proxy.sh^\n||ad.r.worldssl.net^\n||ad.rambler.ru^\n||ad.realmcdn.net^$third-party\n||ad.reklamport.com^\n||ad.sensismediasmart.com.au^\n||ad.sharethis.com^$third-party\n||ad.smartclip.net^\n||ad.spielothek.so^\n||ad.sponsoreo.com^$third-party\n||ad.valuecalling.com^$third-party\n||ad.vidaroo.com^\n||ad.winningpartner.com^\n||ad.wsod.com^$third-party\n||ad.zaman.com.tr^$third-party\n||ad2links.com/js/$third-party\n||adap.tv/redir/client/static/as3adplayer.swf\n||adap.tv/redir/plugins/$object-subrequest\n||adap.tv/redir/plugins3/$object-subrequest\n||addme.com/images/addme_$third-party\n||adf.ly/?$subdocument,~third-party,domain=adf.ly\n||adf.ly/images/banners/\n||adf.ly/js/$third-party,domain=~j.gs|~q.gs\n||adf.ly^*/link-converter.js$third-party\n||adfoc.us/js/$third-party\n||adingo.jp.eimg.jp^\n||adlandpro.com^$third-party\n||adm.shinobi.jp^$third-party\n||adn.ebay.com^\n||adplus.goo.mx^\n||adr-*.vindicosuite.com^\n||ads.dynamicyield.com^$third-party\n||ads.mp.mydas.mobi^\n||adscaspion.appspot.com^\n||adserv.legitreviews.com^$third-party\n||adsrv.eacdn.com^$third-party\n||adss.dotdo.net^\n||adstest.zaman.com.tr^$third-party\n||advanced-intelligence.com/banner\n||adz.zwee.ly^\n||adziff.com^*/zdcse.min.js\n||afcdn.com^*/ova-jw.swf$object-subrequest\n||aff.cupidplc.com^$third-party\n||aff.eteachergroup.com^\n||aff.marathonbet.com^\n||aff.svjump.com^\n||affil.mupromo.com^\n||affiliate.juno.co.uk^$third-party\n||affiliate.mediatemple.net^$third-party\n||affiliatehub.skybet.com^$third-party\n||affiliateprogram.keywordspy.com^\n||affiliates-cdn.mozilla.org^$third-party\n||affiliates.allposters.com^\n||affiliates.bookdepository.co.uk^$third-party\n||affiliates.bookdepository.com^$third-party\n||affiliates.homestead.com^$third-party\n||affiliates.lynda.com^$third-party\n||affiliates.picaboocorp.com^$third-party\n||affiliatesmedia.sbobet.com^\n||affiliation.filestube.com^$third-party\n||affiliation.fotovista.com^\n||affutdmedia.com^$third-party\n||afimg.liveperson.com^$third-party\n||agenda.complex.com^\n||agoda.net/banners/\n||ahlanlive.com/newsletters/banners/$third-party\n||airvpn.org/images/promotional/\n||ais.abacast.com^\n||ak.imgaft.com^$third-party\n||ak1.imgaft.com^$third-party\n||akamai.net^*.247realmedia.com/$third-party\n||akamai.net^*/espnpreroll/$object-subrequest\n||akamai.net^*/pics.drugstore.com/prodimg/promo/\n||akamaihd.net/preroll*.mp4?$domain=csnnw.com\n||akamaihd.net/ssa/*?zoneid=$subdocument\n||akamaihd.net^*/web/pdk/swf/freewheel.swf?$third-party\n||alexa.com^*/promotebuttons/\n||algart.net*_banner_$third-party\n||allposters.com^*/banners/\n||allsend.com/public/assets/images/\n||alluremedia.com.au^*/campaigns/\n||alpsat.com/banner/\n||altushost.com/docs/$third-party\n||amazon.com/?_encoding*&linkcode$third-party\n||amazon.com/gp/redirect.html?$subdocument,third-party\n||amazon.com^*/getaanad?$third-party\n||amazonaws.com/ad_w_intersitial.html\n||amazonaws.com/ansible.js$domain=motherjones.com\n||amazonaws.com/banner/$domain=gserp.com\n||amazonaws.com/bo-assets/production/banner_attachments/\n||amazonaws.com/btrb-prd-banners/\n||amazonaws.com/digitalcinemanec.swf$domain=boxoffice.com\n||amazonaws.com/fvefwdds/\n||amazonaws.com/lms/sponsors/\n||amazonaws.com/newscloud-production/*/backgrounds/$domain=crescent-news.com|daily-jeff.com|recordpub.com|state-journal.com|the-daily-record.com|the-review.com|times-gazette.com\n||amazonaws.com/photos.offers.analoganalytics.com/\n||amazonaws.com/pmb-musics/download_itunes.png\n||amazonaws.com/publishflow/\n||amazonaws.com/skyscrpr.js\n||amazonaws.com/streetpulse/ads/\n||amazonaws.com/widgets.youcompare.com.au/\n||amazonaws.com/youpop/\n||analytics.disneyinternational.com^\n||angelbc.com/clients/*/banners/$third-party\n||anime.jlist.com^$third-party\n||anonym.to/*findandtry.com\n||any.gs/visitScript/$third-party\n||aol.co.uk^*/cobrand.js\n||aolcdn.com/os/mapquest/marketing/promos/\n||aolcdn.com/os/mapquest/promo-images/\n||aolcdn.com/os/music/img/*-skin.jpg\n||api.140proof.com^$third-party\n||api.bitp.it^$third-party\n||api.groupon.com/v2/deals/$third-party\n||api.ticketnetwork.com/Events/TopSelling/domain=nytimes.com\n||apnonline.com.au/img/marketplace/*_ct50x50.gif\n||appdevsecrets.com/images/nuts/\n||apple.com/itunesaffiliates/\n||appsgenius.com/images/$third-party\n||appwork.org/hoster/banner_$third-party\n||arcadetown.com/as/show.asp\n||ard.ihookup.com^\n||arntrnassets.mediaspanonline.com^*_HP_wings_\n||artistdirect.com/partner/\n||as.devbridge.com^$third-party\n||as.jivox.com/jivox/serverapis/getcampaignbysite.php?$object-subrequest\n||assets.betterbills.com/widgets/\n||associmg.com^*.gif?tag-\n||astalavista.box.sk/c-astalink2a.jpg\n||astrology.com/partnerpages/\n||athena-ads.wikia.com^$third-party\n||augine.com/widget|$third-party\n||autoprivileges.net/news/\n||awadhtimes.com^$third-party\n||award.sitekeuring.net^\n||axandra.com/affiliates/\n||axisbank.com/shopaholics-festival/$domain=ibnlive.in.com\n||b.babylon.com^\n||b.livesport.eu^\n||b.sell.com^$third-party\n||b117f8da23446a91387efea0e428392a.pl^$domain=ddlvalley.net\n||b92.putniktravel.com^\n||b92s.net/images/banners/\n||babylon.com/site/images/common.js$third-party\n||babylon.com/systems/af/landing/$third-party\n||babylon.com/trans_box/*&affiliate=\n||babylon.com^*?affid=\n||badoo.com/informer/$third-party\n||ball2win.com/Affiliate/\n||bamstudent.com/files/banners/\n||bankrate.com/jsfeeds/$third-party\n||bankrate.com^$subdocument,domain=yahoo.com\n||banman.isoftmarketing.com^$third-party\n||banner.101xp.com^\n||banner.3ddownloads.com^\n||banner.europacasino.com^\n||banner.telefragged.com^\n||banner.titancasino.com^\n||banner.titanpoker.com^$third-party\n||banner2.casino.com^$third-party\n||bannermaken.nl/banners/$third-party\n||banners.cfspm.com.au^$third-party\n||banners.ixitools.com^$third-party\n||banners.moreniche.com^$third-party\n||banners.smarttweak.com^$third-party\n||banners.videosz.com^$third-party\n||banners.webmasterplan.com^$third-party\n||bbcchannels.com/workspace/uploads/\n||bc.coupons.com^$third-party\n||bc.vc/js/link-converter.js$third-party\n||beachcamera.com/assets/banners/\n||bee4.biz/banners/\n||bemyapp.com/trk/$third-party\n||bergen.com^*/sponsoredby-\n||berush.com/images/*_semrush_$third-party\n||berush.com/images/semrush_banner_\n||berush.com/images/whorush_120x120_\n||besthosting.ua/banner/\n||bestofmedia.com/ws/communicationSpot.php?\n||bet-at-home.com/oddbanner.aspx?\n||beta.down2crazy.com^$third-party\n||betterbills.com.au/widgets/\n||betting.betfair.com^$third-party\n||betwaypartners.com/affiliate_media/$third-party\n||bharatmatrimony.com/matrimoney/matrimoneybanners/$third-party\n||bidgo.ca^$subdocument,third-party\n||bidorbuy.co.za/jsp/system/referral.jsp?\n||bidorbuy.co.za/jsp/tradesearch/TradeFeedPreview.jsp?$third-party\n||bigcommerce.com^*/product_images/$domain=politicalears.com\n||bigpond.com/specials/$subdocument,third-party\n||bigrock.in/affiliate/\n||bijk.com^*/banners/\n||binbox.io/public/img/promo/$third-party\n||binopt.net/banners/\n||bit.ly^$subdocument,domain=adf.ly\n||bitcoindice.com/img/bitcoindice_$third-party\n||bitcoinwebhosting.net/banners/$third-party\n||bitshare.com^*/banner/\n||bittorrent.am/serws.php?$third-party\n||bl.wavecdn.de^\n||blamads-assets.s3.amazonaws.com^\n||blindferret.com/images/*_skin_\n||blinkx.com/?i=*&adc_pub_id=$script,third-party\n||blinkx.com/f2/overlays/\n||bliss-systems-api.co.uk^$third-party\n||blissful-sin.com/affiliates/\n||blocks.ginotrack.com^$third-party\n||bloodstock.uk.com/affiliates/\n||bluepromocode.com/images/widgets/$third-party\n||bluesattv.net/bluesat.swf\n||bluhostedbanners.blucigs.com^\n||bo-videos.s3.amazonaws.com^$third-party\n||boago.com^*_Takeover_\n||bollyrulez.net/media/adz/\n||booking.com/general.html?$domain=timeout.com\n||booking.com^*;tmpl=banner_\n||bookingdragon.com^$subdocument,third-party\n||bordernode.com/images/$third-party\n||borrowlenses.com/affiliate/\n||bosh.tv/hdplugin.\n||box.anchorfree.net^\n||bpath.com/affiliates/\n||bplaced.net/pub/\n||bravenet.com/cserv.php\n||break.com/break/html/$subdocument\n||break.com^*/partnerpublish/\n||brettterpstra.com/wp-content/uploads/$third-party\n||broadbandgenie.co.uk/widget?$third-party\n||bruteforceseo.com/affiliates/\n||bruteforcesocialmedia.com/affiliates/\n||bsrv.adohana.com^$third-party\n||btguard.com/images/$third-party\n||btr.domywife.com^\n||btrd.net/assets/interstitial$script\n||bubbles-uk.com/banner/$third-party\n||bullguard.com^*/banners/\n||burst.net/aff/\n||burstnet.akadns.net^$image\n||businessnewswatch.ca/images/nnwbanner/\n||buy.com^*/affiliate/\n||buzznet.com^*/showpping-banner-$third-party\n||byzoo.org/script/tu*.js\n||cal-one.net/ellington/deals_widget.php?\n||cal-one.net/ellington/search_form.php?\n||camelmedia.net^*/banners/\n||cancomdigital.com/resourcecenter/$third-party\n||canonresourcecenter.com^$third-party\n||carbiz.in/affiliates-and-partners/\n||careerjunction.co.za/widgets/$third-party\n||careerjunction.co.za^*/widget?$third-party\n||carfax.com/img_myap/$third-party\n||cars.fyidriving.com^$subdocument,third-party\n||cas.clickability.com^\n||cash.neweramediaworks.com^\n||cashmakingpowersites.com^*/banners/\n||cashmyvideo.com/images/cashmyvideo_banner.gif\n||casinobonusdeal.com^$subdocument,domain=frombar.com|gledaisport.com|smotrisport.com|sportcategory.com|sportlemon.org|sportlemon.tv\n||castasap.com/publi2.html\n||casti.tv/adds/\n||catholicweb.com^*/banners/\n||cbpirate.com/getimg.php?\n||cccam.co/banner_big.gif\n||cdn.assets.gorillanation.com^$third-party\n||cdn.cdncomputer.com/js/main.js\n||cdn.ndparking.com/js/init.min.js\n||cdn.offcloud.com^$third-party\n||cdn.pubexchange.com/modules/display/$script\n||cdn.sweeva.com/images/$third-party\n||cdnpark.com/scripts/js3.js\n||cdnprk.com/scripts/js3.js\n||cdnprk.com/scripts/js3caf.js\n||centralmediaserver.com^*_side_bars.jpg\n||centralscotlandjoinery.co.uk/images/csj-125.gif$third-party\n||cerebral.typn.com^\n||cex.io/img/b/\n||cex.io/informer/$third-party\n||cfcdn.com/showcase_sample/search_widget/\n||cgmlab.com/tools/geotarget/custombanner.js\n||chacsystems.com/gk_add.html$third-party\n||challies.com^*/wtsbooks5.png$third-party\n||charlestondealstoday.com/aux/ux/_component/ss_dealrail/$subdocument,third-party\n||choices.truste.com^$third-party\n||chriscasconi.com/nostalgia_ad.\n||cimg.in/images/banners/\n||circularhub.com^*/circularhub_module.js$third-party\n||citygridmedia.com/ads/\n||cjmooter.xcache.kinxcdn.com^\n||clarity.abacast.com^\n||click.eyk.net^\n||clickstrip.6wav.es^\n||clicksure.com/img/resources/banner_\n||clipdealer.com/?action=widget&*&partner=\n||cloudfront.net/nimblebuy/\n||cloudfront.net/scripts/js3caf.js\n||cloudzer.net/ref/\n||cloudzer.net^*/banner/$third-party\n||cngroup.co.uk/service/creative/\n||cnhionline.com^*/rtj_ad.jpg\n||cnnewmedia.co.uk/locker/\n||code.popup2m.com^$third-party\n||colmwynne.com^$image,third-party\n||colorlabsproject.com^*/banner_\n||complexmedianetwork.com/cdn/agenda.complex.com/$domain=~complex.com\n||comx-computers.co.za/banners/$third-party\n||conduit.com//banners/$third-party\n||connect.summit.co.uk^\n||connectok.com/brightcove/?$domain=newsok.com\n||consolpub.com/weatherwindow/\n||content.livesportmedia.eu^\n||content.secondspace.com^$~image,third-party\n||contentcastsyndication.com^*&banner\n||continent8.com^*/bannerflow/\n||conversionplanet.com/published/feeds/$third-party\n||couponcp-a.akamaihd.net^$third-party\n||couptopia.com/affiliate/$third-party\n||coxnewsweb.com^*/ads/\n||cplayer.blinkx.com^$third-party\n||cpm.amateurcommunity.de^\n||creatives.inmotionhosting.com^\n||creatives.summitconnect.co.uk^\n||crowdsavings.com/r/banner/\n||cruisesalefinder.co.nz/affiliates.html$third-party\n||crunchyroll.com/awidget/$third-party\n||cstv.com^*/sponsors/\n||cts.tradepub.com/cts4/?ptnr=*&tm=$third-party\n||cursecdn.com/banner/\n||cursecdn.com/shared-assets/current/anchor.js?id=$third-party\n||customcodebydan.com/images/banner.gif\n||customer.heartinternet.co.uk^$third-party\n||cuteonly.com/banners.php$third-party\n||d-l-t.com^$subdocument,third-party\n||d13czkep7ax7nj.cloudfront.net^\n||d15565yqt7pv7r.cloudfront.net^\n||d15gt9gwxw5wu0.cloudfront.net^\n||d17f2fxw547952.cloudfront.net^\n||d19972r8wdpby8.cloudfront.net^\n||d1ade4ciw4bqyc.cloudfront.net^\n||d1cl1sqtf3o420.cloudfront.net^\n||d1d95giojjkirt.cloudfront.net^\n||d1ep3cn6qx0l3z.cloudfront.net^\n||d1ey3fksimezm4.cloudfront.net^\n||d1fo96xm8fci0r.cloudfront.net^\n||d1gojtoka5qi10.cloudfront.net^\n||d1k74lgicilrr3.cloudfront.net^\n||d1noellhv8fksc.cloudfront.net^\n||d1pcttwib15k25.cloudfront.net^\n||d1pdpbxj733bb1.cloudfront.net^\n||d1spb7fplenrp4.cloudfront.net^\n||d1vbm0eveofcle.cloudfront.net^\n||d1zgderxoe1a.cloudfront.net^\n||d23guct4biwna6.cloudfront.net^\n||d23nyyb6dc29z6.cloudfront.net^\n||d25ruj6ht8bs1.cloudfront.net^\n||d26dzd2k67we08.cloudfront.net^\n||d26j9bp9bq4uhd.cloudfront.net^\n||d26wy0pxd3qqpv.cloudfront.net^\n||d27jt7xr4fq3e8.cloudfront.net^\n||d287x05ve9a63s.cloudfront.net^\n||d29r6igjpnoykg.cloudfront.net^\n||d2anfhdgjxf8s1.cloudfront.net^\n||d2b2x1ywompm1b.cloudfront.net^\n||d2b65ihpmocv7w.cloudfront.net^\n||d2bgg7rjywcwsy.cloudfront.net^\n||d2cxkkxhecdzsq.cloudfront.net^\n||d2d2lbvq8xirbs.cloudfront.net^\n||d2dxgm96wvaa5j.cloudfront.net^\n||d2gpgaupalra1d.cloudfront.net^\n||d2gtlljtkeiyzd.cloudfront.net^\n||d2gz6iop9uxobu.cloudfront.net^\n||d2hap2bsh1k9lw.cloudfront.net^\n||d2ipklohrie3lo.cloudfront.net^\n||d2mic0r0bo3i6z.cloudfront.net^\n||d2mq0uzafv8ytp.cloudfront.net^\n||d2nlytvx51ywh9.cloudfront.net^\n||d2o307dm5mqftz.cloudfront.net^\n||d2oallm7wrqvmi.cloudfront.net^\n||d2omcicc3a4zlg.cloudfront.net^\n||d2pgy8h4i30on1.cloudfront.net^\n||d2plxos94peuwp.cloudfront.net^\n||d2r359adnh3sfn.cloudfront.net^\n||d2tgev5wuprbqq.cloudfront.net^\n||d2tnimpzlb191i.cloudfront.net^\n||d2ubicnllnnszy.cloudfront.net^\n||d2v4glj2m8yzg5.cloudfront.net^\n||d2v9ajh2eysdau.cloudfront.net^\n||d2vt6q0n0iy66w.cloudfront.net^\n||d2yhukq7vldf1u.cloudfront.net^\n||d2z1smm3i01tnr.cloudfront.net^\n||d31807xkria1x4.cloudfront.net^\n||d32pxqbknuxsuy.cloudfront.net^\n||d33f10u0pfpplc.cloudfront.net^\n||d33otidwg56k90.cloudfront.net^\n||d34obr29voew8l.cloudfront.net^\n||d37kzqe5knnh6t.cloudfront.net^\n||d38pxm3dmrdu6d.cloudfront.net^\n||d38r21vtgndgb1.cloudfront.net^\n||d39xqloz8t5a6x.cloudfront.net^\n||d3bvcf24wln03d.cloudfront.net^\n||d3dphmosjk9rot.cloudfront.net^\n||d3f9mcik999dte.cloudfront.net^\n||d3fzrm6pcer44x.cloudfront.net^\n||d3irruagotonpp.cloudfront.net^\n||d3iwjrnl4m67rd.cloudfront.net^\n||d3lvr7yuk4uaui.cloudfront.net^\n||d3lzezfa753mqu.cloudfront.net^\n||d3m41swuqq4sv5.cloudfront.net^\n||d3nvrqlo8rj1kw.cloudfront.net^\n||d3p9ql8flgemg7.cloudfront.net^\n||d3pkae9owd2lcf.cloudfront.net^\n||d3q2dpprdsteo.cloudfront.net^\n||d3qszud4qdthr8.cloudfront.net^\n||d3t2wca0ou3lqz.cloudfront.net^\n||d3t9ip55bsuxrf.cloudfront.net^\n||d3tdefw8pwfkbk.cloudfront.net^\n||d3vc1nm9xbncz5.cloudfront.net^\n||d5pvnbpawsaav.cloudfront.net^\n||d6bdy3eto8fyu.cloudfront.net^\n||d8qy7md4cj3gz.cloudfront.net^\n||dailydealstwincities.com/widgets/$subdocument,third-party\n||dal9hkyfi0m0n.cloudfront.net^\n||dapatwang.com/images/banner/\n||dart.clearchannel.com^\n||dasfdasfasdf.no-ip.info^\n||data.neuroxmedia.com^\n||datafeedfile.com/widget/readywidget/\n||datakl.com/banner/\n||daterly.com/*.widget.php$third-party\n||dawanda.com/widget/$third-party\n||dbam.dashbida.com^\n||ddwht76d9jvfl.cloudfront.net^\n||dealextreme.com/affiliate_upload/$third-party\n||dealplatform.com^*/widgets/$third-party\n||deals.buxr.net^$third-party\n||deals.macupdate.com^$third-party\n||deals4thecure.com/widgets/*?affiliateurl=\n||dealswarm.com^$subdocument,third-party\n||dealtoday.com.mt/banners/\n||dealzone.co.za^$script,third-party\n||delivery.importantmedia.org^$third-party\n||dennis.co.uk^*/siteskins/\n||depositfiles.com^*.php?ref=\n||desi4m.com/desi4m.gif$third-party\n||deskbabes.com/ref.php?\n||desperateseller.co.uk/affiliates/\n||detroitmedia.com/jfry/\n||dev-cms.com^*/promobanners/\n||developermedia.com/a.min.js\n||dew9ckzjyt2gn.cloudfront.net^\n||dhgate.com^$third-party,domain=sammyhub.com\n||digitalmediacommunications.com/belleville/employment/\n||digitalsatellite.tv/banners/\n||direct.quasir.info^$third-party\n||directnicparking.com^$third-party\n||display.digitalriver.com^\n||disqus.com/listPromoted?\n||disy2s34euyqm.cloudfront.net^\n||dizixdllzznrf.cloudfront.net^\n||djlf5xdlz7m8m.cloudfront.net^\n||dkd69bwkvrht1.cloudfront.net^\n||dkdwv3lcby5zi.cloudfront.net^\n||dl392qndlveq0.cloudfront.net^\n||dl5v5atodo7gn.cloudfront.net^\n||dlupv9uqtjlie.cloudfront.net^\n||dm0acvguygm9h.cloudfront.net^\n||dm8srf206hien.cloudfront.net^\n||dntrck.com/trax?\n||domainapps.com/assets/img/domain-apps.gif$third-party\n||domaingateway.com/js/redirect-min.js\n||domainnamesales.com/return_js.php?\n||dorabet.com/banner/\n||dot.tk/urlfwd/searchbar/bar.html\n||dotz123.com/run.php?\n||download-provider.org/?aff.id=$third-party\n||download.bitdefender.com/resources/media/$third-party\n||downloadandsave-a.akamaihd.net^$third-party\n||downloadprovider.me/en/search/*?aff.id=*&iframe=$third-party\n||dp51h10v6ggpa.cloudfront.net^\n||dpsq2uzakdgqz.cloudfront.net^\n||dq2tgxnc2knif.cloudfront.net^\n||dramafever.com/widget/$third-party\n||dramafeverw2.appspot.com/widget/$third-party\n||dreamboxcart.com/earning/$third-party\n||dreamhost.com/rewards/$third-party\n||dreamstime.com/banner/\n||dreamstime.com/img/badges/banner$third-party\n||dreamstime.com/refbanner-\n||droidnetwork.net/img/dt-atv160.jpg\n||droidnetwork.net/img/vendors/\n||dropbox.com^*/aff-resources/$domain=gramfeed.com\n||dttek.com/sponsors/\n||dvdfab.com/images/fabnewbanner/$third-party\n||dvf2u7vwmkr5w.cloudfront.net^\n||dx.com/affiliate/$third-party\n||dx5qvhwg92mjd.cloudfront.net^\n||dxq6c0tx3v6mm.cloudfront.net^\n||dxqd86uz345mg.cloudfront.net^\n||dycpc40hvg4ki.cloudfront.net^\n||dyl3p6so5yozo.cloudfront.net^\n||dynamicserving.com^$third-party\n||dynw.com/banner\n||e-tailwebstores.com/accounts/default1/banners/\n||e-webcorp.com/images/$third-party\n||easy-share.com/images/es20/\n||easyretiredmillionaire.com/img/aff-img/\n||eattoday.com.mt/widgets/$third-party\n||ebaycommercenetwork.com/publisher/$third-party\n||ebaystatic.com/aw/signin/ebay-signin-toyota-\n||ebladestore.com^*/banners/\n||eblastengine.upickem.net^$third-party\n||echineselearning.com^*/banner.jpg\n||ectaco-store.com^*/promo.jsp?\n||edge.viagogo.co.uk^*/widget.ashx?$third-party\n||edgecastcdn.net^*.barstoolsports.com/wp-content/banners/\n||eholidayfinder.com/images/logo.gif$third-party\n||elenasmodels.com/cache/cb_$third-party\n||elitsearch.com^$subdocument,third-party\n||elliottwave.com/fw/regular_leaderboard.js\n||eltexonline.com/contentrotator/$third-party\n||emailcashpro.com/images/$third-party\n||emsisoft.com/bnr/\n||engine.gamerati.net^$third-party\n||enticelabs.com/el/\n||eplreplays.com/wl/\n||epowernetworktrackerimages.s3.amazonaws.com^\n||escape.insites.eu^$third-party\n||esport-betting.com^*/betbanner/\n||etoolkit.com/banner/$third-party\n||etoro.com/B*_A*_TGet.aspx$third-party\n||etrader.kalahari.com^$third-party\n||etrader.kalahari.net^$third-party\n||europolitique.info^*/pub/\n||euwidget.imshopping.com^\n||events.kalooga.com^\n||everestpoker.com^*/?adv=\n||exoplanetwar.com/l/landing.php?\n||expekt.com/affiliates/\n||explorer.sheknows.com^$third-party\n||ext.theglobalweb.com^\n||extabit.com/s/$third-party\n||extensoft.com/artisteer/banners/\n||extras.mercurynews.com/tapin_directory/\n||extras.mnginteractive.com^*/todaysdeals.gif\n||exwp.org/partners/\n||eyetopics.com/content_images/$third-party\n||fairfaxregional.com.au/proxy/commercial-partner-solar/\n||familytreedna.com/img/affiliates/\n||fancybar.net/ac/fancybar.js?zoneid$third-party\n||fantasyplayers.com/templates/banner_code.\n||fantaz.com^*/banners/$third-party\n||fapturbo.com/testoid/\n||farmholidays.is/iframeallfarmsearch.aspx?$third-party\n||fastcccam.com/images/fcbanner2.gif\n||fatads.toldya.com^$third-party\n||fatburningfurnace.com^*/fbf-banner-\n||fcgadgets.blogspot.com^$third-party\n||feedburner.com/~a/\n||feeds.logicbuy.com^\n||fenixm.com/actions/*Skin*.$image\n||filedownloader.net/design/$third-party\n||filedroid.net/af_ta/$third-party\n||filefactory.com^*/refer.php?hash=\n||filejungle.com/images/banner/\n||fileloadr.com^$third-party\n||fileparadox.com/images/banner/\n||filepost.com/static/images/bn/\n||fileserve.com/images/banner_$third-party\n||fileserver1.net/download\n||filmehd.net/imagini/banner_$third-party\n||filmreel.tv^$domain=thepiratebay.si\n||filterforge.com/images/banners/\n||fimserve.myspace.com^$third-party\n||firecenter.pl/banners/\n||firstclass-download.com^$subdocument,third-party\n||flagship.asp-host.co.uk^$third-party\n||flipchat.com/index.php?$third-party\n||flipkart.com/affiliate/displayWidget?$third-party\n||flipkart.com/affiliateWidget/$third-party\n||flower.com/img/lsh/\n||followfairy.com/followfairy300x250.jpg\n||footymad.net/partners/\n||forms.aweber.com/form/styled_popovers_and_lightboxes.js$third-party\n||fortune5minutes.com^*/banner_\n||forumimg.ipmart.com/swf/img.php\n||fragfestservers.com/bannerb.gif\n||freakshare.com/?ref=\n||freakshare.com/banner/$third-party\n||freakshare.net/banner/\n||free-football.tv/images/usd/\n||freecycle.org^*/sponsors/\n||freetrafficsystem.com/fts/ban/\n||freetricktipss.info^$subdocument,third-party\n||freewheel.mtgx.tv^$~object-subrequest\n||freshbooks.com/images/banners/$third-party\n||friedrice.la/widget/$third-party\n||frogatto.com/images/$third-party\n||frontsight.com^*/banners/\n||ft.pnop.com^\n||fugger.ipage.com^$third-party\n||fugger.netfirms.com/moa.swf$third-party\n||funtonia.com/promo/\n||fupa.com/aw.aspx?$third-party\n||furiousteam.com^*/external_banner/\n||futuboxhd.com/js/bc.js\n||futuresite.register.com/us?$third-party\n||fxcc.com/promo/\n||fxultima.com/banner/\n||fyicentralmi.com/remote_widget?$third-party\n||fyiwashtenaw.com/remote_widget?\n||fyygame.com/images/*.swf$third-party\n||gadgetresearch.net^$subdocument,third-party\n||gamblingwages.com/images/$third-party\n||gameduell.com/res/affiliate/\n||gameorc.net/a.html\n||gamersaloon.com/images/banners/\n||gamesports.net/img/betting_campaigns/\n||gamestop.com^*/aflbanners/\n||gamingjobsonline.com/images/banner/\n||gateway.fortunelounge.com^\n||gateways.s3.amazonaws.com^\n||gawkerassets.com/assets/marquee/$object,third-party\n||ge.tt/api/$domain=mhktricks.net\n||generic4all.com^*?refid=$third-party\n||geo.connexionsecure.com^\n||geobanner.friendfinder.com^\n||geobanner.passion.com^\n||get.2leep.com^$third-party\n||get.box24casino.com^$third-party\n||get.davincisgold.com^$third-party\n||get.paradise8.com^$third-party\n||get.rubyroyal.com^$third-party\n||get.slotocash.com^$third-party\n||get.thisisvegas.com^$third-party\n||getadblock.com/images/adblock_banners/$third-party\n||gethopper.com/tp/$third-party\n||getnzb.com/img/partner/banners/$third-party\n||getpaidforyourtime.org/basic-rotating-banner/\n||gfaf-banners.s3.amazonaws.com^\n||gfxa.sheetmusicplus.com^$third-party\n||ggmania.com^*.jpg$third-party\n||giantrealm.com/saj/\n||giantsavings-a.akamaihd.net^$third-party\n||giffgaff.com/banner/\n||glam.com/gad/\n||glam.com^*?affiliateid=\n||globalprocash.com/banner125.gif\n||gmstatic.net^*/amazonbadge.png\n||gmstatic.net^*/itunesbadge.png\n||go2cloud.org/aff_i?\n||goadv.com^*/ads.js\n||gogousenet.com^*/promo.cgi\n||gogousenet.com^*/promo2.cgi\n||gold4rs.com/images/$third-party\n||goldmoney.com/~/media/Images/Banners/$third-party\n||google.com/pagead/\n||google.com/uds/afs?*adsense$subdocument\n||googlesyndication.com/pagead/$third-party\n||googlesyndication.com/safeframe/$third-party\n||googlesyndication.com/simgad/$third-party\n||googlesyndication.com^*/click_to_buy/$object-subrequest,third-party\n||googlesyndication.com^*/domainpark.cgi?\n||googlesyndication.com^*/googlevideoadslibraryas3.swf$object-subrequest,third-party\n||gorgonprojectinvest.com/images/banners/\n||gotraffic.net^*/sponsors/\n||govids.net/adss/\n||graboid.com/affiliates/\n||graduateinjapan.com/affiliates/\n||grammar.coursekey.com/inter/$third-party\n||groupon.com/javascripts/common/affiliate_widget/$third-party\n||grouponcdn.com^*/affiliate_widget/$third-party\n||gsniper.com/images/$third-party\n||guim.co.uk/guardian/thirdparty/tv-site/side.html\n||guzzle.co.za/media/banners/\n||halllakeland.com/banner/\n||handango.com/marketing/affiliate/\n||haymarket-whistleout.s3.amazonaws.com/*_ad.html\n||haymarket.net.au/Skins/\n||hdvid-codecs.com^$third-party\n||heidiklein.com/media/banners/\n||hexero.com/images/banner.gif\n||hide-my-ip.com/promo/\n||highepcoffer.com/images/banners/\n||hitleap.com/assets/banner-\n||hitleap.com/assets/banner.png\n||hm-sat.de/b.php\n||hostdime.com/images/affiliate/$third-party\n||hostgator.com/~affiliat/cgi-bin/affiliates/$third-party\n||hosting.conduit.com^$third-party\n||hostinger.nl/banners/\n||hostmonster.com/src/js/izahariev/$third-party\n||hotelsbycity.com^*/bannermtg.php?$third-party\n||hoteltravel.com/partner/$third-party\n||hotlinking.dosmil.imap.cc^$third-party\n||hqfootyad4.blogspot.com^$third-party\n||hstpnetwork.com/ads/\n||hstpnetwork.com/zeus.php\n||hubbarddeals.com^*/promo/\n||hubbardradio.com^*/my_deals.php\n||hyipregulate.com/images/hyipregulatebanner.gif\n||hyperfbtraffic.com/images/graphicsbanners/\n||hyperscale.com/images/adh_button.jpg\n||i.lsimg.net^*/sides_clickable.\n||i.lsimg.net^*/takeover/\n||ibsrv.net/sidetiles/125x125/\n||ibsrv.net/sponsor_images/\n||ibsys.com/sh/sponsors/\n||ibvpn.com/img/banners/\n||icastcenter.com^*/amazon-buyfrom.gif\n||icastcenter.com^*/itunes.jpg\n||idealo.co.uk/priceinfo/$third-party\n||idg.com.au/ggg/images/*_home.jpg$third-party\n||idup.in/embed$third-party,domain=ganool.com\n||ifilm.com/website/*_skin_$third-party\n||ilapi.ebay.com^$third-party\n||im.ov.yahoo.co.jp^\n||ima3vpaid.appspot.com^\n||image.com.com^*/skin2.jpg$third-party\n||image.dhgate.com^*/dhgate-logo-$third-party\n||images-amazon.com/images/*/associates/widgets/\n||images-amazon.com/images/*/banner/$third-party\n||images-amazon.com^$domain=cloudfront.net\n||images-pw.secureserver.net/images/100yearsofchevy.gif\n||images-pw.secureserver.net^*_*.$image,third-party\n||images.dreamhost.com^$third-party\n||images.mylot.com^$third-party\n||images.youbuy.it/images/$third-party\n||imagetwist.com/banner/\n||img.bluehost.com^$third-party\n||img.hostmonster.com^$third-party\n||img.mybet.com^$third-party\n||img.promoddl.com^$third-party\n||img.servint.net^$third-party\n||imgdino.com/gsmpop.js\n||imgehost.com^*/banners/$third-party\n||imgur.com^$image,domain=talksport.com\n||imptestrm.com/rg-main.php?\n||indeed.fr/ads/\n||indian-forex.com^*/banners/$third-party\n||indieclick.3janecdn.com^\n||infibeam.com/affiliate/$third-party\n||infochoice.com.au/Handler/WidgetV2Handler.ashx?\n||infomarine.gr/images/banerr.gif\n||infomarine.gr^*/images/banners/\n||inisrael-travel.com/jpost/\n||init.lingospot.com^$third-party\n||inline.playbryte.com^$third-party\n||inskin.vo.llnwd.net^\n||instantpaysites.com/banner/\n||instaprofitgram.com/images/banners/\n||integrityvpn.com/img/integrityvpn.jpg\n||intermrkts.vo.llnwd.net^$third-party\n||internetbrands.com/partners/$third-party\n||interserver.net/logos/vps-$third-party\n||interstitial.glsp.netdna-cdn.com^$third-party\n||intexchange.ru/Content/banners/\n||iobit.com/partner/$third-party\n||ipercast.net^*/ova-jw.swf$object-subrequest\n||ipixs.com/ban/$third-party\n||iselectmedia.com^*/banners/\n||iwebzoo.com/banner/\n||iypcdn.com^*/bgbanners/\n||iypcdn.com^*/otherbanners/\n||iypcdn.com^*/ypbanners/\n||jalbum.net/widgetapi/js/dlbutton.js?\n||jenningsforddirect.co.uk/sitewide/extras/$third-party\n||jeysearch.com^$subdocument,third-party\n||jimdo.com/s/img/aff/\n||jinx.com/content/banner/$third-party\n||jivox.com/jivox/serverapis/getcampaignbyid.php?$object-subrequest\n||joblet.jp/javascripts/$third-party\n||jobs-affiliates.ws/images/$third-party\n||jocly.com^*.html?click=$subdocument,third-party\n||jrcdev.net/promos/\n||jsfeedget.com^$script,third-party\n||jsrdn.com/s/1.js\n||jubimax.com/banner_images/\n||jugglu.com/content/widgets/$third-party\n||justclicktowatch.to/jstp.js\n||jvzoo.com/assets/widget/$third-party\n||k-po.com/img/ebay.png$third-party\n||kaango.com/fecustomwidgetdisplay?\n||kallout.com^*.php?id=\n||kaltura.com^*/vastPlugin.swf$third-party\n||keep2share.cc/images/i/00468x0060-\n||keyword-winner.com/demo/images/\n||king.com^*/banners/\n||knorex.asia/static-firefly/\n||kontera.com/javascript/lib/KonaLibInline.js$third-party\n||kozmetikcerrahi.com/banner/\n||kraken.giantrealm.com^$third-party\n||krillion.com^*/productoffers.js\n||kurtgeiger.com^*/linkshare/\n||l.yimg.com^*&partner=*&url=\n||ladbrokes.com^*&aff_id=\n||lapi.ebay.com^$third-party\n||lastlocation.com/images/banner\n||leadintelligence.co.uk/in-text.js$third-party\n||leadsleap.com/images/banner_\n||leadsleap.com/widget/\n||legaljobscentre.com/feed/jobad.aspx\n||legitonlinejobs.com/images/$third-party\n||lego.com^*/affiliate/\n||lesmeilleurs-jeux.net/images/ban/$third-party\n||lessemf.com/images/banner-$third-party\n||letmewatchthis.ru/movies/linkbottom\n||letters.coursekey.com/lettertemplates_$third-party\n||lg.com/in/cinema3d.jsp$subdocument,third-party\n||lifestyle24h.com/reward/$third-party\n||lijit.com/adif_px.php\n||lijit.com/delivery/\n||link.link.ru^$third-party\n||linkbird.com/static/upload/*/banner/$third-party\n||linkedin.com/csp/dtag?$subdocument,third-party\n||lionheartdms.com^*/walmart_300.jpg\n||litecoinkamikaze.com/assets/images/banner$third-party\n||literatureandlatte.com/gfx/buynowaffiliate.jpg\n||liutilities.com/partners/$third-party\n||liutilities.com^*/affiliate/\n||livecrics.livet20worldcup.com/video.php$domain=iplstream.com\n||liveperson.com/affiliates/\n||liveshows.com^*/live.js$third-party\n||llnwd.net/o28/assets/*-sponsored-\n||localdata.eu/images/banners/\n||london24.com^*/mpu/\n||longtailvideo.com*/ltas.swf\n||longtailvideo.com^*/adaptvjw5-$object-subrequest\n||longtailvideo.com^*/adaptvjw5.swf$object-subrequest\n||longtailvideo.com^*/adawe-$object-subrequest,third-party\n||longtailvideo.com^*/googima-$object-subrequest\n||longtailvideo.com^*/googima.swf$object-subrequest,third-party\n||longtailvideo.com^*/ltas-$object-subrequest,third-party\n||longtailvideo.com^*/ova-$object-subrequest\n||longtailvideo.com^*/yume-h.swf\n||longtailvideo.com^*/yume.swf\n||loopnet.com^*/searchwidget.htm$third-party\n||loot.co.za/shop/product.jsp?$third-party\n||lottoelite.com/banners/$third-party\n||lowbird.com/random/$third-party\n||lowcountrymarketplace.com/widgets/$third-party\n||lp.longtailvideo.com^*/adaptv*.swf\n||lp.ncdownloader.com^$third-party\n||ltfm.ca/stats.php?\n||lucky-ace-casino.net/banners/\n||lucky-dating.net/banners/\n||luckygunner.com^*/banners/\n||luckyshare.net/images/banners/\n||lumfile.com/lumimage/ourbanner/$third-party\n||lygo.com/d/toolbar/sponsors/\n||lylebarn.com/crashwidget/$domain=crash.net\n||lynku.com/partners/$third-party\n||m.uploadedit.com^$third-party,domain=flysat.com\n||maases.com/i/br/$domain=promodj.com\n||madisonlogic.com^$third-party\n||mads.aol.com^\n||magicaffiliateplugin.com/img/mga-125x125.gif\n||magicmembers.com/img/mgm-125x125\n||magniwork.com/banner/\n||mahndi.com/images/banner/\n||mantra.com.au^*/campaigns/$third-party\n||marinejobs.gr/images/marine_adv.gif\n||marketing.888.com^\n||mastiway.com/webimages/$third-party\n||match.com^*/prm/$third-party\n||matchbin.com/javascripts/remote_widget.js\n||matrixmails.com/images/$third-party\n||maximainvest.net^$image,third-party\n||mazda.com.au/banners/\n||mb-hostservice.de/banner_\n||mb.marathonbet.com^$third-party\n||mb.zam.com^\n||mcc.godaddy.com/park/$subdocument,third-party\n||mcclatchyinteractive.com/creative/\n||mdpcdn.com^*/gpt/\n||media-toolbar.com^$third-party\n||media.enimgs.net/brand/files/escalatenetwork/\n||media.myspace.com/play/*/featured-videos-$third-party\n||media.onlineteachers.co.in^$third-party\n||mediaon.com/moneymoney/\n||mediaserver.digitec.ch^$subdocument,third-party\n||mediaspanonline.com^*-Takeover-\n||mediaspanonline.com^*-Takeover_\n||megalivestream.net/pub.js\n||memepix.com/spark.php?\n||meraad2.blogspot.com^$third-party\n||metaboli.fr^*/adgude_$third-party\n||metroland.com/wagjag/\n||mfcdn.net/store/spotlight/\n||mfeed.newzfind.com^$third-party\n||mgprofit.com/images/*x$third-party\n||microsoft.com^*/bannerrotator/$third-party\n||microsoft.com^*/community/images/windowsintune/$third-party\n||mightyape.co.nz/stuff/$third-party\n||mightydeals.com/widget?$third-party\n||mightydeals.com/widgets/$third-party\n||mightydeals.s3.amazonaws.com/md_adv/\n||milanomoda.info^$domain=uploadlw.com\n||millionaires-club-international.com/banner/\n||missnowmrs.com/images/banners/\n||mkini.net/banners/\n||mlive.com/js/oas/\n||mmdcash.com/mmdcash01.gif\n||mmo4rpg.com^*.gif|$third-party\n||mmosale.com/baner_images/$third-party\n||mmwebhandler.888.com^$third-party\n||mnginteractive.com^*/dartinclude.js\n||mobilemetrics.appspot.com^$third-party\n||mobyler.com/img/banner/\n||mol.im/i/pix/ebay/\n||moneycontrol.co.in^*PopUnder.js\n||moneycontrol.com/share-market-game/$third-party\n||moneywise.co.uk/affiliate/\n||moosify.com/widgets/explorer/?partner=\n||mosso.com^*/banners/\n||mozo-widgets.f2.com.au^\n||mp3ix.com^$third-party\n||mrc.org/sites/default/files/uploads/images/Collusion_Banner\n||mrc.org^*/Collusion_Banner300x250.jpg\n||mrc.org^*/take-over-charlotte300x250.gif\n||msecnd.net/scripts/*.pop.$script\n||msm.mysavings.com^*.asp?afid=$third-party\n||msnbcmedia.msn.com^*/sponsors/\n||mt.sellingrealestatemalta.com^$third-party\n||mto.mediatakeout.com^$third-party\n||multisitelive.com^*/banner_\n||multivizyon.tv^*/flysatbanner.swf\n||musicmemorization.com/images/$third-party\n||musik-a-z.com^$subdocument,third-party\n||my-best-jobs.com^$subdocument,third-party\n||my-dirty-hobby.com/track/$subdocument,third-party\n||myalter1tv.altervista.org^$subdocument,third-party\n||mydirtyhobby.com^$third-party,domain=~my-dirty-hobby.com|~mydirtyhobby.de\n||mydownloader.net/banners/$third-party\n||myfreepaysite.info^*.gif$third-party\n||myfreeresources.com/getimg.php?$third-party\n||myfreeshares.com/120x60b.gif\n||myhpf.co.uk/banners/\n||mylife.com/partner/$third-party\n||myspace.com/play/myspace/*&locationId$third-party\n||mytrafficstrategy.com/images/$third-party\n||myusenet.net/promo.cgi?\n||myvi.ru/feed/$object-subrequest\n||mzstatic.com^$image,object-subrequest,domain=dailymotion.com\n||n.nu/banner.js\n||namecheap.com/graphics/linkus/$third-party\n||nanobrokers.com/img/banner_\n||nanoinvestgroup.com/images/banner*.gif\n||neogames-tech.com/resources/genericbanners/\n||nesgamezone.com/syndicate?\n||netdigix.com/google_banners/\n||netdna-cdn.com/wp-content/plugins/background-manager/$domain=7daysindubai.com\n||netdna-cdn.com^*-300x250.$domain=readersdigest.co.uk\n||netdna-cdn.com^*-Background-1280x10241.$domain=7daysindubai.com\n||nettvplus.com/images/banner_\n||network.aufeminin.com^\n||network.business.com^\n||networkice.com^$subdocument,third-party\n||news-whistleout.s3.amazonaws.com^$third-party\n||newware.net/home/banner$third-party\n||newware.net/home/newware-sm.png$third-party\n||nimblecommerce.com/widget.action?\n||nitropdf.com/graphics/promo/$third-party\n||nlsl.about.com/img?$third-party\n||nocookie.net^*/wikiasearchads.js\n||novadune.com^$third-party\n||nster.com/tpl/this/js/popnster.js\n||nude.mk/images/$third-party\n||numb.hotshare.biz^$third-party\n||nwadealpiggy.com/widgets/\n||nzpages.co.nz^*/banners/\n||o2live.com^$third-party\n||oasap.com/images/affiliate/\n||obox-design.com/affiliate-banners/\n||ocp.cbs.com/pacific/request.jsp?\n||odin.goo.mx^\n||offers-service.cbsinteractive.com^$third-party\n||offerssyndication.appspot.com^$third-party\n||office.eteachergroup.com/leads/$third-party\n||oilofasia.com/images/banners/\n||ojooo.com/register_f/$third-party\n||ojooo.com^*/banner_$third-party\n||on.maxspeedcdn.com^\n||onegameplace.com/iframe.php$third-party\n||oovoo.com^*/banners/\n||optimus-pm.com^*_300-250.jpg\n||origin.getprice.com.au/WidgetNews.aspx\n||origin.getprice.com.au/widgetnewssmall.aspx\n||oriongadgets.com^*/banners/\n||osobnosti.cz/images/casharena_\n||outdoorhub.com/js/_bookends.min.js\n||overseasradio.com/affbanner.php?\n||ovpn.to/ovpn.to/banner/\n||ox-i.cordillera.tv^\n||oxygenboutique.com/Linkshare/\n||p.pw/banners/$third-party\n||padsdel.com^$third-party\n||pagead2.googlesyndication.com^$~object-subrequest\n||pagerage.com^$subdocument,third-party\n||pan.dogster.com^$third-party\n||partner.alloy.com^$third-party\n||partner.bargaindomains.com^\n||partner.catchy.com^\n||partner.e-conomic.com^$third-party\n||partner.premiumdomains.com^\n||partnerads.ysm.yahoo.com^\n||partnerads1.ysm.yahoo.com^\n||partners.betus.com^$third-party\n||partners.dogtime.com/network/\n||partners.fshealth.com^\n||partners.optiontide.com^\n||partners.rochen.com^\n||partners.sportingbet.com.au^\n||partners.vouchedfor.co.uk^\n||partners.xpertmarket.com^\n||paytel.co.za/code/ref\n||payza.com/images/banners/\n||pcash.imlive.com^$third-party\n||pcmall.co.za/affiliates/\n||pdl.viaplay.com/commercials/$third-party\n||pearlriverusa.com/images/banner/\n||perfectforex.biz/images/*x$third-party\n||perfectmoney.com/img/banners/$third-party\n||ph.hillcountrytexas.com/imp.php?$third-party\n||phobos.apple.com^$image,domain=dailymotion.com|youtube.com\n||phonephotographytricks.com/images/banners/\n||pianobuyer.com/pianoworld/\n||pianoteq.com/images/banners/\n||pic.pbsrc.com/hpto/\n||picoasis.net/3xlayer.htm\n||pics.firstload.de^$third-party\n||play-asia.com/paos-$third-party\n||playata.myvideo.de^$subdocument,third-party\n||player.screenwavemedia.com^*/ova-jw.swf$object-subrequest\n||playfooty.tv/jojo.html\n||plexidigest.com/plexidigest-300x300.jpg\n||pm.web.com^$third-party\n||pokerjunkie.com/rss/\n||pokerroomkings.com^*/banner/$third-party\n||pokersavvy.com^*/banners/\n||pokerstars.com/?source=$subdocument,third-party\n||pokerstars.com/euro_bnrs/\n||popeoftheplayers.eu/ad\n||popmog.com^$third-party\n||pops.freeze.com^$third-party\n||pornturbo.com/tmarket.php\n||post.rmbn.ru^$third-party\n||postaffiliatepro.com^*/banners/$image\n||ppc-coach.com/jamaffiliates/\n||premium-template.com/banner/$third-party\n||premium.naturalnews.tv^$third-party\n||pricedinfo.com^$third-party\n||pricegrabber.com/cb_table.php$third-party\n||pricegrabber.com/export_feeds.php?$third-party\n||pricegrabber.com/mlink.php?$third-party\n||pricegrabber.com/mlink3.php?$third-party\n||priceinfo.comuv.com^\n||primeloopstracking.com/affil/\n||privatewifi.com/swf/banners/\n||prizerebel.com/images/banner$third-party\n||pro-gmedia.com^*/skins/\n||promos.fling.com^\n||promote.pair.com^\n||promotions.iasbet.com^\n||propgoluxury.com/partners/$third-party\n||proxies2u.com/images/btn/$third-party\n||proxy.org/blasts.gif\n||proxynoid.com/images/referrals/\n||proxyroll.com/proxybanner.php\n||proxysolutions.net/affiliates/\n||pub.aujourdhui.com^$third-party\n||pub.betclick.com^\n||pub.dreamboxcart.com^$third-party\n||pub.sapo.pt/vast.php$object-subrequest\n||public.porn.fr^$third-party\n||pubs.hiddennetwork.com^\n||puntersparadise.com.au/banners/\n||purevpn.com/affiliates/\n||putlocker.com/images/banners/$third-party\n||qualoo.net/now/interstitial/\n||quickflix*.gridserver.com^$third-party\n||quirk.biz/webtracking/\n||racebets.com/media.php?\n||rack.bauermedia.co.uk^\n||rackcdn.com/brokers/$third-party,domain=fxempire.com|fxempire.de|fxempire.it|fxempire.nl\n||rackcdn.com^$script,domain=search.aol.com\n||rackspacecloud.com/Broker%20Buttons/$domain=investing.com\n||radiocentre.ca/randomimages/$third-party\n||radioreference.com/sm/300x75_v3.jpg\n||radioshack.com^*/promo/\n||radiotown.com/splash/images/*_960x600_\n||radley.co.uk^*/Affiliate/\n||rapidgator.net/images/pics/*_300%D1%85250_\n||rapidjazz.com/banner_rotation/\n||ratesupermarket.ca/widgets/\n||rbth.ru/widget/$third-party\n||rcm*.amazon.$third-party\n||rdio.com/media/images/affiliate/$third-party\n||readme.ru/informer/$third-party\n||realwritingjobs.com^*/banners/\n||red-tube.com^*.php?wmid=*&kamid=*&wsid=$third-party\n||redbeacon.com/widget/$third-party\n||redflagdeals.com/dealoftheday/widgets/$third-party\n||redtram.com^$script,third-party\n||regmyudid.com^*/index.html$third-party\n||regnow.com/vendor/\n||rehost.to/?ref=\n||relink.us/images/$third-party\n||res3.feedsportal.com^\n||resources.heavenmedia.net/selection.php?\n||revealads.appspot.com^\n||rewards1.com/images/referralbanners/$third-party\n||ribbon.india.com^$third-party\n||richmedia.yahoo.com^$third-party\n||roadcomponentsdb.com^$subdocument,third-party\n||roadrecord.co.uk/widget.js?\n||roia.hutchmedia.com^$third-party\n||roshansports.com/iframe.php\n||roshantv.com/adad.\n||rotabanner.kulichki.net^\n||rover.ebay.com^*&adtype=$third-party\n||runerich.com/images/sty_img/runerich.gif\n||ruralpressevents.com/agquip/logos/$domain=farmonline.com.au\n||russian-dreams.net/static/js/$third-party\n||rya.rockyou.com^$third-party\n||s-assets.tp-cdn.com/widgets/*/vwid/*.html?\n||s-yoolk-banner-assets.yoolk.com^\n||s-yoolk-billboard-assets.yoolk.com^\n||s.cxt.ms^$third-party\n||s1.wp.com^$subdocument,third-party\n||s11clickmoviedownloadercom.maynemyltf.netdna-cdn.com^$third-party\n||s1now.com^*/takeovers/\n||s3.amazonaws.com/draftset/banners/\n||safarinow.com/affiliate-zone/\n||sailthru.com^*/horizon.js\n||salemwebnetwork.com/Stations/images/SiteWrapper/\n||sat-shop.co.uk/images/$third-party\n||satshop.tv/images/banner/$third-party\n||schenkelklopfer.org^*pop.js\n||schurzdigital.com/deals/widget/\n||sciencecareers.org/widget/$third-party\n||scoopdragon.com/images/Goodgame-Empire-MPU.jpg\n||screenconnect.com/miscellaneous/ScreenConnect-$image,third-party\n||scribol.com/txwidget$third-party\n||searchportal.information.com/?$third-party\n||secondspin.com/twcontent/\n||securep2p.com^$subdocument,third-party\n||secureupload.eu/banners/\n||seedboxco.net/*.swf$third-party\n||seedsman.com/affiliate/$third-party\n||selectperformers.com/images/a/\n||selectperformers.com/images/elements/bannercolours/\n||servedby.keygamesnetwork.com^\n||servedby.yell.com^$third-party\n||server.freegamesall.com^$third-party\n||server4.pro/images/banner.jpg\n||service.smscoin.com/js/sendpic.js\n||serving.portal.dmflex.com^$domain=thisdaylive.com\n||settleships.com^$third-party\n||sfimg.com/images/banners/\n||sfimg.com/SFIBanners/\n||sfm-offshore.com/images/banners/\n||sfstatic.com^*/js/fl.js$third-party\n||shaadi.com^*/get-banner.php?\n||shaadi.com^*/get-html-banner.php?\n||shareflare.net/images/$third-party\n||shariahprogram.ca/banners/\n||sharingzone.net/images/banner$third-party\n||shop-top1000.com/images/\n||shop4tech.com^*/banner/\n||shopbrazos.com/widgets/\n||shopilize.com^$third-party\n||shopping.com/sc/pac/sdc_widget_v2.0_proxy.js$third-party\n||shorte.st/link-converter.min.js\n||shorte.st^*/referral_banners/\n||shows-tv.net/codepopup.js\n||shragle.com^*?ref=\n||sidekickunlock.net/banner/\n||simplifydigital.co.uk^*/widget_premium_bb.htm\n||simplyfwd.com/?dn=*&pid=$subdocument\n||singlehop.com/affiliates/$third-party\n||singlemuslim.com/affiliates/\n||sis.amazon.com/iu?$third-party\n||sisters-magazine.com/iframebanners/$third-party\n||site5.com/creative/$third-party\n||site5.com/creative/*/234x60.gif\n||sitegrip.com^*/swagbucks-\n||skydsl.eu/banner/$third-party\n||slickdeals.meritline.com^$third-party\n||slot.union.ucweb.com^\n||slysoft.com/img/banner/$third-party\n||smart.styria-digital.com^\n||smartdestinations.com/ai/$third-party\n||smartlinks.dianomi.com^$third-party\n||smilepk.com/bnrsbtns/\n||snacktools.net/bannersnack/\n||snapapp.com^$third-party,domain=bostonmagazine.com\n||snapdeal.com^*.php$third-party\n||sndkorea.nowcdn.co.kr^$third-party\n||socialmonkee.com/images/$third-party\n||socialorganicleads.com/interstitial/\n||softneo.com/popup.js\n||speedbit.com^*-banner1-\n||speedppc.com^*/banners/\n||speedtv.com.edgesuite.net/img/static/takeovers/\n||spilcdn.com/vda/css/sgadfamily.css\n||spilcdn.com/vda/css/sgadfamily2.css\n||spilcdn.com/vda/vendor/flowplayer/ova.swf\n||splashpagemaker.com/images/$third-party\n||sponsorandwin.com/images/banner-\n||sportingbet.com.au/sbacontent/puntersparadise.html\n||sportsbetaffiliates.com.au^$third-party\n||sportsdigitalcontent.com/betting/\n||sproutnova.com/serve.php$third-party\n||squarespace.evyy.net^\n||srv.dynamicyield.com^$third-party\n||srwww1.com^*/affiliate/\n||ssl-images-amazon.com/images/*/banner/$third-party\n||ssshoesss.ro/banners/\n||stacksocial.com/bundles/$third-party\n||stacksocial.com^*?aid=$third-party\n||stalliongold.com/images/*x$third-party\n||stargames.com/bridge.asp?$third-party\n||static.multiplayuk.com/images/w/w-\n||static.tumblr.com/dhqhfum/WgAn39721/cfh_header_banner_v2.jpg\n||staticworld.net/images/*_skin_\n||stats.hosting24.com^\n||stats.sitesuite.org^\n||storage.to/affiliate/\n||streamtheworld.com/ondemand/ars?type=preroll$object-subrequest\n||streamtheworld.com/ondemand/creative?\n||strikeadcdn.s3.amazonaws.com^$third-party\n||structuredchannel.com/sw/swchannel/images/MarketingAssets/*/BannerAd\n||stylefind.com^*?campaign=$subdocument,third-party\n||subliminalmp3s.com^*/banners/\n||superherostuff.com/pages/cbmpage.aspx?*&cbmid=$subdocument,third-party\n||supersport.co.za^*180x254\n||supersport.com/content/2014_Sponsor\n||supersport.com/content/Sponsors\n||supply.upjers.com^$third-party\n||surf100sites.com/images/banner_\n||surveymonkey.com/jspop.aspx?$third-party\n||surveywriter.net^$script,third-party\n||survivaltop50.com/wp-content/uploads/*/Survival215x150Link.png\n||svcs.ebay.com/services/search/FindingService/*^affiliate.tracking$third-party\n||swarmjam.com^$script,third-party\n||sweed.to/?pid=$third-party\n||sweed.to/affiliates/\n||sweetwater.com/feature/$third-party\n||sweeva.com/widget.php?w=$third-party\n||swimg.net^*/banners/\n||syndicate.payloadz.com^$third-party\n||syndication.jsadapi.com^\n||syndication.visualthesaurus.com/std/vtad.js\n||syndication1.viraladnetwork.net^\n||tag.regieci.com^$third-party\n||take2.co.za/misc/bannerscript.php?\n||takeover.bauermedia.co.uk^$~stylesheet\n||talkfusion.com^*/banners/\n||tankionline.com/tankiref.swf\n||tap.more-results.net^\n||techbargains.com/inc_iframe_deals_feed.cfm?$third-party\n||techbargains.com/scripts/banner.js$third-party\n||tedswoodworking.com/images/banners/\n||textlinks.com/images/banners/\n||thaiforlove.com/userfiles/affb-\n||thatfreething.com/images/banners/\n||theatm.info/images/$third-party\n||thebigchair.com.au^$subdocument,third-party\n||themes420.com/bnrsbtns/\n||themify.me/banners/$third-party\n||themis-media.com^*/sponsorships/\n||thereadystore.com/affiliate/\n||theseblogs.com/visitScript/\n||theseforums.com/visitScript/\n||theselfdefenseco.com/?affid=$third-party\n||thetechnologyblog.net^*/bp_internet/\n||thirdpartycdn.lumovies.com^$third-party\n||ti.tradetracker.net^\n||ticketkai.com/banner/\n||ticketmaster.com/promotionalcontent/\n||tickles.co.uk^$subdocument,third-party\n||tickles.ie^$subdocument,third-party\n||tigerdirect.com^*/affiliate_\n||tinyurl.com/4x848hd$subdocument\n||tipico.*/affiliate/$third-party\n||tipico.*?affiliateId=$third-party\n||tiqiq.com/Tiqiq/WidgetInactiveIFrame.aspx?WidgetID=*&PublisherID=$subdocument,third-party\n||tmbattle.com/images/promo_\n||tmz.vo.llnwd.net^*_rightrail_200x987.swf\n||todaysfinder.com^$subdocument,third-party\n||tonefuse.s3.amazonaws.com/clientjs/\n||top5result.com/promo/\n||topbinaryaffiliates.ck-cdn.com^$third-party\n||topmedia.com/external/\n||topspin.net/secure/media/$image,domain=youtube.com\n||toptenreviews.com/r/c/\n||toptenreviews.com/w/af_widget.js$third-party\n||torguard.net/images/aff/\n||tosol.co.uk/international.php?$third-party\n||townnews.com^*/dealwidget.css?\n||townnews.com^*/upickem-deals.js?\n||townsquareblogs.com^*=sponsor&\n||toysrus.com/graphics/promo/\n||traceybell.co.uk^$subdocument,third-party\n||track.bcvcmedia.com^\n||tradeboss.com/1/banners/\n||travelmail.traveltek.net^$third-party\n||travelplus.tv^$third-party,domain=kissanime.com\n||treatme.co.nz/Affiliates/\n||tremormedia.com/embed/js/*_ads.js\n||tremormedia.com^*/tpacudeoplugin46.swf\n||tremormedia.com^*_preroll_\n||trialpay.com^*&dw-ptid=$third-party\n||tribktla.files.wordpress.com/*-639x125-sponsorship.jpg?\n||tribwgnam.files.wordpress.com^*reskin2.\n||tripadvisor.com/WidgetEmbed-*&partnerId=$domain=rbth.co.uk|rbth.com\n||tritondigital.com/lt?sid*&hasads=\n||tritondigital.com/ltflash.php?\n||trivago.co.uk/uk/srv/$third-party\n||tshirthell.com/img/affiliate_section/$third-party\n||ttt.co.uk/TMConverter/$third-party\n||turbobit.net/ref/$third-party\n||turbobit.net/refers/$third-party\n||turbotrafficsystem.com^*/banners/\n||turner.com^*/promos/\n||twinplan.com^\n||twivert.com/external/banner234x60.\n||u-loader.com/image/hotspot_\n||ubuntudeal.co.za^$subdocument,third-party\n||ukcast.tv/adds/\n||ukrd.com/image/*-160x133.jpg\n||ukrd.com/image/*-160x160.png\n||ukrd.com/images/icons/amazon.png\n||ukrd.com/images/icons/itunes.png\n||ultimatewebtraffic.info/images/fbautocash\n||uniblue.com^*/affiliates/\n||united-domains.de/parking/\n||united-domains.de^*/parking/\n||unsereuni.at/resources/img/$third-party\n||upickem.net^*/affiliates/$third-party\n||upload2.com/upload2.html\n||uploaded.net/img/public/$third-party\n||uploaded.to/img/public/$third-party\n||uploaded.to/js/layer.js\n||uploadstation.com/images/banners/\n||urtig.net/scripts/js3caf.js\n||usenet.pw^$third-party\n||usenetbucket.com^*-banner/\n||usersfiles.com/images/72890UF.png\n||usfine.com/images/sty_img/usfine.gif\n||ussearch.com/preview/banner/\n||valuechecker.co.uk/banners/$third-party\n||vcnewsdaily.com/images/vcnews_right_banner.gif\n||vdownloader.com/pages/$subdocument,third-party\n||vendor1.fitschigogerl.com^\n||veospot.com^*.html\n||viagogo.co.uk/feeds/widget.ashx?\n||videoweed.es/js/aff.js\n||videozr.com^$third-party\n||vidible.tv/placement/vast/\n||vidible.tv/prod/tags/$third-party\n||vidyoda.com/fambaa/chnls/ADSgmts.ashx?\n||viglink.com/api/batch^$third-party\n||viglink.com/api/insert^$third-party\n||viglink.com/api/optimize^$third-party\n||viglink.com/api/products^$third-party\n||virool.com/widgets/$third-party\n||virtuagirl.com/ref.php?\n||virtuaguyhd.com/ref.php?\n||visit.homepagle.com^$third-party\n||visitorboost.com/images/$third-party\n||vitabase.com/images/relationships/$third-party\n||vittgam.net/images/b/\n||voodoo.com^$third-party\n||vpn4all.com^*/banner/\n||vpntunnel.se/aff/$third-party\n||vpnxs.nl/images/vpnxs_banner\n||vrvm.com/t?\n||vuvuplaza.com^$subdocument,third-party\n||vxite.com/banner/\n||vze.com^$domain=uploadlw.com\n||walmartimages.com^*/HealthPartner_\n||warezhaven.org/warezhavenbann.jpg\n||warrantydirect.co.uk/widgets/\n||washingtonpost.com/wp-srv/wapolabs/dw/readomniturecookie.html\n||watch-free-movie-online.net/adds-\n||watch-naruto.tv/images/$third-party\n||watchme.com/track/$subdocument,third-party\n||watersoul.com^$subdocument,third-party\n||wealthyrush.com^*/banners/$third-party\n||weatherthreat.com^*/app_add.png\n||web-jp.ad-v.jp^\n||web2feel.com/images/$third-party\n||webdev.co.zw/images/banners/$third-party\n||webmasterrock.com/cpxt_pab\n||website.ws^*/banners/\n||whistleout.s3.amazonaws.com^\n||widgeo.net/popup.js\n||widget.cheki.com.ng^$third-party\n||widget.crowdignite.com^\n||widget.imshopping.com^$third-party\n||widget.jobberman.com^$third-party\n||widget.kelkoo.com^\n||widget.raaze.com^\n||widget.scoutpa.com^$third-party\n||widget.searchschoolsnetwork.com^\n||widget.shopstyle.com.au^\n||widget.shopstyle.com/widget?pid=$subdocument,third-party\n||widget.solarquotes.com.au^\n||widgetcf.adviceiq.com^$third-party\n||widgets.adviceiq.com^$third-party\n||widgets.fie.futurecdn.net^$script\n||widgets.itunes.apple.com^*&affiliate_id=$third-party\n||widgets.mobilelocalnews.com^$third-party\n||widgets.mozo.com.au^$third-party\n||widgets.privateproperty.com.ng^$third-party\n||widgets.progrids.com^$third-party\n||widgets.realestate.com.au^\n||wildamaginations.com/mdm/banner/\n||winpalace.com/?affid=\n||winsms.co.za/banner/\n||wishlistproducts.com/affiliatetools/$third-party\n||wm.co.za/24com.php?\n||wm.co.za/wmjs.php?\n||wonderlabs.com/affiliate_pro/banners/\n||worldcdn.net^*/banners/\n||worldnow.com/images/incoming/RTJ/rtj201303fall.jpg\n||worldofjudaica.com/products/dynamic_banner/\n||worldofjudaica.com/static/show/external/\n||wp.com^*/linkwidgets/$domain=coedmagazine.com\n||wrapper.ign.com^$third-party\n||ws.amazon.*/widgets/$third-party\n||wsockd.com^$third-party\n||wtpn.twenga.co.uk^\n||wtpn.twenga.de^\n||wtprn.com/images/$domain=rprradio.com\n||wtprn.com/sponsors/\n||wupload.com/images/banners/\n||wupload.com/referral/$third-party\n||x3cms.com/ads/\n||xcams.com/livecams/pub_collante/script.php?$third-party\n||xgaming.com/rotate*.php?$third-party\n||xigen.co.uk^*/Affiliate/\n||xingcloud.com^*/uid_\n||xml.exactseek.com/cgi-bin/js-feed.cgi?$third-party\n||xproxyhost.com/images/banners/\n||yachting.org^*/banner/\n||yahoo.net^*/ads/\n||yb.torchbrowser.com^\n||yeas.yahoo.co.jp^\n||yieldmanager.edgesuite.net^$third-party\n||yimg.com/gs/apex/mediastore/\n||yimg.com^*/dianominewwidget2.html$domain=yahoo.com\n||yimg.com^*/quickplay_maxwellhouse.png\n||yimg.com^*/sponsored.js\n||yimg.com^*_skin_$domain=yahoo.com\n||ynet.co.il^*/ynetbanneradmin/\n||yontoo.com^$subdocument,third-party\n||yooclick.com^$subdocument,third-party\n||you-cubez.com/images/banners/\n||zapads.zapak.com^\n||zazzle.com/utl/getpanel$third-party\n||zazzle.com^*?rf$third-party\n||zergnet.com/zerg.js$third-party\n||zeus.qj.net^\n||zeusfiles.com/promo/\n||ziffdavisenterprise.com/contextclicks/\n||ziffprod.com/CSE/BestPrice?\n||zip2save.com/widget.php?\n||zmh.zope.net^$third-party\n||zoomin.tv/video/*.flv$third-party,domain=twitch.tv\n! Mobile\n||iadc.qwapi.com^\n! Anti-Adblock\n! *** easylist:easylist/easylist_thirdparty_popup.txt ***\n||4utro.ru^$popup\n||5.39.67.191/promo.php?$popup\n||6angebot.ch/?ref=$popup,third-party\n||adfoc.us/serve/$popup,third-party\n||admngronline.com^$popup,third-party\n||adrotator.se^$popup\n||adserving.unibet.com^$popup,third-party\n||affiliates.galapartners.co.uk^$popup,third-party\n||affportal-lb.bevomedia.com^$popup,third-party\n||amazing-offers.co.il^$popup,third-party\n||babylon.com/redirects/$popup,third-party\n||babylon.com/welcome/index.html?affID=$popup,third-party\n||banner.galabingo.com^$popup,third-party\n||bet365.com^*affiliate=$popup\n||binaryoptions24h.com^$popup,third-party\n||bovada.lv^$popup,third-party\n||casino.com^*?*=$popup,third-party\n||casinoadviser.net^$popup\n||cdn.optmd.com^$popup,third-party\n||chatlivejasmin.net^$popup\n||chatulfetelor.net/$popup\n||chaturbate.com/affiliates/$popup,third-party\n||click.scour.com^$popup,third-party\n||clickansave.net^$popup,third-party\n||ctcautobody.com^$popup,third-party\n||d1110e4.se^$popup\n||dateoffer.net/?s=*&subid=$popup,third-party\n||eroticmix.blogspot.$popup\n||erotikdeal.com/?ref=$popup,third-party\n||erotikdeal.com/advertising.html$popup,third-party\n||eurogrand.com^$popup\n||europacasino.com^$popup,third-party\n||evanetwork.com^$popup\n||facebookcoverx.com^$popup,third-party\n||fastclick.net^$popup\n||firstload.com^$popup\n||firstload.de^$popup\n||flashplayer-updates.com^$popup\n||fleshlight.com/?link=$popup,third-party\n||free-rewards.com-s.tv^$popup\n||fsoft4down.com^$popup\n||fulltiltpoker.com/?key=$popup,third-party\n||fulltiltpoker.com/affiliates/$popup,third-party\n||fwmrm.net/ad/$popup\n||generic4all.com^*.dhtml?refid=$popup,third-party\n||getsecuredfiles.com^$popup,third-party\n||hdvid-codec.com^$popup\n||hdvidcodecs.com^$popup\n||hetu.in^$popup,third-party\n||homemadecelebrityporn.com/track/$popup,third-party\n||hyperlinksecure.com/back?token=$popup\n||hyperlinksecure.com/go/$popup\n||i2casting.com^$popup,third-party\n||itunes.apple.com^$popup,domain=fillinn.com\n||liutilities.com^*/affiliate/$popup\n||lovefilm.com/partners/$popup,third-party\n||lovepoker.de^*/?pid=$popup\n||lp.ilivid.com/?$popup,third-party\n||lp.imesh.com/?$popup,third-party\n||lp.titanpoker.com^$popup,third-party\n||lsbet.com/bonus/$popup,third-party\n||lumosity.com/landing_pages/$popup\n||lyricsbogie.com/?$popup,third-party\n||makemoneyonline.2yu.in^$popup\n||maxedtube.com/video_play?*&utm_campaign=$popup,third-party\n||mcars.org/landing/$popup,third-party\n||media.mybet.com/redirect.aspx?pid=*&bid=$popup,third-party\n||megacloud.com/signup?$popup,third-party\n||meme.smhlmao.com^$popup,third-party\n||mgid.com^$popup,third-party\n||mypromocenter.com^$popup\n||noowmedia.com^$popup\n||opendownloadmanager.com^$popup,third-party\n||otvetus.com^$popup,third-party\n||paid.outbrain.com/network/redir?$popup,third-party\n||planet49.com/cgi-bin/wingame.pl?$popup\n||platinumdown.com^$popup\n||pokerstars.eu^*/?source=$popup,third-party\n||priceinfo.comuv.com^$popup\n||promo.galabingo.com^$popup,third-party\n||promo.xcasino.com/?$popup,third-party\n||pub.ezanga.com/rv2.php?$popup\n||rackcorp.com^$popup\n||record.sportsbetaffiliates.com.au^$popup,third-party\n||red-tube.com/popunder/$popup\n||rocketgames.com^$popup,third-party\n||roomkey.com/referrals?$popup,third-party\n||secure.komli.com^$popup,third-party\n||serve.prestigecasino.com^$popup,third-party\n||serve.williamhillcasino.com^$popup,third-party\n||settlecruise.org^$popup\n||sharecash.org^$popup,third-party\n||softingo.com/clp/$popup\n||stake7.com^*?a_aid=$popup,third-party\n||stargames.com/bridge.asp?idr=$popup\n||stargames.com/web/*&cid=*&pid=$popup,third-party\n||sunmaker.com^*^a_aid^$popup,third-party\n||thebestbookies.com^$popup,domain=firstrow1us.eu\n||theseforums.com^*/?ref=$popup\n||thetraderinpajamas.com^$popup,third-party\n||tipico.com^*?affiliateid=$popup,third-party\n||torntv-tvv.org^$popup,third-party\n||track.mypcbackup.com^$popup,third-party\n||track.xtrasize.nl^$popup,third-party\n||tripadvisor.*/HotelLander?$popup,third-party\n||truckingunlimited.com^$popup,domain=sharpfile.com\n||ul.to/ref/$popup\n||upbcd.info/vuze/$popup\n||uploaded.net/ref/$popup\n||urlcash.net/random*.php$popup\n||urmediazone.com/play?ref=$popup,third-party\n||usenet.nl^$popup\n||vidds.net/?s=promo$popup,third-party\n||wealth-at-home-millions.com^$popup,third-party\n||weeklyprizewinner.com-net.info^$popup\n||with-binaryoption.com^$popup,third-party\n||withbinaryoptions.com^$popup,third-party\n||wptpoker.com^$popup\n! *** easylist:easylist_adult/adult_thirdparty.txt ***\n.php?pub=*&trw_adblocker=$subdocument\n/exports/livemodel/?$subdocument\n||193.34.134.18^*/banners/\n||193.34.134.74^*/banners/\n||204.140.25.247/ads/\n||213.174.130.10/banners/\n||213.174.130.8/banners/\n||213.174.130.9/banners/\n||213.174.140.76/js/showbanner4.js\n||213.174.140.76^*/ads/\n||213.174.140.76^*/js/msn-$script\n||213.174.140.76^*/js/msn.js\n||4tube.com/iframe/$third-party\n||79.120.183.166^*/banners/\n||88.208.23.$third-party,domain=xhamster.com\n||88.85.77.94/rotation/$third-party\n||91.83.237.41^*/banners/\n||a.sucksex.com^$third-party\n||ad.duga.jp^\n||ad.favod.net^$third-party\n||ad.iloveinterracial.com^\n||ad.traffmonster.info^$third-party\n||adb.fling.com^$third-party\n||ads.contentabc.com^$third-party\n||ads.videosz.com^\n||adsrv.bangbros.com^$third-party\n||adtools.gossipkings.com^$third-party\n||adtools2.amakings.com^$third-party\n||adultdvd.com/plugins/*/store.html$third-party\n||adultfax.com/service/vsab.php?\n||adultfriendfinder.com/go/$third-party\n||adultfriendfinder.com/images/banners/$third-party\n||adultfriendfinder.com/javascript/$third-party\n||adultfriendfinder.com/piclist?$third-party\n||adultporntubemovies.com/images/banners/\n||aebn.net/banners/\n||aebn.net/feed/$third-party\n||aff-jp.dxlive.com^$third-party\n||aff-jp.exshot.com^$third-party\n||affiliate.burn-out.tv^$third-party\n||affiliate.dtiserv.com^$third-party\n||affiliate.godaddy.com^$third-party\n||affiliates.cupidplc.com^$third-party\n||affiliates.easydate.biz^$third-party\n||affiliates.franchisegator.com^$third-party\n||affiliates.thrixxx.com^\n||allanalpass.com/visitScript/\n||alt.com/go/$third-party\n||amarotic.com/Banner/$third-party\n||amarotic.com/rotation/layer/chatpage/$third-party\n||amarotic.com^*?wmid=*&kamid=*&wsid=$third-party\n||amateur.amarotic.com^$third-party\n||amateurseite.com/banner/$third-party\n||ambya.com/potdc/\n||ard.sweetdiscreet.com^\n||asianbutterflies.com/potd/\n||asktiava.com/promotion/\n||assinclusive.com/cyonix.html\n||assinclusive.com/linkstxt2.html\n||atlasfiles.com^*/sp3_ep.js$third-party\n||avatraffic.com/b/\n||b.turbo.az^$third-party\n||babes.picrush.com^$third-party\n||banner.69stream.com^$third-party\n||banner.gasuki.com^$third-party\n||banner.resulthost.org^$third-party\n||banner.themediaplanets.com^$third-party\n||banners*.spacash.com^$third-party\n||banners.adultfriendfinder.com^$third-party\n||banners.alt.com^$third-party\n||banners.amigos.com^$third-party\n||banners.blacksexmatch.com^$third-party\n||banners.fastcupid.com^$third-party\n||banners.fuckbookhookups.com^$third-party\n||banners.nostringsattached.com^$third-party\n||banners.outpersonals.com^$third-party\n||banners.passion.com^$third-party\n||banners.passiondollars.com^$third-party\n||banners.payserve.com^$third-party\n||banners.penthouse.com^$third-party\n||banners.rude.com^$third-party\n||banners.rushcommerce.com^$third-party\n||banners.videosecrets.com^$third-party\n||banners.webcams.com^$third-party\n||bannershotlink.perfectgonzo.com^\n||bans.bride.ru^$third-party\n||bbp.brazzers.com^$third-party\n||bigmovies.com/images/banners/\n||blaaaa12.googlecode.com^\n||blackbrazilianshemales.com/bbs/banners/\n||blogspot.com^*/ad.jpg\n||bongacash.com/promo.php\n||bongacash.com/tools/promo.php$third-party\n||br.blackfling.com^\n||br.fling.com^\n||br.realitykings.com^\n||brasileirinhas.com.br/banners/\n||brazzers.com/ads/\n||bullz-eye.com/pictureofday/$third-party\n||cache.worldfriends.tv^$third-party\n||camelmedia.net/thumbs/$third-party\n||cams.com/go/$third-party\n||cams.com/p/cams/cpcs/streaminfo.cgi?$third-party\n||cams.enjoy.be^$third-party\n||cams.spacash.com^$third-party\n||camsrule.com/exports/$third-party\n||cartoontube.com^$subdocument,third-party\n||cash.femjoy.com^$third-party\n||cdn.epom.com^*/940_250.gif\n||cdncache2-a.akamaihd.net^$third-party\n||cdnjke.com^$third-party\n||chaturbate.com/affiliates/\n||chaturbate.com/creative/\n||click.absoluteagency.com^$third-party\n||click.kink.com^$third-party\n||clickz.lonelycheatingwives.com^$third-party\n||clipjunkie.com/sftopbanner$third-party\n||closepics.com/media/banners/\n||cmix.org/teasers/?\n||cockfortwo.com/track/$third-party\n||content.liveuniverse.com^$third-party\n||contentcache-a.akamaihd.net^$third-party\n||cp.intl.match.com^$third-party\n||cpm.amateurcommunity.com^\n||creamgoodies.com/potd/\n||crocogirls.com/croco-new.js\n||cs.celebbusters.com^$third-party\n||cs.exposedontape.com^$third-party\n||dailyvideo.securejoin.com^\n||daredorm.com^$subdocument,third-party\n||datefree.com^$third-party\n||ddfcash.com/iframes/$third-party\n||ddfcash.com/promo/banners/\n||ddstatic.com^*/banners/\n||desk.cmix.org^\n||devilgirls.co/images/devil.gif\n||devilgirls.co/pop.js\n||dom2xxx.com/ban/$third-party\n||downloadsmais.com/imagens/download-direto.gif\n||dump1.no-ip.biz^$third-party\n||dvdbox.com/promo/$third-party\n||eliterotica.com/images/banners/\n||erotikdeal.com/?ref=$third-party\n||escortforum.net/images/banners/$third-party\n||eurolive.com/?module=public_eurolive_onlinehostess&\n||eurolive.com/index.php?module=public_eurolive_onlinetool&\n||evilangel.com/static/$third-party\n||exposedemos.com/track/$third-party\n||exposedteencelebs.com/banner/$third-party\n||extremeladyboys.com/elb/banners/\n||f5porn.com/porn.gif\n||fansign.streamray.com^$third-party\n||fastcdn.me/js/snpp/\n||fastcdn.me/mlr/\n||fbooksluts.com^$subdocument,third-party\n||fckya.com/lj.js\n||feeds.videosz.com^\n||femjoy.com/bnrs/$third-party\n||ff.nsg.org.ua^\n||firestormmedia.tv^*?affid=\n||fleshlight.com/images/banners/\n||fleshlight.com/images/peel/\n||freebbw.com/webcams.html$third-party\n||freeonescams.com^$subdocument,third-party\n||freeporn.hu/banners/\n||freexxxvideoclip.aebn.net^\n||freshnews.su/get_tizers.php?\n||fuckhub.net^*?pid=$third-party\n||gagthebitch.com/track/$third-party\n||galeriaseroticas.xpg.com.br^$third-party\n||galleries.videosz.com^$object,third-party\n||gallery.deskbabes.com^*.php?dir=*&ids=$third-party\n||gammasites.com/pornication/pc_browsable.php?\n||gateway-banner.eravage.com^$third-party\n||geo.camazon.com^$third-party\n||geo.cliphunter.com^\n||geobanner.adultfriendfinder.com^\n||geobanner.alt.com^\n||geobanner.blacksexmatch.com^$third-party\n||geobanner.fuckbookhookups.com^$third-party\n||geobanner.sexfinder.com^$third-party\n||geobanner.socialflirt.com^\n||gfrevenge.com/vbanners/\n||girls-home-alone.com/dating/\n||go2cdn.org/brand/$third-party\n||graphics.pop6.com/javascript/$script,third-party,domain=~adultfriendfinder.co.uk|~adultfriendfinder.com\n||graphics.streamray.com^*/cams_live.swf$third-party\n||hardbritlads.com/banner/\n||hardcoresexnow.com^$subdocument,third-party\n||hdpornphotos.com/images/728x180_\n||hdpornphotos.com/images/banner_\n||hentaijunkie.com^*/banners/\n||hentaikey.com/images/banners/\n||highrollercams.com/widgets/$third-party\n||hodun.ru/files/promo/\n||homoactive.tv/banner/\n||hoptopboy.com/js/fl.js\n||hornybirds.com^$subdocument,third-party\n||hornypharaoh.com/banner_$third-party\n||hostave3.net/hvw/banners/\n||hosted.x-art.com/potd$third-party\n||hosting24.com/images/banners/$third-party\n||hotcaracum.com/banner/\n||hotkinkyjo.xxx/resseler/banners/\n||hotmovies.com/custom_videos.php?\n||hotsocialz.com^$third-party\n||iframe.adultfriendfinder.com^$third-party\n||iframes.hustler.com^$third-party\n||ifriends.net^$subdocument,third-party\n||ihookup.com/configcreatives/\n||image.cecash.com^$third-party\n||image.nsk-sys.com^$third-party\n||imageteam.org/upload/big/2014/06/22/53a7181b378cb.png\n||interracialbangblog.info/banner.jpg\n||interracialbangblog.info^*-ban.png\n||ivitrine.buscape.com^$third-party\n||js.picsomania.info^$third-party\n||just-nude.com/images/ban_$third-party\n||justcutegirls.com/banners/$third-party\n||kau.li/yad.js\n||kenny-glenn.net^*/longbanner_$third-party\n||kuntfutube.com/bgbb.gif\n||lacyx.com/images/banners/\n||ladyboygoo.com/lbg/banners/\n||latinteencash.com/potd/$third-party\n||layers.spacash.com^$third-party\n||lb-69.com/pics/\n||links.freeones.com^$third-party\n||livejasmin.com^$third-party,domain=~awempire.com\n||livesexasian.com^$subdocument,third-party\n||llnwd.net^*/takeover_\n||longmint.com/lm/banners/\n||loveme.com^$third-party\n||magazine-empire.com/images/pornstarad.jpg\n||manager.koocash.fr^$third-party\n||manhunt.net/?dm=$third-party\n||map.pop6.com^$third-party\n||match.com/landing/$third-party\n||media.eurolive.com^$third-party\n||media.match.com^$third-party\n||media.mykocam.com^$third-party\n||media.mykodial.com^$third-party\n||media.pussycash.com^$third-party\n||megacash.warpnet.com.br^$third-party\n||metartmoney.com^$third-party\n||metartmoney.met-art.com^$third-party\n||mofomedia.nl/pop-*.js\n||movies.spacash.com^*&th=180x135$script\n||mrskin.com/affiliateframe/\n||mrskincdn.com^*/flash/aff/$third-party\n||mrvids.com/network/$third-party\n||ms.wsex.com^$third-party\n||my-dirty-hobby.com/?sub=$third-party\n||mycams.com/freechat.php?$third-party\n||myexposedgirlfriendz.com/pop/popuppp.js\n||myexposedgirlfriendz.com/pop/popuprk.js\n||myfreakygf.com/www/click/$third-party\n||mykocam.com/js/feeds.js$third-party\n||naked.com/promos/$third-party\n||nakedshygirls.com/bannerimg/\n||natuko-miracle.com/banner/$third-party\n||naughtycdn.com/public/iframes/$third-party\n||netvideogirls.com/adultfyi.jpg\n||nubiles.net/webmasters/promo/$third-party\n||nude.hu/html/$third-party\n||nudemix.com/widget/\n||nuvidp.com^$third-party\n||odnidoma.com/ban/$third-party\n||openadultdirectory.com/banner-$third-party\n||orgasmtube.com/js/superP/\n||otcash.com/images/$third-party\n||outils.f5biz.com^$third-party\n||partner.loveplanet.ru^$third-party\n||partners.heart2heartnetwork.$third-party\n||partners.pornerbros.com^\n||partners.yobt.com^$third-party\n||partners.yobt.tv^$third-party\n||paydir.com/images/bnr\n||pcash.globalmailer5.com^$third-party\n||pinkvisualgames.com/?revid=$third-party\n||plugin-x.com/rotaban/\n||pod.manplay.com^$third-party\n||pod.xpress.com^$third-party\n||pop6.adultfriendfinder.com^$third-party\n||pop6.com/banners/$third-party\n||pop6.com/javascript/im_box-*.js\n||porn2blog.com/wp-content/banners/\n||porndeals.com^$subdocument,third-party\n||pornhubpremium.com/relatedpremium/$subdocument,third-party\n||pornoh.info^$image,third-party\n||pornravage.com/notification/$third-party\n||pornstarnetwork.com^*_660x70.jpg\n||pornturbo.com/*.php?g=$subdocument,third-party\n||pornturbo.com^*.php?*&cmp=$subdocument,third-party\n||potd.onlytease.com^$third-party\n||prettyincash.com/premade/$third-party\n||prime.ms^$domain=primejailbait.com\n||privatamateure.com/promotion/\n||private.camz.$third-party\n||private.com/banner/\n||profile.bharatmatrimony.com^$third-party\n||promo.blackcrush.com^$third-party\n||promo.cams.com^$third-party\n||promo.pegcweb.com^$third-party\n||promo1.webcams.nl^$third-party\n||promos.gpniches.com^$third-party\n||promos.meetlocals.com^$third-party\n||promos.wealthymen.com^$third-party\n||ptcdn.mbicash.nl^$third-party\n||punterlink.co.uk/images/storage/siteban$third-party\n||pussycash.com/content/banners/$third-party\n||rabbitporno.com/friends/\n||rabbitporno.com/iframes/$third-party\n||rawtubelive.com/exports/$third-party\n||realitykings.com/vbanners/\n||red-tube.com/dynbanner.php?\n||resimler.randevum.com^$third-party\n||rexcams.com/misc/iframes_new/\n||rotci.com/images/rotcibanner.png\n||rough-sex-in-russia.com^*/webmaster/$third-party\n||rss.dtiserv.com^$third-party\n||ruleclaim.web.fc2.com^$third-party\n||ruscams.com/promo/\n||russkoexxx.com/ban/$third-party\n||s1magnettvcom.maynemyltf.netdna-cdn.com^\n||sabin.free.fr^$third-party\n||saboom.com.pccdn.com^*/banner/\n||sadtube.com/chat/$script\n||sakuralive.com/dynamicbanner/\n||scoreland.com/banner/\n||screencapturewidget.aebn.net^$third-party\n||server140.com^$third-party\n||sextronix.*.cdnaccess.com^\n||sextronix.com/b/$third-party\n||sextronix.com/images/$third-party\n||sextubepromo.com/ubr/\n||sexy.fling.com^$third-party\n||sexycams.com/exports/$third-party\n||share-image.com/borky/\n||shared.juicybucks.com^$third-party\n||shemale.asia/sma/banners/\n||shemalenova.com/smn/banners/\n||shinypics.com/blogbanner/$third-party\n||simonscans.com/banner/\n||skeettools.com/custom/$third-party\n||sleepgalleries.com/recips/$third-party\n||slickcash.com/flash/subtitles_$third-party\n||smartmovies.net/promo_$third-party\n||smyw.org/smyw_anima_1.gif\n||snrcash.com/profilerotator/$third-party\n||spacash.com//v2bannerview.php?\n||spacash.com/popup/$third-party\n||spacash.com/tools/peel/\n||sponsor4cash.de/script/\n||steadybucks.com^*/banners/\n||streamen.com/exports/$third-party\n||streamray.com/images/cams/flash/cams_live.swf\n||surv.xbizmedia.com^\n||sweet.game-rust.ru^\n||swurve.com/affiliates/\n||target.vivid.com^$third-party\n||teendaporn.com/rk.js\n||thrixxx.com/affiliates/$image\n||thrixxx.com/scripts/show_banner.php?\n||thumbs.sunporno.com^$third-party\n||thumbs.vstreamcdn.com^*/slider.html\n||tlavideo.com/affiliates/$third-party\n||tools.gfcash.com^$third-party\n||tour.cum-covered-gfs.com^$third-party\n||tours.imlive.com^$third-party\n||track.xtrasize.nl^$third-party\n||trader.erosdlz.com^$third-party\n||ts.videosz.com/iframes/\n||tubefck.com^*/adawe.swf\n||tumblr.com^*/tumblr_mht2lq0XUC1rmg71eo1_500.gif$domain=stocporn.com\n||turbolovervidz.com/fling/\n||twiant.com/img/banners/\n||twilightsex.com^$subdocument,third-party\n||updatetube.com/iframes/\n||updatetube.com/updatetube_html/\n||upsellit.com/custom/$third-party\n||uramov.info/wav/wavideo.html\n||vectorpastel.com^$third-party\n||vidz.com/promo_banner/$third-party\n||vigrax.pl/banner/\n||viorotica.com^*/banners/\n||virtualhottie2.com/cash/tools/banners/\n||visit-x.net/promo/$third-party\n||vodconcepts.com^*/banners/\n||vserv.bc.cdn.bitgravity.com^$third-party\n||vzzk.com/uploads/banners/$third-party\n||wafflegirl.com/galleries/banner/\n||watchmygf.com/preview/$third-party\n||webcams.com/js/im_popup.php?\n||webcams.com/misc/iframes_new/\n||webmaster.erotik.com^$third-party\n||wendi.com/ipt/$third-party\n||wetandpuffy.com/galleries/banners/\n||widgets.comcontent.net^\n||widgetssec.cam-content.com^\n||winkit.info/wink2.js\n||xcabin.net/b/$third-party\n||xlgirls.com/banner/$third-party\n||xnxx.com^$third-party\n||xtrasize.pl/banner/\n||xxtu.be^$subdocument,third-party\n||xxxoh.com/number/$third-party\n||youfck.com^*/adawe.swf\n||yplf.com/ram/files/sponsors/\n||ztod.com/flash/wall*.swf\n||ztod.com/iframe/third/$subdocument\n||zubehost.com/*?zoneid=\n! *** easylist:easylist_adult/adult_thirdparty_popup.txt ***\n||1800freecams.com^$popup,third-party\n||21sextury.com^$popup\n||777livecams.com/?id=$popup,third-party\n||adultfriendfinder.com/banners/$popup,third-party\n||adultfriendfinder.com/go/$popup\n||amarotic.com/?$popup,third-party\n||amarotic.com^*?wmid=$popup,third-party\n||babereporters.info^$popup,domain=viewcube.org\n||benaughty.com/aff.php?$popup,third-party\n||cam4.com/?$popup\n||camcity.com/rtr.php?aid=$popup\n||candidvoyeurism.com/ads/$popup\n||chaturbate.com/*/?join_overlay=$popup\n||chaturbate.com/sitestats/openwindow/$popup\n||cpm.amateurcommunity.*?cp=$popup,third-party\n||devilsfilm.com/track/go.php?$popup,third-party\n||epornerlive.com/index.php?*=punder$popup\n||exposedwebcams.com/?token=$popup,third-party\n||ext.affaire.com^$popup\n||extremefuse.com/out.php?$popup\n||fantasti.cc/ajax/gw.php?$popup\n||fleshlight-international.eu^*?link=$popup,third-party\n||fling.com/enter.php?$popup\n||flirt4free.com/_special/pops/$popup,third-party\n||fuckbookhookups.com/go/$popup\n||fuckbooknet.net/dating/$popup,third-party\n||fuckshow.org^*&adr=$popup\n||fucktapes.org/fucktube.htm$popup\n||get-a-fuck-tonight.com^$popup\n||hazeher.com/t1/pps$popup\n||hqtubevideos.com/play.html$popup,third-party\n||icgirls.com^$popup\n||imlive.com/wmaster.ashx?$popup,third-party\n||jasmin.com^$popup,third-party\n||join.filthydatez.com^$popup,third-party\n||join.teamskeet.com/track/$popup,third-party\n||join.whitegfs.com^$popup\n||judgeporn.com/video_pop.php?$popup\n||linkfame.com^*/go.php?$popup,third-party\n||livecams.com^$popup\n||livejasmin.com^$popup,third-party\n||media.campartner.com/index.php?cpID=*&cpMID=$popup,third-party\n||media.campartner.com^*?cp=$popup,third-party\n||meetlocals.com^*popunder$popup\n||mjtlive.com/exports/golive/?lp=*&afno=$popup,third-party\n||mydirtyhobby.com/?$popup,third-party\n||myfreecams.com/?co_id=$popup\n||online.mydirtyhobby.com^*?naff=$popup,third-party\n||pomnach.ru^$popup\n||pornhub.com^*&utm_campaign=*-pop|$popup\n||pornme.com^*.php?ref=$popup,third-party\n||porno-onlain.info/top.php$popup\n||pornoh.info^$popup\n||pornslash.com/cbp.php$popup\n||postselfies.com^*?nats=$popup,third-party\n||redtube.com/bid/$popup\n||rudefinder.com/?$popup,third-party\n||seekbang.com/cs/rotator/$popup\n||seeme.com^*?aid=*&art=$popup\n||sex.com/popunder/$popup\n||sexier.com/services/adsredirect.ashx?$popup,third-party\n||sexier.com^*_popunder&$popup\n||sexsearchcom.com^$popup,third-party\n||socialflirt.com/go/$popup,third-party\n||streamate.com/landing/$popup\n||textad.sexsearch.com^$popup\n||topbucks.com/popunder/$popup\n||tour.mrskin.com^$popup,third-party\n||twistys.com/track/$popup,third-party\n||upforit.com/ext.php$popup\n||videobox.com/?tid=$popup\n||videobox.com/tour/$popup\n||videosz.com/search.php$popup,third-party\n||videosz.com^*&tracker_id=$popup,third-party\n||visit-x.net/cams/*.html?*&s=*&ws=$popup,third-party\n||wantlive.com/landing/$popup\n||webcams.com^$popup,third-party\n||xdating.com/search/$popup,third-party\n||xvideoslive.com/?AFNO$popup,third-party\n||xvideoslive.com/landing/$popup,third-party\n||yuvutu.com^$popup,third-party\n!----------------------Specific advert blocking filters-----------------------!\n! *** easylist:easylist/easylist_specific_block.txt ***\n.com/b?z=$domain=couchtuner.eu|zzstream.li\n.com/jquery/*.js?_t=$script,third-party\n.info/*.js?guid=$script,third-party\n.info^$script,domain=allmyvideos.net|mediafire.com|mooshare.biz|muchshare.net|royalvids.eu|tvmuse.com|tvmuse.eu|vidspot.net|vidtomp3.com\n/*;sz=*;ord=$domain=webhostingtalk.com\n/3market.php?$domain=adf.ly|j.gs|q.gs|u.bb\n/?placement=$script,domain=sockshare.com\n/af.php?$subdocument\n/assets/_takeover/*$domain=deadspin.com|gawker.com|gizmodo.com|io9.com|jalopnik.com|jezebel.com|kotaku.com|lifehacker.com\n/clickpop.js$domain=miliblog.co.uk\n/com.js$domain=kinox.to\n/get/path/.banners.$image,third-party\n/http://[a-zA-Z0-9]+\\.[a-z]+\\/.*[a-zA-Z0-9]+/$script,third-party,domain=affluentinvestor.com|alfonzorachel.com|allenbwest.com|allenwestrepublic.com|allthumbsgaming.com|barbwire.com|bighealthreport.com|bulletsfirst.net|clashdaily.com|comicallyincorrect.com|conservativebyte.com|conservativevideos.com|cowboybyte.com|creationrevolution.com|dailysurge.com|dccrimestories.com|drginaloudon.com|drhotze.com|eaglerising.com|freedomoutpost.com|godfatherpolitics.com|instigatornews.com|joeforamerica.com|libertyalliance.com|libertymafia.com|libertyunyielding.com|mediafire.com|menrec.com|nickadamsinamerica.com|patriot.tv|patriotoutdoornews.com|patriotupdate.com|photobucket.com|pitgrit.com|politicaloutcast.com|primewire.ag|promptfile.com|quinhillyer.com|shark-tank.com|stevedeace.com|themattwalshblog.com|therealside.com|tinypic.com|victoriajackson.com|zionica.com\n/market.php?$domain=adf.ly|u.bb\n/nexp/dok2v=*/cloudflare/rocket.js$script,domain=ubuntugeek.com\n/static/js/pop*.js$script,domain=baymirror.com|getpirate.com|livepirate.com|mypiratebay.cl|noncensuram.info|pirateproxy.net|pirateproxy.se|proxicity.info|thepiratebay.se.coevoet.nl|tpb.chezber.org|tpb.ipredator.se|tpb.piraten.lu|tpb.pirateparty.ca|tpb.pirates.ie\n?random=$script,domain=allmyvideos.net|mediafire.com|mooshare.biz|muchshare.net|tvmuse.com|tvmuse.eu|vidspot.net\n^guid=$script,domain=allmyvideos.net|mediafire.com|mooshare.biz|muchshare.net|tvmuse.com|tvmuse.eu|vidspot.net\n|http:$subdocument,third-party,domain=2ad.in|ad2links.com|adf.ly|adfoc.us|adv.li|adyou.me|allmyvideos.net|ay.gy|imgmega.com|j.gs|linkbucksmedia.com|q.gs|shr77.com|thevideo.me|u.bb|vidspot.net\n|http://*.com^*|*$script,third-party,domain=sporcle.com\n|http://creative.*/smart.js$script,third-party\n|http://j.gs/omnigy*.swf\n|http://p.pw^$subdocument\n|https:$subdocument,third-party,domain=2ad.in|adf.ly|adfoc.us|adjet.biz|adv.li|ay.gy|j.gs|q.gs|u.bb\n||0-60mag.com/js/takeover-2.0/\n||04stream.com/NEWAD11.php?\n||04stream.com/podddpo.js\n||10-fast-fingers.com/quotebattle-ad.png\n||100best-free-web-space.com/images/ipage.gif\n||1023xlc.com/upload/*_background_\n||1043thefan.com^*_Sponsors/\n||1071radio.com//wp-content/banners/\n||1077thebone.com^*/banners/\n||109.236.82.94^$domain=fileforever.net\n||11points.com/images/slack100.jpg\n||1320wils.com/assets/images/promo%20banner/\n||1340wcmi.com/images/banners/\n||1430wnav.com/images/300-\n||1430wnav.com/images/468-\n||1590wcgo.com/images/banners/\n||174.143.241.129^$domain=astalavista.com\n||1776coalition.com/wp-content/plugins/sam-images/\n||178.209.48.7^$domain=zerohedge.com\n||180upload.com/p1.js\n||180upload.com/pir/729.js\n||194.14.0.39/pia.png$domain=tokyo-tosho.net|tokyotosho.info|tokyotosho.se\n||194.14.0.39/pia_wide.png$domain=tokyo-tosho.net|tokyotosho.info|tokyotosho.se\n||1up.com/scripts/takeover.js\n||1up.com/vip/vip_games.html\n||1up.com^*/promos/\n||209.62.111.179/ad.aspx$domain=pachanyc.com\n||212.7.200.164^$domain=wjunction.com\n||216.151.186.5^*/serve.php?$domain=sendspace.com\n||217.79.184.79^$domain=filmovizija.com\n||22lottery.com/images/lm468\n||24hourwristbands.com/*.googleadservices.com/\n||2flashgames.com/img/nfs.gif\n||2mfm.org/images/banners/\n||2oceansvibe.com/?custom=takeover\n||2pass.co.uk/img/avanquest2013.gif\n||360haven.com/forums/*.advertising.com/\n||3dsemulator.org/img/download.png\n||3dwallpaperstudio.com/hd_wallpapers.png\n||3g.co.uk/fad/\n||3pmpickup.com.au/images/kmart_v2.jpg\n||4chan.org/support/\n||4downfiles.com/open1.js\n||4fastfile.com/afiliat.png\n||4fuckr.com/g/$image\n||4fuckr.com/static/*-banner.\n||4shared.com/images/label1.gif\n||4sysops.com^*.php?unit=main$xmlhttprequest\n||5.199.170.67^$domain=ncrypt.in\n||50statesclassifieds.com/image.php?size_id=$subdocument\n||560theanswer.com/upload/sponsor-\n||5min.com^*/banners/\n||5star-shareware.com/scripts/5starads.js\n||610kvnu.com*^/sponsors/\n||64.245.1.134/search/v2/jsp/pcwframe.jsp?provider=\n||6waves.com/aff.php?\n||74.86.208.249^$domain=fijivillage.com\n||810varsity.com^*/background-\n||84.234.22.104/ads/$domain=tvcatchup.com\n||85.17.254.150^*.php?$domain=wiretarget.com\n||88.80.16.183/streams/counters/\n||8a.nu/site2/sponsors/\n||8a.nu/sponsors/\n||911tabs.com/img/bgd_911tabs_\n||911tabs.com/img/takeover_app_\n||911tabs.com^*/ringtones_overlay.js\n||977music.com/index.php?p=get_loading_banner\n||977rocks.com/images/300-\n||980wcap.com/sponsorlogos/\n||9news.com/promo/\n||a.cdngeek.net^\n||a.giantrealm.com^\n||a.i-sgcm.com^\n||a.kat.ph^\n||a.kickass.\n||a.kickasstorrent.me^\n||a.kickassunblock.info^\n||a.kickassunblock.net^\n||a7.org/info/\n||aaugh.com/images/dreamhostad.gif\n||abc.com/abcvideo/*/mp4/*_Promo_$object-subrequest,domain=abc.go.com\n||abduzeedo.com^*/mt-banner.jpg\n||abook.ws/banner6.png\n||abook.ws/pyload.png\n||abook.ws/th_mydl.gif\n||about.com/0g/$subdocument\n||aboutmyarea.co.uk/images/imgstore/\n||aboutmyip.com/images/Ad0\n||aboutmyip.com/images/SynaManBanner.gif\n||abovetopsecret.com/160_\n||abovetopsecret.com/300_\n||abovetopsecret.com/728_\n||abovetopsecret.com/images/plexidigest-300x300.jpg\n||absolutcheats.com/images/changemy*.gif\n||absolutewrite.com^*/48HrBooks4.jpg\n||absolutewrite.com^*/doyle_editorial.jpg\n||absolutewrite.com^*/Scrivener-11-thumbnail-cover_160x136.gif\n||absolutewrite.com^*_468x60banner.\n||absolutewrite.com^*_ad.jpg\n||ac2.msn.com^\n||access.njherald.com^\n||accesshollywood.com/aife?$subdocument\n||acidcow.com/banners.php?\n||acs86.com/a.htm?\n||activewin.com/images/*_ad.gif\n||activewin.com^*/blaze_static2.gif\n||actressarchives.com/takeover/\n||ad.cooks.com^\n||ad.digitimes.com.tw^\n||ad.directmirror.com^\n||ad.download.cnet.com^\n||ad.evozi.com^\n||ad.fnnews.com^\n||ad.jamster.com^\n||ad.lyricswire.com^\n||ad.mangareader.net^\n||ad.newegg.com^\n||ad.pandora.tv^\n||ad.reachlocal.com^\n||ad.search.ch^\n||ad.services.distractify.com^\n||adamvstheman.com/wp-content/uploads/*/AVTM_banner.jpg\n||adcitrus.com^\n||addirector.vindicosuite.com^\n||adds.weatherology.com^\n||adelaidecityfc.com.au/oak.swf\n||adf.ly/external/*/int.php\n||adf.ly/networks/\n||adifferentleague.co.uk^*/mcad.png\n||adirondackmtnclub.com/images/banner/\n||adlink.shopsafe.co.nz^\n||admeta.vo.llnwd.net^\n||adpaths.com/_aspx/cpcinclude.aspx?\n||adpost.com/bannerserver.g.\n||adpost.com/rectserver.g.\n||adpost.com/skyserver.g.\n||adpost.com^*.g.html\n||ads-*.hulu.com^\n||ads-rolandgarros.com^\n||ads.pof.com^\n||ads.zynga.com^\n||adsatt.abcnews.starwave.com^\n||adsatt.espn.starwave.com^\n||adshare.freedocast.com^\n||adsor.openrunner.com^\n||adss.yahoo.com^\n||adstil.indiatimes.com^\n||adtest.theonion.com^\n||adv.li/ads/\n||advanced-television.com^*/banners/\n||advertise.twitpic.com^\n||adverts.itv.com^$image\n||advfn.com/tf_\n||advpc.net/site_img/banner/\n||adx.kat.ph^\n||adz.lk^*_ad.\n||aetv.com/includes/dart/\n||aff.lmgtfy.com^\n||affiliatesynergy.com^*/banner_\n||afloat.ie^*/banners/\n||afmradio.co.za/images/slider/\n||africanbusinessmagazine.com/images/banners/\n||africaonline.com.na^*/banners/\n||afternoondc.in/banners/\n||agriculturalreviewonline.com/images/banners/\n||ahashare.com/cpxt_\n||ahk-usa.com/uploads/tx_bannermanagement/\n||ajnad.aljazeera.net^\n||akamai.net/*/Prerolls/Campaigns/\n||akamaihd.net/zbar/takeovers/\n||akamaihd.net^*/ads/$domain=player.theplatform.com\n||akiba-online.com/forum/images/bs.gif\n||akiba.ookami-cdn.net/images/subby.jpg$domain=akiba-online.com\n||akinator.com/publicite_\n||akipress.com/_ban/\n||akipress.org/ban/\n||akipress.org/bimages/\n||alachuacountytoday.com/images/banners/\n||alarabiya.net/dms/takeover/\n||alaska-native-news.com/files/banners/\n||alatest.co.uk/banner/\n||alatest.com/banner/\n||all4divx.com/js/jscode2.js\n||allghananews.com/images/banners/\n||allhiphop.com/site_resources/ui-images/*-conduit-banner.gif\n||allkpop.com^*/takeover/\n||allmovieportal.com/dynbanner.\n||allmyvideos.net/js/ad_\n||allmyvideos.net/player/ova-jw.swf\n||allmyvideos.net^*/pu.js\n||allthelyrics.com^*/popup.js\n||allthingsd.com^*/sponsor-\n||allthingsd.com^*_ad_\n||altdaily.com/images/banners/\n||alternet.org/givememygfp.\n||amazingmoneymagnet.com//upload/banners/\n||amazon.com/aan/$subdocument\n||amazonaws.com/cdn.megacpm.com/\n||amazonaws.com/cdn/campaign/$domain=caclubindia.com\n||amazonaws.com/cdn/ipfc/$object,domain=caclubindia.com\n||amazonaws.com/files.bannersnack.com/\n||amazonaws.com/videos/$domain=technewstoday.com\n||amazonaws.com^*-ad.jpg$domain=ewn.co.za\n||amazonaws.com^*-Banner.jpg$domain=ewn.co.za\n||amazonaws.com^*/site-takeover/$domain=songza.com\n||amazonaws.com^*MPU%20Banner.jpg$domain=ewn.co.za\n||ambriefonline.com^*/banners/\n||amd.com/publishingimages/*/master_\n||americanangler.com/images/banners/\n||americanfreepress.net/assets/images/Banner_\n||amnesty.ca/images/banners/\n||amz.steamprices.com^\n||analytics.mmosite.com^\n||anamera.com/DesktopModules/BannerDisplay/\n||anchorfree.com/delivery/\n||anchorfree.net/?tm=$subdocument\n||anchorfree.net^*/?tm=$subdocument\n||andr.net/banners/\n||androidcommunity.com/external_marketing/$subdocument\n||androidpolice.com/wp-content/*/images/das/\n||anhits.com/files/banners/\n||anilinkz.com/img/leftsponsors.\n||anilinkz.com/img/rightsponsors\n||anilinkz.tv/kwarta-\n||animationxpress.com/anex/crosspromotions/\n||animationxpress.com/anex/solutions/\n||anime-source.com/banzai/banner.$subdocument\n||anime1.com/service/joyfun/\n||anime44.com/anime44box.jpg\n||anime44.com/images/videobb2.png\n||animea.net/do/\n||animeflavor.com/animeflavor-gao-gamebox.swf\n||animeflv.net/cpm.html\n||animefushigi.com/boxes/\n||animehaven.org/wp-content/banners/\n||animenewsnetwork.com/stylesheets/*skin$image\n||animenewsnetwork.com^*.aframe?\n||animeshippuuden.com/adcpm.js\n||animeshippuuden.com/square.php\n||aniscartujo.com^*/layer.js\n||annistonstar.com/leaderboard_banner\n||anonib.com/zimages/\n||anonytext.tk/img/paste-eb.png\n||anonytext.tk/img/paste-sponsor.png\n||anonytext.tk/re.php\n||answerology.com/index.aspx?*=ads.ascx\n||antag.co.uk/js/ov.js.php?\n||anti-leech.com/al.php?\n||anti-scam.org/abanners/\n||anvisoft.com^*/anviad.jpg\n||aol.co.uk/images/skybet-logo.gif\n||aolcdn.com/os/movies/css-js/sprite/*-wallpaper?$domain=moviefone.com\n||apa.az^*/rebans/\n||apanews.net/pub/\n||apcointl.org/images/corporate_partners/\n||api.toptenreviews.com^*/request.php\n||appleinsider.com/macmall\n||appleinsider.com^*/ai_front_page_google_premium.js\n||appleserialnumberinfo.com/desktop/sdas/$subdocument\n||applifier.com/bar.htm?\n||appspot.com/adop/\n||appwork.org/a_d_s/\n||aps.dz^*/banners/\n||ar15.com/biz/\n||ar15.com/images/highlight/\n||ar15.com^*_60x180.jpg\n||aravot.am/banner/\n||archeagedatabase.net/images/okaygoods.gif\n||arenabg.com^*/banners/\n||arenadb.net^*/banners/\n||armorgames.com/assets/*_skin_\n||armorgames.com^*/banners/\n||armorgames.com^*/site-skins/\n||armorgames.com^*/siteskin.css\n||armslist.com/images/sponsors/\n||armyrecognition.com^*/customer/\n||arnnet.com.au/files/skins/\n||aroundosceola.com/banner-\n||arsenal-mania.com/images/backsplash_\n||arstechnica.net/public/shared/scripts/da-\n||arstechnica.net^*/sponsor-\n||artima.com/zcr/\n||as.inbox.com^\n||asianewsnet.net/banner/\n||ask.com/display.html?\n||ask.com/fifdart?\n||askandyaboutclothes.com/images/$~third-party\n||askbobrankin.com/awpopup*.js\n||astalavista.com/avtng/\n||astalavista.com^*/sponsor-\n||astronomy.com/sitefiles/overlays/overlaygenerator.aspx?\n||astronomynow.com/wp-content/promos/\n||atdhe.ws/pp.js\n||atimes.com/banner/\n||atimes.com^*/ahm728x90.swf\n||attitude.co.uk/images/Music_Ticket_Button_\n||atđhe.net/pu/\n||augusta.com/sites/*/yca_plugin/yahoo.js$domain=augusta.com\n||auto123.com/sasserve.spy\n||autoline-eu.co.uk/atlads/\n||autoline-eu.co.za/atlads/\n||autoline-eu.ie/atlads/\n||autoline.info/atlads/\n||autosport.com/skinning/\n||autoworld.co.za^*/ads/\n||avaxnews.net/yb_$subdocument,domain=avaxhm.com\n||aveherald.com/images/banners/\n||avforums.com/images/skins/\n||aviationweek.com^*/leader_board.htm\n||avitop.com/image/amazon/\n||avitop.com/image/mig-anim.gif\n||avitop.com/image/mig.gif\n||avn.com/delivery/\n||avpa.dzone.com^\n||avsforum.com/alliance/\n||avstop.com/avbanner/\n||awkwardfamilyphotos.com*/?ad=\n||azcentral.com/incs/dfp-refresh.php.inc?\n||azcs.co.uk^*/backgrounds/rotate.php\n||azlyrics.com^*_az.js\n||b.localpages.com^\n||b.thefile.me^\n||b92.net/images/banners/\n||ba.ccm2.net^\n||ba.kioskea.net^\n||babelzilla.org/forum/images/powerfox-top.png\n||babelzilla.org/images/banners/babelzilla-powerfox.png\n||babycenter.com/viewadvertorialpoll.htm\n||backin.net/s/promo/\n||backpagelead.com.au/images/banners/\n||badongo.com^*_banner_\n||bahamaslocal.com/img/banners/\n||baixartv.com/img/bonsdescontos.\n||bakercountypress.com/images/banners/\n||ballerarcade.com/ispark/\n||ballislife.com^*/ova-player.swf$object-subrequest\n||ballz.co.za/system-files/banners/\n||ballz.co.za^*/CLIENTS/\n||banner.automotiveworld.com^\n||banner.itweb.co.za^\n||banners.beevpn.com^\n||banners.beted.com^\n||banners.clubworldgroup.com^\n||banners.expressindia.com^\n||banners.friday-ad.co.uk/hpbanneruploads/$image\n||banners.i-comers.com^\n||banners.itweb.co.za^\n||banners.playocio.com^\n||barnesandnoble.com/promo/\n||baseballamerica.com/plugs/\n||bashandslash.com/images/banners/\n||basinsradio.com/images/banners/\n||bassmaster.com^*/premier_sponsor_logo/\n||bay.com.mt/images/banners/\n||bay.com.mt/modules/mod_novarp/\n||bayfiles.net/img/download-button-orange.png\n||baymirror.com/static/img/bar.gif\n||baymirror.com/static/js/4728ba74bc.js\n||bazaraki.com/bannerImage.php?\n||bbc.co.uk^*/bbccom.js?\n||bbc.com^*/logoDupontSmall.png\n||bcdb.com^*/banners.pl?\n||bdnews24.com^*/Ads/\n||beap.gemini.yahoo.com^\n||beforeitsnews.com/static/data/story-stripmall-new.html\n||beforeitsnews.com/static/iframe/\n||beingpc.com^*/banners/\n||belfasttelegraph.co.uk/editorial/web/survey/recruit-div-img.js\n||bellanaija.com^*/wp-banners/\n||bellevision.com/belle/adds/\n||benchmarkreviews.com^*/banners/\n||bernama.com/banner/\n||bestblackhatforum.com/images/my_compas/\n||bestlistonline.info/link/ad.js\n||bestvpn.com/wp-content/uploads/*/mosttrustedname_260x300_\n||bets4free.co.uk/content/5481b452d9ce40.09507031.jpg\n||bettingsports.com/top_bonuses\n||bettingsports.com/where_to_bet\n||bettyconfidential.com/media/fmads/\n||beyondd.co.nz/ezibuy/$third-party,domain=stuff.co.nz\n||bigeddieradio.com/uploads/sponsors/\n||bigpoint.com/xml/recommender.swf?\n||bigsports.tv/live/ado.php\n||bikeforums.net/images/sponsors/\n||bikeradar.com/media/img/commercial/\n||bing.com/fblogout?$subdocument,domain=facebook.com\n||binsearch.info/iframe.php\n||bips.channel4.com^*/backgrounds/$image,domain=channel4.com\n||bit-tech.net/images/backgrounds/skin/\n||bitcoinist.net/wp-content/*/630x80-bitcoinist.gif\n||bitcoinist.net/wp-content/uploads/*_250x250_\n||bitcoinreviewer.com/wp-content/uploads/*/banner-luckybit.jpg\n||bitminter.com/images/info/spondoolies\n||bitreactor.to/sponsor/\n||bitreactor.to/static/subpage$subdocument\n||bittorrent.am/banners/\n||bizarremag.com/images/skin_\n||bizhub.vn^*/agoda-for-bizhub.jpg\n||bkmag.com/binary/*/1380x800_\n||blackberryforums.net/banners/\n||blackchronicle.com/images/Banners-\n||blackhatlibrary.net/hacktalk.png\n||blacklistednews.com/images/*banner\n||blackpressusa.com^*/Ford.jpg\n||blackpressusa.com^*250by300.\n||blackpressusa.com^*300by250.\n||blackpressusa.com^*300x250.\n||blasternation.com/images/hearthstone.jpg\n||blbclassic.org/assets/images/*banners/\n||bleacherreport.net/images/skins/\n||bleacherreport.net^*_redesign_skin_\n||blinkx.com/adhocnetwork/\n||blip.fm/ad/\n||blitzdownloads.com/promo/\n||blog.co.uk/script/blogs/afc.js\n||blogevaluation.com/templates/userfiles/banners/\n||blogorama.com/images/banners/\n||blogsdna.com/wp-content/themes/blogsdna2011/images/advertisments.png\n||blogsmithmedia.com^*_skin.\n||blogsmithmedia.com^*_skin_\n||blogsmithmedia.com^*wallpaper$image,domain=joystiq.com\n||blogspider.net/images/promo/\n||bloomberg.com^*/banner.js\n||bn0.com/4v4.js\n||bnrs.ilm.ee^\n||bolandrugby.com/images/sponsors.\n||bom.gov.au/includes/marketing2.php?\n||bookingbuddy.com/js/bookingbuddy.strings.php?$domain=smartertravel.com\n||botswanaguardian.co.bw/images/banners/\n||boulderjewishnews.org^*/JFSatHome-3.gif\n||boxlotto.com/banrotate.\n||bp.blogspot.com^*%2bad*.jpg$domain=lindaikeji.blogspot.com\n||bp.blogspot.com^*/poster*.jpg$domain=lindaikeji.blogspot.com\n||bp.blogspot.com^*banner*.jpg$domain=lindaikeji.blogspot.com\n||brandchannel.com/images/educationconference/\n||break.com^*/marketguide-\n||brecorder.com^*/banners/\n||breitlingsource.com/images/govberg*.jpg\n||breitlingsource.com/images/pflogo.jpg\n||brenz.net/img/bannerrss.gif\n||brightcove.com/js/BrightcoveExperiences.js$domain=java-forums.org\n||britishcolumbia.com/sys/ban.asp\n||broadbandchoices.co.uk/aff.js\n||broadbandforum.co/stock/\n||broadbandgenie.co.uk/images/takeover/\n||broadbandgenie.co.uk/img/talktalk/$image\n||broadcastify.com/sm/\n||broadcastingworld.net/*-promo.jpg\n||broadcastingworld.net/marquee-\n||brobible.com/files/uploads/images/takeovers/\n||brothersoft.com/gg/center_gg.js\n||brothersoft.com/gg/g.js\n||brothersoft.com/gg/kontera_com.js\n||brothersoft.com/gg/soft_down.js\n||brothersoft.com/gg/top.js\n||brothersoft.com/softsale/\n||brothersoft.com^*/float.js\n||brothersoft.com^*/homepage_ppd.html\n||brothersoft.com^*/softsale/\n||brownfieldonline.com^*/banners/\n||browsershots.org/static/images/creative/\n||brudirect.com/images/banners/\n||bsmphilly.com/files/banners/\n||bsvc.ebuddy.com/bannerservice/tabsaww\n||bt-chat.com/images/affiliates/\n||bt.am/banners/\n||btdigg.org/images/btguard\n||btkitty.com/static/images/880X60.gif\n||btkitty.org/static/images/880X60.gif\n||btmon.com/da/$subdocument\n||bundesliga.com^*/_partner/\n||busiweek.com^*/banners/\n||buy-n-shoot.com/images/banners/banner-\n||buy.com/*/textlinks.aspx\n||buyselltrade.ca/banners/\n||buzzintown.com/show_bnr.php?\n||buzznet.com/topscript.js.php?\n||bvibeacon.com^*/banners/\n||bwp.theinsider.com.com^\n||bypassoxy.com/vectrotunnel-banner.gif\n||c-sharpcorner.com^*/banners/\n||c-ville.com/image/pool/\n||c21media.net/wp-content/plugins/sam-images/\n||c9tk.com/images/banner/\n||cadplace.co.uk/banner/\n||cadvv.heraldm.com^\n||cadvv.koreaherald.com^\n||cafemomstatic.com/images/background/$image\n||cafimg.com/images/other/\n||cafonline.com^*/sponsors/\n||caladvocate.com/images/banner-\n||caledonianrecord.com/iFrame_\n||caledonianrecord.com/SiteImages/HomePageTiles/\n||caledonianrecord.com/SiteImages/Tile/\n||calgaryherald.com/images/sponsor/\n||calgaryherald.com/images/storysponsor/\n||canalboat.co.uk^*/bannerImage.\n||canalboat.co.uk^*/Banners/\n||cananewsonline.com/files/banners/\n||cancomuk.com/campaigns/\n||candystand.com/game-track.do?\n||canindia.com^*_banner.png\n||capitalethiopia.com/images/banners/\n||capitalfm.co.ke^*/830x460-iv.jpg\n||capitolfax.com/wp-content/*ad.\n||capitolfax.com/wp-content/*Ad_\n||captchaad.com/captchaad.js$domain=gca.sh\n||card-sharing.net/cccamcorner.gif\n||card-sharing.net/topsharingserver.jpg\n||card-sharing.net/umbrella.png\n||cardomain.com/empty_pg.htm\n||cardschat.com/pkimg/banners/\n||cardsharing.info/wp-content/uploads/*/ALLS.jpg\n||cargonewsasia.com/promotion/\n||cars.com/go/includes/targeting/\n||cars.com/js/cars/catretargeting.js\n||carsales.com.au^*/backgrounds/\n||carsguide.com.au/images/uploads/*_bg.\n||carsguide.com.au^*/marketing/\n||carsuk.net/directory/panel-promo-\n||cash9.org/assets/img/banner2.gif\n||castanet.net/clients/\n||casualgaming.biz/banners/\n||catalystmagazine.net/images/banners/\n||catholicculture.org/images/banners/\n||cbc.ca/deals/\n||cbc.ca/video/bigbox.html\n||cbfsms.com^*-banner.gif\n||cbn.co.za/images/banners/\n||cbsinteractive.co.uk/cbsi/ads/\n||cbslocal.com/deals/widget/\n||cbslocal.com/rotatable?\n||ccfm.org.za^*/sads/\n||cd1025.com/www/assets/a/\n||cd1025.com/www/img/btn-\n||cdcovers.cc/images/external/toolbar\n||cdmagurus.com/forum/cyberflashing.swf\n||cdmagurus.com/img/*.gif\n||cdmagurus.com/img/kcpf2.swf\n||cdmediaworld.com*/!\n||cdn-surfline.com/home/billabong-xxl.png\n||cdn.turner.com^*/groupon/\n||ceforum.co.uk/images/misc/PartnerLinks\n||celebjihad.com/widget/widget.js$domain=popbytes.com\n||centos.org/donors/\n||centralfm.co.uk/images/banners/\n||ceoexpress.com/inc/ads\n||ceylontoday.lk^*/banner/\n||cghub.com/files/CampaignCode/\n||ch131.so/images/2etio.gif\n||chaklyrics.com/add$subdocument\n||channel4.com/assets/programmes/images/originals/$image\n||channel4.com/bips/*/brand/$image\n||channel4fm.com/images/background/\n||channel4fm.com/promotion/\n||channel5.com/assets/takeovers/\n||channelonline.tv/channelonline_advantage/\n||chapala.com/wwwboard/webboardtop.htm\n||checkpagerank.net/banners/\n||checkwebsiteprice.com/images/bitcoin.jpg\n||chelsey.co.nz/uploads/Takeovers/\n||chicagodefender.com/images/banners/\n||chinanews.com/gg/\n||chronicle.lu/images/banners/\n||chronicle.lu/images/Sponsor_\n||churchnewssite.com^*-banner1.\n||churchnewssite.com^*/banner-\n||churchnewssite.com^*/bannercard-\n||ciao.co.uk/load_file.php?\n||ciao.com^*/price_link/\n||cinemablend.com/templates/tpl/reskin/$image\n||cineplex.com/skins/\n||ciol.com/zedotags/\n||citeulike.org/static/campaigns/\n||citizen-usa.com/images/banners/\n||cityam.com^*/pageskin/\n||citybeat.co.uk^*/ads/\n||citywire.co.uk/wealth-manager/marketingcampaign?\n||citywirecontent.co.uk^*/cw.oas.dx.js\n||clarksvilleonline.com/cols/\n||classic-tv.com/burst$subdocument\n||classic-tv.com/pubaccess.html\n||classic97.net^*/banner/\n||classical897.org/common/sponsors/\n||classicfeel.co.za^*/banners/\n||classicsdujour.com/artistbanners/\n||clgaming.net/interface/img/sponsor/\n||click.livedoor.com^\n||clicks.superpages.com^\n||cloudfront.net/*/takeover/$domain=offers.com\n||cloudfront.net/ccmtblv2.png$domain=aim.org\n||cloudfront.net/hot/ars.dart/$domain=arstechnica.com\n||clubhyper.com/images/hannantsbanner_\n||clubplanet.com^*/wallpaper/\n||cmodmedia*.live.streamtheworld.com/media/cm-audio/cm:*.mp3$domain=rdio.com\n||cmpnet.com/ads/\n||cms.myspacecdn.com^*/splash_assets/\n||cnet.com/imp?\n||cnettv.com.edgesuite.net^*/ads/\n||cnetwidget.creativemark.co.uk^\n||cnn.com/ad-\n||cnn.com/cnn_adspaces/\n||cnn.com^*/ad_policy.xml$object-subrequest,domain=cnn.com\n||cnn.com^*/banner.html?&csiid=\n||cnn.net^*/lawyers.com/\n||cntv.cn/Library/js/js_ad_gb.js\n||cnx-software.com/pic/gateworks/\n||cnx-software.com/pic/technexion/\n||coastfm.ae/images/background/\n||coastfm.ae/promotion/\n||coastweek.com/banner_\n||coastweek.com/graffix/\n||cocomment.com/banner?\n||codeasily.com^*/codeasily.js\n||codecguide.com/beforedl2.gif\n||codecguide.com/driverscan2.gif\n||codecguide.com/driverscantop1.gif\n||coderanch.com/shingles/\n||coinad.com/op.php?\n||coinurl.com/bootstrap/js/bootstrapx-clickover.js\n||coinurl.com/bottom.php\n||coinurl.com/get.php?\n||coinurl.com/nbottom.php?\n||collarme.com/anv/\n||collarme.com/zone_alt.asp\n||collector.viki.io^\n||com-a.in/images/banners/\n||com.com/cnwk.1d/aud/\n||comicbookresources.com/assets/images/skins/\n||comicgenesis.com/tcontent.php?out=\n||comparestoreprices.co.uk/images/promotions/\n||compassnewspaper.com/images/banners/\n||complaintsboard.com/img/202x202.gif\n||complaintsboard.com/img/banner-\n||complexmedianetwork.com^*/takeovers/\n||complexmedianetwork.com^*/toolbarlogo.png\n||computerandvideogames.com^*/promos/\n||computerhelp.com/temp/banners/\n||computerworld.com^*/jobroll/\n||con-telegraph.ie/images/banners/\n||concrete.tv/images/banners/\n||connectionstrings.com/csas/public/a.ashx?\n||conscioustalk.net/images/sponsors/\n||conservativetribune.com/cdn-cgi/pe/bag2?r[]=*revcontent.com\n||console-spot.com^*.swf\n||constructionreviewonline.com^*730x90\n||constructionreviewonline.com^*banner\n||consumerreports.org^*/sx.js\n||convertmyimage.com/images/banner-square.png\n||conwaydailysun.com/images/banners/\n||conwaydailysun.com/images/Tiles_Skyscrapers/\n||coolfm.us/lagos969/images/banners/\n||coolmath-games.com/images/160-notice.gif\n||coolmath.net/*-medrect.html\n||coolsport.tv/adtadd.\n||coolsport.tv/lshadd.\n||copblock.org/wp-content/uploads/*/covert-handcuff-key-AD-\n||cops.com^*/copbanner_\n||coryarcangel.com/images/banners/\n||cosplay.com/1lensvillage.gif\n||countrychannel.tv/telvos_banners/\n||cphpost.dk^*/banners/\n||cpub.co.uk/a?\n||crackdb.cd/cd.swf\n||crackdb.com/img/vpn.png\n||cramdodge.com/mg-\n||craveonline.com/gnads/\n||crazy-torrent.com/web/banner/0xxx0.net.jpg\n||crazy-torrent.com/web/banner/online.jpg\n||crazymotion.net/video_*.php?key=\n||creatives.livejasmin.com^\n||creattor.net/flashxmlbanners/\n||crimeaware.co.za/files-upload/banner/\n||crunchyroll.*/vast?\n||crushorflush.com/html/promoframe.html\n||cruzine.com^*/banners/\n||cryptocoinsnews.com/wp-content/uploads/*/ccn.png\n||cryptocoinsnews.com/wp-content/uploads/*/cloudbet_\n||cryptocoinsnews.com/wp-content/uploads/*/xbt-social.png\n||cryptocoinsnews.com/wp-content/uploads/*/xbt.jpg\n||cryptocoinsnews.com/wp-content/uploads/*takeover\n||crystalmedianetworks.com^*-180x150.jpg\n||cship.org/w/skins/monobook/uns.gif\n||ctmirror.org/randomsupporter/\n||ctv.ca/ctvresources/js/ctvad.js\n||ctv.ca/Sites/Ctv/assets/js/ctvDfpAd.js\n||cur.lv/bootstrap/js/bootstrapx-clickover.js\n||cur.lv/nbottom.php?\n||cyanogenmod.com/static/tdr_skyscraper.png\n||cybergamer.com/skins/\n||d-addicts.com^*/banner/\n||d-h.st/assets/img/download1.png\n||d.annarbor.com^\n||d.businessinsider.com^\n||d.gossipcenter.com^\n||d.imwx.com/js/wx-a21-plugthis-\n||d.thelocal.com^\n||d5e.info/1.gif\n||d5e.info/2.png\n||d6vwe9xdz9i45.cloudfront.net/psa.js$domain=sporcle.com\n||da.feedsportal.com^$~subdocument\n||dabs.com/images/page-backgrounds/\n||dads.new.digg.com^\n||daily-mail.co.zm/images/banners/\n||daily-mail.co.zm/images/stories/sbt.gif\n||dailybitcoins.org/banners/\n||dailyblogtips.com/wp-content/uploads/*.gif\n||dailycommercial.com/inc.php?\n||dailydeal.news-record.com/widgets/\n||dailydeals.amarillo.com^\n||dailydeals.augustachronicle.com^\n||dailydeals.brainerddispatch.com^\n||dailydeals.lubbockonline.com^\n||dailydeals.onlineathens.com^\n||dailydeals.savannahnow.com^\n||dailydeals.sfgate.com/widget/\n||dailyexpress.com.my/banners/\n||dailyexpress.com.my/image/banner/\n||dailyfreegames.com/js/partners.html\n||dailyherald.com^*/contextual.js\n||dailyhome.com/leaderboard_banner\n||dailymail.co.uk/i/pix/*_107x58.jpg\n||dailymail.co.uk/i/pix/*_308x164.jpg\n||dailymail.co.uk/i/pix/*_308x262.jpg\n||dailymail.co.uk/i/pix/ebay/\n||dailymail.co.uk/modules/commercial/\n||dailymail.co.uk^*/promoboxes/\n||dailymirror.lk/media/images/Nawaloka-\n||dailymotion.com/images/ie.png\n||dailymotion.com/skin/data/default/partner/$~stylesheet\n||dailymotion.com^*masscast/\n||dailynews.co.tz/images/banners/\n||dailynews.co.zw^*-takeover.\n||dailynews.gov.bw^*/banner_\n||dailynews.lk^*/webadz/\n||dailypioneer.com/images/banners/\n||dailypuppy.com/images/livestrong/ls_diet_120x90_1.gif\n||dailysabah.com/banner/\n||dailytimes.com.pk/banners/\n||dailytrust.info/images/banners/\n||dailytrust.info/images/dangote.swf\n||dailywritingtips.com^*/publisher2.gif\n||damnlol.com/a/leaderboard.php\n||damnlol.com/damnlol.com.*.js\n||datpiff.com/skins/misc/\n||davesite.com^*/aff/\n||dayport.com/ads/\n||dbstalk.com/sponsors/\n||dcad.watersoul.com^\n||dcourier.com/SiteImages/Banner/\n||ddccdn.com/js/google_\n||ddl2.com/header.php?\n||dealmedia.utsandiego.com^\n||deals.cultofmac.com^$subdocument\n||deals.iphonehacks.com^$subdocument\n||deals.ledgertranscript.com^\n||deborah-bickel.de/banners/\n||decadeforum.com/images/misc/download2.png\n||deccanchronicle.com^*-banner-\n||deccanchronicle.com^*-searchquad-300100.swf\n||decryptedtech.com/images/banners/\n||defenceweb.co.za/images/sponsorlogos/\n||defenceweb.co.za/logos/\n||defensereview.com^*_banner_\n||delvenetworks.com^*/acudeo.swf$object-subrequest,~third-party\n||demerarawaves.com/images/banners/\n||demonoid.unblockt.com/cached/$subdocument\n||depic.me/bann/\n||depositphotos.com^$subdocument,third-party\n||deseretnews.com/img/sponsors/\n||deshvidesh.com/banner/\n||desiretoinspire.net/storage/layout/modmaxbanner.gif\n||desiretoinspire.net/storage/layout/royalcountessad.gif\n||desiretoinspire.net^*/mgbanner.gif\n||desiretoinspire.net^*125x125\n||desixpress.co.uk/image/banners/\n||detnews.com^*/sponsor/\n||detroitindependent.net/images/ad_\n||develop-online.net/static/banners/\n||devicemag.com^$subdocument,~third-party\n||devour.com/*skin\n||devshed.com/images/backgrounds/$image\n||devtools2.networkcities.net/wp-content/uploads/output_trLIFi.gif$domain=smallseotools.com\n||devx.com/devx/3174.gif\n||dezeen.com/wp-content/themes/dezeen-aa-hpto-mini-sept-2014/\n||diamondworld.net/admin/getresource.aspx?\n||dictionary.cambridge.org/info/frame.html?zone=\n||dictionary.com^*/serp_to/\n||digdug.divxnetworks.com^\n||digitaljournal.com/promo/\n||digitalreality.co.nz^*/360_hacks_banner.gif\n||digitizor.com/wp-content/digimages/xsoftspyse.png\n||digzip.com^*baner.swf\n||diplodocs.com/shopping/sol.js\n||dippic.com/images/banner\n||dishusa.net/templates/flero/images/book_sprava.gif\n||dispatch.com^*/dpcpopunder.js\n||display.superbay.net^\n||distrogeeks.com/images/sponsors/\n||distrowatch.com/images/kokoku/\n||distrowatch.com^*-*.gif\n||distrowatch.com^*/3cx.png\n||distrowatch.com^*/advanced-admin.\n||dividendchannel.com/toprankedsm.gif\n||divxme.com/images/play.png\n||divxstage.eu/images/download.png\n||diytrade.com/diyep/dir?page=common/ppadv&\n||djluv.in/android.gif\n||djmag.co.uk/sites/default/files/takeover/\n||djmag.com/sites/default/files/takeover/\n||djtunes.com^*/adbg/\n||dl-protect.com/pop.js\n||dl4all.com/data4.files/dpopupwindow.js\n||dl4all.com/img/download.jpg\n||dl4all.com^*/hotfile.gif\n||dmros.ysm.yahoo.com^\n||dnsstuff.com/dnsmedia/images/*_banner.jpg\n||dnsstuff.com/dnsmedia/images/ft.banner.\n||doge-dice.com/images/faucet.jpg\n||doge-dice.com/images/outpost.png\n||dogechain.info/content/img/a\n||domainmarket.com/mm/\n||domaintools.com/eurodns_\n||domaintools.com/marketing/\n||domaintools.com/partners/\n||dominicantoday.com/stor/banners/\n||dontblockme.modaco.com^\n||dota-trade.com/img/branding_\n||doubleclick.net/gampad/ads?*^vpos^$domain=cbs.com\n||doubleviking.com/ss.html\n||downforeveryoneorjustme.com/images/dotbiz_banner.jpg\n||downloadbox.to/Leadertop.html\n||downloadian.com/assets/banner.jpg\n||dprogram.net^*/rightsprites.png\n||dpstatic.com/banner.png?\n||dpstatic.com/s/ad.js\n||dramabay.com/y/$subdocument\n||dreamscene.org^*_Banner.\n||drhinternet.net/mwimgsent/\n||drivearchive.co.uk/amazon/\n||drivearchive.co.uk/images/amazon.\n||driverdb.com/campaigns/banners/\n||droidgamers.com/images/banners/\n||dsogaming.com/interstitial/\n||dubcnm.com/Adon/\n||duckduckgo.com/i.js?o=a&\n||duckduckgo.com/m.js?*&o=a\n||duckduckgo.com/y.js\n||duckload.com/js/abp.php?\n||dump8.com/tiz/\n||dump8.com/wget.php\n||dump8.com/wget_2leep_bottom.php\n||durbannews.co.za^*_new728x60.gif\n||dustcoin.com^*/image/ad-\n||dvdvideosoft.com^*/banners/\n||dwarfgames.com/pub/728_top.\n||dyncdn.celebuzz.com/assets/\n||e90post.com/forums/images/banners/\n||earthlink.net^*/promos/\n||earthmoversmagazine.co.uk/nimg/\n||eastonline.eu/images/banners/\n||eastonline.eu/images/eng_banner_\n||easybytez.com/pop3.js\n||eatsleepsport.com/images/manorgaming1.jpg\n||ebayrtm.com/rtm?RtmCmd*&enc=\n||ebayrtm.com/rtm?RtmIt\n||ebaystatic.com/aw/pics/signin/*_signInSkin_\n||ebaystatic.com/aw/signin/*_wallpaper_$image\n||ebizblitz.co.za/upload/ad/\n||ebizmbainc.netdna-cdn.com/images/tab_sponsors.gif\n||ebookshare.net/pages/lt.html\n||ebookshare.net^*/streamdirect160x600_\n||ebuddy.com/textlink.php?\n||ebuddy.com/web_banners/\n||ebuddy.com/web_banners_\n||eclipse.org/membership/promo/images/\n||ecommerce-journal.com/specdata.php?\n||economist.com.na^*/banners/\n||economist.com^*/timekeeper-by-rolex-medium.png\n||ecostream.tv/assets/js/pu.min.js\n||ecostream.tv/js/pu.js\n||ed2k.2x4u.de/mfc/\n||edgedatg.com^*/AdCountdownPlugin.swf$object-subrequest,domain=abc.go.com\n||edgedatg.com^*/FreeWheelDATGPlugin.swf$object-subrequest,domain=abc.go.com\n||educationbusinessuk.net/images/stage.gif\n||egamer.co.za^*-background-\n||ehow.co.uk/frames/directas_\n||ehow.com/images/brands/\n||ehow.com/marketing/\n||ehow.com/media/ad.html^\n||ejb.com/300_250\n||ejpress.org/images/banners/\n||ejpress.org/img/banners/\n||ekantipur.com/uploads/banner/\n||electricenergyonline.com^*/bannieres/\n||electronicsfeed.com/bximg/\n||elevenmyanmar.com/images/banners/\n||elgg.org/images/hostupon_banner.gif\n||elivetv.in/pop/\n||elocallink.tv^*/showgif.php?\n||emergencymedicalparamedic.com/wp-content/uploads/2011/12/anatomy.gif\n||emoneyspace.com/b.php\n||empirestatenews.net/Banners/\n||emsservice.de.s3.amazonaws.com/videos/$domain=zattoo.com\n||emsservice.de/videos/$domain=zattoo.com\n||emule-top50.com/extras/$subdocument\n||emuleday.com/cpxt_$subdocument\n||encyclopediadramatica.es/edf/$domain=~forum.encyclopediadramatica.es\n||encyclopediadramatica.es/lanhell.js\n||encyclopediadramatica.es/spon/\n||encyclopediadramatica.se/edf/$domain=~forum.encyclopediadramatica.se\n||energytribune.com/res/banner/\n||england.fm/i/ducksunited120x60english.gif\n||englishtips.org/b/\n||enigmagroup.org/clients/privatetunnels.swf\n||environmental-finance.com^*banner\n||environmental-finance.com^*rotate.gif\n||epicshare.net/p1.js\n||epictv.com/sites/default/files/290x400_\n||episodic.com^*/logos/player-\n||eprop.co.za/images/banners/\n||eq2flames.com/images/styles/eq2/images/banner\n||espn.co.uk/espnuk/williamhill/\n||espn.co.uk/espnuk/williamhill_\n||espn.co.uk^*/viagogo_sports.html\n||espn.go.com/ads/\n||espn.vad.go.com^$domain=youtube.com\n||espn1320.net/get_preroll.php?\n||essayinfo.com/img/125x125_\n||essayscam.org^*/ads.js\n||esus.com/images/regiochat_logo.png\n||eteknix.com/wp-content/uploads/*skin\n||eteknix.com/wp-content/uploads/*Takeover\n||etidbits.com/300x250news.php\n||euphonik.dj/img/sponsors-\n||eurochannel.com/images/banners/\n||eurocupbasketball.com^*/sponsors-\n||eurodict.com/images/banner_\n||eurogamer.net/quad.php\n||eurogamer.net^*/takeovers/\n||euroleague.net^*/sponsors-\n||euronews.com/media/farnborough/farnborough_wp.jpg\n||european-rubber-journal.com/160x600px_\n||europeonline-magazine.eu/banner/\n||europeonline-magazine.eu/nuroa/\n||euroweb.com^*/banner/\n||eva.ucas.com^\n||eve-search.com/gge.gif\n||eveningecho.ie/cdn-cgi/pe/bag?r[]=*pubads.g.doubleclick.net\n||eventful.com/tools/click/url?\n||evernote.com/prom/img/\n||everythingsysadmin.com^*_sw_banner120x600_\n||evolutionm.net/SponsorLogos/\n||evony.com/sevonyadvs2.\n||eweek.com/images/stories/marketing/\n||eweek.com/widgets/ibmtco/\n||eweek.com^*/sponsored-\n||ewrc-results.com/images/horni_ewrc_result_banner3.jpg\n||ex1.gamecopyworld.com^$subdocument\n||exashare.com/player_file.jpg\n||exceluser.com^*/pub/rotate_\n||exchangerates.org.uk/images-NEW/tor.gif\n||exchangerates.org.uk/images/150_60_\n||exchangerates.org.uk/images/200x200_\n||excite.com/gca_iframe.html\n||expatexchange.com/banner/\n||expatwomen.com/expat-women-sponsors/\n||expertreviews.co.uk/?act=widgets.\n||expertreviews.co.uk^*/skins/\n||express.co.uk^*/sponsored/\n||expressmilwaukee.com/engines/backgrounds/js/backgrounds.js\n||expreview.com/exp2/\n||extratorrent.cc/images/wintoolspro.gif\n||extratorrent.cc/scripts/bo1o.js\n||extratorrent.cc/scripts/pp_\n||extremeoverclocking.com/template_images/it120x240.gif\n||ezmoviestv.com^*/ad-for-ezmovies.png\n||faadooengineers.com/ads/\n||facenfacts.com^*/ads/\n||fakku.net/static/seele-$subdocument\n||fallout3nexus.com^*/300x600.php\n||familylawweek.co.uk/bin_1/\n||famouspornstarstube.com/images/sponsors/\n||fan.twitch.tv^\n||fancystreems.com/300x2503.php\n||fanfusion.org/as.js\n||fansshare.com/va/?$subdocument\n||fark.com/cgi/buzzfeed_link.pl\n||farmville.com/promo_bar.php\n||fastcompany.com/sites/*/interstitial.js\n||fastvideo.eu/images/down.png\n||fastvideo.eu/images/pl_box_rapid.jpg\n||fbcdn.net^*/flyers/$domain=facebook.com\n||feed-the-beast.com^*/gamevox.png\n||feedly.com/amazon.$xmlhttprequest\n||feeds.feedburner.com/*.gif\n||feedsportal.com/creative/\n||feedsportal.com/videoserve/\n||feiwei.tv^*/sandbox.html\n||fff.dailymail.co.uk^\n||ffiles.com/counters.js\n||fgfx.co.uk/banner.js?\n||fhm.com/images/casinobutton.gif\n||fhm.com/images/sportsbutton.gif\n||fhm.com^*_background.jpg\n||fhm.com^*_banner.png\n||fiberupload.org/300en.png\n||fightersonlymag.com/images/banners/\n||fijitimes.com/images/bspxchange.gif\n||file.org/fo/scripts/download_helpopt.js\n||file.org^*/images/promo/\n||file2hd.com/sweet.jpg\n||filedino.com/imagesn/downloadgif.gif\n||fileflyer.com/img/dap_banner_\n||filegaga.com/ot/fast.php?\n||fileom.com/img/downloadnow.png\n||fileom.com/img/instadownload2.png\n||fileplanet.com/fileblog/sub-no-ad.shtml\n||filerio.in^*/jquery.interstitial.\n||files.wordpress.com/*-reskin.\n||filesharingtalk.com/fst/8242/\n||fileshut.com/etc/links.php?q=\n||filespart.com/ot/fast.aspx?\n||filespazz.com/imx/template_r2_c3.jpg\n||filespazz.com^*/copyartwork_side_banner.gif\n||filipinojournal.com/images/banners/\n||filmovizija.com/Images/ludovanjeaffilate.jpg\n||filmovizija.com/Images/photo4sell.jpg\n||filmsite.org/dart-zones.js\n||fimserve.ign.com^\n||financialnewsandtalk.com/scripts/slideshow-sponsors.js\n||financialsamurai.com/wp-content/uploads/*/sliced-alternative-10000.jpg\n||findfiles.com/images/icatchallfree.png\n||findfiles.com/images/knife-dancing-1.gif\n||findfreegraphics.com/underp.js\n||findicons.com^*/125x125/\n||findit.com.mt/dynimage/boxbanner/\n||findit.com.mt/viewer/\n||findnsave.idahostatesman.com^\n||findthebest-sw.com/sponsor_event?\n||finextra.com^*/leaderboards/\n||finextra.com^*/pantiles/\n||firedrive.com/appdata/\n||firedrive.com/appresources/\n||firingsquad.com^*/sponsor_row.gif\n||firstnationsvoice.com/images/weblinks.swf\n||firstpost.com/promo/\n||firstpost.com^*/sponsered-\n||firstpost.com^*_skin_\n||firstpost.com^*_sponsored.\n||firstpost.in^*/promo/\n||firstrows.biz/js/bn.js\n||firstrows.biz/js/pu.js\n||firstrowsports.li/frame/\n||firstrowusa.eu/js/bn.js\n||firstrowusa.eu/js/pu.js\n||firsttoknow.com^*/page-criteo-\n||fishchannel.com/images/sponsors/\n||fiverr.com/javascripts/conversion.js\n||flameload.com/onvertise.\n||flashscore.com/res/image/bookmaker-list.png\n||flashtv.co/adds/\n||flashtv.co/class/adjsxxs.js\n||flashx.tv/nuevo/player/js/anya.js\n||flashx.tv^*/counterck.html\n||flashy8.com/banner/\n||flatpanelshd.com/pictures/*banner\n||fleetwatch.co.za/images/banners/\n||flicks.co.nz/images/takeovers/\n||flicks.co.nz/takeovercss/\n||flightradar24.com/_includes/sections/airportAd.php\n||flopturnriver.com*/banners/\n||flv.sales.cbs.com^$object-subrequest,domain=cbs.com|cbsnews.com|twitch.tv\n||flyordie.com/games/free/b/\n||flyordie.com/games/online/ca.html\n||fmr.co.za^*/banners/\n||fncstatic.com^*/sponsored-by.gif\n||foodingredientsfirst.com/content/banners/\n||foodingredientsfirst.com/content/flash_loaders/loadlargetile.swf\n||foodingredientsfirst.com/content/flash_loaders/loadskyscraper.swf\n||football-italia.net/imgs/moveyourmouse.gif\n||footballshirtculture.com/images/e12b.jpg\n||footballtradedirectory.com^*banner\n||fordforums.com.au/logos/\n||foreignersinuk.co.uk^*/banner/\n||forexpeacearmy.com/images/banners/\n||forumimg.ipmart.com/swf/ipmart_forum/banner\n||forumw.org/images/uploading.gif\n||forward.com/workspace/assets/newimages/amazon.png\n||foxbusiness.com/html/google_homepage_promo\n||foxsoccer2go.com/namedImage/*/backgroundSkin.jpg\n||foxsports.com.au^*/sponsor/\n||foxsports.com/component/*_wallpaper_$image\n||foxsports.com/component/xml/SBMarketingTakeOverPromos\n||foxsports.com^*-Skin-\n||foxsports.com^*-skin_\n||foxsports.com^*/Sponsors/\n||foxsports.com^*_skin_\n||foxsports540.com/images/banner1.png\n||foxsports540.com/images/banner2.png\n||foxsportsradio.com/pages/second300x250iframe.html\n||fpscheats.com/banner-img.jpg\n||fpscheats.com/fpsbanner.jpg\n||freakshare.com/yild.js\n||fredmiranda.com/buzz/canondble-600x90.jpg\n||free-times.com/image/pool/\n||free-torrents.org^*/banners/\n||free-tv-video-online.me/300s.html\n||free-tv-video-online.me/episode-buttom-\n||free-tv-video-online.me/season-side-\n||free-webhosts.com/images/a/\n||freeads.co.uk/ctx.php?\n||freeappaday.com/nimgs/bb/\n||freemediatv.com/images/inmemoryofmichael.jpg\n||freeminecraft.me/mw3.png\n||freenode.net/images/ack_privateinternetaccess-freenode.png\n||freenode.net/images/freenode_osuosl.png\n||freepornsubmits.com/ads/\n||freeroms.com/bigbox.html\n||freesoftwaremagazine.com/extras/\n||freestockcharts.com/symbolhit.aspx$subdocument\n||freetv-video.ca^*/popover-load-js.php?\n||freetypinggame.net/burst720.asp\n||freevermontradio.org/pictures/lauren_Stagnitti.jpg\n||freeworldgroup.com/banner\n||frenchradiolondon.com/data/carousel/\n||fresh-weather.com/popup1.gif\n||freshplaza.com/b/\n||freshremix.org/templates/freshremix_eng/images/300.gif\n||freshremix.ru/images/ffdownloader1.jpg\n||friday-ad.co.uk/banner.js?\n||friday-ad.co.uk/endeca/afccontainer.aspx\n||frombar.com/ads/\n||frozen-roms.in/popup.php\n||frozen-roms.me/popup.php\n||fscheetahs.co.za/images/Sponsers/\n||ftdworld.net/images/banners/\n||ftlauderdalewebcam.com/images/*webcambanner\n||ftlauderdalewebcam.com^*-WebCamBannerFall_\n||fudzilla.com^*/banners/\n||fugitive.com^*-468x60web.\n||fulhamfc.com/i/partner/\n||fullrip.net/images/download-\n||fulltv.tv/pub_\n||funpic.de/layer.php?\n||funpic.org/layer.php?\n||fuse.tv/images/sponsor/\n||futbol24.com/f24/rek/$~xmlhttprequest\n||fuzface.com/dcrtv/ad$domain=dcrtv.com\n||fırstrowsports.eu/pu/\n||g.brothersoft.com^\n||gabzfm.com/images/banners/\n||gaccmidwest.org/uploads/tx_bannermanagement/\n||gaccny.com/uploads/tx_bannermanagement/\n||gaccsouth.com/uploads/tx_bannermanagement/\n||gaccwest.com/uploads/tx_bannermanagement/\n||gadget.co.za/siteimages/banners/\n||gadgetmac.com^*/sponsors/\n||gadgetshowlive.net^*/banners/\n||gaeatimes.com/ctad/\n||galatta.com^*/bannerimages/\n||galatta.com^*/banners/\n||game1games.com/exchange/\n||gameads.digyourowngrave.com^\n||gamecopyworld.com*/!\n||gamecopyworld.com/games/i/if6.gif\n||gamecopyworld.com/games/js/abd.js\n||gamecopyworld.com^*/vg_160x120_\n||gamecopyworld.eu*/!\n||gameknot.com/amaster.pl?j=\n||gamemakerblog.com/gma/gatob.php\n||gameplanet.co.nz^*-takeover.jpg\n||gamerant.com/ads/\n||gamersbook.com^*/banners/\n||gameserpent.com/kit*.php\n||gameserpent.com/vc*.php\n||gamesforwork.com^*/dropalink_small.gif\n||gamesfreez.com/banner/\n||gamesgames.com/vda/\n||gameshark.com^*/pageskin-\n||gametrailers.com^*/webskin_\n||gamevid.com/13/ads/\n||gamingsquid.com/wp-content/banners/\n||ganool.com/pup.js\n||ganool.com/wp-content/uploads/*/Javtoys300250..gif\n||ganool.com/wp-content/uploads/*/matrix303.gif\n||gappon.com/images/hot2.gif\n||garrysmod.org/img/sad/\n||gasgoo.com/promo/\n||gateprep.com/templates/default/images/promo/\n||gawkerassets.com^*/background.jpg\n||gaydarradio.com/userportal/miva/\n||gaynz.com/mysa/banners/\n||gaynz.gen.nz/mysa/banners/\n||gbatemp.net/images/ab/\n||gbrej.com/c/\n||gcnlive.com/assets/sponsors/\n||gcnlive.com/assets/sponsorsPlayer/\n||geckoforums.net/banners/\n||geeklab.info^*/billy.png\n||gelbooru.com/lk.php$subdocument\n||gelbooru.com/poll.php$subdocument\n||gelbooru.com/protech.php$subdocument\n||generalfiles.me^*/download_sponsored.\n||gentoo.org/images/sponsors/\n||geocities.com/js_source/\n||geocities.yahoo.*/js/sq.\n||geometria.tv/banners/\n||geoshopping.nzherald.co.nz^\n||gestetnerupdates.com^*/chesed-shel-emes-600x75.gif\n||gestetnerupdates.com^*/eagle-sewer.gif\n||gestetnerupdates.com^*/Gestetner-Miles.gif\n||gestetnerupdates.com^*/perfect-auto-collision_banner.gif\n||get.thefile.me^\n||getfoxyproxy.org/images/abine/\n||getprice.com.au/searchwidget.aspx?$subdocument\n||getreading.co.uk/static/img/bg_takeover_\n||getresponse.com^$domain=wigflip.com\n||getrichslowly.org/blog/img/banner/\n||getsurrey.co.uk^*/bg_takeover_\n||gfi.com/blog/wp-content/uploads/*-BlogBanner\n||gfx.infomine.com^\n||ghacks.net/skin-\n||ghafla.co.ke/images/banners/\n||ghafla.co.ke/images/bgmax/\n||ghananewsagency.org/assets/banners/\n||giftguide.savannahnow.com/giftguide/widgets/\n||gigaom2.files.wordpress.com^*-center-top$image\n||girlguides.co.za/images/banners/\n||girlsgames.biz/games/partner*.php\n||gizmochina.com/images/blackview.jpg\n||gizmochina.com^*/100002648432985.gif\n||gizmochina.com^*/kingsing-t8-advert.jpg\n||gizmochina.com^*/landvo-l600-pro-feature.jpg\n||glam.com^*/affiliate/\n||glamourviews.com/home/zones?\n||glassdoor.com/getAdSlotContentsAjax.htm?\n||gledaisport.com/ads/\n||globalsecurity.org/_inc/frames/\n||globaltimes.cn/desktopmodules/bannerdisplay/\n||glocktalk.com/forums/images/banners/\n||go4up.com/assets/img/d0.png\n||go4up.com/assets/img/download-button.png\n||goal.com^*/betting/$~stylesheet\n||goal.com^*/branding/\n||goauto.com.au/mellor/mellor.nsf/toy$subdocument\n||gokunming.com/images/prom/\n||gold-prices.biz/gold_trading_leader.gif\n||gold-prices.biz^*_400x300.gif\n||gold1013fm.com/images/background/\n||gold1013fm.com/promotion/\n||goldenskate.com/sponsors/\n||golf365.co.za^*/site-bg-\n||golf365.com^*/site-bg-\n||gomlab.com/img/banner/\n||gomtv.net/img/ad/\n||gonzagamer.com/uci/popover.js\n||goo.gl^$subdocument,domain=backin.net|uploadlw.com\n||goodanime.net/images/crazy*.jpg\n||goodgearguide.com.au/files/skins/\n||google.com/jsapi?autoload=*%22ads%22$script,domain=youtube.com\n||googleusercontent.com^*/s220/$domain=activistpost.com\n||googleusercontent.com^*/s468/$domain=activistpost.com\n||gooster.co.uk/js/ov.js.php\n||gopride.com^*/banners/\n||gospel1190.net/rotatorimages/\n||gotupload.com^$subdocument,domain=hulkshare.com\n||gov-auctions.org^*/banner/\n||gowilkes.com/cj/\n||gowilkes.com/other/\n||gq.co.za^*/sitetakeover/\n||grammar-monster.com/scripts/$subdocument\n||grapevine.is/media/flash/*.swf\n||graphic.com.gh/images/banners/\n||greatandhra.com/images/*_ga_\n||greatdeals.co.ke/images/banners/\n||greaterkashmir.com/adds_\n||greatgirlsgames.com/100x100.php\n||greatgirlsgames.com/a/skyscraper.php\n||green.virtual-nights.com^\n||greenoptimistic.com/images/electrician2.png\n||greyorgray.com/images/Fast%20Business%20Loans%20Ad.jpg\n||greyorgray.com/images/hdtv-genie-gog.jpg\n||gruntig2008.opendrive.com^$domain=gruntig.net\n||gsprating.com/gap/image.php?\n||gtop100.com/a_images/show-a.php?\n||gtsplus.net*/panbottom.html\n||gtsplus.net*/pantop.html\n||gtweekly.com/images/banners/\n||guardian.bz/images/banners/\n||gulf-daily-news.com/180x150.htm\n||gulfnews.com^*/channelSponsorImage/\n||gumtree.com^*/dart_wrapper_\n||guns.ru^*/banner/\n||guns.ru^*/banners/\n||gurgle.com/modules/mod_m10banners/\n||guru99.com/images/adblocker/\n||gwinnettdailypost.com/1.iframe.asp?\n||h33t.to/images/button_direct.png\n||ha.ckers.org/images/fallingrock-bot.png\n||ha.ckers.org/images/nto_top.png\n||ha.ckers.org/images/sectheory-bot.png\n||hackingchinese.com/media/hcw4.png\n||hackingchinese.com/media/hellochinese.jpg\n||hackingchinese.com/media/pleco.png\n||hackingchinese.com/media/skritter5.jpg\n||hardwareheaven.com/styles/*/frontpage/backdrop.jpg\n||hardwareheaven.com/wp-content/*_skin_\n||hawaiireporter.com^*-300x250.jpg\n||hawaiireporter.com^*/463%C3%9757-Kamaaina.jpg\n||hawaiireporter.com^*/js.jpg\n||hawaiireporter.com^*/upandruningy.jpg\n||hawaiireporter.com^*/winnerscampad.jpg\n||hawaiireporter.com^*_300x400.jpg\n||hawkesbay.co.nz/images/banners/\n||hawkesbaytoday.co.nz/nz_regionals/marketplace/\n||hcdn.co/scripts/shadowbox/shadowbox.js$domain=shared.sx\n||hd-bb.org^*/dl4fbanner.gif\n||hdtvtest.co.uk/image/partner/$image\n||hdtvtest.co.uk^*/pricerunner.php\n||headlineplanet.com/home/box.html\n||headlineplanet.com/home/burstbox.html\n||healthfreedoms.org/assets/swf/320x320_\n||heatworld.com/images/*_83x76_\n||heatworld.com/upload/takeovers/\n||heatworld.com^*_300x160.jpg\n||helsinkitimes.fi^*/banners/\n||hentai2read.com/ios/swf/\n||hentaistream.com/wp-includes/images/$object\n||heraldm.com/hb/imad/\n||heraldm.com/iframe/\n||heraldm.com^*/banner/\n||heraldsun.com.au^*/images/sideskins-\n||herold.at/fs/orgimg/*.swf?baseurl=http%3a%2f%2fwww.*&amp;linktarget=_blank$object\n||herold.at/images/dealofday.swf\n||herold.at^*.swf?*&linktarget=_blank\n||herzeleid.com/files/images/banners/\n||hexupload.com^*.gif$domain=uploadbaz.com\n||hickoryrecord.com/app/deal/\n||highdefjunkies.com/images/misc/kindlejoin.jpg\n||highdefjunkies.com^*/cp.gif\n||highdefjunkies.com^*/monoprice.jpg\n||highdefjunkies.com^*/sponsor.jpg\n||hipforums.com/images/banners/\n||hipforums.com/newforums/calendarcolumn.php?cquery=bush\n||hitechlegion.com/images/banners/\n||hkclubbing.com/images/banners/\n||hockeybuzz.com/mb/b?\n||hollywoodbackwash.com/glam/\n||holyfamilyradio.org/banners/\n||holyfragger.com/images/skins/\n||homad-global-configs.schneevonmorgen.com^$domain=muzu.tv\n||homeschoolmath.net/a/\n||honda-tech.com/*-140x90.gif\n||hongfire.com/banner/\n||hongkongindians.com/advimages/\n||horizonsunlimited.com/alogos/\n||horriblesubs.info/playasia\n||hostingbulk.com/aad.html\n||hostingbulk.com/zad.html\n||hostratings.co.uk/zeepeel.\n||hostsearch.com/creative/\n||hot-scene.com/cpop.js\n||hotbollywoodactress.net/ff2.gif\n||hotbollywoodactress.net/freedatingindia.gif\n||hotfile.com^*/banners/\n||hotfilesearch.com/includes/images/mov_\n||hotfiletrend.com/dlp.gif\n||hotgamesforgirls.com/html/$subdocument\n||hothardware.com/pgmerchanttable.aspx?\n||hothardware.com^*_staticbanner_*.jpg\n||houndmirror.com/images/XmkuP.gif\n||houseoftravel.co.nz/flash/banner/\n||howtogeek.com/go/\n||howtogermany.com/banner/\n||howwemadeitinafrica.com^*/dhl-hdr.gif\n||hpfanficarchive.com/freecoins2.jpg\n||hqfooty.tv/ad\n||htmldog.com/r10/flowers/\n||http.atlas.cdn.yimg.com/yamplus/video_*.mp4?$object-subrequest,domain=yahoo.com\n||hulkfile.eu/images/africa.gif\n||hulkload.com/b/\n||hulkload.com/recommended/\n||hulkshare.com/promo/\n||hulkshare.com^*/adsmanager.js\n||hulkshare.oncdn.com^*/removeads.\n||hulu.com/beacon/*=adauditerror\n||hulu.com/v3/revenue/\n||hummy.org.uk^*/brotator/\n||hurriyetdailynews.com/images/*_100x250_\n||hwbot.org/banner.img\n||hwinfo.com/images/lansweeper.jpg\n||hwinfo.com/images/se2banner.png\n||hypemagazine.co.za/assets/bg/\n||i-sgcm.com/pagetakeover/\n||i-tech.com.au^*/banner/\n||i.com.com^*/vendor_bg_\n||i.i.com.com/cnwk.1d/*/tt_post_dl.jpg\n||i.neoseeker.com/d/$subdocument\n||i3investor.com^*/offer_\n||i3investor.com^*/partner/\n||ians.in/iansad/\n||ibanners.empoweredcomms.com.au^\n||ibizaworldclubtour.net/wp-content/themes/ex-studios/banner/\n||ibnlive.in.com^*/ibn_*_banner_\n||ibrod.tv/ib.php\n||ibsrv.net/*214x30.\n||ibsrv.net/*_215x30.\n||ibsrv.net/*_215x30_\n||ibsrv.net/*forumsponsor$domain=audiforums.com\n||ibsrv.net/royalpurple/$domain=audiforums.com\n||ibsrv.net/sponsors/\n||ibtimes.com/banner/\n||ibtimes.com^*&popunder\n||ibtimes.com^*/sponsor_\n||iceinspace.com.au/iisads/\n||icelandreview.com^*/auglysingar/\n||iconeye.com/images/banners/\n||icrt.com.tw/downloads/banner/\n||ictv-ic-ec.indieclicktv.com/media/videos/$object-subrequest,domain=twitchfilm.com\n||icydk.com^*/title_visit_sponsors.\n||iddin.com/img/chatwing_banner.\n||iddin.com/img/chatwing_banner_\n||idesitv.com^*/loadbanners.\n||idg.com.au/files/skins/\n||idg.com.au/images/*_promo$image\n||idg.com.au^*_skin.jpg\n||ientrymail.com/webheadtools$domain=webpronews.com\n||ifilm.com/website/*-skin-\n||iframe.travel.yahoo.com^\n||iftn.ie/images/data/banners/\n||ijn.com/images/banners/\n||ijoomla.com/aff/banners/\n||ilcorsaronero.info/home.gif\n||ilikecheats.net/images/$image,domain=unknowncheats.me\n||iload.to/img/ul/impopi.js\n||iloveim.com/cadv\n||imads.rediff.com^\n||imagebam.com/download/$image,domain=ganool.com\n||imagebam.com/download_button.png\n||imagebam.com/img/coolstuffbro.jpg\n||imagefruit.com/includes/js/bgcont.js\n||imagefruit.com/includes/js/ex.js\n||imagefruit.com/includes/js/layer.js\n||imagepix.org/Images/imageput.jpg\n||imageporter.com/hiokax.js\n||imageporter.com/micromoo.html\n||imageporter.com/someo.html\n||imagerise.com/ir.js\n||imagerise.com/ir2.js\n||images-amazon.com/images/*/browser-scripts/da-\n||images-amazon.com/images/*/browser-scripts/dae-\n||images-amazon.com/images/*/da-us/da-$script\n||images-amazon.com^*/marqueepushdown/\n||images.bitreactor.to/designs/\n||images.globes.co.il^*/fixedpromoright.\n||images.sharkscope.com/acr/*_Ad-\n||images.sharkscope.com/everest/twister.jpg\n||imageshack.us/images/contests/*/lp-bg.jpg\n||imageshack.us/ym.php?\n||imagesnake.com^*/oc.js\n||imagetoupload.com/images/87633952425570896161.jpg\n||imagevenue.com/interstitial.\n||imcdb.org/res/cth_\n||imdb.com/images/*/scriptloader.$subdocument\n||img*.i-comers.com^\n||imgah.com/traffic$subdocument\n||imgburn.com/images/ddigest_\n||imgburn.com/images/your3gift.gif\n||imgcarry.com^*/oc.js\n||imgchili.net/js/showa.js\n||imgchili.net/lj.js\n||imgur.com/i2iBMaD.gif$domain=cpahero.com\n||imgur.com/include/zedoinviewstub1621.html\n||imouto.org/images/jlist/\n||imouto.org/images/mangagamer/\n||impactradio.co.za^*/banners/\n||impulsedriven.com/app_images/wallpaper/\n||in.com/addIframe/\n||in.com^*/170x50_\n||inanyevent.ch/images/banners/\n||incentivetravel.co.uk/images/banners/\n||indeed.com/ads/\n||independent.co.ug/images/banners/\n||independent.co.uk/kelkoo/\n||independent.co.uk/multimedia/archive/$subdocument\n||independent.co.uk^*/300unit/\n||independent.co.uk^*/partners/\n||indepthafrica.com^*/Banner-canreach.gif\n||india.com/ads/jw/ova-jw.swf$object-subrequest\n||india.com/zeenews_head2n.jpg\n||india.com^*-sponsor.\n||indiainfoline.com/wc/ads/\n||indianexpress.com^*/banner/\n||indiantelevision.com/banner/\n||indiatimes.com/articleshow_google_$subdocument\n||indiatimes.com/google$subdocument\n||industryabout.com/images/banners/\n||info.break.com^*/sponsors/\n||infobetting.com/b/\n||infobetting.com/bookmaker/\n||infoq.com^*/banners/\n||informe.com/img/banner_\n||infosecisland.com/ajax/viewbanner/\n||infoseek.co.jp/isweb/clip.html\n||ingdirect.com^*/adwizard/\n||injpn.net/images/banners/\n||inkscapeforum.com/images/banners/\n||inquirer.net/wp-content/themes/news/images/wallpaper_\n||insidebutlercounty.com/images/100-\n||insidebutlercounty.com/images/160-\n||insidebutlercounty.com/images/180-\n||insidebutlercounty.com/images/200-\n||insidebutlercounty.com/images/300-\n||insidebutlercounty.com/images/468-\n||insidedp.com/images/banners/\n||insidehw.com/images/banners/\n||insideyork.co.uk/assets/images/sponsors/\n||inspirefirst.com^*/banners/\n||intel.com/sites/wap/global/wap.js\n||intellicast.com/outsidein.js\n||intellicast.com/travel/cheapflightswidget.htm\n||intelseek.com/intelseekads/\n||interest.co.nz/banners/\n||interest.co.nz^*_skin.\n||interest.co.nz^*_skin_\n||interfacelift.com/inc_new/$subdocument\n||interfacelift.com^*/artistsvalley_160x90_\n||international.to/600.html\n||international.to/large.html\n||international.to/link_unit.html\n||internationalmeetingsreview.com//uploads/banner/\n||intoday.in/btstryad.html\n||ip-adress.com/i/ewa/\n||ip-adress.com/superb/\n||ip-ads.de^$domain=zattoo.com\n||ipaddress.com/banner/\n||ipinfodb.com/img/adds/\n||iptools.com/sky.php\n||irctctourism.com/ttrs/railtourism/Designs/html/images/tourism_right_banners/*DealsBanner_\n||irishamericannews.com/images/banners/\n||irishdev.com/files/banners/\n||irishdictionary.ie/view/images/ispaces-makes-any-computer.jpg\n||irishracing.com/graphics/books\n||ironmagazine.com^*/banners.php\n||ironspider.ca/pics/hostgator_green120x600.gif\n||ironsquid.tv/data/uploads/sponsors/\n||irv2.com/attachments/banners/\n||irv2.com/forums/*show_banner\n||irv2.com/images/sponsors/\n||isitdownrightnow.com/graphics/speedupmypc*.png\n||isitnormal.com/img/iphone_hp_promo_wide.png\n||islamicfinder.org/cimage/\n||islamicfocus.co.za/images/banners/\n||island.lk/userfiles/image/danweem/\n||isportconnect.com//images/banners/\n||israeldefense.com/_Uploads/dbsBanners/\n||israelidiamond.co.il^*/bannerdisplay.aspx?\n||israeltoday.co.il^*/promo/\n||isup.me/images/dotbiz_banner.jpg\n||isxdead.com/images/showbox.png\n||italiangenealogy.com/images/banners/\n||itpro.co.uk/images/skins/\n||itv.com/adexplore/*/config.xml\n||itv.com/priority/$object-subrequest,domain=u.tv\n||itweb.co.za/banners/\n||itweb.co.za/logos/\n||itweb.co.za/sidelogos/\n||itweb.co.za^*sponsoredby\n||itwebafrica.com/images/logos/\n||itworld.com/slideshow/iframe/topimu/\n||iurfm.com/images/sponsors/\n||iwebtool.com^*/bannerview.php\n||ixquick.nl/graphics/banner_\n||jamaica-gleaner.com/images/promo/\n||jame-world.com^*/adv/\n||jango.com/assets/promo/1600x1000-\n||javamex.com/images/AdFrenchVocabGamesAnim.gif\n||javascript-coder.com^*/form-submit-larger.jpg\n||javascript-coder.com^*/make-form-without-coding.png\n||jayisgames.com/maxcdn_160x250.png\n||jazzandblues.org^*/iTunes_\n||jdownloader.org/_media/screenshots/banner.png\n||jdownloader.org^*/smbanner.png\n||jebril.com/sites/default/files/images/top-banners/\n||jewishexponent.com^*/banners/\n||jewishnews.co.uk^*-banner-\n||jewishnews.co.uk^*-banner.\n||jewishnews.co.uk^*/banner\n||jewishtimes-sj.com/rop/\n||jewishtribune.ca^*/banners/\n||jewishvoiceny.com/ban2/\n||jewishyellow.com/pics/banners/\n||jheberg.net/img/mp.png\n||jillianmichaels.com/images/publicsite/advertisingslug.gif\n||johnbridge.com/vbulletin/banner_rotate.js\n||johnbridge.com/vbulletin/images/tyw/cdlogo-john-bridge.jpg\n||johnbridge.com/vbulletin/images/tyw/wedi-shower-systems-solutions.png\n||johngaltfla.com/wordpress/wp-content/uploads/*/jmcs_specaialbanner.jpg\n||johngaltfla.com/wordpress/wp-content/uploads/*/TB2K_LOGO.jpg\n||joindota.com/wp-content/*.png$image\n||jokertraffic.com^$domain=4fuckr.com\n||joomladigger.com/images/banners/\n||journal-news.net/annoyingpopup/\n||journeychristiannews.com/images/banners/\n||joursouvres.fr^*/pub_\n||jozikids.co.za/uploadimages/*_140x140_\n||jozikids.co.za/uploadimages/140x140_\n||jpupdates.com^*/divorce_coach_rosenberg.gif\n||jpupdates.com^*/jupdates.gif\n||jpupdates.com^*/Mesamche-lev-Auction.gif\n||jpupdates.com^*/PAL-DANS-\n||jumptags.com/joozit/presentation/images/banners/\n||junocloud.me/promos/\n||just-download.com/banner/\n||justsomething.co/wp-content/uploads/*-250x250.\n||kaieteurnewsonline.com/revenue/\n||kamcity.com/banager/banners/\n||kamcity.com/menu/banners/\n||kansascity.com/images/touts/ds_\n||kassfm.co.ke/images/moneygram.gif\n||kat-ads.torrenticity.com^\n||kavkisfile.com/images/ly-mini.gif\n||kavkisfile.com/images/ly.gif\n||kbcradio.eu/img/banner/\n||kblx.com/upload/takeover_\n||kcrw.com/collage-images/amazon.gif\n||kcrw.com/collage-images/itunes.gif\n||kdoctv.net/images/banners/\n||keenspot.com/images/headerbar-\n||keepvid.com/images/ilivid-\n||kendrickcoleman.com/images/banners/\n||kentonline.co.uk/weatherimages/Britelite.gif\n||kentonline.co.uk/weatherimages/SEW.jpg\n||kentonline.co.uk/weatherimages/sponsor_\n||kephyr.com/spywarescanner/banner1.gif\n||kermit.macnn.com^\n||kewlshare.com/reward.html\n||kexp.org^*/sponsor-\n||kexp.org^*/sponsoredby.\n||keygen-fm.ru/images/*.swf\n||kfog.com^*/banners/\n||khaleejtimes.com/imgactv/Umrah%20-%20290x60%20-%20EN.jpg\n||khaleejtimes.com/imgactv/Umrah-Static-Background-Gutters-N.jpg\n||khon2.com^*/sponsors/\n||kickasstorrent.ph/kat_adplib.js\n||kickoff.com/images/sleeves/\n||kingfiles.net/images/bt.png\n||kingofsat.net/pub/\n||kinox.to/392i921321.js\n||kinox.to/com/\n||kinox.tv/g.js\n||kirupa.com/supporter/\n||kitco.com/ssi/dmg_banner_001.stm\n||kitco.com/ssi/home_ox_deanmg.stm\n||kitco.com/ssi/market_ox_deanmg.stm\n||kitco.com^*/banners/\n||kitguru.net/?kitguru_wrapjs=1&ver=\n||kitguru.net/wp-content/banners/\n||kitguru.net/wp-content/wrap.jpg\n||kitz.co.uk/files/jump2/\n||kjlhradio.com^*-300x250.\n||kjlhradio.com^*/banners/\n||kjul1047.com^*/clientgraphics/\n||klav1230am.com^*/banners/\n||kleisauke.nl/static/img/bar.gif\n||klfm967.co.uk/resources/creative/\n||klkdccs.net/pjs/yavli-tools.js\n||klm.com^*/fls_redirect.html\n||knbr.com^*/banners/\n||kncminer.com/userfiles/image/250_240.jpg\n||knowfree.net^*/ezm125x125.gif\n||knowledgespeak.com/images/banner/\n||knowthecause.com/images/banners/\n||knpr.org/common/sponsors/\n||kob.com/kobtvimages/flexhousepromotions/\n||komando.com^*/k2-interstitial.min.js?\n||kompas.com/js_kompasads.php\n||kongregate.com/images/help_devs_*.png\n||kontraband.com/media/takeovers/\n||koraliga.com/open.js\n||koreanmovie.com/img/banner/banner.jpg\n||koreatimes.co.kr/ad/\n||koreatimes.co.kr/images/bn/\n||koreatimes.co.kr/upload/ad/\n||koreatimes.co.kr/www/images/bn/\n||kovideo.net^*.php?user_\n||krapps.com^*-banner-\n||krebsonsecurity.com/b-ga/\n||krebsonsecurity.com/b-kb/\n||kron.com/uploads/*-ad-$image\n||krzk.com/uploads/banners/\n||ksstradio.com/wp-content/banners/\n||kstp.com^*/flexhousepromotions/\n||ktradionetwork.com^*/banners/\n||kuiken.co/static/w.js\n||kukuplay.com/upload/*.swf\n||kvcr.org^*/sponsors/\n||kwanalu.co.za/upload/ad/\n||kxlh.com/images/banner/\n||kyivpost.com/media/banners/\n||l.yimg.com/a/i/*_wallpaper$image\n||l.yimg.com/ao/i/ad/\n||l.yimg.com/mq/a/\n||l4dmaps.com/i/right_dllme.gif\n||l4dmaps.com/img/right_gameservers.gif\n||labtimes.org/banner/\n||lagacetanewspaper.com^*/banners/\n||lake-link.com/images/sponsorLogos/\n||lancasteronline.com^*/done_deal/\n||lancasteronline.com^*/weather_sponsor.gif\n||lankabusinessonline.com/images/banners/\n||laobserved.com/tch-ad.jpg\n||laptopmag.com/images/sponsorships/\n||laredodaily.com/images/banners/\n||lastminute.com^*/universal.html?\n||lasttorrents.org/pcmadd.swf\n||latex-community.org/images/banners/\n||lawdepot.com/affiliate/\n||lazygamer.net/kalahari.gif\n||lazygirls.info/click.php\n||leader.co.za/leadership/banners/\n||leagueunlimited.com/images/rooty/\n||learnspanishtoday.com/aff/img/banners/\n||lecydre.com/proxy.png\n||legalbusinessonline.com/popup/albpartners.aspx\n||lens101.com/images/banner.jpg\n||lespagesjaunesafrique.com/bandeaux/\n||letitbit.net/images/other/inst_forex_\n||letswatchsomething.com/images/filestreet_banner.jpg\n||lfcimages.com^*/partner-\n||lfcimages.com^*/sponsor-\n||lfgcomic.com/wp-content/uploads/*/PageSkin_\n||libertyblitzkrieg.com/wp-content/uploads/2012/09/cc200x300.gif?\n||licensing.biz/media/banners/\n||life.imagepix.org^\n||lifeinqueensland.com/images/156x183a_\n||lifetips.com/sponsors/\n||limesurvey.org/images/banners/\n||linguee.com/banner/\n||linkcentre.com/top_fp.php\n||linkfm.co.za/images/banners/\n||linkmoon.net/banners/\n||linksafe.info^*/mirror.png\n||linksave.in/img/downloadbutton_alt.png\n||linksave.in/img/downloadbutton_hs.png\n||linksave.in/img/downloadbutton_sh.png\n||linksave.in^*/downloadbutton_highspeed.png\n||linksrank.com/links/\n||linuxinsider.com/images/sda/\n||linuxmint.com/img/sponsor/\n||linuxmint.com/pictures/sponsors/\n||linuxsat-support.com/vsa_banners/\n||linuxtopia.org/includes/$subdocument\n||lionsrugby.co.za^*/sponsors.\n||liquidcompass.net/playerapi/redirect/\n||liquidcompass.net^*/purchase_\n||littleindia.com/files/banners/\n||live-proxy.com/hide-my-ass.gif\n||live-proxy.com/vectrotunnel-logo.jpg\n||livejasmin.com/freechat.php\n||liveonlinetv247.com/images/muvixx-150x50-watch-now-in-hd-play-btn.gif\n||livescore.in/res/image/bookmaker-list.png\n||livesearch.ninemsn.com.au^$subdocument\n||livestream.com^*/overlay/\n||livetradingnews.com/wp-content/uploads/vamp_cigarettes.png\n||livetv.ru/mb/\n||livetvcenter.com/satellitedirect_\n||livingscoop.com/vastload.php\n||ll.a.hulu.com^\n||lmgtfy.com/s/images/ls_\n||localdirectories.com.au^*/bannerimages/\n||locanto.co.za/run/afcbackfill/\n||logoopenstock.com/img/banners/\n||logotv.com/content/skins/\n||loleasy.com/promo/\n||loleasy.com^*/adsmanager.js\n||lolzbook.com/test/\n||london2012.com/img/sponsors/\n||london2012.com/imgml/partners/footer/\n||londonprivaterentals.standard.co.uk^\n||londonstockexchange.com^*/fx.gif\n||lookbook.nu/show_leaderboard.html\n||lookbook.nu/show_skyscraper.html\n||lookbook.nu^*.html?$subdocument\n||looky.hyves.org^\n||lowbird.com/lbpu.php\n||lowbird.com/lbpun.php\n||lowellsun.com/litebanner/\n||lowendbox.com/wp-content/themes/leb/banners/\n||lowyat.net/lowyat/lowyat-bg.jpg\n||lowyat.net/mainpage/background.jpg\n||lshunter.tv/images/bets/\n||lshunter.tv^*&task=getbets$xmlhttprequest\n||lucianne.com^*_*.html\n||luckyshare.net/images/1gotlucky.png\n||luckyshare.net/images/2top.png\n||luckyshare.net/images/sda/\n||luxury4play.com^*/ads/\n||lw1.gamecopyworld.com^$subdocument\n||lw1.lnkworld.com^$subdocument\n||lw2.gamecopyworld.com^\n||lycos.com/catman/\n||lygo.com/scripts/catman/\n||lyrics5ab.com/wp-content/add$subdocument\n||lyricsfreak.com^*/overlay.js\n||m-w.com/creative.php\n||m4carbine.net/tabs/\n||macaudailytimes.com.mo/files/banners/\n||macaunews.com.mo/images/stories/banners/\n||macblurayplayer.com/image/amazon-\n||machovideo.com/img/site/postimg2/rotate.php\n||macintouch.com/images/amaz_\n||macintouch.com/images/owc_\n||maciverse.mangoco.netdna-cdn.com^*banner\n||macmillandictionary.com/info/frame.html?zone=\n||macobserver.com/js/givetotmo.js\n||macobserver.com^*/deal_brothers/\n||macupdate.com/js/google_service.js\n||macworld.co.uk^*/textdeals/\n||macworld.com/ads/\n||madamenoire.com/wp-content/*_Reskin-$image\n||mads.dailymail.co.uk^\n||madskristensen.net/discount2.js\n||madville.com/afs.php\n||mail.yahoo.com/mc/md.php?\n||mailinator.com/images/abine/leaderboard-\n||mailinator.com^*/clickbanner.jpg\n||majorgeeks.com/aff/\n||majorgeeks.com/images/*_336x280.jpg\n||majorgeeks.com/images/download_sd_\n||majorgeeks.com/images/mb-hb-2.jpg\n||majorgeeks.com/images/mg120.jpg\n||majorgeeks.com^*/banners/\n||makeagif.com/parts/fiframe.php\n||malaysiabay.org^*/creative.js\n||malaysiabay.org^*creatives.php?\n||malaysiakini.com/misc/banners/\n||maltatoday.com.mt/ui_frontend/display_external_module/\n||malwaredomains.com/ra.jpg\n||mangafox.com/media/game321/\n||mangareader.net/images/800-x-100\n||mangarush.com/xtend.php\n||mangaupdates.com/affiliates/\n||manhattantimesnews.com/images/banners/\n||mani-admin-plugin.com^*/banners/\n||maniastreaming.com/pp2/\n||manicapost.com^*/banners/\n||manilatimes.net/images/banners/\n||manutd.com^*/Sponsors/\n||manxradio.com^*/banners_\n||mapsofindia.com/widgets/tribalfusionboxadd.html\n||maravipost.com/images/banners/\n||marineterms.com/images/banners/\n||marketingpilgrim.com/wp-content/uploads/*/trackur.com-\n||marketingsolutions.yahoo.com^\n||marketingupdate.co.za/temp/banner_\n||marketintelligencecenter.com/images/brokers/\n||marketnewsvideo.com/etfchannel/evfad1.gif\n||marketnewsvideo.com/mnvport160.gif\n||marketplace.org^*/support_block/\n||mary.com/728_header.php\n||mashable.com/tripleclick.html\n||mathforum.org/images/tutor.gif\n||mauritiusnews.co.uk/images/banners/\n||maxconsole.com/maxconsole/banners/\n||maxgames.com^*/sponsor_\n||mb.hockeybuzz.com^\n||mccont.com/campaign%20management/\n||mccont.com/sda/\n||mccont.com/takeover/\n||mcjonline.com/filemanager/userfiles/banners/\n||mcnews.com.au/banners/\n||mcsesports.com/images/sponsors/\n||mcstatic.com^*/billboard_\n||mcvuk.com/static/banners/\n||mealsandsteals.sandiego6.com^\n||meanjin.com.au/static/images/sponsors.jpg\n||mechodownload.com/forum/images/affiliates/\n||medhelp.org/hserver/\n||media-delivery.armorgames.com^\n||media-imdb.com/images/*/mptv_banner_\n||media-imdb.com^*/affiliates/\n||media-imdb.com^*/clicktale-$script\n||media-mgmt.armorgames.com^\n||media.abc.go.com^*/callouts/\n||media.mtvnservices.com/player/scripts/mtvn_player_control.js$domain=spike.com\n||mediafire.com/images/rockmelt/\n||mediafire.com/templates/linkto/\n||mediafire.com^*/linkto/default-$subdocument\n||mediafire.com^*/rockmelt_tabcontent.jpg\n||mediafire.re/popup.js\n||mediamgr.ugo.com^\n||mediaspanonline.com/images/buy-itunes.png\n||mediaspanonline.com/inc.php?uri=/&bannerPositions=\n||mediaspanonline.com^*_Background.$domain=farmingshow.com\n||mediaspanonline.com^*_Background_$domain=farmingshow.com|radiosport.co.nz\n||mediaticks.com/bollywood.jpg\n||mediaticks.com/images/genx-infotech.jpg\n||mediaticks.com/images/genx.jpg\n||mediaupdate.co.za/temp/banner_\n||mediaweek.com.au/storage/*_234x234.jpg?\n||medicaldaily.com/views/images/banners/\n||meetic.com/js/*/site_under_\n||megashares.com/cache_program_banner.html\n||megaswf.com/file/$domain=gruntig.net\n||megauploadtrend.com/iframe/if.php?\n||meinbonusxxl.de^$domain=xup.in\n||meizufans.eu/efox.gif\n||meizufans.eu/merimobiles.gif\n||meizufans.eu/vifocal.gif\n||memory-alpha.org/__varnish_liftium/\n||memorygapdotorg.files.wordpress.com^*allamerican3.jpg$domain=memoryholeblog.com\n||menafn.com^*/banner_\n||mentalfloss.com^*-skin-\n||merriam-webster.com/creative.php?\n||merriam-webster.com^*/accipiter.js\n||messianictimes.com/images/1-13/ba_mhfinal_\n||messianictimes.com/images/4-13/reach.jpg\n||messianictimes.com/images/banners/\n||messianictimes.com/images/Israel%20Today%20Logo.png\n||messianictimes.com/images/Jews%20for%20Jesus%20Banner.png\n||messianictimes.com/images/MJBI.org.gif\n||messianictimes.com/images/Word%20of%20Messiah%20Ministries1.png\n||meteomedia.com^*&placement\n||meteovista.co.uk/go/banner/\n||meteox.co.uk/bannerdetails.aspx?\n||meteox.com/bannerdetails.aspx?\n||metradar.ch^*/banner_\n||metrolyrics.com/js/min/tonefuse.js\n||metromedia.co.za/bannersys/banners/\n||mfcdn.net/media/*left\n||mfcdn.net/media/*right\n||mfcdn.net/media/game321/$image\n||mgid.com/ban/\n||mgnetwork.com/dealtaker/\n||mhvillage.com/ppc.php?\n||mi-pro.co.uk/banners/\n||miamiherald.com^*/dealsaver/\n||miamiherald.com^*/teamfanshop/\n||micast.tv/clean.php\n||michronicleonline.com/images/banners/\n||middle-east-online.com^*/meoadv/\n||midlandsradio.fm/bms/\n||mightyupload.com/popuu.js\n||mikejung.biz/images/*/728x90xLiquidWeb_\n||milanounited.co.za/images/sponsor_\n||mindfood.com/upload/images/wallpaper_images/\n||miniclipcdn.com/images/takeovers/\n||mininova.org/js/vidukilayer.js\n||minnpost.com^*/sponsor/\n||mirror.co.uk^*/gutters/\n||mirror.co.uk^*/sponsors/\n||mirror.co.uk^*_promos_\n||mirrorcreator.com/js/mpop.js\n||mirrorcreator.com/js/pu_ad.js\n||mirrorstack.com/?q=r_ads\n||misterwhat.co.uk/business-company-300/\n||mixfm.co.za/images/banner\n||mixfm.co.za^*/tallspon\n||mixx96.com/images/banners/\n||mizzima.com/images/banners/\n||mlb.com/images/*_videoskin_*.jpg\n||mlb.com^*/sponsorship/\n||mlg-ad-ops.s3.amazonaws.com^$domain=majorleaguegaming.com\n||mmoculture.com/wp-content/uploads/*-background-\n||mmorpg.com/images/skins/\n||mmosite.com/sponsor/\n||mnn.com/sites/*/popups/AllstatePopup$script\n||mnn.com^*/120x60/\n||mob.org/banner/\n||mobilephonetalk.com/eurovps.swf\n||mochiads.com/srv/\n||moneycontrol.co.in/mcjs/10promo/\n||moneymakerdiscussion.com/mmd-banners/\n||moneymedics.biz/upload/banners/\n||monitor.co.ug/image/view/*/120/\n||monitor.co.ug/image/view/*/468/\n||monkeygamesworld.com/images/banners/\n||monster.com/null&pp\n||morefmphilly.com^*/sponsors/\n||morefree.net/wp-content/uploads/*/mauritanie.gif\n||morningstaronline.co.uk/offsite/progressive-listings/\n||motorcycles-motorbikes.com/pictures/sponsors/\n||motorhomefacts.com/images/banners/\n||motortrader.com.my/skinner/\n||motorweek.org^*/sponsor_logos/\n||mountainbuzz.com/attachments/banners/\n||mousesteps.com/images/banners/\n||mouthshut.com^*/zedo.aspx\n||movie2k.tl/layers/\n||movie2k.tl/serve.php\n||movie4k.to/*.js\n||movie4k.tv/e.js\n||moviewallpaper.net/js/mwpopunder.js\n||movizland.com/images/banners/\n||movstreaming.com/images/edhim.jpg\n||movzap.com/aad.html\n||movzap.com/zad.html\n||mp.adverts.itv.com/adexplore/*.swf?$object-subrequest\n||mp.adverts.itv.com/priority/*.mp4$object-subrequest\n||mp3.li/images/md_banner_\n||mp3mediaworld.com*/!\n||mp3s.su/uploads/___/djz_to.png\n||mp3skull.com/call_banner_exec_new.\n||msecnd.net/scripts/compressed.common.lib.js?$domain=firedrive.com|sockshare.com\n||msn.com/?adunitid\n||msw.ms^*/jquery.MSWPagePeel-\n||mtbr.com/ajax/hotdeals/\n||mtv.co.uk^*/btn_itunes.png\n||mtvnimages.com/images/skins/$image\n||muchmusic.com/images/*-skin.png\n||muchmusic.com^*/bigbox_frame_resizer.html\n||muchmusic.com^*/leaderboard_frame_obiwan.html\n||multiupload.biz/r_ads2\n||murdermysteries.com/banners-murder/\n||music.yahoo.com/get-free-html\n||musicmaza.com/bannerdyn\n||musicplayon.com/banner?\n||musicremedy.com/banner/\n||musictarget.com*/!\n||mustangevolution.com/images/300x100_\n||mustangevolution.com^*/banner/\n||mustangevolution.com^*/banners/\n||muthafm.com^*/partners.png\n||muzu.tv/player/muzutv_homadconfig.\n||my-link.pro/rotatingBanner.js\n||myam1230.com/images/banners/\n||mybroadband.co.za/news/wp-content/wallpapers/\n||mycentraljersey.com^*/sponsor_\n||myfax.com/free/images/sendfax/cp_coffee_660x80.swf\n||myfpscheats.com/bannerimg.jpg\n||mygaming.co.za/news/wp-content/wallpapers/\n||myiplayer.eu/ad\n||mypbrand.com/wp-content/uploads/*banner\n||mypiratebay.cl^$subdocument\n||mypremium.tv^*/bpad.htm\n||myretrotv.com^*_horbnr.jpg\n||myretrotv.com^*_vertbnr.jpg\n||myrls.me/open.js\n||mysafesearch.co.uk/adds/\n||myshadibridalexpo.com/banner/\n||myspacecdn.com/cms/*_skin_\n||mysubtitles.com^*_banner.jpg\n||mysuncoast.com/app/wallpaper/\n||mysuncoast.com^*/sponsors/\n||myway.com/gca_iframe.html\n||mywot.net/files/wotcert/vipre.png\n||naij.com^*/branding/\n||nairaland.com/dynamic/$image\n||nation.co.ke^*_bg.png\n||nation.lk^*/banners/\n||nation.sc/images/banners/\n||nation.sc/images/pub\n||nationaljournal.com/js/njg.js\n||nationalreview.com/images/display_300x600-\n||nationalturk.com^*/banner\n||nationmultimedia.com/home/banner/\n||nationmultimedia.com/new/js/nation_popup.js\n||nativetimes.com/images/banners/\n||naukimg.com/banner/\n||nbr.co.nz^*-WingBanner_\n||nciku.com^*banner\n||ncrypt.in/images/1.gif\n||ncrypt.in/images/a/\n||ncrypt.in/images/banner\n||ncrypt.in/images/useful/\n||ncrypt.in/javascript/jquery.msgbox.min.js\n||ncrypt.in^*/layer.$script\n||ndtv.com/widget/conv-tb\n||ndtv.com^*/banner/\n||ndtv.com^*/sponsors/\n||nearlygood.com^*/_aff.php?\n||nemesistv.info/jQuery.NagAds1.min.js\n||neoseeker.com/a_pane.php\n||neowin.net/images/atlas/aww\n||nerej.com/c/\n||nesn.com/img/nesn-nation/bg-\n||nesn.com/img/nesn-nation/header-dunkin.jpg\n||nesn.com/img/sponsors/\n||netdna-cdn.com^$domain=modovideo.com|mooshare.biz\n||netdna-cdn.com^*/tiwib-lootr-ad.png$domain=thisiswhyimbroke.com\n||netindian.in/frontsquare*.php\n||netspidermm.indiatimes.com^\n||netsplit.de/links/rootado.gif\n||netupd8.com^*/ads/\n||network.sofeminine.co.uk^\n||networkwestvirginia.com/uploads/user_banners/\n||networx.com/widget.php?aff_id=$script\n||newafricanmagazine.com/images/banners/\n||newalbumreleases.net/banners/\n||newburytoday.co.uk^*-WillisAinsworth1.gif\n||newipnow.com/ad-js.php\n||newoxfordreview.org/banners/ad-\n||newpct.com/soporte/\n||news-leader.com^*/banner.js\n||news-record.com/app/deal/\n||news.am/pic/bnr/\n||news.com.au/cs/*/bg-body.jpg\n||news.com.au/news/vodafone/$object\n||news.com.au^*-promo$image\n||news.com.au^*/images/*-bg.jpg\n||news.com.au^*/promos/\n||news.com.au^*/promotions/\n||news.com.au^*/public/img/p/$image\n||newsbusters.org^*/banners/\n||newscdn.com.au^*/desktop-bg-body.png$domain=news.com.au\n||newsday.co.tt/banner/\n||newsonjapan.com^*/banner/\n||newsreview.com/images/promo.gif\n||newstatesman.com/sites/all/themes/*_1280x2000.$image\n||newstrackindia.com/images/hairfallguru728x90.jpg\n||newsudanvision.com/images/banners/\n||newsudanvision.com/images/Carjunctionadvert.gif\n||newsvine.com//jenga/widget/\n||newsvine.com/jenga/widget/\n||newsweek.com^*interstitial.js\n||newverhost.com/css/onload.js\n||newverhost.com/css/pp.js\n||newvision.co.ug/banners/\n||newvision.co.ug/rightsidepopup/\n||nextag.com^*/NextagSponsoredProducts.jsp?\n||nextbigwhat.com/wp-content/uploads/*ccavenue\n||nextstl.com/images/banners/\n||nfl.com/assets/images/hp-poweredby-\n||nfl.com^*/page-background-image.jpg\n||nflcdn.com^*/partner-type/$~stylesheet\n||ngfiles.com/bg-skins/sponsored/skins/$domain=newgrounds.com\n||ngohq.com/images/ad.jpg$~collapse\n||ngrguardiannews.com/images/banners/\n||nigeriafootball.com/img/affiliate_\n||nigerianyellowpages.com/images/banners/\n||niggasbelike.com/wp-content/themes/zeecorporate/images/b.jpg\n||nijobfinder.co.uk/affiliates/\n||nimbb.com^$domain=my.rsscache.com\n||nirsoft.net/banners/\n||nitrobahn.com.s3.amazonaws.com/theme/getclickybadge.gif\n||nmap.org/shared/images/p/$image\n||nme.com/js/takeoverlay.js\n||nme.com/themes/takeovers/\n||nmimg.net/css/takeover_\n||nodevice.com/images/banners/\n||noram.srv.ysm.yahoo.com^\n||northjersey.com^*_Sponsor.\n||norwaypost.no/images/banners/\n||nosteam.ro^*/compressed.ggotab36.js\n||nosteam.ro^*/gamedvprop.js\n||nosteam.ro^*/messages.js\n||nosteam.ro^*/messagesprop.js\n||notalwaysromantic.com/images/banner-\n||notdoppler.com^*-promo-homepageskin.png\n||notdoppler.com^*-promo-siteskin.\n||notebook-driver.com/wp-content/images/banner_\n||novamov.com/images/download_video.jpg\n||nowgoal.com/images/foreign/\n||nowwatchtvlive.com/matomyads.php\n||nowwatchtvlive.com/revenuehits.html\n||ntdtv.com^*/adv/\n||nu2.nu^*/sponsor/\n||nu2.nu^*_banner.\n||nufc.com/forddirectbanner.js\n||nufc.com^*/altoonative_Cardiff.gif\n||nufc.com^*/mjs-2013-11.png\n||nufc.com^*/skyscraper.gif\n||nufc.com^*/The%20Gate_NUFC.com%20banner_%2016.8.13.gif\n||nufc.com^*_360x120.gif\n||numberempire.com/images/b/\n||nutritionhorizon.com/content/banners/\n||nutritionhorizon.com/content/flash_loaders/$object\n||nuttynewstoday.com/images/hostwink.jpg\n||nuttynewstoday.com/images/percento-banner.jpg\n||nuvo.net^*/FooterPromoButtons.html\n||nyaa.se/ag\n||nyaa.se/ah\n||nyaa.se/ai\n||nydailynews.com/img/sponsor/\n||nydailynews.com/PCRichards/\n||nydailynews.com^*-reskin-\n||nymag.com/partners/\n||nymag.com/scripts/skintakeover.js\n||nymag.com^*/metrony_\n||nypost.com^*/takeovers/\n||nyrej.com/c/\n||nyt.com^*-sponsor-\n||nytimes.com/ads/\n||nytimes.com^*-sponsor-\n||nzbindex.nl/images/banners/\n||nzbking.com/static/nzbdrive_banner.swf\n||nznewsuk.co.uk/banners/\n||oanda.com/wandacache/wf-banner-\n||oas.autotrader.co.uk^\n||oas.skyscanner.net^\n||oasc07.citywire.co.uk^\n||oascentral.chron.com^\n||oascentral.hosted.ap.org^\n||oascentral.newsmax.com^\n||objects.tremormedia.com/embed/swf/acudeo.swf$object-subrequest,domain=deluxemusic.tv.staging.ipercast.net\n||oboom.com/assets/raw/$media,domain=oboom.com\n||observer.com.na/images/banners/\n||observer.org.sz/files/banners/\n||observer.ug/images/banners/\n||ocforums.com/adj/\n||ocp.cbssports.com/pacific/request.jsp?\n||oddschecker.com^*/takeover/\n||ohmygore.com/ef_pub*.php\n||oilprice.com/images/banners/\n||oilprice.com/images/sponsors/\n||oilprice.com/oiopub/\n||okccdn.com/media/img/takeovers/\n||okcupid.com/daisy?$subdocument\n||oldgames.sk/images/topbar/\n||omgpop.com/dc?\n||on.net/images/gon_nodestore.jpg\n||one-delivery.co.uk^*/sensitivedating.png\n||onepieceofbleach.com/onepieceofbleach-gao-\n||onionstatic.com/sponsored/\n||onlinekeystore.com/skin1/images/side-\n||onlinemarketnews.org^*/silver300600.gif\n||onlinemarketnews.org^*/silver72890.gif\n||onlinenews.com.pk/onlinenews-admin/banners/\n||onlinerealgames.com/google$subdocument\n||onlineshopping.co.za/expop/\n||onlygoodmovies.com/netflix.gif\n||onvasortir.com/maximemo-pense-bete-ovs.png\n||opednews.com^*/iframe.php?\n||opencurrency.com/wp-content/uploads/*-aocs-sidebar-commodity-bank.png\n||opensubtitles.org/gfx/banners_campaigns/\n||oprah.com^*-300x335.jpg\n||optics.org/banners/\n||optimum.net/utilities/doubleclicktargeting\n||oraclebroadcasting.com/images/enerfood-300x90.gif\n||oraclebroadcasting.com/images/extendovite300.gif\n||oraclebroadcasting.com/images/hempusa_330.gif\n||originalfm.com/images/hotspots/\n||orissadiary.com/img/*-banner.gif\n||orkut.gmodules.com^/promote.xml\n||orlandosentinel2.com^*-sponsorship-\n||osdir.com/ml/$subdocument\n||oteupload.com/images/iLivid-download-\n||ourmanga.com/funklicks\n||outlookindia.com/image/banner_\n||outofaces.com/*.html$subdocument\n||overclock3d.net/img/pcp.jpg\n||ovfile.com/player/jwadplugin.swf$object-subrequest\n||ow.ly^*/hootsuite_promo.jpg\n||own3d.tv/lr/*.flv\n||ox-d.sbnation.com^\n||ox-d.wetransfer.com^\n||ox.furaffinity.net^\n||oyetimes.com/join/advertisers.html\n||ozqul.com^*/webbanners.png\n||ozy.com/modules/_common/ozy/blade/\n||ozy.com/modules/_common/ozy/full_width/\n||ozy.com/modules/_common/ozy/pushdown/\n||ozy.com^*/interstitial/\n||p2pnet.net/images/$image\n||pacificnewscenter.com/images/banners/\n||pagesinventory.com/_data/img/*_125x400_\n||paisalive.com/include/popup.js\n||pakistantoday.com.pk^*/karachi_houston_PakistanToday.jpg\n||paktribune.com^*/banner\n||pan2.ephotozine.com^$image\n||pandora.com^*/mediaserverPublicRedirect.jsp\n||parade.com/images/skins/\n||paradoxwikis.com/Sidebar.jpg\n||pardaphash.com/direct/tracker/add/\n||parlemagazine.com/images/banners/\n||partners-z.com^\n||pasadenajournal.com/images/banners/\n||patrickjames.com/images/$domain=askandyaboutclothes.com\n||payplay.fm^*/mastercs.js\n||pbs.org^*/sponsors/\n||pbsrc.com/sponsor/\n||pbsrc.com^*/sponsor/\n||pcadvisor.co.uk/graphics/sponsored/\n||pcauthority.com.au^*/skins/\n||pcmag.com/blogshome/logicbuy.js\n||pcpro.co.uk/images/*_siteskin\n||pcpro.co.uk/images/skins/\n||pcpro.co.uk^*/pcprositeskin\n||pcpro.co.uk^*skin_wide.\n||pcr-online.biz/static/banners/\n||pcworld.co.nz^*_siteskin_\n||pcworld.com/ads/\n||pcworld.com/images/*_vidmod_316x202_\n||pcworld.com/templates/video/popup.jsp?*&flv=/pcw/ads/\n||pe.com^*/biice2scripts.js\n||pechextreme.com^*/banner.\n||pechextreme.com^*/banners/\n||pedestrian.tv/_crunk/wp-content/files_flutter/\n||penguin-news.com/images/banners/\n||perezhilton.com/images/ask/\n||peruthisweek.com/uploads/sponsor_image/\n||petri.co.il/media/$image\n||petri.co.il/wp-content/uploads/banner1000x75_\n||petri.co.il/wp-content/uploads/banner700x475_\n||pettube.com/images/*-partner.\n||pgatour.com^*/featurebillboard_\n||pghcitypaper.com/general/modalbox/modalbox.js\n||phantom.ie^*/banners/\n||phillytrib.com/images/banners/\n||phnompenhpost.com/images/stories/banner/\n||phnompenhpost.com^*/banner_\n||phonearena.com/images/banners/\n||phonebunch.com/images/flipkart_offers_alt.jpg\n||phonescoop.com^*/a_tab.gif\n||phoronix.com/phxforums-thread-show.php\n||photo.net/equipment/pg-160^\n||photobucket.com/albums/cc94/dl4all/temp/enginesong.gif$domain=dl4all.com\n||photosupload.net/photosupload.js\n||phpbb.com/theme/images/bg_forumatic_front_page.png\n||phpbb.com/theme/images/hosting/hostmonster-downloads.gif\n||phpmotion.com/images/banners-webhosts/\n||phuket-post.com/img/a/\n||phuketgazette.net/banners/\n||phuketgazette.net^*/banners/\n||phuketwan.com/img/b/\n||physorg.com^*/addetect.js\n||pickmeupnews.com/cfopop.js\n||picsee.net/clk.js\n||pinkbike.org^*/skins/\n||pinknews.co.uk/gsky.\n||pinknews.co.uk/newweb/\n||piratefm.co.uk/resources/creative/\n||pirateproxy.nl/inc/ex.js\n||pitchero.com^*/toolstation.gif\n||pittnews.com/modules/mod_novarp/\n||pixhost.org/image/fik1.jpg\n||planecrashinfo.com/images/advertize1.gif\n||planetlotus.org/images/partners/\n||play4movie.com/banner/\n||playgames2.com/ban300-\n||playgames2.com/default160x160.php\n||playgames2.com/mmoout.php\n||playgames2.com/rand100x100.php\n||playgroundmag.net^*/wallpaperpgesp_$image\n||playhd.eu^*.html|$subdocument\n||playhub.com/js/popup-wide.js\n||playlist.yahoo.com/makeplaylist.dll?$domain=au.tv.yahoo.com\n||playtowerdefensegames.com/ptdg-gao-gamebox-homepage.swf\n||plsn.com/images/PLSN-Bg1.jpg\n||plunderguide.com/leaderboard-gor.html\n||plunderguide.com/rectangle2.html\n||plundermedia.com*rectangle-\n||pmm.people.com.cn^\n||pocket-lint.com/images/bytemarkad.\n||pocketpcaddict.com/forums/images/banners/\n||pogo.com/v/*/js/ad.js\n||pokernews.com/b/\n||pokernews.com/preroll.php?\n||police-car-photos.com/pictures/sponsors/\n||policeprofessional.com/files/banners-\n||policeprofessional.com/files/pictures-\n||politicalwire.com/images/*-sponsor.jpg\n||politico.com^*_skin_\n||politicususa.com/psa/\n||politicususa.netdna-cdn.com/wp-content/uploads/shadowbox-js/$script,domain=politicususa.com\n||pons.eu^*/lingeniobanner.swf\n||pop-over.powered-by.justplayzone.com^\n||pornevo.com/events_\n||portcanaveralwebcam.com/images/ad_\n||portevergladeswebcam.com^*-Ad.jpg\n||portevergladeswebcam.com^*-WebCamBannerFall_\n||portlanddailysun.me/images/banners/\n||portmiamiwebcam.com/images/sling_\n||porttechnology.org/images/partners/\n||positivehealth.com^*/BannerAvatar/\n||positivehealth.com^*/TopicbannerAvatar/\n||postadsnow.com/panbanners/\n||postcrescent.com^*/promos/\n||postimg.org/998w2sb0b/blackops2hack.gif$domain=unknowncheats.me\n||poststar.com^*/ad_\n||poststar.com^*/dealwidget.php?\n||poststar.com^*/promos/\n||power1035fm.com^*/banners/\n||power977.com/images/banners/\n||powerbot.org^*/ads/\n||powvideo.net/ban/\n||pqarchiver.com^*/utilstextlinksxml.js\n||pr0gramm.com/wm/\n||praguepost.com/images/banners/\n||preev.com/ads|\n||preev.com/ad|\n||prehackshub.com/js/popup-wide.js\n||premierleague.com^*/sponsor_\n||preppersmallbiz.com/wp-content/uploads/*/PSB-Support.jpg\n||prepperwebsite.com/wp-content/uploads/*-250x250.jpg\n||prepperwebsite.com/wp-content/uploads/*/250x250-\n||prepperwebsite.com/wp-content/uploads/*/apmgoldmembership250x250.jpg\n||prepperwebsite.com/wp-content/uploads/*/DeadwoodStove-PW.gif\n||prepperwebsite.com/wp-content/uploads/*/FME-Red-CAP.jpg\n||prepperwebsite.com/wp-content/uploads/*/jihad.jpg\n||prepperwebsite.com/wp-content/uploads/*/PW-Ad.jpg\n||prepperwebsite.com/wp-content/uploads/*/tsepulveda-1.jpg\n||prepperwebsite.com/wp-content/uploads/*_250x150.png\n||prepperwebsite.com/wp-content/uploads/*_250x250.jpg\n||prerollads.ign.com^\n||pressrepublican.com/wallpaper/\n||primenews.com.bd/add/\n||primewire.ag/frame_header.php?$subdocument\n||printfriendly.com/a/lijit/\n||prisonplanet.com^*banner\n||pro-clockers.com/images/banners/\n||professionalmuscle.com/*banner\n||professionalmuscle.com/220x105%20ver2.gif\n||professionalmuscle.com/featured-concreter.jpg\n||professionalmuscle.com/phil1.jpg\n||professionalmuscle.com/PL2.gif\n||project-for-sell.com/_google.php\n||projectfreetv.ch/adblock/\n||projectorcentral.com/bblaster.cfm?$image\n||promo.fileforum.com^\n||propakistani.pk/data/warid_top1.html\n||propakistani.pk/data/zong.html\n||propakistani.pk/wp-content/*/warid.jpg\n||propakistani.pk/wp-content/themes/propakistani/images/776.jpg\n||propertyeu.info/peu_storage_banners/\n||proxy-list.org/img/isellsite.gif\n||proxy.org/af.html\n||proxy.org/ah.html\n||proxycape.com/blah.js\n||ps3crunch.net/forum/images/gamers/\n||psgroove.com/images/*.jpg|\n||ptf.com/fdm_frame_\n||ptf.com/js/fdm_banner.js\n||ptf.com/js/ptf_rc_*.js\n||ptf.com/js/rc_banner.js\n||publichd.eu/images/direct.download.ico\n||publichd.eu/images/directdownload.png\n||publicityupdate.co.za/temp/banner_\n||publicradio.org^*/banners/\n||publicservice.co.uk^*/spons_\n||pulsetv.com/banner/\n||pumasrugbyunion.com/images/sponsors/\n||punch.cdn.ng^*/wp-banners/\n||punchng.com^*/wp-banners/\n||punksbusted.com/images/ventrilo/\n||punksbusted.com^*/clanwarz-portal.jpg\n||pushsquare.com/wp-content/themes/pushsquare/skins/\n||putlocker.is/images/banner\n||putlocker.mn^*/download.gif\n||putlocker.mn^*/stream-hd.gif\n||pv-tech.org/images/footer_logos/\n||pv-tech.org/images/suntech_m2fbblew.png\n||q1075.com/images/banners/\n||qatar-tribune.com/images/banners/\n||qiksilver.net^*/banners/\n||qrz.com/pix/*.gif\n||qualityhealth.com^*/banner.jsp?\n||queenshare.com/popx.js\n||quickmeme.com/media/rostile\n||quickpwn.com^$subdocument\n||quicksilverscreen.com/img/moviesforfree.jpg\n||quoteland.com/images/banner2.swf\n||race-dezert.com/images/wrap-\n||race-dezert.com^*/sponsor-\n||racingpost.com/ads/\n||racingpost.com^*_607x30.2.0.gif\n||racinguk.com/images/site/foot_\n||rackcdn.com/*Rails_$domain=accesshollywood.com\n||rackcdn.com/*skin-$domain=pcgamesn.com\n||rad.microsoft.com^\n||rad.msn.com^\n||radio-riverside.co.za/modules/mod_novarp/tmpl/pjmr.swf?\n||radio.com/rotatable?\n||radio4fm.com/images/background/\n||radio4fm.com/promotion/\n||radio786.co.za/images/banners/\n||radioasiafm.com^*-300x250.\n||radiocaroline.co.uk/swf/ACET&ACSP_RadioCaroline_teg.swf\n||radioinfo.com/270x270/\n||radioinfo.com^*/575x112-\n||radioloyalty.com/newPlayer/loadbanner.html?\n||radioreference.com/i/p4/tp/smPortalBanner.gif\n||radioreference.com^*_banner_\n||radiotoday.co.uk/a/\n||radiowave.com.na/images/banners/\n||radiowavesforum.com/rw/radioapp.gif\n||radiozindagi.com/sponsors/\n||ragezone.com/index.php/$subdocument\n||ragezone.com/output.php/\n||rapidfiledownload.com^*/btn-input-download.png\n||rapidgamez.com/images/\n||rapidgator.net/images/banners/\n||rapidlibrary.com/baner*.png\n||rapidlibrary.com/banner_*.png\n||rapidsafe.de/eislogo.gif\n||rapidshare.com/promo/$image\n||rapidtvnews.com^*BannerAd.\n||rapidvideo.org/images/pl_box_rapid.jpg\n||rapidvideo.tv/images/pl.jpg\n||ratio-magazine.com/images/banners/\n||ravchat.com/img/reversephone.gif\n||rawstory.com/givememyrawgfp.php?\n||rawstory.com/givememyrawgfpdirect.php?\n||rawstory.com/givememyrawjuggler.php\n||rawstory.com^*.php?code=bottom\n||rawstory.com^*/ads/\n||raysindex.com/wp-content/uploads/*/dolmansept2012flash.swf\n||readingeagle.com/lib/dailysponser.js\n||realitytvworld.com/burst.js\n||realitytvworld.com/includes/rtvw-jscript.js\n||reason.org/UserFiles/web-fin1.gif\n||red.bayimg.net^\n||reddit.com^*_sponsor.png?\n||rediff.com/worldrediff/pix/$subdocument\n||rednationonline.ca/Portals/0/derbystar_leaderboard.jpg\n||redpepper.org.uk/ad-\n||redvase.bravenet.com^\n||reelzchannel.com^*-skin-\n||regmender.com^*/banner336x280.\n||regnow.img.digitalriver.com/vendor/37587/ud_box$third-party\n||rejournal.com/images/banners/\n||rejournal.com/users/blinks/\n||rejournal.com^*/images/homepage/\n||releaselog.net/468.htm\n||releaselog.net/uploads2/656d7eca2b5dd8f0fbd4196e4d0a2b40.jpg\n||relink.us/js/ibunkerslide.js\n||replacementdocs.com^*/popup.js\n||retrevo.com/m/google?q=\n||retrevo.com^*/pcwframe.jsp?\n||reviewcentre.com/cinergy-adv.php\n||revisionworld.co.uk/sites/default/files/imce/Double-MPU2-v2.gif\n||rfu.com/js/jquery.jcarousel.js\n||rghost.ru/download/a/*/banner_download_\n||richardroeper.com/assets/banner/\n||richmedia.yimg.com^\n||riderfans.com/other/\n||rightsidenews.com/images/banners/\n||rislivetv.com/ad*.php\n||rlsbb.com/wp-content/uploads/izilol.gif\n||rlsbb.com/wp-content/uploads/smoke.jpg\n||rockettheme.com/aff/\n||rocksound.tv/images/uploads/*-rocksound-1920x1000_\n||rocktelevision.com^*_banner_\n||rockthebells.net/images/banners/\n||rockthebells.net/images/bot_banner_\n||rocvideo.tv/pu/$subdocument\n||rodfile.com/images/esr.gif\n||roia.com^\n||rok.com.com/rok-get?\n||rollingstone.co.za/images/banners/\n||rom-freaks.net/popup.php\n||romhustler.net/square.js\n||rootsweb.com/js/o*.js\n||roseindia.net^*/banners/\n||rough-polished.com/upload/bx/\n||routerpasswords.com/routers.jpg\n||routes-news.com/images/banners/\n||routesonline.com/banner/\n||rpgwatch.com^*/banner/\n||rpt.anchorfree.net^\n||rsbuddy.com/campaign/\n||rss2search.com/delivery/\n||rt.com/banner/\n||rt.com/static/img/banners/\n||rtcc.org/systems/sponsors/\n||rubiconproject.com^$domain=optimized-by.rubiconproject.com\n||rugbyweek.com^*/sponsors/\n||runt-of-the-web.com/wrap1.jpg\n||russianireland.com/images/banners/\n||s.imwx.com^*/wx-a21-plugthis.js\n||s.yimg.com^*/audience/\n||saabsunited.com/wp-content/uploads/*-banner-\n||saabsunited.com/wp-content/uploads/*-banner.\n||saabsunited.com/wp-content/uploads/*_banner_\n||saabsunited.com/wp-content/uploads/180x460_\n||saabsunited.com/wp-content/uploads/ban-\n||saabsunited.com/wp-content/uploads/rbm21.jpg\n||saabsunited.com/wp-content/uploads/REALCAR-SAABSUNITED-5SEC.gif\n||saabsunited.com/wp-content/uploads/USACANADA.jpg\n||saabsunited.com/wp-content/uploads/werbung-\n||sacbee.com/static/dealsaver/\n||sacommercialpropnews.co.za/files/banners/\n||saf.org/wp-content/uploads/*/theGunMagbanner.png\n||saf.org/wp-content/uploads/*/women_guns192x50.png\n||safelinks.eu/open.js\n||sagoodnews.co.za/templates/ubuntu-deals/\n||salfordonline.com/sponsors/\n||salfordonline.com/sponsors2/\n||sameip.org/images/froghost.gif\n||samoaobserver.ws^*/banner/\n||samoatimes.co.nz^*/banner468x60/\n||sapeople.com/wp-content/uploads/wp-banners/\n||sarasotatalkradio.com^*-200x200.jpg\n||sarugbymag.co.za^*-wallpaper2.\n||sat24.com/bannerdetails.aspx?\n||satelliteguys.us/burst_\n||satelliteguys.us/pulsepoint_\n||satellites.co.uk/images/sponsors/\n||satnews.com/images/MITEQ_sky.jpg\n||satnews.com/images/MSMPromoSubSky.jpg\n||satopsites.com^*/banners/\n||savefrom.net/img/a1d/\n||saveondish.com/banner2.jpg\n||saveondish.com/banner3.jpg\n||sawlive.tv/ad\n||sayellow.com/Clients/Banners/\n||saysuncle.com^*ad.jpg\n||sbnation.com/campaigns_images/\n||scenicreflections.com/dhtmlpopup/\n||sceper.eu/wp-content/banners.min.js\n||schenkelklopfer.org^$domain=4fuckr.com\n||scientopia.org/public_html/clr_lympholyte_banner.gif\n||scmagazine.com.au/Utils/SkinCSS.ashx?skinID=\n||scoop.co.nz/xl?c$subdocument\n||scoot.co.uk/delivery.php\n||screen4u.net/templates/banner.html\n||screenafrica.com/jquery.jcarousel.min.js\n||screencrave.com/show/\n||screenlist.ru/dodopo.js\n||screenlist.ru/porevo.js\n||scribol.com/broadspring.js\n||scriptcopy.com/tpl/phplb/search.jpg\n||scriptmafia.org/banner.gif\n||search-torrent.com/images/videox/\n||search.ch/acs/\n||search.ch/htmlbanner.html\n||search.triadcareers.news-record.com/jobs/search/results?*&isfeatured=y&\n||search.triadcars.news-record.com/autos/widgets/featuredautos.php\n||searchenginejournal.com^*-takeover-\n||searchenginejournal.com^*/sej-bg-takeover/\n||searchenginejournal.com^*/sponsored-\n||searchignited.com^\n||searchtempest.com/clhimages/aocbanner.jpg\n||seatguru.com/deals?\n||seclists.org/shared/images/p/$image\n||sectools.org/shared/images/p/$image\n||secureupload.eu/gfx/dlbtn.png\n||secureupload.eu/gfx/freedl.png\n||secureupload.eu/js/poad.js\n||securitymattersmag.com/scripts/popup.js\n||securitywonks.net/promotions/\n||sedo.cachefly.net^$domain=~sedoparking.com\n||sedoparking.com/images/js_preloader.gif\n||sedoparking.com/jspartner/\n||sedoparking.com/registrar/dopark.js\n||seedboxes.cc/images/seedad.jpg\n||seeingwithsound.com/noad.gif\n||segmentnext.com/javascripts/interstitial.client.js\n||sendspace.com/defaults/framer.html?z=\n||sendspace.com/images/shutter.png\n||sendspace.com^*?zone=\n||sensongs.com/nfls/\n||serial.sw.cracks.me.uk/img/logo.gif\n||serials.ws^*/logo.gif\n||serialzz.us/ad.js\n||sermonaudio.com/images/sponsors/\n||sexmummy.com/avnadsbanner.\n||sfbaytimes.com/img-cont/banners\n||sfltimes.com/images/banners/\n||sfx.ms/AppInsights-$script\n||shadowpool.info/images/banner-\n||shanghaidaily.com/include/bettertraffic.asp\n||shanghaiexpat.com^*/wallpaper_\n||share-links.biz/get/cmm/\n||share-links.biz^*/hisp.gif\n||share-links.biz^*/hs.gif\n||sharebeast.com/topbar.js\n||sharephile.com/js/pw.js\n||sharesix.com/a/images/watch-bnr.gif\n||sharetera.com/images/icon_download.png\n||sharetera.com/promo.php?\n||sharkscope.com/images/verts/$image\n||sherdog.com/index/load-banner?\n||shodanhq.com/images/s/acehackware-obscured.jpg\n||shop.com/cc.class/dfp?\n||shop.sportsmole.co.uk/pages/deeplink/\n||shopping.stylelist.com/widget?\n||shoppingpartners2.futurenet.com^\n||shops.tgdaily.com^*&widget=\n||shopwiki.com/banner_iframe/\n||shortcuts.search.yahoo.com^*&callback=yahoo.shortcuts.utils.setdittoadcontents&\n||shortlist.com/resource/cache/*skin\n||shortlist.com^*-takeover.\n||shoutmeloud.com^*/hostgator-\n||show-links.tv/layer.php\n||showbusinessweekly.com/imgs/hed/\n||showstreet.com/banner.\n||shroomery.org/bimg/\n||shroomery.org/bnr/\n||shroomery.org/images/shroomery.please.png\n||shroomery.org/images/www.shroomery.org.please.png\n||shtfplan.com/images/banners/\n||siberiantimes.com/upload/banners/\n||sicilianelmondo.com/banner/\n||sickipedia.org/static/images/banners/\n||sidereel.com^*/featured_logo/\n||sify.com/images/games/gadvt/\n||sify.com^*/gads_\n||sigalert.com/getunit.asp?$subdocument\n||siliconrepublic.com/fs/img/partners/\n||silverdoctors.com^*/Silver-Shield-2015.jpg\n||sisters-magazine.com^*/Banners/\n||sitedata.info/doctor/\n||sitesfrog.com/images/banner/\n||siteslike.com/images/celeb\n||siteslike.com/js/fpa.js\n||sk-gaming.com/image/acersocialw.gif\n||sk-gaming.com/image/pts/\n||sk-gaming.com/www/skdelivery/\n||skynews.com.au/elements/img/sponsor/\n||skysports.com/images/skybet.png\n||skyvalleychronicle.com/999/images/ban\n||slacker.com/wsv1/getspot/?$object-subrequest\n||slacker.com^*/adnetworks.swf\n||slacker.com^*/ads.js\n||slacker.com^*/getspot/?spotid=\n||slashgear.com/static/banners/\n||slayradio.org/images/c64audio.com.gif\n||slickvid.com/js/fun.js\n||slickvid.com/js/fun2.js\n||slyck.com/pics/*304x83_\n||smartcompany.com.au/images/stories/sponsored-posts/\n||smartearningsecrets.com^*/FameThemes.png\n||smartmoney.net^*-sponsor-\n||smartname.com/scripts/google_afd_v2.js\n||smashingapps.com/banner/\n||smh.com.au/compareandsave/\n||smh.com.au/images/promo/\n||smile904.fm/images/banners/\n||smn-news.com/images/banners/\n||smn-news.com/images/flash/\n||smoothjazznetwork.com/images/buyicon.jpg\n||smotrisport.com/ads/\n||smwcentral.net/html/$image\n||snimg.com/image/sponsors/\n||snopes.com/common/include/$subdocument\n||snopes.com^*/casalebanner.asp\n||snopes.com^*/casalebox.asp\n||snopes.com^*/casalesky.asp\n||snopes.com^*/tribalbox.asp\n||soccerlens.com/files1/\n||soccervista.com/bahforgif.gif\n||soccervista.com/bonus.html\n||soccervista.com/sporting.gif\n||soccerway.com/buttons/120x90_\n||soccerway.com/img/betting/\n||socialstreamingplayer.crystalmedianetworks.com//async/banner/\n||sockshare.com/*.php?embed*type=$subdocument\n||sockshare.com/moo.php\n||sockshare.com/rev/\n||sockshare.com^*.php?*title$subdocument\n||sockshare.com^*_728.php\n||socsa.org.za/images/banners/\n||softcab.com/google.php?\n||softonic.com/specials_leaderboard/\n||softpedia-static.com/images/*.jpg?v\n||softpedia-static.com/images/*.png?v\n||softpedia-static.com/images/aff/\n||softpedia-static.com/images/afg/\n||softpedia-static.com/images/afh/$domain=softpedia.com\n||soldierx.com/system/files/images/sx-mini-1.jpg\n||solomonstarnews.com/images/banners/\n||solvater.com/images/hd.jpg\n||someecards.com^*/images/skin/\n||songs.pk/textlinks/\n||songspk.link/textlinks/\n||songspk.name/fidelity.html$domain=songs.pk|songspk.name\n||songspk.name/imagepk.gif\n||songspk.name/textlinks/\n||sootoday.com/uploads/banners/\n||sorcerers.net/images/aff/\n||soundcloud.com/audio-ad?\n||soundcloud.com/promoted/\n||soundspheremag.com/images/banners/\n||soundtracklyrics.net^*_az.js\n||sourcefed.com/wp-content/uploads/*/netflix4.jpg\n||sourceforge.net/images/ban/\n||southafricab2b.co.za/banners/\n||sowetanlive.co.za/banners/\n||space.com/promo/\n||spaceweather.com/abdfeeter/$image\n||spartoo.eu/footer_tag_iframe_\n||spcontentcdn.net^$domain=sporcle.com\n||speedtest.net/flash/59rvvrpc-$object-subrequest\n||speedtest.net/flash/60speedify1-$object-subrequest\n||speedtv.com.edgesuite.net/img/monthly/takeovers/\n||speedtv.com/js/interstitial.js\n||speedtv.com^*/tissot-logo.png\n||speedvid.net/ad.htm\n||speedvideo.net/img/playerFk.gif\n||speroforum.com/images/sponsor_\n||spicegrenada.com/images/banners/\n||sponsors.s2ki.com^\n||sponsors.webosroundup.com^\n||sporcle.com/adn/yak.php?\n||sportcategory.com/ads/\n||spotflux.com/service/partner.php\n||spreaker.net/spots/\n||sptimes.ru/clients/banners_\n||spycss.com/images/hostgator.gif\n||spyw.com^$domain=uploadlw.com\n||squadedit.com/img/peanuts/\n||srv.thespacereporter.com^\n||ssl-images-amazon.com/images/*/browser-scripts/da-\n||st701.com/stomp/banners/\n||stad.com/googlefoot2.php?\n||stagnitomedia.com/view-banner-\n||standard.net/sites/default/files/images/wallpapers/\n||standardmedia.co.ke/flash/expandable.swf\n||star883.org^*/sponsors.\n||startxchange.com/bnr.php\n||static-economist.com^*/timekeeper-by-rolex-medium.png\n||static.btrd.net/*/interstitial.js$domain=businessweek.com\n||static.ec.own3d.tv/lr/$object-subrequest\n||static.hd-trailers.net/js/javascript_*.js|\n||static.nfl.com^*-background-\n||static.plista.com^$script,domain=wg-gesucht.de\n||staticneo.com/neoassets/iframes/leaderboard_bottom.\n||staticworld.net/images/*_pcwskin_\n||steambuy.com/steambuy.gif\n||sternfannetwork.com/forum/images/banners/\n||steroid.com/banner/\n||steroid.com/dsoct09.swf\n||sticker.yadro.ru/ad/\n||stjohntradewindsnews.com/images/banners/\n||stltoday.com^*_sponsor.gif\n||stlyrics.com^*_az.js\n||stlyrics.com^*_st.js\n||stockhouse.com^*-300x75.gif\n||stopforumspam.com/img/snelserver.swf\n||stopstream.com/ads/\n||storewidget.pcauthority.com.au^\n||strategypage.com^*_banner\n||stream.heavenmedia.net^\n||stream2watch.me/600pick.png\n||stream2watch.me/900rev.html\n||stream2watch.me/900yahoo.html\n||stream2watch.me/_$subdocument\n||stream2watch.me/ad.html\n||stream2watch.me/ad10.html\n||stream2watch.me/chat1.html\n||stream2watch.me/eadb.php\n||stream2watch.me/eadt.php\n||stream2watch.me/ed\n||stream2watch.me/images/hd1.png\n||stream2watch.me/Los_Br.png\n||stream2watch.me/yield.html\n||streamcloud.eu/deliver.php\n||student-jobs.co.uk/banner.\n||stuff.co.nz/1319769787/395/5871395.jpg\n||stuff.co.nz/1361239022/107/8323107.jpg\n||stuff.co.nz/clientdev/production/iframes/\n||stuff.co.nz/stuff/*banner\n||stuff.co.nz/stuff/misc/flying-flowers/\n||stuff.co.nz/stuff/tom/mags-widget/\n||stuff.co.nz/stuff/widgets/lifedirect/\n||stuff.priceme.co.nz^$domain=stuff.co.nz\n||stuff.tv/client/skinning/\n||stv.tv/img/player/stvplayer-sponsorstrip-\n||subs4free.com^*/wh4_s4f_$script\n||succeed.co.za^*/banner_\n||sulekha.com^*/bannerhelper.html\n||sulekha.com^*/sulekhabanner.aspx\n||sun-fm.com/resources/creative/\n||sunriseradio.com/js/rbanners.js\n||sunshineradio.ie/images/banners/\n||suntimes.com^*/banners/\n||superbike-news.co.uk/absolutebm/banners/\n||supermarket.co.za/images/advetising/\n||supermonitoring.com/images/banners/\n||superplatyna.com/automater.swf\n||surfthechannel.com/promo/\n||swagmp3.com/cdn-cgi/pe/\n||swampbuggy.com/media/images/banners/\n||swedishwire.com/images/banners/\n||sweepsadvantage.com/336x230-2.php\n||swiftco.net/banner/\n||swimnews.com^*/banner_\n||swimnewslibrary.com^*_960x120.jpg\n||swoknews.com/images/banners/\n||sxc.hu/img/banner\n||sydneyolympicfc.com/admin/media_manager/media/mm_magic_display/$image\n||systemexplorer.net/sessg.php\n||sythe.org/bnrs/\n||sythe.org/clientscript/agold.png\n||tabla.com.sg/SIA.jpg\n||tabloidmedia.co.za/images/signs2.swf\n||taipeitimes.com/js/gad.js?\n||taiwannews.com.tw/etn/images/banner_\n||take40.com/css/takeover.css\n||take40.com/images/takeover/\n||talkers.com/imagebase/\n||talkers.com/images/banners/\n||talkgold.com/bans/\n||talkphotography.co.uk/images/externallogos/banners/\n||talkradioeurope.com/images/banners/\n||talkradioeurope.net/images/banners/\n||talksport.co.uk^*/ts_takeover/\n||tampermonkey.net/bner/\n||tampermonkey.net^*.*.$subdocument\n||tanzanite.infomine.com^\n||targetedinfo.com^\n||targetedtopic.com^\n||tastro.org/x/ads*.php\n||tbs.com^*/ad_policy.xml$object-subrequest,domain=tbs.com\n||tdfimg.com/go/*.html\n||teamfourstar.com/img/918thefan.jpg\n||techexams.net/banners/\n||techhive.com/ads/\n||technewsdaily.com/crime-stats/local_crime_stats.php\n||technewsworld.com/images/sda/\n||technomag.co.zw^*/TakeOverCampaign.\n||techpowerup.com/images/bnnrs/\n||techradar.com^*/img/*_takeover_\n||techsonia.com/cdn-cgi/pe/bag2?r[]=*.content.ad\n||techsupportforum.com^*/banners/\n||techtarget.com^*/leaderboard.html\n||techtree.com^*/jquery.catfish.js\n||teesoft.info/images/uniblue.png\n||teesupport.com/wp-content/themes/ts-blog/images/cp-\n||tehrantimes.com/images/banners/\n||telecomtiger.com^*_250x250_\n||telecomtiger.com^*_640x480_\n||telegraph.co.uk/international/$subdocument\n||telegraph.co.uk/sponsored/\n||telegraphindia.com^*/banners/\n||telegraphindia.com^*/hoabanner.\n||templatesbox.com^*/banners/\n||ten-tenths.com/sidebar.html\n||tenmanga.com/files/js/manga_$subdocument\n||tenmanga.com/files/js/site_skin.js\n||tennischannel.com/prud.jpg\n||tennischannel.com/tc-button-gif.gif\n||tennisworldusa.org/banners/\n||tentonhammer.com^*/takeovers/\n||terafile.co/i/banners/\n||testseek.com/price_pricegrabber_\n||textpattern.com/images/117.gif\n||thaivisa.com/promotions/banners/\n||the-numbers.com^*/allposters/\n||theactivetimes.net^*/featured_partners/\n||theafricachannel.com^*/promos/\n||theaquarian.com^*/banners/\n||theartnewspaper.com/aads/\n||theasiantoday.com/image/banners/\n||theattractionforums.com/images/rbsbanners/\n||thebay.co.uk/banners/\n||thebeat99.com/cmsadmin/banner/\n||theblaze.com^*-background-\n||theblaze.com^*-background2-\n||theblaze.com^*-backgroundwide-\n||theblaze.com^*-interstitial-\n||thebull.com.au/admin/uploads/banners/\n||thebulls.co.za^*/sponsors/\n||theburningplatform.com/wp-content/uploads/*_180x150.gif\n||thebusinessdesk.com/assets/_files/banners/\n||thecatholicuniverse.com^*-ad.\n||thecatholicuniverse.com^*-advert-\n||thecatholicuniverse.com^*-banner-\n||thecenturion.co.za^*/banners/\n||thecharlottepost.com/cache/sql/fba/\n||thechive.files.wordpress.com^*-wallpaper-\n||thecitizen.co.tz^*/banners/\n||thecnj.com/images/hotel-banner.jpg\n||thecorrsmisc.com/10feet_banner.gif\n||thecorrsmisc.com/brokenthread.jpg\n||thecorrsmisc.com/msb_banner.jpg\n||thecsuite.co.uk^*/banners/\n||thedailyherald.com/images/banners/\n||thedailymash.co.uk/templates/mashtastic/gutters/\n||thedailymeal.com^*_sponsoredby.png\n||thedailymeal.net^*/featured_partners/\n||thedailypaul.com/images/amzn-\n||thedailysheeple.com/images/banners/\n||thedailystar.net^*/400-x-120-pixel.jpg\n||thedailystar.net^*/Animation-200-X-30.gif\n||thedailystar.net^*/aritel-logo.jpg\n||thedailystar.net^*/scbbd.gif\n||theday.com/assets/images/sponsorlogos/\n||thedomainstat.com/filemanager/userfiles/banners/\n||theedinburghreporter.co.uk/hmbanner/\n||theenglishgarden.co.uk^*/bannerImage.\n||thefile.me^*.php?*zoneid\n||thefrontierpost.com/media/banner/\n||thehealthcareblog.com/files/*/American-Resident-Project-Logo-\n||thehealthcareblog.com/files/*/athena-300.jpg\n||thehealthcareblog.com/files/*/THCB-Validic-jpg-opt.jpg\n||thehighstreetweb.com^*/banners/\n||thehindu.com/multimedia/*/sivananda_sponsorch_\n||theispguide.com/premiumisp.html\n||theispguide.com/topbanner.asp?\n||thejesperbay.com^\n||thejointblog.com/wp-content/uploads/*-235x\n||thejointblog.com^*/dablab.gif\n||thejuice.co.za/wp-content/plugins/wp-plugin-spree-tv/\n||thelakewoodscoop.com^*banner\n||theleader.info/banner\n||theliberianjournal.com/flash/banner\n||thelocal.com/scripts/fancybox/\n||thelodownny.com/leslog/ads/\n||thelyricarchive.com/new/view/\n||themag.co.uk/assets/BV200x90TOPBANNER.png\n||themidweeksun.co.bw/images/banners/\n||theminiforum.co.uk/images/banners/\n||themis-media.com/media/global/images/cskins/\n||themis.yahoo.com^\n||themiscellany.org/images/banners/\n||themittani.com/sites/*-skin\n||thenassauguardian.com/images/banners/\n||thenationonlineng.net^*/banners/\n||thenewage.co.za/Image/kingprice.gif\n||thenewjournalandguide.com/images/banners/\n||thenextweb.com/wp-content/plugins/tnw-siteskin/mobileys/\n||thenonleaguefootballpaper.com^*-140x300-\n||thenonleaguefootballpaper.com^*/140x140_\n||thenonleaguefootballpaper.com^*/ADIDAS_11PRO_WHITEOUT.jpg\n||thenonleaguefootballpaper.com^*/Budweiser.jpg\n||thenonleaguefootballpaper.com^*/image-non-league.jpeg\n||thenonleaguefootballpaper.com^*/J4K-new-range-pictures.jpg\n||thenonleaguefootballpaper.com^*/Lovell-Soccer.jpg\n||theoldie.co.uk/Banners/\n||theolympian.com/static/images/weathersponsor/\n||theonion.com/ads/\n||theorganicprepper.ca/images/banners/\n||thepaper24-7.com/SiteImages/Banner/\n||thepaper24-7.com/SiteImages/Tile/\n||thepeak.fm/images/banners/\n||thepeninsulaqatar.com^*/banners/\n||thephuketnews.com/photo/banner/\n||thepiratebay.se^*/poptest.js\n||theplanetweekly.com/images/banners/\n||theportugalnews.com/uploads/banner/\n||thepreparednessreview.com/wp-content/uploads/*/250x125-\n||thepreparednessreview.com/wp-content/uploads/*_175x175.jpg\n||thepreparednessreview.com/wp-content/uploads/*_185x185.jpg\n||theradiomagazine.co.uk/banners/\n||theradiomagazine.co.uk/images/bionics.jpg\n||therugbyforum.com/trf-images/sponsors/\n||thesentinel.com^*/banners/\n||thesource.com/magicshave/\n||thespiritsbusiness.com^*/Banner150\n||thessdreview.com/wp-content/uploads/*/930x64_\n||thessdreview.com^*-bg.jpg\n||thessdreview.com^*/owc-full-banner.jpg\n||thessdreview.com^*/owc-new-gif1.gif\n||thestandard.com.hk/banners/\n||thestandard.com.hk/rotate_\n||thestkittsnevisobserver.com/images/banners/\n||thesundaily.my/sites/default/files/twinskyscrapers\n||thesurvivalistblog.net^*-banner-\n||thesweetscience.com/images/banners/\n||theticketmiami.com/Pics/listenlive/*-Left.jpg\n||theticketmiami.com/Pics/listenlive/*-Right.jpg\n||thetimes.co.uk/public/encounters/\n||thetvdb.com/images/frugal.gif\n||thetvdb.com/images/jriver_banner.png\n||thevideo.me/cgi-bin/get_creatives.cgi?\n||thevideo.me/creatives/\n||thewb.com/thewb/swf/tmz-adblock/\n||thewindowsclub.com^*/banner_\n||theyeshivaworld.com/yw/\n||thinkbroadband.com/uploads/banners/\n||thinkingwithportals.com/images/*-skyscraper.\n||thinkingwithportals.com^*-skyscraper.swf\n||thirdage.com^*_banner.php\n||thisisanfield.com^*takeover\n||thunder106.com//wp-content/banners/\n||ticketnetwork.com/images/affiliates/\n||tigerdroppings.com^*&adcode=\n||time4tv.com/tlv.\n||timeinc.net/*/i/oba-compliance.png\n||timeinc.net^*/recirc.js\n||times-herald.com/pubfiles/\n||times.co.sz/files/banners/\n||timesnow.tv/googlehome.cms\n||timesofoman.com/FrontInc/top.aspx\n||timesofoman.com/siteImages/MyBannerImages/\n||timesofoman.com^*/banner/\n||timestalks.com/images/sponsor-\n||tindleradio.net/banners/\n||tinychat.com/channel?frame=true&$subdocument,domain=tinypaste.com\n||tinypaste.com/public/images/480.png\n||tinyurl.com/firefox_banner_\n||titanshare.to/images/buttons/download.gif\n||titantorrent.to^*/buttons/download.gif\n||titantv.com/gravity.ashx\n||tmcs.net^\n||tmz.vo.llnwd.net^*/images/*skin\n||tmz.vo.llnwd.net^*/sponsorship/$domain=tmz.com\n||tnij.org/rotator\n||tny.cz/oo/\n||tom.itv.com^\n||tomshardware.com/indexAjax.php?ctrl=ajax_pricegrabber$xmlhttprequest\n||tomshardware.com/price/widget/?$xmlhttprequest\n||toolslib.net/assets/img/a_dvt/\n||toomuchnews.com/dropin/\n||toonova.com/images/site/front/xgift-\n||toonzone.net^*/placements.php?\n||topalternate.com/assets/sponsored_links-\n||topfriv.com/popup.js\n||topix.com/ajax/krillion/\n||toptenreviews.com/flash/\n||torrent-finder.info/cont.html\n||torrent-finder.info/cont.php\n||torrent.cd/images/banner-\n||torrent.cd/images/big_use.gif\n||torrent.cd/images/main_big_msoft.jpg\n||torrent.cd/images/sp/\n||torrentbit.net/images/1click/button-long.png\n||torrentbox.sx/img/download_direct.png\n||torrentcrazy.com/img/wx.png\n||torrentcrazy.com/pnd.js\n||torrenteditor.com/img/graphical-network-monitor.gif\n||torrentfreak.com/images/vuze.png\n||torrentfunk.com/affprofslider.js\n||torrentfusion.com/FastDownload.html\n||torrentproject.org/out/\n||torrentroom.com/js/torrents.js\n||torrents.net/btguard.gif\n||torrents.net/wiget.js\n||torrentv.org/images/tsdd.jpg\n||torrentv.org/images/tsdls.jpg\n||torrentz.*/mgid/\n||totalcmd.pl/img/billboard_\n||totalcmd.pl/img/nucom.\n||totalcmd.pl/img/olszak.\n||totalguitar.net/images/*_125X125.jpg\n||totalguitar.net/images/tgMagazineBanner.gif\n||toucharcade.com/wp-content/themes/*_background_*.jpg\n||toucharcade.com/wp-content/themes/skin_zero/images/skin_assets/main_skin.jpg\n||toucharcade.com/wp-content/uploads/skins/\n||townhall.com^*/ads/\n||toynews-online.biz/media/banners/\n||toynewsi.com/a/\n||toywiz.com/lower-caption-global.html\n||tpb.piraten.lu/static/img/bar.gif\n||tpucdn.com/images/b/$domain=techpowerup.com\n||tracking.hostgator.com^\n||trackitdown.net/skins/*_campaign/\n||tracksat.com^*/banners/\n||tradewinds.vi/images/banners/\n||trgoals.es/adk.html\n||tribune.com.ng/images/banners/\n||tribune242.com/pubfiles/\n||tripadvisor.*/adp/adp-$subdocument\n||tripadvisor.com/adp/\n||tripadvisor.com^*/skyscraper.jpg\n||truck1.eu/_BANNERS_/\n||trucknetuk.com^*/sponsors/\n||trucktrend.com^*_160x200_\n||trustedreviews.com/mobile/widgets/html/promoted-phones?\n||trutv.com/includes/mods/iframes/mgid-blog.php\n||tsatic-cdn.net/takeovers/$image\n||tsdmemphis.com/images/banners/\n||tsn.ca^*_sponsor.\n||tubehome.com/imgs/undressme\n||tubeplus.me/resources/js/codec.js\n||tullahomanews.com/news/banners/\n||tullahomanews.com/news/tn-popup.js\n||tune.pk/plugins/cb_tunepk/ads/\n||turbobit.net/js/acontrol.js?\n||turbobit.net/oexktl/muzebra_\n||turbobit.net/pics/7z1xla23ay_\n||turboimagehost.com/300*.html^\n||turboimagehost.com/728*.html^\n||turboimagehost.com/p.js\n||turboyourpc.com/images/affiliates/\n||turnstylenews.com^*/sponsors.png\n||tusfiles.net/i/dll.png\n||tusfiles.net/images/tusfilesb.gif\n||tuspics.net/onlyPopupOnce.js\n||tv4chan.com/iframes/\n||tvbrowser.org/logo_df_tvsponsor_\n||tvcatchup.com/wowee/\n||tvducky.com/imgs/graboid.\n||tvguide.com^*/ecommerce/\n||tvsubtitles.net/banners/\n||tweaktown.com/cms/includes/i*.php\n||twentyfour7football.com^*/gpprint.jpg\n||twitch.tv/ad/*=preroll\n||twitch.tv/widgets/live_embed_player.swf$domain=gelbooru.com\n||twnmm.com^*/sponsored_logo.\n||txfm.ie^*/amazon-16x16.png\n||txfm.ie^*/itunes-16x16.png\n||u.tv/images/misc/progressive.png\n||u.tv/images/sponsors/\n||u.tv/utvplayer/jwplayer/ova.swf\n||ua.badongo.com^\n||uberhumor.com/*btf.html$subdocument\n||uberhumor.com/iframe$subdocument\n||ubuntugeek.com/images/dnsstock.png\n||ubuntugeek.com/images/od.jpg\n||ubuntugeek.com/images/ubuntu1.png\n||ufonts.com/gfx/uFonts_Banner5.png\n||ugo.com/takeover/\n||uimserv.net^\n||ujfm.co.za/images/banners/\n||uk-mkivs.net/uploads/banners/\n||ukbusinessforums.co.uk/adblock/\n||ukcampsite.co.uk/banners/\n||ukcast.co/pubfit.php\n||ukcast.co/rbt728.php\n||ukfindit.com/images/*_125x125.gif\n||ukfindit.com/wipedebtclean.png\n||ukradioplayer.kerrangradio.co.uk^*/icon_amazon.png\n||ukradioplayer.kerrangradio.co.uk^*/icon_apple.png\n||ultimate-guitar.com/_img/bgd/bgd_main_\n||ultimate-guitar.com/_img/promo/takeovers/\n||ultimate-guitar.com/bgd/main_$image\n||ultimate-guitar.com^*/takeover/\n||ultimatehandyman.co.uk/ban.txt\n||ultimatehandyman.org/bh1.gif\n||ultimatewindowssecurity.com/images/banner80x490_WSUS_FreeTool.jpg\n||ultimatewindowssecurity.com/images/patchzone-resource-80x490.jpg\n||ultimatewindowssecurity.com/images/spale.swf\n||ultimatewindowssecurity.com/securitylog/encyclopedia/images/allpartners.swf\n||umbrelladetective.com/uploaded_files/banners/\n||unawave.de/medien/a/w-ama-$image\n||unawave.de/medien/ama/$image\n||unawave.de/medien/wbwso-$image\n||unawave.de/templates/unawave/a/$image\n||unblockedpiratebay.com/external/$image\n||unblockt.com/scrape_if.php\n||uncoached.com/smallpics/ashley\n||unicast.ign.com^\n||unicast.msn.com^\n||uniindia.com/eng/bannerbottom.php\n||uniindia.com/eng/bannerheader.php\n||uniindia.com/eng/bannerrightside.php\n||uniindia.com/eng/banners/\n||uniindia.com/eng/bannertopright.php\n||uniindia.net/eng/banners/\n||uniquefm.gm/images/banners/\n||universalhub.com/bban/\n||upload.ee/image/*/B_descarga_tipo12.gif\n||uploadbaz.com^*-728-$object\n||uploadcore.com/images/*-Lad.jpg\n||uploadcore.com/images/*-mad.jpg\n||uploadcore.com/images/*-Rad.png\n||uploaded.net/js2/downloadam.js\n||uploaded.to/img/e/ad/\n||uploading.com/static/banners/\n||uploadlw.com/js/cash.js\n||uploadlw.com^*/download-now\n||uploadlw.com^*/download_button.gif\n||uptobox.com/ayl.js\n||uptobox.com/images/download.png\n||uptobox.com/images/downloaden.gif\n||urbanchristiannews.com/ucn/sidebar-\n||urbanfonts.com/images/fonts_com/\n||urbanvelo.org/sidebarbanner/\n||urethanes-technology-international.com^*/banners/\n||urlcash.net/newpop.js\n||urlcash.net/random*.php\n||urlcash.org/abp/\n||urlcash.org/banners/\n||urlcash.org/newpop.js\n||urlgone.com^*/banners/\n||usanetwork.com/_js/ad.js\n||usatoday.net^*/lb-agate.png\n||usatodayhss.com/images/*skin\n||uschess.org/images/banners/\n||usenet-crawler.com/astraweb.png\n||usenet-crawler.com/purevpn.png\n||usforacle.com^*-300x250.gif\n||ustatik.com/_img/promo/takeovers/$domain=ultimate-guitar.com\n||ustatik.com/_img/promo/takeovers_$domain=ultimate-guitar.com\n||ustream.tv/takeover/\n||uvnc.com/img/housecall.\n||val.fm/images/banners/\n||valleyplanet.com/images/banners/\n||vanityfair.com/custom/ebook-ad-bookbiz\n||vasco.co.za/images/banners/\n||vault.starproperty.my/widget/\n||vcdq.com/tag.html\n||vcdq.com^*/ad.html\n||vehix.com/tags/default.imu?$subdocument\n||verdict.abc.go.com^\n||verizon.com/ads/\n||verzend.be/images/download.png\n||verzing.com/popup\n||vfs-uk-in.com/images/webbanner-\n||vhd.me/custom/interstitial\n||viadeo.com/pub/\n||viamichelin.co.uk/htm/cmn/afs*.htm?\n||viator.com/analytics/percent_mobile_hash.js\n||vidbull.com/tags/vidbull_bnr.png\n||vidds.net/pads*.js\n||video-cdn.abcnews.com/ad_$object-subrequest\n||video-cdn.abcnews.com^*_ad_$object-subrequest,domain=go.com\n||video.abc.com^*/ads/\n||video.thestaticvube.com/video/*.mp4$object-subrequest,domain=vube.com\n||video44.net/gogo/a_d_s.\n||video44.net/gogo/qc.js\n||video44.net/gogo/yume-h.swf$object-subrequest\n||videobam.com/images/banners/\n||videobam.com/this-pays-for-bandwidth/\n||videobash.com/images/playboy/\n||videobull.com/wp-content/themes/*/watch-now.jpg\n||videobull.com^*/amazon_ico.png\n||videobull.to/wp-content/themes/videozoom/images/gotowatchnow.png\n||videobull.to/wp-content/themes/videozoom/images/stream-hd-button.gif\n||videodorm.org/player/yume-h.swf$object-subrequest\n||videodownloadtoolbar.com/fancybox/\n||videogamer.com/videogamer*/skins/\n||videogamer.com^*/css/skins/$stylesheet\n||videogamesblogger.com/takeover.html\n||videogamesblogger.com^*/scripts/takeover.js\n||videolan.org/images/events/animated_packliberte.gif\n||videopediaworld.com/nuevo/plugins/midroll.\n||videos.com/click?\n||videos.mediaite.com/decor/live/white_alpha_60.\n||videositeprofits.com^*/banner.jpg\n||videowood.tv/ads\n||videowood.tv/assets/js/popup.js\n||videowood.tv/pop2\n||vidhog.com/images/download_banner_\n||vidspot.net/player/ova-jw.swf$object-subrequest\n||vidspot.net^$subdocument,domain=vidspot.net\n||vidspot.net^*/pu.js\n||vidvib.com/vidvibpopa.\n||vidvib.com/vidvibpopb.\n||viewdocsonline.com/images/banners/\n||villagevoice.com/img/VDotDFallback-large.gif\n||vinaora.com/xmedia/hosting/\n||vipbox.co/js/bn.js\n||vipbox.co^*/pu.js\n||vipbox.tv/js/layer-\n||vipbox.tv/js/layer.js\n||vipi.tv/ad.php\n||vipleague.se/js/vip.js\n||virtual-hideout.net/banner\n||virtualtourist.com/adp/\n||vistandpoint.com/images/banners/\n||vitalfootball.co.uk/app-interstitial/\n||vitalfootball.co.uk^*/partners/\n||vnbitcoin.org/140_350.jpg\n||vnbitcoin.org/gawminers.png\n||vodlocker.com/images/acenter.png\n||vodo.net/static/images/promotion/utorrent_plus_buy.png\n||vogue.in/node/*?section=\n||voicescalgary.com/images/leaderBoards/\n||voicescalgary.com/images/stories/banners/\n||voicesedmonton.com/images/leaderBoards/\n||voicesedmonton.com/images/stories/banners/\n||voicesottawa.com/images/leaderBoards/\n||voicesottawa.com/images/stories/banners/\n||voicestoronto.com/images/leaderBoards/\n||voicestoronto.com/images/stories/banners/\n||voicesvancouver.com/images/leaderBoards/\n||voicesvancouver.com/images/stories/banners/\n||vondroid.com/site-img/*-adv-ex-\n||vonradio.com/grfx/banners/\n||vortez.co.uk^*120x600.swf\n||vortez.co.uk^*skyscraper.jpg\n||vosizneias.com/perms/\n||vpsboard.com/display/\n||w.homes.yahoo.net^\n||waamradio.com/images/sponsors/\n||wadldetroit.com/images/banners/\n||wallpaper.com/themes/takeovers/$image\n||walshfreedom.com^*-300x250.\n||walshfreedom.com^*/liberty-luxury.png\n||wambacdn.net/images/upload/adv/$domain=mamba.ru\n||wantedinmilan.com/images/banner/\n||wantitall.co.za/images/banners/\n||waoanime.tv/playerimg.jpg\n||wardsauto.com^*/pm_doubleclick/\n||warriorforum.com/vbppb/\n||washingtonpost.com/wp-srv/javascript/piggy-back-on-ads.js\n||washpost.com^*/cmag_sponsor3.php?\n||washtimes.com/static/images/SelectAutoWeather_v2.gif\n||watchcartoononline.com^*/530x90.\n||watchfreemovies.ch/js/lmst.js\n||watchop.com/player/watchonepiece-gao-gamebox.swf\n||watchseries.eu/images/affiliate_buzz.gif\n||watchseries.eu/images/download.png\n||watchseries.eu/js/csspopup.js\n||watchuseek.com/flashwatchwus.swf\n||watchuseek.com/media/*-banner-\n||watchuseek.com/media/*_250x250\n||watchuseek.com/media/1900x220_\n||watchuseek.com/media/banner_\n||watchuseek.com/media/clerc-final.jpg\n||watchuseek.com/media/longines_legenddiver.gif\n||watchuseek.com/media/wus-image.jpg\n||watchuseek.com/site/forabar/zixenflashwatch.swf\n||waterford-today.ie^*/banners/\n||wavelengthcalculator.com/banner\n||way2sms.com/w2sv5/js/fo_\n||wbal.com/absolutebm/banners/\n||wbgo.org^*/banners/\n||wbj.pl/im/partners.gif\n||wcbm.com/includes/clientgraphics/\n||wctk.com/banner_rotator.php\n||wdwinfo.com/js/swap.js\n||we7.com/images/yahoo/\n||wealthycashmagnet.com/upload/banners/\n||wearetennis.com/img/common/bnp-logo-\n||wearetennis.com/img/common/bnp-logo.png\n||wearetennis.com/img/common/logo_bnp_\n||weather365.net/images/banners/\n||weatherbug.com^*/ova-jw.swf$object-subrequest\n||weatheroffice.gc.ca/banner/\n||webdesignerdepot.com/wp-content/plugins/md-popup/\n||webdesignerdepot.com/wp-content/themes/wdd2/fancybox/\n||webhostingtalk.com/images/style/lw-160x400.jpg\n||webhostingtalk.com/images/style/lw-header.png\n||webhostranking.com/images/bluehost-coupon-banner-1.gif\n||webmailnotifier.mozdev.org/etc/af/\n||webmaster.extabit.com^\n||webmastercrunch.com^*/hostgator300x30.gif\n||webnewswire.com/images/banner\n||websitehome.co.uk/seoheap/cheap-web-hosting.gif\n||webstatschecker.com/links/\n||weddingtv.com/src/baners/\n||weei.com^*/sponsors/\n||weei.com^*_banner.jpg\n||wegoted.com/includes/biogreen.swf\n||wegoted.com/uploads/memsponsor/\n||wegoted.com/uploads/sponsors/\n||weknowmemes.com/sidesky.\n||werlv.com^*banner\n||wgfaradio.com/images/banners/\n||whatismyip.com/images/VYPR__125x125.png\n||whatismyip.com/images/vyprvpn_\n||whatismyip.org/ez_display_au_fillslot.js\n||whatmobile.com.pk/banners/\n||whatmyip.co/images/speedcoin_\n||whatreallyhappened.com/webpageimages/banners/uwslogosm.jpg\n||whatsabyte.com/images/Acronis_Banners/\n||whatson.co.za/img/hp.png\n||whatsonstage.com/images/sitetakeover/\n||whatsontv.co.uk^*/promo/\n||whatsthescore.com/logos/icons/bookmakers/\n||whdh.com/images/promotions/\n||wheninmanila.com/wp-content/uploads/2011/05/Benchmark-Email-Free-Signup.gif\n||wheninmanila.com/wp-content/uploads/2012/12/Marie-France-Buy-1-Take-1-Deal-Discount-WhenInManila.jpg\n||wheninmanila.com/wp-content/uploads/2014/02/DTC-Hardcore-Quadcore-300x100.gif\n||wheninmanila.com/wp-content/uploads/2014/04/zion-wifi-social-hotspot-system.png\n||whispersinthecorridors.com/banner\n||whistleout.com.au/imagelibrary/ads/wo_skin_\n||whitepages.ae/images/UI/FC/\n||whitepages.ae/images/UI/LB/\n||whitepages.ae/images/UI/MR/\n||whitepages.ae/images/UI/SR/\n||whitepages.ae/images/UI/SRA/\n||whitepages.ae/images/UI/SRB/\n||whitepages.ae/images/UI/WS/\n||who.is/images/domain-transfer2.jpg\n||whoer.net/images/pb/\n||whoer.net/images/vpnlab20_\n||whois.net/dombot.php?\n||whois.net/images/banners/\n||whoownsfacebook.com/images/topbanner.gif\n||whtsrv3.com^*==$domain=webhostingtalk.com\n||widget.directory.dailycommercial.com^\n||widih.org/banners/\n||wiilovemario.com/images/fc-twin-play-nes-snes-cartridges.png\n||wikia.com/__varnish_\n||wikinvest.com/wikinvest/ads/\n||wikinvest.com/wikinvest/images/zap_trade_\n||wildtangent.com/leaderboard?\n||windows.net/script/p.js$domain=1fichier.com|limetorrents.cc|primewire.ag|thepiratebay.みんな\n||windowsitpro.com^*/roadblock.\n||winnfm.com/grfx/banners/\n||winpcap.org/assets/image/banner_\n||winsupersite.com^*/roadblock.\n||wipfilms.net^*/amazon.png\n||wipfilms.net^*/instant-video.png\n||wired.com/images/xrail/*/samsung_layar_\n||wirenh.com/images/banners/\n||wiretarget.com/a_$subdocument\n||witbankspurs.co.za/layout_images/sponsor.jpg\n||witteringsfromwitney.com/wp-content/plugins/popup-with-fancybox/\n||wjie.org/media/img/sponsers/\n||wjunction.com/images/468x60\n||wjunction.com/images/constant/\n||wjunction.com/images/rectangle\n||wksu.org/graphics/banners/\n||wlcr.org/banners/\n||wlrfm.com/images/banners/\n||wned.org/underwriting/sponsors/\n||wnst.net/img/coupon/\n||wolf-howl.com/wp-content/banners/\n||worddictionary.co.uk/static//inpage-affinity/\n||wordpress.com^*-banner-$domain=inspirationfeed.com\n||wordpress.com^*/amazon2-center-top.$domain=gigaom.com\n||wordpress.com^*/chive-skin-$image,domain=thechive.com\n||wordpress.com^*/mediatemple.jpg$domain=inspirationfeed.com\n||wordpress.com^*_250x2501.$domain=inspirationfeed.com\n||wordpress.com^*_reskin-$image,domain=bossip.com\n||wordreference.com/*/publ/\n||wordwebonline.com/img/122x36ccbanner.png\n||work-day.co.uk/pub_\n||workingdays.ca/pub_\n||workingdays.org/pub_\n||workingdays.us/pub_\n||worldarchitecturenews.com/banner/\n||worldarchitecturenews.com/flash_banners/\n||worldometers.info/L300L.html\n||worldometers.info/L300R.html\n||worldometers.info/L728.html\n||worldstadiums.com/world_stadiums/bugarrishoes/\n||worldstagegroup.com/banner/\n||worldstagegroup.com/worldstagenew/banner/\n||worthofweb.com/images/wow-ad-\n||wowhead.com/uploads/skins/$image\n||wowwiki.com/__varnish_\n||wp.com/wp-content/themes/vip/tctechcrunch/images/tc_*_skin.jpg\n||wp.com^*/coedmagazine3/gads/$domain=coedmagazine.com\n||wpcomwidgets.com^$domain=thegrio.com\n||wpcv.com/includes/header_banner.htm\n||wpdaddy.com^*/banners/\n||wptmag.com/promo/\n||wqah.com/images/banners/\n||wqam.com/partners/\n||wqxe.com/images/sponsors/\n||wranglerforum.com/images/sponsor/\n||wrc.com/img/sponsors-\n||wrc.com/swf/homeclock_edox_hori.swf\n||wrcjfm.org/images/banners/\n||wrko.com/sites/wrko.com/files/poll/*_285x95.jpg\n||wrko.com^*/sponsors/\n||wrlr.fm/images/banners/\n||wrmf.com/upload/*_Webskin_\n||wshh.me/vast/\n||wsj.net/internal/krux.js\n||wttrend.com/images/hs.jpg\n||wunderground.com/geo/swfad/\n||wunderground.com^*/wuss_300ad2.php?\n||wvbr.com/images/banner/\n||wwaytv3.com^*/curlypage.js\n||wwbf.com/b/topbanner.htm\n||www2.sys-con.com^*.cfm\n||x.castanet.net^\n||xbitlabs.com/cms/module_banners/\n||xbitlabs.com/images/banners/\n||xbox-hq.com/html/images/banners/\n||xbox-scene.com/crave/logo_on_white_s160.jpg\n||xboxgaming.co.za^*/images/background/\n||xiaopan.co/Reaver.png\n||xomreviews.com/sponsors/\n||xoops-theme.com/images/banners/\n||xscores.com/livescore/banners/\n||xsreviews.co.uk/style/bgg2.jpg\n||xtremesystems.org/forums/brotator/\n||xup.in/layer.php\n||yahoo.*/serv?s=\n||yahoo.com/__darla/\n||yahoo.com/contextual-shortcuts\n||yahoo.com/darla/\n||yahoo.com/livewords/\n||yahoo.com/neo/darla/\n||yahoo.com/sdarla/\n||yahoo.com/ysmload.html?\n||yahoo.com^*/eyc-themis?\n||yamgo.mobi/images/banner/\n||yamivideo.com^*/download_video.jpg\n||yardbarker.com/asset/asset_source/*?ord=$subdocument\n||yarisworld.com^*/banners/\n||yasni.*/design/relaunch/gfx/elitepartner_\n||yavideo.tv/ajaxlog.txt?\n||yea.uploadimagex.com^\n||yellow.co.ke/img/left_side/\n||yellow.co.ke/img/right_side/\n||yellow.co.ke/img/top_banner/\n||yellowpage-jp.com/images/banners/\n||yellowpages.ae/UI/FC/\n||yellowpages.ae/UI/LB/\n||yellowpages.ae/UI/MR/\n||yellowpages.ae/UI/SR/\n||yellowpages.ae/UI/ST/\n||yellowpages.ae/UI/WA/\n||yellowpages.ae/UI/WM/\n||yellowpages.com.jo/banners/\n||yellowpages.com.lb/uploaded/banners/\n||yellowpages.ly/user_media/banner/\n||yellowpages.ly^*/sponsors/\n||yellowpageskenya.com/sponsored/\n||yfrog.com/images/contests/\n||yfrog.com/images/weezer-bloggie-bg.png\n||yfrog.com/ym.php?\n||yimg.com/*300x250$image,object\n||yimg.com/a/1-$~stylesheet\n||yimg.com/ao/adv/$script,domain=yahoo.com\n||yimg.com/cv/ae/ca/audience/$image,domain=yahoo.com\n||yimg.com/cv/ae/us/audience/$image,domain=yahoo.com\n||yimg.com/cv/eng/*.webm$domain=yahoo.com\n||yimg.com/cv/eng/*/635x100_$domain=yahoo.com\n||yimg.com/cv/eng/*/970x250_$domain=yahoo.com\n||yimg.com/dh/ap/default/*/skins_$image,domain=yahoo.com\n||yimg.com/hl/ap/*_takeover_$domain=yahoo.com\n||yimg.com/hl/ap/default/*_background$image,domain=yahoo.com\n||yimg.com/i/i/de/cat/yahoo.html$domain=yahoo.com\n||yimg.com/la/i/wan/widgets/wjobs/$subdocument,domain=yahoo.com\n||yimg.com/rq/darla/$domain=yahoo.com\n||yimg.com^*/billboardv2r5min.js$domain=yahoo.com\n||yimg.com^*/darla-secure-pre-min.js$domain=yahoo.com\n||yimg.com^*/fairfax/$image\n||yimg.com^*/flash/promotions/\n||yimg.com^*/ya-answers-dmros-ssl-min.js$domain=yahoo.com\n||yimg.com^*/yad*.js$domain=yahoo.com\n||yimg.com^*/yad.html\n||yimg.com^*/yfpadobject.js$domain=yahoo.com\n||yimg.com^*_east.swf$domain=yahoo.com\n||yimg.com^*_north.swf$domain=yahoo.com\n||yimg.com^*_west.swf$domain=yahoo.com\n||ynaija.com^*/ad.\n||ynaija.com^*300x250\n||ynaija.com^*300X300\n||yolasite.com/resources/$domain=coolsport.tv\n||yomzansi.com^*-300x250.\n||yopmail.com/fbd.js\n||yorkshirecoastradio.com/resources/creative/\n||youconvertit.com/_images/*ad.png\n||youngrider.com/images/sponsorships/\n||yourbittorrent.com/downloadnow.png\n||yourbittorrent.com/images/lumovies.js\n||yourepeat.com/revive_wrapper?\n||yourepeat.com^*/skins/\n||yourfilehost.com/ads/\n||yourindustrynews.com/ads/\n||yourmovies.com.au^*/side_panels_\n||yourmuze.fm/images/audionow.png\n||yourmuze.fm/images/banner_ym.png\n||yourradioplace.com//images/banners/\n||yourradioplace.com/images/banners/\n||yourwire.net/images/refssder.gif\n||youserials.com/i/banner_pos.jpg\n||youtube-mp3.org/acode/\n||youtube.com/yva_video?adformat=$object-subrequest,domain=nfl.com|viki.com\n||youtubeproxy.pk/images/Indiansongs.pk.jpg\n||youtubeproxy.pk/images/Lahore.fm.jpg\n||youtubeproxy.pk/images/lahore.jpg\n||youwatch.org/iframe1.html\n||yp.mo^*/ads/\n||ytimg.com^*/new_watch_background.jpg?$domain=youtube.com\n||ytimg.com^*/new_watch_background_*.jpg?$domain=youtube.com\n||ytimg.com^*_banner$domain=youtube.com\n||ytmnd.com/ugh\n||yudu.com^*_intro_ads\n||zabasearch.com/search_box.php?*&adword=\n||zam.com/i/promos/*-skin.\n||zambiz.co.zm/banners/\n||zamimg.com/images/skins/\n||zamimg.com/shared/minifeatures/\n||zanews.co.za^*/banners/\n||zap2it.com/dfp/production/$script\n||zap2it.com/wp-content/themes/overmind/js/zcode-\n||zattoo.com/ads/\n||zawya.com/ads/\n||zawya.com/brands/\n||zbc.co.zw^*/banners/\n||zeetvusa.com/images/CARIBBEN.jpg\n||zeetvusa.com/images/hightlow.jpg\n||zeetvusa.com/images/SevaWeb.gif\n||zerochan.net/skyscraper.html\n||zeropaid.com/images/\n||zeropaid.com^*/94.jpg\n||ziddu.com/images/140x150_egglad.gif\n||ziddu.com/images/globe7.gif\n||ziddu.com/images/wxdfast/\n||zigzag.co.za/images/oww-\n||zipcode.org/site_images/flash/zip_v.swf\n||zombiegamer.co.za/wp-content/uploads/*-skin-\n||zomobo.net/images/removeads.png\n||zonein.tv/add$subdocument\n||zoneradio.co.za/img/banners/\n||zoomin.tv/decagonhandler/\n||zootoday.com/pub/21publish/Zoo-navtop-casino_\n||zootoday.com/pub/21publish/Zoo-navtop-poker.gif\n||zoover.*/shared/bannerpages/darttagsbanner.aspx?\n||zoozle.org/if.php?q=\n||zophar.net/files/tf_\n||zorrovpn.com/static/img/promo/\n||zpag.es/b/\n||zshares.net/fm.html\n||zurrieqfc.com/images/banners/\n! extratorrentlive\n/\\/[a-zA-Z0-9]{3}/$script,third-party,domain=extratorrent.cc|extratorrentlive.com\n! Filenuke/sharesix\n/\\.filenuke\\.com/.*[a-zA-Z0-9]{4}/$script\n/\\.sharesix\\.com/.*[a-zA-Z0-9]{4}/$script\n! Yavli.com\n/http://[a-z]\\.[a-zA-Z0-9-]+\\.[a-z]+\\/.*(?:[!\"#$%&'()*+,:;<=>?@/\\^_`{|}~-])/$script,third-party,xmlhttprequest,domain=247wallst.com|activistpost.com|alfonzorachel.com|allenbwest.com|allenwestrepublic.com|americanlivewire.com|askmefast.com|barbwire.com|blacklistednews.com|breathecast.com|brosome.com|bulletsfirst.net|chacha.com|cheezburger.com|christianpost.com|christiantoday.com|cinemablend.com|clashdaily.com|classicalite.com|comicallyincorrect.com|comicbookmovie.com|conservativebyte.com|conservativevideos.com|cowboybyte.com|crossmap.com|dailycaller.com|dailysurge.com|dccrimestories.com|dealbreaker.com|designntrend.com|digitaljournal.com|drhotze.com|gamerant.com|genfringe.com|girlsjustwannahaveguns.com|hallels.com|hellou.co.uk|hngn.com|infowars.com|instigatornews.com|investmentwatchblog.com|joblo.com|joeforamerica.com|kdramastars.com|kpopstarz.com|latinpost.com|libertyunyielding.com|listverse.com|makeuseof.com|mensfitness.com|minutemennews.com|moddb.com|mstarz.com|muscleandfitness.com|musictimes.com|naturalnews.com|natureworldnews.com|newser.com|oddee.com|okmagazine.com|opposingviews.com|patriotoutdoornews.com|patriotupdate.com|pitgrit.com|politicususa.com|product-reviews.net|radaronline.com|realfarmacy.com|redmaryland.com|screenrant.com|shark-tank.com|stevedeace.com|techtimes.com|theblacksphere.net|theblaze.com|thefreedictionary.com|thegatewaypundit.com|theladbible.com|thelibertarianrepublic.com|themattwalshblog.com|townhall.com|unilad.co.uk|uniladmag.com|unitrending.co.uk|valuewalk.com|vcpost.com|victoriajackson.com|viralnova.com|whatculture.com|wimp.com|wwitv.com\n/http://[a-z]\\.[a-zA-Z0-9-]+\\.[a-z]+\\/.*[a-zA-Z0-9]+/$script,third-party,domain=247wallst.com|activistpost.com|alfonzorachel.com|allenbwest.com|allenwestrepublic.com|americanlivewire.com|askmefast.com|barbwire.com|blacklistednews.com|breathecast.com|brosome.com|bulletsfirst.net|chacha.com|cheezburger.com|christianpost.com|christiantoday.com|cinemablend.com|clashdaily.com|classicalite.com|comicallyincorrect.com|comicbookmovie.com|conservativebyte.com|conservativevideos.com|cowboybyte.com|crossmap.com|dailycaller.com|dailysurge.com|dccrimestories.com|dealbreaker.com|designntrend.com|digitaljournal.com|drhotze.com|gamerant.com|genfringe.com|girlsjustwannahaveguns.com|hallels.com|hellou.co.uk|hngn.com|infowars.com|instigatornews.com|investmentwatchblog.com|joblo.com|joeforamerica.com|kdramastars.com|kpopstarz.com|latinpost.com|libertyunyielding.com|listverse.com|makeuseof.com|mensfitness.com|minutemennews.com|moddb.com|mstarz.com|muscleandfitness.com|musictimes.com|naturalnews.com|natureworldnews.com|newser.com|oddee.com|okmagazine.com|opposingviews.com|patriotoutdoornews.com|patriotupdate.com|pitgrit.com|politicususa.com|product-reviews.net|radaronline.com|realfarmacy.com|redmaryland.com|screenrant.com|shark-tank.com|stevedeace.com|techtimes.com|theblacksphere.net|theblaze.com|thefreedictionary.com|thegatewaypundit.com|theladbible.com|thelibertarianrepublic.com|themattwalshblog.com|townhall.com|unilad.co.uk|uniladmag.com|unitrending.co.uk|valuewalk.com|vcpost.com|victoriajackson.com|viralnova.com|whatculture.com|wimp.com|wwitv.com\n@@/wp-content/plugins/akismet/*$script\n@@||c.gnli.com^$script,third-party\n@@||cdn.api.twitter.com*http%$script,third-party\n@@||hwcdn.net/*.js?$script\n@@||intensedebate.com/js/$script,third-party\n@@||launch.newsinc.com/*/js/embed.js$script,third-party\n@@||lps.newsinc.com/player/show/$script\n@@||p.jwpcdn.com/*/jwpsrv.js$script,third-party\n@@||p.jwpcdn.com^$script,third-party\n@@||s.gravatar.com^$script,third-party\n@@||trc.taboola.com*http%$script,third-party\n! Firefox freezes if not blocked on reuters.com (http://forums.lanik.us/viewtopic.php?f=64&t=16854)\n||static.crowdscience.com/max-*.js?callback=crowdScienceCallback$domain=reuters.com\n! Anti-Adblock\n.com/lib/f=$third-party,xmlhttprequest,domain=sporcle.com\n/ailde.$domain=cbs.com\n|http://*=*&$third-party,xmlhttprequest,domain=sporcle.com\n||ailde.com^$domain=cbs.com\n||alidw.net^$domain=cbs.com\n||amazonaws.com^$script,domain=dsero.com|ginormousbargains.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com|unfair.co\n||channel4.com^*.innovid.com$object-subrequest\n||channel4.com^*.tidaltv.com$object-subrequest\n||histats.com/js15.js$domain=televisaofutebol.com\n||http.anno.channel4.com*-\n||http.anno.channel4.com*_*_*_\n||joindota.com/img/*LB_$image\n||joindota.com/img/*MR_$image\n||no-ip.biz^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||pagefair.com/static/adblock_detection/js/d.min.js$domain=majorleaguegaming.com\n||servebeer.com^$domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||servemp3.com^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||servepics.com^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||servequake.com^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||sytes.net^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n||vapingunderground.com/js/vapingunderground/fucking_adblock.js\n||watchfreeinhd.com/js/adblocker.js\n||ytconv.net/site/adblock_detect\n||zapto.org^$script,domain=dsero.com|korean-candy.com|misheel.net|politicususa.com|techydoor.com|trutower.com\n! Non-English (instead of whitelisting ads)\n||youtube.com/yva_video?adformat=$object-subrequest,domain=antena3.com|atresplayer.com|lasexta.com\n! Mobile\n! *** easylist:easylist/easylist_specific_block_popup.txt ***\n/sendspace-pop.$popup,domain=sendspace.com\n^utm_source=$popup,domain=sex.com|thepiratebay.se\n|http:$popup,third-party,domain=allmyvideos.net|embed.videoweed.es|extreme-board.com|filepost.com|filmovizija.com|go4up.com|imagebam.com|imageporter.com|imgbox.com|imgmade.com|imgspice.com|load.to|mofunzone.com|putlocker.is|vidspot.net|watchcartoononline.com|xtshare.com\n||4fuckr.com/api.php$popup\n||adf.ly^$popup,domain=uploadcore.com|urgrove.com\n||adx.kat.ph^$popup\n||adyou.me/bug/adcash$popup\n||aiosearch.com^$popup,domain=torrent-finder.info\n||allmyvideos.net^*?p=$popup\n||avalanchers.com/out/$popup\n||bangstage.com^$popup,domain=datacloud.to\n||bit.ly^$popup,domain=fastvideo.eu|rapidvideo.org\n||casino-x.com^*&promo$popup\n||channel4.com/ad/$popup\n||click.aliexpress.com^$popup,domain=multiupfile.com\n||cloudzilla.to/cam/wpop.php$popup\n||comicbookmovie.com/plugins/ads/$popup\n||conservativepost.com/pu/$popup\n||damoh.muzu.tv^$popup\n||deb.gs^*?ref=$popup\n||edomz.com/re.php?mid=$popup\n||f-picture.net/Misc/JumpClick?$popup\n||fashionsaga.com^$popup,domain=putlocker.is\n||filepost.com/default_popup.html$popup\n||filmon.com^*&adn=$popup\n||findgrid.com^$popup,domain=amaderforum.com\n||finegame.org^$popup,domain=bestreams.net\n||firedrive.com/appresources/$popup\n||firedrive.com/tools/$popup\n||flashx.tv/ads/$popup\n||flashx.tv/frame/$popup\n||free-filehost.net/pop/$popup\n||free-stream.tv^$popup,domain=flashx.tv\n||freean.us^*?ref=$popup\n||fullonsms.com/blank.php$popup\n||fullonsms.com/mixpop.html$popup\n||fullonsms.com/quikr.html$popup\n||fullonsms.com/quikrad.html$popup\n||fullonsms.com/sid.html$popup\n||gamezadvisor.com/popup.php$popup\n||goo.gl^$popup,domain=amaderforum.com|jumbofile.net|videomega.tv\n||google.com.eg/url?$popup,domain=hulkload.com\n||gratuit.niloo.fr^$popup,domain=simophone.com\n||hide.me^$popup,domain=ncrypt.in\n||homerun.re/adServe/$popup\n||homets.info/queen_file?$popup\n||houndmirror.com/out.php$popup\n||href.li^$popup,domain=300mblink.com\n||ifly.com/trip-plan/ifly-trip?*&ad=$popup\n||imageshack.us/ads/$popup\n||imageshack.us/newuploader_ad.php$popup\n||intradayfun.com/news_intradayfun.com.html$popup\n||itv.com/itv/adclick/$popup\n||jokertraffic.com^$popup,domain=4fuckr.com\n||kalemaro.com^$popup,domain=filatak.com\n||leaderdownload.com^$popup,domain=fiberupload.net\n||limbohost.net^$popup,domain=tusfiles.net\n||linkbucks.com^*?ref=$popup\n||military.com/data/popup/new_education_popunder.htm$popup\n||miniurls.co^*?ref=$popup\n||multiupload.nl/popunder/$popup\n||nesk.co^$popup,domain=veehd.com\n||newsgate.pw^$popup,domain=adjet.biz\n||nosteam.ro/pma/$popup\n||oddschecker.com/clickout.htm?type=takeover-$popup\n||pamaradio.com^$popup,domain=secureupload.eu\n||park.above.com^$popup\n||photo4sell.com^$popup,domain=filmovizija.com\n||plarium.com/play/*adCampaign=$popup\n||playhd.eu/test$popup\n||pop.billionuploads.com^$popup\n||r.search.yahoo.com/_ylt=*;_ylu=*.r.msn.com$popup,domain=search.yahoo.com\n||rediff.com/uim/ads/$popup\n||schenkelklopfer.org^$popup,domain=4fuckr.com\n||single-vergleich.de^$popup,domain=netload.in\n||softexter.com^$popup,domain=2drive.net\n||songspk.cc/pop*.html$popup\n||spendcrazy.net^$popup,third-party,domain=animegalaxy.net|animenova.tv|animetoon.tv|animewow.eu|gogoanime.com|goodanime.eu|gooddrama.net|toonget.com\n||sponsorselect.com/Common/LandingPage.aspx?eu=$popup\n||streamcloud.eu/deliver.php$popup\n||streamtunerhd.com/signup?$popup,third-party\n||subs4free.com/_pop_link.php$popup\n||thebestbookies.com^$popup,domain=fırstrowsports.eu\n||thesource.com/magicshave/$popup\n||titanbrowser.com^$popup,domain=amaderforum.com\n||titanshare.to/download-extern.php?type=*&n=$popup\n||tny.cz/red/first.php$popup\n||toptrailers.net^$popup,domain=kingfiles.net|uploadrocket.net\n||torrentz.*/mgidpop/$popup\n||torrentz.*/wgmpop/$popup\n||torrentz.eu/p/$popup\n||tripadvisor.*/rulebasedpopunder?$popup\n||tripadvisor.*/SimilarHotelsPopunder?$popup\n||vibeo.to^$popup,domain=flashx.tv\n||vidhog.com/ilivid-redirect.php$popup\n||vidspot.net^*http$popup\n||virtualtourist.com/commerce/popunder/$popup\n||vodu.ch/play_video.php$popup\n||watch-movies.net.in/popup.php$popup\n||watchclip.tv^$popup,domain=hipfile.com\n||wegrin.com^$popup,domain=watchfreemovies.ch\n||yasni.ca/ad_pop.php$popup\n||zanox.com^$popup,domain=pregen.net\n||ziddu.com/onclickpop.php$popup\n||zmovie.tv^$popup,domain=deditv.com|vidbox.net\n! *** easylist:easylist_adult/adult_specific_block.txt ***\n.info^$script,domain=pornhub.com\n/[a-z0-9A-Z]{6}/$xmlhttprequest,domain=pornhub.com|redtube.com|tube8.com|tube8.es|tube8.fr|youporn.com\n/\\/[0-9].*\\-.*\\-[a-z0-9]{4}/$script,xmlhttprequest,domain=gaytube.com|keezmovies.com|spankwire.com|tube8.com|tube8.es|tube8.fr\n/http://.*[a-z0-9]{3}.*(?:[!\"#$%&'()*+,:;<=>?@/\\^_`{|}~-]).*[a-z0-9]{3}.*(?:[!\"#$%&'()*+,:;<=>?@/\\^_`{|}~-])/$xmlhttprequest,domain=pornhub.com|redtube.com|tube8.com|tube8.es|tube8.fr|youporn.com\n/http://[a-zA-Z0-9]+\\.[a-z]+\\/.*(?:[!\"#$%&'()*+,:;<=>?@/\\^_`{|}~-]).*[a-zA-Z0-9]+/$script,third-party,domain=keezmovies.com|pornhub.com|redtube.com|tube8.com|tube8.es|tube8.fr|youporn.com\n||109.201.146.142^$domain=xxxbunker.com\n||213.174.140.38/bftv/js/msn-\n||213.174.140.38^*/msn-*.js$domain=boyfriendtv.com|pornoxo.com\n||244pix.com/webop.jpg\n||24porn7.com/24roll.html\n||24porn7.com/300.php\n||24porn7.com/banned/\n||24porn7.com/ebanners/\n||24porn7.com/float/float_adplib.js\n||24porn7.com/imads/\n||24porn7.com/odd.php\n||24porn7.com/right3.php\n||24porn7.com/toonad/\n||2adultflashgames.com/images/v12.gif\n||2adultflashgames.com/img/\n||2adultflashgames.com/teaser/teaser.swf\n||3xupdate.com^*/ryushare.gif\n||3xupdate.com^*/ryushare2.gif\n||3xupdate.com^*/ryusharepremium.gif\n||3yen.com/wfn_\n||5ilthy.com/porn.php\n||64.62.202.124^*/cumlouder.jpg\n||a.eporner.com^\n||a.heavy-r.com^\n||a.killergram-girls.com^\n||abc-celebs.com/spons/\n||absoluporn.com/code/pub/\n||ad.eporner.com^\n||ad.slutload.com^\n||ad.thisav.com^\n||ad.userporn.com^\n||adrive.com/images/fc_banner.jpg\n||ads.xxxbunker.com^\n||adult-profit-files.com/banner\n||adult-sex-games.com/images/promo/\n||adultfilmdatabase.com/graphics/banners/\n||adultfyi.com/images/banners/\n||adultwork.com/images/AWBanners/\n||affiliates.goodvibes.com^\n||alladultnetwork.tv/main/videoadroll.xml\n||alotporn.com/media/banners/\n||alotporn.com^*/js/oopopw.js\n||amadorastube.com^*/banner_\n||amateur-desire.com/pics/724x90d.jpg\n||amateur-desire.com/pics/sm_\n||amateur-streams.com^*/popup.js\n||amateuralbum.net/affb.html\n||amateurfarm.net/layer.js\n||analtubegirls.com/js/realamateurtube.js\n||andtube.com/ban_\n||angelshack.com/images/under-video.png\n||arionmovies.com/*/popup.php\n||asexstories.com/010ads/\n||asgayas.com/floater/\n||asgayas.com/popin.js\n||asianpornmovies.com/images/banners/\n||asspoint.com/images/banners/\n||avn.com/templates/avnav/skins/\n||axatube.com/dos.html\n||babblesex.com/js/misc.js\n||babedrop.com/babelogger_images/\n||babepicture.co.uk^*banner\n||babesandstars.com/images/a/\n||babesandstars.com/thumbs/paysites/\n||babeshows.co.uk/fvn53.jpg\n||babeshows.co.uk^*banner\n||babesmachine.com/html/\n||badjojo.com/js/scripts-\n||bagslap.com/*.html\n||bangyoulater.com/images/banners_\n||bangyoulater.com/pages/aff.php\n||banner1.pornhost.com^\n||banners.cams.com^\n||befuck.com/befuck_html/\n||befuck.com/js/adpbefuck\n||bellyboner.com/facebookchatlist.php\n||bigboobs.hu/banners/\n||bigxvideos.com/js/focus.*.js\n||bigxvideos.com/js/pops2.\n||bigxvideos.com/js/popu.\n||bigxvideos.com/rec/\n||blackonasianblog.com/uploads/banners/\n||blackredtube.com/fadebox2.js\n||bob.crazyshit.com^\n||bonbonme.com/js/cams.js\n||bonbonme.com/js/dticash/\n||bonbonme.com/js/rightbanner.js\n||bonbonsex.com/js/dl/bottom.js\n||bonbonsex.com/js/workhome.js\n||boneprone.com/premium.html\n||boobieblog.com/submityourbitchbanner3.jpg\n||boobieblog.com/TilaTequilaBackdoorBanner2.jpg\n||bralesscelebs.com/*banner\n||bralesscelebs.com/160x600hcp.gif\n||bralesscelebs.com/160x600ps.gif\n||bralesscelebs.com/320x240ps.gif\n||bravotube.net/dd$subdocument\n||bravotube.net/dp.html\n||bravotube.net/if/$subdocument\n||brcache.madthumbs.com^\n||bunnylust.com/sponsors/\n||bustnow.com/xv/ad/\n||bustnow.com/xv/x/002.php\n||bustnow.com^*/999.js.php\n||bustnow.com^*/sponsors/\n||cameltoe.com^*/banners/\n||canadianhottie.ca/images/banners/\n||celeb.gate.cc/banner/\n||celeb.gate.cc/misc/event_*.js\n||celebritypink.com/bannedcelebs-\n||chanweb.info/en/adult/hc/local_include/\n||chubby-ocean.com/banner/\n||clips-and-pics.org/clipsandpics.js\n||comdotgame.com/vgirl/\n||coolmovs.com/js/focus.*.js\n||coolmovs.com/rec/$subdocument\n||crackwhoreconfessions.com/images/banners/\n||crazyshit.com/p0pzIn.js\n||creampietubeporn.com/ctp.html\n||creampietubeporn.com/porn.html\n||creatives.cliphunter.com^\n||creatives.pichunter.com^\n||creepshots.com^*/250x250_\n||data18.com^*/banners/\n||definebabe.com/db/images/leftnav/webcams2.png\n||definebabe.com/db/js/pcme.js\n||definebabe.com/sponsor/\n||definefetish.com/df/js/dpcm.js\n||deliciousbabes.org/banner/\n||deliciousbabes.org/media/banners/\n||depic.me/banners/\n||destroymilf.com/popup%20floater.js\n||devatube.com/img/partners/\n||diamond-tgp.com/fp.js\n||dickbig.net/scr/\n||dirtypriest.com/sexpics/\n||dominationtube.com/exit.js\n||dot.eporner.com^\n||dot2.eporner.com^\n||dronporn.com/main-video-place.html\n||dronporn.com/tizer.html\n||drtuber.com/promo/banners/\n||drtuber.com/templates/frontend/white/js/embed.js?\n||drtuber.com^*/aff_banner.swf\n||dusttube.com/pop*.js\n||easypic.com/js/easypicads.js\n||eccie.net/buploads/\n||eccie.net/eros/\n||efukt.com^*.php$subdocument\n||egoporn.com/themagic.js\n||egoporn.com/videotop.gif\n||empflix.com/embedding_player/600x474_\n||empireamateurs.com/images/*banner\n||entensity.net/crap/\n||epicwank.com/social/jquery.stp.min.js\n||eporner.com/pjsall-*.js\n||eporner.com^$subdocument,~third-party\n||eroprofile.com/js/pu*.js\n||eskimotube.com/kellyban.gif\n||exhentai.net/img/aaf1.gif\n||exit.macandbumble.com^\n||extreme-board.com/bannrs/\n||extremetube.com/player_related?\n||fapdick.com/uploads/fap_\n||fastpic.ru/js_f2.jpg\n||fastpic.ru/js_h2.jpg\n||femdom-fetish-tube.com/popfemdom.js\n||fetishok.com/js/focus.$script\n||fetishok.com/rec/$subdocument\n||fileshare.ro^*/dhtmlwindow.js\n||filthyrx.com/images/porno/\n||filthyrx.com/inline.php?\n||filthyrx.com/rx.js\n||finehub.com/p3.js\n||fingerslam.com/*.html\n||fleshbot.com/wp-content/themes/fbdesktop_aff/images/af\n||floppy-tits.com/iframes/\n||free-celebrity-tube.com/js/freeceleb.js\n||freebunker.com/includes/js/cat.js\n||freebunker.com^*/ex.js\n||freebunker.com^*/exa.js\n||freebunker.com^*/layer.js\n||freebunker.com^*/oc.js\n||freebunker.com^*/pops.js\n||freebunker.com^*/raw.js\n||freeimgup.com/xxx/content/system/js/iframe.html\n||freeones.com/images/freeones/sidewidget/$image\n||freeporn.to/wpbanner/\n||freeporninhd.com/images/cbside.gif\n||freepornvs.com/im.js\n||fuckuh.com/pr_ad.swf\n||funny-games.biz/banners/\n||galleries-pornstar.com/thumb_top/\n||gals4free.net/images/banners/\n||gamesofdesire.com/images/banners/\n||gapeandfist.com/uploads/thumbs/\n||gayporntimes.com/img/GP_Heroes.jpg\n||gayporntimes.com^*/Bel-Ami-Mick-Lovell-July-2012.jpeg\n||gayporntimes.com^*/CockyBoys-July-2012.jpg\n||gaytube.com/chacha/\n||gggtube.com/images/banners/\n||ghettotube.com/images/banners/\n||gina-lynn.net/pr4.html\n||girlfriendvideos.com/pcode.js\n||girlsfrombudapest.eu/banners/\n||girlsfromprague.eu/banners/\n||girlsfromprague.eu^*468x\n||girlsintube.com/images/get-free-server.jpg\n||girlsnaked.net/gallery/banners/\n||girlsofdesire.org/banner/\n||girlsofdesire.org/media/banners/\n||glamour.cz/banners/\n||gloryholegirlz.com/images/banners/\n||goldporntube.com/iframes/\n||gotgayporn.com/Watermarks/\n||grannysexforum.com/filter.php\n||h2porn.com/contents/content_sources/\n||hanksgalleries.com/aff-\n||hanksgalleries.com/gallery-\n||hanksgalleries.com/galleryimgs/\n||hanksgalleries.com/stxt_\n||hanksgalleries.com/vg_ad_\n||hardsextube.com/pornstars/$xmlhttprequest\n||hardsextube.com/preroll/getiton/\n||hardsextube.com/testxml.php\n||hardsextube.com/zone.php\n||hawaiipornblog.com/post_images/\n||hcomicbook.com/banner/\n||hcomicbook.com/js/hcb-$script\n||hcomicbook.com^*_banner1.gif\n||hdporn.in/images/rec/\n||hdporn.in/js/focus.*.js\n||hdporn.in/js/pops2.\n||hdporn.in/rec/$subdocument\n||hdporn.net/images/hd-porn-banner.gif\n||heavy-r.com/a/\n||heavy-r.com/js/imbox.js\n||hebus.com/p/hebusx/\n||hellporno.com/iframes/\n||hentai-foundry.com/themes/*/add$image\n||hentai-foundry.com/themes/*Banner\n||hentai-foundry.com/themes/Hentai/images/hu/hu.jpg\n||hentairules.net/pop_$script\n||hentaistream.com/out/\n||hentaistream.com/wp-includes/images/bg-\n||hentaistream.com/wp-includes/images/mofos/webcams_\n||heraldnet.com/section/iFrame_AutosInternetSpecials?\n||heraldnetdailydeal.com/widgets/DailyDealWidget300x250\n||hgimg.com/js/beacon.\n||hidefporn.ws/04.jpg\n||hidefporn.ws/05.jpg\n||hidefporn.ws/055.jpg\n||hidefporn.ws/client\n||hidefporn.ws/img.png\n||hidefporn.ws/nitro.png\n||hollyscoop.com/sites/*/skins/\n||hollywoodoops.com/img/*banner\n||homegrownfreaks.net/homegfreaks.js\n||homemademoviez.com^$subdocument\n||homeprivatevids.com/banner2.shtml\n||homeprivatevids.com/banners.shtml\n||hornygamer.com/images/promo/\n||hornywhores.net/hw$script\n||hornywhores.net/img/double.jpg\n||hornywhores.net/img/zevera_rec.jpg\n||hostingfailov.com/image/tablespons_\n||hostingfailov.com/image/tank3.gif\n||hostingfailov.com^*_1000x100.swf\n||hotdevonmichaels.com^*/pf_640x1001.jpg\n||hotdevonmichaels.com^*/streamate2.jpg\n||hotdevonmichaels.com^*/wicked.gif\n||hotdylanryder.com^*/Big-Tits-Like-Big-Dicks.jpg\n||hotdylanryder.com^*/dylan_350x250_01.jpg\n||hotdylanryder.com^*/iframes_174.jpg\n||hotdylanryder.com^*/pf_640x100.jpg\n||hotdylanryder.com^*/wicked.gif\n||hotkellymadison.com^*/kelly1.jpg\n||hotkellymadison.com^*/kelly4.jpg\n||hotkellymadison.com^*/km_300x300.gif\n||hotkellymadison.com^*/pf_640x100.jpg\n||hotsashagrey.com^*/Anabolic.jpg\n||hotsashagrey.com^*/New_Sensations-1091.gif\n||hotsashagrey.com^*/PeterNorth-800x350.jpg\n||hotsashagrey.com^*/squ-fantasygirlsasha-001.gif\n||hotsashagrey.com^*/throated.jpg\n||hotshame.com/hotshame_html/\n||hotshame.com/iframes/\n||hotshame.com/js/adphotshame\n||hottestgirlsofmyspace.net/smallpics/300x200b.gif\n||hottestgirlsofmyspace.net/smallpics/fb-150x150.gif\n||hottubeclips.com/stxt/banners/\n||hungangels.com/vboard/friends/\n||hustler.com/backout-script/\n||imagearn.com/img/picBanner.swf\n||imagecarry.com/down\n||imagecarry.com/top\n||imagedunk.com^*_imagedunk.js\n||imagefruit.com^*/pops.js\n||imagehyper.com/prom/\n||imageporter.com/ro-7bgsd.html\n||imageporter.com/smate.html\n||imagepost.com/includes/dating/\n||imagepost.com/stuff/\n||imageshack.us^*/bannng.jpg\n||imagesnake.com/includes/js/cat.js\n||imagesnake.com/includes/js/pops.js\n||imagetwist.com/imagetwist*.js\n||imagetwist.com/lj.js\n||imgbabes.com/element.js\n||imgbabes.com/ero-foo.html\n||imgbabes.com/ja.html\n||imgbabes.com^*/splash.php\n||imgflare.com/exo.html\n||imgflare.com^*/splash.php\n||imghost.us.to/xxx/content/system/js/iframe.html\n||imperia-of-hentai.net/banner/\n||indexxx.com^*/banners/\n||intporn.com^*/21s.js\n||intporn.com^*/asma.js\n||intporn.org/scripts/asma.js\n||iseekgirls.com/g/pandoracash/\n||iseekgirls.com/js/fabulous.js\n||iseekgirls.com/rotating_\n||iseekgirls.com^*/banners/\n||jailbaitgallery.com/banners300/\n||jav-porn.net/js/popout.js\n||jav-porn.net/js/popup.js\n||javsin.com/vip.html\n||julesjordanvideo.com/flash/$object\n||justporno.tv/ad/\n||kaotic.com^*/popnew.js\n||keezmovies.com/iframe.html?\n||kindgirls.com/banners2/\n||krasview.ru/content/$object\n||krasview.ru/resource/a.php\n||kuiken.co/inc/ex.js\n||kuntfutube.com/kellyban.gif\n||kyte.tv/flash/MarbachAdvertsDartInstream.\n||laxtime.com/rotation/\n||lesbian.hu/banners/\n||linksave.in/fopen.html\n||literotica.com/images/banners/\n||literotica.com/images/lit_banners/\n||live-porn.tv/adds/\n||liveandchat.tv/bana-/\n||livedoor.jp^*/bnr/bnr-\n||lubetube.com/js/cspop.js\n||lucidsponge.pl/pop_\n||lukeisback.com/images/boxes/\n||lukeisback.com^*/250.gif\n||lw1.cdmediaworld.com^\n||m2.xhamster.com^\n||madmovs.com/rec/\n||madthumbs.com/madthumbs/sponsor/\n||mallandrinhas.net/flutuante\n||matureworld.ws/images/banners/\n||maxjizztube.com/downloadfreemovies.php\n||meatspin.com/facebookchatlist.php\n||meatspin.com/images/fl.gif\n||media1.realgfporn.com^$subdocument\n||meendo.com/promos/\n||merb.ca/banner/\n||milkmanbook.com/dat/promo/\n||miragepics.com/images/11361497289209202613.jpg\n||mobilepornmovies.com/images/banners/\n||monstercockz.com/cont/\n||monstercockz.com/eds/\n||monstertube.com/images/access_\n||monstertube.com/images/bottom-features.jpg\n||monstertube.com/images/vjoin.\n||monstertube.com/images/vjoin_\n||morazzia.com^*/banners/\n||morebabes.to/morebabes.js\n||motherless.com/images/banners/\n||motherman.com/*.html\n||mp3musicengine.com/bearshare_logo.\n||mp3musicengine.com/images/freewatchtv1.\n||mrskin.com/data/mrskincash/$third-party\n||mrstiff.com/uploads/paysite/\n||mrstiff.com/view/context/\n||mrstiff.com/view/movie/bar/\n||mrstiff.com/view/movie/finished/\n||my-pornbase.com/banner/\n||mydailytube.com/nothing/\n||mygirlfriendvids.net/js/popall1.js\n||myhentai.tv/popsstuff.\n||myslavegirl.org/follow/go.js\n||naked-sluts.us/prpop.js\n||namethatpornstar.com/topphotos/\n||naughty.com/js/popJava.js\n||naughtyblog.org/pr1pop.js\n||netasdesalim.com/js/netas\n||netronline.com/Include/burst.js\n||newcelebnipslips.com/nipslipop.js\n||niceyoungteens.com/ero-advertising\n||niceyoungteens.com/mct.js\n||nonktube.com/brazzers/\n||nonktube.com/nuevox/midroll.php?\n||nonktube.com/popembed.js\n||novoporn.com/imagelinks/\n||ns4w.org/gsm.js\n||ns4w.org/images/promo/\n||ns4w.org/images/vod_\n||nude.hu/banners/\n||nudebabes.ws/galleries/banners/\n||nudevista.com/_/exo_\n||nudevista.com/_/pp.\n||nudevista.com/_/teasernet\n||nudography.com/photos/banners/\n||nuvid.com/videos_banner.html\n||oasisactive.com^*/oasis-widget.html\n||olderhill.com/ubr.js\n||olderhill.com^*.html|\n||onhercam.tv^*/banners/\n||onlinestars.net/ban/\n||onlinestars.net/br/\n||openjavascript.com/jtools/jads.\n||oporn.com/js/wspop.js\n||partners.xhamster.com^\n||pastime.biz/images/iloveint.gif\n||pastime.biz/images/interracial-porn.gif\n||pastime.biz^*/personalad*.jpg\n||perfectgirls.net/b/\n||phncdn.com/cb/youpornwebfront/css/babes.css$domain=youporn.com\n||phncdn.com/cb/youpornwebfront/css/skin.css$domain=youporn.com\n||phncdn.com/css/campaign.css?$domain=pornhub.com\n||phncdn.com/iframe\n||phncdn.com/images/*_skin.\n||phncdn.com/images/*_skin_\n||phncdn.com/images/banners/\n||phncdn.com/images/premium/\n||phncdn.com/images/premium_\n||phncdn.com/images/skin/\n||phncdn.com/mobile/js/interstitial-min.js?\n||phun.org/phun/gfx/banner/\n||pichunter.com/creatives/\n||pichunter.com/deals/\n||picleet.com/inter_picleet.js\n||picp2.com/img/putv\n||picsexhub.com/js/pops.\n||picsexhub.com/js/pops2.\n||picsexhub.com/rec/\n||picturedip.com/modalfiles/modal.js\n||picturedip.com/windowfiles/dhtmlwindow.css\n||picturescream.com/porn_movies.gif\n||picturescream.com/top_banners.html\n||picturevip.com/imagehost/top_banners.html\n||picxme.com/js/pops.\n||picxme.com/rec/\n||pimpandhost.com/images/pah-download.gif\n||pimpandhost.com/static/html/iframe.html\n||pimpandhost.com/static/i/*-pah.jpg\n||pink-o-rama.com/Blazingbucks\n||pink-o-rama.com/Brothersincash\n||pink-o-rama.com/Fetishhits\n||pink-o-rama.com/Fuckyou\n||pink-o-rama.com/Gammae\n||pink-o-rama.com/Karups\n||pink-o-rama.com/Longbucks/\n||pink-o-rama.com/Nscash\n||pink-o-rama.com/Pimproll/\n||pink-o-rama.com/Privatecash\n||pink-o-rama.com/Royalcash/\n||pink-o-rama.com/Teendreams\n||pinkems.com/images/buttons/\n||pinkrod.com/iframes/\n||pinkrod.com/js/adppinkrod\n||pinkrod.com/pinkrod_html/\n||pixhost.org/image/cu/\n||pixhost.org/image/rotate/\n||pixhost.org/js/jquery_show2.js\n||pixroute.com/spl.js\n||placepictures.com/Frame.aspx?\n||planetsuzy.org/kakiframe/\n||playgirl.com/pg/media/prolong_ad.png\n||plumper6.com/images/ban_pp.jpg\n||pnet.co.za/jobsearch_iframe_\n||poguide.com/cdn/images/ad*.gif\n||pontoperdido.com/js/webmessenger.js\n||porn-w.org/images/chs.gif\n||porn-w.org/images/cosy/\n||porn-w.org/images/zevera.png\n||porn.com/assets/partner_\n||porn.com/js/pu.js\n||porn4down.com^*/ryuvuong.gif\n||porn8x.net/js/outtrade.js\n||porn8x.net/js/popup.js\n||pornalized.com/contents/content_sources/\n||pornalized.com/js/adppornalized5.js\n||pornalized.com/pornalized_html/closetoplay_\n||pornarchive.net/images/cb\n||pornbanana.com/pornbanana/deals/\n||pornbay.org/popup.js\n||pornbb.org/adsnov.\n||pornbb.org/images/rotation/$image\n||pornbus.org/includes/js/bgcont.js\n||pornbus.org/includes/js/cat.js\n||pornbus.org/includes/js/ex.js\n||pornbus.org/includes/js/exa.js\n||pornbus.org/includes/js/layer.js\n||porncor.com/sitelist.php\n||pornerbros.com/p_bnrs/\n||pornerbros.com/rec/$subdocument\n||pornfanplace.com/js/pops.\n||pornfanplace.com/rec/\n||pornhub.com/catagories/costume/\n||pornhub.com/channels/pay/\n||pornhub.com/front/alternative/\n||pornhub.com/jpg/\n||pornhub.com/pics/latest/$xmlhttprequest\n||pornhub.com^$script,domain=pornhub.com\n||pornhub.com^$subdocument,~third-party\n||pornhub.phncdn.com/images/campaign-backgrounds/\n||pornhub.phncdn.com/misc/xml/preroll.xml\n||pornizer.com/_Themes/javascript/cts.js?\n||pornmade.com/images/404vz.gif\n||pornmade.com/images/az.gif\n||pornmade.com/images/cb\n||pornnavigate.com/feeds/delivery.php?\n||pornoid.com/contents/content_sources/\n||pornoid.com/iframes/bottom\n||pornoid.com/js/adppornoid\n||pornoid.com/pornoid_html/\n||pornoinside.com/efpop.js\n||pornomovies.com/js/1/login_bonus\n||pornomovies.com/pop/\n||pornorips.com/hwpop.js\n||pornorips.com^*/rda.js\n||pornorips.com^*/rotate*.php\n||pornosexxxtits.com/rec/\n||pornoxo.com/pxo/$subdocument\n||pornoxo.com/tradethumbs/\n||pornper.com/mlr/\n||pornper.com^*/pp.js\n||pornreleasez.com/prpop.js\n||pornshare.biz/1.js\n||pornshare.biz/2.js\n||pornsharia.com/Images/Sponsors/\n||pornsharia.com^*/adppornsharia.js\n||pornsharia.com^*/exo-\n||pornsharia.com^*/js/pcin.js\n||pornsharing.com/App_Themes/pornsharianew/$subdocument,~third-party\n||pornsharing.com/App_Themes/pornsharianew/js/adppornsharia*.js\n||pornsharing.com/App_Themes/pornsharingnew/$subdocument,~third-party\n||pornsharing.com/App_Themes/pornsharingnew/js/adppornsharia*.js\n||pornslash.com/images/a.gif\n||pornslash.com/images/cbside.gif\n||pornslash.com/images/cbt.gif\n||pornslash.com/images/downicon.png\n||pornslash.com/images/pr.jpg\n||pornstarlabs.com/spons/\n||pornstarterritory.com//images/bannernew.jpg\n||pornstarterritory.com^*/alsbanner\n||pornstreet.com/siteunder.js\n||porntalk.com/img/banners/\n||porntalk.com/rec/\n||porntube.com/ads|\n||pornup.me/js/pp.js\n||pornvideoxo.com^$subdocument,~third-party\n||pornwikileaks.com/adultdvd.com.jpg\n||pr-static.empflix.com^\n||pr-static.tnaflix.com^\n||pureandsexy.org/banner/\n||purelynsfw.com^*/banners/\n||purepornvids.com/randomadseb.\n||purpleporno.com/pop*.js\n||putascaseiras.com/botao/\n||puteros.com/publisecciones/\n||pwpwpoker.com/images/*/strip_poker_\n||pwpwpoker.com/images/banners/\n||r.radikal.ru^\n||raincoatreviews.com/images/banners/\n||realgfporn.com/js/popall.js\n||realgfporn.com/js/realgfporn.js\n||realhomesex.net/*.html$subdocument\n||realhomesex.net/ae/$subdocument\n||realhomesex.net/floater.js\n||realhomesex.net/pop/\n||redtube.cc/images/bongacams.png\n||redtube.com/barelylegal/\n||redtube.com/bestporn/\n||redtube.com/nymphos/\n||redtube.com/sexychicks/\n||redtube.com/wierd/\n||redtube.com^$subdocument,~third-party\n||redtube.com^*/banner/\n||redtubefiles.com^*/banner/\n||redtubefiles.com^*/skins/\n||rev.fapdu.com^\n||rextube.com/plug/iframe.asp?\n||rikotachibana.org/wp-content/banner/\n||rude.com/js/PopupWindow.js\n||rusdosug.com/Fotos/Banners/\n||s.xvideos.com^$subdocument\n||scorehd.com/banner/\n||scorevideos.com/banner/\n||seaporn.org/scripts/life.js\n||seemygf.com/webmasters/\n||sensualgirls.org/banner/\n||sensualgirls.org/media/banners/\n||serveporn.com/images/a-en.jpg\n||serveporn.com/images/plug-in.jpg\n||sex-techniques-and-positions.com/123ima/\n||sex-techniques-and-positions.com/banners\n||sex.com/images/*/banner_\n||sex3.com/if/\n||sex3dtoons.com/im/\n||sexilation.com/wp-content/uploads/2013/01/Untitled-1.jpg\n||sexmummy.com/float.htm\n||sexmummy.com/footer.htm\n||sexseeimage.com^*/banner.gif\n||sextube.com/lj.js\n||sextubebox.com/ab1.shtml\n||sextubebox.com/ab2.shtml\n||sexuhot.com/images/xbanner\n||sexvines.co/images/cp\n||sexy-toons.org/interface/partenariat/\n||sexy-toons.org/interface/pub/\n||sexyandfunny.com/images/totem\n||sexyandshocking.com/mzpop.js\n||sexyclips.org/banners/\n||sexyclips.org/i/130x500.gif\n||sexyfuckgames.com/images/promo/\n||sexyshare.net//banners/\n||sexytime.com/img/sexytime_anima.gif\n||shanbara.jp/300_200plus.jpg\n||shanbara.jp/okusamadx.gif\n||sharew.org/modalfiles/\n||shooshtime.com/ads/\n||shooshtime.com/images/chosenplugs/\n||shooshtimeinc.com/under.php\n||shy-cams.com/tube.js\n||signbucks.com/s/bns/\n||signbucksdaily.com/data/promo/\n||sillusions.ws^*/pr0pop.js\n||sillusions.ws^*/vpn-banner.gif\n||site.img.4tube.com^\n||skimtube.com/kellyban.gif\n||slinky.com.au/banners/\n||smutmodels.com/sponsors/\n||socaseiras.com.br/arquivos/banners/\n||socaseiras.com.br/banner_\n||socaseiras.com.br/banners.php?\n||songs.pk/ie/ietext.html\n||spankbang.com/gateway/\n||springbreaktubegirls.com/js/springpop.js\n||starcelebs.com/logos/$image\n||static.flabber.net^*background\n||static.kinghost.com^\n||stockingstv.com/partners/\n||stolenvideos.net/stolen.js\n||submityourflicks.com/banner/\n||svscomics.com^*/dtrotator.js\n||sxx.com/js/lj.js\n||t8.*.com/?*_|$xmlhttprequest,domain=tube8.com\n||taxidrivermovie.com/mrskin_runner/\n||teensanalfactor.com/best/\n||teensexcraze.com/awesome/leader.html\n||teentube18.com/js/realamateurtube.js\n||temptingangels.org/banner/\n||temptingangels.org/media/banners/\n||the-analist.info^*150-150\n||the-analist.info^*150sq\n||the-analist.info^*150x150\n||the-feeding-tube.com^*/Topbanner.php\n||thedoujin.com^$domain=gelbooru.com\n||thehun.net^*/banners/\n||thenewporn.com/js/adpthenewporn\n||thenipslip.com/GGWDrunkenAd.jpg\n||thenipslip.com/mfcbanner.gif\n||theporncore.com/contents/content_sources/\n||thepornomatrix.com/images/1-\n||thinkexist.com/images/afm.js\n||thisav.com/js/thisav_pop.js\n||thumblogger.com/thumblog/top_banner_silver.js\n||timtube.com/traffic.js\n||titsintops.com/intersitial/\n||titsintops.com/rotate/\n||tjoob.com/bgbb.jpg\n||tjoob.com/kellyban.gif\n||tnaflix.com/banner/\n||tnaflix.com/flixPlayerImages/\n||tnaflix.com^*_promo.jpg\n||trovaporno.com/image/incontri$image\n||tube8.com/penthouse/\n||tube8.com/sugarcrush/\n||tube8.com^$subdocument,~third-party\n||tubedupe.com/footer_four.html\n||tubedupe.com/side_two.html\n||turboimagehost.com/p1.js\n||twinsporn.net/images/delay.gif\n||twinsporn.net/images/free-penis-pills.png\n||twofuckers.com/brazzers\n||uflash.tv^*/affiliates/\n||ukrainamateurs.com/images/banners/\n||unblockedpiratebay.com/static/img/bar.gif\n||unoxxx.com/pages/en_player_video_right.html\n||updatetube.com/js/adpupdatetube\n||vibraporn.com/vg/\n||vid2c.com/js/atxpp.js?\n||vid2c.com/js/pp.js\n||vid2c.com/pap.js\n||vid2c.com/pp.js\n||videarn.com/vibrate.js\n||videos.com^*/jsp.js\n||vidgrab.net/adsbar.png\n||vidgrab.net/bnr.js\n||vidgrab.net/images/adsbar\n||vidgrab.net/pads2.js\n||viralporn.com^*/popnew.js\n||vstreamcdn.com^*/ads/\n||wank.to/partner/\n||wankspider.com/js/wankspider.js\n||watch2porn.net/pads2.js\n||watchindianporn.net/js/pu.js\n||weberotic.net/banners/\n||wegcash.com/click/\n||wetplace.com/iframes/$subdocument\n||wetplace.com/js/adpwetplace\n||wetplace.com/wetplace_html/\n||wetpussygames.com/images/promo/\n||whitedolly.com/wcf/images/redbar/logo_neu.gif\n||whozacunt.com/images/*-300x250.\n||whozacunt.com/images/*_300x200_\n||whozacunt.com/images/banner_\n||wiki-stars.com/thumb_if.php?\n||wiki-stars.com/trade/\n||wikiporno.org/header2.html\n||worldsex.com/c/\n||wowomg.com/*.html\n||wrenchtube.com/poppt.js\n||wunbuck.com/_odd_images/banners/\n||wunbuck.com/iframes/aaw_leaderboard.html\n||x3xtube.com/banner_rotating_\n||xbabe.com/iframes/\n||xbooru.com/block/adblocks.js\n||xbutter.com/adz.html\n||xbutter.com/geturl.php/\n||xbutter.com/js/pop-er.js\n||xfanz.com^*_banner_\n||xhamster.com/ads/\n||xhamster.com/js/xpu.js\n||xhamsterpremiumpass.com/premium_scenes.html\n||xhcdn.com^*/ads_\n||xogogo.com/images/latestpt.gif\n||xtravids.com/pop.php\n||xvideohost.com/hor_banner.php\n||xxvideo.us/ad728x15\n||xxvideo.us/bnr.js\n||xxvideo.us/playertext.html\n||xxxblink.com/js/pops.\n||xxxblink.com/rec/\n||xxxfile.net^*/netload_premium.gif\n||xxxgames.biz^*/sponsors/\n||xxxkinky.com/pap.js\n||xxxlinks.es/xvideos.js\n||xxxporntalk.com/images/\n||xxxxsextube.com/*.html$subdocument\n||xxxymovies.com/js/win.js\n||yobt.com/rec/\n||yobt.tv/js/ttu.js\n||yobt.tv/rec/\n||youaresogay.com/*.html\n||youjizz.com/vivid/\n||youngpornvideos.com/images/bangbros/\n||youngpornvideos.com/images/glamglam/\n||youngpornvideos.com/images/mofoscash/\n||youngpornvideos.com/images/teencash/\n||youngpornvideos.com/images/webmasterdelightlinks/\n||youngpornvideos.com/images/wmasterthecoolporn/\n||youporn-hub.com/lcdscript.js\n||youporn-hub.com/newlcd.js\n||youporn.com/capedorset/\n||youporn.com/watch_postroll/\n||youporn.com^$script,domain=youporn.com\n||youporn.com^$script,subdocument,domain=youporngay.com\n||youporn.com^$subdocument,~third-party\n||yourdailygirls.com/vanilla/process.php\n||yourdarkdesires.com/1.html\n||yourdarkdesires.com/2.html\n||yourdarkdesires.com/3.html\n||yourlust.com/im/onpause.html\n||yourlust.com/im/postroll.html\n||youtubelike.com/ftt2/toplists/\n||youx.xxx/thumb_top/\n||yporn.tv/uploads/flv_player/commercials/\n||yporn.tv/uploads/flv_player/midroll_images/\n||yumymilf.com^*/banners/\n||yuvutu.com^*/banners/\n||zazzybabes.com/misc/virtuagirl-skin.js\n! *** easylist:easylist_adult/adult_specific_block_popup.txt ***\n^utm_medium=pops^$popup,domain=ratedporntube.com|sextuberate.com\n|http://*?*=$popup,third-party,domain=extremetube.com|pornhub.com|redtube.com|spankwire.com|tube8.com|youporn.com|youporngay.com\n|http://*?*^id^$popup,third-party,domain=extremetube.com|pornhub.com|redtube.com|spankwire.com|tube8.com|youporn.com|youporngay.com\n||ad.userporn.com^$popup\n||eporner.com/pop.php$popup\n||fantasti.cc^*?ad=$popup\n||fantastube.com/track.php$popup\n||fc2.com^$popup,domain=xvideos.com\n||fileparadox.in/free$popup,domain=tdarkangel.com\n||h2porn.com/pu.php$popup\n||hegansex.com/exo.php$popup\n||heganteens.com/exo.php$popup\n||imagebam.com/redirect_awe.php$popup\n||movies.askjolene.com/c64?clickid=$popup\n||namethatporn.com/ntpoo$popup\n||pinporn.com/popunder/$popup\n||pop.fapxl.com^$popup\n||pop.mrstiff.com^$popup\n||porn101.com^$popup,domain=lexsteele.com\n||porn4free.tv^$popup,domain=redtube.cc\n||pornuppz.info/out.php$popup\n||publicagent.com/bigzpup.php$popup\n||rackcdn.com^$popup,domain=extremetube.com|pornhub.com|redtube.com|spankwire.com|tube8.com|youporn.com|youporngay.com\n||site-rips.org^$popup,domain=backupload.net\n||ymages.org/prepop.php$popup\n!------------------------Specific element hiding rules------------------------!\n! *** easylist:easylist/easylist_specific_hide.txt ***\nsearch.safefinder.com,search.snapdo.com###ABottomD\naol.com###AOLP_partnerSearch\nsearch.safefinder.com,search.snap.do,search.snapdo.com###ATopD\navsforum.com###AVSForum_com_300x150_Sponsor_TECH_Forum\npatheos.com###A_Artl_970x90_OptDirect\npatheos.com###A_Home_728x90_Header\nel33tonline.com###AdB\nnextag.com###AdBox\nel33tonline.com###AdC\ncommunity.adlandpro.com###AdContent\nel33tonline.com###AdD\nel33tonline.com###AdE\nel33tonline.com###AdF\nel33tonline.com###AdG\nel33tonline.com###AdH\nel33tonline.com###AdI\nel33tonline.com###AdK\nel33tonline.com###AdL\nrosemaryconley.tv###Add\nigcd.net,tangorin.com,webcarstory.com###Ads\nsearch.snap.do,search.snapdo.com###AfloatingD\nkbb.com###Aside\nknowyourmoney.co.uk###Au_HomePage350x200\nfileresearchcenter.com###AutoNumber3\ncrictime.com###AutoNumber5\nbuzzfeed.com###BF_WIDGET_10\nnovafm.com.au###BGLink\nebuddy.com###Banner\nweegy.com###BannerDiv\narto.com###BannerInfobox\nmuchmusic.com###BigBox\nslice.ca###BigBoxContainer\nmetacafe.com###Billboard\nwhatsupiran.com###BottomBanner\nfoodnetwork.ca###BottomLeader\nadvfn.com###BottomTabsElement\nmontereyherald.com###BreakingNewsSponsor\nmarketwatch.com###BrokerButtons\nebuddy.com###Button\ncgsociety.org###CGS_home_900\ncanoe.ca###CanoeBigBoxAd\nanswers.com###Casale_300x250_wrapper\ncitytv.com###CityTv-HeaderBannerBorder\nynetnews.com###ClarityRayButton\nnaturalnews.com###Container-Tier1\nnaturalnews.com###Container-Tier2\nsupersport.com###ContentPlaceHolder1_featureShopControl1_shop\ncardomain.com###ContentPlaceHolder1_rideForSaleOnEbay\nsupersport.com###ContentPlaceHolder1_shop1_shopDiv\nmuchmusic.com###ContestsSide\nuinterview.com###CrowdIgnite\namazon.com###DAadrp\nibtimes.com###DHTMLSuite_modalBox_contentDiv\ngamesforgirlz.net###DUL-jack\nmsn.com###Dcolumn\nmerriam-webster.com###Dictionary-MW_DICT_728_BOT\nstarcanterbury.co.nz###DivBigBanner\nmeettheboss.tv###DivCenterSpaceContainer\nnzherald.co.nz###DivContentRect\nnzherald.co.nz###DivHeadlineRect\nhollywood.com###DivSkyscraper\nwackyarchives.com###Div_b\nwackyarchives.com###Div_s\ncdcovers.cc###EBTopBanner\nenglishclub.com###ECtopLB\njavaprogrammingforums.com###EG6209c8f52f7d41a397438a16159bb58e\nmarthastewart.com###ERA_AD_BLOCK1\nnzherald.co.nz###ExtendedBanner\nkeprtv.com###FIN_300x250-600_homepage\nkeprtv.com###FIN_dc_300x250_home\nbehance.net###FMGABadge\nhothardware.com###FillerLeftLink\nhothardware.com###FillerRightLink\nblackamericaweb.com,camfuze.com###FooterBanner\nliverpoolfc.com###FooterLogos\nwlup.com###FooterOpenX\neweek.com###Form1\nformspring.me###Formspringme_Profile_300x250\nstayontheblack.com###GAdvert\nfinancialsurvivalnetwork.com,tsbmag.com###GB_overlay\nfinancialsurvivalnetwork.com,tsbmag.com###GB_window\nwritersdigest.com###GLinks\ngajitz.com###Gajitz-300x250\nhumorpix.com###GoogleSidebarRight\ninfoplease.com###HCads\nwikia.com,wowwiki.com###HOME_LEFT_SKYSCRAPER_1\nwikia.com,wowwiki.com###HOME_TOP_LEADERBOARD\ntheweek.com###HPLeaderbox\nmyoutsourcedbrain.com###HTML2\ncelebnipslipblog.com,countryweekly.com###HeaderBanner\ngreatschools.org###Header_728x90\nmyspace.com###HeroUnitMedRec\ndreamteamfc.com###HomeContentMpu\naustinchronicle.com###HowAboutWe\ncollegerecruiter.com###IMU_468x60\ncollegerecruiter.com###IMU_468x60_search-results\ncollegerecruiter.com###IMU_728x90\npatheos.com###I_Artl_970x40_Breaking\npatheos.com###I_Blog_300x100_Pos1\nicelandreview.com###ImgArea2\nserverwatch.com###InlineAssetListing\nindiaresults.com###Irc_Gra_add\nkhaleejtimes.com###KTBannerBox\nign.com###LB_Row\nglobaltv.com###LBigBox\nwikia.com,wowwiki.com###LEFT_SKYSCRAPER_1\nwikia.com###LEFT_SKYSCRAPER_2\nyahoo.com###LREC\nstupidvideos.com###LRECContainer\nlivesoccertv.com###LSTV_ROS_300x250\nlivesoccertv.com###LSTV_ROS_468x60\nmb.com.ph###LeaderBoardTop\nmuchmusic.com###Leaderboard\nwistechnology.com###LeaderboardContainer\nfreeiconsdownload.com###LeftBanner\nprintmag.com,wetcanvas.com###LinkSpace\nustream.tv###LoginBannerWrapper\nhotnewhiphop.com###LookoutContent\nmail.yahoo.com###MIP4\nmedicalnewstoday.com###MNT_600xFlex_Middle\nmail.yahoo.com###MNW\nautotrader.ie,natgeotv.com###MPU\nnick.co.uk###MPU-wrap\nmoneyexpert.com###MPUBanner\nyahoo.com###MREC\nentrepreneur.com.ph###MREC01\nentrepreneur.com.ph###MREC02\ni4u.com###MainContent > .SidebarBox\nuinterview.com###MarketGid2421\nfree-torrents.org###MarketGid900\ninvestopedia.com###Marketplace\nmetacafe.com###MedRect\nmetacafe.com###MedRect2\nhowstuffworks.com###MedRectHome\nfinance.yahoo.com,news.yahoo.com###MediaFeaturedListEditorial\nfacebook.com###MessagingNetegoWrapper\ntokeofthetown.com,toplessrobot.com###Middle\nnytimes.com###MiddleRight\napcointl.org###Mod124\nthetibetpost.com###Mod277\nthetibetpost.com###Mod296\ntheoslotimes.com###Mod346\nkbb.com###Mrec-container\nninemsn.com.au###NH_shoppingTabs\nnytimes.com###NYTD_DYNAMIC_IFADS\nkbb.com###New-spotlights\nindia.com###NewBanner\nwalmart.com###OAS_Left1\nvidspot.net###On3Pla1ySpot\nbestreams.net,fastvideo.in,played.to,realvid.net,vidstream.in###OnPlayerBanner\nallmyvideos.net###OnPlayerClose\npch.com###PCHAdWrap\nmissoulian.com,thenewstribune.com,theolympian.com###PG_fb\nazdailysun.com,azstarnet.com,billingsgazette.com,elkodaily.com,heraldextra.com,metromix.com,missoulian.com,tdn.com,thenewstribune.com,theolympian.com,trib.com###PG_link\njoystickdivision.com###Page_Header\nclipmarks.com###Panel\npoliticususa.com###PrimaryMid1\ndinodirect.com###ProductShowAD\nnewser.com###PromoSquare\nglobaltv.com###RBigBoxContainer\ngardenista.com,remodelista.com###REMODELISTA_BTF_CENTER_AD_FRAME\ngardenista.com,remodelista.com###REMODELISTA_BTF_RIGHTRAIL-2\nsmash247.com###RT1\nreadwriteweb.com###RWW_BTF_CENTER_AD\nistockanalyst.com###RadWindowWrapper_ctl00_ContentPlaceHolderMain_registration\nawazfm.co.uk###Recomends\nebuddy.com###Rectangle\nreference.com###Resource_Center\nblackamericaweb.com###RightBlockContainer2\nkillsometime.com###RightColumnSkyScraperContainer\nmail.yahoo.com,skateboardermag.com###SKY\nglobaltv.com###SPBigBox\nglobaltv.com###SRBigBoxContainer\nmsn.com###Sales1\nmsn.com###Sales2\nmsn.com###Sales3\nmsn.com###Sales4\nscamdex.com###ScamdexLeaderboard\nmedicinenet.com###SearchUnit\npolyvore.com###Set_RHS_IABMediumRect\nin.msn.com###Shaadi\ntriblive.com###ShopLocal\nwhitepages.ae###ShortRectangle_UpdatePanel2\ngrapevine.is###Side\nmail.aol.com###SidePanel\nmsnbc.msn.com,nbcnews.com###Sidebar2-sponsored\ndaringfireball.net###SidebarTheDeck\nimcdb.org###SiteLifeSupport\nimcdb.org###SiteLifeSupportMissing\nthisismoney.co.uk###Sky\naustinchronicle.com###Skyscraper\nteoma.com###Slink\nwritersdigest.com###SpLinks\nhowstuffworks.com###SponLogo\nrapidsharedata.com###Sponsored\nsimilarsites.com###SponsoredTag\ngamebanana.com###SquareBanner\nlinuxjournal.com###TB_overlay\nlinuxjournal.com###TB_window\nninemsn.com.au###THEFIX_promo\nwikia.com,wowwiki.com###TOP_LEADERBOARD\nustream.tv###Takeover\nglasssteelandstone.com###TextSponsorBar\njoystickdivision.com,tokeofthetown.com,toplessrobot.com###Top\nblackamericaweb.com,cjnews.com,entertainmentearth.com###TopBanner\ngamespy.com###TopMedRec\ngoverning.com###Topbanner\ngenengnews.com###Topbanner_bar\nal.com###Toprail_Leaderboard\ngamebanana.com###TowerBanner\naustinchronicle.com###TravelZoo\nxe.com###UCCInputPage_Slot1\nxe.com###UCCInputPage_Slot2\nxe.com###UCCInputPage_Slot3\nglobaltv.com###VideoPlayer-BigBox\nmoviefone.com###WIAModule\nrediff.com###WR1_container\nalbumjams.com,ecostream.tv###WarningCodec\nwikia.com###WikiaTopAds\nxojane.com###XOJANE_BTF_CENTER\nxojane.com###XOJANE_BTF_RIGHTRAIL\nnytimes.com###XXL\nmusic.yahoo.com###YMusicRegion_T2_R2C2\nmusic.yahoo.com###YMusicRegion_T3_R2C2_R1\nmusic.yahoo.com###YMusicRegion_TN1_R2C2_R1\nyahoo.com###YSLUG\nzapak.com###ZAPADS_Middle\ngolf.com###\\31 000-104-ros\ngearburn.com,memeburn.com###\\33 00X250ad\ntvembed.eu###\\33 00banner\ndangerousminds.net###\\37 28ad\nforexpros.com###\\5f 300x250textads\nthegalaxytabforum.com###\\5f _fixme\nhappystreams.net###\\5f ad_\nfunnyordie.com###\\5f ad_div\nmail.google.com###\\:rr .nH[role=\"main\"] .mq:first-child\nmail.google.com###\\:rr > .nH > .nH[role=\"main\"] > .aKB\nmail.google.com###\\:rr > .nH > .nH[role=\"main\"] > .nH > .nH > .AT[style]\nmail.google.com###\\:rr > .nH > div[role=\"main\"] > .mq:last-child\nbusiness.com###_ctl0_RightContentplaceholder_FeaturedListingsUC_featuredListingsBox\nama-assn.org###a\ndm5.com###a1\nanchorfree.net###a72890_1\nmetblogs.com###a_medrect\nytmnd.com###a_plague_upon_your_house\nmetblogs.com###a_widesky\nipdb.at###aaa\ntotalfilm.com###ab1\nwebgurubb.com###ab_top\nnearlygood.com###abf\nunblock-proxy-server.com###ablc\njakeludington.com###ablock\njakeludington.com###ablock3\nfree-tv-video-online.me###ablocker\nfederalnewsradio.com###above-header-980\nnext-gen.biz###above-header-region\nblekko.com###above-results > #number-results + div\nmacworld.com###aboveFootPromo\nhealthgrades.com###abovePage\nfeministing.com###abovefooter\nfeministing.com###aboveheader\ntvseriesfinale.com###abox\nreference.com,thesaurus.com###abvFold\nblocked-website.com###acbox\nfilefactory.com###acontainer\nbitcoca.com###active1\nbitcoca.com###active2\nbitcoca.com###active3\n1050talk.com,4chan.org,altervista.org,amazon.com,aol.com,ap.org,awfuladvertisements.com,bitcoinmonitor.com,braingle.com,campusrn.com,chicagonow.com,cocoia.com,cryptoarticles.com,dailydigestnews.com,daisuki.net,devshed.com,djmickbabes.com,drakulastream.eu,earthtechling.com,esquire.com,fantom-xp.com,farmville.com,fosswire.com,fullrip.net,g4tv.com,gifts.com,golackawanna.com,google.com,guiminer.org,helpwithwindows.com,hknepaliradio.com,ifunnyplanet.com,ifyoulaughyoulose.com,imageshack.us,instapaper.com,internetradiouk.com,investorschronicle.co.uk,jamaicaradio.net,jamendo.com,jigzone.com,learnhub.com,legendofhallowdega.com,libertychampion.com,livevss.net,loveshack.org,lshunter.tv,macstories.net,marketingpilgrim.com,mbta.com,milkandcookies.com,msn.com,msnbc.com,mydallaspost.com,nbcnews.com,neoseeker.com,nepaenergyjournal.com,ninemsn.com.au,nzherald.co.nz,omgili.com,onlineradios.in,phonezoo.com,printitgreen.com,psdispatch.com,psu.com,queensberry-rules.com,radio.net.bd,radio.net.pk,radio.or.ke,radio.org.ng,radio.org.nz,radio.org.ph,radioonline.co.id,radioonline.my,radioonline.vn,radiosa.org,radioth.net,radiowebsites.org,rapidshare-downloads.com,reversegif.com,robotchicken.com,saportareport.com,sciencerecorder.com,shop4freebies.com,slidetoplay.com,socialmarker.com,statecolumn.com,streamhunter.eu,technorati.com,theabingtonjournal.com,thetelegraph.com,timesleader.com,torrentbutler.eu,totaljerkface.com,totallycrap.com,trinidadradiostations.net,tutorialized.com,twitch.tv,ultimate-rihanna.com,vetstreet.com,vladtv.com,wallpapers-diq.com,wefunction.com,womensradio.com,xe.com,yahoo.com,youbeauty.com,ytconv.net,zootool.com###ad\nclip.dj,dafont.com,documentary.net,gomapper.com,idahostatejournal.com,investorschronicle.co.uk,megafilmeshd.net,newsinc.com,splitsider.com,theawl.com,thehindu.com,thehindubusinessline.com,timeanddate.com,troyhunt.com,weekendpost.co.zw,wordreference.com###ad1\nbtvguide.com,cuteoverload.com,edmunds.com,investorschronicle.co.uk,megafilmeshd.net,pimpandhost.com,theawl.com,thehairpin.com,troyhunt.com,weekendpost.co.zw###ad2\nbtvguide.com,internetradiouk.com,jamaicaradio.net,onlineradios.in,pimpandhost.com,radio.net.bd,radio.net.pk,radio.or.ke,radio.org.ng,radio.org.nz,radio.org.ph,radioonline.co.id,radioonline.my,radioonline.vn,radiosa.org,radioth.net,splitsider.com,theawl.com,thehairpin.com,trinidadradiostations.net,way2sms.com,weekendpost.co.zw,zerocast.tv###ad3\nsplitsider.com,theawl.com,thehairpin.com###ad4\nabout.com,allexperts.com###adB\njoblo.com###adBillboard\nfxnetworks.com,isearch.avg.com###adBlock\nexperts-exchange.com###adComponent\ngamemazing.com###adContainer\nabout.com,paidcontent.org###adL\napnadesi-tv.net,britsabroad.com,candlepowerforums.com,droidforums.net,filesharingtalk.com,forum.opencarry.org,gsmindore.com,hongfire.com,justskins.com,kiwibiker.co.nz,lifeinvictoria.com,lotoftalks.com,m-hddl.com,moneymakerdiscussion.com,mpgh.net,nextgenupdate.com,partyvibe.com,perthpoms.com,pomsinadelaide.com,pomsinoz.com,printroot.com,thriveforums.org,watchdesitv.com,watchuseek.com,webmastertalkforums.com,win8heads.com###ad_global_below_navbar\nim9.eu###adb\ntweakguides.com###adbar > br + p[style=\"text-align: center\"] + p[style=\"text-align: center\"]\ntweakguides.com###adbar > br + p[style=\"text-align: center\"] + p[style=\"text-align: center\"] + p\nphonezoo.com###adbb\nmp3tag.de###adblock-download\nnowsci.com###adblocker\nbizjournals.com###adc2\nrapid-search-engine.com###adcid1\nfotochatter.com###adcon\ntubeplus.me###add\npbs.org###add-block-placer\nneurosoftware.ro###addDiv\natlanticfarmfocus.ca###add_bottom\nimageshack.us###add_frame\ncanadianfamily.ca###add_left\ncanadianfamily.ca###add_right\nchipchick.com###add_space577\natlanticfarmfocus.ca,capebretonpost.com,paherald.sk.ca###add_top\nwashingtonjewishweek.com###addclose\nveryicon.com###addd\nbarbavid.com###additional_plugins_bar\nway2sms.com###addiv\njoymag.co.za###addlink\ntorrent-finder.info###addon_info\ncomputerworld.com###addresources\ncomputerworld.com###addresources_module\nkenrockwell.com,mocospace.com,telegraph.co.uk###adds\nchronicleonline.com,sentinelnews.com,theandersonnews.com###adgallery\ntortoisesvn.net###adgroup\nshivtr.com###admanager\ngirlsgames.biz###admd\nmp3skull.com###adr_banner\nmp3skull.com###adr_banner_2\n909lifefm.com,anichart.net,audioreview.com,carlow-nationalist.ie,chelseanews.com,daemon-tools.cc,disconnect.me,dreadcentral.com,duckduckgo.com,eveningecho.ie,financenews.co.uk,footballfancast.com,g.doubleclick.net,gearculture.com,genevalunch.com,hdcast.tv,healthboards.com,hiphopisdream.com,inspirationti.me,isearch-for.com,kildare-nationalist.ie,laois-nationalist.ie,lorempixel.com,lyricstime.com,mobilerevamp.org,mtbr.com,nylonguysmag.com,photographyreview.com,placehold.it,playr.org,privack.com,quiz4fun.com,quote.com,roscommonherald.ie,skyuser.co.uk,talk1300.com,theindustry.cc,toorgle.net,triblive.com,tvope.com,urbandictionary.com,washingtonmonthly.com,waterford-news.ie,wccftech.com,westernpeople.com,wexfordecho.ie###ads\nrelease-ddl.com,womanowned.com###ads3\nchia-anime.com###ads4\nchia-anime.com###ads8\nscreencity.pl###ads_left\nprivack.com###adsb\nboingboing.net###adskin\nvideos.com###adsl\nsmh.com.au###adspot-300x600\\,300x250-pos-1\nvideos.com###adst\nfitnessmagazine.com###adtag\nninemsn.com.au###adtile\nconservativepost.com###adtl\nmnn.com,streamtuner.me###adv\nnovamov.com,tinyvid.net,videoweed.es###adv1\ncad-comic.com###advBlock\nforexminute.com###advBlokck\nteleservices.mu###adv_\\'146\\'\narsenal.com,farmersvilletimes.com,ishared.eu,murphymonitor.com,princetonherald.com,runescape.com,sachsenews.com,shared2.me,wylienews.com###advert\nuploaded.to###advertMN\nbt.com,chron.com,climateprogress.org,computingondemand.com,everydaydish.tv,fisher-price.com,funnygames.co.uk,games.on.net,givemefootball.com,intoday.in,iwin.com,msn.com,mysanantonio.com,nickjr.com,nytsyn.com,opry.com,peoplepets.com,psu.com,radiozdk.com,sonypictures.com,thatsfit.com,truelocal.com.au,unshorten.it,variety.com,washingtonian.com,yippy.com###advertisement\ntypepad.com###advertisements\nmiamisunpost.com###advertisers\nbom.gov.au,develop-online.net,geeky-gadgets.com,govolsxtra.com,hwbot.org,motortorque.com,pcr-online.biz,profy.com,webshots.com###advertising\n1cookinggames.com,intowindows.com,irishhealth.com,playkissing.com,snewscms.com,yokogames.com###advertisment\nkickoff.com###advertisng\nshare-links.biz###advice\nsofeminine.co.uk###af_lmbcol_sep\nkatzforums.com###aff\nzap2it.com###aff_rightbar\nnigeriafootball.com###affiliate-bottom\ngtopala.com###affiliate-index-300x250\ncarmall.com###affiliates\nawkwardfamilyphotos.com###afpadq-leaderboard\nawkwardfamilyphotos.com###afpadq-sidebar1\nawkwardfamilyphotos.com###afpadq-sidebar2\nsearch.rr.com###afsBot\nsearch.rr.com###afsTop\ninvestorplace.com###after-post-banner\nallgames.com###ag_AdBannerTop\naol.com###ai300x250\najchomefinder.com###ajc-homefinder-leaderboard\nunknown-horizons.org###akct\nnews.com.au###alert-strap\nluckyacepoker.com###alertpop\nrelease-ddl.com###alexa\nsearch.mywebsearch.com###algo + div[id]\nsearch.mywebsearch.com###algo + div[id] + div[id]\nblisstree.com,mommyish.com,teen.com,thegloss.com,thegrindstone.com###alloy-300x250-tile2\nteen.com###alloy-300x250-tile3\ngurl.com,teen.com###alloy-728x90-tile1\ngurl.com,teen.com###alloy-728x90-tile4\nohjoy.blogs.com###alpha\nohjoy.blogs.com###alpha-inner\nalternet.org###altsocial_splash\nsportsgrid.com,thejanedough.com###am-ngg-ss-unit-label\n3dtin.com,juicefm.com,ovguide.com,pulse1.co.uk,pulse2.co.uk,signal1.co.uk,signal2.co.uk,swanseasound.co.uk,thewave.co.uk,wave965.com,wbur.org,wirefm.com,wishfm.net###amazon\nimdb.com###amazon-affiliates\npri.org###amazonBox180\npcadvisor.co.uk###amazonPriceListContainer\nimfdb.org###amazoncontent\nzap2it.com###amc-twt-module\nrealbeauty.com###ams_728_90\npublicradio.org###amzContainer\naim.org###amznCharityBanner\nvisitsundsvall.se###annons-panel\nhardocp.com###announcements\npeliculas-flv.com###anuncio\ndailymirror.lk###apDiv2 > .main > div[style=\"margin:5px 0 0px 0;\"]\ntopix.com###apartments_block\npublicradio.org###apm_sponsor\ncultofmac.com###apptapArticleBottom\nbizjournals.com###arcbc1\narchlinux.org###arch-sponsors\nboingboing.net###ards\nphilly.com###area-main-center-road-block\nmoneynews.com###artPgScnShrWrapper\nindependent.co.uk###article > .box\nighome.com###article-modal + div[style=\"margin:0 25px;\"] > .gadget-box[width=\"100%\"]:first-child:last-child\neveningtimes.co.uk###article-mpu\nwtkr.com###article-promo\nadotas.com,radiotimes.com###article-sponsor\nlondon24.com###article-top\naccountingtoday.com,themiddlemarket.com###article_bigbox\ncomputerworld.com.au###article_whitepapers\ngethampshire.co.uk###articleright\nfindmysoft.com###as_336\nvortez.net###aseadnetv2\nflyordie.com###asf\nktar.com###askadv\nautoblog.com###asl_bot\nautoblog.com###asl_top\npv-tech.org###associations-wrapper\nforwardprogressives.com###aswift_1_expand\nforwardprogressives.com###aswift_2_expand\nforwardprogressives.com###aswift_3_expand\nnewsblaze.com###atf160x600\nbustedcoverage.com###atf728x90\necoustics.com###atf_right_300x250\ncollegecandy.com###atflb\ncoed.com,collegecandy.com###atfmrec\nhackthissite.org###atimg\nwebmd.com###attribution_rdr\npogo.com###avertising\nanchorfree.us###b160x600\ndigitalartsonline.co.uk###b2cPlaceHolder\nanchorfree.us###b300x250\nsiliconera.com###b5leaderboard\nhighstakesdb.com###bLeft\nhighstakesdb.com###bRight\nhighstakesdb.com###bSpecificL\nhighstakesdb.com###bSpecificR\nblinkbox.com###b_ad_zc\nblinkbox.com###b_ee_de\nblinkbox.com###b_jd_id\nhuhmagazine.co.uk###back\nmmoculture.com###background-link\nwallpapersmania.com###backgroundPopup\nmovie2k.tl,show-links.tv,watchfreemovies.ch###ball\nsoccerbase.com###ball_splash_holder\ndoctor.com###banR\nintelligencer.ca,siteseer.ca,thepeterboroughexaminer.com,thesudburystar.com###banZone\ngobackpacking.com###ban_300\nneopets.com###ban_bottom\nengland.fm,thestates.fm###banbo\nvirtualnights.com###banderolead\nftadviser.com###banlb\niloubnan.info###bann\ngoldentalk.com###bann2\nabsoluteradio.co.uk,adv.li,allmyfaves.com,arsenal.com,blahblahblahscience.com,brandrepublic.com,businessspectator.com.au,christianpost.com,comicsalliance.com,cool-wallpaper.us,cumbrialive.co.uk,dealmac.com,dealsonwheels.co.nz,delcotimes.com,disney.go.com,djmag.co.uk,djmag.com,dosgamesarchive.com,empowernetwork.com,farmtrader.co.nz,guidespot.com,healthcentral.com,icq.com,imgmaster.net,in-cumbria.com,indianexpress.com,insideradio.com,irishcentral.com,keygen-fm.ru,lemondrop.com,lotro-lore.com,mediaite.com,morningjournal.com,movies.yahoo.com,moviesfoundonline.com,mypremium.tv,neave.com,news-herald.com,newstonight.co.za,nhregister.com,northernvirginiamag.com,nzmusicmonth.co.nz,ocia.net,pbs.org,pgpartner.com,popeater.com,poughkeepsiejournal.com,proxy-list.org,ps3-hacks.com,registercitizen.com,roughlydrafted.com,saratogian.com,screenwallpapers.org,securityweek.com,sfx.co.uk,shortlist.com,similarsites.com,soccerway.com,sportinglife.com,stopstream.com,style.com,theoaklandpress.com,thesmokinggun.com,theweek.com,tictacti.com,topsite.com,tortoisehg.bitbucket.org,twistedsifter.com,urlesque.com,vidmax.com,viewdocsonline.com,vps-trading.info,wellsphere.com,wn.com,wsof.com,zootoday.com###banner\nkiz10.com###banner-728-15\nwftlsports.com###banner-Botleft\nwftlsports.com###banner-Botright\ndrivers.com###banner-bg-scanner\nimgbox.com,onrpg.com,plasticsnews.com,vladtv.com###banner-bottom\nworldweb.com###banner-column\nintouchweekly.com###banner-cross\nkiz10.com###banner-down-video\nfilm.fm###banner-footer\nmob.org###banner-h400\njacarandafm.com###banner-holder\ngardentenders.com,homerefurbers.com,sportfishingbc.com###banner-leaderboard\nkiz10.com###banner-left\nelle.com,forums.crackberry.com###banner-main\ncstv.com###banner-promo\nmp3clan.com###banner-pub\nkiz10.com,motherboard.tv###banner-right\ngeneral-fil.es,generalfil.es###banner-search-bottom\ngeneral-fil.es###banner-search-top\ntorrentpond.com###banner-section\nirishtimes.com###banner-spacer\nblocked-website.com,cjonline.com,wftlsports.com###banner-top\nvladtv.com###banner-top-video\nmob.org###banner-w790\ngeorgiadogs.com,goarmysports.com,slashdot.org###banner-wrap\n4teachers.org,dailyvoice.com,highwayradio.com###banner-wrapper\nsiliconrepublic.com###banner-zone-k\nbusinessandleadership.com,siliconrepublic.com###banner-zone-k-dfp\nglobaltimes.cn###banner05\nchinatechnews.com,cookinggames.com,emailjokes.co.za,kdoctv.net,killerstartups.com,metroweekly.com,tennisworldusa.org,vk.com###banner1\nthegremlin.co.za###banner125\ndooyoo.co.uk,kdoctv.net,tennisworldusa.org,vk.com###banner2\npricespy.co.nz###banner250\nactiontrip.com,christianpost.com,gamesfree.com,pcmech.com###banner300\n977music.com###banner350\nsecurenetsystems.net###bannerB\nopensourcecms.com###bannerBar\nieee.org###bannerBot\nscientificamerican.com###bannerContain\ncanoe.ca,slacker.com###bannerContainer\njumptv.com###bannerContainer_hp_bottom\njumptv.com###bannerContainer_hp_top\nsecurenetsystems.net###bannerD\nget.adobe.com###bannerDisplay\nviz.com###bannerDiv\nandroidzoom.com###bannerDown\natomicgamer.com,telefragged.com###bannerFeatures\ngatewaynews.co.za,ilm.com.pk,ynaija.com###bannerHead\nshowbusinessweekly.com###bannerHeader\nkumu.com###bannerImageName\natdhe.fm,atdhe.so,atdhe.xxx###bannerInCenter\nsecurenetsystems.net###bannerL\nsecurenetsystems.net###bannerM\nzam.com###bannerMain\npocketgamer.co.uk###bannerRight\nreuters.com###bannerStrip\natomicgamer.com,codecs.com,free-codecs.com,ieee.org,ninemsn.com.au,reference.com###bannerTop\nsky.com###bannerTopBar\nsearch.snap.do###bannerWrapper\nkhl.com###banner_1\nyellow.co.nz###banner_120_120\nkhl.com###banner_2\nking-mag.com###banner_468\nthelivetvjunction.com###banner_728_base\ntoday.az###banner_750x90\nyellow.co.nz###banner_760_120\nnuffy.net###banner_bg\n977music.com,nighttours.com###banner_bottom\nbubblebox.com,nitrome.com###banner_box\nmixfmradio.com###banner_center_728\nmixfmradio.com###banner_center_728_in\ntvnz.co.nz###banner_companion\nepicurious.com,incgamers.com###banner_container\nnitrome.com###banner_description\naol.com###banner_div\nrailwaysafrica.com###banner_footer\nmynewssplash.com###banner_google\nfulldls.com###banner_h\n3g.co.uk,freshnewgames.com###banner_header\nmudah.my###banner_holder\nversus.com###banner_instream_300x250\nkrzk.com###banner_left\nbahamaslocal.com###banner_location_sub\nbaltic-course.com###banner_master_top\nveehd.com###banner_over_vid\nworldradio.ch###banner_placement_bottom\nworldradio.ch###banner_placement_right\nebuddy.com###banner_rectangle\nkrzk.com###banner_right\nelyricsworld.com###banner_rr2\nnitrome.com###banner_shadow\nfulldls.com###banner_sq\nbizrate.com,designboom.com,humorsharing.com,kyivpost.com,linguee.com###banner_top\neastonline.eu###banner_up\nfulldls.com,fulldlsproxy.com###banner_v1\nappstorm.net,workawesome.com###banner_wrap\nwashingtonpost.com###banner_wrapper_bottom\nempiremovies.com,snapfiles.com###bannerbar\nbaltic-course.com,superpages.com###bannerbottom\nurlcash.net,urlcash.org,whitepages.com.lb,yellowpages.com.jo###bannerbox\nbdnews24.com###bannerdiv2\nfancystreems.com,zonytvcom.info###bannerfloat2\nstreams.coolsport.tv###bannerfloat22\nzawya.com###bannerframezone10325\nzawya.com###bannerframezone4\nzawya.com###bannerframezone7\ntcmagazine.com,tcmagazine.info###bannerfulltext\nchipchick.com###bannerheader\nbaltic-course.com###bannerleft\nspellchecker.net###bannerplace\nfreegirlgames.org###bannerplay\nvirusbtn.com###bannerpool\ndriverdb.com,european-rubber-journal.com,mobile-phones-uk.org.uk,offtopic.com,toledofreepress.com###banners\nbergfiles.com,berglib.com###banners-24\nwrmj.com###banners-top\neluniversal.com,phuketwan.com###bannersTop\nkrzk.com###banners_bottom\ninsideedition.com###bannerspace-expandable\ncricketnirvana.com###bannerstrip\nfitnessmagazine.com###bannertable\nbaltic-course.com,newzglobe.com,webfail.com###bannertop\nocregister.com###bannertop2\nbhg.com,parents.com###bannerwrapper\nsearchquotes.com###bannerx\nbernama.com###bannerz\nh-online.com###bannerzone\nmomversation.com###barker\nonline.barrons.com###barronsUber\nphonebook.com.pk###basebannercontainer\nmoviecomix.com###bass\nsilverseek.com###bat-region\ndigitalhome.ca###bb\negreetings.com###bb-billboard\nblackbookmag.com###bb-overlay\nblackbookmag.com###bb-splash\negreetings.com###bb-title\nakihabaranews.com###bbTop\nnzherald.co.nz###bbWrapper\npolodomains.com###bbannertop\nbbc.com###bbccom_bottom[style=\"width:468px; text-align:right;\"]\nbbc.co.uk,bbc.com###bbccom_leaderboard\nbbc.co.uk###bbccom_leaderboard_container\nbbc.co.uk,bbc.com###bbccom_mpu\nbbc.co.uk###bbccom_sponsor_section\nbbc.co.uk###bbccom_storyprintsponsorship\nbustedcoverage.com###bcbtflb\nbettingsports.com###before_footer\nmindjolt.com###below-banner\nmindjolt.com###below-banner-game\nstopthedrugwar.org###below-masthead\nrantsports.com###below-post\nradaronline.com###below_header\ntgdaily.com###bestcovery_container\ndailygalaxy.com###beta-inner\nnigeriafootball.com###bettingCompetition\natđhe.net###between_links\nsearchenginejournal.com###bg-atag\nsearchenginejournal.com###bg-takeover-unit\nlivescience.com###bgImage\nfrostytech.com###bg_googlebanner_160x600LH\noboom.com###bgfadewnd1\n973fm.com.au,buzzintown.com,farmingshow.com,isportconnect.com,mix1011.com.au,mix1065.com.au,newstalkzb.co.nz,ps3news.com,radiosport.co.nz,rlslog.net,runt-of-the-web.com,sharkscope.com###bglink\nrunnerspace.com###bgtakeover\nforbes.com###bigBannerDiv\nspacecast.com,treehousetv.com###bigBox\nchinadaily.com.cn###big_frame\ncanoe.ca,winnipegfreepress.com,worldweb.com###bigbox\nabout.com,cumberlandnews.co.uk,cumbrialive.co.uk,eladvertiser.co.uk,hexhamcourant.co.uk,in-cumbria.com,mg.co.za,newsandstar.co.uk,nwemail.co.uk,timesandstar.co.uk,whitehavennews.co.uk###billboard\nabout.com###billboard2\ntheblaze.com###billboard_970x250\ntech-faq.com,techspot.com###billboard_placeholder\njoe.ie###billboard_wrapper\nyp.com.kh###billboards\nohio.com###bim-mortgage-container\nthedailybeast.com###bing-module\nbroadcastingcable.com###biz-main\nvaldostadailytimes.com###biz_marquee\nslate.com###bizbox_links_bottom\nplay4movie.com###bkg_adv\ngamesforgirlsclub.com###bl-37\nstupidvideos.com###black_sky_header\ndevshed.com,eweek.com###blackscreen\nbacklinkwatch.com,portforward.com###blanket\nblueletterbible.org###blbSponsors\nuploadc.com###blinkMe\nwhatculture.com###blinkbox\nkioskea.net###bloc_middle\n1027dabomb.net###block-10\nalt1059.com,theticketmiami.com###block-11\nalt1059.com###block-22\ntheticketmiami.com###block-65\nuproxx.com###block-728\nfilmschoolrejects.com###block-banners-top\nhilarious-pictures.com,winbeta.org###block-block-1\npcdecrapifier.com###block-block-10\nnewsbusters.org,slideme.org###block-block-11\nhilarious-pictures.com,nbr.co.nz###block-block-12\nglobalgrind.com###block-block-13\ngotchamovies.com###block-block-14\nabduzeedo.com,driveout.co.za,emaxhealth.com,eturbonews.com,eugeneweekly.com,lasvegascitylife.com,mixtapetorrent.com###block-block-18\ndailypaul.com,virus.gr###block-block-19\nopposingviews.com###block-block-199\nabduzeedo.com###block-block-2\ncnsnews.com,prospect.org,webosnation.com###block-block-21\n7tutorials.com,carnalnation.com,rslinks.org###block-block-22\n7tutorials.com,multiplication.com,thestandard.com,voxy.co.nz###block-block-24\nmotherjones.com###block-block-27\nfrance24.com###block-block-275\ncosmicbooknews.com###block-block-29\nmotherjones.com###block-block-301\nslideme.org###block-block-31\ngreenbiz.com,latina.com,newsbusters.org###block-block-33\nvoxy.co.nz###block-block-34\nmixtapetorrent.com###block-block-36\ndailypaul.com,latina.com###block-block-37\nbitchmagazine.org,ovg.tv###block-block-38\nlatina.com###block-block-39\neducationworld.com,greenbiz.com,sonymasterworks.com###block-block-4\nlatina.com,rslinks.org###block-block-40\neturbonews.com,shape.com###block-block-42\ndrivesouth.co.nz,motherjones.com###block-block-46\ncarnalnation.com###block-block-5\nabduzeedo.com,freesoftwaremagazine.com###block-block-51\nadsoftheworld.com###block-block-52\npopsci.com###block-block-53\nigbaffiliate.com,nationalenquirer.com###block-block-6\nmaximumpc.com###block-block-60\nmaximumpc.com###block-block-61\npopsci.com###block-block-63\nbrownfieldbriefing.com,educationworld.com,minnpost.com,nationalenquirer.com###block-block-7\ngreenbiz.com###block-block-72\npopsci.com###block-block-75\nhilarious-pictures.com###block-block-8\ntricycle.com###block-block-82\nmaximumpc.com###block-block-89\nmaximumpc.com###block-block-96\ncrooksandliars.com###block-clam-1\ncrooksandliars.com###block-clam-3\ncrooksandliars.com###block-clam-7\nphonedog.com###block-common-core-voip-business\nphonedog.com###block-common-core-voip-residential\ntodayonline.com###block-dart-dart-tag-all-pages-header\npopphoto.com###block-dart-dart-tag-bottom\ntodayonline.com###block-dart-dart-tag-dart-homepage-728x90\npopphoto.com###block-dart-dart-tag-top1\nmedicaldaily.com###block-dfp-bottom\nncronline.org###block-dfp-content-1\nncronline.org###block-dfp-content-2\nncronline.org###block-dfp-content-3\nncronline.org###block-dfp-content-4\nncronline.org###block-dfp-home-1\nncronline.org###block-dfp-home-2\nncronline.org###block-dfp-home-3\nshape.com###block-dfp-top\nknowyourmobile.com###block-dialaphone-dialaphone\nexaminer.com###block-ex_dart-ex_dart_adblade_topic\n4hi.com.au,4vl.com.au,hotcountry.com.au###block-exponential-exponential-mrec\n4hi.com.au,4vl.com.au,hotcountry.com.au###block-exponential-exponential-mrec2\ninfoworld.com###block-infoworld-sponsored_links\n14850.com###block-ofefo-5\n14850.com###block-ofefo-7\n14850.com###block-ofefo-8\necnmag.com###block-panels-mini-dart-stamp-ads\nyourtango.com###block-tango-10\nyourtango.com###block-tango-9\nucas.com###block-ucas-ads-header-ad\nhomesandantiques.com###block-views-Promotions-block_1\nminnpost.com###block-views-hp_sponsors-block_1\nwisebread.com###block-views-nodequeue_14-block\nasiaone.com###block-views-qoo10-box-block-1\n4hi.com.au,4vl.com.au,hotcountry.com.au###block-views-sponsored-links-block\nwbez.org###block-wbez-blocks-wbez-ad-bottom\nwbez.org###block-wbez-blocks-wbez-ad-top\nwpdaddy.com###block1\narsenalnewsreview.co.uk###block_3\nmoneyearningforum.com###block_html_5\nblackhatteam.com###block_html_6\nownedcore.com###block_html_9\ntubeplus.me###blocker\nkveller.com###blogTopWide\nzdnet.com###blog_spbg\nscotusblog.com###bloomberg_sponsor\nkokomoperspective.com###blox-leaderboard-user\nsiouxcityjournal.com###blox-news-alerts-sponsor\nitreviews.co.uk###bmmBox\nwindowsnetworking.com###bmp-article-script\nwindowsnetworking.com###bmp-side-script\nkprpam650.com###bnftr-none\npeliculas-flv.com###bnnr300x250\ndnsrsearch.com###bnr\nreference.com,thesaurus.com###bnrTop\nign.com###boards_medrec_relative\njoox.net###body-sidebar\nlivescore.in###bonus-offers\ncomputerworld.com###bonus_resource_center\ncarolinajournal.com###book-abs\nlinuxtopia.org,techotopia.com###bookcover_sky\neurogamer.net###boom-box\nlibraryjournal.com###boomBox\nlocal.co.uk###borderTab\nsnapfiles.com###borderbar\nreference.com###bot\nmp3lyrics.org###bota\ntrutv.com###botleadad\nphonescoop.com###botlink\nadf.ly,deezer.com,forums.vr-zone.com,hplusmagazine.com,j.gs,q.gs,u.bb,usniff.com###bottom\njillianmichaels.com###bottom-300\ndancehallreggae.com,investorplace.com,kiz10.com,lyrics19.com,radionomy.com###bottom-banner\nvidstatsx.com###bottom-bar\nnews.cnet.com###bottom-leader\nohio.com###bottom-leader-position\naudioreview.com,fayobserver.com,g4chan.com,icanhasinternets.com,legacy.com,thenextweb.com,topcultured.com###bottom-leaderboard\nstartupnation.com###bottom-leaderboard-01\ncanstar.com.au###bottom-mrec\nbidnessetc.com###bottom-panel\ntemplatemonster.com###bottom-partner-banners\ntechhive.com###bottom-promo\nthebestdesigns.com###bottom-sponsors\ntimesofisrael.com###bottom-spotlight\ncartoonnetwork.co.nz,cartoonnetwork.com.au,quotesdaddy.com###bottomBanner\nrachaelraymag.com###bottomBannerContainer\nwtmx.com###bottomBanners\ndailyglow.com###bottomContainer\nchacha.com###bottomHeaderBannerWrap\nstartribune.com###bottomLeaderboard\ntnt.tv###bottomLeftBox\ntnt.tv###bottomMiddleBox\nteoma.com###bottomPaidList\ncitypaper.com,metrotimes.com,orlandoweekly.com,sacurrent.com###bottomPositions\nwebdesignledger.com###bottomPremiumBanner\nscientificamerican.com###bottomPromoArea\ntnt.tv###bottomRightBox\nsearch.globososo.com###bottom_adv\nifc.com,nerej.com,nyrej.com,phonearena.com,securityweek.com###bottom_banner\nfunkypotato.com###bottom_banner_wrapper\ntoledofreepress.com###bottom_banners\navaxsearch.com###bottom_block\ninquirer.net###bottom_container\npressrepublican.com###bottom_leader\njamaicaobserver.com###bottom_leaderboard\nindependent.co.uk###bottom_link\nsearch.chatzum.com###bottom_links\nfotolog.com###bottom_pub\npopoholic.com###bottom_row\nkingdomfm.co.uk###bottom_section\nforexnewsnow.com,metropolis.co.jp,tremolo.edgesuite.net###bottombanner\nktu.com,z100.com###bottomright2\nbreaknenter.org,exposay.com###box\nlivescore.in###box-over-content-a\noilprice.com###box-premium-articles-sponsor\nchud.com###box.ad\nkewlshare.com###box1\nkewlshare.com###box3\ndillons.com,kroger.com###box3-subPage\ntnt.tv###box300x250\ndmi.ae###boxBanner300x250\nyahoo.com###boxLREC\nplanetminecraft.com###box_160btf\nplanetminecraft.com###box_300atf\nplanetminecraft.com###box_300btf\nplanetminecraft.com###box_728atf\npropertyfinder.ae###box_left_top_300x250\nmaxim.com###box_takeover_content\nmaxim.com###box_takeover_mask\ncollive.com,ecnmag.com###boxes\nfilesoup.com###boxopus-btn\nsearch.yahoo.com###bpla\nbritannica.com###bps-gist-mbox-container\nbrainyquote.com###bq_top_ad\nturbobit.net###branding-link\nwandtv.com###brandingfeature\nbelieve-or-not.blogspot.com###breadcrumb\nbreak.com###breaking-news\nnews-journalonline.com###breaking-sponsor\nweb2.0calc.com###britnexbanner\nbit-tech.net###broadband-finder-co-uk-120\npcadvisor.co.uk###broadbandchoices_frm\nwallstcheatsheet.com###broker-box\nthestreet.com###brokerage\npsdgraphics.com###bsa-top\nfindicons.com###bsa_leaderboard\nwinrumors.com###bsap_1263017\ntechsplurge.com###bsats\nxtragfx.com###bsponsor\ncineuropa.org###bt\nindiaresults.com###bt_banner1\nkat.ph###bt_bf\ncanoe.ca###btePartena\nimdb.com###btf_rhs2_wrapper\necoustics.com###btf_right_300x250\ncoed.com,collegecandy.com###btfmrec\ncollegecandy.com###btfss\noverdrive.in###btm_banner1\ninquirer.net###btmskyscraper\nprofitguide.com###builder-277\ntorontosun.com###buttonRow\nmuchmusic.com###button[style=\"position:absolute; top:130px; right:8px;\"]\nalloaadvertiser.com,ardrossanherald.com,barrheadnews.com,bordertelegraph.com,bracknellnews.co.uk,carrickherald.com,centralfifetimes.com,clydebankpost.co.uk,cumnockchronicle.com,dumbartonreporter.co.uk,eastlothiancourier.com,greenocktelegraph.co.uk,helensburghadvertiser.co.uk,irvinetimes.com,largsandmillportnews.com,localberkshire.co.uk,newburyandthatchamchronicle.co.uk,peeblesshirenews.com,readingchronicle.co.uk,sloughobserver.co.uk,strathallantimes.co.uk,the-gazette.co.uk,thevillager.co.uk,troontimes.com,windsorobserver.co.uk###buttons\nwinrumors.com###buttons-125\nsloughobserver.co.uk###buttons-mpu-box\naccuradio.com###buyAlbum\nnews24.com###buybook_box\ninformationweek.com###buylink\nsearchenginejournal.com###buysell\nbuzznet.com###buzz_feedheading\nnews24.com###bw-wrapper\nbusinessweek.com###bwMall\nbusinessweek.com###bwMall2\nbusinessweek.com###bw_mall\nhelp.com###bwp\ntorrentcrazy.com###c2s\ntorrent.cd###c2soffer\nchannel4.com###c4ad-Top\ncounselheal.com,gamenguide.com,latinospost.com,mobilenapps.com,sportsworldreport.com###cTop\ndivinecaroline.com###c_6ad_250h\nminingmx.com###c_leaderBoard\nnhl.com###c_mrm3\niafrica.com###c_row1_bannerHolder\nbatman-on-film.com,pettube.com,popoholic.com,yurock.net###ca\nciao.co.uk###ca_sponslinks\ndiscovermagazine.com###cachee\nnickutopia.com###cad300\nzynga.com###cafe_snapi_zbar\nbonniegames.com###caja_publicidad\npopsugar.com###calendar_widget\nyouthincmag.com###campaign-1\ncare2.com###care2_footer_ads\npcworld.idg.com.au###careerone-promo\nscreenafrica.com###carousel\nsisters-magazine.com###carousel2\nfrance24.com,rfi.fr###caroussel_partenaires\nabjusa.com,internationalresourcejournal.com###casale\nanswers.com###casale_300x250_3_wrapper\nanswers.com###casale_728x90_2_wrapper\nanswers.com###casale_728x90_wrapper\nsolomontimes.com###casino_banner\nninemsn.com.au###cat_hl_171287\nfinance.ninemsn.com.au###cat_hl_7821719\nmsn.co.nz###cat_hl_87409\nfilecore.co.nz,hbwm.com###catfish\njustinhartman.com###catlinks\ncryptocoinsnews.com###cb-bg-to\nbitcoinreviewer.com###cb-section-a > .cb-a-large\ncryptocoinsnews.com###cb-sidebar-b > #text-85\nfresnobee.com###cb-topjobs\nbnd.com###cb_widget\ncbc.ca###cbc-bottom-logo\nxtshare.com###cblocker\naviationweek.com,grist.org,linuxinsider.com,neg0.ca###cboxOverlay\ncbsnews.com###cbsiAd16_100\ncbssports.com###cbsiad16_100\ncbssports.com###cbsiad18_100\nbreak.com###cdpSliver\nmetrolyrics.com###cee_box\nmetrolyrics.com###cee_overlay\nxnotifier.tobwithu.com###center > style + h3 + script + script + div > div[style]\nmp3fusion.net###center2\ntheatermania.com###centerChannel\nmeettheboss.tv###centerSpacingWrapper\ncheckoutmyink.com###centerbanner\nreference.com###centerbanner_game\nrislivetv.com,watchtelevision.eu###centeredcontent\nrislivetv.com###centeredcontent2\nmacdailynews.com###cfsnip-widget-93\nroomzaar.com###cgp-bb-tag\nmarketingpilgrim.com###channel-sponsors\nrealage.com###channel_sponsor_callout\nchicagoshopping.com###chshhead_ad\nespncricinfo.com###ciHomeLeaderboard\ncineplex.com###cineplex-h-topAds\npopularmechanics.com###circ\npopularmechanics.com###circ300x100\npopularmechanics.com###circ300x200\npopularmechanics.com,seventeen.com###circ300x300\npopularmechanics.com###circ620x100\nesquire.com###circ_620x200\nirishracing.com###classifieds\nnews-gazette.com###clear-footer\narmorgames.com###click_left_skin\narmorgames.com###click_right_skin\ngenuineforextrading.com###clickbank\npitchero.com###clubSponsor\ninstyle.com###cmfooter\ninkedmag.com###cmnCompanion\nsaudigazette.com.sa###cmt_spcr\ncnn.com###cnnLawyersCom\nconcierge.com###cnt_sub_unitdir\ntechnabob.com###col1_160\ncomingsoon.net###col2TopPub\nmmorpg.com###colFive\nweather24.com###col_top_fb\nstv.tv###collapsedBanner\naviationweek.com,grist.org,linuxinsider.com,neg0.ca,tv3.co.nz###colorbox\nsearch.yahoo.com###cols > #left > #main > ol > li[id^=\"yui_\"]\nzam.com###column-box:first-child\nsmashingmagazine.com###commentsponsortarget\nnettleden.com,xfm.co.uk###commercial\nvideobash.com###companion\nhealthguru.com###companionBanner\noxygen.com,usanetwork.com###companion_300x250\nelleuk.com###component-elle-marketing\ngotohoroscope.com###con300_250\ncpuid.com###console_log\nshare-online.biz###consumer_bottom\nshare-online.biz###consumer_bottom_dl\nshare-online.biz###consumer_top\nmap24.com###cont_m24up\nmemez.com###containTopBox\nisup.me###container > .domain + p + br + center:last-child\nisup.me###container > center:last-child > a:first-child\nisup.me###container > center:last-child > a:last-child\nvideobull.com###container > div > div[style^=\"position: fixed; \"]\nstreamin.to,tvshow7.eu,videobull.com###container > div > div[style^=\"z-index: \"]\nebuddy.com###container-banner\npons.com###container-superbanner\njacksonville.com###containerDeal\nsedoparking.com###content\ninfo.com###content + .P4\n4fuckr.com###content > div[align=\"center\"] > b[style=\"font-size: 15px;\"]\nemillionforum.com###content > div[onclick^=\"MyAdvertisements\"]:first-child\nautotrader.co.nz,kiz10.com###content-banner\nlifewithcats.tv###content-bottom-empty-space\npicocool.com###content-col-3\nsnow.co.nz###content-footer-wrap\nprospect.org###content-header-sidebar\ndarkhorizons.com###content-island\nifc.com###content-right-b\namatuks.co.za###content-sponsors\ncraveonline.com,ego4u.com,washingtonexaminer.com,web.id###content-top\nlifewithcats.tv###content-top-empty-space\nsevenload.com###contentAadContainer\njellymuffin.com###contentAfter-i\nvwvortex.com###contentBanner\njellymuffin.com###contentBefore-i\nlifescript.com###content_0_divArticleSponspredContent\nfileshut.com###content_banner\nandroidpolice.com###content_blob\noperanews.com###content_bottom_lower\ntheslap.com###content_callout_container\ngosanangelo.com,kitsapsun.com,knoxnews.com###content_match\ncaller.com,commercialappeal.com,courierpress.com,gosanangelo.com,independentmail.com,kitsapsun.com,knoxnews.com,legacy.com,naplesnews.com,redding.com,reporternews.com,tcpalm.com,timesrecordnews.com,vcstar.com###content_match_wrapper\npoponthepop.com###content_rectangle\nmadeformums.com,zest.co.uk###contentbanner\nwebreference.com###contentbottomnoinset\nyorkshireeveningpost.co.uk###contentbox02google\nyorkshireeveningpost.co.uk###contentbox08\ninternet.com###contentmarketplace\nslashdot.org###contextualJobs\nuexpress.com###continue\nwikifeet.com###conts > div[style=\"margin:0px 10px; height:200px; overflow:hidden; position:relative\"]\nted.com###conversation-sponsor\nbinaries4all.com###convertxtodvd\ngoal.com###cookie_crumb_div\nsharaget.com###coolDownload\nsharaget.com###coollist\nforums.psychcentral.com###copyright\npbs.org###corp-sponsor-sec\nmacrumors.com###countdown\nlef.org###cpSale\ntorrentbit.net###cpa_rotator_block_385_0\npeliculasyonkis.com###cpxslidein\nratemyprofessors.com###cr-qsb\nrightdiagnosis.com###cradbotb\nrightdiagnosis.com,wrongdiagnosis.com###cradlbox1\nrightdiagnosis.com,wrongdiagnosis.com###cradlbox2\nrightdiagnosis.com,wrongdiagnosis.com###cradrsky2\nfirsttoknow.com###criteo-container\ncareerbuilder.com###csjstool_bottomleft\nmustangevolution.com###cta\ncargames1.com###ctgad\nthesudburystar.com###ctl00_ContentPlaceHolder1_BigBoxArea2\nblogtv.com###ctl00_ContentPlaceHolder1_topBannerDiv\nspikedhumor.com###ctl00_CraveBanners\nmyfax.com###ctl00_MainSection_BannerCoffee\nthefiscaltimes.com###ctl00_body_rightrail_4_pnlVideoModule\nseeklogo.com###ctl00_content_panelDepositPhotos\nseeklogo.com###ctl00_content_panelDepositPhotos2\nleader.co.za###ctl00_cphBody_pnUsefulLinks\ninvestopedia.com###ctl00_ctl00_MainContent_A5_ctl00_contentService0\ninvestopedia.com###ctl00_ctl00_MainContent_A5_ctl00_contentService2\nleader.co.za###ctl00_ctl00_cphBody_cphColumnBody_cphBannerBodyHeader_userBannerBodyHeader_pnBanners\nleader.co.za###ctl00_ctl00_cphBody_cphColumnBody_cphColumnMiddleParent_cphNavigationRight_userNavigationRight_userBannerSponsor_pnBanners\nmouthshut.com###ctl00_ctl00_ctl00_ContentPlaceHolderHeader_ContentPlaceHolderFooter_ContentPlaceHolderBody_zedoParent\nhurriyetdailynews.com###ctl00_ctl27_ContentPane\nsufc.co.za###ctl00_ltlSponsors\nproductionhub.com###ctl00_mainPlaceholder_pnlExtraBanner\nbirdchannel.com,smallanimalchannel.com###ctl00_pnlBottomDart\ncommunity.adlandpro.com###ctl00_slider\nonetravel.com###ctl07_ctl01_ModuleContent\nctmirror.org###ctmirror-sponsors-2\nway2sms.com###curtain2\nthechive.com###custom-bg-link\nmovies.yahoo.com###customModule\ndaytondailynews.com###cxSubHeader\nscout.com###da160x600\nscout.com###da300x250\ncleverbot.com###daArea2\narstechnica.com###daehtsam-da\npctipsbox.com###daikos-text-4\nheraldnet.com###dailyDealFP\ncbc.ca###dailydeals\nfitnessmagazine.com###dailyprize\ncnbc.com,zone.msn.com###dapIfM1\nrawstory.com###darkbackground[style=\"visibility: visible;\"]\nnews.yahoo.com###darla\nyahoo.com###darla-ad__LREC\nyahoo.com###darla-ad__LREC2\nbestbuy.com###dart-con\ntesco.com###dartLeftSkipper\ntesco.com###dartRightSkipper\ndrivewire.com###dart_leaderboard\nnews24.com###datingWidegt\npitch.com###datingpitchcomIframe\nreference.com###dcomSERPTop-300x250\ndailydot.com###dd-ad-head-wrapper\ngazette.com###deal-link\ncharlotteobserver.com,miami.com,momsmiami.com###dealSaverWidget\nslickdeals.net###dealarea\nslickdeals.net###dealarea2\n11alive.com,9news.com,firstcoastnews.com###dealchicken-todaysdeal\ntimesdispatch.com###dealoftheday\nblocked-website.com###deals-header\nnews.com.au###deals-module\nmetafilter.com,themorningnews.org###deck\ninstapaper.com###deckpromo\ngirlgames.com###def-box\nyahoo.com###default-p_24457750\nhelpwithwindows.com###desc\nthepiratebay.se###details > #image[target=\"_blank\"]\nbloggingstocks.com###dfAppPromo\nthriftyfun.com###dfp-2\nmadmagazine.com###dfp-300x250\nmadmagazine.com###dfp-728x90\namherstbulletin.com,concordmonitor.com,gazettenet.com,ledgertranscript.com,recorder.com,vnews.com###dfp_intext_half_page\namherstbulletin.com,concordmonitor.com,gazettenet.com,ledgertranscript.com,recorder.com,vnews.com###dfp_intext_med_rectangle\ncduniverse.com###dgast\ndailyhoroscope.com###dh-bottomad\ndailyhoroscope.com###dh-topad\nvidhog.com###dialog\ndirectionsmag.com###dialog-message\nforums.digitalpoint.com###did_you_know\nlinuxbsdos.com###digocean\ntorrenthound.com###direct.button\ntorrenthound.com,torrenthoundproxy.com###direct2\ntotalkiss.com###directional-120x600\ntotalkiss.com###directional-300x250-single\ndatehookup.com###div-Forums_AFT_Top_728x90\narticlesnatch.com###div-article-top\nher.ie,herfamily.ie,joe.co.uk,joe.ie,sportsjoe.ie###div-gpt-top_page\ngossipcop.com###div-gpt-unit-gc-hp-300x250-atf\ngossipcop.com###div-gpt-unit-gc-other-300x250-atf\ngeekosystem.com###div-gpt-unit-gs-hp-300x250-atf\ngeekosystem.com###div-gpt-unit-gs-other-300x250-atf\nmodernluxury.com###div-leaderboard-ros\nchronicleonline.com,sentinelnews.com,theandersonnews.com###div-promo\nmodernluxury.com###div-rectangle-1\nmodernluxury.com###div-rectangle-2\narticlesnatch.com###div-tag-midright\narticlesnatch.com###div-under-video\nabbotsfordgasprices.com,albertagasprices.com,barriegasprices.com,bcgasprices.com,calgarygasprices.com,edmontongasprices.com,gasbuddy.com,halifaxgasprices.com,hamiltongasprices.com,kwgasprices.com,londongasprices.com,manitobagasprices.com,montrealgasprices.com,newbrunswickgasprices.com,newfoundlandgasprices.com,novascotiagasprices.com,nwtgasprices.com,ontariogasprices.com,ottawagasprices.com,peigasprices.com,quebeccitygasprices.com,quebecgasprices.com,reginagasprices.com,saskatoongasprices.com,saskgasprices.com,torontogasprices.com,vancouvergasprices.com,victoriagasprices.com,winnipeggasprices.com###div728\nklfm967.co.uk###divHeaderBannerRight\nclassiccars.com###divLeaderboard\nusatoday.com###divMarketplace\nabbotsfordgasprices.com,albertagasprices.com,barriegasprices.com,bcgasprices.com,calgarygasprices.com,edmontongasprices.com,gasbuddy.com,halifaxgasprices.com,hamiltongasprices.com,kwgasprices.com,londongasprices.com,manitobagasprices.com,montrealgasprices.com,newbrunswickgasprices.com,newfoundlandgasprices.com,novascotiagasprices.com,nwtgasprices.com,ontariogasprices.com,ottawagasprices.com,peigasprices.com,quebeccitygasprices.com,quebecgasprices.com,reginagasprices.com,saskatoongasprices.com,saskgasprices.com,torontogasprices.com,vancouvergasprices.com,victoriagasprices.com,winnipeggasprices.com###divSky\nabbotsfordgasprices.com,albertagasprices.com,barriegasprices.com,bcgasprices.com,calgarygasprices.com,edmontongasprices.com,gasbuddy.com,halifaxgasprices.com,hamiltongasprices.com,kwgasprices.com,londongasprices.com,manitobagasprices.com,montrealgasprices.com,newbrunswickgasprices.com,newfoundlandgasprices.com,novascotiagasprices.com,nwtgasprices.com,ontariogasprices.com,ottawagasprices.com,peigasprices.com,quebeccitygasprices.com,quebecgasprices.com,reginagasprices.com,saskatoongasprices.com,saskgasprices.com,torontogasprices.com,vancouvergasprices.com,victoriagasprices.com,winnipeggasprices.com###divSkyscraper\nmeettheboss.tv###divSpaceContainerRight\nsponsorselect.com###divSsnMain\ncrackspider.net###divStayTopLeft\ngardenstateapartments.com###divTopRight\njoursouvres.fr,work-day.co.uk,workingdays.ca,workingdays.org,workingdays.us###div_lfsp\nenglish.pravda.ru###div_sf_205\nenglish.pravda.ru###div_sf_211\nenglish.pravda.ru###div_sf_214\nenglish.pravda.ru###div_sf_43\nenglish.pravda.ru###div_sf_46\nenglish.pravda.ru###div_sf_47\nenglish.pravda.ru###div_sf_66\nenglish.pravda.ru###div_sf_95\nphilstar.com###diviframeleaderboard\njeuxme.info###divk1\ntvonlinegratis.mobi###divpubli\nvidxden.com###divxshowboxt > a[target=\"_blank\"] > img[width=\"158\"]\nredown.se###dl\nafterdawn.com###dlSoftwareDesc300x250\nfiredrive.com###dl_faster\nisrabox.com###dle-content > .onsearch\naol.com###dmn_results\ncoloradocatholicherald.com,hot1045.net,rednationonline.ca###dnn_BannerPane\nwindowsitpro.com###dnn_FooterBoxThree\nwinsupersite.com###dnn_LeftPane\ncheapoair.com###dnn_RightPane[width=\"175\"]\ncafonline.com###dnn_footerSponsersPane\nwindowsitpro.com,winsupersite.com###dnn_pentonRoadblock_pnlRoadblock\nsearch.yahoo.com###doc #cols #right #east\nconvertmyimage.com###doc2pdf\nlinuxcrunch.com###dock\npspmaniaonline.com###dollarade_help\nmsn.co.nz###doubleMrec\ntrulia.com###double_click_backfill\nfreemp3go.com###downHighSpeed\nsolidfiles.com,torrentreactor.com,torrentreactor.net###download-button\nlegendarydevils.com###download1_body\nmovpod.in,vreer.com###downloadbar\nstuff.co.nz###dpop\ntheoffside.com###dreamteam\ntravelocity.com###drfad-placeholder\nomg-facts.com,sixbillionsecrets.com###droitetop\nbtstorrent.so###dtl_\nerfworld.com###duelannouncement\ndressupgames.com###dug-header-adv-wrapper\ndressupgames.com###dug-left-adv-wrapper\ndressupgames.com###dug-leftcontent-adv-wrapper\nimgah.com###dwindow\ntorrentroom.com###earn_dir\ntorrentroom.com###earn_spon\nnotdoppler.com###earn_to_die_wrapper\ntorrentroom.com###earn_top\nsearch.disconnect.me,search.yahoo.com###east\ngearslutz.com###ebayFoot\ngearslutz.com###ebayHead\ncardomain.com###ebay_listings_wrapper\nehow.com###ebooks_container\ninfoworld.com###edit-promo\ninfoworld.com###edit-promo-container\nnme.com###editorial_sky\nmerriam-webster.com###editors-picks-promo\nsys-con.com###elementDiv\nnbr.co.nz###email-signup\ndestructoid.com,japanator.com###emc_header\nprisonplanet.com###enerfood-banner\ntcrtroycommunityradio.com###enhancedtextwidget-2\ngossipcenter.com###entertainment_skin\neweek.com###eoe-sl\nanilinkz.com###epads1\ncountryliving.com###epic_banner\neplsite.com###epl-banner\nstandard.co.uk###esDating\neasyvoyage.co.uk###esv-pub-hp\ntheiet.org###et_bannerTop\nandroidpolice.com###execphp-11\nandroidpolice.com###execphp-15\nandroidpolice.com###execphp-16\nexpatica.com###exp-add300x250\nazcentral.com,newsarama.com,space.com,stv.tv,usatoday.com,wtsp.com###expandedBanner\nmyfoxatlanta.com,myfoxdc.com###expandedVert\ndirectionsmag.com,nationalreview.com###exposeMask\nboston.com###externalBanner\ntune.pk###externalPlayer\ncheckoutmyink.com###extralarge_banner\nyahoo.com###eyebrow > #ypromo\nzdnet.com###eyebrows\nstickam.com###f_BottomBanner\nfaxo.com###fa_l\nesper.vacau.com,nationalreview.com,techorama.comyr.com###facebox\nesper.vacau.com,filefactory.com###facebox_overlay\nfunnycrazygames.com,playgames2.com,sourceforge.net###fad\ntucows.com###fad1\naskmen.com,dxomark.com###fade\nsoftexia.com###faded\nimagepicsa.com,nashuatelegraph.com###fadeinbox\nbrothersoft.com###fakebodya\naccountingtoday.com###fancybox-content\naccountingtoday.com,commentarymagazine.com###fancybox-overlay\nrapidmore.com###fastdw\nfirstpost.com###fb_mtutor\nfastcompany.com###fc-ads-imu\nthedrinknation.com###fcBanner\nfiredrive.com,putlocker.com###fdtb_container\nfiredrive.com###fdvabox\ndealtime.com,shopping.com###featListingSection\nglobalgrind.com###feature-top\nyellowpages.ae###feature_company\nbinaryturf.com###feature_gad\ndubbed-scene.com,exactseek.com,iclarified.com,netfit.co.uk,thepspblog.com,wired.com###featured\nnetbooknews.com###featured-banner\nnasdaq.com###featured-brokers\nallakhazam.com,zam.com###featured-promos\nbbj.hu###featuredBox\ncatchannel.com,dogchannel.com,fishchannel.com,horsechannel.com###featuredProducts\nteagames.com###featured_h\nfreeworldgroup.com###featuredsponsor\ncomicbookresources.com###features-bigbox\ntalkxbox.com###features-sub\nyoutube.com,youtubeproxy.pk###feed-pyv-container\nyoutube.com###feedmodule-PRO\nmoviecomix.com###filedirect\n30for30.espn.com###film-ad\nkomonews.com###fin_askkomo\nkvi.com###fin_modules_top_above_header\nnews.com.au###find-module-content\nforexpros.com,investing.com###findABroker\nimageporter.com###firopage\ngeneratorlinkpremium.com###firstleft\ntheverge.com###fishtank\nsiteslike.com###fixedbox[style=\"margin-top:20px\"]\nbooksnreview.com,mobilenapps.com,newseveryday.com,realtytoday.com,scienceworldreport.com,techtimes.com###fixme\ngwhatchet.com###flan_leader\nfool.com###flash\nomgpop.com###flash-banner-top\ntg4.ie###flash_mpu\nradiotimes.com###flexible-mpu\nstreamtuner.me###float-bottom\naltervista.org,bigsports.tv,desistreams.tv,fancystreems.com,freelivesportshd.com,hqfooty.tv,livematchesonline.com,livevss.tv,pogotv.eu,streamer247.com,trgoals.es,tykestv.eu,zonytvcom.info###floatLayer1\ncdnbr.biz,zcast.us,zonytvcom.info###floatLayer2\nchordfrenzy.com,ganool.com###floating_banner_bottom\nganool.com###floating_banner_bottom2\nganool.com###floating_banner_left1\nganool.com###floating_banner_left2\nganool.com###floating_banner_right1\nganool.com###floating_banner_top\nartima.com###floatingbox\ncompany.co.uk###floatingdiv\nedmunds.com###floodlight\nzattoo.com###floor[style=\"display: block;\"]\npeople.com###flower-ddrv2\nchicagonow.com###flyerboard-wrap\npopurls.com###fmb\nthenextweb.com###fmpub_2620\nthenextweb.com###fmpub_2620_1\nthenextweb.com###fmpub_2621_2\nthenextweb.com###fmpub_2621_3\ngame-debate.com###focus-enclose\nachieve360points.com###foot\nsocialhype.com,zap2it.com###foot728\nboldride.com,chaifm.com,coinurl.com,oocities.org,palipost.com,sicilyintheworld.com,spin.ph,techcentral.co.za,tribejournal.com###footer\nteesoft.info###footer-800\nbeso.com,spectator.co.uk###footer-banner\ntabletmag.com###footer-bar\nmytalk1071.com###footer-bottom\nfxstreet.com###footer-brokers\neconomist.com###footer-classifieds\nforward.com###footer-extras\nancientfaces.com,duffelblog.com,geekologie.com###footer-leaderboard\ngaystarnews.com###footer-links-wrapper3\nwetv.com###footer-promo\nwnd.com###footer-proms\npopcrush.com###footer-sidebar\nstuff.co.nz###footer-sitemap\nmcfc.co.uk###footer-sponsor\nbillboard.com,bloody-disgusting.com,wbez.org###footer-top\nfoxnews.com,mobiletor.com,thescoopng.com###footer-top-wrapper\noldcarsweekly.com###footer-widget-area\nfusible.com,justpushstart.com,ksstradio.com,muthafm.com,swns.com###footer-widgets\nwhatifeelishot.com###footer-wrapper\nthewhir.com###footer2\nlivegoals.com###footer4\neventfinda.com,eventfinda.sg,eventfinder.co.nz,eventfinder.com.au,fixya.com,freewebtemplates.com,thebradentontimes.com###footerBanner\navfc.co.uk###footerLogos\nchelseafc.com###footerPartners\nusatoday.com###footerSponsorOne\nusatoday.com###footerSponsorTwo\nchelseafc.com###footerSponsors\ntechworld.com###footerWhitePapers\nthesouthafrican.com###footer[style=\"height:200px\"]\n1019thewave.com,androidcommunity.com,clear99.com,japantoday.com,kat943.com,kcmq.com,kfalthebig900.com,ktgr.com,kwos.com,theeagle939.com,thevillager.com.na,y107.com###footer_banner\nphpbb.com###footer_banner_leaderboard\n1500espn.com,mytalk1071.com###footer_box\nlogopond.com###footer_google\nroyalgazette.com,thehollywoodgossip.com###footer_leaderboard\nsomeecards.com###footer_leaderboard_holder\nsundance.tv###footer_promo\nandroidcommunity.com###footer_wrapper\nadweek.com###footeraddcontent\nbabyexpert.com,hiphongkong.com,hwhills.com,madcatz.com,madeformums.com,newstatesman.com,visordown.com###footerbanner\nfeedicons.com,phonedog.com###footerboard\nmytalk1071.com###footerboard_container\ncharlestoncitypaper.com###footerleaderboard\nmacnn.com###footerleft\nmacnn.com###footerright\nfarmonline.com.au###footersponsorbar\npbs.org###founding-sponsor\nthemittani.com###fp_leaderboard_1\nytmnd.com###fp_middle\namw.com###fpromo250-2\namw.com###fpromo250-3\namw.com###fpromo250-4\namw.com###fpromo78-1\namw.com###fpromo78-2\namw.com###fpromo78-3\nfoxnews.com###frame2-300x100\n5min.com###freeWheelMiddle\n5min.com###freeWheelRight\ntopix.com###freecredit\nvirtualmedicalcentre.com###frmsmo-r\npeople.com###fromOurPartners_right\nbabycenter.com###fromOurSponsorsHome\ntheonion.com###from_our_sponsors\ncnn.com###front-page-mpu\nthesimsresource.com###frontmc\noriginalfm.com###frontpage_business\nherold.at###fsb > a > img[width=\"468\"]\nchicagobusiness.com,footytube.com###ft_leaderboard\nieee.org###ftrdwhtpprs\nteamliquid.net###fuab\ntimes247.com###full-banner\nhomehound.com.au###full-leaderboard\njewishjournal.com###fullbanner-585\nportforward.com###fullpageadvert\nvidbull.com###fullscreen_exit\nyasni.ca,yasni.co.uk,yasni.com###fullsizeBannerContainer\nyasni.ca,yasni.co.uk,yasni.com###fullsizeWrapper\npenny-arcade.com###funding-h\nvladtv.com###fw_promo\ntinypic.com###fxw_ads\ninterscope.com###g300x250\nclaro-search.com,isearch.babylon.com,search.babylon.com###gRsTopLinks\nhoobly.com###ga1\ntrulia.com###gac_rs\n9bis.net,elyrics.net,oldversion.com###gad\nspeedyshare.com###gad1\nspeedyshare.com###gad2\ncnet.com###gafscsa-middle\ntelegraph.co.uk###gafsslot1\ntelegraph.co.uk###gafsslot2\nbustedcoverage.com,collegecandy.com###galad300\nhot995.com###gallery_adbg\nteagames.com###gameinfobanner\narmorgames.com###gameleaderboard\nkongregate.com###gamespotlight\nagame.com###gameunderbanner\nthegazette.com###gaz_article_bottom_featured_jobs\nmobiles24.com###gbar\nillawarramercury.com.au###gbl_adcolumn\ngeekwire.com###geekwork\nbuznews.com###gemSponsored\ncioupdate.com,datamation.com,earthweb.com,linuxplanet.com,serverwatch.com###gemhover\nyahoo.com###genie-widgetgroup\ntheonion.com###geobanner\ndesimartini.com###getPosition\nmininova.org###getstarted\nktar.com###gfp\nvh1.com###gft-network:last-child\nmtv.com###gft-sponsors\nvancouversun.com###giftguidewidget\nphillytrib.com###gkBannerTop\nngrguardiannews.com###gkBannerTopAll\nconcrete.tv###gkBanners\nhowdesign.com,moviecritic.com.au,orble.com,realitytvobsession.com###glinks\ntheguardian.com###global-jobs\npeople.com###globalrecirc\ninfoplease.com###gob\ncolonhealth.net###gooBox0\nmozillazine.org###goobot\ngearlive.com,noscript.net,stv.tv###google\nmu.nu###google-banner\nt3.com###google-container-4\nnews.stv.tv###google-endarticle\nsalon.com###google-single\nphotojpl.com###google01\nabout.com###google1\nabout.com###google2\ninquirer.net###googleFooter\nyfrog.com###google_ads_div_yfrog2_landing_ad_container\nsoftnyx.net###google_banner\nwinnipegfreepress.com###google_box\nm-w.com,merriam-webster.com###google_creative_1\nm-w.com,merriam-webster.com###google_creative_3\ntestfreaks.co.uk###google_links\nwindows2universe.org###google_mockup\nindianexpress.com###google_new\nindianexpress.com###google_new_top\nscreenindia.com###google_pic\npsdeluxe.com###google_top\ntips.net###googlebig\nforums.studentdoctor.net###googlefloat\nsapostalcodes.za.net###googlehoriz\nvariety.com###googlesearch\nmagtheweekly.com###googleskysraper\nmozillazine.org###gootop\ntruckinginfo.com###got-questions\nasylum.co.uk###goviralD\nsourceforge.jp###gpt-sf_dev_300\nneopets.com###gr-ctp-premium-featured\nbbccanada.com###gradientbox\nproboards.com###gravity-stories-1\ndarkreading.com###greyPromoArea\ntv3.co.nz###greyout\nbinaries4all.com###gright\neq2flames.com###grightcolumn > .sidewid\npep.ph###group_2\nbamkapow.com###gs300x250\njobs.aol.com###gsl\naol.com###gsl-bottom\ntorlock.com,torrentfunk.com,yourbittorrent.com###gslideout\ngtaforums.com###gtaf_ad_forums_bottomLeaderboard\ngtaforums.com###gtaf_ad_forums_topLeaderboard\ngtaforums.com###gtaf_ad_forums_wideSkyscraper\ngtaforums.com###gtaf_ad_index_topLeaderboard\ngtaforums.com###gtaf_ad_index_wideSkyscraper\ngtaforums.com###gtaf_ad_topics_bottomLeaderboard\ngtaforums.com###gtaf_ad_topics_topLeaderboard\nhotonlinenews.com###guessbanner\njustinhartman.com###gumax-article-picture\nhinduwebsite.com###gupad\ndisney.go.com###gutter\nplaylist.com###gutter-skyscraper\nlogotv.com###gutterLeft\nlogotv.com###gutterRight\nmoneycontrol.com###gutter_id1\nmoneycontrol.com###gutter_id2\nkzupload.com###gw_overlay\ntotalcmd.pl###h1r\nhealth365.com.au###h365-sponsors\nstickam.com###h_TopBanner\ntechweb.com###h_banner\nnickutopia.com###had300\ntheglobeandmail.com###halfpager-art-1\ndownloadhelper.net###halloween-pb\ncomedy.com###hat\nheatworld.com###hbar\nwebhostingtalk.com###hc-postbit-1\nwebhostingtalk.com###hc-postbit-3\nhealthcentral.com###hcs_ad0\nmegashare.com###hd-link\nprevention.com###hdr-top\nweatherbug.com###hdr-top-wrap\nflashgot.net###head a[target=\"_blаnk\"]\nvirtualnights.com###head-banner\nandroidheadlines.com,molempire.com###head-banner728\ngeekologie.com###head-leaderboard\navfc.co.uk###headAcorns\ncountytimes.co.uk###headBanner\nquotes-love.net###head_banner\nfxempire.com###head_banners\nwebdesignstuff.com###headbanner\nadsoftheworld.com,anglocelt.ie,animalnetwork.com,cartoonnetworkhq.com,eeeuser.com,engineeringnews.co.za,eveningtimes.co.uk,floridaindependent.com,hellmode.com,heraldscotland.com,incredibox.com,information-management.com,krapps.com,link-base.org,meathchronicle.ie,mothering.com,nevadaappeal.com,offalyindependent.ie,petapixel.com,theroanoketribune.org,tusfiles.net,unrealitymag.com,vaildaily.com,washingtonindependent.com,westmeathindependent.ie,yourforum.ie###header\nfilehippo.com###header-above-content-leaderboard\ntheblemish.com###header-b\nfanrealm.net,flix.gr,fonearena.com,frontlinesoffreedom.com,girlgames.com,pa-magazine.com,progressivenation.us,scmp.com,snow.co.nz,snowtv.co.nz,spectator.co.uk,stickgames.com,sunnewsonline.com###header-banner\ngearculture.com###header-banner-728\ndominicantoday.com###header-banners\ndiyfashion.com###header-blocks\nideone.com###header-bottom\nallakhazam.com###header-box:last-child\nbestvpnserver.com,themiddlemarket.com###header-content\ndavidwalsh.name###header-fx\nancientfaces.com,g4chan.com,myrecordjournal.com,news-journalonline.com,phillymag.com,telegraph.co.uk,usatoday.com###header-leaderboard\nmenshealth.com###header-left-top-region\namctv.com,ifc.com,motorhomefacts.com,sundance.tv,wetv.com###header-promo\nveteranstoday.com###header-right-banner2\neweek.com###header-section-four\nvanityfair.com###header-subs\nsys-con.com###header-title\nhonolulumagazine.com,yourtango.com###header-top\nbocanewsnow.com###header-widgets\nnisnews.nl###header-wrap\nmoreintelligentlife.com,sci-news.com###header0\nkaldata.net###header2\ninventorspot.com###header2-section\nnickutopia.com###header728\ngizbot.com###headerAdd\nprojectorcentral.com###headerBanner\nyummy.ph###headerLeaderBoard\ndarkreading.com###headerPromo\nrivieraradio.mc###headerPromoArea\ntalksport.net###headerPromoContainer\nfresnobee.com###headerSectionLevel\natpworldtour.com###headerSponsor\ncoloradosprings.com###headerSponsorImage\ncoloradosprings.com###headerSponsorText\nchelseafc.com###headerSponsors\neonline.com###headerSpot\nbeliefnet.com###headerTopExtra\nagriaffaires.ca,agriaffaires.co.uk,agriaffaires.us###header_ban\ncountytimes.com,elleuk.com,energyfm.net,heritage.com,slots4u.com,squidoo.com###header_banner\nthetechjournal.com###header_bottom\nworddictionary.co.uk###header_inpage\nsedoparking.com###header_language\npcworld.idg.com.au,petapixel.com,washingtoncitypaper.com###header_leaderboard\nedie.net###header_mainNav5b\ndigitalpoint.com###header_middle\nwashingtoncitypaper.com###header_pencilbar\ncointelegraph.com###header_promo\nfastcompany.com###header_region\njohnbridge.com###header_right_cell\nzug.com###header_rotate\npopsci.com,popsci.com.au###header_row1\npedulum.com,washingtonexaminer.com,yourtango.com###header_top\nbitenova.nl,bitenova.org###header_un\nchocablog.com,commenthaven.com,hwhills.com,movieentertainment.ca,nikktech.com,smallscreenscoop.com,thisisnotporn.net###headerbanner\nhongkiat.com###headerbanner01\nnationalgeographic.com,scienceblogs.com###headerboard\ni-comers.com###headerfix\ntechnotification.com###headlineatas\nallakhazam.com###hearthhead-mini-feature\ngrist.org###hellobar-pusher\nkansascity.com###hi-find-n-save\nhi5.com###hi5-common-header-banner\natdhe.fm,atdhe.so,atdhe.xxx###hiddenBannerCanvas\nwbond.net###hide_sup\nflashi.tv###hideall\nrapidvideo.org,rapidvideo.tv###hidiv\nrapidvideo.org###hidiva\nrapidvideo.org###hidivazz\nitweb.co.za###highlight-on\ncodinghorror.com###hireme\nquill.com###hl_1_728x90\ncarzone.ie###hm-MPU\nhidemyass.com###hmamainheader\njapanprobe.com###hmt-widget-additional-unit-4\ncstv.com,gobulldogs.com,gohuskies.com,theacc.com,ukathletics.com,usctrojans.com,villanova.com###holder-banner\nund.com###holder-banner-top\ncstv.com,navysports.com,texassports.com###holder-skyscraper\ncstv.com,goairforcefalcons.com,goarmysports.com,gopack.com,goterriers.com,texassports.com,umassathletics.com,villanova.com###holder-story\nradiobroadcaster.org,thedailyrecord.com###home-banner\nyellowpages.com.lb###home-banner-box\nmotherjones.com###home-billboard\ndailydomainer.com###home-insert-1\nhomeportfolio.com###home-rec\nabcya.com###home-skyscraper\ngaana.com###home-top-add\nhomeportfolio.com###home-tower\nmaxim.com###homeModuleRight\npolitics.co.uk###homeMpu\ntechradar.com###homeOmioDealsWrapper\nthebradentontimes.com###homeTopBanner\nradiocaroline.co.uk###home_banner_div\nkhmertimeskh.com###home_bottom_banner\ncreativeapplications.net###home_noticias_highlight_sidebar\ngpforums.co.nz###home_right_island\ninquirer.net###home_sidebar\nfacebook.com###home_sponsor_nile\nfacebook.com###home_stream > .uiUnifiedStory[data-ft*=\"\\\"ei\\\":\\\"\"]\nkhmertimeskh.com###home_top_banner\ngumtree.co.za###home_topbanner\nspyka.net###homepage-125\nedmunds.com###homepage-billboard\nyoutube.com###homepage-chrome-side-promo\n10tv.com###homepage-leader\nstudentbeans.com###homepage_banner\nbeepbeep.com,rr.com###homepagewallpaper\npcmech.com###homepromo\nfashiontv.com###horiz_banner\nsydneyolympicfc.com###horiz_image_rotation\nhorsetalk.co.nz###horseclicks\nwebmd.com###hot-tpcs\njamaica-gleaner.com###hotSpotLeft\njamaica-gleaner.com###hotSpotRight\nnewsminer.com###hot_deals_banner\npolitiken.dk###hotels_banner\nphnompenhpost.com###hoteltravel\ncioupdate.com###houseRibbonContainer\nmp4upload.com###hover\nrottentomatoes.com###hover-bubble\nitproportal.com###hp-accordion\nactive.com###hp-map-ad\nworldweatheronline.com###hp_300x600\neweek.com###hp_hot_stories\ncollegecandy.com###hplbatf\nbhg.com###hpoffers\nbustedcoverage.com###hpss\nlhj.com###hptoprollover\nstaradvertiser.com###hsa_bottom_leaderboard\ncareerbuilder.com###htcRight[style=\"padding-left:18px; width: 160px;\"]\nhdcast.org###html3\npregen.net###html_javascript_adder-3\nmaxkeiser.com###html_widget-11\nmaxkeiser.com###html_widget-2\nmaxkeiser.com###html_widget-3\ndailystar.co.uk###hugebanner\nchocablog.com###i1\ni-programmer.info###iProgrammerAmazoncolum\nfinweb.com###ib_inject\niconfinder.com###icondetails-banner\nairfrance.co.uk###id_banner_zone\ncnn.com###ie_column\nsciencemag.org###iframe_box\nmore.com###iframe_for_div_c_6ad_banner\nyavideo.tv###iframebanner\nunitconversion.org###ileft\nthepiratebay.se###image > img:last-child\nzigzag.co.za###imageLeft\nzigzag.co.za###imageRight\nmovshare.net###imagecontmvshre\nmacthemes2.net###imagelinks\nepdrama.com###imageurl\nsharksrugby.co.za###imgTitleSponsor\nnew-magazine.co.uk,soshiok.com,star-magazine.co.uk###imu\nstjobs.sg###imu-big\nstjobs.sg###imu-small2\ncio.com###imu_box\nnewcarnet.co.uk###imuad\ntheyeshivaworld.com###inArticle\ncomputerworlduk.com###inArticleRelatedArticles\ncomputerworlduk.com###inArticleSiteLinks\naudioz.eu###inSidebar > #src_ref\nrawstory.com###in_article_slot_1\nrawstory.com###in_article_slot_2\nsoccer24.co.zw###in_house_banner\nyoutubeproxy.pk###include2\ntelegraph.co.uk###indeed_widget_wrapper\negotastic.com###index-insert\nindependent.co.uk###indyDating\nshare-links.biz###inf_outer\nnews.com.au###info-bar\nshare-links.biz###infoC\ntechnologytell.com###infobox_medium_rectangle_widget\ntechnologytell.com###infobox_medium_rectangle_widget_features\ntechnologytell.com###infobox_techmedia\nmg.co.za###inline_banner\nthaindian.com###inlineblock\nstartpage.com###inlinetable\neurweb.com###inner div[id^=\"div-gpt-ad-\"]\nkrnb.com,myk104.com###inner-footer\nnewsdaily.com###insert\npep.ph###insideBanner\nyakima-herald.com###instoryadhp\nmaxim.com###intHorizBanner\nmaxim.com###intSkirt\nelectronicproducts.com###interVeil\nnewsbusters.org###interad\nshmoop.com###intermediary\ngizmodo.co.uk###interruptor\ncampustechnology.com###intersitial\ncampustechnology.com,fcw.com,mcpmag.com,rcpmag.com,reddevnews.com,redmondmag.com,visualstudiomagazine.com###intersitialMask\nadage.com###interstitial\nboldsky.com###interstitialBackground\nmaxim.com###interstitialCirc\nboldsky.com,gizbot.com###interstitialRightText\ngizbot.com###interstitialTitle\ngiantlife.com,newsone.com###ione-jobs_v2-2\nelev8.com,newsone.com###ione-jobs_v2-3\ngiantlife.com###ione-jobs_v2-4\nabout.com###ip0\nidolforums.com###ipbwrapper > .borderwrap > .ipbtable:nth-child(7):nth-last-child(3n+2)\nip-adress.com###ipinfo[style=\"padding-left:10px;vertical-align:top;width:380px\"]\ninvestorplace.com###ipm_bottom_sidebar_ad-3\ninvestorplace.com###ipm_featured_partners-5\ninvestorplace.com###ipm_sidebar_ad-3\nmetrolyrics.com###ipod\nunitconversion.org###iright\nironmanmag.com.au###iro_banner_leaderboard\ninquirer.net###is-sky-wrap\nimageshack.us###is_landing\ndrivearcade.com,freegamesinc.com###isk180\ngameplanet.com.au###island1\ngameplanet.com.au###island2\ncomputerworld.com###itjobs_module\nmercurynews.com###jBar_dailyDeals\nbusinessmirror.com.ph,joomlarulez.com###ja-banner\nitwire.com###ja-header\nsigsiu.net###ja-rightcol\nchicagodefender.com###ja-topbar\nmessianictimes.com###ja-topmenu\nmessianictimes.com###ja-topsl2\npandora.tv###japan_ad\ncareerbuilder.com###jdpSponsoredBy\njimdo.com###jimdobox\nkansascity.com###jobStart_widget\ntheregister.co.uk###jobs-promo\nearthweb.com###jomfooter\nnowtoronto.com###jrBanners\ntwitch.tv###js-esl300\nepisodeninja.com,pspmaniaonline.com###jveajheuayuevatta\nepisodeninja.com,pspmaniaonline.com###jveavnnennneanealk\nrentals.com###ka_300x250_1\nrentals.com###ka_468x60_1\nrentals.com###ka_728x90_1\nthenationonlineng.net###kaizenberg\nzonadictoz.com.ar###kaizer\nsport24.co.za###kalahari\nbigislandnow.com###kbig_holder\nway2sms.com###kidloo\nnationalgeographic.com###kids_tophat_row1\nwaoanime.tv###kittenoverlay\nwkrg.com###krg_oas_rail\ntopix.com###krillion_block\ntopix.com###krillion_container\nherold.at###kronehit\ncomicgenesis.com###ks_da\nkewlshare.com###ksupdates\nteamfortress.tv###ku-bottom\nsolarmovie.com###l_35061\n123people.co.uk###l_banner\nthedugoutdoctors.com,thehoopdoctors.com###l_sidebar\ngantdaily.com###l_sidebar_banners\nwatchdocumentary.com###lad\nthemtn.tv###landing_55\nmaltatoday.com.mt,maltatoday.info###landscape_banner\nlaw.com###lawJobs\ntsviewer.com###layer\n1tvlive.in###layer2\njuicefm.com,pulse1.co.uk,pulse2.co.uk,signal1.co.uk,signal2.co.uk,swanseasound.co.uk,theregister.co.uk,thewave.co.uk,wave965.com,wirefm.com,wishfm.net###lb\naudiofanzine.com###lbContainerBlock\nnetworkworld.com###lb_container\nnetworkworld.com###lb_container_top\ninquirer.net###lb_ear\ninquirer.net###lb_ear2\nredferret.net###lb_wrap\nbustedcoverage.com###lbbtf\nplay.tm###lbc\nlankabusinessonline.com###lbo-ad-leadboard\nmofunzone.com###ldrbrd_td\ngpsreview.net###lead\narmedforcesjournal.com###leadWrap\nimperfectparent.com###leada\ntripit.com###leadboard\ngamesindustry.biz,investopedia.com,iphonic.tv,kontraband.com,motherproof.com,nutritioncuisine.com,sansabanews.com,thestreet.com,topgear.com,venturebeat.com,vg247.com###leader\nduffelblog.com###leader-large\nbakersfieldnow.com,katu.com,keprtv.com,komonews.com,kpic.com,kval.com,star1015.com###leader-sponsor\nagriland.ie,ballitonews.co.za,blackburnnews.com,bloody-disgusting.com,football-talk.co.uk,foxnews.com,irishpost.co.uk,longislandpress.com,mobiletoday.co.uk,mobiletor.com,morningledger.com,pcgamerhub.com,soccersouls.com,thescoopng.com,thewrap.com,urbanmecca.net,youngzimbabwe.com###leader-wrapper\nheraldstandard.com###leaderArea\nxe.com###leaderB\nfirstnationsvoice.com,hbr.org,menshealth.com,pistonheads.com###leaderBoard\nwellness.com###leaderBoardContentArea\ntotalfilm.com###leaderContainer\ngirlsgogames.com###leaderData\ncomputerworlduk.com###leaderPlaceholder\nzdnet.com###leaderTop\nbehealthydaily.com###leader_board\npandora.com###leader_board_container\nicanhascheezburger.com,memebase.com,thedailywh.at###leader_container\ntvguide.com###leader_plus_top\ntvguide.com###leader_top\nabout.com,animeseason.com,ariacharts.com.au,ask.fm,boomerangtv.co.uk,businessandleadership.com,capitalxtra.com,cc.com,charlotteobserver.com,classicfm.com,crackmixtapes.com,cubeecraft.com,cultofmac.com,cyberciti.biz,datpiff.com,economist.com,educationworld.com,electronista.com,espn980.com,eurogamer.net,extremetech.com,food24.com,football.co.uk,gardensillustrated.com,gazette.com,greatgirlsgames.com,gtainside.com,hiphopearly.com,historyextra.com,houselogic.com,ibtimes.co.in,ibtimes.co.uk,iclarified.com,icreatemagazine.com,instyle.co.uk,jaxdailyrecord.com,jillianmichaels.com,king-mag.com,ksl.com,lasplash.com,lrb.co.uk,macnn.com,nfib.com,onthesnow.ca,onthesnow.co.nz,onthesnow.co.uk,onthesnow.com,onthesnow.com.au,penny-arcade.com,pets4homes.co.uk,publishersweekly.com,realliving.com.ph,realmoney.thestreet.com,revolvermag.com,rollcall.com,salary.com,sciencedirect.com,sciencefocus.com,smoothradio.com,spin.ph,talonmarks.com,thatgrapejuice.net,thehollywoodgossip.com,theserverside.com,toofab.com,topcultured.com,uncut.co.uk,wheels24.co.za,whitepages.ae,windsorstar.com,winsupersite.com,wired.com,xfm.co.uk###leaderboard\nchicagomag.com###leaderboard-1-outer\nboweryboogie.com,safm.com.au###leaderboard-2\nusnews.com###leaderboard-a\n1029thebuzz.com,925freshradio.ca###leaderboard-area\nusnews.com###leaderboard-b\natlanticcityinsiders.com,autoexpress.co.uk,bigissue.com,galvestondailynews.com,pressofatlanticcity.com,theweek.co.uk###leaderboard-bottom\nscientificamerican.com###leaderboard-contain\ndaniweb.com,family.ca,nationalparkstraveler.com,sltrib.com,thescore.com###leaderboard-container\nnetmagazine.com###leaderboard-content\nwvmetronews.com###leaderboard-footer\nnews-gazette.com###leaderboard-full-size\ncanadianbusiness.com,macleans.ca,moneysense.ca,todaysparent.com###leaderboard-header\nidahostatejournal.com,lonepeaklookout.com###leaderboard-middle\nbelgrade-news.com###leaderboard-middle-container\ntreehousetv.com###leaderboard-play\nkfoxtv.com,kirotv.com,ktvu.com,kxly.com,wfmz.com,wftv.com,whiotv.com,wjactv.com,wpxi.com,wsbtv.com,wsoctv.com,wtov9.com###leaderboard-sticky\ncarbuyer.co.uk,cnet.co.uk,galvestondailynews.com,oaoa.com,pressofatlanticcity.com,themonitor.com###leaderboard-top\nwvmetronews.com###leaderboard-wrap\ngeekologie.com,pcgamer.com,pep.ph,stuttgartcitizen.com###leaderboard-wrapper\ndrdobbs.com,todaystmj4.com,uexpress.com###leaderboard1\ncomputerweekly.com,drdobbs.com,inquirer.net,uexpress.com###leaderboard2\nuexpress.com###leaderboard3\nfuturemark.com,tarot.com###leaderboardArea\nstardoll.com###leaderboardContainer\nroadfly.com###leaderboardHead\nlaw.com###leaderboardMidPage\niconosquare.com###leaderboardNL\ntarot.com###leaderboardOuter\ncomputerweekly.com###leaderboardPlacement\nbrandsoftheworld.com###leaderboardTop\nbusinesstimes.com.sg###leaderboardWrapper\nteleread.com###leaderboard_1\nthestandard.com###leaderboard_banner\njoe.ie###leaderboard_bottom\ngtainside.com,marieclaire.co.uk,marketingmag.ca###leaderboard_container\nrte.ie###leaderboard_footer\ninquirer.net###leaderboard_frame\ninc.com###leaderboard_label\nmanagerzone.com###leaderboard_landing\nenglishbaby.com###leaderboard_outer\nmetroland.net###leaderboard_space\ninvestorwords.com###leaderboard_wrap\nokcupid.com,thehollywoodgossip.com###leaderboard_wrapper\nmovie-analyzer.com###leaderboardbanner\njewishjournal.com###leaderboardgray\njewishjournal.com###leaderboardgray-825\nhollywoodinterrupted.com,westcapenews.com###leaderboardspace\nthaindian.com###leadrb\nfastpic.ru###leads\nbleedingcool.com###leaf-366\nbleedingcool.com###leaf-386\neel.surf7.net.my###left\nsearch.yahoo.com###left > #main > div[id^=\"yui_\"]\nsearch.yahoo.com###left > #main > div[id^=\"yui_\"][class] > ul[class] > li[class]\nsearch.yahoo.com###left > #main > div[id^=\"yui_\"][class]:first-child > div[class]:last-child\nnoscript.net###left-side > div > :nth-child(n+3) a[href^=\"/\"]\ntechnologyexpert.blogspot.com###left-sidebarbottom-wrap1\nshortlist.com###left-sideburn\nsysresccd.org###left1\ncokeandpopcorn.com###left4\ncokeandpopcorn.com###left5\nsparknotes.com###leftAd\ntelegramcommunications.com###leftBanner\ngizgag.com###leftBanner1\nnowinstock.net###leftBannerBar\ninfobetting.com###leftBannerDiv\nwatchcartoononline.com###leftBannerOut\nleo.org###leftColumn > #adv-google:first-child + script + .gray\nleo.org###leftColumn > #adv-leftcol + .gray\nthelakewoodscoop.com###leftFloat\nyahoo.com###leftGutter\nnewsok.com###leftRailContent\nsosuanews.com###left_banner\nisland.lk###left_banner_adds1\nnitrome.com###left_bottom_bg\nnitrome.com###left_bottom_box\nnitrome.com###left_bottom_shadow\nnotdoppler.com###left_link\nwhitepages.co.nz###left_skyscraper\nnitrome.com###left_skyscraper_container\ntheblaze.com###left_top_160x600\nfoodingredientsfirst.com###leftbar-banner\nurlcash.net###leftbox\nsarugbymag.co.za###leftclick\nstuff.co.nz###leftgutter\nhotonlinenews.com###leftmenu\n810varsity.com###leftsidebanner\namericanlivewire.com###lefttower\ntvsquad.com###legal\nsupercars.net###lemonFree\nmsn.com###lgad\nlinuxinsider.com,technewsworld.com###lightview\ntubeplus.me###like_panel\nracinguk.com,webpagetest.org###links\nfox6now.com###links-we-like\nfeedyes.com###links54005\nthe-news.net###linkssection\nfileinfo.com###linkunits\nimagebunk.com###linkxbox\nmappy.com###liquid-misc\netaiwannews.com,taiwannews.com.tw###list_google2_newsblock\netaiwannews.com,taiwannews.com.tw###list_google_newsblock\nikascore.com###listed\n951shinefm.com###listen-now-sponsor\nnymag.com###listings-sponsored\nsawlive.tv###llvvd\nwebmd.com###lnch-promo\nsunshinecoastdaily.com.au###localOffers\nwhereis.com###location_advertisement\nmapcrunch.com###locinfo\ncryptocoinsnews.com###logo + .cb-large\nmeteo-allerta.it,meteocentrale.ch,meteozentral.lu,severe-weather-centre.co.uk,severe-weather-ireland.com,vader-alarm.se###logo-sponsor\ncnettv.cnet.com###logoBox\nrunnow.eu,sunderlandvibe.com###logos\narenafootball.com###logos-wrap\nusnews.com###loomia_display\nherold.at###loveat\neurogamer.net###low-leaderboard\nbyutvsports.com###lower-poster\nproudfm.com###lower_leaderboard\nhinduwebsite.com###lowergad\nmefeedia.com###lowright300\nafricam.com###lr_comp_default_300x150\nafricam.com,cnn.com,epdaily.tv,hernandotoday.com,highlandstoday.com,kob.com,tbo.com,techsupportforum.com,tivocommunity.com,wbng.com###lr_comp_default_300x250\nmusic.yahoo.com###lrec\nfox.com###lrec-wrapper\nyahoo.com###lrec2\nmusic.yahoo.com###lrecTop\nyahoo.com###lrec_mod\ninquirer.net###ls-bb-wrap\ninquirer.net###ls-right\niphonelol.org###lsmspnad\ncelebstyle.com###lucky\nlinuxinsider.com,technewsworld.com###lv_overlay\ndrugs.com###m1a\nmiller-mccune.com###magSubscribe\nwired.com###magazine_rightRail_A\nvideos.rawstory.com###magnify_widget_playlist_item_shop_container\nrawstory.com###magnify_widget_playlist_item_shop_content\nmediaite.com###magnify_widget_rect_content\nmediaite.com###magnify_widget_rect_handle\nreallygoodemails.com###mailchimp-link\nadv.li###main\nsearch.yahoo.com###main .dd .layoutCenter .compDlink\nsearch.yahoo.com###main .dd .layoutCenter > .compDlink\nsearch.yahoo.com###main .dd[style=\"cursor: pointer;\"] > .layoutMiddle\ncryptocoinsnews.com###main > .mobile > .special > center\nsearch.yahoo.com###main > .reg > li[id^=\"yui_\"][data-bid] > [data-bid]\nsearch.yahoo.com###main > div[id^=\"yui_\"] > ul > .res\nsearch.yahoo.com###main > div[id^=\"yui_\"].rVfes:first-child\nsearch.yahoo.com###main > div[id^=\"yui_\"].rVfes:first-child + #web + div[id^=\"yui_\"].rVfes\nsearch.yahoo.com###main > div[id^=\"yui_\"][class][data-bk][data-bns]:first-child\nsearch.yahoo.com###main > div[style=\"background-color: rgb(250, 250, 255);\"]\nsearch.yahoo.com###main > noscript + div[id^=\"yui_\"][class][data-bk][data-bns=\"Yahoo\"]\nsearch.yahoo.com###main > noscript + div[id^=\"yui_\"][class][data-bk][data-bns=\"Yahoo\"] + #web + div[id^=\"yui_\"][class][data-bk][data-bns=\"Yahoo\"]\nsearch.yahoo.com###main > ol li[id^=\"yui_\"]\nsearch.yahoo.com###main > style:first-child + * + #web + style + * > ol[class]:first-child:last-child\nsearch.yahoo.com###main > style:first-child + * > ol[class]:first-child:last-child\nmobilesyrup.com###main-banner\nyasni.ca,yasni.co.uk,yasni.com###main-content-ac1\nstylist.co.uk###main-header\nsfbay.ca###main-market\nmonhyip.net###mainBaner\nnme.com###mainBanner\nleo.org###mainContent > #rightColumn:last-child\nw3schools.com###mainLeaderboard\nnecn.com###main_117\nnecn.com###main_121\nnecn.com###main_175\nnet-security.org###main_banner_topright\nbitenova.org###main_un\npureoverclock.com###mainbanner\nsearch.aol.com###maincontent + script + div[class] > style + script + h3[class]\nholidayscentral.com###mainleaderboard\nkansas.com,kansascity.com,miamiherald.com,sacbee.com,star-telegram.com###mainstage-dealsaver\nbazoocam.org###mapub\nreuters.com###marchex\nmacdrifter.com###marked-widget\neatingwell.com###marketFeaturedSponsors\nitworld.com###market_place\niii.co.uk###marketdatabox_content_footer\nxmlgold.eu###marketimg\nmyspace.com###marketing\nnbcconnecticut.com,nbcphiladelphia.com,nbcwashington.com###marketingPromo\ntechworld.com###marketingSlots\ncio.co.uk###marketingSlotsContainer\nstyle.com###marketing_mod\ncrispygamer.com###marketingbox\narnnet.com.au,cio.com.au,computerworld.com.au,foodandwine.com,healthcareitnews.com,msn.com,nbcnews.com,techworld.com.au,travelandleisure.com,tvnz.co.nz,yahoo.com###marketplace\ngoodgearguide.com.au,pcworld.idg.com.au,techworld.com.au###marketplace-padding\nusatoday.com###marketplace2\ninquirer.net###marketplace_vertical_container\ninquirer.net###marketplacebtns\ncolumbian.com###marketplaces-widget-new\nvidhog.com###mask\nbellinghamherald.com,bnd.com###mastBanner\npcadvisor.co.uk###mastHeadTopLeft\npricegrabber.com###mast_logo_advertisement\ncreditinfocenter.com,examiner.com###masthead\narstechnica.com###masthead + #pushdown-wrap\npbs.org###masthead1\npbs.org###masthead2\nyahoo.com###mbAds\ninternet.com###mbEnd\nmaps.google.com###mclip\ngoogle.com.au###mclip_control\nsandiego6.com###mealsandsteals\nthehothits.com###med-rec\nmyspace.com###medRec\nyourdailymedia.com###medRectATF\ncitypaper.com,metrotimes.com###medRectangle\nactive.com###med_rec_bottom\nactive.com###med_rec_top\nlancasteronline.com###med_rect\nostatic.com###media_partner_gallery\nfinance.yahoo.com###mediabankrate_container\nmegom.tv###mediaspace_wrapper + script + #timeNumer\nsurk.tv###mediasrojas1\nxxlmag.com###medium-rec\npastemagazine.com,weebls-stuff.com###medium-rectangle\ncgchannel.com###mediumRectangle\nnewburyportnews.com###mediumRectangle_atf\npons.com,pons.eu###medium_rec\nkexp.org###medium_rectangle\npandora.com###medium_rectangle_container\npricegrabber.com###mediumbricks\nking-mag.com###mediumrec\nebaumsworld.com###mediumrect\nsmashingmagazine.com###mediumrectangletarget\namericanidol.com,mindjolt.com,xxlmag.com###medrec\nhackaday.com,joystiq.com,peninsuladailynews.com###medrect\natom.com,happytreefriends.com###medrect-container\njoystiq.com###medrectrb\nmichiguide.com###medrectright\ntechrepublic.com,zdnet.com###medusa\nnashuatelegraph.com###meerkat-wrap\nconcrete.tv###megabanner\nencyclopedia-titanica.org###menuheaderbio\nspinitron.com###merchpanel\nginbig.com,rushlane.com###message_box\ntheweedblog.com###meteor-slides-widget-3\nfulldls.com###meth_smldiv\nimageporter.com###mezoktva\ndannychoo.com###mg-blanket-banner\nthetechjournal.com,torrents.de,torrentz.ch,torrentz.com,torrentz.eu,torrentz.in,torrentz.li,torrentz.me,torrentz.ph,torrentz.unblockt.com###mgid\neveryjoe.com###mgid-widget\nmenshealth.com###mh_top_promo_special\nliligo.com###midbanner\nsoccerphile.com###midbanners\ndvdactive.com###middleBothColumnsBanner\nwpxi.com,wsbtv.com###middleLeaderBoard\ntheimproper.com###middle_banner_widget\nproudfm.com###middle_leaderboard\ntrutv.com,workswithu.com###middlebanner\nworkswithu.com###middlebanner300x100\nthevarguy.com###middlebannerwrapper\nmefeedia.com###midright300\nstuff.co.nz###mightyape-mobwidget\npricegrabber.com###minibricks\npch.com###minipath_panel\ndevshed.com###mixedspons\nmsn.com###mlad\nmercurynews.com###mn_SP_Links\ndllme.com###mobile-insert\nbit-tech.net###mobile-phones-co-uk-120\npcpro.co.uk###mobile_app_developers\nlongreads.com###mobile_banner\niphoneapplicationlist.com###mobiscope-banner\nnytimes.com###mod-ln-ctr-bt\nnytimes.com###mod-ln-ctr-top\nphilly.com###mod-storytext\nciao.co.uk###mod_ph_merchoffer\nmail.yahoo.com###modal-upsell\ntradingmarkets.com###modalbg\nmoneymakerdiscussion.com###module25\ndesiretoinspire.net###moduleContent18450223\ngoodhousekeeping.com###moduleEcomm\nelle.com,womansday.com###moduleMightLike\nmenshealth.co.uk###module_promotion\nhuffingtonpost.co.uk###modulous_right_rail_edit_promo\nhuffingtonpost.co.uk###modulous_sponsorship_2\nwikia.com###monaco_footer\ncnn.com###moneySponsorBox\ncnn.com###moneySponsors\nitworld.com###more_resources\ntopix.com###mortgages_block\ngold1043.com.au,kiis1065.com.au,mix1011.com.au,wsfm.com.au###mos-headerRow1\nnewssun.com###mosFeatureHome\nnewssun.com###mosHeaderTop\ninsideradio.com###mosSkyscraper\ntooorgle.com###most_popular\nanonymouse.org###mouselayer\nway2sms.com###movbox\nwatchfreemovies.ch###movie\ntake40.com###mpIsland\nbounty.com,carpages.co.uk,clubwebsite.co.uk,cumberlandnews.co.uk,djmag.co.uk,djmag.com,donedeal.ie,eladvertiser.co.uk,f1fanatic.co.uk,gumtree.com,hexhamcourant.co.uk,icreatemagazine.com,in-cumbria.com,itv.com,lbc.co.uk,lonelyplanet.com,metalhammer.co.uk,nettleden.com,newsandstar.co.uk,nickjr.co.uk,nme.com,nwemail.co.uk,play.tm,politics.co.uk,radiotimes.com,sportinglife.com,studentbeans.com,taletela.com,thatgrapejuice.net,thecourier.co.uk,thefootballnetwork.net,timesandstar.co.uk,topgear.com,tv.com,uncut.co.uk,webdesignermag.co.uk,whitehavennews.co.uk,zoopla.co.uk###mpu\nt3.com###mpu-container-2\nstv.tv###mpu-content2\ntopgear.com###mpu3\nheatworld.com###mpuLikeSection\nchow.com###mpu_1\noliveoiltimes.com###mpu_banner1\ninstyle.co.uk###mpu_div\navforums.com###mpu_inpost\niconosquare.com###mpusCenter\nfox.com,momversation.com,spin.ph,thexfactorusa.com###mrec\nnwherald.com###mrec-atf\nnwherald.com###mrec-btf\nfox.com###mrec-wrapper\nspin.ph###mrec3\nninemsn.com.au###mrecMod\npcworld.co.nz###mrec_bottom\nnzherald.co.nz###mrktImg\nkatu.com,kval.com###mrktplace_tabbed\ncomputerweekly.com###msAD_cw_adtech_leaderboard_2\ncomputerweekly.com###msAD_cw_adtech_skyscraper_two_4\nsearch.cnbc.com###ms_aur\nyourwire.net###mscount\nsharetera.com###msgDiv\nninemsn.com.au,ninemsn.seek.com.au###msnhd_div3\nyourmovies.com.au,yourrestaurants.com.au,yourtv.com.au###msnmd_div\neverybody.co.nz###msnnz_ad_medium_rectangle\nmagicseaweed.com###msw-js-toggle-leader\nknowfree.net,thepspblog.com###mta_bar\nheritage.com###mthotdeal\nmtv.co.uk###mtv-shop\nratemyprofessors.com###mtvBlock\nnitrome.com###mu_2_container\nmalwarehelp.org###multimedia_box\nmyspace.com###music_googlelinks\nmyspace.com###music_medrec\nwikinvest.com###mw-header\nyahoo.com###mw-ysm-cm\nnews.yahoo.com###mw-ysm-cm_2-container\nminingweekly.com###mw_q-search-powered\nyahoo.com###my-promo-hover\nrally24.com###myBtn\ntcpdump.com###myID\nbloggersentral.com###mybsa\nlolzparade.com###mylikes_bar_all_items\njobstreet.com.sg###mysitelogo\nforums.creativecow.net###mz[width=\"100%\"][valign=\"top\"][style=\"padding:20px 30px 30px 30px;\"] + td[width=\"150\"][valign=\"top\"][style=\"padding:6px 10px 0px 0px;\"]:last-child\nrentalcars.com###name_price_ad\nirishracing.com###naobox\nentrepreneur.com###nav-promo-link\nbrowserleaks.com###nav-right-logo\namazon.com###nav-swmslot\nrentals.com###nav_credit_report\nkuhf.org###nav_sponsors\nhongfire.com###navbar_notice_9\nusnews.com###navbuglink\nesl.eu###navi_partner\nwebinspector.se###navigation_left\nnbc.com###nbc-300\ntruelocal.com.au###ndmadkit-memrec-1\nnetcraft.com###netcraft-links-bottom\nmoviefone.com###netflix-promo\nsandiegozoo.org###newhomesponosrs\naskmen.com###news_popup\nsoccerlens.com###newsnowlogo\nyakima-herald.com###newspaperads\ntheroot.com###nextbox\nafricam.com###nikona\naww.com.au###ninemsn-footer-container\ncosmopolitan.com.au,dolly.com.au###ninemsn-leaderboard-footer\ntheberry.com###ninth-box\nmotherjones.com###node-body-break\nwebsite-unavailable.com###norecords\nnews.yahoo.com###north\nsensis.com.au###northPfp\nmail.yahoo.com###northbanner\nsankakucomplex.com###noscript-warning\nforums.somethingawful.com###notregistered\npv-tech.org###noty_bottomRight_layout_container\nmajorgeeks.com###novb\nair1.com,klove.com###nowPlayingBuyMusic\nfirststreaming.com###nowplayinglinks\nfinancialpost.com,nationalpost.com###npLeaderboard\nabout.com,gamefaqs.com###nrelate_related_placeholder\nbackpage.com###nsaLeaderBoard\nnascar.com###nscrRCol160ad\nnascar.com###nscrVideoAd\ntotalcmd.pl###nucom\nmail.yahoo.com###nwPane\nthedailybeast.com###nwsub_container\ncentralillinoisproud.com###nxcms_dotbiz\nnydailynews.com###nydn-ads\nnydailynews.com###nydn-footer-ad\nnydailynews.com###nydn-top-ad\nnytimes.com###nytmm-ss-big-ad-1\nnytimes.com###nytmm-ss-big-ad-2\nbtmon.com###oafa_target_4\nbtmon.com###oafa_target_6\nmasala.com###oas-300x600\nautotrader.co.uk###oas-banner-0\nautotrader.co.uk###oas-banner-1\nautotrader.co.uk###oas-banner-2\nautotrader.co.uk###oas-banner-3\nmasala.com###oas-mpu-left\\<\\/div\\>\nmasala.com###oas-mpu-right\\<\\/div\\>\nmoneycontrol.com###oas_bottom\nforeclosure.com###obFlyMain\ncbslocal.com###ob_paid_header\ncleantechnica.com###obog_signup_widget\ncincinnati.com###ody-asset-breakout\ndemocratandchronicle.com###ody-dealchicken\npopsugar.com###offer-widget\nfunnyplace.org###oglas-desni\ncnet.com###omTrialPayImpression\nikeahackers.net###omc-sidebar .responsive-image\ncleantechnica.com,watch-anime.net###omc-top-banner\nwbaltv.com,wesh.com,wmur.com###omega\nomg.yahoo.com###omg-lrec\nazcentral.com###on-deals\neweek.com###oneAssetIFrame\nyeeeah.com###orangebox\n24wrestling.com###other-news\ntotallycrap.com###oursponsors\nallyou.com,cbsnews.com,chron.com,coastalliving.com,cookinglight.com,denverpost.com,ew.com,jpost.com,myrecipes.com,mysanantonio.com,nydailynews.com,pcmag.com,seattlepi.com,seattletimes.com,sfgate.com,southernliving.com,standard.co.uk,sunset.com,telegraph.co.uk,theguardian.com,travelandleisure.com,washingtonexaminer.com,ynetnews.com###outbrain_widget_0\nfoxnews.com,jpost.com,london24.com,nydailynews.com###outbrain_widget_1\ncbslocal.com,chron.com,mysanantonio.com,seattlepi.com,sfgate.com,standard.co.uk###outbrain_widget_2\nbbc.com,cnbc.com,jpost.com,si.com###outbrain_widget_3\nsi.com###outbrain_widget_5\nhiphopwired.com###outbrain_wrapper\nfamilysecuritymatters.org###outer_header\nengadget.com###outerslice\nmp4upload.com###over\nbeststreams.ru###over-small\nplayhd.eu###over_player_msg2\ndeviantart.com###overhead-you-know-what\nagame.com,animestigma.com,bestream.tv,newsbtc.com,notdoppler.com,powvideo.net,uploadcrazy.net,vidcrazy.net,videoboxone.com,videovalley.net,vidup.org,vipboxeu.co,vipleague.me,viponlinesports.eu,webmfile.tv###overlay\nbidnessetc.com###overlay10\nspeedvid.net,thevideo.me###overlayA\neuro-pic.eu,imagewaste.com###overlayBg\ntheyeshivaworld.com###overlayDiv\nbestreams.net,happystreams.net,played.to,realvid.net###overlayPPU\nreference.com###overlayRightA\nthelakewoodscoop.com###overlaySecondDiv\ndeditv.com,fleon.me,mypremium.tv,skylo.me,streamme.cc,tooshocking.com,xtshare.com###overlayVid\nagame.com###overlay_bg\ncanoe.ca###overlay_bigbox\nviplivebox.eu###overlay_content\nviplivebox.eu###overlay_countdown\nthedailybeast.com###overlay_newsweek_container\nreference.com###overlayleftA\nrocksound.tv###overtake\nimfdb.org###p-Sponsors\nlyricwiki.org###p-navigation + .portlet\nscout.com###p2rightbar\nespnf1.com###p320B\nespnf1.com###p320T\ncoloradoan.com,thenewsstar.com###p360_left_wrapper\nsuperfundo.org,tv3.co.nz###pa\nyahoo.com###paas-lrec\nyahoo.com###paas-mrec\ninterfacelift.com###page > .row[style=\"height: 288px;\"]\nabbreviations.com,definitions.net,quotes.net,synonyms.net###page-bottom-banner\nhuffingtonpost.com###page-header\nanimenewsnetwork.com,animenewsnetwork.com.au###page-header-banner\nwhathifi.com###pageHeader\nnbcmontana.com###pageHeaderRow1\nweather.com###pageSpon2\nninemsn.com.au###page_content_right\nradaronline.com###page_content_right_small\nfacebook.com###pagelet_ads_when_no_friend_list_suggestion\nwarriorforum.com###pagenav_menu + div[align=\"center\"] > a[target=\"_blank\"] > img\nofftopic.com###pagenav_menu + table[height=\"61\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"][width=\"100%\"]\nsme.sk###paidLinks\nthesun.co.uk###paidProducts\nweather.com###paid_search\nzonelyrics.net###panelRng\ncreativenerds.co.uk###panelTwoSponsors\nnymag.com###partner-feeds\norange.co.uk###partner-links\nbusinessinsider.com.au###partner-offers\nhwbot.org###partner-tiles\nkat.ph###partner1_button\nnbcphiladelphia.com,nbcsandiego.com,nbcwashington.com###partnerBar\nhbr.org###partnerCenter\nnickjr.com###partnerLinks\nnewser.com###partnerTopBorder\nhuffingtonpost.com###partner_box\neuronews.com###partner_link\nweather.com###partner_offers\ndelish.com###partner_promo_module_container\nwhitepages.ca,whitepages.com###partner_searches\nitworld.com###partner_strip\new.com###partnerbar\new.com###partnerbar-bottom\ncollegecandy.com###partnerlinks\ncioupdate.com,datamation.com,earthweb.com,fastseduction.com,mfc.co.uk,muthafm.com,ninemsn.com.au,porttechnology.org,threatpost.com,wackyarchives.com###partners\narcticstartup.com###partners_125\nbehealthydaily.com###partners_content\nganool.com###pateni\npatheos.com###patheos-ad-region\nboards.adultswim.com###pattern-area\nway2sms.com###payTM300\ncarscoops.com###payload\nbinaries4all.com###payserver\nbinaries4all.com###payserver2\npbs.org###pbsdoubleclick\nnydailynews.com###pc-richards\ndemap.info###pcad\ntucows.com###pct_popup_link\nretrevo.com###pcw_bottom_inner\nretrevo.com###pcw_int\nretrevo.com###pcw_showcase\nrealestate.yahoo.com###pdp-ysm\ntorrentreactor.net###peelback\nvosizneias.com###perm\ntheonion.com###personals\navclub.com###personals_content\ntopix.com###personals_promo\nportforward.com###pfconfigspot\npricegrabber.com,tomshardware.com###pgad_Top\npricegrabber.com###pgad_topcat_bottom\nrichkent.com###phone\nvideo2mp3.net###phone_top\nknowyourmobile.com###phones4u300_body\nknowyourmobile.com###phones4u_body\nknowyourmobile.com###phones4u_masthead\nknowyourmobile.com###phones4u_masthead_500\neveryjoe.com###php-code-1\ntoonzone.net###php_widget-18\ntriggerbrothers.com.au###phpb2\ntriggerbrothers.com.au###phpsky\ndnsleak.com,emailipleak.com,ipv6leak.com###piaad\npicarto.tv###picartospecialadult\nheatworld.com###picks\nfool.com###pitch\nratemyprofessors.com###placeholder728\nautotrader.co.uk###placeholderTopLeaderboard\nsockshare.com###playdiv div[style^=\"width:300px;height:250px\"]\nsockshare.com###playdiv tr > td[valign=\"middle\"][align=\"center\"]:first-child\nallmyvideos.net,vidspot.net###player_img\nmagnovideo.com###player_overlay\ncatstream.pw,espnwatch.tv,filotv.pw,orbitztv.co.uk###playerflash + script + div[class]\nytmnd.com###please_dont_block_me\ncargames1.com###plyadu\nmma-core.com###plyr > #overlay\nsheridanmedia.com###poll-sponsor\nvg.no###poolMenu\nbacklinkwatch.com###popUpDiv\nvideolinkz.us###popout\nhybridlava.com###popular-posts\nnewsbtc.com,team.tl###popup\ndxomark.com###popupBlock\nnewpct.com###popupDiv\njournal-news.net###popwin\ncosmopolitan.com###pos_ams_cosmopolitan_bot\nnvideo.eu###posa\nganool.com###post-35426\nio9.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com###postTransitionOverlay\nquickmeme.com###post[style=\"display: block;min-height: 290px; padding:0px;\"]\nwired.com###post_nav\ntechcrunch.com###post_unit_medrec\nmultichannel.com###postscript-top-wrapper\naddictinggames.com###potw\nbnet.com###powerPromo\nedrinks.net,mortgageguide101.com,twirlit.com###ppc\nzdnet.com###pplayLinks\nprisonplanet.com###ppradio\ncnsnews.com###pre-content\npinknews.co.uk###pre-head\nchronicleonline.com,cryptoarticles.com,roanoke.com,sentinelnews.com,theandersonnews.com###pre-header\nfoodnetworkasia.com,foodnetworktv.com###pre-header-banner\nsurfline.com###preRoll\nthevideo.me,vidup.me###pre_counter\ndragcave.net###prefooter\nbizjournals.com###prefpart\nyourmovies.com.au,yourrestaurants.com.au,yourtv.com.au###preheader-ninemsn-container\nmixupload.org###prekla\nbassmaster.com###premier-sponsors-widget\nnzgamer.com###premierholder\nnetnewscheck.com,tvnewscheck.com###premium-classifieds\nyoutube.com###premium-yva\nnextag.com###premiumMerchant\nusatoday.com###prerollOverlayPlayer\n1cookinggames.com###previewthumbnailx250\nnews24.com###pricechecklist\ngamekyo.com###priceminister\nqueenscourier.com###primary-sidebar\ninquirer.net###primaryBottomSidebar\nsnapfiles.com###prodmsg\nsnapfiles.com###prodmsgdl\ngizmodo.com.au###product-finder\nproductwiki.com###product-right\nmasstimes.org,thecatholicdirectory.com###products\nandroidauthority.com###products_widget\nrapid8.com###prom\nnotepad.cc,runnow.eu###promo\nnextgengamingblog.com###promo-300x250\nnextgengamingblog.com###promo-468x60\nartistsandillustrators.co.uk###promo-area\ncomputerandvideogames.com###promo-h\nminiclip.com###promo-mast\nwayfm.com###promo-roll\nminiclip.com###promo-unit\nnbcuni.com###promo1\nnbcuni.com###promo9\nfhm.com###promoContainer\n8newsnow.com###promoHeader\nkat.ph###promoLeechmonster\nasseenontv.com###promoMod\nmacupdate.com###promoSidebar\nmaxim.com###promoSlide\nwsj.com###promo_container\nyahoo.com###promo_links_list\nphonescoop.com###promob\nagame.com###promobar\nmdjonline.com,thestranger.com###promos\nund.com###promos-story-wrap\nund.com###promos-wrap\nnetworkworld.com###promoslot\neclipse.org,hotscripts.com###promotion\nreminderfox.mozdev.org###promotion3\nsherdog.net###promotion_container\nnewsroomamerica.com###promotional\nthebulls.co.za###promotions\nthesuperficial.com###pronto-container\nthehomepage.com.au###prop-foot-728x90\nindependent.co.uk,standard.co.uk###propCar\nmy-proxy.com###proxy-bottom\nnewyorker.com###ps2_fs2_yrail\nnewyorker.com###ps3_fs1_yrail\necommercetimes.com,linuxinsider.com,macnewsworld.com,technewsworld.com###ptl\nsk-gaming.com###pts\nsk-gaming.com###ptsf\nrocvideo.tv###pu-pomy\ndigitalversus.com###pub-banner\ndigitalversus.com###pub-right-top\ncnet.com###pubUpgradeUnit\njeuxvideo-flash.com###pub_header\nfrequence-radio.com###pub_listing_top\nskyrock.com###pub_up\ntvlizer.com###pubfooter\nhellomagazine.com###publi\nmarca.com###publi_sup\nsurinenglish.com###publicidades_top\nthenextweb.com###pubtop\nherold.at###puls4\nnewsweek.com###pulse360\nnymag.com,thebusinessdesk.com###pushdown\npep.ph###pushdown-wrapper\nneopets.com###pushdown_banner\nminingweekly.com###q-search-powered\nthriveforums.org###qr_defaultcontainer.qrcontainer\ninbox.com,search.aol.com###r\nsearch.yahoo.com###r-e\nsearch.yahoo.com###r-n\nsearch.yahoo.com###r-s\ndnssearch.rr.com,optu.search-help.net###rSrch\noldgames.sk###r_TopBar\nultimate-guitar.com###r_a\nthedugoutdoctors.com,thehoopdoctors.com###r_sidebar\ngantdaily.com###r_sidebar_banners\nmobilenapps.com###r_sponsor\nbarbavid.com###rabbax\ntechnozeast.com,youtube-mp3.org###rad\nanswers.com###radLinks\nehow.co.uk###radlinks\nfreevermontradio.org###rads\ncollegefashion.net###rainbowsparkleunicorn\narmorgames.com###randomgame\namazon.com###raw-search-desktop-advertising-tower-1\nimageporter.com###ray_ban\nreference.com###rc\npt-news.org###rcb1\nholytaco.com###re_ad_300x250\nyahoo.com###rec\nakihabaranews.com###recHome\nakihabaranews.com###recSidebar\ndeliciousdays.com###recipeshelf\nwambie.com###recomendar_728\ntucows.com###recommended_hdg\ndoodle.com###rect\npixdaus.com###rectBanner\nap.org,moviemistakes.com,tvfanatic.com,zattoo.com###rectangle\nbizrate.com###rectangular\ndict.cc###rectcompactbot\ndict.cc###recthome\ndict.cc###recthomebot\n1tiny.net###redirectBlock\nbloemfonteincelticfc.co.za###reebok_banner\nexpertreviews.co.uk###reevoo-top-three-offers\npcadvisor.co.uk###reevooComparePricesContainerId\npcadvisor.co.uk###reevooFromPrice\nbnet.com###reg-overlay\nyahoo.com###reg-promos\ndailyxtra.com###region-superleaderboard\nthedailystar.net###rehab_ad_tds_web\nxpgamesaves.com###reklam\natdhe.eu###reklama_mezi_linky\nfilmschoolrejects.com###related-items\nmoneynews.com,newsmax.com,newsmaxhealth.com,newsmaxworld.com###relatedlinks\nwinkeyfinder.com###render\nthehomepage.com.au###res-mid-728x90\nthehomepage.com.au###res-side-160x600\nthehomepage.com.au###res-top-728x90\nmumsnet.com###reskin_left\nmumsnet.com###reskin_right\nzillow.com###resource-center\nzdnet.com###resourceCentre\ncomputerworld.com,networkworld.com###resources-sponsored-links\nurl.org###resspons1\nurl.org###resspons2\nherold.at###resultList > #downloadBox\nsearch.iminent.com,start.iminent.com###result_zone_bottom\nsearch.iminent.com,start.iminent.com###result_zone_top\nfilesdeck.com###results-for > .r > .rL > a[target=\"_blank\"][href^=\"/out.php\"]\nsearch.excite.co.uk###results11_container\nindeed.com###resultsCol > .lastRow + div[class]\nindeed.com###resultsCol > .messageContainer + style + div + script + style + div[class]\nqwant.com###resultsShoppingList\nnowtorrents.com###results_show_2\ncnet.com###reviewsPanel\nmsn.co.nz###rhc_find\nninemsn.com.au###rhc_mrec\nimdb.com###rhs-sl\nimdb.com###rhs_cornerstone_wrapper\npcworld.idg.com.au###rhs_resource_promo\nstream2watch.com###rhw_footer\neel.surf7.net.my,macdailynews.com,ocia.net###right\nsearch.yahoo.com###right .dd .mb-11 + .compList\nsearch.yahoo.com###right .dd > .layoutMiddle\nsearch.yahoo.com###right .dd[style=\"cursor: pointer;\"] > .layoutMiddle\nsearch.yahoo.com###right .dd[style^=\"background-color:#FFF;border-color:#FFF;padding:\"] .compList\nsearch.yahoo.com###right .first > div[style=\"background-color:#fafaff;border-color:#FAFAFF;padding:4px 10px 12px;\"]\nsearch.yahoo.com###right .reg > li[id^=\"yui_\"][data-bid] > [data-bid]\nsearch.yahoo.com###right .res\nninemsn.com.au###right > .bdr > #ysm\nsearch.yahoo.com###right > .searchRightMiddle + div[id]:last-child\nsearch.yahoo.com###right > .searchRightTop + div[id]:last-child\n~images.search.yahoo.com,search.yahoo.com###right > div > .searchRightMiddle + div[id]:last-child\n~images.search.yahoo.com,search.yahoo.com###right > div > .searchRightTop + [id]:last-child\n~images.search.yahoo.com,search.yahoo.com###right > div:first-child:last-child > [id]:first-child:last-child\nsearch.yahoo.com###right > div[id] > div[class] > div[class] > h2[class]:first-child + ul[class]:last-child > li[class]\nsearch.yahoo.com###right > span > div[id] > div[class] div[class] > span > ul[class]:last-child > li[class]\nsearch.yahoo.com###right [class][data-bk][data-bns]\nsearch.yahoo.com###right div[style=\"background-color:#fafaff;border-color:#FAFAFF;padding:4px 10px 12px;\"]\nsearch.yahoo.com###right li[id^=\"yui_\"] .dd > .layoutMiddle\nsearch.yahoo.com###right ol li[id^=\"yui_\"] > .dd > .layoutMiddle\n123chase.com###right-adv-one\nfoodingredientsfirst.com,nutritionhorizon.com,tgdaily.com###right-banner\nvidstatsx.com###right-bottom\ntreatmentabroad.net###right-inner\nwenn.com###right-panel-galleries\nshortlist.com###right-sideburn\nnarutofan.com###right-spon\nvidstatsx.com###right-top\nrealcleartechnology.com###right-wide-skyscraper\npopsci.com###right1-position\ngtopala.com###right160\npopsci.com###right2-position\ntnt.tv###right300x250\ncartoonnetwork.co.nz,cartoonnetwork.com.au,cartoonnetworkasia.com,cdcovers.cc,gizgag.com,prevention.com,slacker.com,telegramcommunications.com###rightBanner\nwatchcartoononline.com###rightBannerOut\ncantyouseeimbusy.com###rightBottom\nlinuxforums.org,quackit.com###rightColumn\nmaltatoday.com.mt###rightContainer\nthelakewoodscoop.com###rightFloat\nyahoo.com###rightGutter\ncosmopolitan.com###rightRailAMS\nbefunky.com###rightReklam\ntotalfark.com###rightSideRightMenubar\nplaystationlifestyle.net###rightSkyscraper\nitworldcanada.com###rightTopSponsor\nfiles.fm###right_add\nsosuanews.com###right_banner\nmediacorp.sg###right_banner_placeholder\nffiles.com###right_col\nnecn.com###right_generic_117\nnecn.com###right_generic_121\nnecn.com###right_generic_175\nthemtn.tv###right_generic_47\nnecn.com###right_generic_v11_3\nnotdoppler.com###right_link\npsinsider.e-mpire.com###right_main_1\nhardware.info###right_top\ntheblaze.com###right_top_160x600\nmumbaimirror.com###rightarea\nvg247.com###rightbar > #halfpage\nurlcash.net###rightbox\nsarugbymag.co.za###rightclick\nportable64.com###rightcol\nliveleak.com###rightcol > .sidebox > .gradient > p > a[target=\"_blank\"]\ncokeandpopcorn.com###rightcol3\nmysuncoast.com###rightcolumnpromo\nstuff.co.nz###rightgutter\n810varsity.com###rightsidebanner\nherold.at###rightsponsor\nelyricsworld.com###ringtone\ntubeconverter.net###ringtone-button\nyoutump3.com###ringtoner\negotastic.com,idolator.com,socialitelife.com,thesuperficial.com###river-container\nmegarapid.net,megashare.com,scrapetorrent.com###rmiad\nmegashare.com###rmishim\nbrenz.net###rndBanner\nactiontrip.com,comingsoon.net,craveonline.com,dvdfile.com,ecnmag.com,gamerevolution.com,manchesterconfidential.co.uk,thefashionspot.com,videogamer.com###roadblock\nwindowsitpro.com,winsupersite.com###roadblockbackground\nwinsupersite.com###roadblockcontainer\nmirror.co.uk###roffers-top\nbarclaysatpworldtourfinals.com###rolex-small-clock\nkewlshare.com###rollAdRKLA\nmoviezer.com###rootDiv[style^=\"width:300px;\"]\nlionsrugby.co.za###rotator\nlionsrugby.co.za###rotator2\npowerboat-world.com###rotator_url\nalliednews.com,americustimesrecorder.com,andovertownsman.com,athensreview.com,batesvilleheraldtribune.com,bdtonline.com,chickashanews.com,claremoreprogress.com,cleburnetimesreview.com,clintonherald.com,commercejournal.com,commercial-news.com,coopercrier.com,cordeledispatch.com,corsicanadailysun.com,crossville-chronicle.com,cullmantimes.com,dailyiowegian.com,dailyitem.com,daltondailycitizen.com,derrynews.com,duncanbanner.com,eagletribune.com,edmondsun.com,effinghamdailynews.com,enewscourier.com,enidnews.com,farmtalknewspaper.com,fayettetribune.com,flyergroup.com,gainesvilleregister.com,gloucestertimes.com,goshennews.com,greensburgdailynews.com,heraldbanner.com,heraldbulletin.com,hgazette.com,homemagonline.com,itemonline.com,jacksonvilleprogress.com,joplinglobe.com,journal-times.com,journalexpress.net,kokomotribune.com,lockportjournal.com,mankatofreepress.com,mcalesternews.com,mccrearyrecord.com,mcleansborotimesleader.com,meadvilletribune.com,meridianstar.com,mineralwellsindex.com,montgomery-herald.com,mooreamerican.com,moultrieobserver.com,muskogeephoenix.com,ncnewsonline.com,newburyportnews.com,newsaegis.com,newsandtribune.com,niagara-gazette.com,njeffersonnews.com,normantranscript.com,orangeleader.com,oskaloosa.com,ottumwacourier.com,palestineherald.com,panews.com,paulsvalleydailydemocrat.com,pellachronicle.com,pharostribune.com,pressrepublican.com,pryordailytimes.com,randolphguide.com,record-eagle.com,register-herald.com,register-news.com,reporter.net,rockwallheraldbanner.com,roysecityheraldbanner.com,rushvillerepublican.com,salemnews.com,sentinel-echo.com,sharonherald.com,shelbyvilledailyunion.com,starbeacon.com,stwnewspress.com,suwanneedemocrat.com,tahlequahdailypress.com,theadanews.com,thedailystar.com,thelandonline.com,themoreheadnews.com,thesnaponline.com,tiftongazette.com,times-news.com,timesenterprise.com,timessentinel.com,timeswv.com,tonawanda-news.com,tribdem.com,tribstar.com,unionrecorder.com,valdostadailytimes.com,washtimesherald.com,waurikademocrat.com,wcoutlook.com,weatherforddemocrat.com,woodwardnews.net###rounded-corners-findnsave\nzam.com###row-top\n3news.co.nz###row1_fixed_SideF\ncybergamer.com###row_banner_dvrtsmnt\nyttalk.com###rpmtop\nparentdish.co.uk###rr-amazon\nsearch-results.com###rr_sa_container\nredsharknews.com###rsBannerStrip\ncore77.com###rsDesignDir\ntheprovince.com,vancouversun.com###rsm_widget_wrapper\neprop.co.za###rt-top\nrte.ie###rte-header-leaderboard\nrte.ie###rte-masthead-topleft\npages.ebay.com###rtm_1658\nebay.ie###rtm_NB\nmotors.ebay.com###rtm_div_193\nebay.co.uk,ebay.com###rtm_html_194\nebay.ie###rtm_html_225\nebay.co.uk###rtm_html_274\nebay.co.uk###rtm_html_275\nebay.co.uk,ebay.com###rtm_html_391\nebay.com###rtm_html_441\nebay.co.uk###rtm_html_566\nebay.co.uk###rtm_html_567\nebay.co.uk,ebay.com###rtm_html_569\nfood.com###rz-leaderboard-wrap\ncrawler.com###s\nclassifieds.co.uk###s123results\ncrawler.com###s2\ncapitalradiomalawi.com###s5_pos_below_body_1\ncapitalradiomalawi.com###s5_pos_bottom_row2_1\ncapitalradiomalawi.com###s5_pos_top_row1_1\nsearch.charter.net,search.frontier.com###sRhtSde\nyoutube-mp3.org###sad\nnickutopia.com###sad336\npresidiacreative.com###sads\nsalary.com###sal_pg_abv\nmsn.com###sales1\nmsn.com###sales2\nmsn.com###sales3\nmsn.com###sales4\nwatchwweonline.org###samdav-locker\nwatchwweonline.org###samdav-wrapper\nwbez.org###sb-container\nnickutopia.com###sb160\ncodefuture.co.uk###sb_left\nhwhills.com###sb_left_tower\nscholastic.com###schlSkyscraper\nsciencesdaily.info###sciencedaily_rectangle\ncartoonnetwork.com###scraper\nalloy.com###screen_scene_module\nnewsbusters.org###screenoverlay\npcweenies.com###scribol\ntechpounce.com###scribol-block\nflexiblewebdesign.com###scroll\nopensubtitles.org###scrubbuad_style\nespnscrum.com###scrumRhsBgMpu\nespnscrum.com###scrumRhsBgTxtLks\nhentai2read.com###sct_banner_980_60\nstardoll.com###sdads_bt_2\nzillow.com###search-featured-partners\ndocspot.com###search-leaderboard\nyoutube.com###search-pva\nzoozle.org###search_right\nzoozle.org###search_topline\nbitenova.nl,bitenova.org###search_un\ntribune.com.ng###searchmod-surround\nsearch.yahoo.com###sec-col\nurlgone.com###secondColumn\nkontraband.com###second_nav_container\nkontraband.com###second_nav_content_container\nzuula.com###secondary\nsmarterfox.com###secondary-banner\nway2sms.com###secreg2\nneoseeker.com###section-pagetop\ndesiretoinspire.net###sectionContent2275769\ndesiretoinspire.net###sectionContent5389870\nwhatismyipaddress.com###section_right\nedomaining.com###sedo-search\nscoop.co.nz###seek_table\nsearchenginejournal.com###sej-bg-takeover-left\nsearchenginejournal.com###sej-bg-takeover-right\ninc.com###select_services\nisohunt.to###serps .title-row > a[rel=\"nofollow\"][href=\"#\"]\nwebsite-unavailable.com###servfail-records\ngamesgames.com###sgAdMrCp300x250\ngirlsgogames.com###sgAdMrScp300x250\ngamesgames.com###sgAdScCp160x600\ngirlsgogames.com###sgAdScHp160x600\ngirlsgogames.com###sgAdScScp160x600\nin.msn.com###shaadicom\nmsn.com###shadi_flash\nmercola.com###shadowbox_container\ntubeplus.me###share\nlocalhostr.com###share2\nyoutube.com###shelf-pyv-container\nshidurlive.com###shidurdiv\nsomeecards.com###shop\nexpertreviews.co.uk###shopperButton\nbroadcastnewsroom.com###shopperartbox\nmacworld.com###shopping\ncnet.com.au###shopping-339279174\nindianexpress.com###shopping_deals\nqj.net###shoppingapi\nbellasugar.com,tressugar.com###shopstyle-sidebar-container\n10minutemail.com###shoutouts\nytv.com###show-big-box\nbusinessweek.com###showInterstitial\ntunegenie.com###showad\nisxdead.com###showbox\ncoolhunting.com###showcase\nfamouscelebritiespictures.com,xtremevbtalk.com###showimage\ncrunchyroll.ca###showmedia_square_adbox_new\ntribune.com.ng###showmodules\nfbcoverlover.com###shownOnlyOnceADay\nwwtdd.com###showpping\nsi.com###si-com-ad-widget\nusatoday.com###side-banner1\nusatoday.com###side-banner2\nfeedmyapp.com###side-bsa\nthebestdesigns.com###side-sponsor\ngamingunion.net###side-sponsors\nhowtogeek.com###side78\niphonefaq.org###sideBarsMiddle\niphonefaq.org###sideBarsTop\niphonefaq.org###sideBarsTop-sub\ntomsguide.com,tomshardware.co.uk###sideOffers\nkhmertimeskh.com,webappers.com###side_banner\nbeatweek.com,filedropper.com,mininova.org,need4file.com,rockdizfile.com,satelliteguys.us###sidebar\ncryptoarticles.com###sidebar > #sidebarBlocks\nsharktankblog.com###sidebar > #text-85\nyauba.com###sidebar > .block_result:first-child\nnuttynewstoday.com###sidebar > div[style=\"height:120px;\"]\nha.ckers.org###sidebar > ul > li:first-child + li + div[align=\"center\"]\nkrebsonsecurity.com###sidebar-250\npa-magazine.com###sidebar-banner\ntvlizer.com###sidebar-bottom\nlionsdenu.com,travelwkly.com###sidebar-bottom-left\nlionsdenu.com###sidebar-bottom-right\nkrebsonsecurity.com###sidebar-box\nsbs.com.au###sidebar-first\ncloudpro.co.uk###sidebar-first-inner\neaglewavesradio.com.au###sidebar-header\ntricycle.com###sidebar-logos\nequestriadaily.com###sidebar-right-search\ndomaininvesting.com,elliotsblog.com###sidebar-sps\nallshowsdaily.com###sidebar-wrapper > div > div[style^=\"z-index: \"]\ndeviantart.com###sidebar-you-know-what\nbored.com###sidebar1head\np2pnet.net###sidebar2\nhybridlava.com###sidebar200\nuncoached.com,unrealitymag.com###sidebar300X250\npetapixel.com,pgatour.com###sidebar300x250\nthecourier.co.uk###sidebarMiddleCol\ninquirer.net###sidebarTabs\ninquirer.net###sidebarTabs1\ninquirer.net###sidebarTabs2\nthetechjournal.com###sidebar_after_1000px\nsundancechannel.com###sidebar_banner\nnbntv.com.au###sidebar_banner1\nbestweekever.tv###sidebar_buzzfeed\nthinkdigit.com###sidebar_container[style=\"padding-top:0px !important; \"]\nmoneymakerdiscussion.com###sidebar_container[style=\"width: 200px;\"]\ndestructoid.com###sidebar_dad\ndestructoid.com###sidebar_dad_contact\nforbes.com###sidebar_follower\nmotorcycle.com###sidebar_leaderboard\ndzone.com,poponthepop.com###sidebar_rectangle\nicanhascheezburger.com###sidebar_scraper\ndoityourself.com###sidebar_text_link_container\nsmashingmagazine.com###sidebaradtarget\nwebupd8.org###sidebard-top-wrapper\nracingweb.co.za###sidebarfrontright\npolodomains.com###sidebarin\nopendocument.xml.org###sidebarright\ndooce.com###sidebarskyholder\nquickonlinetips.com###sideboxfeature3\nsaportareport.com###sidetopleft\nsikids.com###sifk_topper\nzerohedge.com###similar-box\nimagebunk.com###simplemodal-container\nimagebunk.com###simplemodal-overlay\nbusinessweek.com###simplyHired\nfastcocreate.com###site-header\nwe7.com###site-right\nkiplinger.com###site-sponsor\nknucklesunited.com###site-title\nopendemocracy.net###site-topbanner\nkstp.com###siteHeaderLeaderboard\narsenal-mania.com###sitePromos\nreddit.com###siteTable_organic\ntexastribune.org###site_roofline\ncybergamer.com###site_skin\ncybergamer.com###site_skin_spacer\nsmsfun.com.au###sitebanners\nslashdot.org###sitenotice\ntorrenttree.com###sites_right\nallmyvids.de###sitewide160right\n2oceansvibe.com,djmag.co.uk,djmag.com,expertreviews.co.uk,mediaite.com,pcpro.co.uk,race-dezert.com###skin\ncollegehumor.com,dorkly.com###skin-banner\njest.com###skin_banner\nidg.com.au###skin_bump\nanimenewsnetwork.com###skin_header\nanimenewsnetwork.com###skin_left\nfleshbot.com###skin_wrap\nbit-tech.net###skinclick\nn4g.com###skinlink\nmetalinjection.net###skinoverlay\nkovideo.net###skip\ndafont.com,dealchecker.co.uk,play.tm,torrent-finder.info,yellowpages.com.my###sky\nskytv.co.nz###sky-banner\naol.co.uk,skysports.com###sky-bet-accordian\nhomeportfolio.com###sky-bottom\nmoneysupermarket.com###sky-container\ncapitalfm.com,heart.co.uk###sky1\ntotalfilm.com###skyContainer\nitpro.co.uk###skyScraper\nexpertreviews.co.uk,pcpro.co.uk###skyScrapper\nexpertreviews.co.uk###skyScrapper2\nnickydigital.com###sky_scrapper\nwebopedia.com###skypartnerset\nebay.co.uk,ebay.com,ebay.com.au###skyscrape\n975countrykhcm.com,boomerangtv.co.uk,broadcastingcable.com,bustedcoverage.com,camchat.org,consumerist.com,eurogamer.net,family.ca,ghanaweb.com,hypable.com,king-mag.com,law.com,macuser.co.uk,menshealth.com,metrotimes.com,mp3tag.de,newsdaily.com,nme.com,pcworld.com,politics.co.uk,poponthepop.com,sportfishingbc.com,thehollywoodgossip.com,thesmokinggun.com,tmz.com,topgear.com,torontosun.com,tvfanatic.com,ucomparehealthcare.com,uncut.co.uk,victoriaadvocate.com,zerochan.net###skyscraper\n4teachers.org###skyscraper-container\ns1jobs.com###skyscraper-target\nicanhascheezburger.com,ifans.com###skyscraper1\nifans.com###skyscraper2\njokes2go.com###skyscraperDiv\nfamilyfun.go.com###skyscraperIframeContainer\nprevention.com###skyscraperWrap\nnitrome.com,pri.org###skyscraper_box\nglobrix.com,totalfilm.com###skyscraper_container\nm-w.com###skyscraper_creative_2\nnitrome.com###skyscraper_description\nnitrome.com###skyscraper_shadow\nhumanevents.com###skyscraperbox\nalloaadvertiser.com,ardrossanherald.com,ayradvertiser.com,barrheadnews.com,bordertelegraph.com,bracknellnews.co.uk,carrickherald.com,centralfifetimes.com,clydebankpost.co.uk,cumnockchronicle.com,dumbartonreporter.co.uk,eastlothiancourier.com,greenocktelegraph.co.uk,helensburghadvertiser.co.uk,irvinetimes.com,largsandmillportnews.com,localberkshire.co.uk,newburyandthatchamchronicle.co.uk,peeblesshirenews.com,readingchronicle.co.uk,sloughobserver.co.uk,strathallantimes.co.uk,the-gazette.co.uk,thevillager.co.uk,troontimes.com,windsorobserver.co.uk###skyscrapers\nbustedcoverage.com,xdafileserver.nl###skyscrapper\ncomputerandvideogames.com,officialnintendomagazine.co.uk,oxm.co.uk###skyslot\nsevenload.com###skyyscraperContainer\nallexperts.com,gifts.com###sl\nhousebeautiful.com###sl_head\ngifts.com###slbox\nmobafire.com###slide-up\nbluff.com,bluffmagazine.com###slideBanner\ntimesfreepress.com###slidebillboard\nroseindia.net###slidebox\nlive365.com###slider\nyellowpagesofafrica.com###sliderPub\nhktdc.com###sliderbanner\nthephuketnews.com###slides\nyellowpageskenya.com###slideshow\ncio.com.au###slideshow_boombox\n790kspd.com###slideshowwidget-8\nbizrate.com###slimBannerContainer\nmail.yahoo.com###slot_LREC\nmail.yahoo.com###slot_MB\nmail.yahoo.com###slot_REC\nconnectionstrings.com###slot_bottom\nconnectionstrings.com###slot_leftmenu\nconnectionstrings.com###slot_top\nconnectionstrings.com###slotfirstpage\nuploadc.com,zalaa.com###slowcodec\nwashingtonpost.com###slug_88x31\nnewsweek.com###slug_bigbox\nwashingtonpost.com###slug_featured_links\nwashingtonpost.com###slug_flex_ss_bb_hp\nwashingtonpost.com###slug_inline_bb\nwashingtonpost.com###slug_sponsor_links_rr\nsportsmole.co.uk###sm_shop\ndailyrecord.co.uk###sma-val-service\nikascore.com###smalisted\nunfinishedman.com###smartest-banner-2\nreviewjournal.com###smedia-upickem_deals_widget\npowerpointstyles.com###smowtion300250\npedestrian.tv###snap\ndenverpost.com###snowReportFooter\ntfportal.net###snt_wrapper\nthepiratebay.se###social + a > img\ncioupdate.com,webopedia.com###solsect\nknowyourmeme.com###sonic\nsensis.com.au###southPfp\nstv.tv###sp-mpu-container\nkat.ph###sp2\naol.com###spA\nthedailygreen.com###sp_footer\ncollegefashion.net###spawnsers\ntorontolife.com###special-messages\ngeeksaresexy.net###special-offers\nnews.com.au###special-promotion\nbidnessetc.com###specialBox10\nvideogamer.com###specialFeatures\ncountryliving.com###specialOffer\ncountryliving.com###special_offer\nredbookmag.com###special_offer_300x200\ncboe.com###special_offers\npcmag.com###special_offers_trio\nwinrumors.com###specialfriend\ntotallycrap.com###specials\nrapid4me.com###speed_table\npricegrabber.co.uk###spl\nfilestube.to###spla\nfxempire.com###splash_over\nfxempire.com###splash_wraper\naol.com###splink\naol.com###splinkRight\nwinsupersite.com###splinkholder\ncnet.com,howdesign.com###splinks\nrealestate.aol.com###splinktop\ndelicious.com###spns\nkatz.cd###spon\neweek.com###spon-con\neweek.com###spon-list\ndiynetwork.com###spon-recommendations\ndailyhaha.com###spon300\nkrillion.com###sponCol\nrockdizfile.com###spon_down\nrockdizfile.com###spon_down2\nforeignpolicy.com###spon_reports\nquakelive.com###spon_vert\nphonescoop.com###sponboxb\nninemsn.com.au###spons_left\nbaseball-reference.com,breakingtravelnews.com,christianpost.com,compfight.com,europages.co.uk,itweb.co.za,japanvisitor.com,katu.com,komonews.com,lmgtfy.com,mothering.com,neave.com,otcmarkets.com,telegeography.com,tsn.ca,tvnz.co.nz,wallpapercropper.com,walyou.com,wgr550.com,wsjs.com,yahoo.com###sponsor\nleedsunited.com###sponsor-bar\ndetroitnews.com###sponsor-flyout\nmeteo-allerta.it,meteocentrale.ch,meteozentral.lu,severe-weather-centre.co.uk,severe-weather-ireland.com,vader-alarm.se###sponsor-info\npublicfinanceinternational.org###sponsor-inner\nitweb.co.za###sponsor-logo\nzymic.com###sponsor-partners\ntalktalk.co.uk###sponsor-search\nfriendster.com###sponsor-wrap\namericanidol.com###sponsorLogos\nohio.com###sponsorTxt\nmlb.com###sponsor_container\nfootball-league.co.uk###sponsor_links\nhealth365.com.au###sponsor_logo_s\nlmgtfy.com###sponsor_wrapper\n7search.com,espn.go.com,filenewz.com,general-fil.es,general-files.com,generalfil.es,independent.ie,internetretailer.com,ixquick.co.uk,ixquick.com,nickjr.com,rewind949.com,slickdeals.net,startpage.com,webhostingtalk.com,yahoo.com###sponsored\ntheweathernetwork.com###sponsored-by\nwebhostingtalk.com###sponsored-clear\nchacha.com###sponsored-question\nfbdownloader.com###sponsored-top\nlastminute.com###sponsoredFeature\nlastminute.com###sponsoredFeatureModule\ntheblaze.com###sponsored_stories\nbusinessweek.com###sponsored_video\nsmashingmagazine.com###sponsorlisttarget\nabalive.com,abestweb.com,barnsleyfc.co.uk,bbb.org,bcfc.com,bestuff.com,blackpoolfc.co.uk,burnleyfootballclub.com,bwfc.co.uk,cafc.co.uk,cardiffcityfc.co.uk,christianity.com,cpfc.co.uk,dcfc.co.uk,easternprovincerugby.com,etftrends.com,fastseduction.com,geekwire.com,gerweck.net,goseattleu.com,hullcitytigers.com,iconfinder.com,itfc.co.uk,kiswrockgirls.com,landreport.com,law.com,lcfc.com,manutd.com,myam1230.com,noupe.com,paidcontent.org,pba.com,pcmag.com,petri.co.il,pingdom.com,psl.co.za,race-dezert.com,rovers.co.uk,sjsuspartans.com,soompi.com,sponsorselect.com,star883.org,tapemastersinc.net,techmeme.com,trendafrica.co.za,waronyou.com,whenitdrops.com###sponsors\nsanjose.com###sponsors-module\nund.com###sponsors-story-wrap\nund.com###sponsors-wrap\ntechie-buzz.com###sponsors2\nnetchunks.com###sponsorsM\nfeedly.com###sponsorsModule_part\nclubwebsite.co.uk###sponsors_bottom\nwrc.com###sponsorsbtm\nibtimes.com,npr.org,pbs.org###sponsorship\nbackstage.com###sponsorsmod\ncnet.com###spotBidHeader\ncnet.com###spotbid\nmangafox.me###spotlight\nmemory-alpha.org###spotlight_footer\njustdubs.tv###spots\nqj.net###sqspan\nzam.com###square-box\nallakhazam.com###square-box:first-child\ncomicbookmovie.com###squareATF\nnewsonjapan.com###squarebanner300x250\nrent.ie###sresult_banner\nrealestate.yahoo.com###srp-ysm\ngifts.com###srp_sl\nfun.familyeducation.com,genealogy.familyeducation.com,infoplease.com###ssky\nsaharareporters.com###stage-header\nbusinessdictionary.com###standalone_text\nmilb.com###standard_banner\ncucirca.eu###stanga\nalternativeto.net###startpage-right\ncapitalfm.com.my###stationbannersliderwrapper\nrally24.com###stickedPanel\ngizchina.com###sticky-anchor\ngizchina.com###sticky-anchor-right\npropakistani.pk###sticky_banner2\nncregister.com###sticky_box\nretronintendogames.com###sticky_footer\nstltoday.com###stl-below-content-02\ndailypuppy.com###stop_puppy_mills\nsomeecards.com###store\nmarketwatch.com###story-premiumbanner\ndailyherald.com###storyMore\ncbc.ca###storymiddle\ninstyle.co.uk###style_it_light_ad\npraag.org###sub-header\ndiscovermagazine.com###sub-portlet\nwjunction.com###subBar\nubergizmo.com###sub_footer\nusmagazine.com###sub_form_popup\nmayoclinic.com###subbox\nmsn.com,theatlantic.com###subform\ndallasvoice.com,dealerscope.com,gamegrep.com,winamp.com###subheader\nfoodandwine.com###subscModule\nmacworld.com,pcworld.com###subscribeForm\nvg247.com###subuffer\nhollywire.com###super-header\nchicagomag.com###super-leaderboard-wrapper\ndetroitnews.com###super-widget\ndisney.go.com###superBanner\nwondertime.go.com###superBannerContainer\nugo.com###superMast\nv3.co.uk###superSky\nsevenload.com###superbaannerContainer\ncanoe.ca,free-css.com,wral.com###superbanner\ndzone.com###superboard\nshacknews.com###superleader\nnews.com.au###superskin\ntotalfilm.com###supersky_container\nmediaite.com###supertop\ndashnet.org###support\nmarketplace.org###support_block_side\nmacnn.com###supportbod\nmarketwatch.com###supposedlytemporaryad\nmail.yahoo.com###swPane\nedmunds.com###sway-banner\nepicurious.com###sweepstakes\npicp2.com###system\nunlockboot.com###t-banner\nmma-core.com###ta_pnlAd\nlivescore.in###tab-bonus-offers\nflashscore.com,livescore.in###tab-odds\nipmart-forum.com###table1\ndropvideo.com###table1[width=\"100%\"][height=\"100%\"][border=\"0\"]\nsaynoto0870.com###table2[bordercolor=\"#000000\"]\nmacupdate.com###table_bot_l\nfulldls.com###table_filter + .torrent_table\natdhe.eu###table_linky:last-child > thead:first-child\ntorrentzap.com###table_self\nmovie2k.tl###tablemoviesindex > tbody:first-child:last-child > tr:last-child\nmovie4k.to###tablemoviesindex:last-child > tbody:first-child:last-child > tr:last-child\nrgj.com###taboola-column-c-new-google\ncrystalmedianetworks.com###tabs_banner\nshorpy.com###tad\nbediddle.com###tads\ngoogle.com###tadsc\najaxian.com###taeheader\nanilinkz.tv###tago\nesquire.com,meetme.com,muscleandfitness.com,techvideo.tv###takeover\ntechvideo.tv###takeover-spazio\nnme.com###takeover_head\nnme.com###takeover_left\nchannel5.com###takeover_link\nnme.com###takeover_right\nbroadbandgenie.co.uk,thesun.co.uk###takeoverleft\nbroadbandgenie.co.uk,thesun.co.uk###takeoverright\nboardgamegeek.com###tanga\ntaste.com.au###taste-right-banner\nrunescape.com###tb\nmanchesterconfidential.co.uk###tb_bnr\nbaltictimes.com###tbt_system_note\nthesaurus.com###tcomad_728x90_0\nsaleminteractivemedia.com###td_leaderboard\nlistenlive.co###td_leaderboard_wrapper\nnews.aol.co.uk###tdiv60\naol.co.uk###tdiv71\nnews.aol.co.uk###tdiv74\nindependent.co.uk###tertiaryColumn > .slider\ndiablo3builds.com,financialsurvivalnetwork.com,popbytes.com###text-10\ngeeky-gadgets.com###text-105335641\nnewsfirst.lk###text-106\ncouponistaqueen.com,dispatchlive.co.za###text-11\ncallingallgeeks.org,cathnews.co.nz,myx.tv,omgubuntu.co.uk###text-12\ncleantechnica.com###text-121\nairlinereporter.com,myx.tv,omgubuntu.co.uk,radiosurvivor.com,wphostingdiscount.com###text-13\ndispatchlive.co.za,krebsonsecurity.com,myx.tv,omgubuntu.co.uk,planetinsane.com###text-14\nrazorianfly.com###text-155\ngizchina.com,thesurvivalistblog.net###text-16\nenglishrussia.com,thechive.com###text-17\ndelimiter.com.au###text-170\nnetchunks.com,planetinsane.com,radiosurvivor.com,sitetrail.com,thechive.com###text-18\ndelimiter.com.au###text-180\ndelimiter.com.au###text-189\ncollective-evolution.com,popbytes.com,thechive.com###text-19\ndelimiter.com.au###text-192\ndelimiter.com.au###text-195\nbusinessdayonline.com,callingallgeeks.org,financialsurvivalnetwork.com###text-21\nairlinereporter.com,callingallgeeks.org,gizchina.com,omgubuntu.co.uk,queenstribune.com###text-22\nomgubuntu.co.uk,queenstribune.com###text-23\nqueenstribune.com###text-24\nnetchunks.com###text-25\n2smsupernetwork.com,pzfeed.com,queenstribune.com###text-26\n2smsupernetwork.com,sonyalpharumors.com###text-28\nbeijingcream.com###text-29\n2smsupernetwork.com,airlinereporter.com,buddyhead.com,mbworld.org,zambiareports.com###text-3\nsonyalpharumors.com###text-31\ntechhamlet.com###text-32\ncouponistaqueen.com,pzfeed.com###text-35\ncouponistaqueen.com###text-38\npzfeed.com###text-39\nbudapesttimes.hu,buddyhead.com,dieselcaronline.co.uk,knowelty.com,myonlinesecurity.co.uk,myx.tv,sportsillustrated.co.za,theairportnews.com,thewhir.com###text-4\ncouponistaqueen.com###text-40\nenpundit.com###text-41\npluggd.in###text-416180296\npluggd.in###text-416180300\nbigblueball.com###text-416290631\neurweb.com###text-42\ndefensereview.com###text-460130970\nthebizzare.com###text-461006011\nthebizzare.com###text-461006012\nspincricket.com###text-462834151\nenpundit.com###text-48\npencurimovie.cc###text-49\nmyx.tv,washingtonindependent.com###text-5\n2smsupernetwork.com,rawstory.com###text-50\nquickonlinetips.com###text-57\n2smsupernetwork.com,couponistaqueen.com,englishrussia.com,mynokiablog.com,myx.tv,pakladies.com,times.co.zm,trendafrica.co.za,washingtonindependent.com###text-6\nbuddyhead.com,defsounds.com,knowelty.com,prosnookerblog.com,technomag.co.zw###text-7\nconsortiumnews.com,couponistaqueen.com,michiganmessenger.com,newsday.co.zw,technomag.co.zw###text-8\nmynokiablog.com###text-9\ntorontolife.com###text-links\nwashingtonpost.com###textlinkWrapper\nthe217.com###textpromo\nteamandroid.com###tf_header\nteamandroid.com###tf_sidebar_above\nteamandroid.com###tf_sidebar_below\nteamandroid.com###tf_sidebar_skyscraper1\nteamandroid.com###tf_sidebar_skyscraper2\nnotebookreview.com###tg-reg-ad\nmail.yahoo.com###tgtMNW\ngirlsaskguys.com###thad\nthatscricket.com###thatscricket_google_ad\nyahoo.com###theMNWAd\nrivals.com###thecontainer\nduoh.com###thedeck\nthekit.ca###thekitadblock\nthonline.com###thheaderadcontainer\ntheberry.com,thechive.com###third-box\nvideobam.com###this-pays-for-bandwidth-container\nticketmaster.com###thisSpon\nlyricsfreak.com###ticketcity\nyahoo.com###tiles-container > #row-2[style=\"height: 389.613px; padding-bottom: 10px;\"]\nrte.ie###tilesHolder\ndistro.megom.tv###timeNumer\ntinypaste.com###tinychat_lightbox\ntinypaste.com###tinychat_overlay\nyourweather.co.uk###titulo\nmyspace.com###tkn_leaderboard\nmyspace.com###tkn_medrec\nplacehold.it###tla\nfileinfo.com###tlbspace\ntimeoutabudhabi.com,timeoutbahrain.com,timeoutdoha.com,timeoutdubai.com###tleaderb\nthelifefiles.com###tlfAdInBetween300x250\nimdb.com###tn15adrhs\ntechnewsworld.com###tnavad\nomgubuntu.co.uk###to-top\nchattanooganow.com###toDoWrap\nmegavideoshows.com###toHide\ntoonix.com###toonix-adleaderboard\niconeye.com,phonescoop.com,politics.co.uk,reference.com,thesaurus.com,topcultured.com###top\njillianmichaels.com,synonym.com###top-300\nxxlmag.com###top-728x90\ntechiemania.com###top-729-banner\nfreemake.com###top-advertising\nchip.eu,corkindependent.com,dancehallreggae.com,ebuddy.com,foodlovers.co.nz,galwayindependent.com,inthenews.co.uk,investorplace.com,itweb.co.za,lyrics19.com,maclife.com,maximumpc.com,politics.co.uk,scoop.co.nz,skift.com,techi.com,thedailymash.co.uk,thespiritsbusiness.com,timesofisrael.com,tweaktown.com###top-banner\nscoop.co.nz###top-banner-base\ntheberrics.com###top-banner-container\nkrebsonsecurity.com###top-banner-image\nkrebsonsecurity.com###top-banner-img\nprivatehealth.co.uk###top-banner-outer\nautotrader.ie,carzone.ie###top-banner-placeholder\nif-not-true-then-false.com###top-banner-wrapper\npanorama.am###top-banners\nmissingremote.com,timesofisrael.com###top-bar\nwfgo.net,wtso.tv###top-bn\nteesoft.info###top-bottom\nwhowhatwear.com###top-container\njacksonville.com###top-header\naspensojourner.com###top-layer\ncanstar.com.au###top-lb\njoystiq.com###top-leader\ncantbeunseen.com,chairmanlol.com,diyfail.com,explainthisimage.com,fayobserver.com,funnyexam.com,funnytipjars.com,gamejolt.com,iamdisappoint.com,japanisweird.com,morefailat11.com,objectiface.com,passedoutphotos.com,perfectlytimedphotos.com,roulettereactions.com,searchenginesuggestions.com,shitbrix.com,sparesomelol.com,spoiledphotos.com,stopdroplol.com,tattoofailure.com,yodawgpics.com,yoimaletyoufinish.com###top-leaderboard\nsmarterfox.com###top-left-banner\nsportinglife.com###top-links\npolitiken.dk###top-monster\ndubizzle.com###top-mpu\ncanstar.com.au###top-mrec\novationtv.com###top-promo\ninman.com###top-pusher\nimassera.com,thebestdesigns.com###top-sponsor\nsuntimes.com###top1\nmeteovista.co.uk###top10\ngamingzion.com###top10c\nmoviecarpet.com###top728\ninvestmentnews.com###topAdBlock\namericanscientist.org,auctiva.com,cartoonnetwork.co.nz,cartoonnetwork.com.au,cartoonnetworkasia.com,eweek.com,filesfrog.com,freecsstemplates.org,geeksailor.com,gizgag.com,highestfive.com,nerve.com,nzherald.co.nz,plosbiology.org,port2port.com,quotesdaddy.com,sciencemag.org,tastemag.co.za###topBanner\ncntraveler.com###topBanner728x90_frame\ndanpatrick.com,microsoft-watch.com###topBannerContainer\nmacworld.co.uk###topBannerSpot\nmoney.co.uk###topBar\newn.co.za###topCoke\natlasobscura.com###topContainer\nkioskea.net###topContent\ncnet.com###topDownloads\npopularscreensavers.com###topFooter\nscoop.co.nz###topHeader\nchacha.com###topHeaderBannerWrap\nthecitizen.co.tz###topLeaderBoard\ndigitalartsonline.co.uk,pcadvisor.co.uk###topLeaderContainer\ndonedeal.ie,kenyamoja.com,metrotimes.com,orlandoweekly.com,sacurrent.com,startribune.com,wjla.com###topLeaderboard\nkenyamoja.com###topLeaderboard + * + .container-bot\nautotrader.co.uk,fixya.com,topmarques.co.uk###topLeaderboardContainer\nchamberofcommerce.com###topLeaderboardParent\nteoma.com###topPaidList\ntopsite.com###topRightBunner\nprevention.com###topThirdPartyArea\nrockyou.com###topXpromoWrapper\nhardballtalk.nbcsports.com###top_90h\ntheepochtimes.com###top_a_0d\nytmnd.com###top_ayd\nboxoffice.com,computing.net,disc-tools.com,goldentalk.com,guyspeed.com,hemmings.com,imagebam.com,magme.com,moono.com,phonearena.com,popcrush.com,sportsclimax.com,techradar.com,tidbits.com,venturebeatprofiles.com,webappers.com###top_banner\ncaribpress.com###top_banner_container\ntheimproper.com###top_banner_widget\nmotorship.com###top_banners\navaxsearch.com###top_block\npsdeluxe.com###top_bsa\nhemmings.com###top_dc_tbl\nbnd.com###top_jobs_footer\ncentredaily.com###top_jobs_search\nbakersfield.com,bakersfieldcalifornian.com,dailypuppy.com,jamaicaobserver.com,proudfm.com,rushlimbaugh.com###top_leaderboard\ncolumbiatribune.com###top_leaderboard_pos\ncomputerworld.com###top_leaderboard_wrapper\nbabylon.com,search.chatzum.com,searchsafer.com###top_links\nninemsn.com.au###top_promo_ie8\nsmosh.com###top_promo_wrapper\nelectricenergyonline.com,fotolog.com###top_pub\nmma-core.com###top_r_bans\nimdb.com###top_rhs_1_wrapper\nimdb.com###top_rhs_wrapper\ngetlyrics.com###top_right\nescapistmagazine.com###top_site_part\nhumanevents.com###top_skyscraperbox\ncellular-news.com###top_sq_block\nsamoaobserver.ws###top_wrap1\narthritistoday.org###topads\nbtimes.com.my###topadv\nscorespro.com###topban\nabsolutelyrics.com,artima.com,bbyellow.com,bsyellow.com,businessdirectory.mu,businesslist.ae,businesslist.co.cm,businesslist.co.ke,businesslist.co.ug,businesslist.com.bd,businesslist.com.ng,businesslist.hk,businesslist.my,businesslist.net.nz,businesslist.ph,businesslist.pk,businesslist.sg,businesslist.tw,businesslist.vn,caymanyellow.com,checkoutmyink.com,chictopia.com,chileindex.com,colombiayp.com,dominicanyp.com,dumpalink.com,egypyp.com,ethiopiadirectory.com,exiledonline.com,findtheword.info,georgiayp.com,ghanayp.com,hiphongkong.com,icenews.is,indonesiayp.com,jmyellow.com,jpyellow.com,lebyp.com,lesothoyp.com,localbotswana.com,malawiyp.com,medicaldaily.com,moroccoyp.com,myanmaryp.com,namibiayp.com,nation.lk,onlinebusinesslist.co.za,plosone.org,puertoricoindex.com,qataryp.com,realitywanted.com,rwandayp.com,saudianyp.com,senegalyp.com,sierraexpressmedia.com,snapfiles.com,sudanyp.com,tanzaniayp.com,tcmagazine.com,tcmagazine.info,thaigreenpages.com,thedigitalfix.com,thehill.com,thevarguy.com,tntyellow.com,tremolo.edgesuite.net,tunisiayp.com,turkishyp.com,venezuelayp.com,vocm.com,webattack.com,wenn.com,workswithu.com,wzmetv.com,xbox360rally.com,yemenyp.com,zambiayp.com,zimbabweyp.com,zipinfo.in###topbanner\ndrugs.com###topbannerWrap\ncheckoutmyink.com###topbanner_div\nchictopia.com###topbanner_pushdown\nlittlegreenfootballs.com###topbannerdiv\nsnapfiles.com###topbannermain\neatsleepsport.com,soccerphile.com,torrentpond.com###topbanners\nswedishwire.com###topbannerspace\nilix.in,newtechie.com,postadsnow.com,songspk.link,songspk.name,textmechanic.com,thebrowser.com,tota2.com###topbar\nnewsbusters.org###topbox\nthecrims.com###topbox_content\neducatorstechnology.com###topcontentwrap\nbhg.com###topcover\nfootball411.com###topheader\ntvembed.eu###toplayerblack\nusingenglish.com###topleader\njoystiq.com,luxist.com,massively.com,switched.com,wow.com###topleader-wrap\nbannedinhollywood.com,eventhubs.com,shopcrazy.com.ph###topleaderboard\ncelebitchy.com###topline\nmicrocosmgames.com###toppartner\nmacupdate.com###topprommask\nworldtimebuddy.com###toprek\ntbo.com###topslider\nplos.org###topslot\nthespacereporter.com###topster\ncodingforums.com###toptextlinks\ninquisitr.com###topx2\ndinozap.tv,hdcastream.com,hdmytv.com###total\ndinozap.tv,hdmytv.com###total_banner\npgatour.com###tourPlayer300x250BioAd\nvimeo.com###tout_rotater\npcworld.com###touts.module\ngarfield.com###tower\nelectricenergyonline.com###tower_pub\nphonescoop.com###towerlinks\noncars.com###towers\nunder30ceo.com###tptopbar\ntechnologyreview.com###tr35advert\nindowebster.com###tr_iklanbaris2\nmarketwatch.com###tradingcenter\ntelegraph.co.uk###trafficDrivers\nmapquest.com###trafficSponsor\nchannelregister.co.uk###trailer\ngenevalunch.com###transportation\ndallasnews.com###traveldeals\npeople.com###treatYourself\nbitcoin.cz###trezor\nmiroamer.com###tribalFusionContainer\nsitepoint.com###triggered-cta-box-wrapper\nwigflip.com###ts-newsletter\nforums.techguy.org###tsg-dfp-300x250\nforums.techguy.org###tsg-dfp-between-posts\ntsn.ca###tsnHeaderAd\ntsn.ca###tsnSuperHeader\nmacworld.com,pcworld.com,techhive.com###tso\npcmag.com###tswidget\nteletoon.com###tt_Sky\ntumblr.com###tumblr_radar.premium\ntvlistings.theguardian.com###tvgAdvert\ntvsquad.com###tvsquad_topBanner\nweather.com###twc-partner-spot\ntwit.tv###twit-ad-medium-rectangle\nimageporter.com,imgspice.com###txtcht\nhowtogetridofstuff.com###tz_rwords\ndirect-download.org###u539880\ncareerbuilder.com###uJobResultsAdTopRight2_mxsLogoAds__ctl0_CBHyperlink1\nyahoo.com###u_2588582-p\nkuklaskorner.com###ultimate\ntheaa.com###unanimis1\nsnagajob.com###underLeftSponsor\nworldwideweirdnews.com###underarticle\njumptogames.com###underrandom\npcworld.com,teesoft.info###uniblue\nreminderfox.org###uniblueImg\ngeekosystem.com###unit-area\ngossipcop.com,mediaite.com,themarysue.com###unit-footer\nstyleite.com,thebraiser.com###unit-header\nsportsgrid.com###unit-sidebar\nthebraiser.com###unit-sidebar-atf\nstyleite.com,thebraiser.com###unit-sidebar-btf\nintothegloss.com###unit250\nintothegloss.com###unit600\nnotebook-driver.com###updatemydrivers\ncarionltd.com###upmapads\nbyutvsports.com###upper-poster\ncomingsoon.net###upperPub\nusanetwork.com###usa_desktop\ndownloadhelper.net###useful-tools\ntorrentpond.com###usenet-container\nfulldls.com###usenetb\npopcap.com###vacquest_overlay\npopcap.com###vacquest_window\narmyrecognition.com###vali2\nhipforums.com###vbp_banner_82\nhipforums.com###vbp_banner_foot\nhipforums.com###vbp_banner_head\nlistentoyoutube.com###vc_top_ad\nfilespart.com###vdwd30\ntv.com###vendor_spotlight\npopeater.com###verizonPromo\ntemptalia.com###vert-boxes\nchud.com###vertical.ad\nstandard.co.uk###viagogo-all-events\ntheedge.co.nz###vidBanner\ncnbc.com###vidRightRailWrapper\nibrod.tv###video\ncricket.yahoo.com###video-branding\nmentalfloss.com###video-div-polo\nyoutube.com###video-masthead\ncartoonnetworkasia.com###videoClip-main-right-ad300Wrapper-ad300\nradaronline.com###videoExternalBanner\nvideo.aol.com###videoHatAd\nradaronline.com###videoSkyscraper\ntechradar.com###viewBestDealsWrapper\neuropages.co.uk###vipBox\ngumtree.sg###vip_all_r1_300x250\ngumtree.sg###vip_all_r2_300x60\ngumtree.sg###vip_all_r3_300x60\nmiami.com###visit\nnews24.com###vitabox-widget\nanimeflv.net,tubeplus.me###vlc\nepisodeninja.com,pspmaniaonline.com###vnealveaijvanef\neatingwell.com###vs4-tags\nsearch.mywebsearch.com###vsaTop + div[id]\nsearch.mywebsearch.com###vsaTop + div[id] + div[id]\nnickjr.com###vsw-container-wrapper\nnickjr.com###vsw-medium-outter\nnickjr.com###vsw-small-outter\nskysports.com###w10-banner\nvariety.com###w300x250\nweatherbug.co.uk###wXcds2\nweatherbug.co.uk###wXcds4\ninquirer.net###wall_addmargin_left\nedmunds.com###wallpaper\ninformation-age.com###wallpaper-surround-outer\neeweb.com###wallpaper_image\nthepressnews.co.uk###want-to-advertise\nnowtorrents.com###warn_tab\nyoutube.com###watch-branded-actions\nyoutube.com###watch-buy-urls\nyoutube.com###watch-channel-brand-div\nnytimes.com###watchItButtonModule\nthefreedictionary.com###wb1\nmurga-linux.com###wb_Image1\nsheridanmedia.com###weather-sponsor\nwkrq.com###weather_traffic_sponser\nkentonline.co.uk###weathersponsorlogo\nnzdating.com###webadsskydest\ncinewsnow.com###week-catfish\nmercurynews.com,santacruzsentinel.com###weeklybar2\nlinuxinsider.com###welcome-box\nmainstreet.com###welcomeOverlay\nphoronix.com###welcome_screen\nbellinghamherald.com,bradenton.com,carynews.com,centredaily.com,claytonnewsstar.com,fresnobee.com,heraldonline.com,idahostatesman.com,islandpacket.com,kentucky.com,lakewyliepilot.com,ledger-enquirer.com,lsjournal.com,macon.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sanluisobispo.com,star-telegram.com,sunherald.com,thenewstribune.com,theolympian.com,thestate.com,tri-cityherald.com###wgt_dealsave_standalone\ntheatlantic.com###whatreadingad\nsharkyforums.com,smallbusinesscomputing.com###whitePaperIFrame\ndevshed.com,eweek.com###whitebox\ndomaintools.com###whois-related-forsale\nspectrum.ieee.org###whtpprs\nubi.com###wide-promo\nforexpros.com,investing.com###wideBanner\ninquirer.net###wideSidebar > .widget\ngomapper.com,politics.co.uk###wideSkyScraper\nlinguee.com###wide_banner_right\ncoupons.com###widesky-banner\ngigaom.com###widget-area-footer-post-2\nhowwemadeitinafrica.com###widget-r\nstltoday.com###widget-todays-deal\ntechnabob.com###widgetTable\npcweenies.com###widgetTable[width=\"170\"][bgcolor=\"#FFFFFF\"]\nvikitech.com###widget_A\neevblog.com###widget_linkmasterpro_ri-2\nfilesharingtalk.com###widgetlist_column1 > li:first-child + li + li:last-child > .cms_widget\ntalksport.com###williamarticlelink\nsearch.pch.com###winner-list\nthaindian.com###withinsimilar\nstaugustine.com###wl-wrapper-leaderboard\nstaugustine.com###wl-wrapper-tier-4\npr0gramm.com###wm\nwallpapersmania.com###wm_cpa\nrediff.com###world_right1\nrediff.com###world_top\nfansfc.com###worldcupspl_container_left\nasiansoundradio.com###wowslider-container2\nasiansoundradio.com###wowslider-container3\nbittorrent.com###wpcom_below_post\nwashingtonpost.com###wpni_adi_leaderboard\nlinksave.in###wrap > #menue + #menuelinks\nlinksave.in###wrap > #menue:first-child\ndocumentary.net###wrapper > #horizontal-outer-widgets-1\nstrategyinformer.com###wrapper3\neuractiv.com###wrapperHeader\nreference.com,thesaurus.com###wrapserp\nsootoday.com###wwSponsor\npost-trib.com###wwbncontainer\n9news.com###wx-widget-88x31\ndavidwalsh.name###x-secondary\nrobtex.com###xadt0\nrobtex.com###xadt1\nforum.xda-developers.com###xda_header_announce_title\nmaxthon.com###xds\ncnet.com###xfp_adspace\nrobtex.com###xnad728\nvrbo.com###xtad\nabconline.xyz###xydllc\nople.xyz###xydlleft\nabconline.xyz###xydlrc\nople.xyz###xydlright\nfancystreems.com,sharedir.com###y\nyahoo.com###y708-ad-lrec1\nyahoo.com###y708-sponmid\nau.yahoo.com###y708-windowshade\nyahoo.com###y_provider_promo\nyahoo.com###ya-center-rail > [id^=\"ya-q-\"][id$=\"-textads\"]\nanswers.yahoo.com###ya-darla-LDRB\nanswers.yahoo.com###ya-darla-LREC\nanswers.yahoo.com###ya-qpage-textads\nvipboxsports.eu,vipboxsports.me,viplivebox.eu,viponlinesports.eu###ya_layer\nsevenload.com###yahoo-container\nmissoulian.com###yahoo-contentmatch\nindependent.co.uk###yahooLinks\nyahoo.com###yahooPN_CM\nyellowpages.com###yahoo_ss_border\nyahoo.com###yahoovideo_ysmlinks\nautos.yahoo.com###yatadfin\nautos.yahoo.com###yatadfinbd\nautos.yahoo.com###yatadlrec\nautos.yahoo.com###yatadoem\nautos.yahoo.com###yatadoembd\nuproxx.com###yb-banner\nmacintouch.com###yellows\nfinance.yahoo.com###yfi_ad_FB2\nfinance.yahoo.com###yfi_ad_cl\nyahoo.com###yfi_pf_ysm\nyahoo.com###yfi_ysm\nyahoo.com###ygmapromo\nyahoo.com###yh-ysm\nyahoo.com###yl_pf_ysm\nyahoo.com###ylf-ysm\nshine.yahoo.com###ylf-ysm-side\nlocal.yahoo.com###yls-dt-ysm\nmaps.yahoo.com###ymap_main_footer\nyahoo.com###ymh-invitational-recs\nyahoo.com###yn-darla2\nyahoo.com###yn-gmy-promo-answers\nyahoo.com###yn-gmy-promo-groups\ntrackthepack.com###yoggrt\nwfaa.com###yollarSwap\nafmradio.co.za###yourSliderId\nsearch.yahoo.com###ysch #doc #bd #results #cols #left #main .ads\nsearch.yahoo.com###ysch #doc #bd #results #cols #left #main .ads .left-ad\nsearch.yahoo.com###ysch #doc #bd #results #cols #left #main .ads .more-sponsors\nsearch.yahoo.com###ysch #doc #bd #results #cols #left #main .ads .spns\nsearch.yahoo.com###ysch #doc #bd #results #cols #right #east .ads\nyahoo.com###yschsec\nfancystreems.com,onlinemoviesgold.com,sharedir.com,stream2watch.com###yst1\ntravel.yahoo.com###ytrv-ysm-hotels\ntravel.yahoo.com###ytrv-ysm-north\ntravel.yahoo.com###ytrv-ysm-south\ntravel.yahoo.com,travel.yahoo.net###ytrvtrt\nwebmastertalkforums.com###yui-gen24[style=\"width: 100%; height: 100px !important;\"]\nzynga.com###zap-bac-iframe\nbloomberg.com,post-gazette.com###zillow\npost-trib.com###zip2save_link_widget\nmoreintelligentlife.com###zone-header\nhendersondispatch.com,heraldsun.com,hpe.com###zone-leaderboard\nitalymagazine.com###zone-user-wrapper\nkovideo.net###zone0_top_banner_container\nhulkshare.com,rockyou.com###zone1\nhulkshare.com###zone2\nluxury-insider.com###zone_728x90\nasfile.com###zone_bottom\nasfile.com###zone_top\ntheonion.com###zoosk\npopcap.com###zrJungle1033_overlay\npopcap.com###zrJungle1033_window\nbing.com###zune_upsell\nteamfortress.tv###zuside\nteamfortress.tv###zutop\nfacebook.com##.-cx-PRIVATE-fbAdUnit__root\nfacebook.com##.-cx-PRIVATE-fbEmu__root\nfacebook.com##.-cx-PRIVATE-fbFacebarTypeaheadToken__sponsored\nfacebook.com##.-cx-PRIVATE-snowliftAds__root\nfacebook.com##.-cx-PRIVATE-spyml__story\nfacebook.com##.-cx-PUBLIC-fbAdUnit__root\nskysports.com##.-skybet-widget\ninvestopedia.com##.A1\nrealtor.com##.ADLB\nshoppinglifestyle.com##.ADV\nbendsource.com,bestofneworleans.com,bigskypress.com,cltampa.com,csindy.com,laweekly.com,realdetroitweekly.com,sevendaysvt.com,similarsites.com,styleweekly.com,tucsonweekly.com##.Ad\nfootballitaliano.co.uk##.Ad1\nfilmsnmovies.com,redbalcony.com##.AdContainer\nverizon.com##.AdIn\nincyprus.com.cy##.Add1st\noncars.in##.Adv\ncolouredgames.com##.AdvGamesList\nirna.ir,journalofaccountancy.com,newvision.co.ug##.Advertisement\neuropeantour.com,yedda.com##.Advertising\nhongkiat.com##.BAds\nterradaily.com##.BDTX\nhotklix.com##.BLK300\nhighstakesdb.com##.Banner\nacharts.us##.BannerConsole\nmixedmartialarts.com##.BannerRightCol\nnatgeotv.com##.BannerTop\ntruck1.eu,webresourcesdepot.com##.Banners\nstockopedia.co.uk##.BigSquare\njuxtapoz.com##.Billboard\nmustakbil.com##.Bottom728x90BannerHolder\nhot1045.net##.BottomBannerTD\ndailytech.com##.BottomMarquee\nfreeiconsweb.com##.Bottom_Banner\nmyps3.com.au##.Boxer[style=\"height: 250px;\"]\nmyrealgames.com##.CAdFlashPageTop728x90\nmyrealgames.com##.CAdGamelist160x600\nmyrealgames.com##.CAdOpenSpace336x280\nmyrealgames.com##.CAdOpenSpace728x90\nmyrealgames.com##.CCommonBlockGreen[style=\"width: 630px;\"]\nthebull.com.au##.Caja_Der\nclashdaily.com##.ClashDaily_728x90_Single_Top\nljworld.com,newsherald.com##.DD-Widget\narchdaily.com##.DFP-banner\nforbes.com##.DL-ad-module\nhealthzone.pk##.DataTDDefault[width=\"160\"][height=\"600\"]\nisraeltoday.co.il##.DnnModule-1143\nsecdigitalnetwork.com##.DnnModule-6542\nsecdigitalnetwork.com##.DnnModule-6547\nisraeltoday.co.il##.DnnModule-758\nisraeltoday.co.il##.DnnModule-759\ndiet.com##.Fine\nmainjustice.com##.FirstHeader\nsimilarsites.com,topsite.com##.FooterBanner\n969therock.com,993thevibe.com,wfls.com##.Footer_A_Column\nartistdaily.com##.FreemiumContent\npopmatters.com##.FrontPageBottom728\ngoogle.co.uk##.GBTLFYRDM0\ngoogle.com##.GC3LC41DERB + div[style=\"position: relative; height: 170px;\"]\ngoogle.com##.GGQPGYLCD5\ngoogle.com##.GGQPGYLCMCB\ngoogle.com##.GISRH3UDHB\norkut.com##.GLPKSKCL\nfree-games.net##.GamePlayleaderboardholder\nbloemfonteincourant.co.za##.HPHalfBanner\nu.tv##.Header-Menu-Sponsor\nwalmart.com##.IABHeader\nsafehaven.com##.IAB_fullbanner\nsafehaven.com##.IAB_fullbanner_header\nsierraexpressmedia.com##.IBA\ninc.com##.IMU-Container\nfootytube.com##.InSkinHide\nsmartearningsecrets.com##.Intercept-1\nislamicfinder.org##.IslamicData[bgcolor=\"#FFFFFF\"][bordercolor=\"#ECF3F9\"]\nbloemfonteincourant.co.za,ofm.co.za,peoplemagazine.co.za##.LeaderBoard\nmorningstar.com##.LeaderWrap\nagrieco.net,fjcruiserforums.com,mlive.com,newsorganizer.com,oxygenmag.com,urgames.com##.Leaderboard\nop.gg##.LifeOwner\nmyabc50.com,whptv.com,woai.com##.LinksWeLike\nanimenova.tv,animetoon.tv,gogoanime.com,goodanime.eu,gooddrama.net,toonget.com##.MClose\ntimeout.com##.MD_textLinks01\nmangahere.co##.MHShuffleAd\nhsj.org##.ML_L1_ArticleAds\nmstar.com##.MPFBannerWrapper\nexpressandstar.com,juicefm.com,planetrock.com,pulse1.co.uk,pulse2.co.uk,shropshirestar.com,signal1.co.uk,signal2.co.uk,sportal.co.nz,sportal.com.au,swanseasound.co.uk,thewave.co.uk,three.fm,wave965.com,wirefm.com,wishfm.net##.MPU\nfoxafrica.com##.MPU300\nfoxafrica.com,foxcrimeafrica.com,fxafrica.tv##.MPU336\nthree.fm##.MPURight\ndubaieye1038.com##.MPU_box\ndubai92.com,virginradiodubai.com##.MPU_box-innerpage\nvirginradiodubai.com##.MPU_box_bottom\nthepittsburghchannel.com##.MS\nsearch.aol.com##.MSL + script + script + div[class] > style + script + h3[class]\nvideowing.me##.MadDivtuzrfk\nvideowing.me##.MadDivtuzrjt\nthebull.com.au##.Maquetas\njuxtapoz.com##.MarketPlace\nfarmersweekly.co.za##.MasterLeaderboard\ntotaltele.com##.Master_LargeMPU\nagrieco.net##.MedRect\nbloemfonteincourant.co.za,ofm.co.za##.MediumRectangle\niwsearch.net##.Mid-Top\nalienbomb.com##.Middle468x60\nmustakbil.com##.Middle728x90BannerHolder\nworldtribune.com##.NavMenu\n4shared.com##.Nbanner\ntribe.net##.OAS\nnytimes.com##.OB_AR_1\nartistdaily.com##.OFIEContent\nsofeminine.co.uk##.OffresSpe_cadre\nmajorgeeks.com##.Outlines\nthefreedictionary.com##.Ov\nstarsue.net##.OyunReklam\nwebgurubb.com##.PCN-banner-zone\nsearch.aol.co.uk,search.aol.com##.PMB\ndiamscity.com##.PUB_72890_TOP\nagonybooth.com##.PWAd\ntwogag.com##.PWhalf\ngmx.co.uk##.PanelPartners\npopstoptv.com##.PeerFly_Banners\npriceme.co.nz##.ProductAdr\ni4u.com##.Promo\npeoplemagazine.co.za##.R300x250\npeoplemagazine.co.za##.R300x600\nhuffingtonpost.com,search.aol.com##.RHRSLL\nsearch.aol.com##.RHRSLLwseboF\nbitcandy.com##.RR_adv\nehow.com##.RadLinks\njapantimes.co.jp##.RealEstateAdBlock\nalgoafm.co.za##.RightBanner1\nalgoafm.co.za##.RightBanner2\nalgoafm.co.za##.RightBanner3\nalgoafm.co.za##.RightBanner4\ncamfuze.com##.RightBannerSpot\nb105.com##.RotatingPromo_300x80\nebay.co.uk,ebay.com.au##.RtmStyle\naolsearch.com,search.aol.ca,search.aol.co.uk,search.aol.com,search.aol.in,wow.com##.SLL\nsearch.aol.com##.SLLwseboF\nlifespy.com##.SRR\ntheeagle.com##.SectionRightRail300x600Box\nmemory-alpha.org,wikia.com##.SelfServeUrl\nsimilarsites.com##.SidebarBanner\nadobe.com##.SiteFooterRow[style=\"font-size:9px;font-family:Arial\"]\nmyspace.com##.SitesMedRecModule\npdfzone.com##.Skyscraper_BG\njapantimes.co.jp##.SmallBanner\ncar.com##.SmallFont\nmdlinx.com##.Sponsor-Tag\nhotscripts.com##.Sponsored\nmining.com##.SponsoredPost\nfutureclaw.com##.Sponsors\nzone.msn.com##.SuperBannerTVMain\nshopping.canoe.ca##.SuperBoxDetails\ntestcountry.com##.TC_advertisement\nyahoo.com.au##.TL_genericads_columns\nyahoo.com.au##.TL_medRec_container\ngeekzone.co.nz##.TPconfmed1x4outer\nistockanalyst.com##.TelerikModalOverlay\nadobe.com##.TextSmall[align=\"center\"][style=\"font-size:9px;font-family:Arial\"]\nalgoafm.co.za,hurriyetdailynews.com,ocweekly.com##.TopBanner\nhurriyetdailynews.com##.TopNews\ntheday.com##.TopNewsSponsor\ntorrentbar.com##.Tr2[width=\"41%\"]\njapantimes.co.jp##.UniversitySearchAdBlock\n1003thepoint.com,949thebay.com,radioeagleescanaba.com,radioeaglegaylord.com,radioeaglemarquette.com,radioeaglenewberry.com,radioeaglesoo.com,straitscountry953.com##.VGC_BANNER\nvh1.com##.VMNThemeSidebarWidget\nzone.msn.com##.VerticalBannerTV_tag\nbrowardpalmbeach.com,citypages.com,dallasobserver.com,houstonpress.com,laweekly.com,miaminewtimes.com,ocweekly.com,phoenixnewtimes.com,riverfronttimes.com,sfweekly.com,villagevoice.com,westword.com##.VoiceDealOfTheDayImage\nsearch.aol.ca,search.aol.co.uk,search.aol.com##.WOL\nsearch.aol.com##.WOL2\nwebreference.com##.WRy1\nwzzk.com##.Weather_Sponsor_Container\nbloemfonteincourant.co.za,ofm.co.za##.WideSkyscraper\nwired.com##.WiredWidgetsMarketing\nxbox.com##.XbcSponsorshipText\nrxlist.com##.Yahoo\nfacebook.com##._24n\nfacebook.com##._24o\njuxtapoz.com##._300x250\nfacebook.com##._3qj-\nfacebook.com##._4u8\nfilenuke.net,filmshowonline.net,fleon.me,hqvideo.cc,putlocker.ws,sharesix.net,skylo.me,streamme.cc,vidshare.ws##._ccctb\ncrawler.com##.a\nlawyersweekly.com.au##.a-center\nanime1.com,drama.net##.a-content\neplsite.com##.a-el\nkrebsonsecurity.com##.a-statement\ndaijiworld.com##.a2\nknowyourmeme.com##.a250x250\ncnet.com##.a2[style=\"padding-top: 20px;\"]\ngematsu.com,twitch.tv,twitchtv.com##.a300\nanimeid.com,makeagif.com##.a728\nlocaltiger.com##.a9gy_lt\nhereisthecity.com##.aLoaded\ntvnz.co.nz##.aPopup\nlegacy.com##.aa_Table\nmmorpg.com##.abiabnotice\nfour11.com##.abig\nk9safesearch.com##.ablk\nfour11.com##.ablock\nfour11.com##.ablock_leader\nfour11.com##.ablock_right\ntribalfootball.com##.above-footer-wrapper\nlikwidgames.com##.aboveSiteBanner\nurlfan.com##.abox\nfiledir.com##.abox300\nmsn.com,search.yahoo.com##.abs\nwhirlpool.net.au##.abvertibing_block\nthefreedictionary.com##.ac\ndailyrecord.co.uk##.ac-vehicle-search\nau.news.yahoo.com##.acc-moneyhound\ngoseattleu.com##.accipiter\nconsequenceofsound.net##.acm-module-300-250\nkcrw.com##.actions\n17track.net,5newsonline.com,6abc.com,7online.com,aa.co.za,aarp.org,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abovethelaw.com,accringtonobserver.co.uk,adelaidenow.com.au,adn.com,adsoftheworld.com,adsupplyads.com,adtmag.com,adweek.com,aero-news.net,aetv.com,agra-net.net,ahlanlive.com,algemeiner.com,aljazeera.com,allkpop.com,allrecipes.co.in,allrecipes.com.au,amandala.com.bz,americanprofile.com,amny.com,anandtech.com,androidapps.com,androidauthority.com,aol.com,appolicious.com,arabianbusiness.com,arseniohall.com,articlealley.com,asianjournal.com,associationsnow.com,audiko.net,aussieoutages.com,autoblog.com,autoblog360.com,autoguide.com,aww.com.au,azarask.in,back9network.com,backlinkwatch.com,backtrack-linux.org,bathchronicle.co.uk,beaumontenterprise.com,bellinghamherald.com,bgr.com,bikesportnews.com,birminghammail.co.uk,birminghampost.co.uk,blackmorevale.co.uk,bloomberg.com,bloombergview.com,bnd.com,bobvila.com,boston.com,bostonglobe.com,bostontarget.co.uk,bradenton.com,bravotv.com,breitbart.com,brentwoodgazette.co.uk,bridesmagazine.co.uk,brisbanetimes.com.au,bristolpost.co.uk,budgettravel.com,burbankleader.com,businessinsider.com,businesstech.co.za,businessweek.com,c21media.net,cairnspost.com.au,canadianoutages.com,canberratimes.com.au,canterburytimes.co.uk,carmarthenjournal.co.uk,carynews.com,cd1025.com,celebdigs.com,celebified.com,centralsomersetgazette.co.uk,centredaily.com,cfl.ca,cfo.com,ch-aviation.com,channel5.com,charismamag.com,charismanews.com,charlotteobserver.com,cheddarvalleygazette.co.uk,cheezburger.com,chesterchronicle.co.uk,chicagobusiness.com,chicagomag.com,chinahush.com,chinasmack.com,christianexaminer.com,christianlifenews.com,chroniclelive.co.uk,cio.com,citeworld.com,citylab.com,citysearch.com,claytonnewsstar.com,clientmediaserver.com,cloudtime.to,cltv.com,cnet.com,cnn.com,coastlinepilot.com,codepen.io,collinsdictionary.com,colorlines.com,colourlovers.com,comcast.net,comicbookmovie.com,competitor.com,computerworld.com,cornishguardian.co.uk,cornishman.co.uk,courier.co.uk,couriermail.com.au,coventrytelegraph.net,cpuboss.com,crawleynews.co.uk,crewechronicle.co.uk,crossmap.com,crosswalk.com,croydonadvertiser.co.uk,csoonline.com,csswizardry.com,cupcakesandcashmere.com,cw33.com,cw39.com,cydiaupdates.net,dailycute.net,dailylobo.com,dailylocal.com,dailyparent.com,dailypilot.com,dailypost.co.uk,dailyrecord.co.uk,dailytarheel.com,dailytelegraph.com.au,dawn.com,dcw50.com,deadline.com,dealnews.com,defenseone.com,delish.com,derbytelegraph.co.uk,deseretnews.com,designtaxi.com,dinozap.com,divxstage.to,dodgeforum.com,domain.com.au,dorkingandleatherheadadvertiser.co.uk,dose.com,dover-express.co.uk,downdetector.co.nz,downdetector.co.uk,downdetector.co.za,downdetector.com,downdetector.in,downdetector.sg,dpreview.com,dribbble.com,drive.com.au,dustcoin.com,earmilk.com,earthsky.org,eastgrinsteadcourier.co.uk,eastlindseytarget.co.uk,edmontonjournal.com,elle.com,emedtv.com,engadget.com,enquirerherald.com,espnfc.co.uk,espnfc.com,espnfc.com.au,espnfc.us,espnfcasia.com,essentialbaby.com.au,essentialkids.com.au,essexchronicle.co.uk,eurocheapo.com,everyjoe.com,examiner.co.uk,examiner.com,excellence-mag.com,exeterexpressandecho.co.uk,expressnews.com,familydoctor.org,farmersguardian.com,farmonlinelivestock.com.au,fashionweekdaily.com,fastcar.co.uk,femalefirst.co.uk,fijitimes.com,findthatpdf.com,findthebest.co.uk,findthebest.com,flashx.tv,floridaindependent.com,fodors.com,folkestoneherald.co.uk,food.com,foodandwine.com,foodnetwork.com,fortmilltimes.com,fox13now.com,fox17online.com,fox2now.com,fox40.com,fox43.com,fox4kc.com,fox59.com,fox5sandiego.com,fox6now.com,fox8.com,foxafrica.com,foxbusiness.com,foxcrimeafrica.com,foxct.com,foxnews.com,foxsoccer.com,foxsportsasia.com,freedom43tv.com,freshpips.com,fresnobee.com,fromestandard.co.uk,fuse.tv,fxafrica.tv,fxnetworks.com,fxnowcanada.ca,gamefuse.com,gamemazing.com,garfield.com,gazettelive.co.uk,geelongadvertiser.com.au,getbucks.co.uk,getreading.co.uk,getsurrey.co.uk,getwestlondon.co.uk,givesmehope.com,glendalenewspress.com,glennbeck.com,gloucestercitizen.co.uk,gloucestershireecho.co.uk,go.com,gocomics.com,goerie.com,goldcoastbulletin.com.au,goo.im,good.is,goodfood.com.au,goodhousekeeping.com,gpuboss.com,grab.by,grapevine.is,greatschools.org,greenbot.com,grimsbytelegraph.co.uk,grindtv.com,grubstreet.com,gumtree.co.za,happytrips.com,hbindependent.com,healthyplace.com,heatworld.com,heraldonline.com,heraldsun.com.au,history.com,hknepaliradio.com,hodinkee.com,hollywood-elsewhere.com,hollywoodreporter.com,hoovers.com,houserepairtalk.com,houstonchronicle.com,hulldailymail.co.uk,idahostatesman.com,idganswers.com,independent.co.uk,indianas4.com,indiewire.com,indyposted.com,infoworld.com,inhabitat.com,instyle.com,interest.co.nz,interfacelift.com,interfax.com.ua,intoday.in,investopedia.com,investsmart.com.au,iono.fm,irishmirror.ie,irishoutages.com,islandpacket.com,itsamememario.com,itv.com,itworld.com,jackfm.ca,jamaica-gleaner.com,javaworld.com,jobs.com.au,journalgazette.net,joystiq.com,jsonline.com,juzupload.com,katc.com,kbzk.com,kdvr.com,kentucky.com,keysnet.com,kfor.com,kidspot.com.au,kiss959.com,koaa.com,kob.com,komando.com,koreabang.com,kotaku.com.au,kpax.com,kplr11.com,kqed.org,ktla.com,kusports.com,kwgn.com,kxlf.com,kxlh.com,lacanadaonline.com,lakewyliepilot.com,lawrence.com,leaderpost.com,ledger-enquirer.com,leicestermercury.co.uk,lex18.com,lichfieldmercury.co.uk,lincolnshireecho.co.uk,liverpoolecho.co.uk,ljworld.com,llanellistar.co.uk,lmtonline.com,lolbrary.com,loop21.com,lordofthememe.com,lostateminor.com,loughboroughecho.net,lsjournal.com,macclesfield-express.co.uk,macombdaily.com,macon.com,macrumors.com,manchestereveningnews.co.uk,mangafox.me,marieclaire.com,marketwatch.com,mashable.com,maxpreps.com,mcclatchydc.com,mediafire.com,memearcade.com,memeslanding.com,memestache.com,mercedsunstar.com,mercurynews.com,metronews.ca,miamiherald.com,middevongazette.co.uk,military.com,minecrastinate.com,mirror.co.uk,mkweb.co.uk,mlb.mlb.com,modbee.com,monkeysee.com,monroenews.com,montrealgazette.com,motorcycle.com,motorcycleroads.com,movies.com,movshare.net,mozo.com.au,mprnews.org,mrconservative.com,mrmovietimes.com,mrqe.com,msn.com,muchshare.net,mugglenet.com,mybroadband.co.za,mycareer.com.au,myfox8.com,mygaming.co.za,myhomeremedies.com,mylifeisaverage.com,mypaper.sg,myrtlebeachonline.com,mysearchresults.com,nation.co.ke,nation.com.pk,nationaljournal.com,nature.com,nbcsportsradio.com,networkworld.com,news.com.au,newsfixnow.com,newsobserver.com,newsok.com,newstimes.com,newtimes.co.rw,nextmovie.com,nhregister.com,nickmom.com,northdevonjournal.co.uk,notsafeforwallet.net,nottinghampost.com,novamov.com,nowvideo.co,nowvideo.li,nowvideo.sx,ntd.tv,ntnews.com.au,ny1.com,nymag.com,nytco.com,nytimes.com,offbeat.com,omgfacts.com,osadvertiser.co.uk,osnews.com,ottawamagazine.com,ovguide.com,patch.com,patheos.com,peakery.com,perthnow.com.au,phl17.com,photobucket.com,pingtest.net,pirateshore.org,pix11.com,plosone.org,plymouthherald.co.uk,pokestache.com,polygon.com,popsugar.com,popsugar.com.au,prepperwebsite.com,primeshare.tv,pv-tech.org,q13fox.com,quackit.com,quibblo.com,ragestache.com,ranker.com,readmetro.com,realestate.com.au,realityblurred.com,redeyechicago.com,redmondmag.com,refinery29.com,relish.com,retailgazette.co.uk,retfordtimes.co.uk,reuters.com,roadsideamerica.com,rogerebert.com,rollcall.com,rossendalefreepress.co.uk,rumorfix.com,runcornandwidnesweeklynews.co.uk,runnow.eu,sacbee.com,sadlovequotes.net,sanluisobispo.com,sbs.com.au,scpr.org,scubadiving.com,scunthorpetelegraph.co.uk,seattletimes.com,sevenoakschronicle.co.uk,sfchronicle.com,sfgate.com,sfx.co.uk,sheptonmalletjournal.co.uk,shtfplan.com,si.com,similarsites.com,simpledesktops.com,singingnews.com,sixbillionsecrets.com,sky.com,slacker.com,slate.com,sleafordtarget.co.uk,slidetoplay.com,smackjuice.com,smartcompany.com.au,smartphowned.com,smh.com.au,softpedia.com,somersetguardian.co.uk,southportvisiter.co.uk,southwales-eveningpost.co.uk,spectator.org,spin.com,spokesman.com,sportsdirectinc.com,springwise.com,spryliving.com,ssdboss.com,ssireview.org,stagevu.com,stamfordadvocate.com,standard.co.uk,star-telegram.com,statenews.com,statscrop.com,stltoday.com,stocktwits.com,stokesentinel.co.uk,stoppress.co.nz,streetinsider.com,stripes.com,stroudlife.co.uk,stv.tv,sub-titles.net,sunherald.com,surfline.com,surreymirror.co.uk,suttoncoldfieldobserver.co.uk,talkandroid.com,tampabay.com,tamworthherald.co.uk,tasteofawesome.com,teamcoco.com,techdirt.com,tgdaily.com,thanetgazette.co.uk,thatslife.com.au,thatssotrue.com,theage.com.au,theatlantic.com,theaustralian.com.au,theblaze.com,thedailybeast.com,thedp.com,theepochtimes.com,thefirearmblog.com,thefreedictionary.com,thegamechicago.com,thegossipblog.com,thegrio.com,thegrocer.co.uk,thehungermemes.net,thejournal.co.uk,thekit.ca,themercury.com.au,thenation.com,thenewstribune.com,theoaklandpress.com,theolympian.com,theonion.com,theprovince.com,therealdeal.com,theroot.com,thesaurus.com,thestack.com,thestarphoenix.com,thestate.com,thevine.com.au,thewalkingmemes.com,thewindowsclub.com,thewire.com,thisiswhyimbroke.com,time.com,timeshighereducation.co.uk,timesunion.com,tinypic.com,today.com,tokyohive.com,topsite.com,torontoist.com,torquayheraldexpress.co.uk,touringcartimes.com,townandcountrymag.com,townsvillebulletin.com.au,travelocity.com,travelweekly.com,tri-cityherald.com,tribecafilm.com,tripadvisor.ca,tripadvisor.co.uk,tripadvisor.co.za,tripadvisor.com,tripadvisor.ie,tripadvisor.in,triplem.com.au,trucktrend.com,truecar.com,tv3.ie,twcc.com,twcnews.com,ufc.com,uinterview.com,unfriendable.com,userstyles.org,usnews.com,vancouversun.com,veevr.com,vetfran.com,vg247.com,vid.gg,vidbux.com,videobash.com,videoweed.es,vidxden.com,vidxden.to,viralnova.com,vogue.com.au,vulture.com,walesonline.co.uk,walsalladvertiser.co.uk,washingtonpost.com,watchanimes.me,watoday.com.au,wattpad.com,watzatsong.com,way2sms.com,wbur.org,weathernationtv.com,webdesignerwall.com,webestools.com,weeklytimesnow.com.au,wegotthiscovered.com,wellcommons.com,wellsjournal.co.uk,westbriton.co.uk,westerndailypress.co.uk,westerngazette.co.uk,westernmorningnews.co.uk,wetpaint.com,wgno.com,wgnradio.com,wgnt.com,wgntv.com,whnt.com,whosay.com,whotv.com,wildcat.arizona.edu,windsorstar.com,winewizard.co.za,wnep.com,womansday.com,worldreview.info,worthplaying.com,wow247.co.uk,wqad.com,wral.com,wreg.com,wrestlezone.com,wsj.com,wtkr.com,wtvr.com,www.google.com,x17online.com,yahoo.com,yonhapnews.co.kr,yorkpress.co.uk,yourmiddleeast.com,zedge.net,zillow.com,zooweekly.com.au,zybez.net##.ad\nyahoo.com##.ad-active\ndeviantart.com##.ad-blocking-makes-fella-confused\nalarabiya.net,edmunds.com,flightaware.com,haaretz.com,journalism.co.uk,memecdn.com,memecenter.com,metrolyrics.com,pcworld.in,reverso.net,revision3.com,soapoperadigest.com,tasteofhome.com,twitpic.com,vinesbay.com,viralnova.com,where.ca##.ad-box\n9news.com.au,beautifuldecay.com,boston.com,businessinsider.com.au,cpuboss.com,dnainfo.com,downforeveryoneorjustme.com,engineeringnews.co.za,firehouse.com,glamour.com,gpuboss.com,ign.com,isup.me,komando.com,macstories.net,moneysense.ca,nbcnews.com,refinery29.com,rollingstone.com,slate.com,sltrib.com,ssdboss.com,stockhouse.com,theaustralian.com.au,themercury.com.au,thrillist.com,youtube.com##.ad-container\nwusa9.com##.ad-image\nhollywoodjournal.com##.ad-title\nvesselfinder.com##.ad0\nbnqt.com##.ad05\nafreecodec.com,brothersoft.com,gamrreview.com,indiatimes.com,msn.com,rodalenews.com,sundaymail.co.zw,sundaynews.co.zw,webmaster-source.com##.ad1\nbrothersoft.com,livemint.com,nowvideo.co,nowvideo.eu,nowvideo.li,nowvideo.sx,roms4droid.com,sundaymail.co.zw,sundaynews.co.zw##.ad2\nafreecodec.com,livemint.com,mpog100.com,sundaymail.co.zw,sundaynews.co.zw##.ad3\nhitfreegames.com,sundaymail.co.zw,sundaynews.co.zw##.ad4\nsundaymail.co.zw,sundaynews.co.zw,vesselfinder.com##.ad5\nsundaymail.co.zw,sundaynews.co.zw##.ad6\nsundaymail.co.zw,sundaynews.co.zw##.ad7\nngrguardiannews.com##.ad9\nbuy.com##.adBG\nbrowardpalmbeach.com,cafemom.com,chacha.com,cio.co.uk,citypages.com,computerworlduk.com,cvs.com,dallasobserver.com,digitalartsonline.co.uk,flightradar24.com,geek.com,globaltv.com,houstonpress.com,laweekly.com,macworld.co.uk,miaminewtimes.com,newspakistan.pk,nytimes.com,ocweekly.com,pcadvisor.co.uk,petagadget.com,phoenixnewtimes.com,reuters.com,riverfronttimes.com,sfweekly.com,sky.com,t3.com,thehimalayantimes.com,villagevoice.com,westword.com,yakimaherald.com##.adContainer\nwebfail.com##.adMR\nifaonline.co.uk,relink.us##.ad_right\ntelegraph.co.uk##.adarea + .summaryMedium\nenglishrussia.com,keepvid.com,metrowestdailynews.com##.adb\npencurimovie.cc##.adb_overlay\naol.com,beautysouthafrica.com,blurtit.com,breakingnews.com,digitalhome.ca,eurowerks.org,heyuguys.co.uk,longislandpress.com,opensourcecms.com,opposingviews.com,readersdigest.co.uk,songlyrics.com,sugarrae.com,techeblog.com,thebizzare.com##.adblock\norbitztv.co.uk##.adblockcreatorssuckmydick\naffiliatefix.com,blogto.com,capitalfm.com.my,cargoinfo.co.za,lockerz.com,macdailynews.com,mensjournal.com,midnightpoutine.ca,mvnrepository.com,ow.ly,podfeed.net,pricespy.co.nz,sfbayview.com,viralnova.com,whatsmyip.org,willyweather.com.au##.adbox\nwebtoolhub.com##.adbx\nsearch.ch##.adcell\nmsn.com##.adcicon\nfanatix.com,nfl.com,theconstructionindex.co.uk##.adcontainer\nrunnerspace.com##.adcontent\nallrovi.com,bdnews24.com,hotnewhiphop.com,itproportal.com,nciku.com,newvision.co.ug,yourepeat.com##.add\nafricareview.com##.add-banner\n1049.fm,drgnews.com##.add-box\naddictivetips.com##.add-under-post\ntime4tv.com##.add1\nsundownsfc.co.za##.add2\nforexminute.com##.add4\ntvnz.co.nz##.addHolder\ninvestorschronicle.co.uk##.addPlacement\nworldissues360.com##.addWrapper\nibnlive.in.com##.add_box\nyellowpages.ae##.add_main_div\ninspiyr.com##.add_unit\ninspiyr.com##.add_unit1\nyellowpages.ae##.add_view300_250\ngbcghana.com##.addbg\nhscripts.com##.addbox\nfunmunch.com##.addimage\ncadenaazul.com,ibnlive.in.com,intoday.in,lapoderosa.com,telegraph.co.uk##.adds\noyefm.in##.addv\ntechhamlet.com##.adhered\nnaldzgraphics.net##.adis\nthedailystar.net##.adivvert\nusabit.com##.adk2_slider_baner\npbs.org##.adl\nanimalfactguide.com,ask.com,bigislandnow.com,dnainfo.com,globalpost.com,portlandmonthlymag.com##.adlabel\nebookbrowse.com##.adleft\nvietnamnet.vn##.adm_c1\nncaa.com##.adman-label\njokeroo.com##.admb\nexperienceproject.com##.adn\nflightglobal.com##.adp\nbodyboardingmovies.com##.adpopup\nbodyboardingmovies.com##.adpopup-overlay\niamwire.com##.adr\niskullgames.com##.adr300\nzercustoms.com##.adrh\n1sale.com,7billionworld.com,abajournal.com,altavista.com,androidfilehost.com,arcadeprehacks.com,asbarez.com,birdforum.net,coinad.com,cuzoogle.com,cyclingweekly.co.uk,disconnect.me,domainnamenews.com,eco-business.com,energylivenews.com,facemoods.com,fcall.in,flashx.tv,foxbusiness.com,foxnews.com,freetvall.com,friendster.com,fstoppers.com,ftadviser.com,furaffinity.net,gentoo.org,gmanetwork.com,govtrack.us,gramfeed.com,gyazo.com,hispanicbusiness.com,html5test.com,hurricanevanessa.com,i-dressup.com,iheart.com,ilovetypography.com,irennews.org,isearch.whitesmoke.com,itar-tass.com,itproportal.com,kingdomrush.net,laptopmag.com,laweekly.com,lfpress.com,livetvcafe.net,lovemyanime.net,malaysiakini.com,manga-download.org,maps.google.com,marinetraffic.com,mb.com.ph,meaningtattos.tk,mmajunkie.com,movies-online-free.net,mugshots.com,myfitnesspal.com,mypaper.sg,nbcnews.com,news.nom.co,nsfwyoutube.com,nugget.ca,osn.com,panorama.am,pastie.org,phpbb.com,playboy.com,pocket-lint.com,pokernews.com,previously.tv,radiobroadcaster.org,reason.com,ryanseacrest.com,savevideo.me,sddt.com,searchfunmoods.com,sgcarmart.com,shopbot.ca,sourceforge.net,tcm.com,tech2.com,thecambodiaherald.com,thedailyobserver.ca,thejakartapost.com,thelakewoodscoop.com,themalaysianinsider.com,theobserver.ca,thepeterboroughexaminer.com,theyeshivaworld.com,tiberium-alliances.com,tjpnews.com,today.com,tubeserv.com,turner.com,twogag.com,ultimate-guitar.com,wallpaper.com,washingtonpost.com,wdet.org,wftlsports.com,womanandhome.com,wtvz.net,yahoo.com,youthedesigner.com,yuku.com##.ads\nglarysoft.com##.ads + .search-list\nsearchfunmoods.com##.ads + ul > li\ny8.com##.ads-bottom-table .grey-box-bg\nplayboy.com##.ads-column > h2\ngirlgames4u.com,xing.com##.ads-container\nextratorrent.cc,hitfreegames.com,movies-online-free.net,twogag.com##.ads2\ntwogag.com##.ads5\ntwogag.com##.adsPW\ntwogag.com##.adsPW2\nlocalmoxie.com##.ads_tilte\nlocalmoxie.com##.ads_tilte + .main_mid_ads\nentrepreneur.com##.adsby\nbloomberg.com,borfast.com,howmanyleft.co.uk,instantpulp.com,mysmartprice.com,nintandbox.net,nycity.today,over-blog.com,plurk.com,scitechdaily.com,sgentrepreneurs.com,techsupportalert.com,wikihoops.com,wlds.com##.adsense\nravchat.com##.adsh\nsearch.b1.org##.adslabel\nanimeid.com##.adspl\ndesertdispatch.com,geeky-gadgets.com,highdesert.com,journalgazette.net,lgbtqnation.com,miamitodaynews.com,myrecipes.com,search.certified-toolbar.com,thevoicebw.com,vvdailypress.com,wsj.com##.adtext\nreason.com,rushlimbaugh.com##.adtitle\nansamed.info,baltic-course.com,carsdirect.com,cbc.ca,cineuropa.org,cpuid.com,facebook.com,flicks.co.nz,futbol24.com,gametrailers.com,getwapi.com,howstuffworks.com,intoday.in,isearch.omiga-plus.com,massappeal.com,mnn.com,mtv.com,mysuncoast.com,ok.co.uk,ponged.com,prohaircut.com,qone8.com,roadfly.com,rockol.com,rumorcontrol.info,runamux.net,search.v9.com,ultimate-guitar.com,vh1.com,webssearches.com,xda-developers.com,zbani.com##.adv\nluxury-insider.com##.adv-info\nveoh.com##.adv-title\nbtn.com##.adv-widget\nanimefushigi.com##.adv1\nfutbol24.com##.adv2\nprohaircut.com##.adv3\nyesasia.com##.advHr\ngametrailers.com,themoscowtimes.com##.adv_block\nvietnamnet.vn##.adv_info\ndt-updates.com##.adv_items\nfaceyourmanga.com##.adv_special\ninfoplease.com##.advb\n98online.com,adballa.com,allghananews.com,arabianindustry.com,bitcoinzebra.com,bloomberg.com,cbc.ca,chemicalwatch.com,craveonline.com,dawn.com,designmena.com,express.co.uk,expressandstar.com,farmprogress.com,foxbusiness.com,foxnews.com,gfi.com,guernseypress.com,gulfnews.com,healthcanal.com,healthguru.com,healthinsurancedaily.com,hollywoodreporter.com,hoteliermiddleeast.com,humanipo.com,huntspost.co.uk,jerseyeveningpost.com,journeychristiannews.com,kumusika.co.zw,legendarypokemon.net,mmegi.bw,morningstar.co.uk,msnbc.com,myfinances.co.uk,ninemsn.com.au,outdoorchannel.com,phnompenhpost.com,piccsy.com,shropshirestar.com,skysports.com,sowetanlive.co.za,sundayworld.co.za,technewstoday.com,tenplay.com.au,thecomet.net,thegayuk.com,thejournal.ie,thetribunepapers.com,totalscifionline.com,travelchannel.com,trucksplanet.com,tvweek.com,vg247.com,winewizard.co.za,wow247.co.uk,xfire.com##.advert\nnaldzgraphics.net##.advertBSA\nbandwidthblog.com,demerarawaves.com,eaglecars.com,earth911.com,pcmag.com,proporn.com,slodive.com,smartearningsecrets.com,smashingapps.com,theawesomer.com,thepeninsulaqatar.com##.advertise\nthepeninsulaqatar.com##.advertise-09\ndailyvoice.com##.advertise-with-us\ncitysearch.com##.advertiseLink\ninsiderpages.com##.advertise_with_us\n1520wbzw.com,760kgu.biz,880thebiz.com,about.com,afro.com,allmusic.com,amctv.com,animax-asia.com,ap.org,araratadvertiser.com.au,areanews.com.au,armidaleexpress.com.au,avclub.com,avonadvocate.com.au,axn-asia.com,barossaherald.com.au,batemansbaypost.com.au,baysidebulletin.com.au,begadistrictnews.com.au,bellingencourier.com.au,bendigoadvertiser.com.au,betvasia.com,bigthink.com,biz1190.com,bizarremag.com,blacktownsun.com.au,blayneychronicle.com.au,bluemountainsgazette.com.au,boingboing.net,bombalatimes.com.au,boorowanewsonline.com.au,bordermail.com.au,braidwoodtimes.com.au,bravotv.com,brimbankweekly.com.au,bunburymail.com.au,business1110ktek.com,business1570.com,businessinsurance.com,busseltonmail.com.au,camdenadvertiser.com.au,camdencourier.com.au,canowindranews.com.au,caranddriver.com,carrierethernetnews.com,caseyweekly.com.au,caseyweeklycranbourne.com.au,centraladvocate.com.au,centralwesterndaily.com.au,cessnockadvertiser.com.au,cinemablend.com,classicandperformancecar.com,clickhole.com,colliemail.com.au,colypointobserver.com.au,competitor.com,coomaexpress.com.au,cootamundraherald.com.au,cowraguardian.com.au,crainsnewyork.com,crookwellgazette.com.au,crosswalk.com,dailyadvertiser.com.au,dailygazette.com,dailyliberal.com.au,dailyrecord.com,dandenongjournal.com.au,defenceweb.co.za,di.fm,donnybrookmail.com.au,downloadcrew.com,dunedintv.co.nz,dungogchronicle.com.au,easternriverinachronicle.com.au,edenmagnet.com.au,elliottmidnews.com.au,esperanceexpress.com.au,essentialmums.co.nz,examiner.com.au,eyretribune.com.au,fairfieldchampion.com.au,fastcocreate.com,fastcodesign.com,financialcontent.com,finnbay.com,forbesadvocate.com.au,frankstonweekly.com.au,gazettextra.com,gematsu.com,gemtvasia.com,gippslandtimes.com.au,gleninnesexaminer.com.au,globest.com,gloucesteradvocate.com.au,goodcast.org,goondiwindiargus.com.au,goulburnpost.com.au,greatlakesadvocate.com.au,grenfellrecord.com.au,guyraargus.com.au,hardenexpress.com.au,hawkesburygazette.com.au,hepburnadvocate.com.au,hillsnews.com.au,hispanicbusiness.com,humeweekly.com.au,huntervalleynews.net.au,i-dressup.com,imgur.com,inverelltimes.com.au,irishtimes.com,juneesoutherncross.com.au,kansas.com,katherinetimes.com.au,kdow.biz,kkol.com,knoxweekly.com.au,lakesmail.com.au,lamag.com,latrobevalleyexpress.com.au,legion.org,lithgowmercury.com.au,liverpoolchampion.com.au,livestrong.com,livetennis.com,macarthuradvertiser.com.au,macedonrangesweekly.com.au,macleayargus.com.au,magtheweekly.com,mailtimes.com.au,maitlandmercury.com.au,mandurahmail.com.au,manningrivertimes.com.au,margaretrivermail.com.au,maribyrnongweekly.com.au,marinmagazine.com,marketwatch.com,maroondahweekly.com.au,meltonweekly.com.au,merimbulanewsonline.com.au,merredinmercury.com.au,metservice.com,monashweekly.com.au,money1055.com,mooneevalleyweekly.com.au,moreechampion.com.au,movies4men.co.uk,mprnews.org,msn.com,mudgeeguardian.com.au,murrayvalleystandard.com.au,muswellbrookchronicle.com.au,myallcoastnota.com.au,nambuccaguardian.com.au,naroomanewsonline.com.au,narrominenewsonline.com.au,nationalgeographic.com,newcastlestar.com.au,northernargus.com.au,northerndailyleader.com.au,northweststar.com.au,nvi.com.au,nynganobserver.com.au,nytimes.com,oann.com,oberonreview.com.au,onetvasia.com,onlinegardenroute.co.za,orange.co.uk,parenthood.com,parkeschampionpost.com.au,parramattasun.com.au,pch.com,peninsulaweekly.com.au,penrithstar.com.au,plasticsnews.com,portlincolntimes.com.au,portnews.com.au,portpirierecorder.com.au,portstephensexaminer.com.au,praguepost.com,psychologytoday.com,queanbeyanage.com.au,racingbase.com,radioguide.fm,redsharknews.com,rhsgnews.com.au,riverinaleader.com.au,roxbydownssun.com.au,rubbernews.com,saitnews.co.za,sconeadvocate.com.au,silverdoctors.com,singletonargus.com.au,smallbusiness.co.uk,sonychannel.co.za,sonychannelasia.com,sonymax.co.za,sonymoviechannel.co.uk,sonytv.com,southcoastregister.com.au,southernhighlandnews.com.au,southernweekly.com.au,southwestadvertiser.com.au,standard.net.au,star-telegram.com,stawelltimes.com.au,stmarysstar.com.au,stonningtonreviewlocal.com.au,summitsun.com.au,suncitynews.com.au,sunjournal.com,sunraysiadaily.com.au,tennantcreektimes.com.au,tenterfieldstar.com.au,theadvocate.com,theadvocate.com.au,thebeachchannel.tv,thecourier.com.au,thecurrent.org,theflindersnews.com.au,theforecaster.net,theguardian.com.au,theherald.com.au,theislanderonline.com.au,theleader.com.au,thenortherntimes.com.au,theridgenews.com.au,therural.com.au,tirebusiness.com,townandcountrymagazine.com.au,transcontinental.com.au,travelpulse.com,twitch.tv,ulladullatimes.com.au,vanityfair.com,victorharbortimes.com.au,waginargus.com.au,walchanewsonline.com.au,walworthcountytoday.com,washingtonexaminer.com,wauchopegazette.com.au,wellingtontimes.com.au,westcoastsentinel.com.au,westernadvocate.com.au,westernmagazine.com.au,whyallanewsonline.com.au,winghamchronicle.com.au,wollondillyadvertiser.com.au,woot.com,wsj.com,wyndhamweekly.com.au,yasstribune.com.au,yellowpages.ca,youngwitness.com.au##.advertisement\nfieldandstream.com##.advertisement-fishing-contest\n4v4.com,bn0.com,culttt.com,flicks.co.nz,shieldarcade.com,thethingswesay.com,who.is##.advertisements\nafr.com,afrsmartinvestor.com.au,afternoondc.in,allmusic.com,brw.com.au,chicagobusiness.com,cio.co.ke,filesoup.com,ft.com,glamour.co.za,gq.co.za,hellomagazine.com,kat.ph,kickass.so,kickass.to,kickassunblock.info,newsweek.com,ocregister.com,orangecounty.com,premier.org.uk,premierchildrenswork.com,premierchristianity.com,premierchristianradio.com,premiergospel.org.uk,premieryouthwork.com,radio.com,softarchive.net,theadvocate.com,tvnz.co.nz##.advertising\nkatproxy.com,kickass.so,kickasstor.net,kickassunblock.info,kickassunblock.net##.advertising + .tabs\nmediatel.co.uk##.advertising_label\nketknbc.com,ktsm.com##.advertisments\ncomputerworld.co.nz##.advertorial_title\ntheglobeandmail.com##.advetorial\nfile-extensions.org##.advicon\njavascript-coder.com##.advimg\n148apps.com##.advnote\nmumsnet.com##.advo_box\nitweb.co.za,mani-admin-plugin.com##.advs\nsearch.chatzum.com##.adw\nvoxxi.com##.adwidget\ninstructables.com,mapquest.com,northjersey.com,npr.org,people.com,thestarphoenix.com##.adwrapper\nstatistiks.co.uk,statistiks.com##.adz\nthumbtribe.mobi##.adzoneOldMutualWithoutHeading\nmail.google.com##.aeF .nH[role=\"main\"] > .mq:last-child\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > .aKB\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > .afn:first-child + .mq\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > .mq:first-child\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > .nH > .nH > .AT[style]\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > .nH > .nH > .nH > .mq:last-child\nmail.google.com##.aeF > .nH > .nH[role=\"main\"] > div + .mq\nredown.se##.af\ntoptut.com##.af-form\nadventuregamers.com##.af_disclaimer\neurogamer.net##.affiliate\ndeborah-bickel.de##.affiliate-werbe125\ncoolest-gadgets.com,cutezee.com,sen.com.au##.affiliates\namericasautosite.com##.affiliatesDiv\ncutezee.com##.affiliates_fp\ndailymotion.com##.affiliation_cont\nbplans.com##.affixed-sidebar-m\ndigmyweb.com##.affsearch-container\ndigmyweb.com##.affsearch-container-right\nsurfwap.com,twilightwap.com##.ahblock2\nworld-airport-codes.com##.airport-affiliate\nallkpop.com##.akp_newslist_300x250\nautos.msn.com##.al\ninquirer.net##.al-bb-box\ninquirer.net##.al-elb-frame\nebay.com##.al32\n300mbmovies4u.com,javascript-coder.com,media1fire.com,megashare.com##.alert\nkcsoftwares.com##.alert-success\nhbwm.com##.alignRight[style=\"margin-right:30px;color:#858585;\"]\nempowernetwork.com##.align[bgcolor=\"#FCFA85\"]\nsearchizz.com##.also_block\nspeedtest.net##.alt-promo-container > ul > .alt-promo:first-child + .alt-promo\ndigitalhome.ca##.alt1[colspan=\"5\"][style=\"border: 1px solid #ADADAD; background-image: none\"] > div[align=\"center\"] > .vdb_player\ntechsupportforum.com##.alt1[style=\"border: 1px solid #ADADAD; background-image: none\"]\nstyleite.com##.am-ngg-right-ad\ncolorhexa.com##.amain\nair1.com,imdb.com,nprstations.org,reviewed.com,squidoo.com,three.fm##.amazon\nimdb.com##.amazon-instant-video\nblogcritics.org##.amazon-item\nbrickset.com##.amazonAd\nsquidoo.com##.amazon_spotlight\nkuhf.org##.amazonaff\nherplaces.com##.amazonlink\nfour11.com##.amed\nseventeen.com##.ams_bottom\nkingdomrush.net##.angry\nfolowpeople.info##.anivia_add_space\n4shared.com##.antivirusBanner\n1337x.org##.anynomousDw\ndirectupload.net,pv-magazine.com##.anzeige\ndirectupload.net##.anzeiger\nmmorpg.com##.apante\npublicradio.org##.apm_playlist_item_affiliate\npublicradio.org##.apm_playlist_item_purchase_link\ncultofmac.com##.appDetailPanel-ad\nchannelchooser.com##.append-bottom.last\nliveonlineradio.net##.art-Header2\nskysports.com##.art-betlink\ncarsession.com##.artBanner300\nibtimes.com##.art_content\nsigsiu.net##.artbannersplus\npocket-lint.com##.article + .block\nselfgrowth.com##.article-banner\njpost.com##.article-bottom-banner\nscoop.co.nz##.article-left-box\ntrendhunter.com##.articleBox\nsmh.com.au##.articleExtras-wrap\nshoppinglifestyle.com##.articleLREC\ntelegraph.co.uk##.articleSponsor\nsosuanews.com##.article[style=\"width: 440px; background-color: #000066; margin: 6px; margin-top: 6px;\"]\niafrica.com##.article_Banner\nnzgamer.com##.article_banner_holder\nalternet.org##.article_insert_container\napp.com,argusleader.com,battlecreekenquirer.com,baxterbulletin.com,bucyrustelegraphforum.com,burlingtonfreepress.com,centralohio.com,chillicothegazette.com,cincinnati.com,citizen-times.com,clarionledger.com,coloradoan.com,coshoctontribune.com,courier-journal.com,courierpostonline.com,dailyrecord.com,dailyworld.com,delawareonline.com,delmarvanow.com,democratandchronicle.com,desmoinesregister.com,dnj.com,fdlreporter.com,freep.com,greatfallstribune.com,greenbaypressgazette.com,greenvilleonline.com,guampdn.com,hattiesburgamerican.com,hometownlife.com,honoluluadvertiser.com,htrnews.com,indystar.com,jacksonsun.com,jconline.com,lancastereaglegazette.com,lansingstatejournal.com,livingstondaily.com,lohud.com,mansfieldnewsjournal.com,marionstar.com,marshfieldnewsherald.com,montgomeryadvertiser.com,mycentraljersey.com,mydesert.com,newarkadvocate.com,news-leader.com,news-press.com,newsleader.com,pal-item.com,pnj.com,portclintonnewsherald.com,postcrescent.com,poughkeepsiejournal.com,press-citizen.com,pressconnects.com,rgj.com,sctimes.com,sheboyganpress.com,shreveporttimes.com,stargazette.com,statesmanjournal.com,stevenspointjournal.com,tallahassee.com,tennessean.com,theadvertiser.com,thecalifornian.com,thedailyjournal.com,theithacajournal.com,theleafchronicle.com,thenews-messenger.com,thenewsstar.com,thenorthwestern.com,thespectrum.com,thestarpress.com,thetimesherald.com,thetowntalk.com,visaliatimesdelta.com,wausaudailyherald.com,wisconsinrapidstribune.com,zanesvilletimesrecorder.com##.articleflex-container\nwebpronews.com##.articleleftcol\nentrepreneur.com##.articlepromo\nburbankleader.com,citypaper.com,dailypilot.com,glendalenewspress.com,hbindependent.com,lacanadaonline.com,redeyechicago.com,vacationstarter.com,vagazette.com##.articlerail\naudiko.net##.artist-banner-right\naudiko.net##.artist-banner-right-cap\neastrolog.com##.as300x250\nmoneycontrol.com##.asSponser\nmemepix.com##.asblock\nxmodulo.com##.asdf-banner-zone\nfour11.com##.asmall_l\nfour11.com##.asmall_r\ninstructables.com##.aspace\nfreeads.co.uk##.ass_ad\njavascriptsource.com##.asset-section\nyahoo.com##.astro-promo\nohioautofinder.com##.atLeaderboard\nohioautofinder.com##.atMiniBanner\nherald.co.zw##.atbanners\nmilesplit.com##.atf\ntvtropes.org##.atf_banner\ngamepedia.com,minecraftwiki.net##.atflb\nmyshopping.com.au##.atip\nfiledir.com##.atit\npogdesign.co.uk##.atop\nwebmd.com##.attrib_right_fmt\nwebmd.com##.attribution\nmajorgeeks.com##.author:first-child\nmail.yahoo.com##.avLogo\nngrguardiannews.com##.avd_display_block\nreceivesmsonline.net##.aviso\ngameplanet.co.nz##.avt-mr\ngameplanet.co.nz##.avt-placement\nm.facebook.com,touch.facebook.com##.aymlCoverFlow\nm.facebook.com,touch.facebook.com##.aymlNewCoverFlow[data-ft*=\"\\\"is_sponsored\\\":\\\"1\\\"\"]\nknowyourmeme.com##.aztc\ntechspot.com##.azureDiv\nlivejournal.com##.b-adv\nsilvertorrent.org##.b-content[align=\"center\"] > table[width=\"99%\"]\neasyvectors.com##.b-footer\nalawar.com##.b-game-play__bnnr\ntheartnewspaper.com##.b-header-banners\nsammobile.com##.b-placeholder\nbizcommunity.com##.b-topbanner\nflvto.com##.b1\nscorespro.com##.b160_600\nflv2mp3.com,flvto.com##.b2\nflv2mp3.com##.b3\nscorespro.com##.b300\nimpactwrestling.com,jumptogames.com,tnawrestling.com##.b300x250\nitproportal.com##.b4nn3r\nscorespro.com##.b60\ngazeta.kz##.bBanner\nconnectamarillo.com,northwestohio.com##.bI-page-lead-upper\nflv2mp3.com,flvto.com##.b_phone\nautotrader.ca##.ba1\nautotrader.ca##.ba2\nautotrader.ca##.ba3\nhellomagazine.com##.backBanner\nxfire.com##.background\nmodders-inc.com,thessdreview.com,thestar.ie##.background-cover\nbroadway.com,treehousetv.com##.badge\ngarfield.com##.badgeBackground\ndownbyte.net##.badw\npravda.ru##.ban-center\nindia.com##.ban-rgt-cng-ab\nxbox360cheats.com##.ban160\nevilmilk.com,xbox360cheats.com##.ban300\nworldstarhiphop.com##.banBG\nworldstarhiphop.com##.banOneCon\nkiz10.com##.ban_300_250\nstream2watch.com##.ban_b\nizismile.com##.ban_top\namerica.fm##.banbo\nwebscribble.com##.baner\nhypemixtapes.com##.baner600\nf-picture.net##.banerBottom\nsxc.hu##.bann\n4music.com,90min.com,964eagle.co.uk,adage.com,ameinfo.com,angryduck.com,anyclip.com,aol.com,arcadebomb.com,b-metro.co.zw,bayt.com,betterrecipes.com,bikechatforums.com,billboard.com,blackamericaweb.com,bored-bored.com,boxoffice.com,bukisa.com,cadplace.co.uk,cineuropa.org,cmo.com.au,cnn.com,cnnmobile.com,coryarcangel.com,dreamteamfc.com,echoroukonline.com,ecorporateoffices.com,elyricsworld.com,entrepreneur.com,euobserver.com,eurochannel.com,everyday.com.kh,evilmilk.com,fantasyleague.com,fieldandstream.com,filenewz.com,footballtradedirectory.com,forexpeacearmy.com,forum.dstv.com,freshbusinessthinking.com,freshtechweb.com,funpic.hu,gamebanshee.com,gamehouse.com,gamersbook.com,garfield.com,gatewaynews.co.za,gd.tuwien.ac.at,general-catalog.com,general-files.com,general-video.net,generalfil.es,ghananation.com,girlsocool.com,globaltimes.cn,gsprating.com,healthsquare.com,hitfreegames.com,hotfrog.ca,hotfrog.co.nz,hotfrog.co.uk,hotfrog.co.za,hotfrog.com,hotfrog.com.au,hotfrog.com.my,hotfrog.ie,hotfrog.in,hotfrog.ph,hotfrog.sg,hotnewhiphop.com,howard.tv,htxt.co.za,humanipo.com,hyipexplorer.com,ibtimes.co.in,ibtimes.co.uk,iconfinder.com,iguide.to,imedicalapps.com,imnotobsessed.com,insidefutbol.com,internationalmeetingsreview.com,internetnews.com,irishtimes.com,isohunt.to,isource.com,itreviews.com,japantimes.co.jp,jewishtimes.com,keepcalm-o-matic.co.uk,ketknbc.com,kicknews.com,kijiji.ca,ktsm.com,leo.org,livescore.in,lmgtfy.com,locatetv.com,londonstockexchange.com,looklocal.co.za,manolith.com,mariopiperni.com,mmosite.com,motherboard.tv,motortrend.com,moviezadda.com,mzhiphop.com,naij.com,nehandaradio.com,netmums.com,networkworld.com,nuttymp3.com,oceanup.com,pdfmyurl.com,postzambia.com,premierleague.com,priceviewer.com,proxyhttp.net,ptotoday.com,rapidlibrary.com,reference.com,reversephonesearch.com.au,semiaccurate.com,smartcarfinder.com,snakkle.com,soccer24.co.zw,sportsvibe.co.uk,sumodb.com,sweeting.org,tennis.com,thebull.com.au,thefanhub.com,thefringepodcast.com,thehill.com,thehun.com,thesaurus.com,theskinnywebsite.com,time4tv.com,timeslive.co.za,tmi.me,torrent.cd,travelpulse.com,trutv.com,tvsquad.com,twirlit.com,umbrelladetective.com,universalmusic.com,ustream.tv,vice.com,viralnova.com,weather.gc.ca,weatheronline.co.uk,wego.com,whatsock.com,worldcrunch.com,xda-developers.com,yellowbook.com,yellowpages.com.jo,zbigz.com##.banner\nautotrader.co.uk##.banner--7th-position\nautotrader.co.uk##.banner--leaderboard\nautotrader.co.uk##.banner--skyscraper\nariacharts.com.au,nation.sc,techshout.com##.banner-1\nnation.sc##.banner-2\nfoodingredientsfirst.com,nutritionhorizon.com##.banner-250\nnation.sc##.banner-3\nnbcsports.com,onrpg.com,usahealthcareguide.com##.banner-300-250\nalltop.com##.banner-background\nluxgallery.com##.banner-big-cotent\nyellowpages.com.lb##.banner-box\n1027dabomb.net##.banner-btf\nsoftonic.com##.banner-caption\nfarmonline.com.au,farmweekly.com.au,goodfruitandvegetables.com.au,jewsnews.co.il,knowledgerush.com,narutoforums.com,northqueenslandregister.com.au,privatehealth.co.uk,queenslandcountrylife.com.au,stockandland.com.au,stockjournal.com.au,student-jobs.co.uk,teenspot.com,theland.com.au,turfcraft.com.au,vh1.com##.banner-container\nprivatehealth.co.uk##.banner-container-center\nsoccerway.com##.banner-content\nmoviesplanet.com##.banner-des\ndealchecker.co.uk##.banner-header\nmedicalxpress.com,phys.org,pixdaus.com,reference.com,tennis.com,thesaurus.com##.banner-holder\nfreecode.com##.banner-imu\nneowin.net##.banner-leaderboard\nsavevid.com##.banner-main-198x300\naudiko.net,extremesportman.com,ganool.com##.banner-right\nextremesportman.com##.banner-right-two\nhumorsharing.com##.banner-side\nfreecode.com##.banner-sky\nspin.com##.banner-slot\nneogamr.net,neowin.net##.banner-square\nintomobile.com##.banner-tbd\naudiko.net,carpartswholesale.com,greatbritishlife.co.uk,nationmultimedia.com,pwinsider.com,rapdose.com,usahealthcareguide.com,wired.co.uk,xda-developers.com##.banner-top\nfeedmyapp.com##.banner-wrap\ngeneral-catalog.com##.banner-wrap-hor\nmanualslib.com,thenextweb.com,ustream.tv##.banner-wrapper\nisohunt.to##.banner-wrp\nctv.ca##.banner01-holder\nctv.ca##.banner02\nthinkdigit.com##.banner03\ncoolest-gadgets.com,depositfiles.com,dfiles.eu,freecode.com,israeldefense.com,popcrunch.com,priceviewer.com,thelakewoodscoop.com,usa-people-search.com,wired.co.uk##.banner1\nangryduck.com##.banner160-title\nazernews.az##.banner1_1\nflixflux.co.uk,gsprating.com,jamieoliver.com,thelakewoodscoop.com,usa-people-search.com##.banner2\nblogtv.com##.banner250\nmotorcycle-usa.com##.banner300x100\nmotorcycle-usa.com##.banner300x250\ncelebuzz.com,pinkisthenewblog.com##.banner728-wrapper\nmixfmradio.com##.banner728_border\ncambodiayp.com,nepalyp.com##.banner750\nchristianpost.com##.bannerBottom\nbritsabroad.com,diymobileaudio.com,hotfilms.org,itechtalk.com,legendarydevils.com,mechodownload.com,thegamingsource.co,yummy.ph,zeetvusa.com##.bannerBox\natomicgamer.com##.bannerCaption\nesl.eu,foodnetwork.ca,macworld.co.uk,photobucket.com,zoover.co.uk##.bannerContainer\ncargurus.com##.bannerDiv\niberia.com##.bannerGiraffe\nxda-developers.com##.bannerHolder\nsastudy.co.za##.bannerHolder728\npixdaus.com##.bannerIdent\nciviweb.com,thehimalayantimes.com##.bannerLink\ncome2play.com##.bannerLong\nartistdirect.com##.bannerNavi\newn.co.za##.bannerSecond\nrunnersworld.com##.bannerSub\nbitsnoop.com##.bannerTitle\nchristianpost.com,jamanetwork.com,londonstockexchange.com,xtri.com##.bannerTop\nhongkiat.com##.bannerWrap\niphoneapplicationlist.com,salon.com,shockwave.com##.bannerWrapper\nimpawards.com##.banner_2\ncanalboat.co.uk##.banner_234\nimpawards.com##.banner_3\nmygaming.co.za,travelpulse.com##.banner_300\nkohit.net,mygaming.co.za##.banner_468\nkomp3.net##.banner_468_holder\npastebin.com,ratemyteachers.com##.banner_728\nuploadstation.com##.banner_area\ncbssports.com##.banner_bg\nbusiness-standard.com##.banner_block\nanyclip.com##.banner_bottom\naww.com.au,englishrussia.com,softonic.com##.banner_box\ncoda.fm,jamieoliver.com,smartcompany.com.au,take.fm##.banner_container\nkyivpost.com##.banner_content_t\npricespy.co.nz##.banner_div\nswapace.com##.banner_foot\ntvtechnology.com##.banner_footer\ndomainmasters.co.ke##.banner_google\narabtimesonline.com,silverlight.net##.banner_header\nrugby365.com##.banner_holder\nnewsy.com##.banner_holder_300_250\ncfos.de##.banner_left\nlivecharts.co.uk##.banner_long\nexpressindia.com##.banner_main\nplussports.com##.banner_mid\ncheckoutmyink.com##.banner_placer\n977music.com,seenow.com##.banner_right\ndhl.de##.banner_right_resultpage_middle\nstatista.com##.banner_skyscraper\n977music.com,rnews.co.za,seetickets.com,thestranger.com##.banner_top\nporttechnology.org##.banner_wrapper\ngamenet.com##.bannera\nzeenews.india.com##.bannerarea\nsj-r.com,widih.org##.bannerbottom\nbloomberg.com##.bannerbox\ntimesofoman.com##.bannerbox1\ntimesofoman.com##.bannerbox2\nfashionotes.com##.bannerclick\narcadebomb.com##.bannerext\nbreakfreemovies.com,fifaembed.com,nowwatchtvlive.com,surk.tv,tvbay.org##.bannerfloat\n2mfm.org,aps.dz,beginlinux.com,eatdrinkexplore.com,fleetwatch.co.za,gameofthrones.net,i-programmer.info,killerdirectory.com,knowthecause.com,maravipost.com,mousesteps.com,onislam.net,rhylfc.co.uk,russianireland.com,soccer24.co.zw,thesentinel.com,vidipedia.org##.bannergroup\nbrecorder.com##.bannergroup_box\nvidipedia.org##.bannergroup_menu\nmalaysiandigest.com##.bannergroup_sideBanner2\ndailynews.co.tz##.bannergroup_text\nav-comparatives.org,busiweek.com,caribnewsdesk.com,israel21c.org,planetfashiontv.com,uberrock.co.uk##.banneritem\nelitistjerks.com##.bannerl0aded\nracing-games.com,widih.org##.bannerleft\ntechspot.com##.bannernav\ndigitalproductionme.com,racing-games.com,widih.org##.bannerright\nc21media.net,classicsdujour.com,filezoo.com,general-search.net,igirlsgames.com,jobstreet.com.my,jobstreet.com.sg,kdoctv.net,lolroflmao.com,mysteriousuniverse.org,phuketgazette.net,sheknows.com,telesurtv.net,thinkdigit.com##.banners\nwlrfm.com##.banners-bottom-a\ncodecs.com##.banners-right\necr.co.za,jacarandafm.com##.banners120\nthinkdigit.com##.banners_all\ndinnersite.co.za##.banners_leaderboard\nwdna.org##.banners_right\ncbc.ca##.bannerslot-container\nmusictory.com,widih.org##.bannertop\nurlcash.org##.bannertop > center > #leftbox\ngoldengirlfinance.ca##.bannerwrap\nmyhostnews.com##.bannerwrapper_t\n4v4.com,bn0.com,shieldarcade.com##.banr\naskqology.com##.bar\ndesimartini.com##.basebox[style=\"height:435px;\"]\npremiershiprugby.com##.basesky\ntomshardware.com##.basicCentral-elm.partner\ncoolspotters.com##.bau-flag\nbbc.co.uk##.bbccom_companion\nbbc.co.uk,bbc.com##.bbccom_sponsor\necommercetimes.com,ectnews.com,linuxinsider.com,macnewsworld.com,technewsworld.com##.bbframe\nbbgsite.com##.bbg_ad_fulltop\nbbgsite.com##.bbg_ad_side\nsearch.yahoo.com##.bbox\nfoodnetwork.ca##.bboxContainer\nh-online.com##.bcadv\nfakenamegenerator.com##.bcsw\niol.co.za##.bd_images\npublicradio.org##.become-sponsor-link\nwgbh.org##.becomeSponsor\nwesternjournalism.com##.before-article\nmouthshut.com##.beige-border-tr[style=\"padding:5px;\"]\ngoodgearguide.com.au##.bestprice-footer\nfootball365.com##.bet-link\nsoccerway.com##.bet-now-button-container\nvipbox.tv##.bet365-caption\nskysports.com##.betlink\nlshunter.tv##.bets\nracinguk.com##.bets_companies_logos\ngoal.com##.betting\ngoal.com##.betting-odds\ngoal.com##.betting-widget-default-2\nsportinglife.com##.betting_link\nbroadcastnewsroom.com##.bfua\nflixflux.co.uk##.bgBlue\nplaygroundmag.net##.bg_link\nbryanreesman.com##.bg_strip_add\nbiblegateway.com##.bga\nbiblegateway.com##.bga-footer\nsearch.yahoo.com##.bgclickable\noverclock3d.net##.bglink\nentrepreneur.com##.bgwhiteb\nsiouxcityjournal.com##.bidBuyWrapperLG\ndownload.cnet.com##.bidWarContainer\ncnet.com,techrepublic.com,zdnet.com##.bidwar\nfindarticles.com##.bidwarCont\nfuriousfanboys.com,regretfulmorning.com,viva.co.nz##.big-banner\ntorontolife.com##.big-box\nfamily.ca##.big-box-container\nchipchick.com,megafileupload.com,softarchive.net##.big_banner\ntomwans.com##.big_button[target=\"_blank\"]\ntoblender.com##.bigadd\nsoftpile.com##.bigadvs\nwasterecyclingnews.com##.bigbanner\ncomicbookresources.com,flyerland.ca,healthcentral.com,knoxnews.com,mysuburbanlife.com,nowtoronto.com,tcpalm.com,tiff.net##.bigbox\ntucsoncitizen.com##.bigbox_container\ncaller.com,commercialappeal.com,courierpress.com,gosanangelo.com,govolsxtra.com,independentmail.com,kitsapsun.com,knoxnews.com,naplesnews.com,redding.com,reporternews.com,tcpalm.com,timesrecordnews.com,vcstar.com##.bigbox_wrapper\nexclaim.ca##.bigboxhome\ntri247.com##.biglink\nwctk.com##.bigpromo\nabout.com,edmunds.com,motherjones.com,pep.ph,todaysbigthing.com##.billboard\nbre.ad##.billboard-body\neztv.ch##.bitx-button\nmywesttexas.com,ourmidland.com,theintelligencer.com##.biz-info\nyelp.be,yelp.ca,yelp.ch,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.au,yelp.com.sg,yelp.ie##.biz-photos-yloca\nslate.com##.bizbox_promo\nscienceworldreport.com##.bk-sidebn\narsenalnews.co.uk##.bkmrk_pst_flt\nuvnc.com##.black + table[cellspacing=\"0\"][cellpadding=\"5\"][style=\"width: 100%;\"]:last-child\nnowsci.com##.black_overlay\nkioskea.net##.bloc_09\njobmail.co.za##.block-AdsByJobMail\nap.org##.block-ap-google-adwords\nbravotv.com##.block-bravo_sponsored_links\nbiosciencetechnology.com,dinnertool.com,ecnmag.com,fastcocreate.com,fastcoexist.com,fastcompany.com,hollywoodreporter.com,lifegoesstrong.com,manufacturing.net,midwestliving.com,nbcsports.com,pddnet.com,petside.com,sfbg.com,theweek.co.uk,todayonline.com##.block-dart\nap.org,expertreviews.co.uk,fitpregnancy.com,itpro.co.uk,newsweek.com,weta.org##.block-dfp\nreflector.com##.block-dfp_plugin\nexaminer.com##.block-ex-dart\nvoxy.co.nz##.block-featured_offers\nfoxnews.com##.block-fox_yume\njobmail.co.za##.block-gads\nglobalgrind.com##.block-gg_dfp\ngardensillustrated.com,historyextra.com##.block-im_dfp\nandroidcentral.com##.block-mbn-offers\nmegagames.com##.block-megagames-header-ad\nvisitpa.com##.block-mmg-oas\nmotogp.com##.block-motogp_adserver\npddnet.com##.block-panels-mini\nphilstar.com##.block-philstar-ad\npraguemonitor.com##.block-praguetvads\nfootball-espana.net,football-italia.net##.block-story-footer-simag-banner\naccesshollywood.com##.block-style_deals\nautoexpress.co.uk##.block-taboola\nlaboratoryequipment.com##.block-title\nibtimes.com##.block-x90\naugusta.com##.block-yca_plugin\nworldtimebuddy.com##.block2\nmacmusic.org##.block440Adv\nalternativeto.net##.blockReplace\nilix.in##.blockUI\ntorrentz.cd##.block_10_full\nminiclip.com##.block_300x250\nminiclip.com##.block_300x250_holder\nminiclip.com##.block_300x250_sketchstar\nsoccerway.com##.block_match_widget_wrapper-wrapper\ntorrentz.cd##.block_tor_loc_full\nfilesharingtalk.com##.blocked\ndutchnews.nl##.blockleft\ngametracker.com##.blocknewhdrad\neconomist.com##.blog-sponsor\nsiliconvalley.com##.blogBox\npxleyes.com##.blogpostbanner\nredbookmag.com##.blogs_2_circ_offer\nanimeflv.net##.bloque_pos\nnapavalleyregister.com,pantagraph.com##.blox-leaderboard-container\ndowneu.net##.blq:first-child\nmnn.com##.blue-bottom\n4shared.com##.blueBanner\nfleetwatch.co.za##.blue_yjsg2_out\nfleetwatch.co.za##.blue_yjsg4_out\nbitcointalk.org##.bm-main\nusairways.com##.bmodule\nadlock.in##.bn\nchristianpost.com,parentherald.com##.bn728\nibtimes.co.uk,ibtimes.com##.bn_center_bottom_leaderboard_hd\ntinydl.link##.bnner\ndemonoid.pw##.bnnr_top\nelectronicsfeed.com,gatorzone.com,intelligencer.ca##.bnr\neuroweek.com##.bnr-top\ncarnewschina.com,thetycho.com##.bnr728\ninformer.com##.bnr_block\nforbes.com##.body > p > a[href^=\"http://www.newsletters.forbes.com/store?\"]\nmangahere.com##.body-bg-left\nmangahere.com##.body-bg-right\ncheatcc.com##.body-side-banner\nbillboard.biz##.bodyContent[style=\"padding-bottom:30px; text-align: center\"]\nnews.am##.bodybnr468\nbarrons.com##.boldGreyNine\nfrommers.com##.book-a-trip\nbiblegateway.com##.bookperks-section\ncmo.com.au,interiordesign.net##.boombox\nbangkokpost.com##.boomboxSize1\noverclock3d.net##.border-box-320\nthenextweb.com##.border-t.mt-2\nshare-links.biz##.border1dark\nbitcointalk.org##.bordercolor[width=\"100%\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"] > tbody > tr[class^=\"h\"] > td[class^=\"i\"]\nextratorrent.cc##.borderdark[style=\"padding: 5px;\"]\nhelenair.com##.bordered[align=\"center\"][width=\"728\"]\nafreecodec.com##.bornone\ntgun.tv##.bossPlayer\ndailynews.gov.bw##.bot-banner\ntrueslant.com##.bot_banner\ngofish.com##.botban1\ngofish.com##.botban2\nbankrate.com##.botbanner\npixdaus.com##.bottom\neplans.com,liligo.com,reverso.net,spanishdict.com##.bottom-banner\nlivehdq.info##.bottom-bar\nkaskus.co.id##.bottom-frame\nusatoday.com##.bottom-google-links\nphotographyreview.com##.bottom-leaderboard\ntheticketmiami.com##.bottom-super-leaderboard\nweatheroffice.gc.ca##.bottomBanner\nsofticons.com##.bottom_125_block\nsofticons.com##.bottom_600_250_block\nthemoscowtimes.com##.bottom_banner\nsecdigitalnetwork.com##.bottom_banners_outer\ngamenguide.com##.bottom_bn\neinthusan.com##.bottom_leaderboard\neinthusan.com##.bottom_medium_leaderboard\neinthusan.com##.bottom_small_leaderboard\nbroadcastnewsroom.com,mumbaimirror.com,softonic.com##.bottombanner\narcadebomb.com##.bottombox\ntechnologizer.com##.bottompromo\nexplainthatstuff.com##.bottomsquare\nfilediva.com##.bouton\njpost.com##.box-banner-wrap\noilprice.com##.box-news-sponsor\nphonedog.com##.box-rail-skyleft\nphonedog.com##.box-rail-skyright\naccuratefiles.com##.box-result\noilprice.com##.box-sponsors\nwebupd8.org##.box-top\nbmwblog.com##.box-top-leaderboard\nfins.com##.box.shadeA\nmalaysiastory.com,wahm.com##.box2\nfins.com##.box2.shadeB\nsenmanga.com##.box300x250\nmediadump.com##.box336\nsenmanga.com##.box480x90\ntrendhunter.com##.box600Container\njekoo.com##.boxItem\nyahoo.com.au##.boxMidRt.pB0\nefe.com##.boxPubli\nefe.com##.boxPubliBlanco\nfliiby.com##.box_300x250\nbrunei-online.com.bn##.box_banner\nbmwblog.com##.box_banners_125\nal.com,cleveland.com,masslive.com,mlive.com,nj.com,nola.com,pennlive.com##.box_grayoutline\nfindicons.com##.box_info\nashampoo.com##.box_recommend2\nlyricsmania.com##.boxcontent1\nelitistjerks.com##.boxl0aded\ndownloadbox.to##.boxpanjang\nbrainyquote.com##.bq_ad_320x250_multi\napa.az##.br-panel\nhardware.info##.br_top_container\nbrothersoft.com##.brand\nwashingtonpost.com##.brand-connect-module\nmapquest.com##.brandedBizLocSprite\nprimedia.co.za##.branding-sponsor\ncsoonline.com##.brandposts\n1310news.com,680news.com,news1130.com##.breaking-news-alerts-sponsorship-block\nbreak.com##.breaking_news\nbreak.com##.breaking_news_wrap\nthedailybeast.com##.breakout-item\nbreak.com##.brk_ldrbrd_wrap\ntechtipsgeek.com##.bsa-banner\nkarachicorner.com##.bsa180\nkarachicorner.com##.bsa300\nkarachicorner.com##.bsa336\ntwtmore.com##.bsa_wrap\nbloggertemplateplace.com##.bsainpost\nmysteriousuniverse.org,wbond.net##.bsap\neasyvectors.com,mangable.com,textmechanic.com,tutorial9.net,webdesign.org,winrumors.com##.bsarocks\nif-not-true-then-false.com##.bsarocks[style=\"height:250px;margin-left:20px;\"]\nif-not-true-then-false.com##.bsarocks[style=\"height:520px;\"]\nmmorpg.com##.bsgoskin\nwebopedia.com##.bstext\nvirginradiodubai.com##.bt-btm\nfenopy.se##.bt.dl\nmilesplit.com##.btf\nidolator.com##.btf-leader\ngamepedia.com,minecraftwiki.net##.btflb\ndiply.com##.btfrectangle\ndubai92.com,dubaieye1038.com##.btm-banner\ncricwaves.com##.btm728\nhelensburghadvertiser.co.uk,the-gazette.co.uk##.btn\nisohunt.to##.btn-bitlord\nmp3truck.net##.btn-danger\nbitlordsearch.com##.btn-download-bitlord\nadlock.in##.btn-info\ntorrents.net##.btn3\nclip.dj##.btnDownloadRingtone\nwhosampled.com##.btnRingtoneTrack\nlegendarydevils.com##.btn_dl\nwrc.com##.btns\nwrc.com##.btnswf\ngizmodo.com.au##.btyb_cat\nwhitepages.com##.business_premium_container_top\nswitchboard.com,whitepages.com##.business_premium_results\ntorrentbit.net##.but_down_sponsored\n1053kissfm.com##.button-buy\ntorrentbit.net##.button-long\nmiloyski.com##.button[target=\"_blank\"]\ndarelease.com,downarchive.com,keygenfree.org,mechodownload.com##.button_dl\nfreedownloadmanager.org,freedownloadscenter.com##.button_free_scan\n923jackfm.com,chez106.com,country1011.com,country1043.com,country600.com,foxradio.ca,kissnorthbay.com,kisssoo.com,listenlive.co,npr.org,thesoundla.com,tunegenie.com##.buy\ncpuboss.com,gpuboss.com,ssdboss.com##.buy-button\nawdit.com##.buy-link\noverclock.net##.buy-now\nair1.com##.buyIcon\nklove.com##.buyPanel\nlistenlive.co##.buySong\nsecurenetsystems.net##.buybutton\nzdnet.com##.buying-choices-2\ntrendir.com##.buyit\navsforum.com##.buynow\nmorningstar.com##.buyout_leader_cont\nbangkokpost.com##.buzzBoombox\nguanabee.com##.buzzfeedSubColPod\nbuzzillions.com##.bz-model-lrec\nfarmanddairy.com##.c-position-in-story\nbusinessdailyafrica.com,nation.co.ke,theeastafrican.co.ke##.c15r\nnationmultimedia.com##.c2Ads\nmaniacdev.com##.c4\ncanada411.ca##.c411TopBanner\ndealsonwheels.co.nz,farmtrader.co.nz,motorcycletrader.co.nz,tradeaboat.co.nz##.cBanner\nbrisbanetimes.com.au,theage.com.au,watoday.com.au##.cN-storyDeal\nfilepuma.com##.cRight_footer\nsmh.com.au,theage.com.au,watoday.com.au##.cS-compare\nsmh.com.au##.cS-debtBusters\ngoogle.com,~mail.google.com##.c[style=\"margin: 0pt;\"]\nuploading.com##.c_2\nria.ru##.c_banners\nmmosite.com##.c_gg\nnst.com.my##.cadv\nstreamtv1.in##.caf\nbonniegames.com##.caja_juegopubli\nwinnipegfreepress.com##.cal-sponsor\nieee.org##.callOutTitle\nkatu.com,keprtv.com,komonews.com,kval.com,kvi.com,star1015.com##.callout\nhgtvremodels.com##.cap\ndummies.com,tribe.net##.caption\nlonelyplanet.com##.card--sponsored\ncare2.com##.care2_horiz_adspace\nreceeve.it##.carousel\nyoutube.com##.carousel-offer-url-container\ntheberry.com,thechive.com##.carousel-sponsor\nludobox.com##.carrepub\noverstock.com##.cars-ad-localdeals\nhindilinks4u.to##.cat-featured\n123peppy.com##.cat-spacer\nhorsedeals.co.uk##.catalogueRightColWide\nrunnow.eu##.category-retail\ndealbreaker.com##.category-sponsored-content\ngirlsgogames.co.uk,girlsgogames.com##.categoryBanner\nretailmenot.com##.categorySponsor\nkibagames.com##.category_adv_container\noliveoiltimes.com##.category_advert\nmega-search.me##.catfish\ngetprice.com.au##.catin_side_mrec\ncoolspotters.com##.cau\nbitcoinreviewer.com##.cb-footer-a > .cb-one > #text-4\nbitcoinreviewer.com##.cb-footer-a > .cb-two > #text-5\ncryptocoinsnews.com##.cb-sidebar > #text-107\ncryptocoinsnews.com##.cb-sidebar > #text-44\ncryptocoinsnews.com##.cb-sidebar > #text-56\ncryptocoinsnews.com##.cb-sidebar > #text-61\ncryptocoinsnews.com##.cb-sidebar > #text-66\ncryptocoinsnews.com##.cb-sidebar > #text-84\ncryptocoinsnews.com##.cb-two > #text-38\ncbc.ca##.cbc-adv-wrapper\ncbc.ca##.cbc-big-box-ad\ncbc.ca##.cbc-promo-sponsor\ncareerbuilder.com##.cbmsnArticleAdvertisement\nwcco.com##.cbstv_top_one_column\ngivemefile.net##.ccb_cap_class_1\nbigwhite.com##.ccm-image-block\ninquirer.net##.cct-extended-ribbon\norange.co.uk##.ce-mpu\ntoptenreviews.com##.ceh_top_ad_container\nnick.com##.celebrity-sponsored\nmybrute.com##.cellulePub\nplaywinningpoker.com##.centban\nport2port.com,privateproperty.co.za##.centerBanner\nsiberiantimes.com##.centerBannerRight\nbookcrossing.com##.center[style=\"width:260px;\"]\nbookcrossing.com##.center[style=\"width:620px;\"]\nzippyshare.com##.center_reklamy\nsulekha.com##.centxt\ncfake.com##.cfakeSponsored\nyumfoodrecipes.com##.cfmonitor\ncfo.com##.cfo_native_ad\nhowstuffworks.com,internet.com##.ch\nustream.tv##.channelTopBannerWrapper\nsymptomfind.com##.channelfav\nbusinessinsider.com##.chartbeat\nforum.xda-developers.com##.checkOut\nmotorauthority.com##.chitika-listings\n4shared.com##.christmasBanner\nwsj.com##.cioMypro-marketing\nnewsfactor.com##.cipText\nsearch.com##.citeurl\n4shared.com##.citrioPromoLink\npost-gazette.com##.city-coupons-wrap\ncrooksandliars.com##.cl_ad_blocks-5\ncrooksandliars.com##.cl_ad_blocks-6\ncrooksandliars.com##.clam-google\ncrooksandliars.com##.clam-text\ntelegraph.co.uk##.classifiedAds\nuploading.com##.cleanlab_banner\nclgaming.net##.clg-footerSponsors\nyourepeat.com##.click-left\nyourepeat.com##.click-right\nhaaretz.com##.clickTrackerGroup\ninfobetting.com##.click_bookmaker\nthinkbroadband.com##.clickable-skin\nwindowsitpro.com##.close\nabconline.xyz##.close9\nwftv.com##.cmFeedUtilities\najc.com##.cmSponsored\nwsbtv.com##.cmSubHeaderWrap\nwftv.com##.cmToolBox\new.com##.cmWrapper\nmacleans.ca##.cmg_walrus\ngeektyrant.com##.cmn-side\n2dopeboyz.com##.cmn728x90\nmotorsport.com##.cmpFixedBox\ncnn.com##.cnnMosaic160Container\ncnn.com##.cnnPostAdHolder\nnascar.com##.cnnUpfrontContainer\ncnn.com##.cnn_SRLTbbn336a\ncnn.com##.cnn_cnn_widget_adtag\ncnn.com##.cnn_elxad300spc\ncnn.com##.cnn_sectprtnrbox_grpn325\neuropeancarweb.com,hotrod.com,truckinweb.com##.cnt-google-links-container\ntruckinweb.com##.cnt-google-wide\neuropeancarweb.com,hotrod.com##.cnt-sponsored-showcase\nicanbecreative.com##.codeg\nebookee.org##.codemain\nebookee.org##.codetop\ndisqus.com##.col-promoted\neuronews.com##.col-pub-skyscraper\n3v3.gg##.col-right2.mt10 a[target=\"_blank\"]\nnycgo.com##.colBBox\nshopping.aol.com##.col_asl\njamendo.com##.col_extra\nnaukri.com##.collMTp\nau.news.yahoo.com##.collection-sponsored\nquerverweis.net##.column-box > .column-box:first-child + .column-box[style=\"padding-top:10px\"]\nreverso.net##.columnBanner2\narcadebomb.com##.colunit1\ntelegraph.co.uk##.comDatingWidget\ntelegraph.co.uk##.comPuff\nworldstarhiphop.com##.comhead2 + .iframe[style=\"height:250px\"]\nexpat-blog.com##.comlnk\ngooglesightseeing.com##.comm-skyscraper\ngooglesightseeing.com##.comm-square\nabovethelaw.com##.comments-sponsor\ntripadvisor.ca,tripadvisor.co.uk,tripadvisor.com,tripadvisor.ie,tripadvisor.in##.commerce\nprevention.com##.commerce-block\ncapitalfm.com,capitalxtra.com,heart.co.uk,independent.co.uk,runningserver.com,smoothradio.com,standard.co.uk,thisislondon.co.uk,xfm.co.uk##.commercial\nsheptonmalletjournal.co.uk##.commercial-promotions\nindependent.co.uk##.commercialpromo\nheraldnet.com##.comp_DailyDealWidget\nverizon.com##.comp_container_marketplace\nblinkbox.com##.companion\n5min.com##.companion-banner\nbbyellow.com,bsyellow.com,businessdirectory.mu,businesslist.ae,businesslist.co.cm,businesslist.co.ke,businesslist.co.ug,businesslist.com.bd,businesslist.com.ng,businesslist.hk,businesslist.my,businesslist.net.nz,businesslist.ph,businesslist.pk,businesslist.sg,businesslist.tw,businesslist.vn,cambodiayp.com,caymanyellow.com,chileindex.com,colombiayp.com,dominicanyp.com,egypyp.com,ethiopiadirectory.com,georgiayp.com,ghanayp.com,indonesiayp.com,jmyellow.com,jpyellow.com,lebyp.com,lesothoyp.com,localbotswana.com,malawiyp.com,moroccoyp.com,myanmaryp.com,namibiayp.com,nepalyp.com,onlinebusinesslist.co.za,puertoricoindex.com,qataryp.com,rwandayp.com,saudianyp.com,senegalyp.com,sudanyp.com,tanzaniayp.com,thaigreenpages.com,tntyellow.com,tunisiayp.com,turkishyp.com,venezuelayp.com,yemenyp.com,zambiayp.com,zimbabweyp.com,zipinfo.in##.company_banner\nversusio.com##.compare_leaderboard\ndelish.com,msn.com##.conban1\nmsn.com##.condbanner2\ntheglobeandmail.com##.conductor-links\nthegameslist.com##.cont\nspoonyexperiment.com##.cont_adv\ntorrent-finder.info##.cont_lb\nbabylon.com,searchsafer.com##.contadwltr\nminiclip.com##.container-300x250\nina.fr##.container-pubcarre\njokersupdates.com##.container_contentrightspan\ntourofbritain.co.uk##.container_right_mpu\nbbh.cc##.content + .sidebar\nadfoc.us##.content > iframe\nflashgot.net##.content a[rel=\"nofollow\"][target=\"_blаnk\"]\nintouchweekly.com##.content-banner\ncrmbuyer.com,ectnews.com,linuxinsider.com,macnewsworld.com,technewsworld.com##.content-block-slinks\nsonglyrics.com##.content-bottom-banner\n1049.fm##.content-footer-promo\npwinsider.com##.content-left\npcmag.com##.content-links\nfunnyordie.com##.content-page-mrec\nfunnyordie.com##.content-page-mrec-container\nmysuburbanlife.com##.content-promo\nnewstalkzb.co.nz##.content-promos\nkiz10.com##.content-recomendados\npwinsider.com##.content-right\ncrmbuyer.com,ectnews.com,linuxinsider.com,macnewsworld.com,technewsworld.com##.content-tab-slinks\nfijilive.com##.content-top\nfuturesmag.com##.content-top-banner\nyellowpages.bw,yellowpages.co.ls,yellowpages.co.zm##.contentBannerHolderLarge\ngirlsgogames.com##.contentListSkycontainer\nseocentro.com##.contentTDRight[valign=\"top\"] > table[width=\"280\"][border=\"0\"][align=\"center\"][cellspacing=\"0\"][cellpadding=\"2\"]:first-child\nkohit.net##.content_banner_right\ngamefront.com##.content_bottom_cap\ndomainnamewire.com##.content_posts_promotion\nglobrix.com##.content_slots_for_results_container\niafrica.com##.content_sponsoredLinksBox\nvideobull.com##.contentlinkspecial\ngoodgearguide.com.au,pcworld.idg.com.au##.contentpage-boombox\nnexus404.com##.contentpostTAD\nsc2ranks.com##.contentright\ncoinurl.com##.contents\nhuffingtonpost.com##.contin_below\nbusinessinsider.com##.continue-link\nnetnewscheck.com##.continue-text\nnotcot.org##.conversationalist_outer\nlist25.com##.converter\nsharaget.com##.coollist\ncolumbian.com##.coupon-widget\nwnst.net##.coupon_block\nftadviser.com##.cpdSponsored\npoliticalwire.com##.cqheadlinebox\nmerriam-webster.com##.creative-300_BOT-container\nmerriam-webster.com##.creative-300_TOP-container\nplus.im##.creativeWrapper\ncgsociety.org##.creditcardAD\nforumpromotion.net##.crm[style=\"text-align: left;\"]\nwric.com##.csWxSponsor\ncelebuzz.com##.cs_banner728_top\ncandystand.com##.cs_square_banner\ncandystand.com##.cs_tall_banner\ncandystand.com##.cs_wide_banner\ncarsales.com.au##.csn-ad-preload\nvitorrent.net##.css_btn_class_fast\ncolumbian.com##.cta[style=\"margin-top: -10px;\"]\nterra.com##.ctn-tgm-bottom-holder\nfunny.com##.ctnAdBanner\nhomefinder.com##.cubeContainer\ncramit.in##.curved_box_no_shadow[style=\"width:977px;\"]\nforumpromotion.net##.custom-foot + .forumbg2\n101cargames.com##.custom-siteskin\nmalwarehelp.org##.custom_1_box\nannistonstar.com##.custom_hot_deal_image\njobhits.co.uk##.cvads\ncocomment.com##.cw_adv\nglumbouploads.com##.d0_728\nrapidok.com##.d_content[style=\"background:#FFFFFF url(/img/d1.gif) repeat-x scroll 0 86%;\"]\nthomasnet.com##.da\ndiply.com##.da-disclaimer\narabianindustry.com##.da-leaderboard\ntorrents.to##.da-top\nthedailywtf.com##.daBlock\ntesco.com##.dart\nallmovie.com##.dart-skyscraper\namericanphotomag.com,ecnmag.com,manufacturing.net,webuser.co.uk##.dart-tag\nwetv.com##.dart300x250Border\norange.co.uk##.dartlabel\ntorrent.cd##.data[style=\"margin-bottom: 0px; margin-top: 15px;\"]\nmrarrowhead.com##.dating_site_banner\nitv.com##.db-mpu\nfoobar2000.org##.db_link\nherald.co.zw##.dban\ndbforums.com##.dbfSubscribe[style^=\"display: block; z-index: 1002; \"]\nstartups.co.uk##.dc-leaderboard\nkibagames.com##.dc_color_lightgreen.dc_bg_for_adv\nohiostatebuckeyes.com##.dcad\nelitistjerks.com##.dcc\ngas2.org##.dd_outer + p + center + br + br + p + table\ntrutv.com##.ddad\nbts.ph,btscene.eu##.ddl_det_anon\nbtscene.eu##.ddl_srch\nhdtvtest.co.uk##.deal\nazstarnet.com,poststar.com,wcfcourier.com##.deal-container\nkmov.com##.dealLeft\nkmov.com##.dealRight\nmsnbc.msn.com,nbcnews.com##.deals\npcworld.idg.com.au##.deals-box\nkusports.com##.deals_widget\nmacobserver.com##.dealsontheweb\nsmh.com.au##.debtBusters\nsmashingmagazine.com,tripwiremagazine.com##.declare\ndelfi.lt##.delfi-ads-block\nwsj.com##.deloitte_disclaimer\nsoftpile.com##.desadvs\nmindspark.com,myway.com,mywebsearch.com##.desc\nmysearch.com##.desc > div\ngood.is##.description\nnorthjersey.com##.detail_boxwrap\nnorthjersey.com##.detail_pane_text\nmp3juices.com##.details + span[style=\"font-size:80%;\"]:last-child\nheroturko.me##.detay\nonlinerealgames.com##.df3\nmarinmagazine.com,scpr.org,shop.com,urbandictionary.com##.dfp\npremier.org.uk,premierchildrenswork.com,premierchristianity.com,premierchristianradio.com,premiergospel.org.uk,premieryouthwork.com##.dfp-block\nhealthline.com##.dfp-lb-wrapper\ntechradar.com##.dfp-leaderboard-container\ngreatist.com,neurope.eu##.dfp-tag-wrapper\nsodahead.com##.dfp300x250\nsodahead.com##.dfp300x600\nket.org##.dfp_primary\nimdb.com##.dfp_slot\npremier.org.uk,premierchildrenswork.com,premierchristianity.com,premierchristianradio.com,premiergospel.org.uk,premieryouthwork.com##.dfp_strip\ndafont.com##.dfsmall[style=\"background:#fff\"]\ndafont.com##.dfxsmall[style=\"text-align:right;color:#999\"]\nhpcwire.com##.diana\nreference.com##.dic_bk\nzdnet.com##.dirListSuperSpons\n1337x.to,flmsdown.net,torrentdownloads.net,vertor.com##.direct\nfenopy.unblock.pro,unblock-proxybunker.co.uk##.direct-dl\n1337x.org##.directDL\nkat.ph##.directDownloadButton\nseedpeer.eu,sumotorrent.sx##.directStreaming\nsumotorrent.sx##.directStreamingText\nsoftarchive.net##.direct_download\nworld-airport-codes.com##.directory-airport\nnews.com.au##.disclaimer-footer\nchacha.com##.disclosure\n1cookinggames.com,yokogames.com##.displaygamesbannerspot3\nhellopeter.com##.div1\nhellopeter.com##.div2\nespncricinfo.com##.div300Pad\naniweather.com##.divBottomNotice\naniweather.com##.divCenterNotice\nalternativeto.net##.divLeaderboardLove\nisraelnationalnews.com##.divTopInBox\nhellobeautiful.com##.diversity-one-widget\nsearch.ovguide.com##.dl:first-child\nmediafire.com##.dlInfo-Apps\nbitsnoop.com##.dl_adp\nbitsnoop.com##.dl_alt2\ndownload3k.com##.dl_button\nbitsnoop.com##.dl_bv\nbitsnoop.com##.dl_secure\ntorrentcrazy.com##.dlf\nfree-tv-video-online.me##.dloadf\nfree-tv-video-online.me##.dloadh\nfree-tv-video-online.me##.dloadt\norlydb.com##.dlright\ndreammining.com##.dm-adds\ndailymotion.com##.dmpi_masscast\nisup.me##.domain + p + center:last-child > a:first-child\ni4u.com##.dotted\ngearlive.com##.double\ntechtipsgeek.com##.double-cont\nbigtop40.com,capitalfm.com,capitalxtra.com,dirtymag.com,kingfiles.net,win7dl.com##.download\ntorrents.de,torrentz.ch,torrentz.com,torrentz.eu,torrentz.in,torrentz.li,torrentz.me,torrentz.ph,torrentz.unblockt.com##.download > h2 + dl > dd\nturbobit.net##.download-area-top\nhost1free.com##.download-block\ngeneralfiles.me##.download-button\nawdit.com##.download-right-add\nturbobit.net##.download-top\ntorentilo.com##.downloadBlock > .downloadButton\nwupload.com##.downloadOptionFooter\ntubeplus.me##.download_emule\ncandystand.com##.download_free_games_ad\nfileshut.biz,fileshut.com##.download_item2\ndownload-movie-soundtracks.com##.download_link > .direct_link\nfileserve.com##.download_meagaCloud\nprimewire.ag##.download_now_mouseover\nload.to##.download_right\nfilediva.com##.download_top\nfileshut.biz,fileshut.com##.download_top2\nbrothersoft.com##.downloadadv\nbrothersoft.com##.downloadadv1\nbrothersoft.com##.downloadadv3\ndefenseindustrydaily.com##.downloads\nvertor.com##.downweb\nbillionuploads.com##.dowpdb\nvcdq.com##.dp-widget\nequestriadaily.com##.drgwefowiehfoiwe\nashampoo.com##.driverupdater\nmovietrailers.yt##.drt\njournalnow.com##.dt_mod\ndigitaltrends.com##.dtads-slot\ngoogleping.com,search.com##.dtext\ndarkreading.com##.dualRight\ndressupcraze.com##.duc-160\ndressupcraze.com##.duc-728\nbloomberg.com##.dvz-widget-sponsor\nwebmd.com##.dynbm_wrap\nespnwatch.tv##.dzt\nwatchreport.com##.e3lan300_250-widget\nstream2watch.com##.ea\nsearch.yahoo.com##.eadlast\ncnet.com.au##.ebay\namateurphotographer.co.uk##.ebay-deals\ncarandclassic.co.uk##.ebayRSS\ngumtree.com##.ecn-display-block\necosia.org##.ecolink-search-result\nteenvogue.com##.ecom-placement\nsmashingmagazine.com##.ed\nsmashingmagazine.com##.ed-us\ntimeoutabudhabi.com##.editoral_banner\ndailymail.co.uk##.editors-choice.ccox.link-ccox.linkro-darkred\nexperts-exchange.com##.eeAD\nbostonmagazine.com##.eewidget\nnotebooks.com##.efbleft\nfacebook.com##.ego_spo\npriceonomics.com##.eib-banner\nlyrster.com##.el_results\nplaybill.com##.embedded-banner\nsoccerstand.com##.enet_banner_container\nmoviefone.com##.ent_promo_sidetexttitle\nlfpress.com##.entertainmentSponsorshipContainer\ncryptocoinsnews.com##.entry-content > center > .mobile\ncbslocal.com,radio.com##.entry-injected-block\nradaronline.com##.entry-meta > div[style=\"width:637px;height:224px;\"]\ninfoq.com##.entrysponsors\nwrytestuff.com##.eoc250\nelectronicproducts.com##.ep-boombox-advertisment\nmsnbc.msn.com,nbcnews.com##.eshopStory\neasyvoyage.co.uk##.esv-pub-300-250\nsearchenginejournal.com##.even\nmiami.com##.expedia-widget\nnytimes.com##.expediaBooking\nmercurynews.com##.expertBox\nddlvalley.net##.ext-link\ncryptocoinsnews.com,torrents.net##.external\nsmithsonianmag.com##.external-associated-products\nrealestate.co.nz##.externalLinkBar\nthefinancialexpress-bd.com##.extraLink\ntucows.com##.f11\nindia.com##.fBannerAside\ncomputerworld.co.nz##.fairfax_nav\ninturpo.com##.fake_embed_ad_close\nflixflux.co.uk##.fan\ncommentarymagazine.com##.fancybox-wrap\nfreshwap.net##.fast\nmight.net##.fat-container\nsmarter.com##.favboxmiddlesearch\nsmarter.com##.favwrapper\nfacebook.com##.fbAdUnit\nfacebook.com##.fbEmu\nfacebook.com##.fbEmuBlock\nfacebook.com##.fbEmuComboList\nfacebook.com##.fbEmuEgo\nfacebook.com##.fbEmuEgoUnit\nfacebook.com##.fbEmuLink\nfacebook.com##.fbPhotoAdsCol\nfacebook.com##.fbTimelineSideAds\ntormovies.org##.fbd-banner\nsharkscope.com##.fbstyle\nbankrate.com##.fcAdGrey\nwebcenters.netscape.compuserve.com##.fcCntnr\nebay.com##.fdad1\nfiredrive.com##.fdad_container\ninvestopedia.com##.fe-sponsorbox\nghanaweb.com##.featLks\nreason.com##.feature\nwowheadnews.com##.feature-aside\nfindthatfile.com,lifestyle.yahoo.com,simplyhired.com,yellowpages.com##.featured\nrecombu.com##.featured-deal\nsidereel.com##.featured-episode-link\neverydayhealth.com##.featured-group\nsiliconrepublic.com##.featured-partners\npcauthority.com.au##.featured-retailers\ngeekwire.com##.featured-sponsor\ntop1000.ie##.featured300x260\n24hrs.ca,lfpress.com##.featuredBusinesses\ninfoworld.com##.featuredSponsor-strip\nwhitepages.ae##.featured_companies_bg_main\nmousebreaker.com##.featured_games_band\ncandystand.com##.featured_partners_title\nid-box.biz##.featuredlinksBox\nolx.co.nz##.featuredtitlepremium\nindia.com##.ff-sponser\ncnn.com##.fg_presentedBy\nstuff.tv##.field-field-promo-node-teaser\navaxhm.com,avaxhome.ws##.file-express\nrapidlibrary.com##.file-recommend\nrapidlibrary.com##.file-urls\nrapidlibrary.com##.file-urls2\nkdvr.com##.filler\ncokeandpopcorn.com##.filler728\ndailyfinance.com##.finance-partners\nadn.com,bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,enquirerherald.com,fortmilltimes.com,fresnobee.com,heraldonline.com,idahostatesman.com,islandpacket.com,kentucky.com,lakewyliepilot.com,ledger-enquirer.com,macon.com,mercedsunstar.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sanluisobispo.com,sunherald.com,thestate.com,tri-cityherald.com##.findnsave_combo\nkatu.com##.fisher468\nflashvids.org,wfgo.net##.fixe\nfacebook.com##.fixedAux .pbm\nbelgie.fm,danmark.fm,deutschland.fm,england.fm,espana.fm,india.fm,italia.fm,lafrance.fm,nederland.fm,norge.fm,polskafm.pl,sverige.fm,thestates.fm##.fl.banbo\nbelgie.fm,danmark.fm,deutschland.fm,england.fm,espana.fm,india.fm,italia.fm,lafrance.fm,nederland.fm,norge.fm,polskafm.pl,sverige.fm,thestates.fm##.fl.m\nalwatanvoice.com##.flash-160x600\nalwatanvoice.com##.flash-728x90\nletitbit.net##.flash-not-found\ncanberratimes.com.au##.flashfloater\ncontactmusic.com##.flexibleLeaderboard\ntennisearth.com##.flexslider\ngsmchoice.com##.floatLeft\ntradekey.com##.float_left\nnotcot.com##.floatbox\nfeatve.com,filotv.pw,foxsports-la.com,notcot.com,nowwatchtvlive.com,xuuby.com,zonytvcom.info##.floater\ntreehugger.com##.floater-indiv\nzylom.com##.floor_wrapper\nhtmldog.com##.flower\namctheatres.com##.flt-ad-strut\nadcrun.ch,bc.vc##.fly_frame\nnewsobserver.com##.focus_box\ninquirer.net##.fontgraysmall\ngreatbritishlife.co.uk##.foot-banners\nradiozindagi.com##.foot_top\ndonegaltv.ie##.footer\nksstradio.com,spectator.co.uk##.footer-banner\ndirectorslive.com##.footer-banner-img\ntorhead.com##.footer-bg\nwowhead.com##.footer-bgimg\nxbitlabs.com##.footer-cap\npeople.com,peoplestylewatch.com##.footer-cmad\nstandardmedia.co.ke##.footer-full-banner\n931dapaina.com,allmusic.com##.footer-leaderboard\nthecinemasource.com##.footer-marketgid\ngetswiftfox.com##.footer-right\nlivebasketball.tv##.footer-sponsor\nsharksrugby.co.za,timestalks.com##.footer-sponsors\nsearchenginejournal.com##.footer-unit\nbtn.com##.footer-widgets\nhd-trailers.net##.footer-win\ntwentytwowords.com##.footer-zone\nnickutopia.com##.footer728\nthegamingsource.co##.footerBanner\nwikinvest.com##.footerBrokerageCenter\nsocwall.com##.footerLinks\nbundesliga.com##.footerPartners\nlondonlovesbusiness.com##.footerPartnerships\nzynga.com##.footerPromo\nabc.go.com##.footerRow\ncartoonnetworkasia.com##.footerWrapper\njarkey.net##.footer_728\nsundownsfc.co.za##.footer_add\njackfm.co.uk,satbeams.com##.footer_banner\nelectronista.com##.footer_content_wrapper\nmaxgames.com##.footer_leaderboard\nmorningstar.in##.footer_links_wrapper\nscotsman.com##.footer_top_holder\ndatamation.com##.footerbanner\neurocupbasketball.com,euroleague.net##.footersponsors-container\nvideojug.com##.forceMPUSize\nalphacoders.com##.form_info\nnorthcoastnow.com##.formy\nmotorhomefacts.com##.forum-promo\nthewarezscene.org##.forumbg\nb105.com##.fourSquare_outer\nbc.vc##.fp-bar-dis\nautotrader.co.uk##.fpa-deal-header\nyahoo.com##.fpad\ntvguide.com##.franchisewrapper\nfreedom.tm##.frdm-sm-ico\nseedpeer.eu,sumotorrent.sx##.freeDirect\nwatch-series.ag,watch-tv-series.to,watchseries.ph##.freeEpisode\nempowernetwork.com##.free_video_img\nmegashare.com##.freeblackbox\nmegashare.com##.freewhitebox\nwharton.upenn.edu##.friend-module\nspanishcentral.com##.from_spanish_central\nexecutivetravelmagazine.com##.ft-add-banner\nportalangop.co.ao,top1walls.com##.full-banner\nmarilyn.ca##.full-width.leaderboard\nwikinvest.com##.fullArticleInset-NVAdSlotComponent\ni4u.com##.fullStoryHeader + .SidebarBox\nmonitor.co.ug##.fullbanner\nptinews.com##.fullstoryadd\nptinews.com##.fullstorydivright\nratebeer.com##.fums\nwebmd.com##.funded_area\npenny-arcade.com##.funding-horizontal\npenny-arcade.com##.funding-vertical\nmattgemmell.com##.fusion_attrib_footer\nchrisbrownworld.com,myplay.com##.fwas300x250\nmasterworksbroadway.com##.fwas728x90_top\nnofilmschool.com##.g-leader\nprokerala.com##.gAS_468x60\ntitantv.com##.gAd\nabout.com##.gB\nfree-games.net##.gPBoxAD\nsearch.babylon.com##.gRsAdw\nsearch.babylon.com##.gRsSlicead\nclaro-search.com,isearch.babylon.com,search.babylon.com##.gRsTopLinks\ncolorgirlgames.com##.g_160X600\npopgals.com##.g_adt\nforum.freeadvice.com##.g_info\nambulance-photos.com,bus-and-coach-photos.com,campervan-photos.com,classic-and-vintage-cars.com,construction-and-excavation.com,fire-engine-photos.com,military-vehicle-photos.com,motorcycles-motorbikes.com,oilrig-photos.com,planesandchoppers.com,police-car-photos.com,racing-car-photos.com,shipsandharbours.com,taxi-photos.com,traction-engines.net,tractor-photos.com,train-photos.com,transport-models.com,truck-photos.net,yourboatphotos.com##.ga200[style=\"width:250px;height:250px;float:right;margin:5px 5px 5px 10px;\"]\ncelebrityrumors.com,embarrassingissues.co.uk,page2rss.com##.gad\nenotalone.com##.gadb\nsnowboarding-essentials.com##.gadbdrtxt\ngamerant.com##.gads\ntoptenwholesale.com##.gads-home-bottom\ninserbia.info##.gads250\ntelegraph.co.uk##.gafs\nbehance.net##.gallery-sponsor\ncitywire.co.uk##.gallerySponsor\nkoreaherald.com##.gallrym[style=\"margin:15px auto; padding-top:0px;height:130px;\"]\npcper.com,thedrum.co.uk,thefix.com,tribalfootball.com##.gam-holder\n9news.com,bloomberg.com,businessweek.com,courier-journal.com,theleafchronicle.com,thestarpress.com,usaweekend.com##.gam_wrapper\naddictinggames.com##.gameHeaderSponsor\nkibagames.com##.game__bottomInfoRightContainer\ncandystand.com##.game_banner_300\nmuchgames.com##.gamead\nmonstertruckgames.org##.gamecatbox\ncartoondollemporium.com##.games_dolls_ads_right300x250\nadultswim.com##.gametap-placement\nmovieonmovie.com##.gapad\nmoviesplanet.com##.gb\ncanberratimes.com.au##.gbl_advertisementgrey\ncanberratimes.com.au,illawarramercury.com.au##.gbl_disclaimer\nillawarramercury.com.au##.gbl_section\nviamichelin.co.uk,viamichelin.com##.gdhBlockV2\ngeekwire.com##.geekwire_sponsor_posts_widget\nescapehere.com##.gemini-loaded\nbecclesandbungayjournal.co.uk,burymercury.co.uk,cambstimes.co.uk,derehamtimes.co.uk,dunmowbroadcast.co.uk,eadt.co.uk,edp24.co.uk,elystandard.co.uk,eveningnews24.co.uk,fakenhamtimes.co.uk,greenun24.co.uk,huntspost.co.uk,ipswichstar.co.uk,lowestoftjournal.co.uk,northnorfolknews.co.uk,pinkun.com,royston-crow.co.uk,saffronwaldenreporter.co.uk,sudburymercury.co.uk,thecomet.net,thetfordandbrandontimes.co.uk,wattonandswaffhamtimes.co.uk,wisbechstandard.co.uk,wymondhamandattleboroughmercury.co.uk##.generic_leader\ngreenun24.co.uk,pinkun.com##.generic_sky\nuefa.com##.geoTargetSponsorHeader\nhealth24.com##.get_quote\ncanoe.ca##.getdeals\narizonasports.com##.gfp\nksl.com##.gfp-slot\nktar.com##.gfp300250\nmediacoderhq.com##.gg1\nbitcomet.com##.gg728\ncometbird.com##.gg_250x250\naplus.com##.ggnoads\nebay.com##.ggtm\ngethuman.com##.gh-ads\nmacworld.co.uk##.ghostMpu\nhotfileserve.ws##.glb-opec\nbikeradar.com##.global-banner\ntripadvisor.com##.goLists\nastro.com##.goad\nnewburytoday.co.uk,thelakewoodscoop.com##.gofollow\nneogaf.com##.goodie300\nneogaf.com##.goodie728\ncomputershopper.com##.goog\ncomplaintsboard.com##.goog-border\neurodict.com##.googa\nthenassauguardian.com##.googlAdd\n95mac.net,africanadvice.com,appdl.net,freepopfax.com,pspad.com##.google\neuronews.com##.google-banner\nnymag.com##.google-bottom\nzenit.org##.google-dfp\nnews-journalonline.com##.google-entry\ni-dressup.com##.google-iframe\ntreehugger.com##.google-indiv-box2\nrt.com##.google-top-banner\n1pic4twenty.co.za##.google160600\ndownloadatoz.com##.google300_bg\ndownloadatoz.com##.google300_title\nindependent.co.uk##.googleCols\ninooz.co.uk##.googleContainer\ndealspl.us##.googleDealBottom\ncomplaints.com##.googleTop\nbridalbook.ph##.google_srec\nhoobly.com##.googlecont\n1pic4twenty.co.za##.googlefat\nhitfix.com##.googlewide\nquizlet.com##.googlewrap\ncomplaintsboard.com##.googtop\nwhatismyip.com##.gotomypc\ncss3generator.com##.gotta-pay-the-bills\ndisney.com##.gpt\nbelfasttelegraph.co.uk##.grabOnePromo\nslantmagazine.com##.gray_bg\nslantmagazine.com##.gray_bgBottom\ngreatandhra.com##.great_andhra_main_add_rotator\ncool-wallpaper.us##.green\nbusinessdictionary.com##.grey-small-link\nbackstage.com##.greyFont\nteamrock.com##.grid-container-300x250\nitproportal.com##.grid-mpu\nncaa.com##.grid[style=\"height: 150px;\"]\ndawn.com##.grid__item.one-whole.push-half.visuallyhidden--palm\ncouriermail.com.au,dailytelegraph.com.au,news.com.au##.group-network-referral-footer\neztv-proxy.net,eztv.ch##.gsfc\nbollywoodtrade.com##.gtable[height=\"270\"][width=\"320\"]\n11alive.com,13wmaz.com,9news.com,digtriad.com,firstcoastnews.com,kare11.com,ksdk.com,news10.net,thv11.com,wbir.com,wcsh6.com,wgrz.com,wkyc.com,wlbz2.com,wltx.com,wtsp.com,wusa9.com,wzzm13.com##.gtv_728x90_container\nwaz-warez.org##.guest_adds\nwheels24.co.za##.gumtree_component\nanimenewsnetwork.com##.gutter\nkovideo.net##.h-728\nthemarknews.com##.h-section1\nlyricsmode.com##.h113\namw.com,superiorpics.com##.h250\nlyricsmode.com##.h253\ndealsonwheels.co.nz,farmtrader.co.nz##.hBanner\nall-shares.com##.hSR\nkeepvid.com##.h[style=\"padding:0px;width:760px;\"]\nmonitor.co.ug,thecitizen.co.tz##.halfbanner\nblinkbox.com##.halfmpupnl\nruntastic.com##.halfpage\npep.ph##.halfpage-wrapper\nsbnation.com,theverge.com##.harmony-sponsorship\nmlb.mlb.com##.has-ads\nsearch.yahoo.com##.has-sma-box\ndenverpost.com##.hatad\nthesimsresource.com##.hb\nzeefood.in##.hbanner2\nchronicle.co.zw,herald.co.zw##.hbanners\nscreenindia.com##.hd\nwebtoolhub.com##.hdShade\npbnation.com##.hdrLb\npbnation.com##.hdrSq\ncaymannewsservice.com##.head-banner468\nvogue.co.uk##.headFullWidth\nmariopiperni.com,tmrzoo.com##.headbanner\nbitcoinreviewer.com##.header > .wrap > .cb-large\niaminthestore.com##.header > div > div[style=\"text-align:center;margin:0 auto\"]\nynaija.com##.header-728\namericanfreepress.net,freemalaysiatoday.com,hotfrog.co.uk,islamchannel.tv,ksstradio.com,landandfarm.com,mashable.com,soccer24.co.zw,wow247.co.uk##.header-banner\nvapingunderground.com##.header-block\nthedailystar.net##.header-bottom-adds\nexpressandstar.com,guernseypress.com,jerseyeveningpost.com,shropshirestar.com,thebiggestloser.com.au##.header-leaderboard\nnatureasia.com##.header-leaderboard-wrap\nqueenscourier.com##.header-left\nspyka.net##.header-link\ntimes.co.zm##.header-pub\nlyricsbogie.com,queenscourier.com##.header-right\nbh24.co.zw##.header-right-banner-wrapper\nhtxt.co.za##.header-sub\nprovidencejournal.com,southernliving.com##.header-top\nastronomynow.com##.header-widget\nhd-trailers.net##.header-win\nfunnycatpix.com,notsafeforwhat.com,rockdizmusic.com##.header728\nonegreenplanet.org##.header728container\nthelakewoodscoop.com##.headerPromo\ntelegraph.co.uk##.headerThree\nbastropenterprise.com##.headerTop\ndomainnamewire.com,electricpig.co.uk,gaijinpot.com,squidoo.com##.header_banner\nkpopstarz.com##.header_bn\nvidxden.com##.header_greenbar\nsteadyhealth.com##.headerboard\nbangtidy.net##.headlineapa_base\nmetrolyrics.com##.here\nhi5.com##.hi5-common-header-banner-ad\nclassiccars.com##.hia_banner\n4shared.com##.hiddenshare\nletitbit.net##.hide-after-60seconds\ntheguardian.com##.hide-on-popup\nxtshare.com##.hideLink\nmobilesyrup.com##.hide_768\ntorentilo.com##.highSpeed\nall-shares.com##.highSpeedResults\nsiteslike.com##.highlighted\ndailycurrant.com##.highswiss\nskins.be##.hint\nserverfault.com,stackoverflow.com##.hireme\nghanaweb.com##.hmSkyscraper\nhindustantimes.com##.hm_top_right_localnews_contnr_budget\n1027dabomb.net##.home-300\nbroadway.com##.home-leaderboard-728-90\nwowhead.com##.home-skin\nnetweather.tv##.home300250\ngreatdaygames.com##.home_Right_bg\nwpbt2.org##.home_banners\nhpe.com##.home_leaderboard\njustdubs.tv##.home_leftsidbar_add\nwdwmagic.com##.home_upper_728x90\nsecuritymattersmag.com##.homeart_marketpl_container\nnews1130.com##.homepage-headlines-sponsorship-block\nmancunianmatters.co.uk##.homepage-leader\nsunshinecoastdaily.com.au##.homepageContainerFragment\nindependent.co.uk##.homepagePartnerList\nsmashingmagazine.com##.homepagepremedtargetwrapper\nphonebook.com.pk##.homeposter\nherold.at##.homesponsor\nnationalreview.com##.homie_storydiv\ninaruto.net##.honey-out\nhoovers.com##.hoov_goog\nlimelinx.com##.horLrgBanner\nsearch.yahoo.com##.horiz\nesecurityplanet.com##.horiz-banner\nlushstories.com##.horizhide\nhilarious-pictures.com,soft32.com##.horizontal\nforlocations.com##.horizontalBanner\nafro.com##.horizontalBanners\nytmnd.com##.horizontal_aids\nhorror.break.com##.horror-ad\nhorror.break.com##.horror-adlabel\nhotscripts.com##.hostedBy\nloaded.co.uk##.hot_banner_mpu\nmaps.google.com##.hotel-partner-item-sponsored\nmaps.google.com##.hotel-price\nzdnet.com##.hotspot\neuropeancarweb.com##.hp-leadertop\nrte.ie##.hp-mpu\nhuffingtonpost.com##.hp-ss-leaderboard\nworldweatheronline.com##.hp_300x250_left\nworldweatheronline.com##.hp_300x250_right\nsurfline.com##.hp_camofday-ad\nitp.net##.hpbanner\nnairaland.com##.hpl\nnairaland.com##.hpr\nv3.co.uk##.hpu\nnairaland.com##.hrad\nblog.recruitifi.com##.hs-cta-wrapper\nfiletram.com##.hsDownload\nusatodayhss.com##.hss-background-link\nsfgate.com##.hst-leaderboard\nchron.com,mysanantonio.com,seattlepi.com,sfgate.com##.hst-siteheader > .row1\nctpost.com##.hst-topclassifieds\nseattlepi.com##.hst-travelzoo\nchron.com,mysanantonio.com##.hst-ysm\nrarlab.com##.htbar + .tplain + table[width=\"100%\"][border=\"0\"] + table[width=\"100%\"][border=\"0\"]\npcmag.com##.htmlModule\nchannelinsider.com##.html_module\nvertor.com##.http\nhelpwithsmoking.com##.hws\nanimenewsnetwork.com##.iab\nbreak.com##.iab-300x250\nbreak.com##.iab-label\nbastropenterprise.com##.iabMedRectContainer\ntripadvisor.com##.iab_medRec\nwhattoexpect.com##.iabicon\ninfobetting.com##.ibBanner\ncoolest-gadgets.com##.iboxmiddle\nfileserve.com##.ico_mcLogo\nbitsnoop.com##.icon + a + div[style=\"float:right\"]:last-child\nshockwave.com##.icon16AdChoices\nnme.com##.icon_amazon\nthebull.com.au##.iconos\ncaughtonset.com##.idlads_widget\nindianexpress.com##.ie2013-topad\nheraldsun.com.au##.iframe-316x460\ngirlsgogames.com##.iframeHolder\ncnet.com##.iframeWrap\nworldstarhiphop.com##.iframe[style=\"height:285px;overflow:hidden;vertical-align:top;\"]\ntorrentfusion.com##.iframenull\nihavenet.com##.ihn-ad-1\nihavenet.com##.ihn-ad-2\nihavenet.com##.ihn-ad-3\nimpactlab.net##.ilad\nfiletram.com##.ilividDownload\nintomobile.com##.im_970x90\nsen.com##.image_caption_div\nimgfave.com##.image_login_message\ngifsoup.com##.imagead\nglobalgrind.com##.imagecache-article_images_540\nblessthisstuff.com##.imagem_sponsor\nlaineygossip.com##.img-box\nnewsbtc.com##.img-responsive\nweather.msn.com##.imglink1.cf\nexchangerates.org.uk##.imt4\ncomputerworld.com,infoworld.com##.imu\npopdust.com##.in\npolitico.com##.in-story-banner\nnetworkworld.com##.incontent_ata\nautoline-eu.co.uk,autoline-eu.co.za,autoline-eu.ie,autoline.info##.index-center-banners-1\nsocialitelife.com##.index-inser\nautoline-eu.co.uk,autoline-eu.co.za,autoline-eu.ie,autoline.info##.index-main-banners\nyouplay.com##.index-medium-rectangle\nabcnews.go.com##.index-quigo\nautoline-eu.co.uk,autoline-eu.co.za,autoline-eu.ie,autoline.info##.index-secondary-banners\nvaughnlive.tv##.indexContentRight\nvosizneias.com##.index_02_perms\nelivetv.in,torrentz.me##.info\ncnet.com##.infoboardWrap\nmp3boo.com##.infolinks\ntvguide.com##.infomercial\neasybib.com##.inline-help[href=\"/reference/help/page/ads\"]\n4kq.com.au,961.com.au,973fm.com.au,cruise1323.com.au,gold1043.com.au,mix1011.com.au,mix1023.com.au,mix106.com.au,mix1065.com.au,tmz.com,wsfm.com.au##.inline-promo\nnewsweek.com##.inline-promo-link\npixdaus.com##.inlineBanner\ntorrentfusion.com##.innards[style=\"padding-top: 15px;\"]\nbrightsideofnews.com##.inner-banner-72890\ncartoonnetwork.com##.inner266\nmedical-hypotheses.com##.innerBanner\ncnet.com##.innerMPUwrap\ntelegraph.co.uk##.innerPlugin\nbloggerthemes.net##.inner_banner\nroutes-news.com##.insightbar\nicanhascheezburger.com##.instream\nratemyteachers.com##.intelius\nitweb.co.za##.intelli-box\negmnow.com##.inter_vid\nbullz-eye.com##.internal_rn_plug_block\ngizmodo.co.uk##.interruptor\nozy.com##.interstitial\nkomando.com##.interstitial-wrapper\n12ozprophet.com##.intro\njango.com##.intro_block_module:last-child\npicapp.com##.ipad_300_250\npicapp.com##.ipad_728_90\ninvestorplace.com##.ipm-sidebar-ad-text\ntwitter.com##.is-promoted\ntelegraph.co.uk##.isaSeason\nveehd.com##.isad\ndrivearcade.com,freegamesinc.com##.isk180\nabovethelaw.com,dealbreaker.com,itwire.com##.island\nnzgamer.com##.island-holder\ntimesofisrael.com##.item-spotlight\nclassifiedads.com##.itemhispon\nclassifiedads.com##.itemlospon\nvideopremium.tv##.itrack\nair1.com,juicefm.com,pulse1.co.uk,pulse2.co.uk,signal1.co.uk,signal2.co.uk,swanseasound.co.uk,thecurrent.org,thewave.co.uk,three.fm,wave965.com,wirefm.com,wishfm.net##.itunes\nliquidcompass.net##.itunes_btn\nixigo.com##.ixi-ads-header\nliveleak.com##.j_b\nliveleak.com##.j_t\ncareerone.com.au##.job-search-tower-ad\nallthingsd.com##.jobs-module\nbnd.com##.jobs_widget_large\nninemsn.com.au##.jobsearchBox\ntoorgle.net##.join\nmixcloud.com##.js-dfp-mpu\ncareerbuilder.com##.jsHomeSpotBanner\ndeadspin.com,gawker.com,gizmodo.com,io9.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com##.js_promoted\nworldofgnome.org##.jumbotron\nmarketingvox.com##.jupitermedia\njoomlarulez.com##.jwplayer2\njoomlarulez.com##.jwplayer4\nrocvideo.tv##.jwpreview\nsfgate.com##.kaango\nnews24.com##.kalahari_product\nnews24.com##.kalwidgetcontainer\nimgism.com##.kevin-lb\nalarabiya.net##.killer\nmbc.net##.killerbanner\nvivastreet.co.uk##.kiwii-box-300x250\ntechspot.com##.konafilter\nherold.at##.kronehit\nbusinessinsider.com##.ks-recommended\nlenteng.com##.ktz-bannerhead\nlenteng.com##.ktz_banner\nanilinkz.tv##.kwarta\nsimplyhired.com##.label_right\nwallstcheatsheet.com##.landingad8\nustream.tv##.largeRectBanner\nsearch.yahoo.com##.last > div[class][data-bid] > div[class] > ul[class] > li > span > a\ntxfm.ie##.last_10Buy\nafterdawn.com##.last_forum_mainos\nrestaurants.com##.latad\nespn.co.uk,espncricinfo.com##.latest_sports630\naniscartujo.com##.layer_main\niwradio.co.uk##.layerslider_widget\nthehits.co.nz##.layout__background\npastebin.com##.layout_clear\nmilesplit.com##.lb\netonline.com##.lb_bottom\ndoor2windows.com##.lbad\nthehill.com##.lbanner\nspeedtest.net##.lbc\nlankabusinessonline.com##.lbo-ad-home-300x250\nitp.net##.lboard\npcmag.com##.lbwidget\npolitifact.com##.ldrbd\nhotscripts.com,scriptcopy.com,techrepublic.com,theatermania.com,thegameslist.com,thepcguild.com##.leader\ndivamag.co.uk,pc-specs.com,readmetro.com##.leader-board\ninteraksyon.com##.leader-board-1\ncanada.com##.leader-board-wrapper\nzdnet.com##.leader-bottom\nonline-literature.com##.leader-wrap-bottom\nonline-literature.com##.leader-wrap-middle\nonline-literature.com##.leader-wrap-top\ngarfield.com##.leaderBackground\nchanneleye.co.uk,expertreviews.co.uk,mtv.com.lb,nymag.com,pcpro.co.uk,vogue.co.uk##.leaderBoard\ngreatergood.com##.leaderBoard-container\nbusinessghana.com##.leaderBoardBorder\nwhathifi.com##.leaderBoardWrapper\nexpertreviews.co.uk##.leaderLeft\nexpertreviews.co.uk##.leaderRight\nbakercityherald.com##.leaderTop\nfreelanceswitch.com,stockvault.net,tutsplus.com##.leader_board\nabovethelaw.com,adn.com,advosports.com,adyou.me,androidfirmwares.net,answerology.com,aroundosceola.com,ballstatedaily.com,bellinghamherald.com,birdmanstunna.com,blitzcorner.com,bnd.com,bradenton.com,cantbeunseen.com,carynews.com,centredaily.com,chairmanlol.com,citymetric.com,claytonnewsstar.com,clgaming.net,clicktogive.com,cnet.com,cokeandpopcorn.com,commercialappeal.com,cosmopolitan.co.uk,cosmopolitan.com,courierpress.com,cprogramming.com,dailynews.co.zw,designtaxi.com,digitaltrends.com,diply.com,directupload.net,dispatch.com,diyfail.com,docspot.com,donchavez.com,driving.ca,dummies.com,edmunds.com,elle.com,enquirerherald.com,esquire.com,explainthisimage.com,expressandstar.com,film.com,foodista.com,fortmilltimes.com,forums.thefashionspot.com,fox.com.au,fresnobee.com,funnyexam.com,funnytipjars.com,galatta.com,gamesville.com,geek.com,goal.com,goldenpages.be,gosanangelo.com,guernseypress.com,hardware.info,heraldonline.com,hi-mag.com,hourdetroit.com,hypegames.com,iamdisappoint.com,idahostatesman.com,imedicalapps.com,independentmail.com,intomobile.com,irishexaminer.com,islandpacket.com,itproportal.com,japanisweird.com,jdpower.com,jerseyeveningpost.com,kentucky.com,keysnet.com,kidspot.com.au,kitsapsun.com,knoxnews.com,lakewyliepilot.com,laweekly.com,ledger-enquirer.com,lgbtqnation.com,lightreading.com,lolhome.com,lonelyplanet.com,lsjournal.com,mac-forums.com,macon.com,mapcarta.com,marieclaire.com,marinmagazine.com,mcclatchydc.com,mercedsunstar.com,meteovista.co.uk,meteovista.com,modbee.com,morefailat11.com,myrtlebeachonline.com,nameberry.com,naplesnews.com,nature.com,nbl.com.au,newsobserver.com,nowtoronto.com,objectiface.com,openfile.ca,organizedwisdom.com,overclockers.com,passedoutphotos.com,pehub.com,peoplespharmacy.com,perfectlytimedphotos.com,photographyblog.com,pinknews.co,pinknews.co.uk,pons.com,pons.eu,popularmechanics.com,pressherald.com,radiobroadcaster.org,rebubbled.com,recode.net,redding.com,reporternews.com,roadandtrack.com,roadrunner.com,roulettereactions.com,rr.com,sacarfan.co.za,sanluisobispo.com,scifinow.co.uk,searchenginesuggestions.com,shinyshiny.tv,shitbrix.com,shocktillyoudrop.com,shropshirestar.com,slashdot.org,slideshare.net,spacecast.com,sparesomelol.com,spoiledphotos.com,sportsvite.com,stopdroplol.com,stripes.com,stv.tv,sunherald.com,supersport.com,tattoofailure.com,tbreak.com,tcpalm.com,techdigest.tv,terra.com,theatermania.com,thehollywoodgossip.com,thejewishnews.com,thenewstribune.com,theolympian.com,theskanner.com,thestate.com,timescolonist.com,timesrecordnews.com,titantv.com,treehugger.com,tri-cityherald.com,tvfanatic.com,uswitch.com,v3.co.uk,vcstar.com,vivastreet.co.uk,vr-zone.com,walyou.com,washingtonpost.com,whatsonstage.com,where.ca,yodawgpics.com,yoimaletyoufinish.com##.leaderboard\nameinfo.com##.leaderboard-area\nautotrader.co.uk,mixcloud.com##.leaderboard-banner\nbleedingcool.com##.leaderboard-below-header\nfanlala.com,stltoday.com##.leaderboard-bottom\ninvestorwords.com##.leaderboard-box\napp.com,argusleader.com,battlecreekenquirer.com,baxterbulletin.com,bucyrustelegraphforum.com,burlingtonfreepress.com,centralohio.com,chillicothegazette.com,cincinnati.com,citizen-times.com,clarionledger.com,coloradoan.com,coshoctontribune.com,courier-journal.com,courierpostonline.com,dailyrecord.com,dailyworld.com,defensenews.com,delawareonline.com,delmarvanow.com,democratandchronicle.com,desmoinesregister.com,detroitnews.com,dnj.com,explosm.net,farmanddairy.com,fdlreporter.com,federaltimes.com,freep.com,greatfallstribune.com,greenbaypressgazette.com,greenvilleonline.com,guampdn.com,hattiesburgamerican.com,hometownlife.com,honoluluadvertiser.com,htrnews.com,indystar.com,jacksonsun.com,jconline.com,lancastereaglegazette.com,lansingstatejournal.com,livingstondaily.com,lohud.com,mansfieldnewsjournal.com,marionstar.com,marshfieldnewsherald.com,montgomeryadvertiser.com,mousebreaker.com,mycentraljersey.com,mydesert.com,newarkadvocate.com,news-leader.com,news-press.com,newsleader.com,pal-item.com,pnj.com,portclintonnewsherald.com,postcrescent.com,poughkeepsiejournal.com,press-citizen.com,pressandjournal.co.uk,pressconnects.com,rgj.com,sctimes.com,sheboyganpress.com,shreveporttimes.com,stargazette.com,statesmanjournal.com,stevenspointjournal.com,tallahassee.com,tennessean.com,theadvertiser.com,thecalifornian.com,thedailyjournal.com,theithacajournal.com,theleafchronicle.com,thenews-messenger.com,thenewsstar.com,thenorthwestern.com,thespectrum.com,thestarpress.com,thetimesherald.com,thetowntalk.com,visaliatimesdelta.com,wausaudailyherald.com,wisconsinrapidstribune.com,zanesvilletimesrecorder.com##.leaderboard-container\nap.org,app.com,argusleader.com,battlecreekenquirer.com,baxterbulletin.com,bucyrustelegraphforum.com,burlingtonfreepress.com,centralohio.com,chillicothegazette.com,cincinnati.com,citizen-times.com,clarionledger.com,coloradoan.com,coshoctontribune.com,courier-journal.com,courierpostonline.com,dailyrecord.com,dailyworld.com,defensenews.com,delawareonline.com,delmarvanow.com,democratandchronicle.com,desmoinesregister.com,detroitnews.com,dnj.com,fdlreporter.com,federaltimes.com,floridatoday.com,freep.com,greatfallstribune.com,greenbaypressgazette.com,greenvilleonline.com,guampdn.com,hattiesburgamerican.com,hometownlife.com,honoluluadvertiser.com,htrnews.com,indystar.com,jacksonsun.com,jconline.com,lancastereaglegazette.com,lansingstatejournal.com,livingstondaily.com,lohud.com,mansfieldnewsjournal.com,marionstar.com,marshfieldnewsherald.com,montgomeryadvertiser.com,mycentraljersey.com,mydesert.com,newarkadvocate.com,news-leader.com,news-press.com,newsleader.com,pal-item.com,pnj.com,portclintonnewsherald.com,postcrescent.com,poughkeepsiejournal.com,press-citizen.com,pressconnects.com,rgj.com,sctimes.com,sheboyganpress.com,shreveporttimes.com,stargazette.com,statesmanjournal.com,stevenspointjournal.com,tallahassee.com,tennessean.com,theadvertiser.com,thecalifornian.com,thedailyjournal.com,theithacajournal.com,theleafchronicle.com,thenews-messenger.com,thenewsstar.com,thenorthwestern.com,thespectrum.com,thestarpress.com,thetimesherald.com,thetowntalk.com,visaliatimesdelta.com,wausaudailyherald.com,wisconsinrapidstribune.com,zanesvilletimesrecorder.com##.leaderboard-container-top\ncntraveller.com##.leaderboard-new\nbusinessdictionary.com##.leaderboard-placement\nslideshare.net##.leaderboard-profile\ngeekosystem.com,styleite.com,themarysue.com##.leaderboard-section\ntimesunion.com##.leaderboard-tbl\nfanlala.com,tvline.com##.leaderboard-top\nehow.co.uk,scotsman.com,skysports.com##.leaderboard-wrap\nctv.ca##.leaderboard-wrapper\nwhatismybrowser.com##.leaderboard720\nenglish.gazzetta.it##.leaderboardEng\ncargurus.com##.leaderboardParent\njapantoday.com##.leaderboard_banner\nbestcovery.com##.leaderboard_block\nvibevixen.com##.leaderboard_bottom\nlookbook.nu,todaysbigthing.com##.leaderboard_container\ntucsoncitizen.com##.leaderboard_container_top\ndirectupload.net##.leaderboard_rectangle\nporttechnology.org,realworldtech.com,rottentomatoes.com##.leaderboard_wrapper\nentrepreneur.com.ph##.leaderboardbar\nubergizmo.com,wired.co.uk##.leaderboardcontainer\nfog24.com,free-games.net##.leaderboardholder\ncherokeetribune.com##.leaderboards\ntheprospectordaily.com##.leaderboardwrap\nautoevolution.com##.leaderheight\nmorewords.com##.lef\nyouserials.com##.left\nwashingtonjewishweek.com##.left-banner\nrepublicbroadcasting.org##.left-sidebar-padder > #text-3\nrepublicbroadcasting.org##.left-sidebar-padder > #text-8\nelliotsblog.com##.left.box\nroutes-news.com##.left1\nisraelnationalnews.com##.leftColumn\nask.com##.leftLabel\nbargaineering.com##.leftSidebar\nyellowpages.com.ps##.leftSponsors\nprevention.com##.leftSubBoxArea\n10minutemail.net##.leftXL\nmixfmradio.com##.left_2_banners2\nindiaresults.com##.left_add_incl\nultimate-guitar.com##.left_article_cont\nelectronista.com,ipodnn.com,macnn.com##.left_footer\nzalaa.com##.left_iframe\nmail.yahoo.com##.left_mb\nwnd.com##.left_prom_160\nyouserials.com##.lefta\ntorrentreactor.net##.leftbanner\nknowthis.com##.leftcol[style=\"width:180px;\"]\njta.org##.letter-to-editor\nminiclip.com##.letterbox\njpost.com##.level-2-horizontal-banner-wrap\njpost.com##.level-6-horizontal-banner-wrap\naol.com##.lft120x60\nwebpronews.com##.lightgray\nprepperwebsite.com##.link-col > #text-48\ncoinurl.com##.link-image\nanorak.co.uk##.link[style=\"height: 250px\"]\nhuffingtonpost.com##.linked_sponsored_entry\ntechnologyreview.com##.linkexperts-hm\nkyivpost.com##.linklist\nkproxy.com##.linknew4\nscriptcopy.com##.linkroll\nscriptcopy.com##.linkroll-title\nbabynamegenie.com,forless.com,o2cinemas.com,worldtimeserver.com##.links\natđhe.net##.links > thead\nanswers.com##.links_google\nanswers.com##.links_openx\nipsnews.net##.linksmoll_black\nwatchseries.lt##.linktable > .myTable > tbody > tr:first-child\nyoutube.com##.list-view[style=\"margin: 7px 0pt;\"]\nmaps.yahoo.com##.listing > .ysm\ncfos.de##.ll_center\npcworld.idg.com.au##.lo-toppromos\nwefollow.com##.load-featured\ncalgaryherald.com##.local-branding\ntheonion.com##.local_recirc\nlogect.com##.logect_ads01_wrp\ntv-video.net##.login\nwearetennis.com##.logo\nsiberiantimes.com##.logoBanner\novguide.com##.logo_affiliate\nthemoscowtimes.com##.logo_popup\ntoblender.com##.longadd\nvg247.com##.low-leader-container\neurogamer.net##.low-leaderboard-container\nomegle.com##.lowergaybtn\nomegle.com##.lowersexybtn\ncfos.de##.lr_left\nyahoo.com##.lrec\nfindlaw.com##.ls_homepage\nanimetake.com##.lsidebar > a[href^=\"http://bit.ly/\"]\nvidto.me,vidzi.tv##.ltas_backscreen\nphpbb.com##.lynkorama\nphpbb.com##.lynkoramaz\nkovideo.net##.lyricRingtoneLink\nreadwrite.com##.m-adaptive\ntheverge.com##.m-feature__intro > aside\ndigitaltrends.com##.m-intermission\ndigitaltrends.com##.m-leaderboard\ntheguardian.com##.m-money-deals\ndigitaltrends.com##.m-review-affiliate-pint\ntvguide.com##.m-shop\nshare-links.biz##.m10.center\nshare-links.biz##.m20 > div[id]:first-child:last-child\nminivannews.com##.m_banner_show\ndownloadatoz.com##.ma\nmovies.msn.com##.magAd\nchristianpost.com##.main-aside-bn\nthedailystar.net##.mainAddSpage\ninvesting.com##.mainLightBoxFilter\ninstantshift.com##.main_banner_single\ntechnewsdaily.com##.main_content_right\nisraelhayom.com##.main_english_banner\nelectronista.com##.main_notify\ninvestopedia.com##.mainbodyleftcolumntrade\nxspyz.com##.mainparagraph\nshowme.co.za##.mainphoto\nhealthzone.pk##.maintablebody\nrarlab.com,rarlabs.com##.maintd2[valign=\"top\"] > .htbar:first-child + .tplain + p + table[width=\"100%\"][border=\"0\"] + table[width=\"100%\"][border=\"0\"] > tbody:first-child:last-child\nrarlabs.com##.maintd2[valign=\"top\"] > .htbar:first-child + p.tplain + table[width=\"100%\"][border=\"0\"] + table[width=\"100%\"][border=\"0\"]\nlifescript.com##.maintopad\ntorrent.cd##.maintopb\nmakeprojects.com##.makeBlocks\n4shared.com##.makeRingtoneButton\nmangainn.com##.mangareadtopad\nallmenus.com##.mantle\nsigalert.com##.map-med-rect\nrocvideo.tv##.mar-bot-10\npcper.com##.mark-overlay-bg\nbriefing.com##.market-place\nindustryweek.com##.market600\nnzherald.co.nz##.marketPlace\nknowd.com,rockpapershotgun.com,theslingshot.com##.marketing\nbangkok.com##.marketing-spot\ninvestmentweek.co.uk##.marketing_content\ndigitalspy.co.uk##.marketing_puff\nabc15.com,abc2news.com,barchart.com,entrepreneur.com,globest.com,industryweek.com,kypost.com,livescience.com,myfoxatlanta.com,myfoxboston.com,myfoxchicago.com,myfoxdc.com,myfoxdetroit.com,myfoxhouston.com,myfoxla.com,myfoxmemphis.com,myfoxny.com,myfoxphilly.com,myfoxphoenix.com,myfoxtampabay.com,newsarama.com,newsnet5.com,wcpo.com,wptv.com,wxyz.com,yahoo.com##.marketplace\npoststar.com,stltoday.com##.marketplace-list\ndailymotion.com##.masscast_box\ndailymotion.com##.masscast_middle_box\nmacworld.co.uk##.mastBannerContainer\nmp3juices.com##.master_search_table > tbody > .c[style=\"height:80px\"]:first-child\nsonglyrics.com##.masthead\nslacktory.com##.masthead-banner\nmsn.com##.matchModuleContainer\nfixitscripts.com##.max-banner\nmail.yahoo.com##.mb > .tbl\ncommentarymagazine.com##.mb5px\nyahoo.com##.mballads\nzeetv.com##.mbanner1\nwraltechwire.com##.mbitalic\nsearch.twcc.com##.mbs\ngames.yahoo.com,movies.yahoo.com##.md.links\nwsj.com##.mdcSponsorBadges\nhughhewitt.com##.mdh-main-wrap\nmtv.com##.mdl_noPosition\nthestar.com.my##.med-rec\nindianapublicmedia.org##.med-rect\nslideshare.net##.medRecBottom2\norlandoweekly.com##.medRectangle\netonline.com##.med_rec\nmedcitynews.com##.medcity-paid-inline\nfontstock.net##.mediaBox\ntvbay.org##.mediasrojas\ntvplus.co.za##.medihelp-section\ndocspot.com##.medium\nallmusic.com,edmunds.com##.medium-rectangle\nmonhyip.net##.medium_banner\nucomparehealthcare.com##.medium_rectangle\nbeautifuldecay.com##.medium_rectangle_300x250\nrushlimbaugh.com##.mediumrec_int\ndemocraticunderground.com##.mediumrectangle-op-blank\ndemocraticunderground.com##.mediumrectangle-placeholder\n9news.com.au,active.com,anime-planet.com,cookinggames.com,coolgames.com,fosswire.com,girlgames.com,girlsocool.com,guygames.com,hallpass.com,stickgames.com,tinypic.com,tuaw.com,watchmojo.com##.medrec\nactive.com##.medrec-bottom\ndressupgal.com##.medrec-main\nactive.com##.medrec-top\nmyspace.com##.medrecContainer\nrottentomatoes.com##.medrec_top_wrapper\njoystiq.com,luxist.com,switched.com,tuaw.com,wow.com##.medrect\ntheboot.com##.medrect_aol\nnotcot.org##.medrect_outer\ngossiponthis.com##.medrectangle\nludobox.com##.megaban\nlookbook.nu##.megabanner_container\ngamerdna.com##.members\ndeseretnews.com##.menu-sponsor\ntoonjokes.com##.menu_fill_ad\nflysat.com##.menualtireklam\nspinitron.com##.merch\nmuzu.tv##.merchandise\ntravelocity.com##.merchandising\nexcite.com##.mexContentBdr\nmoviefone.com##.mf-banner-container\nmoviefone.com##.mf-tower600-container\nseenive.com##.mgid-vine\nmoviesplanet.com##.mgtie5min\nmodernhealthcare.com##.mh_topshade_b\nnpr.org##.mi-purchase-links\nslate.com##.microsoft_text_link\nkrebsonsecurity.com##.mid-banner\npissedconsumer.com,plussports.com##.midBanner\ninvesting.com##.midHeader\nexpertreviews.co.uk##.midLeader\nsiteadvisor.com##.midPageSmallOuterDiv\nautotrader.co.za##.midSearch.banner\nmp3.li##.mid_holder[style=\"height: 124px;\"]\neinthusan.com##.mid_leaderboard\neinthusan.com##.mid_medium_leaderboard\nbabylon.com##.mid_right\neinthusan.com##.mid_small_leaderboard\nmetroflog.com##.midbanner\nscanwith.com##.middle-banner\nibtimes.co.in,ibtimes.co.uk##.middle-leaderboard\nimdb.com##.middle-rhs\ninstantshift.com##.middle_banners_title\nkcrw.com##.middle_bottom_wrap\nmamma.com##.midresult:first-child\nbroadcastingworld.net##.midsection\ntokyohive.com##.midunit\nrapidlibrary.com##.mini.mediaget\nar15.com##.miniBannersBg\nfool.com##.mintPromo\nindependent.co.uk,standard.co.uk##.mktg-btns-ctr\naol.com##.mlid-netbanner\nmmosite.com##.mmo_banner\nmmosite.com##.mmo_footer_sponsor\nmmosite.com##.mmo_gg\nmmosite.com##.mmo_gg2\nmmosite.com##.mmo_textsponsor\nandroidcentral.com##.mn-banner\nmnn.com##.mnn-homepage-adv1-block\ncultofmac.com##.mob-mpu\ntechradar.com##.mobile-hawk-widget\ntechspot.com##.mobile-hide\nrapidvideo.tv##.mobile_hd\nthenation.com##.modalContainer\nibtimes.com##.modalDialog_contentDiv_shadow\nibtimes.com##.modalDialog_transparentDivs\nthenation.com##.modalOverlay\nalivetorrents.com##.mode\nitworld.com##.module\ngoal.com##.module-bet-signup\ngoal.com##.module-bet-windrawwin\nautotrader.co.uk##.module-ecommerceLinks\nkiis1065.com.au##.module-mrec\nnickelodeon.com.au##.module-mrect\nheraldsun.com.au##.module-promo-image-01\nwptv.com##.module.horizontal\nasia.cnet.com##.module:first-child + .module\nhubpages.com##.moduleAmazon\nquote.com##.module_full\nprevention.com##.modules\namericantowns.com##.moduletable-banner\nhealthyplace.com##.moduletablefloatRight\nuberrock.co.uk##.moduletablepatches\ncodeasily.com##.money\ntheguardian.com##.money-supermarket\ndailymail.co.uk,mailonsunday.co.uk,thisismoney.co.uk##.money.item > .cmicons.cleared.bogr3.link-box.linkro-darkred.cnr5\nau.news.yahoo.com##.moneyhound\nyahoo.com##.more-sponsors\nmotherboard.tv##.moreFromVice\naol.co.uk##.moreOnAsylum\nbestserials.com##.morePop\nsearch.icq.com##.more_sp\nsearch.icq.com##.more_sp_end\nzillow.com##.mortgage-featured-partners\nradiosport.co.nz##.mos-sponsor\nanonymouse.org##.mouselayer\nmerdb.com##.movie_version a[style=\"font-size:15px;\"]\nmovie2k.tl##.moviedescription + br + div > a\nputlocker.is##.movsblu\nseetickets.com##.mp-sidebar-right\nnewscientist.com##.mpMPU\nbakersfieldnow.com,katu.com,keprtv.com,komonews.com,kpic.com,kval.com,star1015.com##.mpsponsor\n98fm.com,accringtonobserver.co.uk,alloaadvertiser.com,ardrossanherald.com,audioreview.com,autotrader.co.za,barrheadnews.com,bigtop40.com,birminghammail.co.uk,birminghampost.co.uk,bizarremag.com,bobfm.co.uk,bordertelegraph.com,bracknellnews.co.uk,capitalfm.com,capitalxtra.com,carrickherald.com,caughtoffside.com,centralfifetimes.com,chesterchronicle.co.uk,chroniclelive.co.uk,classicfm.com,clydebankpost.co.uk,computerworlduk.com,coventrytelegraph.net,crewechronicle.co.uk,cultofandroid.com,cumnockchronicle.com,dailypost.co.uk,dailyrecord.co.uk,dcsuk.info,directory.im,divamag.co.uk,dumbartonreporter.co.uk,dunfermlinepress.com,durhamtimes.co.uk,eastlothiancourier.com,econsultancy.com,examiner.co.uk,findanyfilm.com,gardensillustrated.com,gazettelive.co.uk,getbucks.co.uk,getreading.co.uk,getsurrey.co.uk,getwestlondon.co.uk,golf365.com,greenocktelegraph.co.uk,heart.co.uk,helensburghadvertiser.co.uk,her.ie,herfamily.ie,impartialreporter.com,independent.co.uk,irishexaminer.com,irvinetimes.com,jamieoliver.com,joe.co.uk,joe.ie,journallive.co.uk,largsandmillportnews.com,liverpoolecho.co.uk,localberkshire.co.uk,loughboroughecho.net,macclesfield-express.co.uk,macuser.co.uk,manchestereveningnews.co.uk,metoffice.gov.uk,mtv.com.lb,mumsnet.com,musicradar.com,musicradio.com,mygoldmusic.co.uk,newburyandthatchamchronicle.co.uk,newstalk.com,northernfarmer.co.uk,osadvertiser.co.uk,peeblesshirenews.com,pinknews.co.uk,propertynews.com,racecar-engineering.com,radiotimes.com,readingchronicle.co.uk,realradioxs.co.uk,recombu.com,redhillandreigatelife.co.uk,rochdaleonline.co.uk,rossendalefreepress.co.uk,runcornandwidnesweeklynews.co.uk,scotsman.com,skysports.com,sloughobserver.co.uk,smallholder.co.uk,smartertravel.com,smoothradio.com,southportvisiter.co.uk,southwestfarmer.co.uk,spin1038.com,spinsouthwest.com,sportsjoe.ie,strathallantimes.co.uk,t3.com,tcmuk.tv,the-gazette.co.uk,theadvertiserseries.co.uk,thecitizen.co.tz,thejournal.co.uk,thelancasterandmorecambecitizen.co.uk,thetimes.co.uk,thevillager.co.uk,timeoutabudhabi.com,timeoutbahrain.com,timeoutdoha.com,timeoutdubai.com,todayfm.com,toffeeweb.com,troontimes.com,tv3.ie,txfm.ie,walesonline.co.uk,warringtonguardian.co.uk,wiltshirebusinessonline.co.uk,windsorobserver.co.uk,xfm.co.uk##.mpu\ngreatbritishlife.co.uk,sport360.com##.mpu-banner\n4music.com##.mpu-block\nrightmove.co.uk##.mpu-slot\nmuzu.tv##.mpu-wrap\ncrash.net##.mpuBack\ndigitalartsonline.co.uk##.mpuHolder\nlonelyplanet.com##.mpuWrapper\nslidetoplay.com##.mpu_content_banner\npopjustice.com##.mpufloatleft\nblinkbox.com##.mpupnl\ndigitimes.com##.mr-box\n411.com##.mr_top\n2gb.com,9news.com.au,ebay.com,farmonline.com.au,farmweekly.com.au,fhm.com.ph,foodnetwork.com,funnyordie.com,goodfruitandvegetables.com.au,hgtv.com,hgtvremodels.com,jozifm.co.za,metrofm.co.za,northqueenslandregister.com.au,queenslandcountrylife.com.au,realliving.com.ph,stockandland.com.au,stockjournal.com.au,theland.com.au,thewest.com.au,topgear.com.ph,turfcraft.com.au##.mrec\nyellowpages.com.au##.mrec-container\npep.ph##.mrec-wrapper\nplus.im##.ms-creative-position-header\nmanilastandardtoday.com##.mst-banner\nmanilastandardtoday.com##.mst-banner-sidebar\ngovtech.com##.mt-20\nmotortrend.com##.mt-spotlight\nfacemoods.com##.mts + .search-list\nfacebook.com##.muffin.group\nexcite.co.uk##.multitable\njavascript-coder.com##.myadv1\nmycoupons.com##.myc_google\nslate.com##.mys-header\nslate.com##.mys-north-spons-ad\ngoogle.com##.nH.MC\nmail.google.com##.nH.PS\nmail.google.com##.nH.adC > .nH > .nH > .u5 > .azN\nmanchesterconfidential.co.uk##.nag\nbbc.com##.native-promo-button\n9gag.com##.naughty-box\nanimenfo.com##.nav2\nbtstorrent.so##.nav_bar + p[style=\"margin:4px 0 10px 10px;font-size:14px;width:auto;padding:2px 50px 2px 50px;display:inline-block;border:none;border-radius:3px;background:#EBDCAF;color:#BE8714;font-weight:bold;\"] + .tor\nbloodninja.org##.navbar + .container-fluid > .row:first-child > .col-md-2:first-child\ntypo3.org##.navigationbanners\nnba.com##.nbaSponsored\nuniversalsports.com##.nbc_Adv\nncaa.com##.ncaa728text\nncaa.com##.ncaaAdTag\n4shared.com##.ndimg\nwhoismind.com##.neatbox[style=\"color:#777;width:450px;padding:5px 15px;margin-bottom:10px;line-height:20px;cursor:pointer;\"]\nmuzu.tv##.networkLeaderboard\ndepositfiles.com,dfiles.eu##.network_downloader\ncelebritynetworth.com##.networth_content_advert\nkeepcalm-o-matic.co.uk##.new-banner\nnorthjersey.com##.newerheaderbg\ninstructables.com##.newrightbar_div_10\njpost.com##.news-feed-banner\nckom.com,newstalk650.com##.news-sponsor\nafterdawn.com##.newsArticleGoogle\nafterdawn.com##.newsGoogleContainer\ntech-reviews.co.uk##.newsadsix\ncodingforums.com##.newscredit\npbs.org##.newshour-support-wrap\ndevelop-online.net,licensing.biz,mcvuk.com,mobile-ent.biz,pcr-online.biz,toynews-online.biz##.newsinsert\njpost.com##.newsmax\nexchangerates.org.uk##.newsp\ndemocraticunderground.com##.nhome-mediumrectangle-container\nhulkshare.com##.nhsBotBan\ntravel.yahoo.com##.niftyoffst[style=\"background-color: #CECECE; padding: 0px 2px 0px;\"]\n9news.com.au,ninemsn.com.au##.ninemsn-advert\ncosmopolitan.com.au,dolly.com.au##.ninemsn-mrec\nfilenuke.com,sharesix.com##.nnrplace\nsmartmoney.com##.no-top-margin\nthedailycrux.com##.noPrint\nmtv.co.uk##.node-download\nandroidcentral.com##.node-list-body > .node-sponsoredpost\ndoctoroz.com##.node-site_promo\ntradingmarkets.com##.node_banner_right\nthepiratebay.se##.nohover\nnews.com.au##.nokia-short\nspotplanet.org##.nonregadd\nmoddb.com##.normalmediabox\ncookingforengineers.com##.nothing\nprimeshare.tv##.notification[style=\"width:900px; margin-left:-10px;margin-bottom:-1px;\"]\nphilly.com##.nouveau\nfinancialpost.com##.npBgSponsoredLinks\nchannel4fm.com##.npDownload\nfinancialpost.com##.npSponsor\nfinancialpost.com,nationalpost.com##.npSponsorLogo\nnascar.com##.nscrAd\nnascar.com##.nscrAdFooter\nnascar.com##.nscrSweepsContainer\nninemsn.com.au##.nw_ft_all_partners\nnymag.com,vulture.com##.nym-ad-active\nnytimes.com##.nytmm-ss-ad-target\nnytimes.com##.nytmm-ss-big-ad\nnzherald.co.nz##.nzh-bigbanner\nnzherald.co.nz##.nzh-extendedbanner\nmail.google.com##.oM\ncounton2.com,suntimes.com##.oas\nadage.com##.oaswrapper\ndailydot.com##.ob_dual_right\nelle.com,womansday.com##.oba\ntvguide.com##.obj-spotlight\ninfobetting.com,searchenginejournal.com##.odd\nwusa9.com##.ody-ob-taboola-wrapper\nlifehack.org##.offer\nyasni.com##.offerbox\nlivescience.com,nationalpost.com,space.com##.offers\npolishlinux.org##.oio-badge\nmindsetforsuccess.net##.ois_wrapper\nokcupid.com##.okad\nnzbindex.nl##.oldresults\nsomethingawful.com##.oma_pal\nplus.im##.one-creative\n50statesclassifieds.com##.onepxtable[width=\"468\"]\nthedigeratilife.com##.optad\nall-shares.com##.outInformation\nnews.sky.com##.outbrain-table-recommendations-bottom\njpopasia.com##.overflow-h[style=\"height:150px;\"]\neeweb.com,megashare.com##.overlay\nhqvideo.cc,vidbox.net,vidshare.ws,vuvido.com,xtshare.com,zalaa.com##.overlayVid\nstream4k.to##.overlay_box\nsearch.yahoo.com##.overture\ngetprice.com.au##.overviewnc2_side_mrec\nfacebook.com##.ownsection[role=\"option\"]\ninfo.co.uk##.p\nworldoftanks-wot.com##.p2small\nlocal.com##.pB5.mB15\npolls.aol.com##.p_divR\namazon.com##.pa-sp-container\nchaptercheats.com,longislandpress.com,tucows.com##.pad10\ndemonoid.pw##.pad9px_left > table:nth-child(8)\ninquirer.net##.padtopbot5\nxtremevbtalk.com##.page > #collapseobj_rbit\nhotfrog.ca,hotfrog.com,hotfrog.com.au,hotfrog.com.my##.page-banner\nchannel4.com##.page-bg-link\npolitico.com##.page-skin-graphic\nchannel4.com##.page-top-banner\nvehix.com##.pageHead\nkrcrtv.com,ktxs.com,nbcmontana.com,wcti12.com,wcyb.com##.pageHeaderRow1\nfreebetcodes.info##.page_free-bet-codes_1\nnzcity.co.nz##.page_skyscraper\nnationalreview.com##.pagetools[align=\"center\"]\noptimum.net##.paidResult\ninfoq.com##.paid_section\nphonebook.com##.paidinfoportlet\neplans.com##.pair-bottom-banners\nwomenshealthmag.com##.pane-block-150\nbostonherald.com##.pane-block-20\ngaltime.com##.pane-block-9\nsportfishingmag.com##.pane-channel-sponsors-list\nanimax-asia.com,axn-asia.com,betvasia.com,gemtvasia.com,movies4men.co.uk,onetvasia.com,settv.co.za,sonychannel.co.za,sonychannelasia.com,sonymax.co.za,sonymoviechannel.co.uk,sonytv.com##.pane-dart-dart-tag-300x250-rectangle\nsoundandvisionmag.com##.pane-dart-dart-tag-bottom\nthedrum.com##.pane-dfp\nthedrum.com##.pane-dfp-drum-mpu-adsense\neducationpost.com.hk##.pane-dfp-homepage-728x90\ntexasmonthly.com##.pane-dfp-sidebar-medium-rectangle-1\ntexasmonthly.com##.pane-dfp-sidebar-medium-rectangle-2\npri.org##.pane-node-field-links-sponsors\nscmp.com##.pane-scmp-advert-doubleclick\n2gb.com##.pane-sponsored-links-2\nsensis.com.au##.panel\ntampabay.com##.panels-flexible-row-75-8\npanarmenian.net##.panner_2\nnst.com.my##.parargt\nwhatsthescore.com##.parier\nprolificnotion.co.uk,usatoday.com##.partner\ninvestopedia.com##.partner-center\nmail.com##.partner-container\nthefrisky.com##.partner-link-boxes-container\nnationtalk.ca##.partner-slides\nemporis.com##.partner-small\nnews24.com,timesofisrael.com##.partner-widget\ndomainmasters.co.ke##.partner2\nkat.ph##.partner2Button\nkat.ph##.partner3Button\nnewser.com##.partnerBottomBorder\nsolarmovie.ag,solarmovie.so##.partnerButton\nbing.com##.partnerLinks\nnewser.com##.partnerLinksText\ndelish.com##.partnerPromoCntr\nyoubeauty.com##.partner_content\nmamaslatinas.com##.partner_links\n411.com##.partner_search_header\n411.com##.partner_searches\nfreshnewgames.com##.partnercontent_box\nmoney.msn.com##.partnerlogo\nbhg.com##.partnerpromos\n2oceansvibe.com,browardpalmbeach.com,bundesliga.com,citypages.com,computershopper.com,dallasobserver.com,evertonfc.com,freedict.com,houstonpress.com,independent.co.uk,miaminewtimes.com,ocweekly.com,pcmag.com,phoenixnewtimes.com,riverfronttimes.com,tgdaily.com,tweetmeme.com,villagevoice.com,wbj.pl,westword.com,wilv.com##.partners\nararatadvertiser.com.au,areanews.com.au,armidaleexpress.com.au,avonadvocate.com.au,batemansbaypost.com.au,baysidebulletin.com.au,begadistrictnews.com.au,bellingencourier.com.au,bendigoadvertiser.com.au,blayneychronicle.com.au,bombalatimes.com.au,boorowanewsonline.com.au,bordermail.com.au,braidwoodtimes.com.au,bunburymail.com.au,busseltonmail.com.au,camdencourier.com.au,canowindranews.com.au,centraladvocate.com.au,centralwesterndaily.com.au,cessnockadvertiser.com.au,colliemail.com.au,colypointobserver.com.au,coomaexpress.com.au,cootamundraherald.com.au,cowraguardian.com.au,crookwellgazette.com.au,dailyadvertiser.com.au,dailyliberal.com.au,donnybrookmail.com.au,dungogchronicle.com.au,easternriverinachronicle.com.au,edenmagnet.com.au,esperanceexpress.com.au,forbesadvocate.com.au,gleninnesexaminer.com.au,gloucesteradvocate.com.au,goondiwindiargus.com.au,goulburnpost.com.au,greatlakesadvocate.com.au,grenfellrecord.com.au,guyraargus.com.au,hardenexpress.com.au,hepburnadvocate.com.au,huntervalleynews.net.au,inverelltimes.com.au,irrigator.com.au,juneesoutherncross.com.au,lakesmail.com.au,lithgowmercury.com.au,macleayargus.com.au,mailtimes.com.au,maitlandmercury.com.au,mandurahmail.com.au,manningrivertimes.com.au,margaretrivermail.com.au,merimbulanewsonline.com.au,merredinmercury.com.au,moreechampion.com.au,mudgeeguardian.com.au,muswellbrookchronicle.com.au,myallcoastnota.com.au,nambuccaguardian.com.au,naroomanewsonline.com.au,narrominenewsonline.com.au,newcastlestar.com.au,northerndailyleader.com.au,northweststar.com.au,nvi.com.au,nynganobserver.com.au,oberonreview.com.au,parkeschampionpost.com.au,portnews.com.au,portpirierecorder.com.au,portstephensexaminer.com.au,queanbeyanage.com.au,riverinaleader.com.au,sconeadvocate.com.au,singletonargus.com.au,southcoastregister.com.au,southernhighlandnews.com.au,southernweekly.com.au,standard.net.au,stawelltimes.com.au,summitsun.com.au,tenterfieldstar.com.au,theadvocate.com.au,thecourier.com.au,theherald.com.au,theridgenews.com.au,therural.com.au,townandcountrymagazine.com.au,ulladullatimes.com.au,waginargus.com.au,walchanewsonline.com.au,wauchopegazette.com.au,wellingtontimes.com.au,westernadvocate.com.au,westernmagazine.com.au,winghamchronicle.com.au,yasstribune.com.au,youngwitness.com.au##.partners-container\nserverwatch.com##.partners_ITs\nracinguk.com##.partners_carousel_container\nryanair.com##.partnersmenu\nnzbclub.com##.partsincomplete\nprankvidz.com,videobash.com##.pb-container\neeweb.com##.pbox\nneverendingplaylist.com##.pcad\ngeek.com##.pcmag-mostclicked\nphotodom.com##.pd_AdBlock\nsearch.smartaddressbar.com##.peach\nimvu.com##.peoplesearch-ad\nforums.vr-zone.com##.perm_announcement\npolitifact.com##.pfad\nproxfree.com##.pfad2\ninvisionfree.com##.pformleft[width=\"300px\"]\nsensis.com.au##.pfpRightParent\nsensis.com.au##.pfplist\nproxfree.com##.pftopad\nmashable.com##.pga\nroadandtrack.com##.photo-banner\nphoronix.com##.phxcms_contentphx_right_bar:first-child\nmetacrawler.com,start.mysearchdial.com##.pirArea\nvr-zone.com##.place_top\ngamersyde.com##.placeholder-bottom\ngamersyde.com##.placeholder-top\nqikr.co##.placeholder1\nqikr.co##.placeholder2\nautotrader.co.uk##.placeholderBottomLeaderboard\nautotrader.co.uk##.placeholderTopLeaderboard\ndummies.com,laweekly.com##.placement\nworld-airport-codes.com##.placement-leaderboard\nworld-airport-codes.com##.placement-mpu\nworld-airport-codes.com##.placement-skyscraper\nt45ol.com##.play_game_adcube_bloc\noverthumbs.com##.playerad\nmediaspanonline.com##.playlist-itunes-player\nnetmums.com##.plinth-mpu\nulivetv.com##.plugbarremozi\nwsj.com##.pmCfoDeloitte\nstreamingthe.net##.pnl_video_2\nfreewebarcade.com##.pnum\npokernewsreport.com##.pokerbanner\nbodybuilding.com##.poll-padding\nwinnipegfreepress.com##.poll-sponsor\nfilefactory.com##.popup\nbangbrosporn.com##.porndiddy\nfreenewspos.com##.pos-adt\nfreenewspos.com##.pos-adv\nmonova.org##.pos-download-big\nblogtv.com##.posAbs.BOGL\nblogtv.com##.posRel.BGW.BOGL.TxtC.FB.L0\nblogtv.com##.posRel.txtL.userForeColor.userBoxBG.BOGL\nforums.linuxmint.com##.post + .divider + .bg3\nmacdailynews.com##.post + .link-list\nfullepisode.info,netbooknews.com##.post-banner\nactivistpost.com##.post-body > div[style=\"text-align: center;\"] > a[target=\"_blank\"] > img\nactivistpost.com##.post-body a[style^=\"clear: right; float: right; margin-bottom: 1em; \"][target=\"_blank\"] > img[alt]\nmotherjones.com##.post-continued-from-above\nmotherjones.com##.post-continues\nawesomestyles.com##.post-download-screen\nmobilitydigest.com##.post-rel\nmoviecarpet.com##.post-top\npinkisthenewblog.com##.post-wrap\nbuzzfeed.com##.post2[style=\"background-color: #FDF6E5;\"]\nmac-forums.com##.postMREC\nthejournal.ie##.postSponsored\ndutchgrammar.com##.post[style=\"border: 1px solid #339999 \"]\nwwtdd.com##.post_insert\nandroidpolice.com##.post_main_blob2\nlitecointalk.org##.post_separator + .windowbg\nneogaf.com##.postbit-goodie\ncincinnati.com,wbir.com##.poster-container\nphonebook.com.pk##.posterplusmiddle\nphonebook.com.pk##.posterplustop\npicocool.com##.postgridsingle\n1019thewolf.com,923thefox.com,fox1150.com,hot1035radio.com,indie1031.com##.posts-banner\nfirstpost.com##.powBy\ngeekzone.co.nz##.poweredBy\ninfowars.com,prisonplanet.com##.ppani\nplanet-rugby.co.za,planetrugby.com##.pr-art-betlinks\nlowellsun.com##.preHeaderRegion\ngamesting.com##.pregleaderboard\ngcnlive.com##.premSponsor\ntowersearch.com##.premier\nthomsonlocal.com##.premium\nyellowbook.com##.premium-listing\ndramafever.com##.premium-overlay\nwarez-files.com##.premium_results\nhuffingtonpost.com##.presented-by\ntheatlanticwire.com##.presented_by\nsoftexia.com##.press-lastest\npokerupdate.com##.prev-article\n1cookinggames.com,dressupone.com,flobzoo.com,onlyfungames.com,playkissing.com,yokogames.com##.preview2bannerspot\n1cookinggames.com##.preview2bannerspot2\nonlyfungames.com##.preview3bannerspot\ndressupone.com##.previewpubgoogle\ndressupone.com##.previewpubgoogle2\nandroidbenchmark.net,cpubenchmark.net,harddrivebenchmark.net,iphonebenchmark.net,memorybenchmark.net,videocardbenchmark.net##.price\nnews24.com##.pricecheckBlock\ndigitaltrends.com##.pricegrabber\nanandtech.com##.pricing\nvaughnlive.tv##.primary300x600\nfoliomag.com##.prime_sponsors\ntheguardian.com##.print-sponsorship\ntulsaworld.com##.printViewAll\nvertor.com##.privacy_banner\ntoptenreviews.com##.prod_head_buy_button\nsearch.yahoo.com##.prod_object\nbarnesandnoble.com##.product-commentary-advertisement\navsforum.com##.products\nopenwith.org##.program-link\npbs.org##.program-support\ngokunming.com##.prom\nwnd.com##.prom-full-width-expandable\nbabynamegenie.com,computerandvideogames.com,dailyrecord.co.uk,eclipse.org,film.com,foreignpolicy.com,irishmirror.ie,manchestereveningnews.co.uk,nbcbayarea.com,networkworld.com,planetsourcecode.com,sandiego6.com,sciagaj.org,thenextweb.com,theonion.com,totalxbox.com,varsity.com,wsj.com##.promo\nyfrog.com,yt-festivals.appspot.com##.promo-area\nbbcgoodfood.com,pri.org##.promo-box\nlamag.com##.promo-container\nthepeoplesperson.com##.promo-first-para\npokertube.com##.promo-holder\nnews.com.au##.promo-image-01\ncointelegraph.com##.promo-item\nefinancialnews.com##.promo-leaderboard\nsitepoint.com##.promo-panel\nsearch.yahoo.com##.promo-res\nimageshack.com##.promo-right\nthepeoplesperson.com##.promo-right-300\nminiclip.com##.promo-text\nminiclip.com##.promo-unit\ncio.com,csoonline.com,infoworld.com,itworld.com,javaworld.com##.promo.list\nbollywoodhungama.com##.promo266\ncnet.com##.promo3000\nsemoneycontrol.com##.promoBanner\ndownloadcrew.com##.promoBar\nzdnet.com##.promoBox\nfitnessmagazine.com##.promoContainer\nitv.com##.promoMpu\nkat.ph##.promoPartner\ngamepedia.com##.promoSidebar\nmirror.co.uk##.promoTeaser\nvideobb.com##.promo_tab\nanimecharactersdatabase.com##.promobanner\njournallive.co.uk,liverpooldailypost.co.uk,walesonline.co.uk##.promobottom\ncnet.com.au,photobucket.com,ratemyteachers.com##.promobox\ndnainfo.com##.promomerchant_block\nafullcup.com##.promos\npenny-arcade.com##.promos-horizontal\nsearch.genieo.com,search.installmac.com##.promoted\ntwitter.com##.promoted-account\ntwitter.com##.promoted-trend\ntwitter.com##.promoted-tweet\nyoutube.com##.promoted-videos\nsearch.genieo.com##.promoted_right\nbizcommunity.com##.promotedcontent-box\nreddit.com##.promotedlink\nnorthcountrypublicradio.org##.promotile\ntwitter.com##.promotion\nyfrog.com##.promotion-side\nvogue.co.uk##.promotionButtons\nthenextweb.com##.promotion_frame\nmademan.com##.promotion_module\n951shinefm.com##.promotional-space\nwired.co.uk##.promotions\ndomainnamewire.com##.promotions_120x240\njournallive.co.uk,liverpooldailypost.co.uk,people.co.uk,walesonline.co.uk##.promotop\nbullz-eye.com##.prompt_link\nmywebsearch.com##.prontoBox\nindependent.co.uk,standard.co.uk##.propertySearch\nmsn.com##.providerupsell\npsmag.com##.psmag-ad-300px\npsmag.com##.psmag-ad-300x250\nplayswitch.com##.psmainshellad\ndailyhome.com##.pt1_pane_body[style=\"text-align:center;height:90px;\"]\nannistonstar.com##.pt1_pane_body[style=\"text-align:left;height:90px;\"]\nessentialmums.co.nz##.ptbl\n1980-games.com,flash-mp3-player.net,theportugalnews.com##.pub\neuronews.com##.pub-block\ntvgolo.com##.pub468x60top\ncatchvideo.net##.pubRight\ncatchvideo.net##.pubTop\nradionomy.com##.pub_imu\nvideolan.org##.pub_text\nhellokids.com##.pub_topright\nelpais.com##.publi220_elpais\nelpais.com##.publi300_elpais\nelpais.com##.publi728_elpais\nhotshare.net,supershare.net##.publi_videos1\nreporter.bz##.publicidad-logo\neuropolitics.info##.publicite1\ncinemalebnen.org##.publicity\nprotect-url.net##.pubpagebas\njournallive.co.uk,liverpooldailypost.co.uk##.puffs\ncoinwarz.com##.pull-left[style=\"margin-right: 30px; margin-top: 20px; width: 336px;\\a                 height: 280px;\"]\nradio.com##.purchase\nm.facebook.com,touch.facebook.com##.pyml\ntorfinder.net##.q2\nqrobe.it##.qad\ntorfinder.net##.qh22\ntmz.com##.quigo-main\ntmz.com##.quigo-permalink\nmoviefone.com##.quigoModule\nmodernghana.com##.quikr_banner\nisrabox.com##.quote > center > table[width=\"100%\"]:first-child\nunlockboot.com##.r-banner\nsearch.icq.com##.r2-1\ndecoist.com##.r300\nperiscopepost.com##.r72890\ncontactmusic.com##.rCol\njoins.com,rt.com##.r_banner\ndietsinreview.com##.r_content_300x250\nwahm.com##.rad-links\nwired.com##.rad-top\ndawn.com##.radWrapper\nkvcr.org##.radio_livesupport\nabout.com##.radlinks\nmygames4girls.com##.rads07\ndailyfreegames.com##.radsbox\nweatherzone.com.au##.rainbowstrip\nnairaland.com##.ratatamp\nisearch.whitesmoke.com##.rating\namctv.com##.rb-dart\nbustedcoverage.com##.rcr-box\nwsj.com##.reTransWidget\nelyrics.net##.read3\ninfoworld.com##.recRes_head\nebookee.org##.recomended\nwebopedia.com##.recommend\nsi.com##.recommend-section\nbiblegateway.com##.recommendations\nwallpapers-room.com##.recommendations-468x60\nbiblegateway.com##.recommendations-column\nbiblegateway.com##.recommendations-header-column\nbiblegateway.com##.recommendations-view-row\nalternet.org,exactseek.com##.recommended\nvertor.com##.recommended_clients\nxml.com##.recommended_div2\ngsmchoice.com##.recommends\nuinterview.com##.rect-min-height\ndailynews.co.zw,defenseindustrydaily.com,dosgamesarchive.com,sciencedaily.com,twogag.com,webappers.com##.rectangle\nwdun.com##.rectangle-300x250px\ngeekologie.com##.rectangle-container\ngeekosystem.com,styleite.com,themarysue.com##.rectangle-section\nscholastic.com##.rectangleMedium\ngames.co.uk,gamesgames.com##.rectangular-banners\ngirlsgogames.com##.rectbanner\ngirlsgogames.com##.rectbanner-container\nwhatdigitalcamera.com##.reevoo\nreviewjournal.com##.region-content_bottom\nnbcolympics.com##.region-leaderboard\nexaminer.com##.region-masthead\nana-white.com##.region-sidebar-second > #block-block-64\nextrahardware.com##.region-skyscraper\nfreshwap.net##.regular\nfutbol24.com##.rek\ntopclassifieds.info##.reklama_vip\nradiosi.eu##.reklame\nappleinsider.com##.rel-half-r-cnt-ad\nisrabox.com,sedoparking.com,techeblog.com##.related\npokerupdate.com##.related-room\nclassifiedextra.ca##.relativeBandeau\nclassifiedextra.ca##.relativeBoite\nsleepywood.net##.relstar\nixquick.com##.reltext\ncghub.com##.remove_ads\nforums.whirlpool.net.au##.reply[style=\"padding: 0;\"]\nsearch.icq.com##.res_sp\ntechrepublic.com##.resource-centre\nintelius.com##.resourceBox\ncio.com,informationweek.com##.resources\nwebsite-unavailable.com##.response\nmacmillandictionary.com##.responsive_cell_whole\nsimplefilesearch.com##.result-f\nwrongdiagnosis.com##.result_adv\nyellowpages.bw,yellowpages.co.ls,yellowpages.co.zm##.result_item_gold\nyellowpages.bw,yellowpages.co.ls,yellowpages.co.zm##.result_item_silver\ntorrents.de,torrentz.ch,torrentz.com,torrentz.eu,torrentz.in,torrentz.li,torrentz.me,torrentz.ph##.results > h3 > div[style=\"text-align:center\"]\nhotbot.com##.results-top\nyellowbook.com##.resultsBanner\nnickjr.com##.resultsSponsoredBy\ncardomain.com##.resultsTableCol\nmovies.yahoo.com##.results[bgcolor=\"#ECF5FA\"]\nvmn.net##.results_sponsor\nqueentorrent.com##.results_table > tbody > :nth-child(-n+4)\nyauba.com##.resultscontent:first-child\nclassifiedads.com##.resultspon\nbitcandy.com##.rev_cont_below\ncrooksandliars.com##.revblock\nhindustantimes.com##.rft_logos\nalltheragefaces.com##.rg\npopeater.com##.rgtPane\nmail.google.com##.rh > #ra\npv-magazine.com##.ric_rot_banner\nsiteslike.com##.rif\nmarieclaire.co.uk,search.smartaddressbar.com,usnewsuniversitydirectory.com##.right\nyourepeat.com##.right > .bigbox:first-child\nintoday.in##.right-add\njrn.com##.right-banner\nlinuxinsider.com,macnewsworld.com##.right-bb\ngreenbiz.com,greenerdesign.com##.right-boom-small\nscoop.co.nz##.right-box\nticotimes.net##.right-carrousel\nmediabistro.com##.right-column-boxes-content-partners\nkovideo.net##.right-def-160\nmovies.yahoo.com##.right-module\nbloomberg.com##.right-rail-bkg\nhiphopearly.com##.right-side\nrepublicbroadcasting.org##.right-sidebar-padder > #text-7\nrealclearworld.com##.right-wide-skyscraper\n10minutemail.net##.rightBig\ntimeout.com##.rightCol\nghanaweb.com##.rightSkyscraper\nprevention.com##.rightSubBoxArea\nthemoscowtimes.com##.right_banner\nscreenindia.com##.right_blank2\nlivescience.com##.right_content > .side_row\ncybergamer.com##.right_dvrtsmnt\nelectronista.com,ipodnn.com,macnn.com##.right_footer\nsofticons.com##.right_ga\nlegalbusinessonline.com##.right_job_bg01\nmosnews.com##.right_pop\nhuffingtonpost.ca##.right_rail_edit_promo\nveryfunnyads.com##.right_sponsor\ngumtree.co.za,virtualmedicalcentre.com##.rightbanner\ntuvaro.com##.rightbar-inside\nblekko.com##.rightbar-inside > div + div + .note\nblekko.com##.rightbar-inside > div + div + .note + ul[id]\nfindlaw.com##.rightcol_300x250\nfindlaw.com##.rightcol_sponsored\ncoolest-gadgets.com##.rightcolbox[style=\"height: 250px;\"]\ncomputerworld.co.nz##.rightcontent\nkhmertimeskh.com##.rightheader\nbikesportnews.com##.rightmpu\npress-citizen.com##.rightrail-promo\ntheteachercorner.net##.rightside\ngametrailers.com##.rightthin_content\nlyricsfreak.com##.ringtone\naudiko.net##.ringtone-banner-top\nsonglyrics.com##.ringtone-matcher\nlyricsfreak.com##.ringtone_b\ndilandau.eu##.ringtone_button\nlyricsty.com##.ringtone_s\nclip.dj##.ringtonemakerblock\nidolator.com##.river-interstitial\nratemyprofessors.com##.rmp_leaderboard\ntechpowerup.com##.rnav_d\ntechpowerup.com##.rnav_e\ntheyeshivaworld.com##.rndm\ntheyeshivaworld.com##.rndm10\ntheyeshivaworld.com##.rndm2\ntheyeshivaworld.com##.rndm6\ntheyeshivaworld.com##.rndm7\ntheyeshivaworld.com##.rndm9\nballinaadvocate.com.au,bigrigs.com.au,byronnews.com.au,caboolturenews.com.au,centraltelegraph.com.au,coffscoastadvocate.com.au,coolum-news.com.au,cqnews.com.au,dailyexaminer.com.au,dailymercury.com.au,echonews.com.au,frasercoastchronicle.com.au,gattonstar.com.au,gladstoneobserver.com.au,gympietimes.com.au,ipswichadvertiser.com.au,news-mail.com.au,noosanews.com.au,northernstar.com.au,qt.com.au,rangenews.com.au,ruralweekly.com.au,southburnetttimes.com.au,stanthorpeborderpost.com.au,sunshinecoastdaily.com.au,suratbasin.com.au,thechronicle.com.au,themorningbulletin.com.au,thereporter.com.au,thesatellite.com.au,tweeddailynews.com.au,warwickdailynews.com.au,whitsundaytimes.com.au##.rnn_ri_container_compare-and-container-containere\ncraveonline.com,momtastic.com,realitytea.com,superherohype.com##.roadblock\nsurinenglish.com##.robapaginas\nroblox.com##.roblox-skyscraper\neuronews.com##.rolexLogo\ncbslocal.com##.rotatable\ntheatlantic.com##.rotating-article-promo\nimpactwrestling.com,newswireless.net##.rotator\nleadership.ng##.rotor\nleadership.ng##.rotor-items[style=\"width: 300px; height: 260px; visibility: visible;\"]\ntoolslib.net##.row > .col-md-5 > .rotate-90\nlonelyplanet.com##.row--leaderboard\nbikechatforums.com##.row1[style=\"padding: 5px;\"]\nbikechatforums.com##.row2[style=\"padding: 5px;\"]\nistockanalyst.com##.rr\naol.com##.rrpromo\nfreewebarcade.com##.rsads\ntechmeme.com##.rsp\nherold.at##.rssBox\nnewstrackindia.com##.rt-add336x280\nrockthebells.net##.rtb-bot-banner-row\ncomputerweekly.com##.rtx\nnews24.com,sport24.co.za,women24.com##.rubyContainer\n6scoops.com,9gag.com##.s-300\nlistverse.com##.s-a\nvirginmedia.com##.s-links\nsurfthechannel.com,watchseries.ag,watchseries.lt,watchseries.vc,watchseriesuk.ag,watchseriesuk.lt,watchtvseries.se,watchtvseries.vc##.s-mpu-list\nbusiness-standard.com##.s-s\nwwtdd.com##.s728x90\nigossip.com##.s9\nfarmtrader.co.nz,motorcycletrader.co.nz,tradeaboat.co.nz##.sBanner\nsearch.charter.net,search.frontier.com##.sBrSpns\ndnsrsearch.com,dnssearch.rr.com,search.charter.net,search.frontier.com##.sRsltHld\npipl.com##.s_links\npipl.com##.s_tips\nasiator.net##.sa\nlegacy.com##.sa_Table\nmouseprice.com##.salerent_advt\npinoyexchange.com##.sampleAmazon\npinoyexchange.com##.sampleLayout[style=\"height:110px;\"]\nglobalpost.com##.sap-permalink\nlocaljewishnews.com##.sayfalist1 > .widgets:first-child + .widgets + .widgets + .widgets:last-child\nscienceblogs.com##.sb-sponsor\nusmagazine.com##.sb_logo\nthedirty.com##.sbanner\n4kidstv.com##.sbbox1\nskybreezegames.com##.sbg-160\nskybreezegames.com##.sbg-728\nmobilebloom.com##.sbpricing\nbitcoinblogger.com##.sc_ads_within_one\nscmp.com##.scmp_advert-tile\nskysports.com##.score-bet\nslack-time.com##.scraper\ndrizzydrake.org##.scrbl\nfarmanddairy.com##.screen-4\nphonedog.com##.scribol\nstardoll.com##.sdadinfo\nstardoll.com##.sdadinfoTrans\nebay.co.uk##.sdcBox\nitproportal.com##.se_left\nitproportal.com##.se_right\nblogger-index.com,sedoparking.com##.search\nlavasoft.com##.search > .spdiv:first-child\nlavasoft.com##.search > .spdiv:last-child\nkovideo.net##.search-728\nsearch.freefind.com##.search-headline-table\nstart.mysearchdial.com##.search-list + .mts + .search-list\ntorrents.net##.search-results\nhowstuffworks.com##.search-span\nyellowise.com##.search-title[style=\"color: #666;padding:0;margin:0;\"]\nmuzu.tv##.searchMPUSlot\nstartpins.com##.searchResultsBottom\nsomoto.com##.searchResultsRight\nstartpins.com##.searchResultsTop\nbhg.com##.searchSponsors\nyoutube.com##.searchView.list-view\nkibagames.com##.search_adv_container\nlinxdown.me##.search_link_box\nbrothersoft.com##.search_sponor\nlinxdown.com##.searchblock\ntorrenthound.com##.searchtable:first-child\ngaystarnews.com##.sechead3-right\nvogue.co.uk##.secondary-content-banner-box\nvogue.co.uk##.secondary-content-mpu-box\ncitysearch.com##.secondaryText\nxml.com##.secondary[width=\"153\"]\npornhub.com##.section-hqrelateds\nslidetoplay.com##.section-sponsor\nfree-codecs.com##.sectionBanners\nthevarguy.com##.sectionbreak2\nbabylon.com,search.chatzum.com##.sectionheadertopltr\nask.reference.com##.sectiontitle\nfredericknewspost.com##.select[width=\"148\"]\ncodeinspot.com##.sen1\nsheryna.com.my##.sense2\nsheryna.com.my##.sense_h0\nsheryna.com.my##.sensel1\ntime.com##.sep\ntwikle.com##.separ_box_small + .small\nactivistpost.com##.separator[style=\"clear: both; text-align: center;\"]\npixabay.com##.separator_box[style=\"min-width: 960px;\"]\nfilesocean.net,linexdown.net,rapidfiledownload.com##.serchblock\nrapidfiledownload.com##.serchblockrfd\nfilesocean.net,linexdown.net,rapidfiledownload.com##.serchbox\nrapidfiledownload.com##.serchboxrfd\nespncricinfo.com##.seriesSpncr\ncharter.net,verizon.com##.serp21_sponsored\nsfgate.com##.sfg_ysm001\nzeetv.com##.sh_banner1\n04stream.com##.shade\nfoxstart.com##.shadow\narto.com##.shadowBoxBody\ngood.is##.shadow[style=\"padding:10px;\"]\ngood.is##.shadow[style=\"padding:10px;width:728px;\"]\nforbes.com##.shareMagazine\nzdnet.com##.shared-resource-center\nnewgrounds.com##.shareicons\n4shared.com##.sharemore\nlaughingsquid.com##.sharethrough-placement\nyahoo.com##.sharing-toolbar\nshopping.yahoo.com##.shmod-ysm\ncoderanch.com##.shngl\nbhg.com##.shopNation\ndailylife.com.au##.shopStyle-widget\ncnet.com##.shopperSpecials\ntomshardware.com##.shopping\ncaranddriver.com,roadandtrack.com##.shopping-tools\nnzherald.co.nz##.shoppingContainer\ndeccanherald.com##.shoppingContent\nmusicradar.com##.shopping_partners\nyumsugar.com##.shopstyle-sidebar-content\nocworkbench.com##.shopwidget1\nfunnyordie.com##.short-mrec\nskins.be##.shortBioShadowB\nspike.com##.show_branding_holder\nautos.msn.com##.showcase\nzillow.com##.showcase-outline\ncrunchyroll.com##.showmedia-tired-of-ads\ncomplex.com##.side-300x600\nmakeuseof.com,viva.co.nz##.side-banner\napptism.com##.side-banner-holder\nmetrolyrics.com##.side-box.clearfix\ndesktopreview.com##.side-resouresc\nsankakucomplex.com##.side120c\nsankakucomplex.com##.side120xmlc\nbvblackspin.com,bvonmoney.com,bvonmovies.com##.sideBanner\ntomsguide.com,tomshardware.com##.sideOffers\nweatherology.com##.side_165x100\ntelecompaper.com##.side_banner\nwow-europe.com##.side_banner_305x133\npanarmenian.net##.side_panner\nbusinessnewsdaily.com##.side_row[style=\"text-align:center;\"]\nnewburytoday.co.uk##.side_takeover_inner\nelectricpig.co.uk##.side_wide_banner\nblackpenguin.net,newburytoday.co.uk##.sidebar\nweknowmemes.com##.sidebar > .widgetcontainer\nlinksfu.com##.sidebar > ul > .sidebox\nthejointblog.com##.sidebar img[width=\"235\"][height=\"150\"]\nreelseo.com##.sidebar-125-box\nreelseo.com##.sidebar-125-events\nmakeuseof.com##.sidebar-banner\ninfdaily.com##.sidebar-box2\ninfdaily.com##.sidebar-box4\nditii.com##.sidebar-left\nrte.ie##.sidebar-mpu\nblogtechnical.com##.sidebar-outline\ntechti.me##.sidebar-promotion\ng4chan.com##.sidebar-rectangle\ntechi.com##.sidebar-rectangle-banner\ntimesofisrael.com##.sidebar-spotlight\ntechi.com##.sidebar-square-banner\ndavidwalsh.name##.sidebar-treehouse\nindianapublicmedia.org##.sidebar-upper-underwritings\nthebadandugly.com##.sidebar30\ncomicsalliance.com,lemondrop.com,popeater.com,urlesque.com##.sidebarBanner\nurgames.com##.sidebarBar\nurgames.com##.sidebarScrapper\ncghub.com##.sidebar_banner\ninstantshift.com##.sidebar_banners_bottom\ninstantshift.com##.sidebar_banners_top\ninstantshift.com##.sidebar_bsa_mid01\ninstantshift.com##.sidebar_bsa_top02\ngpforums.co.nz##.sidebar_mm_block\ndomainnamewire.com##.sidebar_promotions_small\nmediacomcable.com##.sidebar_sponsored\ngeektyrant.com##.sidebar_support\ninstantshift.com##.sidebar_vps_banner\nbridgemi.com##.sidebarboxinvest\nthenokiablog.com##.sidebardirect\nsmashingmagazine.com##.sidebared\nsankakucomplex.com##.sidebartopb\nsankakucomplex.com##.sidebartopc\nscotusblog.com##.sidebarwidgeted > .text-21\nfreedla.com##.sidebox\ntothepc.com##.sidebsa\nohinternet.com##.sider\nyttalk.com##.sidevert\nyttalk.com##.sidevert2\nnabble.com##.signature\nzerohedge.com##.similar-box\ngreatis.com##.sing\ncryptothrift.com##.single-auction-ad\ninfosecurity-magazine.com##.site-leaderboard\nfxstreet.com,macstories.net##.site-sponsor\nfaithtalk1500.com,kfax.com,wmca.com##.siteWrapLink\nitproportal.com##.site_header\ncracked.com##.site_sliver\ncrackdb.cd##.sitename:first-child + br + h1:last-child\ninthesetimes.com##.sites-of-interest\n9gag.tv##.size-728x90\nkwgn.com##.size_230_90\nindeed.co.uk,indeed.com##.sjas2\nindeed.co.uk,indeed.com##.sjl\nindeed.com##.sjl0\nindeed.co.uk,indeed.com##.sjl1t\nbit.com.au##.skin-btn\nautocarindia.com##.skin-link\ntennisworldusa.org##.skin1\nvideogamer.com,zdnet.com##.skinClick\nentrepreneur.com,newstatesman.com##.sky\nminiclip.com##.sky-wrapper\nskysports.com##.skyBetLinkBox\npetoskeynews.com##.skyScraper\nfootball365.com##.skybet\naol.co.uk##.skybet-art\nskysports.com##.skybet-odds-link\nfootball365.com##.skybet-space\nplanet-rugby.co.za,planetf1.com,planetrugby.com##.skybetbar\neweek.com##.skylabel\ngames2c.com,knowyourmobile.com,mymovies.net##.skyright\nbigtennetwork.com,californiareport.org,columbiatribune.com,comicbookresources.com,computerweekly.com,crackberry.com,datpiff.com,emedtv.com,engadget.com,etonline.com,evilmilk.com,gd.tuwien.ac.at,guanabee.com,gumtree.co.za,infosecurity-magazine.com,iwatchstuff.com,keyetv.com,kqed.org,l4dmaps.com,ludobox.com,moneyweek.com,pastemagazine.com,pcworld.com,planetrock.com,pulse.co.uk,scienceblogs.com,sciencedaily.com,sportsvibe.co.uk,topgear.com,weartv.com,webshots.com,wrc.com##.skyscraper\ninfosecurity-magazine.com##.skyscraper-button\ndemocraticunderground.com,sciencedaily.com##.skyscraper-container\ndemocraticunderground.com##.skyscraper-placeholder\ngmx.com##.skyscraperClass\nlookbook.nu,tucsoncitizen.com##.skyscraper_container\ntelegram.com##.skyscraper_in_narrow_column\nfreshbusinessthinking.com##.skyscraper_lft\nfreshbusinessthinking.com##.skyscraper_rgt_btm\nfreshbusinessthinking.com##.skyscraper_rgt_top\ndosgamesarchive.com##.skyscraper_small\nfog24.com,futbol24.com##.skyscrapper\nsearch.ch##.sl_banner\nslacker.com##.slacker-sidebar-ad\nslant.investorplace.com##.slant-sidebar-ad-tag\ncnet.com.au##.slb\nmanchesterconfidential.co.uk##.sldr\ndrugs.com##.slider-title\nbikeradar.com##.slider-vert\nthebeachchannel.tv##.slideshow\nkcra.com,ketv.com,kmbc.com,wcvb.com,wpbf.com,wtae.com##.slideshowCover\nbonappetit.com##.slideshow_sidebar_divider\nthephuketnews.com##.slidesjs-container\nburbankleader.com,citypaper.com,dailypilot.com,glendalenewspress.com,hbindependent.com,lacanadaonline.com,vacationstarter.com,vagazette.com##.slidingbillboard\nfoodfacts.com##.slimBanner\necommercetimes.com##.slink-text\necommercetimes.com##.slink-title\ninbox.com##.slinks\ntheguardian.com##.slot__container\nmail.ru##.slot_left\nap.org,euractiv.com,mnn.com,newsweek.com,slashdot.org##.slug\nmirror.co.uk##.sm-promo-list\npixelatedgeek.com##.small-leaderboard\nten.com.au##.small-listing.small-listing4.google\nfarmanddairy.com##.small-quad-banner\ndealsonwheels.com##.small-text\nhitsquad.com##.small-title\ntbs.com##.smallBanners\npdnonline.com##.smallGrayType\nrottentomatoes.com##.small[style=\"margin-top:10px;\"]\nmonhyip.net##.small_banner\nempireonline.com##.smallgrey[height=\"250\"]\ndressupone.com##.smallpreviewpubgoogle\nduluthnewstribune.com##.smalltxt\ngamefreaks.co.nz##.smltxt\nmusicmaza.com##.smtxt\ncomputerworlduk.com##.socialMediaBoxout\ndawn.com##.soft-half--top.soft-half--sides\nfanhow.com##.softhalf\nsoftpile.com##.softitem\nafreecodec.com##.softshot\nelyrics.net##.songring\ngreatandhra.com##.sortable-item_top_add\ncrawler.com,phonebook.com.pk##.sp\nwatch-series.ag,watch-tv-series.to,watchseries.ag,watchseries.lt,watchseries.ph,watchseries.vc,watchseriesuk.ag,watchseriesuk.lt,watchtvseries.se,watchtvseries.vc##.sp-leader\nwatch-series.ag,watch-tv-series.to,watchseries.ag,watchseries.lt,watchseries.p,watchseries.vc,watchseriesuk.ag,watchseriesuk.lt,watchtvseries.se,watchtvseries.vc##.sp-leader-bottom\npcmag.com##.sp-links\nfilestube.to##.spF\nfilestube.to##.spL\nmywebsearch.com##.spLinkCon\nrapid-search-engine.com##.sp_header\nmoney.msn.com##.spadr\nchannelchooser.com##.span-12.prepend-top.last\nfoodingredientsfirst.com##.span-24.last[style=\"z-index: 1; height: 90px;\"]\nnutritionhorizon.com##.span-24[style=\"z-index: 1; height: 90px;\"]\nnationmultimedia.com##.span-7-1[style=\"height:250px; overflow:hidden;\"]\nkcsoftwares.com##.span2.well\npicosearch.com##.spblock\naskmen.com##.special\nnewsweek.com##.special-insight\nfashionmagazine.com##.special-messages\npcmag.com##.special-offers\neuronews.com##.specialCoveragePub\nnzherald.co.nz##.specialOffers\nmsn.co.nz##.special_features\nlivescience.com##.special_link\nweddingchannel.com##.specialoffers\nmacobserver.com##.specials\nthenextweb.com##.speeb_widget\nreference.com##.spl_adblk\nask.com##.spl_shd_plus\nask.com,reference.com,search-results.com,thesaurus.com##.spl_unshd\nreference.com##.spl_unshd_NC\ngiveawayoftheday.com##.splinks\nlistverse.com##.split\nyahoo.com##.spns\ninformer.com##.spnsrd\nsmashingmagazine.com##.spnsrlistwrapper\neveryclick.com,info.co.uk,info.com,travel.yahoo.com##.spon\nworldtimezone.com##.spon-menu\nyahoo.com##.spon.clearfix\naol.com##.spon_by\nautos.aol.com##.spon_link_new\nquakelive.com##.spon_media\nmsn.com##.sponby\ntechnologyreview.com##.sponcont\nradiozindagi.com##.sponeser\nmediagazer.com##.sponrn\npho.to,smartwebby.com,workhound.co.uk,yahoo.com##.spons\nblekko.com##.spons-res\nnjuice.com,wwitv.com##.sponsb\n1310news.com,2oceansvibe.com,964eagle.co.uk,abc22now.com,airliners.net,animepaper.net,app.com,ar15.com,austinist.com,b100quadcities.com,bexhillobserver.net,blackpoolfc.co.uk,blackpoolgazette.co.uk,bloomberg.com,bognor.co.uk,bostonstandard.co.uk,brisbanetimes.com.au,brothersoft.com,businessinsider.com,canberratimes.com.au,cbslocal.com,cd1025.com,chicagoist.com,chichester.co.uk,concordmonitor.com,dcist.com,domainincite.com,eastbourneherald.co.uk,electricenergyonline.com,europages.co.uk,gamingcloud.com,gothamist.com,halifaxcourier.co.uk,hastingsobserver.co.uk,hellomagazine.com,homelife.com.au,informationweek.com,isearch.igive.com,khak.com,kkyr.com,kosy790am.com,kpbs.org,ktla.com,kygl.com,laist.com,lcfc.com,lep.co.uk,limerickleader.ie,lmgtfy.com,mg.co.za,mix933fm.com,networkworld.com,newrepublic.com,news1130.com,newsweek.com,nocamels.com,nouse.co.uk,pastie.org,pogo.com,portsmouth.co.uk,power959.com,prestontoday.net,proactiveinvestors.com,proactiveinvestors.com.au,publicradio.org,rock1049.com,rte.ie,scotsman.com,sfist.com,shieldsgazette.com,skysports.com,smh.com.au,spaldingtoday.co.uk,star935fm.com,sunderlandecho.com,techonomy.com,theage.com.au,thescarboroughnews.co.uk,thestar.co.uk,theworld.org,userscripts.org,variety.com,verizon.net,videolan.org,washingtonpost.com,watoday.com.au,wayfm.com,wfnt.com,wigantoday.net,wklh.com,wscountytimes.co.uk,wsj.com,yorkshireeveningpost.co.uk,yorkshirepost.co.uk,zdnet.co.uk,zuula.com##.sponsor\nsearch.comcast.net##.sponsor-6\nkiswrockgirls.com##.sponsor-banner\nbbc.com##.sponsor-container\nsearch.yahoo.com##.sponsor-dd\npcmag.com##.sponsor-head\ntheweek.co.uk##.sponsor-image\ndiynetwork.com##.sponsor-lead\nhouserepairtalk.com,soapmakingforum.com##.sponsor-list\nbroncos.com.au,cfo.com,cowboys.com.au,dragons.com.au,newcastleknights.com.au,parraeels.com.au,penrithpanthers.com.au,rabbitohs.com.au,raiders.com.au,roosters.com.au,seaeagles.com.au,sharks.com.au,titans.com.au,warriors.co.nz,weei.com,weststigers.com.au##.sponsor-logo\ntricycle.com##.sponsor-logo-image\noilprice.com##.sponsor-slider\ntheroot.com##.sponsor-slot-hp\nmnn.com##.sponsor-title-image\ntheweek.co.uk##.sponsor-top\nlinux-mag.com##.sponsor-widget\ntumblr.com##.sponsor-wrap\nclgaming.net##.sponsor-wrapper\n411.com,whitepages.com,wprugby.com##.sponsor1\nmsn.com,wprugby.com##.sponsor2\nmsn.com,wprugby.com##.sponsor3\ndptv.org##.sponsor300\narizonasports.com,ktar.com##.sponsorBy\nwsj.com##.sponsorContainer\ninvestors.com##.sponsorFt\nforbes.com,nzherald.co.nz##.sponsorLogo\ndlife.com##.sponsorSpecials\nblbclassic.org##.sponsorZone\nchannel5.com##.sponsor_container\nbolandrugby.com##.sponsor_holder\nvideolan.org##.sponsor_img\ngo963mn.com##.sponsor_strip\nsat-television.com,satfriends.com,satsupreme.com##.sponsor_wrapper\nfreeyourandroid.com##.sponsorarea\nvancouversun.com##.sponsorcontent\nbuump.me##.sponsord\nmonsterindia.com##.sponsoreRes\nmonsterindia.com##.sponsoreRes_rp\n24hrs.ca,92q.com,abovethelaw.com,app.com,argusleader.com,asktofriends.com,azdailysun.com,battlecreekenquirer.com,baxterbulletin.com,break.com,bucyrustelegraphforum.com,burlingtonfreepress.com,centralohio.com,chillicothegazette.com,chronicle.co.zw,cincinnati.com,cio.com,citizen-times.com,clarionledger.com,cnbc.com,cnet.com,coloradoan.com,computerworld.com,coshoctontribune.com,courier-journal.com,courierpostonline.com,dailyrecord.com,dailyworld.com,defensenews.com,delawareonline.com,delmarvanow.com,desmoinesregister.com,divamag.co.uk,dnj.com,examiner.co.uk,express.co.uk,fdlreporter.com,federaltimes.com,findbestvideo.com,floridatoday.com,freep.com,funnyordie.com,geektime.com,govtech.com,greatfallstribune.com,greenbaypressgazette.com,greenvilleonline.com,guampdn.com,hattiesburgamerican.com,hellobeautiful.com,herald.co.zw,hometownlife.com,hotklix.com,htrnews.com,imgur.com,indystar.com,infoworld.com,isohunt.to,ithacajournal.com,ixquick.com,jacksonsun.com,javaworld.com,jconline.com,knoworthy.com,lansingstatejournal.com,lfpress.com,livingstondaily.com,lohud.com,lycos.com,mansfieldnewsjournal.com,marionstar.com,marketingland.com,marshfieldnewsherald.com,montgomeryadvertiser.com,mycentraljersey.com,mydesert.com,mywot.com,networkworld.com,newarkadvocate.com,news-leader.com,news-press.com,newsleader.com,newsone.com,niagarafallsreview.ca,noscript.net,nugget.ca,pal-item.com,pcworld.com,phoenixnewtimes.com,pnj.com,portclintonnewsherald.com,postcrescent.com,poughkeepsiejournal.com,press-citizen.com,pressconnects.com,racinguk.com,rapidlibrary.com,rgj.com,salon.com,scottishdailyexpress.co.uk,sctimes.com,searchengineland.com,seroundtable.com,sheboyganpress.com,shreveporttimes.com,slate.com,stargazette.com,startpage.com,statesmanjournal.com,stevenspointjournal.com,tallahassee.com,tennessean.com,theadvertiser.com,theatlantic.com,thebarrieexaminer.com,thecalifornian.com,thedailyjournal.com,thedailyobserver.ca,theguardian.com,theleafchronicle.com,thenews-messenger.com,thenewsstar.com,thenorthwestern.com,theobserver.ca,thepeterboroughexaminer.com,thespectrum.com,thestarpress.com,thetimesherald.com,thetowntalk.com,torrentz.in,torrentz.me,trovit.co.uk,visaliatimesdelta.com,washingtonpost.com,wausaudailyherald.com,wheels.ca,wisconsinrapidstribune.com,yippy.com,zanesvilletimesrecorder.com##.sponsored\ngardensillustrated.com##.sponsored-articles\ncitizen.co.za,policeone.com##.sponsored-block\ngeneral-files.com##.sponsored-btn\nadvisorone.com,cutimes.com,futuresmag.com##.sponsored-by\ngeektime.com##.sponsored-channel\nchron.com,slate.com##.sponsored-content\nitproportal.com##.sponsored-hub\nfbdownloader.com##.sponsored-info\ntechtipsgeek.com##.sponsored-level\nusnews.com##.sponsored-listing\nthestar.com##.sponsored-listings\narstechnica.com##.sponsored-rec\ndailystar.co.uk,standardmedia.co.ke##.sponsored-section\ncomputerandvideogames.com##.sponsored-slideshow\nfuturesmag.com##.sponsored-tops\npolitico.com##.sponsored-wrapper\nwindowsitpro.com,winsupersite.com##.sponsoredAnnouncementWrap\ncitywire.co.uk,fool.com,offshore-mag.com##.sponsoredBy\ndownloadcrew.com##.sponsoredDownloads\ngamesforthebrain.com##.sponsoredGames\ninvesting.businessweek.com##.sponsoredHeader\neluta.ca##.sponsoredJobsTable\niol.co.za##.sponsoredLinksList\ntechnologyreview.com##.sponsored_bar\ngeneralfiles.me##.sponsored_download\nnews24.com##.sponsored_item\njobs.aol.com##.sponsored_listings\ntumblr.com##.sponsored_post\nfunnyordie.com##.sponsored_videos\n1337x.org##.sponsoredname\nnews-medical.net##.sponsorer-note\nclassifiedads.com##.sponsorhitext\ndailyglow.com##.sponsorlogo\npremierleague.com##.sponsorlogos\naffiliatesrating.com,allkpop.com,androidfilehost.com,arsenal.com,audiforums.com,blueletterbible.org,canaries.co.uk,capitalfm.co.ke,dolliecrave.com,eaglewavesradio.com.au,foodhub.co.nz,freshwap.me,geckoforums.net,health24.com,herold.at,keepvid.com,lake-link.com,meanjin.com.au,morokaswallows.co.za,nesn.com,quotes.net,thebulls.co.za,thedailywtf.com,thinksteroids.com,wbal.com,yellowpageskenya.com##.sponsors\nherold.at##.sponsors + .hdgTeaser\nherold.at##.sponsors + .hdgTeaser + #karriere\npri.org##.sponsors-logo-group\nkeepvid.com##.sponsors-s\nappadvice.com##.sponsorsAside\npwnage.tv##.sponsors_bar\nedie.net##.sponsors_bottom\npdfzone.com##.sponsors_container\nlivemint.com##.sponsors_logo_newspon\ndriverdb.com##.sponsors_table\nedie.net##.sponsors_top\nnewsweek.com,speroforum.com,theolympian.com,theonion.com##.sponsorship\nnews1130.com,news919.com,news957.com,sonicnation.ca##.sponsorship-block\nseahawks.com##.sponsorship-bottom\ncreatejs.com##.sponsorship-menu\naccesshollywood.com##.sponsorships\nlaw.com##.sponsorspot\nyellowpageskenya.com##.sponsorsz\nnu2.nu##.sponsortable\nnewswiretoday.com,przoom.com##.sponsortd\nnydailynews.com##.sponspored\nblekko.com##.sponsres\nsuperpages.com##.sponsreulst\ntuvaro.com##.sponsrez\nwwitv.com##.sponstv\ndailymail.co.uk,mailonsunday.co.uk##.sport.item > .cmicons.cleared.bogr3.link-box.linkro-darkred.cnr5\nalexandriagazette.com,arlingtonconnection.com,burkeconnection.com,centre-view.com,connection-sports.com,emporis.com,fairfaxconnection.com,fairfaxstationconnection.com,garfield.com,greatfallsconnection.com,herndonconnection.com,kusports.com,mcleanconnection.com,mountvernongazette.com,potomacalmanac.com,reston-connection.com,springfieldconnection.com,union-bulletin.com,viennaconnection.com##.spot\nthewhir.com##.spot-125x125\nthewhir.com##.spot-234x30\nthewhir.com##.spot-728x90\nsteamboattoday.com##.spot500\nwunderground.com##.spotBox\npcmag.com##.spotlight\njpost.com##.spotlight-long\nedmunds.com##.spotlight-set\njpost.com##.spotlight-single\nu-file.net##.spottt_tb\ndrum.co.za,thejuice.co.za##.spreetv--container\ndigitalmemo.net##.spresults\nwalmart.com##.sprite-26_IMG_ADVERTISEMENT_94x7\npicosearch.com##.sptitle\nlimelinx.com##.sqBanner\nbayt.com,booyapictures.com,industryweek.com,milesplit.com##.square\nbiography.com##.square-advertisment-module-second-column\nmixcloud.com##.square-bottom\nport2port.com##.squareBanner\nvibevixen.com##.square_300\nthevarguy.com##.squarebanner160x160\nbaseball-reference.com##.sr_draftstreet\ndownbyte.net,linxdown.com,redown.se##.srchbox\nredown.se##.srchtitle\nrealliving.com.ph##.srec\nbuenosearch.com,delta-search.com,holasearch.com##.srmadb\nbuenosearch.com##.srmads\ndelta-search.com##.srmah\nstarsports.com##.ss-mrec-align\nskysports.com##.ss-sponsor\nlaw.com##.ssp_outer\ncoolspotters.com##.stack\nforumpromotion.net##.staff-affiliates\nnst.com.my##.standard\nthesportreview.com##.standard-MPU\ncitytalk.fm##.standard-mpu-widget\ncitytalk.fm##.standard-skyscraper-widget\nleo.org##.standard_banner\nstardoll.com##.stardollads\nsimplyassist.co.uk##.std_BottomLine\npcauthority.com.au##.storeWidget\npcauthority.com.au##.storeWidgetBottom\npunchng.com##.story-bottom\nabcnews.go.com##.story-embed-left.box\nm.facebook.com,touch.facebook.com##.storyStream > ._6t2[data-sigil=\"marea\"]\nm.facebook.com,touch.facebook.com##.storyStream > .fullwidth._539p\nm.facebook.com,touch.facebook.com##.storyStream > article[id^=\"u_\"]._676\nm.facebook.com,touch.facebook.com##.storyStream > article[id^=\"u_\"].storyAggregation\nstraitstimes.com##.story_imu\nhindustantimes.com##.story_lft_wid\nswns.com##.story_mpu\npdfzone.com##.storybox\nbrisbanetimes.com.au,theage.com.au,watoday.com.au##.strapHeadingDealPartner\ntwitter.com##.stream-item[data-item-type=\"tweet\"][data-item-id*=\":\"]\nbitshare.com##.stream_flash_overlay\nbangkok.com##.strip-banner-top\npeople.com,peoplepets.com##.stylefind\npeople.com##.stylefindtout\nvideohelp.com##.stylenormal[width=\"24%\"][valign=\"top\"][align=\"left\"]\ncomplex.com##.sub-div\nlolhome.com##.subPicBanner\nratemyteachers.com##.sub_banner_728\ndeviantart.com,sta.sh##.subbyCloseX\nycuniverse.com##.subheader_container\nbusinessinsider.com##.subnav-container\nviralviralvideos.com##.suf-horizontal-widget\ninteraksyon.com##.super-leader-board\nt3.com##.superSky\ndjtunes.com##.superskybanner\nwamu.org##.supportbanner\nlistio.com##.supporter\nspyka.net##.swg-spykanet-adlocation-250\neweek.com##.sxs-mod-in\neweek.com##.sxs-spon\ntourofbritain.co.uk##.sys_googledfp\nsedoparking.com##.system.links\nemoneyspace.com##.t_a_c\nmovreel.com##.t_download\ntorrentbit.net##.t_splist\ndealsofamerica.com##.tab_ext\nwhatsthescore.com##.table-odds\nnewsbtc.com##.table-responsive\nthescore.com##.tablet-big-box\nthescore.com##.tablet-leaderboard\nrelevantradio.com##.tabs\ntorrents.to##.tad\nsuvudu.com##.tad-block-outer\ncoldwellbanker.com##.tag247-728x90Wrapper\njetsetta.com##.tags_2\nfhm.com##.takeOverContainer\nbigjohnandamy.com,bmwblog.com,brobible.com,miniclip.com##.takeover\nrecombu.com##.takeover-left\nflicks.co.nz##.takeover-link\nrecombu.com##.takeover-right\nspeedtv.com##.takeover_link\ntamilyogi.tv##.tamilyogi\ntaste.com.au##.taste-leaderboard-ad\nfulldls.com##.tb_ind\nkoreaherald.com##.tbanner\nlordtorrent3.ru##.tbl-striped\nanoox.com##.tbl_border[bgcolor=\"#fff9dd\"]\ncsschat.com##.tborder[width=\"100%\"] + center\nwebsleuths.com##.tborder[width=\"140\"]\nironmagazineforums.com##.tborder[width=\"150\"]\ngenesisowners.com##.tborder[width=\"160\"]\nhgtv.com##.tcap\nhiphopearly.com##.td-468\nthespec.com##.td-Home_Sponsor\nmobiletor.com##.td-footer-wrap\ngixen.com##.td_bck3\ntoronto.com##.td_featured\nsoccerway.com##.team-widget-wrapper-content-placement\n4shared.com,itproportal.com##.teaser\nmmegi.bw##.template_leaderboard_space\ndirpy.com##.text-center[style=\"margin-top: 20px\"]\ndirpy.com##.text-center[style=\"margin-top: 20px;display: block;\"]\nadelaidenow.com.au##.text-g-an-web-group-news-affiliate\ncouriermail.com.au##.text-g-cm-web-group-news-affiliate\nperthnow.com.au##.text-g-pn-web-group-news-affiliate\nnews.com.au##.text-g-tech-rh-panel-compareprices\nnajoomi.com##.text-left > .span11\nnews.com.au##.text-m-news-tech-iframe-getprice-widget-rhc\njekoo.com##.textCollSpons\nsportschatplace.com##.textLink\nmsnbc.msn.com,nbcnews.com##.textSmallGrey\nlinksave.in##.text[align=\"center\"] > table[width=\"513\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"]:last-child\ngamechix.com##.text[style=\"margin:28px 0 0 0;width:95%;text-align:center;\"]\nmacsurfer.com##.text_top_box\nkqed.org##.textsponsor\nevilbeetgossip.com,knowelty.com##.textwidget\ntravel.yahoo.com##.tgl-block\nwdet.org##.thanks\npushsquare.com##.the-right\nnintendolife.com##.the300x250\nvaughnlive.tv##.theAboutWrap\nseedmagazine.com##.theAd\nburntorangereport.com##.theFlip\nthonline.com##.thheaderweathersponsor\nvogue.com##.thin_banner\nhqq.tv##.this_pays\nthesaturdaypaper.com.au##.thp-wrapper\ny100.com##.threecolumn_rightcolumn\naffiliates4u.com##.threehundred\nsupercompressor.com##.thrillist-ad\ntime4tv.com##.thumbimg\nthinkdigit.com##.thumbnails\ndt-updates.com##.thx > .bottomBorderDotted + .block[style]:last-child\nrazorianfly.com##.ticker\nnytimes.com##.ticketNetworkModule\nnbcsports.msnbc.com##.ticketsnow-widget\ncointelegraph.com##.timeline-promo\nnewsfactor.com##.tinText\npichunter.com##.tiny\ncincinnati.com##.tinyclasslink\naardvark.co.nz##.tinyprint\nsoftwaredownloads.org##.title2\nsumotorrent.sx##.title_green[align=\"left\"][style=\"margin-top:18px;\"] + table[cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"]\ndomains.googlesyndication.com##.title_txt02\nwambie.com##.titulo_juego1_ad_200x200\nmyspace.com##.tkn_medrec\ncentredaily.com##.tla\ntldrlegal.com##.tldrlegal-ad-space\nindependent.co.uk##.tm_140_container\nindependent.co.uk##.tm_300_container\ntimeout.com##.to-offers\nghanaweb.com##.tonaton-ads\nmp3lyrics.org##.tonefuse_link\nnewsok.com##.toolbar_sponsor\ninvestopedia.com,runescape.com,thehill.com##.top\nwarezchick.com##.top > p:last-child\nsearchza.com,webpronews.com##.top-750\n9to5google.com,animetake.com,arabianbusiness.com,brainz.org,dailynews.gov.bw,ebony.com,extremesportman.com,firsttoknow.com,leadership.ng,leedsunited.com,letstalkbitcoin.com,reverso.net,rockthebells.net,spanishdict.com,torrentreactor.com,torrentreactor.net,weeklyworldnews.com##.top-banner\nmanicapost.com##.top-banner-block\nrumorfix.com##.top-banner-container\ncitymetric.com##.top-banners\nthekit.ca##.top-block\ngolf365.com##.top-con\nazdailysun.com,billingsgazette.com,bismarcktribune.com,hanfordsentinel.com,journalstar.com,lompocrecord.com,magicvalley.com,missoulian.com,mtstandard.com,napavalleyregister.com,nctimes.com,santamariatimes.com,stltoday.com##.top-leader-wrapper\n931dapaina.com,politico.com,sciencedaily.com##.top-leaderboard\nfilm.com##.top-leaderboard-container\nsciencedaily.com##.top-rectangle\n1340bigtalker.com##.top-right-banner\nespnfc.com##.top-row\ntheticketmiami.com##.top-super-leaderboard\nusniff.com##.top-usniff-torrents\nlivingelectro.com##.top-widget-rect\nlivingelectro.com##.top-widget-rect + .search_bar + .widget-rect + .widget-rect\njarkey.net##.top728\naol.ca,aol.com,ap.org,current.com,nerdist.com,reviewgist.com,shelterpop.com,tampabay.com,telegraph.co.uk,wsj.com##.topAd\nstevedeace.com##.topAddHolder\nnypress.com##.topAds > div[style=\"width:1010px;height:100px;\\9 overflow: hidden\"]\ncelebrity.aol.co.uk,christianpost.com,comicsalliance.com,csnews.com,europeantour.com,gourmetretailer.com,haaretz.com,inrumor.com,jobberman.com,lemondrop.com,pgmeatretailing.com,pricegrabber.com,progressivegrocer.com,singlestoreowner.com,urgames.com,urlesque.com##.topBanner\nurgames.com##.topBannerBOX\nonetime.com##.topBannerPlaceholder\nebay.co.uk,ebay.com##.topBnrSc\ntechadvisor.co.uk##.topLeader\nkjonline.com,pressherald.com##.topLeaderboard\ntechnomag.co.zw##.topLogoBanner\nyellowbook.com##.topPlacement\nsearch.sweetim.com##.topSubHeadLine2\nweatherology.com##.top_660x100\nchannelstv.com##.top_alert\nandroidcommunity.com,emu-russia.net,freeiconsweb.com,hydrocarbonprocessing.com,kohit.net,novamov.com,praguepost.com,themediaonline.co.za,themoscowtimes.com,voxilla.com,weta.org##.top_banner\njoebucsfan.com##.top_banner_cont\nfreeridegames.com##.top_banner_container\nthebatt.com##.top_banner_place\nsportspagenetwork.com##.top_banner_scoreboard_content\ngametrailers.com##.top_banner_space\nitp.net##.top_bit\nfamousbloggers.net##.top_content_banner\n977music.com##.top_crv\npostcourier.com.pg##.top_logo_righ_img\nwallpapersmania.com##.top_pad_10\nbabylon.com##.top_right\nfinecooking.com##.top_right_lrec\n4chan.org,everydayhealth.com,gamingonlinux.com,goodanime.eu,intothegloss.com,makezine.com,mangashare.com,mirrorcreator.com,rollingout.com,sina.com,thenewstribe.com##.topad\nfilezoo.com,nx8.com,search.b1.org##.topadv\ngofish.com##.topban1\ngofish.com##.topban2\n900amwurd.com,bankrate.com,chaptercheats.com,copykat.com,dawn.com,dotmmo.com,downv.com,factmonster.com,harpers.org,mumbaimirror.com,newreviewsite.com,opposingviews.com,softonic.com,thinkdigit.com,weta.org##.topbanner\nsoftonic.com##.topbanner_program\nwebstatschecker.com##.topcenterbanner\nchannel103.com,islandfm.com##.topheaderbanner\nbloggingstocks.com,emedtv.com,gadling.com,minnpost.com##.topleader\nblackpenguin.net,gamesting.com##.topleaderboard\nsearch.ch##.toplinks\nndtv.com##.topsponsors_wrap\nhoundmirror.com,torrenthound.com,torrenthoundproxy.com##.topspot\nyttalk.com##.topv\nenn.com##.topwrapper\nkat.ph##.torrentEasyButton\nbushtorrent.com##.torrent_listing\npgatour.com##.tourPlayerFooterAdContainer\noutdoorchannel.com##.tout_300x250\nthecitizen.co.tz##.tower\nfulldls.com,fulldlsproxy.com,vertor.com##.tp\nzeenews.com##.tp-add-bg\ncome.in##.tp-banner\nanswers.com##.tp_300x250_3\nfulldls.com,torrentzap.com,torrentzapproxy.com,vertor.com##.tp_reccomend_banner\nemedtv.com##.tpad\nindiatimes.com##.tpgry\npagesinventory.com##.tpromo\nunlockboot.com##.tr-caption-container\ntrustedreviews.com##.tr-reviews-affiliate\n911tabs.com##.tr1\ntorentilo.com##.trackers + .downloadButton\ndailymail.co.uk##.travel-booking-links\ndailymail.co.uk##.travel.item.button_style_module\ndailymail.co.uk##.travel.item.html_snippet_module\nnj.com##.travidiatd\nbaltimoresun.com,chicagotribune.com,courant.com,dailypress.com,latimes.com,mcall.com,orlandosentinel.com,redeyechicago.com,sun-sentinel.com##.trb_outfit_sponsorship\nbaltimoresun.com,chicagotribune.com,courant.com,dailypress.com,latimes.com,mcall.com,orlandosentinel.com,redeyechicago.com,sun-sentinel.com##.trb_taboola\nweather.com##.trc_recs_column + .right-column\nsitepoint.com##.triggered-cta-box-wrapper-bg\nthestar.com##.ts-articlesidebar_wrapper\ngoogle.com,~mail.google.com##.ts[style=\"margin:0 0 12px;height:92px;width:100%\"]\ntechspot.com##.ts_google_ad\nask.reference.com##.tsrc_SAS\nsearch.vmn.net##.ttl_sponsors\ninfoplease.com##.tutIP-infoarea\njoebucsfan.com##.tweet_div1\nenglishrussia.com##.two_leep_box\nahk-usa.com,gaccmidwest.org,gaccny.com,gaccsouth.com,gaccwest.com##.tx-bannermanagement-pi1\ncare2.com##.txt13-vd\nshaaditimes.com##.txt[style=\"border: solid 1px #A299A6; background-color: #FDFCFC;\"]\nmail.google.com##.u4\nmail.google.com##.u9\nvillages-news.com##.ubm_premium_banners_rotation\nvillages-news.com##.ubm_premium_rotation_widget\nblogtv.com##.uc_banner\ndbforums.com##.ui-widget-overlay[style$=\"z-index: 1001;\"]\nsearchenginewatch.com##.ukn-iab-300x250\nsearchenginewatch.com##.ukn-u-thanks\nbitenova.nl,bitenova.org##.un\nbitenova.nl,bitenova.org##.un_banner\nwbgo.org##.underwriting\nsportodin.com,stream4.tv##.unfullscreener\nafterdawn.com##.uniblue\nmediaite.com##.unit-wrapper\nwonderhowto.com##.unverVidAd\nhottipscentral.com##.unwrapped\nnotebook-driver.com##.updrv\nsiouxcityjournal.com##.upickem-deal-of-the-day\nmemez.com##.upperSideBox\nuproxx.com##.uproxx_mp_ad\nchristiantoday.com##.usefulLinks\ndowneu.net##.usenet\n1337x.org##.usenetDw\nmnova.eu,monova.org##.usenetd\nmonova.org##.usenextd\nmoney-forum.org##.usideblock\nuniversetoday.com##.ut_ad_content\nmonova.org##.utext1\nmonova.org##.uts\nsportsnet.ca##.v2-3cols-promo\nsportsnet.ca##.v2-topnav-promo\ndealsonwheels.co.nz,farmtrader.co.nz,motorcycletrader.co.nz,tradeaboat.co.nz##.vBanner\nvosizneias.com##.vads\nlasvegassun.com##.varWrapper\nindeed.com##.vasu\nthehill.com##.vbanner\nthehill.com##.vbanner_center\nslickdeals.net##.vbmenu_popup + .tborder[align=\"center\"][width=\"100%\"][cellspacing=\"0\"][cellpadding=\"6\"][border=\"0\"]\ndrivearchive.co.uk##.vehicle[style=\"background-color:#b0c4de\"]\nthelocalweb.net##.verdana9green\nsoftpile.com##.versionadv\nsearch.yahoo.com##.vert-ad-ttl + * > .eca[target=\"_blank\"][href^=\"http://r.search.yahoo.com/_ylt=\"]\ntheverge.com##.vert300\nnewsnet5.com,wcpo.com,wxyz.com##.vertical-svg\nytmnd.com##.vertical_aids\npraguepost.com##.vertical_banner\ncnn.com##.vidSponsor\nthevideo.me##.vid_a8\nautoslug.com##.video\ndailystoke.com,wimp.com##.video-ad\ndrive.com.au##.videoGalLinksSponsored\nanswers.com##.video_1\nanswers.com##.video_2\nthevideo.me##.video_a800\nvideobam.com##.video_banner\nfora.tv##.video_plug_space\nrapidvideo.org##.video_sta\ntimeoutmumbai.net##.videoad2\nsoccerclips.net##.videoaddright1\nstraitstimes.com##.view-2014-qoo10-feature\neuractiv.com##.view-Sponsors\nmoviemet.com##.view-amazon-offers\nnext-gen.biz##.view-featured-job-ad\ntheweek.co.uk##.view-footer\nthemittani.com##.view-game-taxonomy-affiliates\nhealthcastle.com##.view-healthcastle-ads\nzdnet.com##.view-medusa\nasiaone.com##.view-qoo10-box\ntalksport.co.uk##.view-ts-sponsor-feature\nimagebunk.com##.view_banners\nrelink.us##.view_middle_block\nvidiload.com##.vinfobanner\nvipleague.co##.vip_006x061\nvipleague.co,vipleague.me##.vip_09x827\nhost1free.com##.virus-information\ngreenoptimistic.com##.visiblebox[style^=\"position: fixed; z-index: 999999;\"]\nviamichelin.co.uk,viamichelin.com##.vm-pub-home300\nn4g.com##.vn-sub\nsearchassist.verizon.com##.vn_searchresults > .vn_results + .vn_rightresults\nsearchassist.verizon.com##.vn_sponsblock\nsheptonmalletjournal.co.uk##.vouchers\ncenturylink.net##.vp_right\nvivastreet.co.uk##.vs-summary-300x250\nmsn.com##.vxp_adContainer\ndlldll.com##.w0[width=\"181\"]\nskysports.com##.w10-mpu\nshare-links.biz##.w160.dark.center\nway2sms.com##.w2mtad\nmsn.com##.w460.clr\nplumasnews.com##.w49\nchinadaily.com.cn##.w980.pt10\nap.org##.wBanner\nweatherbug.com##.wXcds1\nweatherbug.com##.wXcds2\nptf.com,software.informer.com##.w_e\nxe.com##.wa_leaderboard\nutrend.tv##.wad\nsportskrap.com##.wallpaper-link\nnaij.com##.wallpaper__bg\nnaij.com##.wallpaper__top\ntorrentdownloads.net##.warez\nimdb.com##.watch-bar\nyoutube.com##.watch-extra-info-column\nyoutube.com##.watch-extra-info-right\niwannawatch.net##.watch.external\nchannel4.com##.watchLiveOutlinks\nmovie25.cm##.watchnow\ncoolspotters.com##.wau\nwbal.com##.wbal-banner\nwincustomize.com##.wc_home_tour_loggedout\ndir.indiamart.com##.wd1\nyahoo.com##.wdpa1\nglamourvanity.com##.wdt_gads\nwe7.com##.we7-north\ntimesfreepress.com##.weatherSponsor\nknowfree.net##.web_link\nvg.no##.webboard\noffshore-mag.com##.webcast-promo-box-sponsorname\ncommitstrip.com##.wejusthavetoeat\nwincustomize.com##.welcome\ntaskcoach.org##.well\ncosplay.com##.well2[style=\"padding: 0px; text-align: center; margin-top: 10px\"]\ngearlive.com##.wellvert\ncodinghorror.com##.welovecodinghorror\nboston.com##.what_is_link\nsoccer365.com##.whiteContentBdr350\ntechworld.com##.whitePaperContainer\nhellokids.com##.white_box.r5\ntorrenthound.com##.whitebg\nbackstage.com##.whitemodbg\nbetanews.com##.whitepapers\nliving.aol.co.uk##.wide.horizontal_promo_HPHT\nport2port.com##.wideBanner\ninvesting.com##.wideBannerBottom\nfootyroom.com##.wideBox\ninooz.co.uk##.wideContainer\nnetpages.co.za,pch.com,pchgames.com##.wide_banner\nnetpages.co.za##.wide_banner2\nnewgrounds.com##.wide_storepromo\nnewgrounds.com##.wide_storepromobot\nroms43.com##.widebanner\nvideogamer.com##.widesky\nnetworkworld.com##.wideticker\ntorrentfreak.com##.widg-title\nsoccer24.co.zw##.widget-1\nnewsbtc.com##.widget-1 > .banner\nsoccer24.co.zw##.widget-2\nsmartearningsecrets.com##.widget-area\nhdtvtest.co.uk##.widget-container\nwikinvest.com##.widget-content-nvadslotcomponent\nbloombergtvafrica.com,miniclip.com##.widget-mpu\nthevine.com.au##.widget-shopstyle\nshanghaiist.com##.widget-skyscraper\nabovethelaw.com##.widget-sponsor\nhdtvtest.co.uk##.widget-top\ndose.ca##.widget_650\nfxempire.com##.widget_banner\nmg.co.za,valke.co.za##.widget_banners\nphonedog.com##.widget_bar_bottom\nbloomberg.com##.widget_bb_doubleclick_widget\nthescore.com##.widget_bigbox\nusacryptocoins.com##.widget_buffercode_banner_upload_info\ncbslocal.com,radio.com##.widget_cbs_gamification_stats_widget\nlulzsec.net##.widget_chaturbate_widget\nstyleblazer.com##.widget_fashionblog_ad\nurbanmusichq.se##.widget_gad\nextremetech.com##.widget_gptwidget\nfxempire.com##.widget_latest_promotions\nfxempire.com##.widget_latest_promotions_right\ngeek.com##.widget_logicbuy_first_deal\nmodamee.com##.widget_nav_menu\nfxempire.com##.widget_recommended_brokers\ntwistedsifter.com##.widget_sifter_ad_bigbox_widget\namygrindhouse.com,lostintechnology.com##.widget_text\nfxempire.com##.widget_top_brokers\nventurebeat.com##.widget_vb_dfp_ad\nwired.com##.widget_widget_widgetwiredadtile\nindiatvnews.com##.wids\neducationbusinessuk.net##.width100 > a[target=\"_blank\"] > img\neducationbusinessuk.net##.width100 > p > a[target=\"_blank\"] > img\nlistverse.com##.wiki\nespn.co.uk##.will_hill\noboom.com##.window_current\nfoxsports.com##.wisfb_sponsor\nweatherzone.com.au##.wo-widget-wrap-1\nplanet5d.com##.wp-image-1573\nisraelnationalnews.com##.wp_HPCenterIn\nnotjustok.com##.wpbr-widget\nnotjustok.com,punchng.com##.wpbrbanner\nwebpronews.com##.wpn-business-resources\nbuzzinn.net##.wpn_finner\ntalkers.com##.wpss_slideshow\ntheregister.co.uk##.wptl\nosbot.org##.wrapper > center:nth-of-type(-n+3) > a\nbreitbart.com##.wrapperBanner\nbnaibrith.org##.wsite-image[style=\"padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center\"]\npoynter.org##.wsm_frame_medium\nwebtoolhub.com##.wth_zad_text\nsearch.ch##.www_promobox\nnewsherder.com##.x-300x250\ndavidwalsh.name##.x-terciary\njpost.com##.xl-banner-wrap\nchronicle.com,fareastgizmos.com,ganzworld.com,webdesignerdepot.com##.xoxo\ncryptothrift.com##.xoxo > #text-34\ncryptothrift.com##.xoxo > #text-50\ncryptothrift.com##.xoxo > #text-55\nmail.google.com##.xz\nyahoo.com##.y7-breakout-bracket\nyahoo.com##.y708-ad-eyebrow\nyahoo.com##.y708-commpartners\nyahoo.com##.y708-promo-middle\nyahoo.com##.y7moneyhound\nyahoo.com##.y7partners\nyahoo.com##.ya-LDRB\nyahoo.com##.ya-darla-LREC\nyahoo.com##.yad\nyahoo.com##.yad-cpa\nmysanantonio.com##.yahoo-bg\nthetimes-tribune.com##.yahoo-content_match\ncandofinance.com,idealhomegarden.com##.yahooSl\nnewsok.com##.yahoo_cm\nthetandd.com##.yahoo_content_match\nreflector.com##.yahooboss\ntumblr.com##.yamplus-unit-container\nyardbarker.com##.yard_leader\nautos.yahoo.com##.yatAdInsuranceFooter\nautos.yahoo.com##.yatysm-y\nyelp.be,yelp.ca,yelp.ch,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.au,yelp.com.sg,yelp.ie##.yelp-add\nfinance.yahoo.com##.yfi_ad_s\ngroups.yahoo.com##.yg-mbad-row\ngroups.yahoo.com##.yg-mbad-row > *\nyelp.be,yelp.ca,yelp.ch,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.au,yelp.com.sg,yelp.ie##.yla\nyelp.be,yelp.ca,yelp.ch,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.au,yelp.com.sg,yelp.ie##.yloca-list\nyelp.be,yelp.ca,yelp.ch,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.au,yelp.com.sg,yelp.ie##.yloca-search-result\nlocal.yahoo.com##.yls-rs-paid\neurosport.yahoo.com##.yom-sports-betting\nfinance.yahoo.com,news.yahoo.com##.yom-ysmcm\nyellowpages.aol.com##.yp_ad\nyahoo.com##.yschspns\nyahoo.com##.ysm-cont\ntravel.yahoo.com##.ysmcm\nyahoo.com##.ysptblbdr3\ntravel.yahoo.com##.ytrv-lrec\nnfl.com##.yui3-polls-mobile-adspot\nmaps.yahoo.com##.yui3-widget-stacked\nzvents.com##.z-spn-featured\nmail.google.com##.z0DeRc\nzacks.com##.zacks_header_ad_ignore\nzap2it.com##.zc-station-position\ncricketcountry.com##.zeeibd\ndownturk.net##.zippo\nisraelnationalnews.com##.znn\nfoodprocessorsdirect.com##.zoneWidth100\ntomsguide.com,tomshardware.com##.zonepub\nyfrog.com##.zoom-promotion-bottom\nisearch.whitesmoke.com##:not(.item):not(.stats) + * + .item\nogsi.it##A[href^=\"//adbit.co/?a=Advertise\"]\ncryptocoinsnews.com##A[onclick^=\"_gaq.push(['_trackEvent', 'Ads',\"]\nfastpiratebay.eu,thepiratebay.se##A[title=\"Anonymous Download \"]\nmobilephonetalk.com##[align=\"center\"] > b > a[href^=\"http://tinyurl.com/\"]\nincredimail.com##[autoid=\"sponsoredLinks\"]\nbittorrent.am##[bgcolor=\"#66CCCC\"][style=\"background: rgb(126, 180, 224)\"]\nfacebook.com##[data-referrer=\"pagelet_side_ads\"]\nhulu.com##[flashvars^=\"backgroundURL=http://ads.hulu.com/published/\"]\nbunalti.com##[height=\"90\"][width=\"728\"]\nfacebook.com##[href^=\"/ads/adboard/\"]\nforums.motortrend.com##[id^=\"IN_HOUSE_AD_SWITCHER_\"]\nexplosm.net##[id^=\"MarketGid\"]\ncultofmac.com##[name=\"dn-frame-1\"]\nnaturalblaze.com##[rel=\"nofollow\"][href^=\"http://products.naturalblaze.com/\"] > img\ngoogle.com,~mail.google.com##[style=\"border: 1px solid rgb(0, 90, 136);\"]\ngoogle.com,~mail.google.com##[style=\"border: 1px solid rgb(145, 117, 77);\"]\ngoogle.com,~mail.google.com##[style=\"border: 1px solid rgb(241, 250, 248);\"]\ngoogle.com,~mail.google.com##[style=\"border: 1px solid rgb(51, 102, 153);\"]\ngoogle.com,~mail.google.com##[style=\"border: 1px solid rgb(51, 102, 204);\"]\ntimeanddate.com##[style=\"float: right; width: 170px;\"]\ncondo.com##[style=\"float:left;width:515px;\"]\nhindustantimes.com##[style=\"font-family:Arial; color: #545454; font-size:10px; font-family:Arial; padding-right:15px\"]\nnetload.in##[style=\"height: 100px;\"]\nnotalwaysright.com##[style=\"height: 250px; text-align: center; margin-bottom:20px\"]\nwxyz.com##[style=\"height:310px;width:323px\"]\nuploaded.to##[style=\"margin-left: 15px;\"]\ncrazymotion.net##[style=\"margin: 10px auto 0pt; width: 875px;\"]\nwahm.com##[style=\"min-height:250px;\"]\nnarutoforums.com##[style=\"padding:0px 0px 6px 0px\"] > div[style=\"padding:0px 0px 0px 0px;margin-top:4px;\"]\ndarelease.com,latestdown.com##[style=\"width: 100%; margin: 0pt auto;\"]\ntecca.com##[style=\"width:728px; height:90px;\"]\nblockchain.info##[style=\"width:728px;overflow:hidden;margin:0px auto;max-width:90%;\"]\np2pnet.net##[target=\"_blank\"]\newallpapers.eu##[title=\"Advertising\"]\nmarketwatch.com##[width=\"120\"][bgcolor=\"#d7d7d6\"]\ntorrentresource.com##[width=\"150\"]:last-child\newallpapers.eu##[width=\"160\"]\nurlfan.com##[width=\"160px\"]\nboyplz.com##[width=\"250\"]\nbreak.com##[width=\"300\"][height=\"250\"]\ncapitolfax.com##[width=\"410\"] td[width=\"50%\"]:first-child\n4chan.org,crackdump.com##[width=\"468\"]\nmajorgeeks.com##[width=\"478\"][height=\"70\"]\n4chan.org##[width=\"728\"]\ntimeanddate.com##[width=\"728\"][height=\"90\"]\ncrackdump.com##[width=\"74\"]\nempireonline.com##[width=\"950\"][height=\"130\"][align=\"center\"]\nlindaikeji.blogspot.com##a > img[height=\"600\"]\npowerbot.org##a > img[width=\"729\"]\nfacebook.com##a[ajaxify^=\"/ajax/emu/end.php?\"]\nbitcointalk.org##a[class^=\"td_headerandpost\"][href^=\"https://www.privateinternetaccess.com\"]\npcmag.com##a[data-section=\"Ads\"]\nlinksave.in##a[href$=\"speed\"]\nfilenuke.com,sharesix.com##a[href*=\"&popunder\"]\nisearch.whitesmoke.com##a[href*=\"&rt=gp&\"]\nfilenuke.com,sharesix.com##a[href*=\"&zoneid=\"]\nhuffingtonpost.com##a[href*=\".atwola.com/\"]\nimgah.com##a[href*=\".com/track/\"]\nmangafox.me##a[href*=\".game321.com/\"]\nin5d.com,jeffbullas.com,siteworthchecker.com##a[href*=\".hop.clickbank.net\"]\nhotbollywoodactress.net##a[href*=\".makdi.com\"]\nsportinglife.com##a[href*=\".skybet.com/\"]\npunjabimob.org##a[href*=\".smaato.net\"]\niolproperty.co.za##a[href*=\"/Ad_Click_Thru.jsp?\"]\ndutchnews.nl##a[href*=\"/adbanners/\"]\nitweb.co.za,radiofrontier.ch##a[href*=\"/adclick.php?\"]\nbusiness-standard.com##a[href*=\"/adclicksTag.php?\"]\nitweb.co.za##a[href*=\"/adredir.php?\"]\nbitcoinist.net##a[href*=\"/adserv/click.php?id=\"]\nf1today.net##a[href*=\"/advertorial--\"]\nadlock.org##a[href*=\"/download/\"]\nvideobull.to##a[href*=\"/go-to-watch.php\"]\nrapidok.com##a[href*=\"/go/\"]\ndevshed.com##a[href*=\"/www/delivery/\"]\nietab.net##a[href*=\"/xadnet/\"]\nultimate-guitar.com##a[href*=\"=http://www.jamplay.com/\"]\nencyclopediadramatica.se##a[href*=\"http://torguard.net/aff.php\"]\ninamsoftwares.com##a[href=\" http://60ads.com\"]\nwatch-movies-az.com##a[href=\"../download_video.php\"]\nunitconversion.org##a[href=\"../noads.html\"]\nencyclopediadramatica.se##a[href=\"//encyclopediadramatica.se/sparta.html\"]\ninsidefacebook.com##a[href=\"/advertise\"]\nfooooo.com##a[href=\"/bannerClickCount.php\"]\nopensubtitles.org##a[href=\"/en/aoxwnwylgqtvicv\"]\ngtplanet.net##a[href=\"/geo-GT6-preorder.php\"]\nviewdocsonline.com##a[href=\"/links/regboost_header.php\"]\nmailinator.com##a[href=\"/soget.jsp\"]\ndlldll.com##a[href=\"/stw_lp/fmr/\"]\nthejointblog.com##a[href=\"http://42grow.com\"] > img\ndogepay.com##a[href=\"http://WeSellDoges.com\"] > img\naddgadgets.com##a[href=\"http://addgadgets.com/mcafee-internet-security/\"]\nthejointblog.com##a[href=\"http://autoseeds.com/\"] > img\nvivaprograms.com##a[href=\"http://b6384502.linkbucks.com\"]\nmediafire4u.com##a[href=\"http://bit.ly/lFerdB\"]\ninternet-online.org##a[href=\"http://bn6us.etvcorp.track.clicksure.com\"]\ndelishows.com##a[href=\"http://delishows.com/stream.php\"]\ncrackdb.cd##a[href=\"http://directdl.com\"]\ncrackdb.cd##a[href=\"http://down.cd/\"]\nonhax.net##a[href=\"http://downloadlink.onhax.net\"]\nencyclopediadramatica.es##a[href=\"http://encyclopediadramatica.es/webcamgirls.html\"]\ntny.cz##a[href=\"http://followshows.com?tp\"]\ntf2maps.net##a[href=\"http://forums.tf2maps.net/payments.php\"]\ngeneralfiles.me##a[href=\"http://gofindmedia.net/\"]\nsearch.yahoo.com##a[href=\"http://help.yahoo.com/l/us/yahoo/search/basics/basics-03.html\"]\ndigitallydownloaded.net##a[href=\"http://iphone.qualityindex.com/\"] > img\nbazoocam.org##a[href=\"http://kvideo.org\"]\ndatafilehost.com##a[href=\"http://liversely.net/datafileban\"]\nmaketecheasier.com##a[href=\"http://maketecheasier.com/advertise\"]\nlimetorrents.cc##a[href=\"http://movie4u.org/\"]\nmoviefather.com##a[href=\"http://moviefather.com/watchonline.php\"]\nmp3truck.net##a[href=\"http://mp3truck.net/get-torrent/\"]\nmy.rsscache.com##a[href=\"http://nimbb.com\"]\nsoft32.com##a[href=\"http://p.ly/regbooster\"]\nultimate-guitar.com##a[href=\"http://plus.ultimate-guitar.com/ad-free/\"]\ninfowars.com##a[href=\"http://prisonplanet.tv/\"]\nforum.ihubhost.net##a[href=\"http://proleaks.com\"]\npropakistani.pk##a[href=\"http://propakistani.pk/sms/\"]\nclashbot.org##a[href=\"http://rsmalls.com\"] > img\ngooddrama.net##a[href=\"http://spendcrazy.net\"]\nadrive.com##a[href=\"http://stores.ebay.com/Berkeley-Communications-Corporation\"]\nuniladmag.com##a[href=\"http://thetoiletstore.bigcartel.com/\"]\ntoucharcade.com##a[href=\"http://toucharcade.com/sdlink/\"]\ntoucharcade.com##a[href=\"http://toucharcade.com/sdlink2/\"]\ntoucharcade.com##a[href=\"http://toucharcade.com/sdlink3/\"]\nrlsbb.com##a[href=\"http://trailerhell.com/make_money.html\"]\nfreetv.tv##a[href=\"http://tvoffer.etvcorp.track.clicksure.com\"]\nvidbear.com##a[href=\"http://videoworldx.com\"]\nwatch-movies-az.com##a[href=\"http://watch-movies-az.com/download_video1.php\"]\nbangtidy.net##a[href=\"http://www.bangtidy.net/AFF.php\"]\nbangtidy.net##a[href=\"http://www.bangtidy.net/mrskin.php\"]\nbetterhostreview.com##a[href=\"http://www.betterhostreview.com/arvixe.com\"]\nbetterhostreview.com##a[href=\"http://www.betterhostreview.com/hosting-review-bluehost.htm\"]\nactivistpost.com##a[href=\"http://www.bloggersecret.com/\"]\nthejointblog.com##a[href=\"http://www.bombseeds.nl/\"] > img\nhscripts.com##a[href=\"http://www.buildmylink.com\"]\ndesivideonetwork.com##a[href=\"http://www.desiaction.com\"]\ndiablo3builds.com##a[href=\"http://www.diablo3builds.com/bc\"]\ndirwell.com##a[href=\"http://www.dirwell.com/submit.php\"]\ndllerrors-fix.com##a[href=\"http://www.dllerrors-fix.com/Download.php\"]\ndl4all.com##a[href=\"http://www.enginesong.com\"]\niphonecake.com##a[href=\"http://www.filepup.net/get-premium.php\"]\ninterupload.com##a[href=\"http://www.fileserving.com/\"]\nfilmon.tv##a[href=\"http://www.filmon.com\"]\ngeocities.ws##a[href=\"http://www.gridhoster.com/?geo\"]\nfinancialsurvivalnetwork.com##a[href=\"http://www.hardassetschi.com/\"]\nthejointblog.com##a[href=\"http://www.herbiesheadshop.com/\"] > img\nscam.com##a[href=\"http://www.ip-adress.com/trace_email/\"]\nwiiuiso.com##a[href=\"http://www.jobboy.com\"]\nnichepursuits.com##a[href=\"http://www.longtailpro.com\"]\nmakeuseof.com##a[href=\"http://www.makeuseof.com/advertise/\"]\nmegatorrent.eu##a[href=\"http://www.megatorrent.eu/go2.html\"]\ndailymirror.lk##a[href=\"http://www.nawaloka.com/\"]\nnichepursuits.com##a[href=\"http://www.nichepursuits.com/whp\"]\nnichepursuits.com##a[href=\"http://www.nichewebsitetheme.com\"]\nnaijaborn.com##a[href=\"http://www.njorku.com/nigeria\"] > img\nps3iso.com##a[href=\"http://www.pcgameiso.com\"]\nletmesingthis.com##a[href=\"http://www.singorama.me\"]\nanimenova.tv,animetoon.tv,gogoanime.com,goodanime.eu,gooddrama.net,toonget.com##a[href=\"http://www.spendcrazy.net\"]\ngogoanime.com,goodanime.eu##a[href=\"http://www.spendcrazy.net/\"]\ndosplash.com##a[href=\"http://www.sverve.com/dashboard/DoSplash\"]\ntalkarcades.com##a[href=\"http://www.talkarcades.com/misc.php?do=page&template=advertise\"]\ntelepisodes.net##a[href=\"http://www.telepisodes.net/downloadtvseries.php\"]\nthejointblog.com##a[href=\"http://www.thebestsalvia.com/\"] > img\nfree-wallpaper-download.com##a[href=\"http://www.thoosje.com/toolbar.html\"]\nsitevaluecalculator.com##a[href=\"http://www.top-site-list.com\"]\nquicksilverscreen.com##a[href=\"http://www.tubeplus.com\"]\nthejointblog.com##a[href=\"http://www.unitedforcare.org/sign_up\"] > img\nthejointblog.com##a[href=\"http://www.uptowngrowlab.net/\"] > img\nvidbux.com##a[href=\"http://www.vidbux.com/ccount/click.php?id=4\"]\nvivaprograms.com##a[href=\"http://www.vivausb.com\"]\nwatchop.com##a[href=\"http://www.watchop.com/download.php\"]\nziddu.com##a[href=\"http://wxdownloadmanager.com/zdd/\"]\nzmea-log.blogspot.com##a[href=\"http://zmea-log.blogspot.com/p/rapids-for-sale.html\"]\nwemineall.com,wemineltc.com##a[href=\"https://diceliteco.in\"]\nnamepros.com##a[href=\"https://uniregistry.com/\"]\nvpsboard.com##a[href=\"https://vpsboard.com/advertise.html\"]\nugotfile.com##a[href=\"https://www.astrill.com/\"]\ncryptocoinsnews.com##a[href=\"https://www.genesis-mining.com/pricing\"]\n300mbmovies4u.com##a[href^=\"//1phads.com/\"]\ndoubleclick.net##a[href^=\"//dp.g.doubleclick.net/apps/domainpark/\"]\nrapidog.com##a[href^=\"/adclick.php\"]\nsweflix.net,sweflix.to##a[href^=\"/adrotate.php?\"]\nshroomery.org##a[href^=\"/ads/ck.php?\"]\nmetrolyrics.com##a[href^=\"/ads/track.php\"]\nshroomery.org##a[href^=\"/ads/www/delivery/\"]\nscoop.co.nz##a[href^=\"/adsfac.net/link.asp?\"]\nfacebook.com##a[href^=\"/ajax/emu/end.php?\"]\nicmag.com##a[href^=\"/banners.php?\"]\nrsbuddy.com##a[href^=\"/campaign/click_\"]\nbusiness-standard.com##a[href^=\"/click-tracker/textlink/\"]\ntorrentbit.net##a[href^=\"/click/9/\"]\nhpcwire.com##a[href^=\"/ct/e/\"]\ntorrentfunk.com##a[href^=\"/dltor3/\"]\nmerdb.ru,primewire.ag##a[href^=\"/external.php?gd=0&\"]\nyourbittorrent.com##a[href^=\"/extra/\"]\nvitorrent.net##a[href^=\"/file.php?name\"]\ntinydl.eu##a[href^=\"/go.php?http://sharesuper.info\"]\nyourbittorrent.com##a[href^=\"/go/\"]\nbts.ph##a[href^=\"/goto_.php?\"]\ndownloadhelper.net##a[href^=\"/liutilities.php\"]\nhoundmirror.com,sharedir.com##a[href^=\"/out.php?\"]\ntorrentproject.se##a[href^=\"/out3/\"]\ntorrentproject.org,torrentproject.se##a[href^=\"/out4/\"]\nairliners.net##a[href^=\"/rad_results.main?\"]\nahashare.com##a[href^=\"/re.php?url\"]\ntorrentv.org##a[href^=\"/rec/\"]\ntrashortreasure.co.nz##a[href^=\"/rotator1/click.php?\"]\ntorrent.cd,torrentdb.in,torrentz.cd##a[href^=\"/site/sp/\"]\ntorrentfunk.com##a[href^=\"/tor2/\"]\ntorrentfunk.com##a[href^=\"/tor3/\"]\nstuff.co.nz##a[href^=\"/track/click/\"]\nbitsnoop.com##a[href^=\"/usenet_dl/\"]\nbitsnoop.com##a[href^=\"/usenet_dl/\"] + br + span\nrarbg.to,rarbgmirror.com,rarbgproxy.com##a[href^=\"/wd_adpub.php?\"]\ntorrentz.ch,torrentz.com,torrentz.eu,torrentz.li,torrentz.me,torrentz.ph##a[href^=\"/z/ddownload/\"]\ntorrents.de,torrentz.ch,torrentz.com,torrentz.eu,torrentz.in,torrentz.li,torrentz.me,torrentz.ph##a[href^=\"/z/webdownload/\"]\nwomenspress.com##a[href^=\"Redirect.asp?UID=\"]\n474747.net##a[href^=\"ad\"]\nxbox-hq.com##a[href^=\"banners.php?\"]\nxtshare.com##a[href^=\"download.php?download=\"]\ndownloadhelper.net##a[href^=\"free-driver-scan.php\"]\nsockshare.com##a[href^=\"fuu.php\"]\nrom-freaks.net##a[href^=\"gotomirror-\"]\ncoolsport.tv##a[href^=\"http://188.95.48.110/\"]\nthefilebay.com##a[href^=\"http://91.205.157.43/\"]\nheroturko.org##a[href^=\"http://MyDownloadHQ.com/index.asp?PID=\"]\nnewssun.com##a[href^=\"http://access.newssun.com/b_cl.php?\"]\nactivistpost.com##a[href^=\"http://activistpost.net/\"] > img\nbayfiles.com##a[href^=\"http://ad.propellerads.com/\"]\nunawave.de##a[href^=\"http://ad.zanox.com/\"]\nreading107fm.com,three.fm##a[href^=\"http://adclick.g-media.com/\"]\njdownloader.org##a[href^=\"http://adcolo.com/ad/\"]\nextremefile.com##a[href^=\"http://adf.ly/\"]\nhighdefjunkies.com##a[href^=\"http://adorama.evyy.net/\"]\ndepositfiles.com,dfiles.eu##a[href^=\"http://ads.depositfiles.com/\"]\ngorillavid.in##a[href^=\"http://ads.gorillavid.in/\"]\nhindilinks4u.to##a[href^=\"http://ads.hindilinks4u.to/\"]\nhowproblemsolution.com##a[href^=\"http://ads.howproblemsolution.com/\"]\nhardwareheaven.com##a[href^=\"http://adserver.heavenmedia.com/\"]\ndeviantart.com##a[href^=\"http://advertising.deviantart.com/\"]\nthesearchenginelist.com##a[href^=\"http://affiliate.buy.com/gateway.aspx?\"]\nsmallbusinessbrief.com##a[href^=\"http://affiliate.wordtracker.com/\"]\nthe-numbers.com##a[href^=\"http://affiliates.allposters.com/\"]\nfreebetcodes.info##a[href^=\"http://affiliates.galapartners.co.uk/\"]\njusthungry.com##a[href^=\"http://affiliates.jlist.com/\"]\nnews24.com##a[href^=\"http://affiliates.trafficsynergy.com/\"]\nanimetake.com##a[href^=\"http://anime.jlist.com/click/\"]\ntorrent-invites.com##a[href^=\"http://anonym.to?http://www.seedmonster.net/clientarea/link.php?id=\"]\nspeedvideo.net##a[href^=\"http://api.adlure.net/\"]\ndatafilehost.com,load.to,tusfiles.net##a[href^=\"http://applicationgrabb.net/\"]\navxhome.se##a[href^=\"http://avaxnews.net/tags/\"]\nwebmail.co.za##a[href^=\"http://b.wm.co.za/click.pwm?\"]\nextratorrent.cc,extratorrent.unblocked.pw,extratorrentlive.com##a[href^=\"http://bestories.xyz/\"]\nthetvdb.com##a[href^=\"http://billing.frugalusenet.com/\"]\ncoinad.com,digitallydownloaded.net,dotmmo.com,ebookw.com,fastvideo.eu,majorgeeks.com,ncrypt.in,rapidvideo.org,sh.st,ultshare.com##a[href^=\"http://bit.ly/\"]\nancient-origins.net##a[href^=\"http://bit.ly/\"] > img\nbitminter.com##a[href^=\"http://bitcasino.io?ref=\"]\nleasticoulddo.com##a[href^=\"http://blindferret.clickmeter.com/\"]\nlowyat.net##a[href^=\"http://bs.serving-sys.com\"]\ndemonoid.pw,torrentfreak.com,torrents.de,torrentz.in,torrentz.li,torrentz.me,torrentz.ph##a[href^=\"http://btguard.com/\"]\nnexadviser.com##a[href^=\"http://budurl.com/\"]\ndownforeveryoneorjustme.com,isup.me##a[href^=\"http://bweeb.com/\"]\nakeelwap.net,w2c.in##a[href^=\"http://c.admob.com/\"]\nzomganime.com##a[href^=\"http://caesary.game321.com/\"]\nebooksx.org##a[href^=\"http://castee.com/\"]\nspacemov.com##a[href^=\"http://cdn.adsrvmedia.net/\"]\nadexprt.com##a[href^=\"http://cdn3.adexprts.com\"] + span\nanimenewsnetwork.com##a[href^=\"http://cf-vanguard.com/\"]\nvidstatsx.com##a[href^=\"http://channelpages.com/\"]\ncommitstrip.com##a[href^=\"http://chooseyourboss.com/?utm_source=\"]\nquuit.com##a[href^=\"http://classic.thumbplay.com/join/\"]\nakeelwap.net##a[href^=\"http://click.buzzcity.net/click.php?\"]\nweddingmuseum.com##a[href^=\"http://click.linksynergy.com/\"]\ntopsocial.info##a[href^=\"http://click.search123.uk.com/\"]\nvideomide.com##a[href^=\"http://click.wapdollar.in/\"]\nmp3-shared.net##a[href^=\"http://click.yottacash.com?PID=\"]\nunawave.de##a[href^=\"http://clix.superclix.de/\"]\nheraldscotland.com,tmz.com##a[href^=\"http://clk.atdmt.com/\"]\n180upload.com##a[href^=\"http://clkmon.com/static/rdr.html?pid=\"]\nstream2watch.com##a[href^=\"http://clkrev.com/adServe/\"]\nabsoluteradio.co.uk,mkfm.com##a[href^=\"http://clkuk.tradedoubler.com/click?\"]\ndot-bit.org##a[href^=\"http://coinabul.com/?a=\"]\ngas2.org##a[href^=\"http://costofsolar.com/?\"]\npowvideo.net##a[href^=\"http://creative.ad127m.com/\"]\nidm-crack-patch.com##a[href^=\"http://databass.info\"]\narmslist.com##a[href^=\"http://delivery.tacticalrepublic.com/\"]\nebookw.com##a[href^=\"http://dlguru.com/\"]\ndllnotfound.com##a[href^=\"http://dllnotfound.com/scan.php\"]\nmajorgeeks.com##a[href^=\"http://download.iobit.com/\"]\nfree-tv-video-online.me##a[href^=\"http://downloaderfastpro.info/\"]\nfilegag.com##a[href^=\"http://downloadsave.info/\"]\nletstalkbitcoin.com##a[href^=\"http://easypress.ca/?V=\"] > img\ninfowars.com##a[href^=\"http://efoodsdirect.sitescout.com/click?clid=\"]\nucas.com##a[href^=\"http://eva.ucas.com/s/redirect.php?ad=\"]\nflashvids.org##a[href^=\"http://flashvids.org/click/\"]\nforumpromotion.net##a[href^=\"http://freebitco.in/?r=\"]\nextratorrent.cc,uploadrocket.net##a[href^=\"http://getsecuredfiles.com/\"]\nextratorrent.cc##a[href^=\"http://getterstory.com/\"]\nkinox.to,speedvideo.net,thepiratebay.to##a[href^=\"http://go.ad2up.com/\"]\nmangahere.com##a[href^=\"http://go.game321.com/\"]\nfilesoup.com##a[href^=\"http://gomediamasteronline.com/\"]\narmorgames.com,getios.com,myrls.se,ncrypt.in,rapidvideo.tv,theedge.co.nz##a[href^=\"http://goo.gl/\"]\nancient-origins.net##a[href^=\"http://goo.gl/\"] > img\nlimetorrents.cc,thepiratebay.みんな##a[href^=\"http://guide-free.com/\"]\nkinox.to##a[href^=\"http://hd-streams.tv/\"]\nputlocker.is##a[href^=\"http://hdmoviesinc.com/\"]\nkingfiles.net##a[href^=\"http://hdplugin.fplayer-updates.com/\"]\ncrackdb.cd##a[href^=\"http://homeklondike.com\"]\nhotfiletrend.com##a[href^=\"http://hotfiletrend.com/c.php?\"]\nfree-tv-video-online.me,movdivx.com,quicksilverscreen.com,veehd.com##a[href^=\"http://install.secure-softwaremanager.com/\"]\nncrypt.in,querverweis.net##a[href^=\"http://is.gd/\"]\nquuit.com##a[href^=\"http://itunes.apple.com/\"]\nminecraftprojects.net##a[href^=\"http://jmp2.am/\"]\nfastvideo.eu,rapidvideo.org##a[href^=\"http://jojomedia.net/\"]\nebooksx.org##a[href^=\"http://king.gameoftraffic.com/\"]\nknowfree.net##a[href^=\"http://kvors.com/click/\"]\nwhatismyip.com##a[href^=\"http://link.pcspeedup.com/aff_\"]\nflight-simulators.net##a[href^=\"http://linknow.me/\"]\ntorrentzap.com##a[href^=\"http://links.torrentzap.com/go.php?\"]\ntorrentzapproxy.com##a[href^=\"http://links.torrentzapproxy.com/\"]\nlinksave.in##a[href^=\"http://linksave.in/go/uhnl/\"]\nlinksave.in##a[href^=\"http://linksave.in/go/unnl/\"]\nlinksave.in##a[href^=\"http://linksave.in/go/usene/\"]\nlinksave.in##a[href^=\"http://linksave.in/go/usn/\"]\nlinuxforums.org##a[href^=\"http://linuxforums.tradepub.com/\"]\nwarriorforum.com##a[href^=\"http://list-mob.com/\"] > img\nd-h.st,datafilehost.com,torlock.com,torrentfunk.com,yourbittorrent.com##a[href^=\"http://liversely.com/\"]\ndo2dear.net,mhktricks.net##a[href^=\"http://liversely.net/\"]\nuploadrocket.net##a[href^=\"http://livesetwebs.org/\"]\nd-h.st##a[href^=\"http://lp.sharelive.net/\"]\npsnprofiles.com##a[href^=\"http://manage.aff.biz/\"]\nisohunt.to,unlimitzone.com##a[href^=\"http://masteroids.com/\"]\nmegauploadsearch.net##a[href^=\"http://megauploadsearch.net/adv.php\"]\njusthungry.com##a[href^=\"http://moe.jlist.com/click/\"]\nthejointblog.com##a[href^=\"http://movieandmusicnetwork.com/content/cg/\"] > img\nmoviearchive.eu##a[href^=\"http://moviearchive.sharingzone.net/\"]\ncrackdb.cd##a[href^=\"http://mp3menu.\"]\nrlsbb.com##a[href^=\"http://netload.in/index.php?refer_id=\"]\nmobilust.net##a[href^=\"http://nicevid.net/?af=\"]\nmp3db.ru##a[href^=\"http://novafile.com/premium\"]\nblasternation.com##a[href^=\"http://ox.fenixm.com/www/delivery/ck.php?\"]\nmail.google.com##a[href^=\"http://pagead2.googlesyndication.com/\"]\nazcentral.com##a[href^=\"http://phoenix.dealchicken.com/\"]\nvr-zone.com##a[href^=\"http://pikachu.vr-zone.com.sg/\"]\nkewlshare.com##a[href^=\"http://pointcrisp.com/\"]\nprojectfreetv.ch##a[href^=\"http://projectfreetv.ch/adblock/\"]\ncrackdb.cd##a[href^=\"http://promoddl.com\"]\ndecadeforum.com,downdlz.com,downeu.org,serials.ws##a[href^=\"http://pushtraffic.net/TDS/?wmid=\"]\nvodly.to##a[href^=\"http://r.lumovies.com/\"]\nboingboing.net##a[href^=\"http://r1.fmpub.net/?r=\"]\nsearch.certified-toolbar.com##a[href^=\"http://redir.widdit.com/redir/?\"] > *\ntoolsvoid.com##a[href^=\"http://ref.name.com/\"]\nnextofwindows.com##a[href^=\"http://remotedesktopmanager.com/?utm_source=\"]\nhardwareheaven.com##a[href^=\"http://resources.heavenmedia.net/click_through.php?\"]\nrichkent.com##a[href^=\"http://richkent.com/uses/\"]\nthejointblog.com##a[href^=\"http://sensiseeds.com/refer.asp?refid=\"] > img\nshare-links.biz##a[href^=\"http://share-links.biz/redirect/\"]\nsearch.com##a[href^=\"http://shareware.search.com/click?\"]\nmerdb.ru##a[href^=\"http://shineads.net/\"]\nfiletie.net##a[href^=\"http://softwares2015.com/\"]\nthejointblog.com##a[href^=\"http://speedweed.com/_clicktracker.php?code=\"] > img\nuvnc.com##a[href^=\"http://sponsor2.uvnc.com\"]\nuvnc.com##a[href^=\"http://sponsor4.uvnc.com/\"]\nipdb.at##a[href^=\"http://strongvpn.com/aff/\"]\n5x.to##a[href^=\"http://support.suc-team.info/aff.php\"]\nmajorgeeks.com##a[href^=\"http://systweak.com/\"]\nyour-pagerank.com##a[href^=\"http://te-jv.com/?r=\"]\nstrata40.megabyet.net##a[href^=\"http://tiny.cc/freescan\"]\nserialbase.us,serialzz.us##a[href^=\"http://tinyurl.com\"]\nkinox.to,ncrypt.in,wtso.net##a[href^=\"http://tinyurl.com/\"]\nsockshare.com##a[href^=\"http://toolkitfreefast.com/\"]\nencyclopediadramatica.es,encyclopediadramatica.se##a[href^=\"http://torguard.net/\"]\nfastvideo.eu,rapidvideo.org##a[href^=\"http://toroadvertisingmedia.com/\"]\ncatmo.ru##a[href^=\"http://torrentindex.org/\"]\nmangafox.me##a[href^=\"http://track.games.la/\"]\nlolking.net##a[href^=\"http://track.strife.com/?\"]\niwatchonline.to##a[href^=\"http://tracking.aunggo.com/\"]\ncryptocoinsnews.com##a[href^=\"http://tracking.coin.mx/aff_c?offer_id=\"]\nlmgtfy.com##a[href^=\"http://tracking.livingsocial.com/aff_c?\"]\nhipfile.com##a[href^=\"http://tracktrk.net/?\"]\nimageporter.com##a[href^=\"http://trw12.com/\"]\nugotfile.com##a[href^=\"http://ugotfile.com/affiliate?\"]\nisrabox.com##a[href^=\"http://urmusiczone.com/signup?\"]\npandaapp.com##a[href^=\"http://vda.gtarcade.com/?q=\"]\nvideobull.com##a[href^=\"http://videobull.com/wp-content/themes/videozoom/go.php?\"]\nvideobull.com##a[href^=\"http://vtgtrk.com/\"]\nwakingtimes.com##a[href^=\"http://wakingtimes.com/ads/\"]\nvideomide.com##a[href^=\"http://wapdollar.in/\"]\nbitminter.com##a[href^=\"http://wbf.go2cloud.org/aff_c?offer_id=\"]\nwebdesignshock.com##a[href^=\"http://www.123rf.com\"]\nserials.ws,uptobox.com##a[href^=\"http://www.1clickmoviedownloader.net/\"]\n300mbfilms.com##a[href^=\"http://www.300mbfilms.com/ads/\"]\ndistrowatch.com##a[href^=\"http://www.3cx.com/\"]\nmovie4u.org##a[href^=\"http://www.4kmoviesclub.com/signup?\"]\ncio-today.com##a[href^=\"http://www.accuserveadsystem.com/accuserve-go.php?c=\"]\ndistrowatch.com##a[href^=\"http://www.acunetix.com/\"]\nbabelzilla.org##a[href^=\"http://www.addonfox.com/\"]\nprintroot.com##a[href^=\"http://www.adgz.net/\"]\njordantimes.com##a[href^=\"http://www.aigcmiddleast.com/ads\"]\nthehackernews.com##a[href^=\"http://www.alienvault.com/\"]\ndistrowatch.com##a[href^=\"http://www.amazon.\"][href*=\"/obidos/ASIN/\"]\nabsoluteradio.co.uk##a[href^=\"http://www.amazon.\"][href*=\"creativeASIN\"]\nabsoluteradio.co.uk,cloudfront.net,dailypaul.com,desktoplinuxreviews.com,jimlynch.com,mkfm.com,policestateusa.com,quuit.com,songfacts.com##a[href^=\"http://www.amazon.\"][href*=\"tag=\"]\nurgrove.com##a[href^=\"http://www.amoninst.com/\"]\nhqwallpapers4free.com##a[href^=\"http://www.anno1777.com/index.php?i=\"]\nmacdailynews.com##a[href^=\"http://www.anrdoezrs.net/click-\"]\npublicradio.org##a[href^=\"http://www.arkivmusic.com/classical/Playlist?&source=\"]\ndumbassdaily.com##a[href^=\"http://www.badjocks.com\"]\nbitcoinukforum.com##a[href^=\"http://www.betcoinpartners.com/\"]\nfreetv-video.ca##a[href^=\"http://www.bhmfinancial.com/\"]\nbingo-hunter.com##a[href^=\"http://www.bingo3x.com/main.php\"]\nrghost.net##a[href^=\"http://www.binverse.com\"]\nfreebitco.in##a[href^=\"http://www.bitcoininsanity.com/affiliates/\"]\nfilesoup.com##a[href^=\"http://www.bitlord.com/\"]\nfilesoup.com##a[href^=\"http://www.bitlordsearch.com/\"]\nbitlordsearch.com##a[href^=\"http://www.bitlordsearch.com/bl/fastdibl.php?\"]\nfreebitcoins.nx.tc,getbitcoins.nx.tc##a[href^=\"http://www.bitonplay.com/create?refCode=\"]\nusenet-crawler.com##a[href^=\"http://www.cash-duck.com/\"]\ngsmarena.com##a[href^=\"http://www.cellpex.com/affiliates/\"]\nonlinefreetv.net##a[href^=\"http://www.chitika.com/publishers/apply?refid=\"]\nciao.co.uk##a[href^=\"http://www.ciao.co.uk/ext_ref_call.php\"]\ncryptothrift.com##a[href^=\"http://www.coinographic.com/\"]\nmajorgeeks.com##a[href^=\"http://www.compatdb.org/\"]\ncrackdb.cd##a[href^=\"http://www.crackcrew.com/\"]\nfeed-the-beast.com##a[href^=\"http://www.creeperhost.net/aff.php?aff=\"]\nblackhatlibrary.net##a[href^=\"http://www.darkexile.com/forums/index.php?action=affiliates\"]\nserials.ws##a[href^=\"http://www.dl-provider.com/\"]\ndlh.net##a[href^=\"http://www.dlh.net/advs/www/delivery/ck.php?\"]\ndownloadhelper.net##a[href^=\"http://www.downloadhelper.net/do-goto-site.php?url=http%3A%2F%2Fwww.shareasale.com\"]\npdf-giant.com,watchseries.biz,yoddl.com##a[href^=\"http://www.downloadprovider.me/\"]\nthesearchenginelist.com##a[href^=\"http://www.dpbolvw.net/click-\"]\nbootstrike.com,dreamhosters.com,howtoblogcamp.com##a[href^=\"http://www.dreamhost.com/r.cgi?\"]\nsina.com##a[href^=\"http://www.echineselearning.com/\"]\nbetterhostreview.com##a[href^=\"http://www.elegantthemes.com/affiliates/\"]\nprofessionalmuscle.com##a[href^=\"http://www.elitefitness.com/g.o/\"]\ninternetslang.com##a[href^=\"http://www.empireattack.com\"]\nlinksave.in##a[href^=\"http://www.endwelt.com/signups/add/\"]\nlens101.com##a[href^=\"http://www.eyetopics.com/\"]\nmercola.com##a[href^=\"http://www.fatswitchbook.com/\"] > img\nrapidvideo.org##a[href^=\"http://www.filmsenzalimiti.co/\"]\nomegleconversations.com##a[href^=\"http://www.freecamsexposed.com/\"]\nliveleak.com##a[href^=\"http://www.freemake.com/\"]\nlinksave.in##a[href^=\"http://www.gamesaffiliate.de/\"]\nbootstrike.com##a[href^=\"http://www.gog.com/en/frontpage/?pp=\"]\nbingo-hunter.com##a[href^=\"http://www.harrysbingo.co.uk/index.php\"]\nrapidvideo.tv##a[href^=\"http://www.hdvid-codecs.com/\"]\nhtcsource.com##a[href^=\"http://www.htcsimunlock.com/\"]\nvidxden.com##a[href^=\"http://www.ilivid.com/vidxden_download_video.htm?\"]\nguns.ru##a[href^=\"http://www.impactguns.com/cgi-bin/affiliates/\"]\nuploadrocket.net##a[href^=\"http://www.insta-cash.net/\"]\nsoftpedia.com##a[href^=\"http://www.iobit.com/\"]\nmacdailynews.com,softpedia.com##a[href^=\"http://www.jdoqocy.com/click-\"]\nps3iso.com##a[href^=\"http://www.jobboy.com/index.php?inc=\"]\nmacdailynews.com,thesearchenginelist.com,web-cam-search.com##a[href^=\"http://www.kqzyfj.com/click-\"]\nhotbollywoodactress.net##a[href^=\"http://www.liposuctionforall.com/\"]\nmhktricks.net##a[href^=\"http://www.liversely.net/\"]\nlivescore.cz##a[href^=\"http://www.livescore.cz/go/click.php?\"]\nmajorgeeks.com##a[href^=\"http://www.majorgeeks.com/compatdb\"]\nemaillargefile.com##a[href^=\"http://www.mb01.com/lnk.asp?\"]\nsing365.com##a[href^=\"http://www.mediataskmaster.com\"]\nmegatorrent.eu##a[href^=\"http://www.megatorrent.eu/tk/file.php?q=\"]\nhtmlgoodies.com##a[href^=\"http://www.microsoft.com/click/\"]\ninfowars.com##a[href^=\"http://www.midasresources.com/store/store.php?ref=\"]\nquicksilverscreen.com##a[href^=\"http://www.movies-for-free.net\"]\npixhost.org##a[href^=\"http://www.mydownloader.net/pr/\"]\n2x4u.de##a[href^=\"http://www.myfreecams.com/?baf=\"]\nwonkette.com##a[href^=\"http://www.newsmax.com?promo_code=\"]\nnetmarketshare.com##a[href^=\"http://www.ns8.com?\"]\nkaaz.eu##a[href^=\"http://www.offersfair.com/\"]\nobfuscatorjavascript.info##a[href^=\"http://www.oplata.info/\"]\naol.com##a[href^=\"http://www.opselect.com/ad_feedback/\"]\ndistrowatch.com##a[href^=\"http://www.osdisc.com/\"]\nshareplace.org,yourfiles.to##a[href^=\"http://www.pc-bodyguard.com/?p=\"]\nmajorgeeks.com##a[href^=\"http://www.pctools.com/\"]\njpupdates.com##a[href^=\"http://www.perfectautony.com\"] > img\npinknews.co.uk##a[href^=\"http://www.pinknews.co.uk/clicks/\"]\ninternetslang.com##a[href^=\"http://www.pointlesssites.com\"]\nmyway.com##a[href^=\"http://www.popswatter.com/?partner=\"]\nprimewire.ag##a[href^=\"http://www.primewire.ag/ab_play/\"]\nbestgore.com##a[href^=\"http://www.punishtube.com/\"]\npublichd.se##a[href^=\"http://www.putdrive.com/?\"]\nmg-rover.org##a[href^=\"http://www.quotezone.co.uk/SetAffiliate.php?aid=\"]\nsharesix.com##a[href^=\"http://www.reduxmediia.com/\"]\nmajorgeeks.com##a[href^=\"http://www.reimageplus.com/includes/router_land.php\"]\ntweaking.com##a[href^=\"http://www.reimageplus.com/includes/router_land.php?\"]\nrpg.net##a[href^=\"http://www.rpg.net/ads/\"]\ngruntig.net,jpupdates.com##a[href^=\"http://www.sellmilesnow.com\"] > img\noss.oetiker.ch##a[href^=\"http://www.serverscheck.com/sensors?\"]\nblogengage.com##a[href^=\"http://www.shareasale.com/\"]\nwpdailythemes.com##a[href^=\"http://www.shareasale.com/r.cfm?b=\"] > img\nbestgore.com##a[href^=\"http://www.slutroulette.com/\"]\nfindsounds.com##a[href^=\"http://www.soundsnap.com/search/\"]\nleecher.to##a[href^=\"http://www.stargames.com/bridge.asp\"]\ntelegraph.co.uk##a[href^=\"http://www.telegraph.co.uk/sponsored/\"]\negigs.co.uk##a[href^=\"http://www.ticketswitch.com/cgi-bin/web_finder.exe\"]\naudiforums.com##a[href^=\"http://www.tirerack.com/affiliates/\"]\nmailinator.com##a[href^=\"http://www.tkqlhce.com/\"]\nlimetor.net,limetorrents.cc,limetorrents.co,torrentdownloads.cc##a[href^=\"http://www.torrentindex.org/\"]\ntri247.com##a[href^=\"http://www.tri247ads.com/\"]\ntsbmag.com##a[href^=\"http://www.tsbmag.com/wp-content/plugins/max-banner-ads-pro/\"]\ntvduck.com##a[href^=\"http://www.tvduck.com/graboid.php\"]\ntvduck.com##a[href^=\"http://www.tvduck.com/netflix.php\"]\nlinuxformat.com##a[href^=\"http://www.ukfast.co.uk/linux-jobs.html/#utm_source=\"]\nultimate-guitar.com##a[href^=\"http://www.ultimate-guitar.com/goto.php\"]\nultimate-guitar.com##a[href^=\"http://www.ultimate-guitar.com/show.php?\"]\nultimate-guitar.com##a[href^=\"http://www.ultimate-guitar.com/xtra/\"]\ncodecguide.com,downloadhelper.net,dvdshrink.org,thewindowsclub.com##a[href^=\"http://www.uniblue.com/\"]\ndistrowatch.com##a[href^=\"http://www.unixstickers.com/\"]\nisrabox.com##a[href^=\"http://www.urmusiczone.com/signup?\"]\nthejointblog.com##a[href^=\"http://www.vapornation.com/?=\"] > img\nexashare.com##a[href^=\"http://www.video1404.info/\"]\nthejointblog.com##a[href^=\"http://www.weedseedshop.com/refer.asp?refid=\"] > img\nwomenspress.com##a[href^=\"http://www.womenspress.com/Redirect.asp?\"]\nwptmag.com##a[href^=\"http://www.wptmag.com/promo/\"]\nisrabox.net,silvertorrent.org,watchonlinefree.tv##a[href^=\"http://www.yourfilezone.com/\"]\nyoutube.com##a[href^=\"http://www.youtube.com/cthru?\"]\nfree-tv-video-online.me,muchshare.net##a[href^=\"http://wxdownloadmanager.com/\"]\ndatafilehost.com##a[href^=\"http://zilliontoolkitusa.info/\"]\nyahoo.com##a[href^=\"https://beap.adss.yahoo.com/\"]\nlandofbitcoin.com##a[href^=\"https://bitcasino.io?ref=\"]\nbitcoinreviewer.com##a[href^=\"https://bitcoin-scratchticket.com/?promo=\"]\nblockchain.info##a[href^=\"https://blockchain.info/r?url=\"] > img\nbitcointalk.org##a[href^=\"https://cex.io/\"]\nactivistpost.com##a[href^=\"https://coinbase.com/?r=\"]\ndeconf.com##a[href^=\"https://deconf.com/out/\"]\nlandofbitcoin.com##a[href^=\"https://localbitcoins.com/?ch=\"]\nconservativetribune.com,mindsetforsuccess.net##a[href^=\"https://my.leadpages.net/\"]\nunblockt.com##a[href^=\"https://nordvpn.com/pricing/\"]\nsearch.yahoo.com##a[href^=\"https://search.yahoo.com/search/ads;\"]\nbitminter.com##a[href^=\"https://wbf.go2cloud.org/aff_c?offer_id=\"]\nleo.org##a[href^=\"https://www.advertising.de/\"]\ncryptocoinsnews.com##a[href^=\"https://www.anonibet.com/\"]\nbitminter.com##a[href^=\"https://www.cloudbet.com/en/?af_token=\"]\nescapefromobesity.net##a[href^=\"https://www.dietdirect.com/rewardsref/index/refer/\"]\navxhome.se##a[href^=\"https://www.nitroflare.com/payment?webmaster=\"]\nxscores.com##a[href^=\"https://www.rivalo1.com/?affiliateId=\"]\nyoutube.com##a[href^=\"https://www.youtube.com/cthru?\"]\nkrapps.com##a[href^=\"index.php?adclick=\"]\nessayscam.org##a[id^=\"banner_\"]\nm.youtube.com##a[onclick*=\"\\\"ping_url\\\":\\\"http://www.google.com/aclk?\"]\nsoftware182.com##a[onclick*=\"sharesuper.info\"]\ntitanmule.to##a[onclick=\"emuleInst();\"]\ntitanmule.to##a[onclick=\"installerEmule();\"]\nplatinlyrics.com##a[onclick^=\"DownloadFile('lyrics',\"]\ncheckpagerank.net##a[onclick^=\"_gaq.push(['_trackEvent', 'link', 'linkclick'\"]\nzoozle.org##a[onclick^=\"downloadFile('download_big', null,\"]\nzoozle.org##a[onclick^=\"downloadFile('download_related', null,\"]\ncoinurl.com,cur.lv##a[onclick^=\"open_ad('\"]\nhugefiles.net##a[onclick^=\"popbi('http://go34down.com/\"]\nhugefiles.net##a[onclick^=\"popbi('http://liversely.com/\"]\nkingfiles.net##a[onclick^=\"window.open('http://lp.ilividnewtab.com/\"]\nkingfiles.net##a[onclick^=\"window.open('http://lp.sharelive.net/\"]\nw3schools.com##a[rel=\"nofollow\"]\nnixiepixel.com##a[rel^=\"http://bit.ly/\"]\nbitcointalk.org##a[style$=\";width:700px;\"]\nactivistpost.com##a[style=\"clear: right; float: right; margin-bottom: 0em; margin-left: 1em;\"]\ntorrenticity.com##a[style=\"color:#05c200;text-decoration:none;\"]\nurbandictionary.com##a[style=\"display: block; width: 300px; height: 500px\"]\nbillionuploads.com##a[style=\"display: inline-block;width: 728px;margin: 25px auto -17px auto;height: 90px;\"]\nbitcointalk.org##a[style=\"text-decoration:none; display:inline-block; \"]\nlifewithcats.tv##a[style=\"width: 318px; height: 41px; padding: 0px; left: 515px; top: 55px; opacity: 1;\"]\neasyvideo.me,playbb.me,playpanda.net,video66.org,videofun.me,videowing.me,videozoo.me##a[style^=\"display: block;\"]\nbitcointalk.org##a[style^=\"display: inline-block; text-align:left; height: 40px;\"]\nbetfooty.com##a[target=\"_blank\"] > .wsite-image[alt=\"Picture\"]\nthepiratebay.se##a[target=\"_blank\"] > img:first-child\nthejointblog.com##a[target=\"_blank\"][href=\"http://smokecartel.com/\"]\nherold.at##a[target=\"_blank\"][href=\"http://www.adaffix.com\"]\nletstalkbitcoin.com##a[target=\"_blank\"][href=\"http://www.edandethan.com\"] > img\nletstalkbitcoin.com##a[target=\"_blank\"][href=\"http://www.madmoneymachine.com\"] > img\ngbatemp.net##a[target=\"_blank\"][href=\"http://www.nds-card.com\"] > img\nherold.at##a[target=\"_blank\"][href=\"http://www.reise-hero.com/\"]\nherold.at##a[target=\"_blank\"][href=\"http://www.urlauburlaub.at\"]\nnoscript.net##a[target=\"_blank\"][href^=\"/\"]\nmic.com##a[target=\"_blank\"][href^=\"/click?\"]\nwg-gesucht.de##a[target=\"_blank\"][href^=\"http://affiliate.immobilienscout24.de/go.cgi?pid=\"]\nthefinancialbrand.com##a[target=\"_blank\"][href^=\"http://bit.ly/\"]\nbitcoinfees.com##a[target=\"_blank\"][href^=\"http://bitcoinkamikaze.com/ref/\"] > img\nrcgroups.com##a[target=\"_blank\"][href^=\"http://decals.rcgroups.com/adclick.php?bannerid=\"]\nfreedomhacker.net##a[target=\"_blank\"][href^=\"http://freedomhacker.net/out/\"] > img\nthepiratebay.se##a[target=\"_blank\"][href^=\"http://thepiratebay.\"][href*=\"&ad=\"]\nmmobomb.com##a[target=\"_blank\"][href^=\"http://www.mmobomb.com/link/\"]\ngbatemp.net##a[target=\"_blank\"][href^=\"http://www.nds-card.com/ProShow.asp?ProID=\"] > img\nbitcoinexaminer.org##a[target=\"_blank\"][href^=\"https://www.itbit.com/?utm_source=\"] > img\nnoscript.net##a[target=\"_blаnk\"][href$=\"?MT\"]\nbodymindsoulspirit.com##a[target=\"_new\"] > img\nhookedonads.com##a[target=\"_top\"][href=\"http://www.demilked.com\"] > img\nbaymirror.com,bt.mojoris.in,getpirate.com,kuiken.co,livepirate.com,mypiratebay.cl,noncensuram.info,piraattilahti.org,pirateproxy.net,pirateproxy.se,pirateshit.com,proxicity.info,proxybay.eu,thepiratebay.gg,thepiratebay.lv,thepiratebay.se,thepiratebay.se.coevoet.nl,tpb.ipredator.se,tpb.jorritkleinbramel.nl,tpb.piraten.lu,tpb.pirateparty.ca,tpb.rebootorrents.com,unblock.to##a[title=\"Anonymous Download\"]\nlordtorrent3.ru##a[title=\"Download\"]\nwatch-series.ag,watch-tv-series.to,watchseries.ph##a[title=\"Sponsored\"]\ntorfinder.net,vitorrent.org##a[title=\"sponsored\"]\nbitcointalk.org##a[title^=\"LuckyBit\"]\nherold.at##a[title^=\"Werbung: \"][target=\"_blank\"]\nirrigator.com.au##advertisement\nonlinemoviewatchs.com##b[style^=\"z-index: \"]\ncreatives.livejasmin.com##body\nnorwsktv.com##body > #total\njust-dice.com##body > .wrapper > .container:first-child\ndansdeals.com##body > a[target=\"_blank\"] > img\nsitevaluecalculator.com##body > center > br + a[target=\"_blank\"] > img\nfancystreems.com##body > div > a\nprimewire.ag##body > div > div[id][style^=\"z-index:\"]:first-child\nmovie2k.tl##body > div > div[style^=\"height: \"]\natdee.net,drakulastream.eu,magnovideo.com,movie2k.tl,sockshare.ws,streamhunter.eu,videolinkz.us,vodly.to,watchfreeinhd.com,zuuk.net##body > div > div[style^=\"z-index: \"]\nha.ckers.org##body > div:first-child > br:first-child + a + br + span[style=\"color:#ffffff\"]\nviooz.co##body > div:first-child > div[id][style]:first-child\nwww.google.com##body > div[align]:first-child + style + table[cellpadding=\"0\"][width=\"100%\"] > tbody:only-child > tr:only-child > td:only-child\ndelishows.com##body > div[id] > div[id][style] > div[style]\nprimeshare.tv##body > div[style=\"display:block !important;\"] > div[style^=\"height: \"]\nda.feedsportal.com##body > iframe + script + table[align=\"center\"][valign=\"middle\"]\ndomains.googlesyndication.com##body > table:first-child + table\ndomains.googlesyndication.com##body > table:first-child + table + table\ndomains.googlesyndication.com##body > table:first-child > tbody:first-child > tr:first-child > td:first-child > table:first-child + table\ndomains.googlesyndication.com##body > table:first-child > tbody:first-child > tr:first-child > td:first-child > table:first-child + table + table\njguru.com##center\nnzbindex.com,nzbindex.nl##center > a > img[style=\"border: 1px solid #000000;\"]\ncryptocoinsnews.com##center > a[href=\"https://xbt.social\"]\nproxyserver.asia##center > a[href^=\"http://goo.gl/\"][target=\"_blank\"]\n4shared.com##center[dir=\"ltr\"]\nehow.com##center[id^=\"DartAd_\"]\nforumswindows8.com##center[style=\"font-size:15px;font-weight:bold;margin-left:auto; margin-right:auto;\"]\nhelenair.com##dd\nfilepuma.com##dd[style=\"padding-left:3px; width:153px; height:25px;\"]\nsearch.mywebsearch.com##div > div[style=\"padding-bottom: 12px;\"]\nfilenuke.com,sharesix.com##div > p:first-child + div\ncdrlabs.com##div[align=\"center\"]\nbleachanime.org##div[align=\"center\"][style=\"font-size:14px;margin:0;padding:3px;background-color:#f6f6f6;border-bottom:1px solid #ababab;\"]\nthelakewoodscoop.com##div[align=\"center\"][style=\"margin-bottom:10px;\"]\nnewhavenregister.com##div[align=\"center\"][style=\"margin-top:10px;min-height:100px;\"]\nsicilyintheworld.com##div[align=\"right\"][bold][font\\:][padding\\:]\nalternet.org##div[aria-labelledby=\"ui-dialog-title-altsocial_splash\"] + .ui-widget-overlay\nfilecrop.com##div[class$=\"160_600\"]\nfilecrop.com##div[class$=\"728_90\"]\nsearch.yahoo.com##div[class*=\"prod_listings_\"]\nfacebook.com##div[class=\"ego_column _5qrt\"]\nfacebook.com##div[class=\"ego_column _8_9\"]\nfacebook.com##div[class=\"ego_column pagelet _5qrt _1snm\"]\nfacebook.com##div[class=\"ego_column pagelet _5qrt _y92 _1snm\"]\nfacebook.com##div[class=\"ego_column pagelet _5qrt _y92\"]\nfacebook.com##div[class=\"ego_column pagelet _5qrt\"]\nfacebook.com##div[class=\"ego_column pagelet _y92 _5qrt _1snm\"]\nfacebook.com##div[class=\"ego_column pagelet _y92 _5qrt\"]\nfacebook.com##div[class=\"ego_column pagelet _y92\"]\nfacebook.com##div[class=\"ego_column pagelet\"]\nfacebook.com##div[class=\"ego_column\"]\nkinox.to##div[class^=\"Mother_\"][style^=\"display: block;\"]\nanime1.com,animefreak.tv##div[class^=\"a-filter\"]\ndrama.net##div[class^=\"ad-filter\"]\nmanaflask.com##div[class^=\"ad_a\"]\ngreatandhra.com##div[class^=\"add\"]\nu00p.com##div[class^=\"adv-box\"]\nhattrick.org##div[class^=\"bannerBackground\"]\nragezone.com##div[class^=\"bannerBox\"]\nplsn.com##div[class^=\"clickZone\"]\nwebhostingtalk.com##div[class^=\"flashAd_\"]\nragezone.com##div[class^=\"footerBanner\"]\navforums.com##div[class^=\"takeover_box_\"]\nlinuxbsdos.com##div[class^=\"topStrip\"]\nyttalk.com##div[class^=\"toppedbit\"]\nrealmadrid.com##div[data-ads-block=\"desktop\"]\nwayn.com##div[data-commercial-type=\"MPU\"]\nmonova.org##div[data-id^=\"http://centertrust.xyz/\"]\nmonova.org##div[data-id^=\"http://www.torntv-downloader.com/\"]\nehow.com##div[data-module=\"radlinks\"]\nyahoo.com##div[data-type=\"ADS\"]\ndeviantart.com##div[gmi-name=\"ad_zone\"]\nthetechjournal.com##div[height=\"250\"]\nlastresistance.com##div[id$=\"FloatingBanner\"]\nsearch.snapdo.com##div[id$=\"TopD\"]\nwmpoweruser.com##div[id$=\"_ad_container\"]\nautomotive.com,internetautoguide.com,motortrend.com##div[id^=\"AD_CONTROL_\"]\ntopdocumentaryfilms.com##div[id^=\"AdAuth\"]\ninternetautoguide.com,motorcyclistonline.com##div[id^=\"GOOGLE_ADS_\"]\nautomotive.com##div[id^=\"LEADER_BOARD_\"]\nvidspot.net##div[id^=\"On1Pl\"]\nvidspot.net##div[id^=\"On2Pl\"]\nnowvideo.ch##div[id^=\"aad\"]\nshortlist.com##div[id^=\"ad-slot\"]\nminecraftforum.net##div[id^=\"ad-wrapper-\"]\nucoz.com,ucoz.net,ucoz.org##div[id^=\"adBar\"]\nchess.com##div[id^=\"ad_report_host_\"]\nwarframe-builder.com##div[id^=\"ads\"]\nmahalo.com##div[id^=\"ads-section-\"]\nstreetmap.co.uk##div[id^=\"advert_\"]\naskyourandroid.com##div[id^=\"advertisespace\"]\nstackoverflow.com##div[id^=\"adzerk\"]\nblogspot.co.nz,blogspot.com,coolsport.tv,time4tv.com,tv-link.me##div[id^=\"bannerfloat\"]\ntheteacherscorner.net##div[id^=\"catfish\"]\nvideo44.net##div[id^=\"container_ads\"]\nvodlocker.com##div[id^=\"div-gpt-ad-\"] + div\nbtsportshd.com,cricfree.eu,cricfree.sx,cricfree.tv,cricket-365.info,cricketembed.com,desihd.net,desistreams.tv,embed247.com,eplhome.com,hdfooty.tv,hqiframes.com,hqsport.tv,ihdsports.com,micast.tv,mybeststream.xyz,online--soccer.eu,premier--streams.info,putlive.in,soccerembed.com,streamking.org,twentysport.com,usachannels.tv,zuuk.net##div[id^=\"floatLayer\"]\neventhubs.com##div[id^=\"google_ads_\"]\nvolokh.com##div[id^=\"google_ads_div_\"]\nwg-gesucht.de##div[id^=\"listAdPos_\"]\ncool-sport.net,iwantsport.com,sport-guides.net,tykestv.eu##div[id^=\"ltas_overlay_\"]\nproz.com##div[id^=\"proz_ad_zone_\"]\ntarget.com##div[id^=\"rr_promo_\"]\nvipboxeu.co##div[id^=\"slot\"]\nfacebook.com##div[id^=\"sponsoredTickerStory_\"]\nfacebook.com##div[id^=\"substream_\"] .userContentWrapper > ._1ifo\nfacebook.com##div[id^=\"substream_\"] div[data-ft*=\"\\\"ei\\\":\\\"\"]\nyahoo.com##div[id^=\"tile-A\"][data-beacon-url^=\"https://beap.gemini.yahoo.com/mbcsc?\"]\nyahoo.com##div[id^=\"tile-mb-\"]\nfootstream.tv,leton.tv##div[id^=\"timer\"]\nfacebook.com##div[id^=\"topnews_main_stream_\"] div[data-ft*=\"\\\"ei\\\":\\\"\"]\n~images.search.yahoo.com,search.yahoo.com##div[id^=\"wp_bannerize-\"]\n~images.search.yahoo.com,search.yahoo.com##div[id^=\"yui_\"] > span > ul[class]:first-child:last-child > li[class]\n~images.search.yahoo.com,search.yahoo.com##div[id^=\"yui_\"] > ul > .res[data-bg-link^=\"http://r.search.yahoo.com/_ylt=\"] + * div[class^=\"pla\"]\nstatigr.am##div[id^=\"zone\"]\n4shared.com##div[onclick=\"window.location='/premium.jsp?ref=removeads'\"]\ngsprating.com##div[onclick=\"window.open('http://www.nationvoice.com')\"]\nviphackforums.net##div[onclick^=\"MyAdvertisements.do_click\"]\nncrypt.in##div[onclick^=\"window.open('http://www.FriendlyDuck.com/AF_\"]\nrapidfiledownload.com##div[onclick^=\"window.open('http://www.rapidfiledownload.com/out.php?\"]\nncrypt.in##div[onclick^=\"window.open('http://www2.filedroid.net/AF_\"]\nrs-catalog.com##div[onmouseout=\"this.style.backgroundColor='#fff7b6'\"]\neasyvideo.me,playbb.me,playpanda.net,video66.org,videofun.me,videowing.me,videozoo.me##div[original^=\"http://byzoo.org/\"]\nfastvideo.eu##div[style$=\"backgroud:black;\"] > :first-child\nhighstakesdb.com##div[style$=\"margin-top:-6px;text-align:left;\"]\nimagebam.com##div[style$=\"padding-top:14px; padding-bottom:14px;\"]\nepdrama.com,juzupload.com##div[style$=\"text-align: center; border:3px gray solid\"]\ngiantfreakinrobot.com##div[style$=\"transition: bottom 2s ease 0s;\"]\nsurrenderat20.net##div[style$=\"width: 160px; height: 600px; background: #333;\"]\npdf-archive.com##div[style$=\"width: 300px; height: 250px; float: left;\"]\nprotopage.com##div[style$=\"width: 770px; height: 100px;\"]\n4sysops.com##div[style$=\"width:300px; height:250px; padding: 0px 3px 3px 3px; margin-bottom: 5px\"]\nsockshare.com##div[style*=\"background-color:#FFF;text-align\"]\nsockshare.com##div[style*=\"background-color:white;text-align\"]\nmaxgames.com##div[style*=\"background-image: URL('/images/sponsor_\"]\nthegauntlet.ca##div[style*=\"background-image:url('/advertisers/your-ad-here-\"]\ninvisionfree.com##div[style*=\"height:90px;width:728px;\"]\nkesq.com##div[style*=\"width:300px; height:250px;\"]\ninquirer.net##div[style*=\"width:629px;height:150px;\"]\ntennisworldusa.org##div[style=\" cursor:pointer;  border:5px #333 solid; width:600px; margin:0px auto; min-height:66px; height:auto; \"]\nanswerology.com##div[style=\" font-family:Verdana,Arial,Helvetica,sans-serif; font-size:8px;text-align:center;letter-spacing:2px; \"]\nkoreaherald.com##div[style=\" margin:20px 0 20px 0; width:670px; height:130px; background:#f0f0f0;\"]\ntennisworldusa.org##div[style=\" position:relative; overflow:hidden; margin:0px;  width:667px; color:#666; height:205px; border:1px #ddd solid; border-radius:0 0 5px 5px; background-color:#FFF;\"]\nseattlepi.com##div[style=\" width:100%; height:90px; margin-bottom:8px; float:left;\"]\nfmr.co.za##div[style=\" width:1000px; height:660px; margin: 0 auto\"]\nontopmag.com##div[style=\" width:300px; height:250px; padding:0; margin:5px auto 0 auto;\"]\nfitbie.com##div[style=\" width:300px; height:450px;  padding-bottom: 160px;\"]\nforum.guru3d.com##div[style=\"PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 6px; PADDING-TOP: 12px\"]\ncheapostay.com##div[style=\"PADDING-TOP: 0px; text-align:center; width:175px;\"]\nnasdaq.com##div[style=\"align: center; vertical-align: middle;width:336px;height:250px\"]\nsplitsider.com##div[style=\"background-color: #c0c0c0; padding: 5px; margin-bottom: 10px;\"]\nwral.com##div[style=\"background-color: #ebebeb; width: 310px; padding: 5px 3px;\"]\nzeropaid.com##div[style=\"background-color: #fff; padding:10px;\"]\nfrontlinesoffreedom.com##div[style=\"background-color: rgb(255, 255, 255); border-width: 1px; border-color: rgb(0, 0, 0); width: 300px; height: 250px;\"]\ncountryfile.com##div[style=\"background-color: rgb(255, 255, 255); height: 105px; padding-top: 5px;\"]\nvideoserver.biz##div[style=\"background-color: white; position: absolute; border: 1px solid #000000; top: -360px; left: -370px; z-index: 0; display: block; width: 600px; height: 440px; border: 0px solid green; margin: 0px;\"]\nfansshare.com##div[style=\"background-color:#999999;width:300px;height:250px;\"]\ndeviantart.com##div[style=\"background-color:#AAB1AA;width:300px;height:120px\"]\ndeviantart.com,sta.sh##div[style=\"background-color:#AAB1AA;width:300px;height:250px\"]\ndawn.com##div[style=\"background-color:#EEEEE4;width:973px;height:110px;margin:auto;padding-top:15px;\"]\nmoneycontrol.com##div[style=\"background-color:#efeeee;width:164px;padding:8px\"]\nsearch.bpath.com,tlbsearch.com##div[style=\"background-color:#f2faff;padding:4px\"]\nbostonherald.com##div[style=\"background-color:black; width:160px; height:600px; margin:0 auto;\"]\nfansshare.com##div[style=\"background-image:url(/media/img/advertisement.png);width:335px;height:282px;\"]\nfansshare.com##div[style=\"background-image:url(http://img23.fansshare.com/media/img/advertisement.png);width:335px;height:282px;\"]\nvosizneias.com##div[style=\"background: #DADADA; border: 1px solid gray; color: gray; width: 300px; padding: 5px; float: right; font-size: 0.8em; line-height: 1.5em; font-family: arial; margin: 10px 0 10px 20px;\"]\nregmender.com##div[style=\"background: #FFFDCA;border: 1px solid #C7C7C7;margin-top:8px;padding: 8px;color:#000;\"]\nsingletracks.com##div[style=\"background: #fff; height: 250px; width: 300px; margin-top: 0px; margin-bottom: 10px;\"]\ngelbooru.com##div[style=\"background: #fff; width: 728px; margin-left: 15px;\"]\nskyatnightmagazine.com##div[style=\"background: none repeat scroll 0% 0% #B3E3FA; height: 95px; padding: 5px; margin-bottom: 5px;\"]\ncnn.com##div[style=\"background: transparent url(http://i.cdn.turner.com/cnn/.element/img/3.0/video/336x280_ad.gif) no-repeat scroll left top; height:304px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;\"]\nsternfannetwork.com##div[style=\"background: white; padding: 10px; margin: 10p\\a \\a x auto; border: 1px solid black; border-radius: 10px;\"]\nbackstage.com##div[style=\"background:#666666; height:250px; color:#fff;\"]\nzeropaid.com##div[style=\"background:#eee;padding:5px;height:140px;clear:both;\"]\nmamiverse.com##div[style=\"background:#f7f7f7;padding:40px;\"]\nhints.macworld.com##div[style=\"border-bottom: 2px solid #7B7B7B; padding-bottom:8px; margin-bottom:5px;\"]\ngreatgirlsgames.com##div[style=\"border-bottom:1px dotted #CCC;margin:3px 0 3px 0;color:#000;padding:0 0 1px 0;font-size:11px;text-align:right;\"]\nnytimes.com##div[style=\"border: 0px #000000 solid; width:300px; height:250px; margin: 0 auto\"]\nnytimes.com##div[style=\"border: 0px #000000 solid; width:728px; height:90px; margin: 0 auto\"]\nhugefiles.net##div[style=\"border: 0px solid black; width:728px;\"]\nkijiji.ca##div[style=\"border: 1px solid #999; background: #fff\"]\ncookingforengineers.com##div[style=\"border:0px solid #FFFFA0;width:160px;height:600px;\"]\nvideosbar.com##div[style=\"border:1px solid #EEEEEE; display:block; height:270px; text-align:center; width:300px; overflow:hidden;\"]\nvideosbar.com##div[style=\"border:1px solid #EEEEEE; display:block; height:270px; text-align:center; width:300px;\"]\nundsports.com##div[style=\"border:1px solid #c3c3c3\"]\nmocpages.com##div[style=\"border:1px solid #dcdcdc; width:300px; height:250px\"]\nexchangerates.org.uk##div[style=\"border:1px solid #ddd;background:#f0f0f0;padding:10px;margin:10px 0;\"]\nwhatson.co.za##div[style=\"border:solid 10px #ffffff;width:125px;height:125px;\"]\nvietnamnews.vn##div[style=\"clear: both;text-align: center;margin-bottom:10px;height:230px;width:300px;\"]\nmoviecarpet.com##div[style=\"clear:both; width:100%; padding:30px; height:250px\"]\nstaradvertiser.com##div[style=\"clear:both; width:292px; line-height:1.5em; padding:5px; border:5px solid #ddd;\"]\niconseeker.com##div[style=\"clear:both;width: 728px; height:90px; margin:5px auto; overflow:hidden;\"]\niconseeker.com##div[style=\"clear:both;width: 728px; height:90px; margin:5px auto;\"]\nsynonyms.net##div[style=\"color:#666666;font-size:10px;\\\"\"]\nautonews.com##div[style=\"color:#666666;font-size:11px;font-style:italic;text-align:right;\"]\nchristiantoday.com##div[style=\"color:#666666;font-size:8pt;text-align:right;\"]\nteamforge.net##div[style=\"display: block; margin: 0.5em 1.5em; padding: 1em; border-style: solid;\\a \\9 border-color: #F0FFFF; border-width: 3px; background-color: #F0F0F0; font-size: xx-small; text-align: left;\"]\nbumpshack.com##div[style=\"display: block; padding:5px 0px 5px 0px;\"]\nfree-iqtest.net##div[style=\"display: block; width: 800px; height: 120px; margin: 0 auto; text-align: center;\"]\nlolking.net##div[style=\"display: inline-block; width: 300px; height: 250px; background: #000;\"]\nlolking.net##div[style=\"display: inline-block; width: 728px; height: 90px; background: #000;\"]\nlistentoyoutube.com##div[style=\"display: inline-block; width: 728px; height: 90px; overflow: hidden;\"]\ncheapoair.com,onetravel.com##div[style=\"display: table; width: 1px; height:1px; position:relative; margin-left:auto; margin-right:auto; text-align: center; margin-top:10px; padding: 12px; padding-bottom:5px; background-color: #e7e7e7  ! important;\"]\nforum.xda-developers.com##div[style=\"display:block; margin-top:20px; margin-left:10px; width:750px; height:100px; float:left;\"]\nveervid.com##div[style=\"display:block; width:302px; height:275px;\"]\nskyweather.com.au##div[style=\"display:block;height:250px;width:300px;margin-bottom:20px;\"]\nchami.com##div[style=\"display:inline-block; text-align:left; border-left:1px solid #eee;border-right:1px solid #eee; width:342px;padding:10px;\"]\nlse.co.uk##div[style=\"display:inline;float:right;width:300px;height:250px;margin:5px 10px 15px 15px;\"]\nmp3juices.com##div[style=\"float: left; font-size: 12pt; padding-top: 7px;\"]\nbonniegames.com##div[style=\"float: left; height: 90px; width: 728px; background:#DDDDDD; margin:2px;\"]\nmoneymakergroup.com##div[style=\"float: left; margin: 1px;\"] > a[href^=\"http://www.moneymakergroup.com/redirect.php?url=\"]\nmoneymakergroup.com##div[style=\"float: left; margin: 1px;\"]:last-child\ncivil.ge##div[style=\"float: left; text-align: center; border:  solid 1px #efefef; width: 320px; height: 90px;\"]\nusedcars.com##div[style=\"float: left; width: 263px; text-align: center; vertical-align: top\"]\nupi.com##div[style=\"float: left; width: 300px; height: 250px; overflow: hidden;\"]\nsgclub.com##div[style=\"float: left; width: 310px; height: 260px;\"]\nboarddigger.com##div[style=\"float: left; width: 320px; height: 250px; padding: 5px;\"]\ndreammoods.com##div[style=\"float: left; width: 350; height: 350\"]\nps3hax.net##div[style=\"float: left;margin: 12px;\"]\napa.az##div[style=\"float: left;width:516px;height:60px;\"]\nhyperlinkcode.com##div[style=\"float: right; margin-left: 20px; border: 1px solid #FFFFFF; background: #FFFFFF; padding: 5px;\"]\ntrendir.com##div[style=\"float: right; margin-left: 30px; font-size: 10px;\"]\nlinuxquestions.org##div[style=\"float: right; margin-left: 5px; margin-bottom: 5px; margin-top: -3px; margin-right: -3px\"]\ncinestar.to##div[style=\"float: right; margin-top: 12px\"]\nshanghaiexpat.com##div[style=\"float: right; width: 242px; height: 148px; cursor: pointer; \"]\nfoxsports540.com##div[style=\"float: right; width: 260px; height: 230px;\"]\nbitrebels.com##div[style=\"float: right; width: 336px; height: 19px; text-align: right; padding-top: 4px; margin-top: -23px;\"]\ndreammoods.com##div[style=\"float: right; width: 350; height: 358\"]\nbit-tech.net##div[style=\"float: right; width: 728px; height: 90px; overflow: hidden; position: relative; top: 10px;\"]\nlightreading.com##div[style=\"float: right; width: 728px; height: 90px;\"]\nlongislandpress.com##div[style=\"float:left; clear:left; margin:10px 20px 5px 0px;\"]\npardaphash.com##div[style=\"float:left; margin-left:17px; width:970px; height:28px; border:0px solid #ededed; margin-bottom:20px; background-color:#ededed; \"]\npardaphash.com##div[style=\"float:left; margin-left:17px; width:970px; height:90px; border:0px solid #ededed; margin-bottom:20px; background-color:#ededed; padding:1px;\"]\neaglerising.com##div[style=\"float:left; margin:16px 13px 0 0; width:300px; height:250px; border:thin solid #555;\"]\ncelebuzz.com##div[style=\"float:left; padding:30px 0 0 0; height:250px; width:300px;\"]\nabjusa.com##div[style=\"float:left; position:relative; width:1000px; background:url(images/bar-t-1000.gif) top left no-repeat; padding-top:10px; margin-top:10px;\"]\nyuku.com##div[style=\"float:left; width: 300px; margin-left: 10px;border: 1px solid #CCC;margin-top:10px; margin-bottom:10px;\"]\nsitespeedlab.com##div[style=\"float:left; width: 336px;\"]\npinknews.co.uk##div[style=\"float:left; width:160px;\"]\nwbur.org##div[style=\"float:left; width:260px; margin:15px 0 0 40px; font-family:Arial, Helvetica, sans-serif; font-size:11px; color:#999;\"]\n2dopeboyz.com##div[style=\"float:left; width:300px; height:250px;\"]\nx64bitdownload.com##div[style=\"float:left; width:300px; padding-bottom:10px;font-size:92%;\"]\narabianoilandgas.com,arabiansupplychain.com,constructionweekonline.com,digitalproductionme.com,utilities-me.com##div[style=\"float:left; width:300px; padding-right:20px; padding-bottom:20px; padding-top:20px;\"]\namazines.com##div[style=\"float:left; width:341; height:285;\"]\ntop4download.com##div[style=\"float:left; width:620px;height:250px;clear:both;\"]\nhappynews.com##div[style=\"float:left; width:768px; height:90px; margin-bottom:12px;\"]\niconarchive.com##div[style=\"float:left;border:0px solid #dddddd;width:300px;height:280px;margin:3px 3px 3px 40px;\"]\nthespoof.com##div[style=\"float:left;clear:left;margin-right:8px;margin-top:10px;width:338px;height:282px;\"]\nthespoof.com##div[style=\"float:left;clear:left;margin-right:8px;width:200px;height:1em;\"]\nlse.co.uk##div[style=\"float:left;display:inline;width:300px;height:250px;overflow:hidden;margin-bottom:10px;\"]\ngolivewire.com##div[style=\"float:left;height:292px;width:355px;background-image: url(http://img.golivewire.com/stickynote.gif);background-repeat: no-repeat;background-position: 0px 3px;align-text:center;padding-left:26px;padding-top:26px;\"]\ncoolios.net##div[style=\"float:left;line-height:23px;font-size:10px;\"]\nlistal.com##div[style=\"float:left;margin-right:10px;width:336px;height:280px;\"]\nthedailyheap.com##div[style=\"float:left;padding:12px 12px 6px 0px;margin:0;\"]\ncinemablend.com##div[style=\"float:left;width:160px;height:600px;\"]\ncinemablend.com##div[style=\"float:left;width:160px;height:606px;\"]\nvisordown.com##div[style=\"float:left;width:300px;height:250px;\"]\nthaivisa.com##div[style=\"float:left;width:310px;height:275px;\"]\nvideoweed.es##div[style=\"float:left;width:728px; height:90px; border:1px solid #CCC; display:block; margin:20px auto; margin-bottom:0px;\"]\npoliticususa.com##div[style=\"float:none;margin:10px 0 10px 0;text-align:center;\"]\nlifescript.com##div[style=\"float:right; margin-bottom: 10px;\"]\nlifescript.com##div[style=\"float:right; margin-bottom: 10px;width:300px;\"]\ntorrentcrazy.com##div[style=\"float:right; margin:5px;\"]\netaiwannews.com,taiwannews.com.tw##div[style=\"float:right; padding:5px;\"]\nhonolulustreetpulse.com##div[style=\"float:right; width:200px;height:180px;\"]\nitechtalk.com##div[style=\"float:right; width:300px; height:250px; margin-left:10px\"]\ndenverpost.com##div[style=\"float:right; width:300px; height:250px; margin: 0px 0px 10px 10px;\"]\nicydk.com##div[style=\"float:right; width:325px; background-color:#d7e9f5; margin:10px;\"]\nsmashingapps.com##div[style=\"float:right;margin-left:5px;\"]\ngeekzone.co.nz##div[style=\"float:right;margin:15px;width:336px;height:280px;\"]\ncinemablend.com##div[style=\"float:right;text-align:right;\"]\nputme.org##div[style=\"float:right;width:336px;\"]\nrunningshoesguru.com##div[style=\"float:right;width:336px;height:280px\"]\nhindustantimes.com##div[style=\"font-family:Arial; color: #545454; font-size:10px; font-family:Arial; padding-right:102px\"]\nhindustantimes.com##div[style=\"font-family:Arial; color: #545454; font-size:10px; font-family:Arial; padding-right:20px\"]\nhindustantimes.com##div[style=\"font-family:Arial; color: #545454; font-size:10px; font-family:Arial;\"]\nsiliconera.com##div[style=\"font-family:Arial;background:#ffffff none repeat scroll 0 0;float:left;text-align:center;margin:auto 0;width:570px;\"]\njobberman.com##div[style=\"font-size: 10px;text-align: center;margin: 0px auto;letter-spacing: 1px;\"]\ntechspot.com##div[style=\"font-size: 16px; font-weight: bold; padding: 15px 0px; line-height: 30px; text-align:center;\"]\nwinscp.net##div[style=\"font-size: 70%;\"]\nksl.com##div[style=\"font-size: 9px; \"]\nnknews.org##div[style=\"font-size:0.8em;text-align:center;padding-bottom:2px;font-weight:normal !important;\"]\ntwitpic.com##div[style=\"font-size:12px;color:#cacaca;font-weight: normal;\"]\nwallbase.cc##div[style=\"font-size:13px;padding:5px\"]\ntechnologyreview.com##div[style=\"font-size:93%; color:#666666; padding-bottom:3px;\"]\nadf.ly##div[style=\"height: 120px; width: 728px; font-size:10px; text-align:center; margin: 30px auto;\"]\nclgaming.net##div[style=\"height: 250px; margin-top: 20px;\"]\ntechgage.com##div[style=\"height: 250px; width: 300px; float: right\"]\nway2sms.com##div[style=\"height: 250px; width: 610px; margin-left: -5px;\"]\npichunter.com,rawstory.com##div[style=\"height: 250px;\"]\nnorthcountrypublicradio.org##div[style=\"height: 260px; max-width: 250px; margin: 0px auto; padding: 0px;\"]\ninnocentenglish.com##div[style=\"height: 260px;\"]\nbabble.com##div[style=\"height: 263px; margin-left:0px; margin-top:5px;\"]\nnorthcountrypublicradio.org##div[style=\"height: 272px; max-width: 250px; margin: 5px auto 10px; padding: 4px 0px 20px;\"]\nbsplayer.com##div[style=\"height: 281px; overflow: hidden\"]\ninterfacelift.com##div[style=\"height: 288px;\"]\nlosethebackpain.com##div[style=\"height: 290px;\"]\ndreadcentral.com##div[style=\"height: 300px; width: 300px; float:right;\"]\nespn.go.com##div[style=\"height: 325px;\"]\nwsj.com##div[style=\"height: 375px; width: 390px;\"]\ncheatcc.com##div[style=\"height: 50px;\"]\ncoolest-gadgets.com,necn.com##div[style=\"height: 600px;\"]\nindiatimes.com##div[style=\"height: 60px;width: 1000px;margin: 0 auto;\"]\nhongkongnews.com.hk##div[style=\"height: 612px; width: 412px;\"]\nthetechherald.com##div[style=\"height: 640px\"]\nhaaretz.com##div[style=\"height: 7px;width: 300px;\"]\nrevision3.com##div[style=\"height: 90px\"]\ncpu-world.com##div[style=\"height: 90px; padding: 3px; text-align: center\"]\nyardbarker.com##div[style=\"height: 90px; width: 728px; margin-bottom: 0px; margin-top: 0px; padding: 0px;z-index: 1;\"]\nthenewage.co.za##div[style=\"height: 90px; width: 730px; float: left; margin: 0px;\"]\nf-picture.net##div[style=\"height: 90px; width: 730px; margin: 0 auto; padding: 3px; padding-left: 10px; overflow: hidden;\"]\nsnapwidget.com##div[style=\"height: 90px; width: 748px; margin: 0 auto 15px;\"]\nsnapwidget.com##div[style=\"height: 90px; width: 756px; margin: 15px auto -15px; overflow: hidden;\"]\nfood.com##div[style=\"height: 96px;\"]\nipchecking.com##div[style=\"height:108px\"]\ncosmopolitan.co.za##div[style=\"height:112px;width:713px\"]\nnortheasttimes.com##div[style=\"height:120px; width:600px;\"]\nhyperallergic.com##div[style=\"height:125px; padding-top: 10px;\"]\nubc.ug##div[style=\"height:130px; width:313px; text-align:center !important;\"]\nwcbm.com##div[style=\"height:1550px;width:168px;border:1px solid #ccc;overflow:auto;\"]\nshortcuts.com##div[style=\"height:160px;\"]\nglobaltimes.cn##div[style=\"height:160px;width:250px;\"]\ndailymirror.lk##div[style=\"height:200px; width:300px; font-family:Arial, Helvetica, sans-serif; font-size:13px;\"]\nexchangerates.org.uk##div[style=\"height:200px;width:200px;margin:10px 0;\"]\nvgchartz.com##div[style=\"height:220px; width:100%;\"]\nubc.ug##div[style=\"height:248px; width:313px; text-align:center !important;\"]\n12ozprophet.com##div[style=\"height:250px !important;width:300px !important;\"]\ncoolest-gadgets.com,gardenersworld.com##div[style=\"height:250px\"]\nprospect.org##div[style=\"height:250px; overflow:hidden;margin-bottom:20px;\"]\njewishencyclopedia.com##div[style=\"height:250px; width:250px; margin-bottom:1em\"]\ndemogeek.com##div[style=\"height:250px; width:250px; margin:10px;\"]\nnortheasttimes.com##div[style=\"height:250px; width:300px;\"]\ntheworldwidewolf.com##div[style=\"height:250px; width:310px; text-align:center; vertical-align:middle; display:table-cell; margin:0 auto; padding:0;\"]\ncrowdignite.com,gamerevolution.com,sheknows.com,tickld.com##div[style=\"height:250px;\"]\nthenewsnigeria.com.ng##div[style=\"height:250px;margin-bottom: 20px\"]\nway2sms.com##div[style=\"height:250px;margin:2px 0;\"]\nzeenews.com##div[style=\"height:250px;overflow:hidden;\"]\ntheawesomer.com,thephoenix.com##div[style=\"height:250px;width:300px;\"]\nunexplained-mysteries.com##div[style=\"height:250px;width:300px;background-color:#000000\"]\nmcndirect.com##div[style=\"height:250px;width:300px;font:bold 16px 'tahoma'; color:Gray; vertical-align:middle; text-align:center; border:none\"]\nunfinishedman.com##div[style=\"height:250px;width:300px;margin-left:15px;\"]\nrealgm.com##div[style=\"height:250px;width:300px;margin: 0 0 15px 15px;\"]\ntf2wiki.net##div[style=\"height:260px; width:730px; border-style:none\"]\ncracker.com.au##div[style=\"height:260px;width:310px;clear:both;position:relative;\"]\nfreestockphotos.biz##div[style=\"height:265px; width:300px;\"]\nfinance.yahoo.com##div[style=\"height:265px; width:300px;margin:0pt auto;\"]\nopensourcecms.com##div[style=\"height:280px; background-color:#E9EEF2;\"]\nquickr.org##div[style=\"height:280px; margin-top:0px; margin-bottom:10px;\"]\ndemogeek.com##div[style=\"height:280px; width:336px; margin:10px;\"]\nghacks.net##div[style=\"height:280px; width:336px; margin:2px 2px; float:right;\"]\ntwowheelsblog.com##div[style=\"height:280px;width:350px\"]\ngolivewire.com##div[style=\"height:292px;margin-left:10px;background-image: url(http://img.golivewire.com/stickynote-gray.gif);background-repeat: no-repeat;background-position: 0px 3px;align-text:center;padding-left:26px;padding-top:26px;\"]\ngolivewire.com##div[style=\"height:292px;margin-left:10px;background-image: url(http://img.golivewire.com/stickynote.gif);background-repeat: no-repeat;background-position: 0px 3px;align-text:center;padding-left:26px;padding-top:26px;\"]\ntribune.com.pk##div[style=\"height:300px\"]\nanimeflv.net##div[style=\"height:36px;\"]\nhyperallergic.com##div[style=\"height:600px;\"]\ncybergamer.com##div[style=\"height:600px;margin:15px 0 0 0;\"]\nwincustomize.com##div[style=\"height:60px;margin:10px auto;width:468px\"]\ncookingforengineers.com##div[style=\"height:60px;width:120px;margin:0 20px 5px 20px\"]\nchronicleonline.com,sentinelnews.com,theandersonnews.com##div[style=\"height:620px;width:279px;margin:auto;margin-top:5px;background-color:#eaeaea;\"]\nmonstersandcritics.com##div[style=\"height:690px\"]\nkbcradio.eu##div[style=\"height:70px;width:480px;\"]\nfarmville.com##div[style=\"height:80px;\"]\nmonstersandcritics.com##div[style=\"height:840px\"]\nhithiphop.com##div[style=\"height:90px; padding: 2px 0; text-align:center\"]\nphpbbhacks.com,thetechjournal.com,yopmail.com##div[style=\"height:90px;\"]\nwincustomize.com##div[style=\"height:90px;overflow:hidden;width:728px\"]\ncracker.com.au##div[style=\"height:90px;width:675px;clear:both;position:relative;\"]\nigossip.com,zillow.com##div[style=\"height:90px;width:728px\"]\ncruisecritic.com##div[style=\"margin-bottom: 20px\"]\nnwanime.com##div[style=\"margin-bottom: 3px;margin-top:-3px; height:90px;overflow:hidden;width:728px;\"]\ndesktopnexus.com##div[style=\"margin-bottom: 8px; height: 250px;\"]\nstuffpoint.com##div[style=\"margin-bottom:0px;margin-top:-10px\"]\ncodinghorror.com##div[style=\"margin-bottom:10px\"]\ncharitynavigator.org##div[style=\"margin-bottom:10px; font-size: 10px;\"]\nradiotimes.com##div[style=\"margin-bottom:10px; position:relative;background:#f2f6fd;width:300px;\"]\njpopasia.com##div[style=\"margin-bottom:10px;\"]\nrootzwiki.com##div[style=\"margin-bottom:10px;line-height:20px;margin-top:-10px;\"]\ndiamscity.com##div[style=\"margin-bottom:15px;width:728px;height:90px;display:block;float:left;overflow:hidden;\"]\nintoday.in##div[style=\"margin-bottom:20px; clear:both; float:none; height:250px;width:300px;\"]\n4sysops.com##div[style=\"margin-bottom:20px;\"]\nmerriam-webster.com##div[style=\"margin-bottom:20px;margin-top:-5px !important;width:300px;height:250px;\"]\nintoday.in##div[style=\"margin-bottom:20px;z-index:0; clear:both; float:none; height:250px;width:300px;\"]\npdf-archive.com##div[style=\"margin-left: -30px; width: 970px; height: 90px; margin-top: 8px; margin-bottom: 10px;\"]\njdpower.com##div[style=\"margin-left: 20px; background-color: #FFFFFF;\"]\nfoxlingo.com##div[style=\"margin-left: 3px; width:187px; min-height:187px;\"]\nmedicalnewstoday.com##div[style=\"margin-left:10px; margin-bottom:15px;\"]\nhowtomobi.com##div[style=\"margin-left:20px; width:336px; height:280px; float:left\"]\npropakistani.pk##div[style=\"margin-right: 10px;\"]\npropakistani.pk##div[style=\"margin-right: 1px;\"]\nshouldiremoveit.com##div[style=\"margin-top: 0px; margin-bottom: 0px;\"]\nebay.com##div[style=\"margin-top: 15px; width: 160px; height: 600px; overflow: hidden; display: block;\"]\nebay.co.uk,ebay.com##div[style=\"margin-top: 15px; width: 160px; height: 615px; overflow: hidden; display: block;\"]\nshouldiremoveit.com##div[style=\"margin-top: 20px;\"]\nway2sms.com##div[style=\"margin-top: 5px; height: 90px; clear: both;\"]\nfunnycrazygames.com##div[style=\"margin-top: 8px;\"]\nplanetsport.com##div[style=\"margin-top:-1px; width: 100%; height: 90px; background-color: #fff; float: left;\"]\ntechnet.microsoft.com##div[style=\"margin-top:0px; margin-bottom:10px\"]\nsurfline.com##div[style=\"margin-top:10px; width:990px; height:90px\"]\nworstpreviews.com##div[style=\"margin-top:15px;width:160;height:600;background-color:#FFFFFF;\"]\ncentraloutpost.com##div[style=\"margin-top:16px; width:740px; height:88px; background-image:url(/images/style/cnop_fg_main_adsbgd.png); background-repeat:no-repeat; text-align:left;\"]\n4sysops.com##div[style=\"margin-top:50px;margin-bottom:20px;\"]\nsockshare.com##div[style=\"margin-top:6px;display:block !important;\"]\nfullepisode.info##div[style=\"margin: 0 auto 0 auto; text-align:center;\"]\nhistoryextra.com##div[style=\"margin: 0 auto; width: 290px; height: 73px; background-color: #faf7f0;); padding: 5px; margin-bottom: 5px; clear: both; font-family: 'Playfair Display', serif;\"]\nhistoryextra.com##div[style=\"margin: 0 auto; width: 290px; height: 90px; background-color: #faf7f0; padding: 5px; margin-bottom: 5px; clear: both; font-family: 'Playfair Display', serif;\"]\nhistoryextra.com##div[style=\"margin: 0 auto; width: 290px; height: 90px; border-top:1px dotted #3a3a3a; border-bottom:1px dotted #3a3a3a; padding: 5px 0; margin:10px 0 10px 0; clear: both;\"]\nap.org##div[style=\"margin: 0px auto 20px; width: 728px; height: 90px\"]\ngolflink.com##div[style=\"margin: 0px auto; width: 728px; height: 90px;\"]\nkeprtv.com##div[style=\"margin: 0px; width: 300px; height: 250px\"]\napps.facebook.com##div[style=\"margin: 0px; width: 760px; height: 90px; text-align: center; vertical-align: middle;\"]\ncare2.com##div[style=\"margin: 10px 7px; width: 301px;\"]\ndemocraticunderground.com##div[style=\"margin: 10px auto 10px auto; text-align: center; width: 728px; height: 90px; background-color: #e6e6e6;\"]\nuproxx.com##div[style=\"margin: 15px auto; width: 728px; height: 90px;\"]\ntwitpic.com##div[style=\"margin: 15px auto;width:730px; height:100px;\"]\nusedcars.com##div[style=\"margin: 20px 0\"]\nshouldiremoveit.com##div[style=\"margin: 5px 0px 30px 0px;\"]\ncomicwebcam.com##div[style=\"margin: 6px auto 0;\"]\nbusinessspectator.com.au##div[style=\"margin: auto 10px; width: 300px;\"]\nprimeshare.tv##div[style=\"margin: auto; width: 728px; margin-bottom: -10px;\"]\nrecipepuppy.com##div[style=\"margin:0 auto 10px;min-height:250px;\"]\ndesivideonetwork.com##div[style=\"margin:0 auto; width:300px; height:250px;\"]\nmalaysiakini.com##div[style=\"margin:0 auto; width:728px; height:90px;\"]\nmangafox.me##div[style=\"margin:0 auto;clear:both;width:930px\"]\njoomla.org##div[style=\"margin:0 auto;width:728px;height:100px;\"]\nontopmag.com##div[style=\"margin:0; width:300px; height:250px; padding:0; margin:5px auto 0 auto;\"]\nnoobpreneur.com##div[style=\"margin:0px 0px 10px 0px; padding:20px; background:#f9f9f9; border:1px solid #ddd; text-align:center; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;\"]\nsynonym.com##div[style=\"margin:0px auto; width: 300px; height: 250px;\"]\n10minutemail.net##div[style=\"margin:10px 0; height:90px; width:728px;\"]\n22find.com##div[style=\"margin:10px auto 0;width:300px;height:320px;\"]\ndrakulastream.eu##div[style=\"margin:10px\"]\nbusinessdictionary.com##div[style=\"margin:14px 0 10px 0;padding:0px;min-height:220px;\"]\nanymaking.com##div[style=\"margin:15px auto; border:1px solid #ccc; width:728px; height:90px;\"]\nwhattoexpect.com##div[style=\"margin:15px auto;width:728px;\"]\nxnotifier.tobwithu.com##div[style=\"margin:1em 0;font-weight:bold;\"]\nthespoof.com##div[style=\"margin:20px 5px 10px 0;\"]\nipiccy.com##div[style=\"margin:20px auto 10px; width:728px;text-align:center;\"]\nbonjourlife.com##div[style=\"margin:20px auto;width:720px;height:90px;\"]\nbikeexchange.com.au##div[style=\"margin:2em 0; text-align:center;\"]\ntek-tips.com##div[style=\"margin:2px;padding:1px;height:60px;\"]\nnoobpreneur.com##div[style=\"margin:30px 0px; padding:20px; background:#f9f9f9; border:1px solid #ddd; text-align:center; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;\"]\nipaddress.com##div[style=\"margin:32px 0;text-align:center\"]\nbitsnoop.com##div[style=\"margin:4px 0 8px 0; padding:0; width:100%; height:90px; text-align:center;\"]\nindiatvnews.com##div[style=\"margin:5px 0px 20px 0px\"]\nbikeexchange.com.au##div[style=\"margin:60px 0 20px 0;\"]\njpopasia.com##div[style=\"margin:auto auto; text-align:center; margin-bottom:10px; width:300px; height:280px;\"]\ninto-asia.com##div[style=\"margin:auto;  width:728px; height:105px; margin-top:20px\"]\ncodeproject.com##div[style=\"margin:auto;width:728px;height:90px;margin-top:10px\"]\nandroidpolice.com##div[style=\"max-width:160px; height:600px; margin: 0 auto;\"]\ndawn.com##div[style=\"max-width:728px;max-height:90px;text-align:center;margin:0 auto;\"]\nchannelstv.com##div[style=\"max-width:980px; max-height:94px\"]\nlife.time.com##div[style=\"min-height: 226px; clear: both\"]\nphonearena.com##div[style=\"min-height: 250px\"]\nphonearena.com##div[style=\"min-height: 250px; width: 300px; margin: 0 auto\"]\ncepro.com##div[style=\"min-height:100px; background-color:#ebeef7; border:1px solid #dde;\"]\nmaniacdev.com##div[style=\"min-height:250px; margin-right:auto; margin-left:auto; width:300px;\"]\nfinance.yahoo.com##div[style=\"min-height:265px; _height:265px; width:300px;margin:0pt auto;\"]\ncnn.com##div[style=\"min-height:270px; max-height:625px;height: 270px!important;\"]\ntulsaworld.com##div[style=\"min-height:400px;\"]\nsmallnetbuilder.com##div[style=\"min-height:95px;\"]\nfootballleagueworld.co.uk##div[style=\"min-width: 728px; min-height: 90px; margin: 0 auto; text-align: center;\"]\npixabay.com##div[style=\"min-width: 960px;\"]\nislamchannel.tv##div[style=\"overflow: hidden; position: relative; width: 245px; height: 183.75px;\"]\nphonearena.com##div[style=\"overflow:hidden; width: 300px; height: 250px;\"]\ndailytelegraph.com.au##div[style=\"overflow:hidden;width:300px;height:263px;\"]\nsearch.mywebsearch.com##div[style=\"padding-bottom: 0px; padding-top: 0px;\"]\ndesktopnexus.com##div[style=\"padding-bottom: 12px; height: 250px;\"]\nfreewarefiles.com##div[style=\"padding-bottom:15px; padding-top:5px;\"]\nfreewarefiles.com##div[style=\"padding-bottom:15px;\"]\nodili.net##div[style=\"padding-bottom:3px;\"]\nmid-day.com##div[style=\"padding-bottom:5px; position:relative; height:250px;\"]\ncricketnirvana.com##div[style=\"padding-bottom:5px;height:250px\"]\nbitcoin-otc.com##div[style=\"padding-left: 10px; padding-bottom: 10px; text-align: center; font-family: Helvetica;\"]\nbeforeitsnews.com##div[style=\"padding-left:20px;width: 300px; height: 250px; float:left;\"]\nyoutubedoubler.com##div[style=\"padding-left:2px; padding-top:9px; padding-bottom:8px; margin-top:0px; background-color:lightgrey;text-align:center;margin-top:18px;\"]\nrlslog.net##div[style=\"padding-left:40px;\"]\nbeforeitsnews.com##div[style=\"padding-right:20px; width: 300px; height: 250px; float:right;\"]\npt-news.org##div[style=\"padding-right:5px; padding-top:18px; float:left; \"]\nmagweb.com##div[style=\"padding-top: 15px;\"]\ndrweil.com##div[style=\"padding-top: 5px; width:728px; padding-bottom:10px;\"]\nynetnews.com##div[style=\"padding-top:10px;padding-bottom:10px;padding-right:10px\"]\npodbean.com##div[style=\"padding-top:20px;width:336px;height:280px\"]\nfunnycrazygames.com##div[style=\"padding-top:2px\"]\nthenews.com.pk##div[style=\"padding-top:5px;;height:95px;float:left;width:931px;background:url(images/banner_top_bg.jpg);\"]\nthenews.com.pk##div[style=\"padding-top:5px;height:95px;float:left;width:931px;background:url(images/banner_top_bg.jpg);\"]\nforums.androidcentral.com##div[style=\"padding-top:92px !important; \"]\ncardschat.com##div[style=\"padding: 0px 0px 0px 0px; margin-top:10px;\"]\nkewlshare.com##div[style=\"padding: 10px; border:1px solid #E0E0E0;\"]\nepinions.com##div[style=\"padding: 15px 5px;\"]\nfunvid.hu##div[style=\"padding: 3px 0px 0px 26px; height: 90px; clear: both;\"]\nshaaditimes.com##div[style=\"padding: 5 0 0 0px; height: 138px; text-align:center; width:780px; background: url('/imgs/top-ad-bg.gif') repeat-x left bottom; background-color:#FFF9D0;\"]\nsevenforums.com##div[style=\"padding: 6px 0px 0px 0px\"]\nroblox.com##div[style=\"padding: 6px 8px; background: #fff; height:183px;\"]\ndailyfinance.com##div[style=\"padding: 6px; float: right; width: 242px; height: 272px;\"]\nlikecool.com##div[style=\"padding:0 0 0 10px;height:300px\"]\nlegacy.com##div[style=\"padding:0; margin:0 auto; text-align:right; width:738px;\"]\ncondo.com##div[style=\"padding:0px 5px 0px 5px; width:300px;\"]\nbeforeitsnews.com##div[style=\"padding:10px 0 10px 0;height:250px;margin-bottom:5px;\"]\nsubtitleseeker.com##div[style=\"padding:10px 0px 10px 0px;  text-align:center; width:728; height:90px;\"]\nstandardmedia.co.ke##div[style=\"padding:10px; width:1200px; height:90px; \"]\nmyanimelist.net##div[style=\"padding:12px 0px\"]\nlistentotaxman.com##div[style=\"padding:2px 2px 0px 0px;height:90px;overflow:hidden;text-align:right; clear:both;\"]\nucatholic.com##div[style=\"padding:5px 0 5px 0; text-align:center\"]\navforums.com##div[style=\"padding:5px 0px 0px 0px\"]\nusfinancepost.com##div[style=\"padding:5px 15px 5px 0px;\"]\nimtranslator.net##div[style=\"padding:5px;margin:5px;border:1px solid #21497D;\"]\nchampionsradio.com##div[style=\"position: absolute; left: 0px; top: 259px;\"]\nchampionsradio.com##div[style=\"position: absolute; left: 630px; top: 283px;\"]\nyourvideohost.com##div[style=\"position: absolute; width: 300px; height: 250px; margin-left: -150px; left: 50%; margin-top: -125px; top: 50%; background-color: transparent;z-index:98;\"]\nplay44.net,video44.net##div[style=\"position: absolute; width: 300px; height: 275px; left: 150px; top: 79px; z-index: 999;\"]\nvideobam.com##div[style=\"position: fixed; width: 100%; text-align: left; height: 38px; padding-bottom: 2px; background: rgb(253, 237, 167) none repeat scroll 0% 0%; top: -0.000756667px; left: 0px; font-family: Arial; font-size: 15px; border-bottom: 1px solid rgb(214, 214, 214); min-width: 700px; z-index: 2147483647;\"]\nroundgames.com##div[style=\"position: relative; height: 110px;\"]\nlbcgroup.tv##div[style=\"position: relative; height: 250px; width: 300px;\"]\nampgames.com##div[style=\"position: relative; height: 260px;\"]\neducationpost.com.hk##div[style=\"position: relative; width: 300px; height: 280px; overflow: hidden;\"]\nnewera.com.na##div[style=\"position: relative; width: 620px; height: 80px;\"]\nbestreams.net##div[style=\"position: relative; width: 800px; height: 440px;\"]\nkusc.org##div[style=\"position: relative; width: 900px; height: 250px; left: -300px;\"]\nvidspot.net##div[style=\"position: relative;\"]:first-child > div[id^=\"O\"][style]:first-child\nstreamtuner.me##div[style=\"position: relative;top: -45px;\"]\nskyvids.net,streamin.to##div[style=\"position: relative;width: 800px;height: 440px;\"]\ntopfriv.com##div[style=\"position:absolute; background:#201F1D; top:15px; right:60px; width:728px; height:90px;\"]\nsharerepo.com##div[style=\"position:absolute; top:10%; left:0%; width:300px; height:100%; z-index:1;\"]\ndubbedonline.co##div[style=\"position:absolute;background:#000000 URL(../image/black.gif);text-align:center;width:728px;height:410px;\"]\ntheoffside.com##div[style=\"position:absolute;left:10px;top:138px;width:160px;height:600px;border:1px solid #ffffff;\"]\ni6.com##div[style=\"position:absolute;top: 240px; left:985px;width: 320px;\"]\nhypable.com##div[style=\"position:relative; float:left; width:300px; min-height:250px; background-color:grey;\"]\nhypable.com##div[style=\"position:relative; float:left; width:300px; min-height:250px;\"]\nhypable.com##div[style=\"position:relative; margin:0 auto; width:100%; padding:30px 0px; text-align: center; min-height:90px;\"]\nmmorpg.com##div[style=\"position:relative; margin:0px; width:100%; height:90px; clear:both; padding-top:12px; text-align:center;\"]\nhealthcastle.com##div[style=\"position:relative; width: 300px; height: 280px;\"]\nopiniojuris.org##div[style=\"position:relative; width:300px; height:250px; overflow:hidden\"]\nhypixel.net##div[style=\"position:relative; width:728px; margin: auto;\"]\nbuyselltrade.ca##div[style=\"position:relative;overflow:hidden;width:728px;height:90px;\"]\nshalomtv.com##div[style=\"position:relative;width:468px;height:60px;overflow:hidden\"]\nfastvideo.eu##div[style=\"position:relative;width:896px;height:370px;margin: 0 auto;backgroud:;\"] > [id]:first-child\nbaltimorestyle.com##div[style=\"text-align : center ;margin-left : auto ;margin-right : auto ;position : relative ;background-color:#ffffff;height:100px;padding-top:10px;\"]\nnotalwaysright.com##div[style=\"text-align: center; display: block; padding-top: 30px;\"]\ncenturylink.net##div[style=\"text-align: center; font-size: 11px;\"]\nrofl.to##div[style=\"text-align: center; height:60px; width:468px;\"]\ndrugstore.com##div[style=\"text-align: center; letter-spacing: 2px; color: #999999; font-size: 6pt\"]\ndrugstore.com##div[style=\"text-align: center; letter-spacing: 2px; color: #999999; font-size: 6pt; padding-top: 5px\"]\ngeekstogo.com##div[style=\"text-align: center; min-height:250px; min-width:310px;\"]\nap.org##div[style=\"text-align: center; padding-top: 10px\"]\nnationalreview.com##div[style=\"text-align: center; width: 300px; margin-right:20px; margin-borrom: 20px; float:left;\"]\npatheos.com##div[style=\"text-align: center; width: 970px; height: 90px;\"]\ndailyamerican.com##div[style=\"text-align:center; color:#fff; width: 234px; height: 60px; margin:0 auto;\"]\ncheapoair.com##div[style=\"text-align:center; font-size:10px; color:#999; background-color:#e7e7e7;\"]\nticketweb.com##div[style=\"text-align:center; font-size:10px; color:#afafaf\"]\ntennisearth.com##div[style=\"text-align:center; height:630px;\"]\nchinadaily.com.cn##div[style=\"text-align:center; margin-bottom:10px; width:800px; float:left; z-index:-1;\"]\nnewser.com##div[style=\"text-align:center; margin:-5px 0 15px; font-size:11px;\"]\nchicagocrusader.com,garycrusader.com##div[style=\"text-align:center; margin:3px; height:140px; padding-left:130px;\"]\ncanoe.ca##div[style=\"text-align:center; min-height:260px;\"]\neatingwell.com##div[style=\"text-align:center; min-height:90px;\"]\ncustomize.org##div[style=\"text-align:center; padding:0px 0px 20px 0px; width: 100%; height: 90px;\"]\ncustomize.org##div[style=\"text-align:center; padding:20px 0px 0px 0px; width: 100%; height: 90px;\"]\nlegacy.com##div[style=\"text-align:center; padding:2px 0 3px 0;\"]\nnowdownload.ag,nowdownload.ch,nowdownload.co,nowdownload.ec,nowdownload.sx##div[style=\"text-align:center; vertical-align:middle; height:250px;\"]\nclutchmagonline.com##div[style=\"text-align:center; width:300px; margin: 20px auto\"]\ncinemablend.com##div[style=\"text-align:center;\"]\ngeekzone.co.nz##div[style=\"text-align:center;clear:both;height:20px;\"]\niloubnan.info##div[style=\"text-align:center;color:black;font-size:10px;\"]\ntechguy.org##div[style=\"text-align:center;height:101px;width:100%;\"]\ntheawesomer.com##div[style=\"text-align:center;padding:20px 0px 0px 0px;height:90px;width:100%;clear:both;\"]\nimcdb.org##div[style=\"text-align:center;width:150px;font-family:Arial;\"]\nstatscrop.com##div[style=\"text-align:left; margin-left:5px; clear:both;\"]:first-child\nzrtp.org##div[style=\"text-align:left;display:block;margin-right:auto;margin-left:auto\"]\ncarpoint.com.au##div[style=\"text-align:right;font-size:10px;color:#999;padding:4px;border:solid #ccc;border-width:0\"]\nmocpages.com##div[style=\"vertical-align:middle; width:728; height:90; max-width:728; max-height:90; border:1px solid #888;\"]\nneowin.net##div[style=\"white-space:nowrap;overflow: hidden; min-height:120px; margin-top:0; margin-bottom:0;\"]\npoliticususa.com##div[style=\"width: 100%; height: 100px; margin: -8px auto 7px auto;\"]\nchron.com##div[style=\"width: 100%; height: 90px; margin-bottom: 8px; float: left;\"]\ncheapassgamer.com##div[style=\"width: 100%; height: 90px; padding: 4px 0 4px 0\"]\ndownarchive.ws##div[style=\"width: 100%; margin: 0 auto;\"]\ncanadianlisted.com##div[style=\"width: 1000px;position: relative;height:95px\"]\nencyclopedia.com##div[style=\"width: 1005px;\"]\nwatertowndailytimes.com##div[style=\"width: 120px; height: 240px; margin-bottom: 20px;\"]\ncroatia.org##div[style=\"width: 120px; text-align:center\"]\nwhatson.co.za##div[style=\"width: 140px; height: 470px;\"]\nmagicseaweed.com##div[style=\"width: 160px; background: #dddddd; padding-top: 10px\"]\ntheasiantoday.com##div[style=\"width: 160px; border: solid 1px #2A3694; background-color: White;\"]\ndesixpress.co.uk##div[style=\"width: 160px; border: solid 1px #DE0A17; background-color: White;\"]\nvr-zone.com##div[style=\"width: 160px; height: 600px\"]\nbrandeating.com##div[style=\"width: 160px; height: 600px; overflow: visible;\"]\nperformanceboats.com##div[style=\"width: 160px; height: 600px;\"]\nkidzworld.com##div[style=\"width: 160px; height: 617px; margin: auto;\"]\nwrip979.com##div[style=\"width: 160px; height: 627px\"]\ndisclose.tv##div[style=\"width: 160px;\"]\nconcrete.tv##div[style=\"width: 180px; height: 360px; border: 1px solid white;\"]\nporttechnology.org##div[style=\"width: 192px; height: 70px;\"]\ncheckip.org##div[style=\"width: 250px; margin-left: 25px;margin-top:10px;\"]\nwhodoyouthinkyouaremagazine.com##div[style=\"width: 290px; height: 100px; padding: 5px; margin-bottom: 5px; clear: both;\"]\nmmoculture.com##div[style=\"width: 290px; height: 250px;\"]\nmmoculture.com##div[style=\"width: 290px; height: 600px;\"]\nskyatnightmagazine.com##div[style=\"width: 290px; height: 70px; background-color:#B0CCE7; padding: 5px; margin-bottom: 5px; clear: both;\"]\nsciencefocus.com##div[style=\"width: 290px; height: 84px; background-color: #999; padding: 5px; margin: 0 0 5px; clear: both; line-height: 17px; float: left;\"]\nsciencefocus.com##div[style=\"width: 290px; height: 84px; background-color: #999; padding: 5px; margin: 10px 0 5px; clear: both; line-height: 17px; float: left;\"]\nsciencefocus.com##div[style=\"width: 290px; height: 84px; background-color: rgb(229, 223, 227); padding: 5px; margin: 10px 0pt; clear: both; line-height: 17px; float: left;\"]\ndiscoverwildlife.com##div[style=\"width: 290px; height: 90px; background-color: #d4d4d2; padding: 5px; margin-bottom: 5px; clear: both;\"]\nhomesandantiques.com##div[style=\"width: 290px; height: 90px; background-color: rgb(229, 223, 227); padding: 5px; margin-bottom: 5px; clear: both;\"]\ndiscoverwildlife.com##div[style=\"width: 290px; height: 90px; border-top:1px dotted #3a3a3a; padding: 5px 0; margin:10px 0 10px 0; clear: both;\"]\nbox10.com##div[style=\"width: 300px; float: left;\"]\nhitfix.com,nba.com##div[style=\"width: 300px; height: 100px\"]\nkidzworld.com##div[style=\"width: 300px; height: 117px; margin: auto;\"]\neastonline.eu##div[style=\"width: 300px; height: 132px; margin-bottom: 20px;margin-top: 20px;\"]\ncompasscayman.com##div[style=\"width: 300px; height: 155px; float: left;\"]\ncompasscayman.com##div[style=\"width: 300px; height: 155px;float: left;\"]\ntheonion.com##div[style=\"width: 300px; height: 220px; overflow: hidden;\"]\nnba.com,patheos.com##div[style=\"width: 300px; height: 250px\"]\nuvnc.com##div[style=\"width: 300px; height: 250px; background-color: #FFFFFF\"]\nthefightnetwork.com##div[style=\"width: 300px; height: 250px; background: #000\"]\nlolking.net##div[style=\"width: 300px; height: 250px; background: #000;\"]\nbuccaneers.com##div[style=\"width: 300px; height: 250px; background: #fff;\"]\ndjmag.ca##div[style=\"width: 300px; height: 250px; border: 2px solid #000;\"]\necorazzi.com##div[style=\"width: 300px; height: 250px; float: right; margin: 0 0 15px 25px;\"]\nmarriland.com##div[style=\"width: 300px; height: 250px; float: right; margin: 2px;\"]\nrockol.com##div[style=\"width: 300px; height: 250px; left: 650px; top: 0px;\"]\ntechfresh.net##div[style=\"width: 300px; height: 250px; margin-bottom: 20px;\"]\njerusalemonline.com##div[style=\"width: 300px; height: 250px; margin-left: 70px; margin-top: 10px; margin-bottom: 10px;\"]\nfame10.com##div[style=\"width: 300px; height: 250px; margin: 0 auto;\"]\nsocialblade.com##div[style=\"width: 300px; height: 250px; margin: 0px auto 10px auto;\"]\npcworld.com##div[style=\"width: 300px; height: 250px; margin:0 auto 20px; overflow:hidden;\"]\nlooklocal.co.za##div[style=\"width: 300px; height: 250px; overflow: auto;\"]\nbenzinga.com,newstalk.ie,newswhip.ie##div[style=\"width: 300px; height: 250px; overflow: hidden;\"]\nmbworld.org##div[style=\"width: 300px; height: 250px; overflow:hidden;\"]\nukfree.tv##div[style=\"width: 300px; height: 250px; padding-top: 10px\"]\nwashingtonmonthly.com##div[style=\"width: 300px; height: 250px; padding: 15px 50px; margin-bottom: 20px; background: #ccc;\"]\ncbsnews.com,cbssports.com,cnn.com,gamefront.com,hernandotoday.com,highlandstoday.com,mondomedia.com,performanceboats.com,sciencedaily.com,spot.ph,synonym.com,tbo.com,vitals.com,wamu.org,way2sms.com,whatsonstage.com,wnd.com##div[style=\"width: 300px; height: 250px;\"]\ncompasscayman.com##div[style=\"width: 300px; height: 250px;float: left;\"]\nusedcars.com##div[style=\"width: 300px; height: 265px\"]\nebay.co.uk##div[style=\"width: 300px; height: 265px; overflow: hidden; display: block;\"]\nkidzworld.com##div[style=\"width: 300px; height: 267px; margin: auto;\"]\nwnd.com##div[style=\"width: 300px; height: 600px\"]\nsocialblade.com##div[style=\"width: 300px; height: 600px; margin: 20px auto 10px auto;\"]\nurbandictionary.com,wraltechwire.com##div[style=\"width: 300px; height: 600px;\"]\nfropper.com##div[style=\"width: 300px; height:250px; margin-bottom:15px;\"]\nliveleak.com##div[style=\"width: 300px; height:340px\"]\ndigitalphotopro.com##div[style=\"width: 300px; text-align: center;\"]\nvitals.com##div[style=\"width: 300px; text-align:right\"]\nhollywoodnews.com,wnd.com##div[style=\"width: 300px;height: 250px;\"]\nwnd.com##div[style=\"width: 300px;height: 600px;\"]\nbabesandkidsreview.com##div[style=\"width: 304px; height: 280px; outline: 1px solid #808080; padding-top: 2px; text-align: center; background-color: #fff;\"]\ncheatcc.com##div[style=\"width: 308px; text-align: right; font-size: 11pt;\"]\nphonearena.com##div[style=\"width: 320px; height: 250px; border-top: 1px dotted #ddd; padding: 17px 20px 17px 0px;\"]\nweaselzippers.us##div[style=\"width: 320px; height:600px;  margin-top:190px;\"]\nthetruthaboutguns.com,weaselzippers.us##div[style=\"width: 320px; height:600px;\"]\nwindows7download.com##div[style=\"width: 336px; height:280px;\"]\nwellness.com##div[style=\"width: 336px; padding: 0 0 0 15px; height:280px;\"]\ntheday.com##div[style=\"width: 468px; height: 60px; border: 1px solid #eeeeee; margin: 5px 0; clear: both;\"]\nway2sms.com##div[style=\"width: 468px; height: 60px; margin-left: 140px;\"]\nscriptcopy.com##div[style=\"width: 468px; height: 60px; text-align: center; display: block; margin: 0pt auto; background-color:#eee;\"]\nmmoculture.com##div[style=\"width: 468px; height: 60px;\"]\nwin7dl.com##div[style=\"width: 570px; margin: 0 auto;\"]\nredorbit.com##div[style=\"width: 700px; height: 250px; overflow: hidden;\"]\nhiphopstan.com##div[style=\"width: 700px; height: 270px; margin-left: auto; margin-right: auto; clear: both;\"]\nsharingcentre.net##div[style=\"width: 700px; margin: 0 auto;\"]\nurbandictionary.com##div[style=\"width: 728px; height: 90px\"]\nsporcle.com##div[style=\"width: 728px; height: 90px; display: block;\"]\nsecretmaryo.org##div[style=\"width: 728px; height: 90px; margin-left: 6px;\"]\npassiveaggressivenotes.com##div[style=\"width: 728px; height: 90px; margin: 0 auto 5px; border: 1px solid #666;\"]\ndbforums.com,fitness.com,uproxx.com##div[style=\"width: 728px; height: 90px; margin: 0 auto;\"]\nbusinessmirror.com.ph##div[style=\"width: 728px; height: 90px; margin: 0px auto; margin-top: 5px;\"]\nhurriyetdailynews.com,leoweekly.com##div[style=\"width: 728px; height: 90px; margin: 0px auto;\"]\ntwcenter.net##div[style=\"width: 728px; height: 90px; margin: 1em auto 0;\"]\nripoffreport.com##div[style=\"width: 728px; height: 90px; margin: 20px auto; overflow: hidden;\"]\nuproxx.com##div[style=\"width: 728px; height: 90px; margin: 20px auto;\"]\nmbworld.org##div[style=\"width: 728px; height: 90px; overflow: hidden; margin: 0px auto;\"]\nnitroflare.com##div[style=\"width: 728px; height: 90px; text-align: center;\"]\ngelbooru.com##div[style=\"width: 728px; height: 90px; text-align: left;\"]\nbit-tech.net,eatliver.com,urbandictionary.com##div[style=\"width: 728px; height: 90px;\"]\nitnews.com.au##div[style=\"width: 728px; height:90px; margin-left: auto; margin-right: auto; padding-bottom: 20px;\"]\nbravejournal.com##div[style=\"width: 728px; margin: 0 auto;\"]\nzoklet.net##div[style=\"width: 728px; margin: 3px auto;\"]\nwnd.com##div[style=\"width: 728px;height: 90px\"]\nf-picture.net##div[style=\"width: 730px; height: 90px; padding: 0px; padding-left: 10px; margin: 0px; border-style: none; border-width: 0px; overflow: hidden;\"]\nnews-panel.com##div[style=\"width: 730px; height: 95px;\"]\nelitistjerks.com##div[style=\"width: 730px; margin: 0 auto\"]\nquikr.com##div[style=\"width: 735px; height: 125px;\"]\nfreemake.com##div[style=\"width: 735px; height:60px; margin: 0px auto; padding-bottom:40px;\"]\nradiosurvivor.com##div[style=\"width: 750px; height: 90px; border: padding-left:25px; margin-left:auto; margin-right:auto; padding-bottom: 40px; max-width:100%\"]\nshop.com##div[style=\"width: 819px; border:1px solid #cccccc; \"]\nshop.com##div[style=\"width: 819px; height: 124px; border:1px solid #cccccc; \"]\nbetterpropaganda.com##div[style=\"width: 848px; height: 91px; margin: 0; position: relative;\"]\nmydaily.co.uk##div[style=\"width: 921px; opacity: 1; top: -110px;\"]\nfscheetahs.co.za##div[style=\"width: 945px; padding-left: 15px; padding-right: 15px; padding-top: 20px; background-color: #FFFFFF\"]\nnba.com##div[style=\"width: 958px; height: 90px; margin: 0 auto; text-align: center; \"]\npatheos.com##div[style=\"width: 970px; height: 40px; margin-bottom: 10px;\"]\nclatl.com##div[style=\"width: 970px; height: 76px; background-image: url('http://clatl.com/ads/loafdeals_homepage-bkgnd.png'); background-repeat: no-repeat; margin-bottom: 8px; margin-top: 8px; margin-left: auto; margin-right: auto;\"]\npatheos.com##div[style=\"width: 970px; height: 90px; margin-bottom: 10px;\"]\ncbssports.com##div[style=\"width: 970px; height: 90px;\"]\ncheatcc.com##div[style=\"width:100%; background: #ffffff; padding-bottom: 5px;\"]\nmondotimes.com##div[style=\"width:100%; height:90px; line-height:90px; text-align:left;\"]\nwnd.com##div[style=\"width:100%; padding:0px; margin:0px;\"]:first-child\nthesimsresource.com##div[style=\"width:100%;background:#000;\"]\nhowtoforge.com##div[style=\"width:100%;border-top:1px solid #CCCCCC;border-bottom:1px solid #CCCCCC;padding:4px 0 2px 0;margin-bottom:5px;height:27px;\"]\ngirlschase.com##div[style=\"width:100%;color:#666;text-align:center;font-size:50%;margin-top:-20px;\"]\nzedomax.com##div[style=\"width:100%;height:280px;\"]\nwattpad.com##div[style=\"width:100%;height:90px;text-align:center\"]\ntechcentral.ie##div[style=\"width:1000px; height:90px; margin:auto\"]\nflixist.com##div[style=\"width:1000px; padding:0px; margin-left:auto; margin-right:auto; margin-bottom:10px; margin-top:10px; height:90px;\"]\nnewhampshire.com,unionleader.com##div[style=\"width:100px;height:38px;float:right;margin-left:10px\"]\ntechbrowsing.com##div[style=\"width:1045px;height:90px;margin-top: 15px;\"]\nstrangecosmos.com##div[style=\"width:120px; height:600;\"]\negyptindependent.com##div[style=\"width:120px;height:600px;\"]\ngoogletutor.com##div[style=\"width:125px;text-align:center;\"]\neadt.co.uk,eveningstar.co.uk##div[style=\"width:134px; margin-bottom:10px;\"]\nworldscreen.com##div[style=\"width:150px; height:205px; background-color:#ddd;\"]\nworstpreviews.com##div[style=\"width:160;height:600;background-color:#FFFFFF;\"]\nallthingsnow.com##div[style=\"width:160px; height: 600px;z-index:1;\"]\nencyclopedia.com##div[style=\"width:160px; height:600px\"]\nrantsports.com##div[style=\"width:160px; height:600px; float:left;\"]\ngametracker.com##div[style=\"width:160px; height:600px; margin-bottom:8px; overflow:hidden;\"]\nrelationshipcolumns.com##div[style=\"width:160px; height:600px; margin-top:10px;\"]\ninrumor.com##div[style=\"width:160px; height:600px; margin:0 0 20px 0;\"]\nyourmindblown.com##div[style=\"width:160px; height:600px; padding:10px 0px;\"]\nlegitreviews.com,modernluxury.com,techgage.com##div[style=\"width:160px; height:600px;\"]\nbrothersoft.com##div[style=\"width:160px; height:600px;margin:0px auto;\"]\ngogetaroomie.com##div[style=\"width:160px; height:616px;background: #ffffff; margin-top:10px; margin-bottom:10px;\"]\nforums.eteknix.com##div[style=\"width:160px; margin:10px auto; height:600px;\"]\ndownloadcrew.com##div[style=\"width:160px;height:160px;margin-bottom:10px;\"]\nbelfasttelegraph.co.uk,wxyz.com##div[style=\"width:160px;height:600px;\"]\ndownloadcrew.com##div[style=\"width:160px;height:600px;margin-bottom:10px;\"]\nleitesculinaria.com##div[style=\"width:162px; height:600px; float:left;\"]\nleitesculinaria.com##div[style=\"width:162px; height:600px; float:right;\"]\nundsports.com##div[style=\"width:170px;height:625px;overflow:hidden;background-color:#ffffff;border:1px solid #c3c3c3\"]\nwantitall.co.za##div[style=\"width:195px; height:600px; text-align:center\"]\nmlmhelpdesk.com##div[style=\"width:200px; height:200px;\"]\ntoday.az##div[style=\"width:229px; height:120px;\"]\ntheadvocate.com##div[style=\"width:240px;height:90px;background:#eee; margin-top:5px;float:right;\"]\nnewzimbabwe.com##div[style=\"width:250px; height:250px;\"]\ntoday.az##div[style=\"width:255px; height:120px;\"]\nexchangerates.org.uk##div[style=\"width:255px;text-align:left;background:#fff;margin:15px 0 15px 0;\"]\nlinksrank.com##div[style=\"width:260px; align:left\"]\nwebstatschecker.com##div[style=\"width:260px; text-align:left\"]\nchinadaily.com.cn##div[style=\"width:275px;height:250px;border:none;padding:0px;margin:0px;overflow:hidden;\"]\n101greatgoals.com##div[style=\"width:280px;height:440px;\"]\ncinemablend.com##div[style=\"width:290px;height:600px;\"]\ncinemablend.com##div[style=\"width:290px;height:606px;\"]\nsamoaobserver.ws##div[style=\"width:297px; height:130px;\"]\ncrescent-news.com,recordpub.com,state-journal.com,the-review.com##div[style=\"width:298px;height:298px;border:1px solid #adaaad;background-color:#f4f4f4;box-shadow:inset -2px -2px 7px rgba(0,0,0,0.16);-moz-box-shadow: inset -2px -2px 7px rgba(0,0,0,0.16);-webkit-box-shadow: inset 2px 2px 7px rgba(0,0,0,0.16);border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;overflow:hidden;\"]\nworstpreviews.com##div[style=\"width:300;height:250;background-color:#FFFFFF;\"]\nfirstpost.com##div[style=\"width:300;height:250px;margin-bottom:10px;\"]\ncooking.com##div[style=\"width:300;height:250px;position:relative;z-index:10000;\"]\nweatherreports.com##div[style=\"width:300px; border: 1px solid gray;\"]\nmensfitness.com##div[style=\"width:300px; height: 250px; overflow:auto;\"]\nredflagflyinghigh.com,wheninmanila.com##div[style=\"width:300px; height: 250px;\"]\nshape.com##div[style=\"width:300px; height: 255px; overflow:auto;\"]\nitweb.co.za##div[style=\"width:300px; height: 266px; overflow: hidden; margin: 0\"]\njerusalemonline.com##div[style=\"width:300px; height: 284px; padding-top: 10px; padding-bottom: 10px; border: 1px solid #ffffff; float:right\"]\nfoxsportsasia.com##div[style=\"width:300px; height:100px;\"]\ngirlgames.com##div[style=\"width:300px; height:118px; margin-bottom:6px;\"]\nmidweek.com##div[style=\"width:300px; height:135px; float:left;\"]\nencyclopedia.com,thirdage.com##div[style=\"width:300px; height:250px\"]\nherplaces.com##div[style=\"width:300px; height:250px; background-color:#CCC;\"]\niskullgames.com##div[style=\"width:300px; height:250px; border: 2px solid #3a3524;\"]\nvideoweed.es##div[style=\"width:300px; height:250px; display:block; border:1px solid #CCC;\"]\npicocent.com##div[style=\"width:300px; height:250px; margin-bottom: 35px;\"]\nearthsky.org##div[style=\"width:300px; height:250px; margin-bottom:25px;\"]\ngametracker.com##div[style=\"width:300px; height:250px; margin-bottom:8px; overflow:hidden;\"]\nmidweek.com##div[style=\"width:300px; height:250px; margin: 5px 0px; float:left;\"]\ninrumor.com##div[style=\"width:300px; height:250px; margin:0 0 10px 0;\"]\nfunny-city.com,techsupportforum.com##div[style=\"width:300px; height:250px; margin:auto;\"]\nfilesfrog.com##div[style=\"width:300px; height:250px; overflow: hidden;\"]\nsearch.ch##div[style=\"width:300px; height:250px; overflow:hidden\"]\nworldtvpc.com##div[style=\"width:300px; height:250px; padding:8px; margin:auto\"]\nadforum.com,alliednews.com,americustimesrecorder.com,andovertownsman.com,athensreview.com,batesvilleheraldtribune.com,bdtonline.com,chickashanews.com,claremoreprogress.com,cleburnetimesreview.com,clintonherald.com,commercejournal.com,commercial-news.com,coopercrier.com,cordeledispatch.com,corsicanadailysun.com,crossville-chronicle.com,cullmantimes.com,dailyiowegian.com,dailyitem.com,daltondailycitizen.com,derrynews.com,duncanbanner.com,eagletribune.com,edmondsun.com,effinghamdailynews.com,enewscourier.com,enidnews.com,farmtalknewspaper.com,fayettetribune.com,flasharcade.com,flashgames247.com,flyergroup.com,foxsportsasia.com,gainesvilleregister.com,gloucestertimes.com,goshennews.com,greensburgdailynews.com,heraldbanner.com,heraldbulletin.com,hgazette.com,homemagonline.com,itemonline.com,jacksonvilleprogress.com,jerusalemonline.com,joplinglobe.com,journal-times.com,journalexpress.net,kexp.org,kokomotribune.com,lockportjournal.com,mankatofreepress.com,mcalesternews.com,mccrearyrecord.com,mcleansborotimesleader.com,meadvilletribune.com,meridianstar.com,mineralwellsindex.com,montgomery-herald.com,mooreamerican.com,moultrieobserver.com,muskogeephoenix.com,ncnewsonline.com,newburyportnews.com,newsaegis.com,newsandtribune.com,niagara-gazette.com,njeffersonnews.com,normantranscript.com,opposingviews.com,orangeleader.com,oskaloosa.com,ottumwacourier.com,palestineherald.com,panews.com,paulsvalleydailydemocrat.com,pellachronicle.com,pharostribune.com,pressrepublican.com,pryordailytimes.com,randolphguide.com,record-eagle.com,register-herald.com,register-news.com,reporter.net,rockwallheraldbanner.com,roysecityheraldbanner.com,rushvillerepublican.com,salemnews.com,sentinel-echo.com,sharonherald.com,shelbyvilledailyunion.com,siteslike.com,standardmedia.co.ke,starbeacon.com,stwnewspress.com,suwanneedemocrat.com,tahlequahdailypress.com,theadanews.com,thedailystar.com,thelandonline.com,themoreheadnews.com,thesnaponline.com,tiftongazette.com,times-news.com,timesenterprise.com,timessentinel.com,timeswv.com,tonawanda-news.com,tribdem.com,tribstar.com,unionrecorder.com,valdostadailytimes.com,washtimesherald.com,waurikademocrat.com,wcoutlook.com,weatherforddemocrat.com,woodwardnews.net##div[style=\"width:300px; height:250px;\"]\nsnewsnet.com##div[style=\"width:300px; height:250px;border:0px;\"]\ncnn.com##div[style=\"width:300px; height:250px;overflow:hidden;\"]\nego4u.com##div[style=\"width:300px; height:260px; padding-top:10px\"]\njerusalemonline.com##div[style=\"width:300px; height:265px;\"]\ngogetaroomie.com##div[style=\"width:300px; height:266px; background: #ffffff;  margin-bottom:10px;\"]\ntopgear.com##div[style=\"width:300px; height:306px; padding-top: 0px;\"]\njerusalemonline.com,race-dezert.com##div[style=\"width:300px; height:600px;\"]\nworldscreen.com##div[style=\"width:300px; height:65px; background-color:#ddd;\"]\nstandard.co.uk##div[style=\"width:300px; margin-bottom:20px; background-color:#f5f5f5;\"]\nuesp.net##div[style=\"width:300px; margin-left: 120px;\"]\nmiamitodaynews.com##div[style=\"width:300px; margin:0 auto;\"]\nwindsorite.ca##div[style=\"width:300px; min-height: 600px;\"]\nforzaitalianfootball.com##div[style=\"width:300px; min-height:250px; max-height:600px;\"]\nyourmindblown.com##div[style=\"width:300px; min-height:250px; padding:10px 0px;\"]\netfdailynews.com##div[style=\"width:300px;border:1px solid black\"]\negyptindependent.com##div[style=\"width:300px;height:100px;\"]\nindependent.com##div[style=\"width:300px;height:100px;margin-left:10px;margin-top:15px;margin-bottom:15px;\"]\nsnewsnet.com##div[style=\"width:300px;height:127px;border:0px;\"]\nsmh.com.au##div[style=\"width:300px;height:163px;\"]\n1071thez.com,classichits987.com,funnyjunk.com,indiana105.com,kgrt.com,pocket-lint.com,wakeradio.com,xrock1039.com##div[style=\"width:300px;height:250px\"]\nafterdawn.com,egyptindependent.com,flyertalk.com,hairboutique.com,itnews.com.au,leftfootforward.org,news92fm.com,nfl.com,nowtoronto.com,techcareers.com,tuoitrenews.vn,wowcrunch.com##div[style=\"width:300px;height:250px;\"]\nkohit.net##div[style=\"width:300px;height:250px;background-color:#000000;\"]\nwinrumors.com##div[style=\"width:300px;height:250px;background:#c0c8ce;\"]\nysr1560.com##div[style=\"width:300px;height:250px;border:1pt #444444 solid;position:relative;left:5px;\"]\nnextpowerup.com##div[style=\"width:300px;height:250px;display:block;margin:20px auto;overflow:hidden\"]\nafterdawn.com##div[style=\"width:300px;height:250px;float:left;\"]\nhiphopdx.com##div[style=\"width:300px;height:250px;margin-bottom:20px;\"]\nanimelite.net##div[style=\"width:300px;height:250px;margin-left:35px;\"]\nraaga.com##div[style=\"width:300px;height:250px;margin-top:5px;margin-bottom:5px;\"]\ngossipcop.com##div[style=\"width:300px;height:250px;margin:0;padding:0;\"]\n961kiss.com##div[style=\"width:300px;height:250px;overflow:hidden;margin-bottom:10px;\"]\nwhatismyipaddress.com##div[style=\"width:300px;height:266px;clear:both;padding-top:0px;\"]\njudgespot.com##div[style=\"width:300px;height:270px; line-height: 18px;border-width:0px;border-style:solid;border-color:white;padding:0px; font-size: 13px;\"]\namazon.ca,amazon.co.uk,amazon.com##div[style=\"width:300px;height:280px;\"]\nextremefile.com##div[style=\"width:300px;margin-left:360px;padding-top:29px;\"]\nreelseo.com##div[style=\"width:300px;min-height:250px; margin:0 auto 12px auto;\"]\nfanpop.com##div[style=\"width:300px;min-height:250px;color:#999999;\"]\ntechsonia.com##div[style=\"width:301px;height:268px;border:1px outset blue;\"]\ntechsonia.com##div[style=\"width:301px;height:619px;border:1px outset blue;\"]\nweartv.com##div[style=\"width:303px;background-color:#336699;font-size:10px;color:#cccccc\"]\nnewsblaze.com##div[style=\"width:305px;height:250px;float:left;\"]\nhouserepairtalk.com##div[style=\"width:305px;height:251px;\"]\nwhois.net##div[style=\"width:320px; float:right; text-align:center;\"]\ntomopop.com##div[style=\"width:330px; overflow:hidden;\"]\nworldtvpc.com##div[style=\"width:336px; height:280px; padding:8px; margin:auto\"]\ngeekzone.co.nz,standardmedia.co.ke##div[style=\"width:336px; height:280px;\"]\ntheepochtimes.com##div[style=\"width:336px;float:left;margin-right:18px\"]\npcadvisor.co.uk##div[style=\"width:336px;height:214px;font-family:Arial,sans-serif;background: url(http://www.broadbandgenie.co.uk/img/hosted/PCAdvisor/bbg-bg-336x214.jpg) no-repeat;position:relative;font-family: Arial,Helvetica,sans-serif;\"]\nstabroeknews.com##div[style=\"width:336px;height:280px;\"]\nzedomax.com##div[style=\"width:336px;height:280px;float:center;\"]\nmaximumpcguides.com##div[style=\"width:336px;height:280px;margin:0 auto\"]\nauto-types.com##div[style=\"width:337px;height:280px;float:right;margin-top:5px;\"]\ntechsonia.com##div[style=\"width:337px;height:298px;border:1px outset blue;\"]\nworldwideweirdnews.com##div[style=\"width:341px; height:285px;float:left; display:inline-block\"]\nmapsofindia.com##div[style=\"width:345px;height:284px;float:left;\"]\nkeo.co.za##div[style=\"width:350px;height:250px;float:left;\"]\ncatholicworldreport.com##div[style=\"width:350px;height:275px;background:#e1e1e1;padding:25px 0px 0px 0px; margin: 10px 0;\"]\nhostcabi.net##div[style=\"width:350px;height:290px;float:left\"]\ninternet.com##div[style=\"width:350px;margin-bottom:5px;\"]\ninternet.com##div[style=\"width:350px;text-align:center;margin-bottom:5px\"]\ngamepressure.com##div[style=\"width:390px;height:300px;float:right;\"]\ntop4download.com##div[style=\"width:450px;height:205px;clear:both;\"]\nworldscreen.com##div[style=\"width:468px; height:60px; background-color:#ddd;\"]\nbfads.net##div[style=\"width:468px; height:60px; margin:0 auto 0 auto;\"]\nhiphopearly.com##div[style=\"width:468px; height:60px; margin:5px auto;\"]\nualpilotsforum.org##div[style=\"width:468px; height:60px;\"]\njwire.com.au##div[style=\"width:468px;height:60px;margin:10px 0;\"]\nindependent.com##div[style=\"width:468px;height:60px;margin:10px 35px;clear:both;padding-top:15px;border-top:1px solid #ddd;\"]\njwire.com.au##div[style=\"width:468px;height:60px;margin:10px auto;\"]\nkwongwah.com.my##div[style=\"width:468px;height:60px;text-align:center;margin-bottom:10px;\"]\nkwongwah.com.my##div[style=\"width:468px;height:60px;text-align:center;margin:20px 0 10px;\"]\nstandardmedia.co.ke##div[style=\"width:470px; height:100px; margin:20px;\"]\nsouthcoasttoday.com##div[style=\"width:48%; border:1px solid #3A6891; margin-top:20px;\"]\nlimelinx.com##div[style=\"width:480px; height:60px;\"]\nweatherbug.com##div[style=\"width:484px; height:125px; background:#FFFFFF; overflow:hidden;\"]\nreactiongifs.com##div[style=\"width:499px; background:#ffffff; margin:00px 0px 35px 180px; padding:20px 0px 20px 20px; \"]\nclassiccars.com##div[style=\"width:515px;border-style:solid;border-width:thin;border-color:transparent;padding-left:10px;padding-top:10px;padding-right:10px;padding-bottom:10px;background-color:#CFCAC4\"]\nwwitv.com##div[style=\"width:520px;height:100px\"]\ntoorgle.net##div[style=\"width:550px;margin-bottom:15px;font-family:arial,serif;font-size:10pt;\"]\nlifewithcats.tv##div[style=\"width:600px; height:300px;\"]\ntechgage.com##div[style=\"width:600px; height:74px;\"]\nchrome-hacks.net##div[style=\"width:600px;height:250px;\"]\nhiphopwired.com##div[style=\"width:639px;height:260px;margin-top:20px;\"]\ninsidemobileapps.com##div[style=\"width:648px;\"]\nwindows7download.com##div[style=\"width:680px;height:280px;clear:both;\"]\nmanilatimes.net##div[style=\"width:690px; height:90px; clear:both; margin-bottom:10px;\"]\nmailinator.com##div[style=\"width:700;height:120;text-align:left;\"]\ndirectmirror.com##div[style=\"width:700px;border: 4px solid #DDDDDD;border-radius: 4px 4px 4px 4px;padding: 10px;\"]\ndesivideonetwork.com##div[style=\"width:728px; float:left;\"]\nsurrenderat20.net##div[style=\"width:728px; height: 90px; margin: 10px auto 0px; background: #111;\"]\nuesp.net##div[style=\"width:728px; height:105px; overflow: hidden; margin-left: auto; margin-right: auto;\"]\nencyclopedia.com##div[style=\"width:728px; height:90px\"]\nqvideoshare.com##div[style=\"width:728px; height:90px; border:1px solid #DFDFDF;\"]\nmoneycontrol.com##div[style=\"width:728px; height:90px; border:solid 1px #000080;\"]\nscottishamateurfootballforum.com##div[style=\"width:728px; height:90px; display:inline-block;\"]\nbangkokpost.com##div[style=\"width:728px; height:90px; margin-left: auto; margin-right: auto;\"]\nrelationshipcolumns.com##div[style=\"width:728px; height:90px; margin-top:18px;\"]\nmustangevolution.com##div[style=\"width:728px; height:90px; margin: 0 auto;\"]\ncanadapost.ca##div[style=\"width:728px; height:90px; margin: auto; text-align: center; padding: 10px;\"]\ngta3.com,gtagarage.com,gtasanandreas.net,myanimelist.net##div[style=\"width:728px; height:90px; margin:0 auto\"]\nfas.org##div[style=\"width:728px; height:90px; margin:10px 0 20px 0;\"]\nherplaces.com##div[style=\"width:728px; height:90px; margin:12px auto;\"]\nmotionempire.me##div[style=\"width:728px; height:90px; margin:20px auto 10px; padding:0;\"]\nimgbox.com##div[style=\"width:728px; height:90px; margin:auto; margin-bottom:8px;\"]\ndodgeforum.com,hondamarketplace.com##div[style=\"width:728px; height:90px; overflow:hidden; margin:0 auto;\"]\nfreeforums.org,scottishamateurfootballforum.com##div[style=\"width:728px; height:90px; padding-bottom:20px;\"]\nalliednews.com,americustimesrecorder.com,andovertownsman.com,androidpolice.com,athensreview.com,batesvilleheraldtribune.com,bdtonline.com,boards.ie,chickashanews.com,claremoreprogress.com,cleburnetimesreview.com,clintonherald.com,commercejournal.com,commercial-news.com,cookingforengineers.com,coopercrier.com,cordeledispatch.com,corsicanadailysun.com,crossville-chronicle.com,cullmantimes.com,dailyiowegian.com,dailyitem.com,daltondailycitizen.com,derrynews.com,duncanbanner.com,eagletribune.com,edmondsun.com,effinghamdailynews.com,enewscourier.com,enidnews.com,farmtalknewspaper.com,fayettetribune.com,flyergroup.com,forzaitalianfootball.com,gainesvilleregister.com,gloucestertimes.com,goshennews.com,greensburgdailynews.com,heraldbanner.com,heraldbulletin.com,hgazette.com,homemagonline.com,itemonline.com,jacksonvilleprogress.com,joplinglobe.com,journal-times.com,journalexpress.net,kokomotribune.com,lockportjournal.com,mankatofreepress.com,mcalesternews.com,mccrearyrecord.com,mcleansborotimesleader.com,meadvilletribune.com,meridianstar.com,mineralwellsindex.com,montgomery-herald.com,mooreamerican.com,moultrieobserver.com,muskogeephoenix.com,ncnewsonline.com,newburyportnews.com,newsaegis.com,newsandtribune.com,niagara-gazette.com,njeffersonnews.com,normantranscript.com,orangeleader.com,oskaloosa.com,ottumwacourier.com,palestineherald.com,panews.com,paulsvalleydailydemocrat.com,pellachronicle.com,pharostribune.com,pressrepublican.com,pryordailytimes.com,randolphguide.com,record-eagle.com,register-herald.com,register-news.com,reporter.net,rockwallheraldbanner.com,roysecityheraldbanner.com,rushvillerepublican.com,salemnews.com,sentinel-echo.com,sharonherald.com,shelbyvilledailyunion.com,starbeacon.com,stwnewspress.com,suwanneedemocrat.com,tahlequahdailypress.com,theadanews.com,thedeadwood.co.uk,thelandonline.com,themoreheadnews.com,thesnaponline.com,tiftongazette.com,times-news.com,timesenterprise.com,timessentinel.com,timeswv.com,tonawanda-news.com,tribdem.com,tribstar.com,ualpilotsforum.org,unionrecorder.com,valdostadailytimes.com,washtimesherald.com,waurikademocrat.com,wcoutlook.com,weatherforddemocrat.com,woodwardnews.net##div[style=\"width:728px; height:90px;\"]\ntheepochtimes.com##div[style=\"width:728px; height:90px;margin:10px auto 0 auto;\"]\nthedailystar.com##div[style=\"width:728px; height:90px;position: relative; z-index: 1000 !important\"]\nhighdefjunkies.com##div[style=\"width:728px; margin:0 auto; padding-bottom:1em\"]\nimagebam.com##div[style=\"width:728px; margin:auto; margin-top:10px; margin-bottom:10px; height:90px;\"]\nkavkisfile.com##div[style=\"width:728px; text-align:center;font-family:verdana;font-size:10px;\"]\n1500espn.com##div[style=\"width:728px;display:block;margin:10px auto 10px auto;height:90px;\"]\nnet-temps.com##div[style=\"width:728px;height:100px;margin-left:auto;margin-right:auto\"]\nipernity.com##div[style=\"width:728px;height:100px;margin:0 auto;\"]\ntictacti.com##div[style=\"width:728px;height:110px;text-align:center;margin: 10px 0 20px 0; background-color: White;\"]\n1071thez.com,classichits987.com,indiana105.com,kgrt.com,pocket-lint.com,wakeradio.com,xrock1039.com##div[style=\"width:728px;height:90px\"]\nfootballfancast.com##div[style=\"width:728px;height:90px; margin: 0 auto 10px;\"]\nwxyz.com##div[style=\"width:728px;height:90px;\"]\nroxigames.com##div[style=\"width:728px;height:90px;\\a border:1px solid blue;\"]\nsualize.us##div[style=\"width:728px;height:90px;background:#bbb;margin:0 auto;\"]\ndubbedonline.co##div[style=\"width:728px;height:90px;display:block;margin-top:10px;bottom:-10px;position:relative;\"]\nvideohelp.com##div[style=\"width:728px;height:90px;margin-left: auto ; margin-right: auto ;\"]\nraaga.com##div[style=\"width:728px;height:90px;margin-top:10px;margin-bottom:10px\"]\ndelishows.com##div[style=\"width:728px;height:90px;margin:0 auto\"]\nstopmalvertising.com##div[style=\"width:728px;height:90px;margin:0 auto;padding:0;text-align:center;margin-bottom:32px;\"]\nholidayscentral.com##div[style=\"width:728px;height:90px;margin:15px auto;clear:both\"]\ncolorgirlgames.com##div[style=\"width:728px;height:90px;margin:5px auto\"]\nneatorama.com##div[style=\"width:728px;height:90px;margin:5px auto;\"]\ntechnabob.com##div[style=\"width:728px;height:90px;margin:8px 0px 16px 0px;\"]\ncolorgirlgames.com##div[style=\"width:728px;height:90px;margin:8px auto 8px\"]\nmaximumpcguides.com##div[style=\"width:728px;height:90px;position:absolute;top:-95px;left:103px;\"]\nattheraces.com##div[style=\"width:728px;height:90px;text-align:center;float:left;background-color:#EFEFEF;\"]\ninterglot.com##div[style=\"width:728px;margin-right:auto;margin-left:auto\"]\nputme.org##div[style=\"width:728px;margin:0 auto;\"]\nsolomid.net##div[style=\"width:728px;padding:5px;background:#000;margin:auto\"]\nproxynova.com##div[style=\"width:730px; height:90px;\"]\nusfinancepost.com##div[style=\"width:730px;height:95px;display:block;margin:0 auto;\"]\nmovie.to,movie4k.me,movie4k.to,movie4k.tv##div[style=\"width:742px\"] > div[style=\"min-height:170px;\"] > .moviedescription + br + a\ndawn.com##div[style=\"width:745px;height:90px;margin:auto;margin-bottom:20px;\"]\n1fichier.com##div[style=\"width:750px;height:110px;margin:auto\"]\nimagebam.com##div[style=\"width:780px; margin:auto; margin-top:10px; margin-bottom:10px; height:250px;\"]\nbrothersoft.com##div[style=\"width:795px; height:95px; float:left;text-align:center;\"]\ncurrency.me.uk##div[style=\"width:916px;border:1px solid #e1e1e1;background:#fff;padding:1px;margin-bottom:10px;\"]\nbtstorrent.so##div[style=\"width:930px;height:230px;margin:auto;\"]\ntigerdirect.ca##div[style=\"width:936px; clear:both; margin-top:2px; height:90px;\"]\nthegardenisland.com##div[style=\"width:950px; height:90px; margin:10px auto; display:block;\"]\nuploadc.com,zalaa.com##div[style=\"width:950px; padding:10px;padding-bottom:0px; \"]\njapannewsreview.com##div[style=\"width:955px;height:90px;align:auto;margin-bottom:10px;\"]\ncnbc.com##div[style=\"width:960;height:90;margin:0 0 5px 0;\"]\nspeedmonkey.net##div[style=\"width:960px;height:110px;text-align:center\"]\nthinkdigit.com##div[style=\"width:960px;height:90px;margin:10px auto\"]\nback9network.com##div[style=\"width:976px;height:120px;text-align:center;\"]\ntigerdirect.ca##div[style=\"width:977px; clear:both; margin-top:2px; height:90px;\"]\ngametracker.com##div[style=\"width:980px; height:48px; margin-bottom:5px; overflow:hidden;\"]\napphit.com##div[style=\"width:980px;height:100px;clear:both;margin:0 auto;\"]\nteleservices.mu##div[style=\"width:980px;height:50px;float:left; \"]\nperformanceboats.com##div[style=\"width:994px; height:238px;\"]\nsearch.ch##div[style=\"width:994px; height:250px\"]\nhappystreams.net##div[style=\"z-index: 2000; background-image: url(\\\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\\\"); left: 145px; top: 120px; height: 576px; width: 1024px; position: absolute;\"]\nindependent.com##div[style^=\"background-image:url('http://media.independent.com/img/ads/ads-bg.gif')\"]\nsevenforums.com##div[style^=\"border: 1px solid #94D3FE;\"]\ngamebanshee.com##div[style^=\"border:1px solid #b98027; width:300px;\"]\ninterfacelift.com##div[style^=\"clear: both; -moz-border-radius: 6px; -webkit-border-radius: 6px;\"]\nredbrick.me##div[style^=\"cursor:pointer; position: relative;width:1000px; margin: auto; height:150px; background-size:contain; \"]\niload.to##div[style^=\"display: block; width: 950px;\"]\ngoogle.com##div[style^=\"height: 16px; font: bold 12px/16px\"]\ndrakulastream.eu##div[style^=\"height: 35px; z-index: 99999\"]\nrapidvideo.tv##div[style^=\"height: 35px;\"]\nkingfiles.net##div[style^=\"height: 36px;\"]\nanimenova.tv,animetoon.tv,gogoanime.com,goodanime.eu,gooddrama.net,toonget.com##div[style^=\"left: \"]\nmonova.org##div[style^=\"padding-bottom:  \"]\nwatchonlineseries.eu##div[style^=\"padding-top:5px;float:left;\"]\n300mbmovies4u.com##div[style^=\"padding-top:5px;float:left;width:100%;\"]\ntechnabob.com##div[style^=\"padding:0px 0px \"]\neasyvideo.me,playbb.me,playpanda.net,videofun.me,videowing.me,videozoo.me##div[style^=\"position: absolute;\"]\nmp3juices.com##div[style^=\"position: fixed; width: 100%; text-align: left; height: 40px; background: none\"]\nviz.com##div[style^=\"position:absolute; width:742px; height:90px;\"]\neasyvideo.me,playbb.me,playpanda.net,video66.org,videofun.me,videowing.me,videozoo.me##div[style^=\"top: \"]\nvideo66.org##div[style^=\"width: \"]\neatliver.com##div[style^=\"width: 160px; height: 600px;\"]\nallmyvideos.net##div[style^=\"width: 315px; \"]\nsomeimage.com##div[style^=\"width: 728px; height: 90px;\"]\nkino.to##div[style^=\"width: 972px;display: inline;top: 130px;\"]\neasyvideo.me,playbb.me,playpanda.net,videofun.me,videowing.me,videozoo.me##div[style^=\"width:\"]\nsockshare.com##div[style^=\"width:302px;height:250px;\"]\nway2sms.com##div[style^=\"width:728px; height:90px;\"]\ntimelinecoverbanner.com##div[style^=\"width:728px;\"]\nwalmart.com##div[style^=\"width:740px;height:101px\"]\nurgrove.com##div[style^=\"z-index: \"] > div[style]\nputlocker.is,thevideos.tv##div[style^=\"z-index: 2000; background-image:\"]\nnowwatchtvlive.com##div[style^=\"z-index: 99999; position: fixed; width: 100%;\"]\neasyvideo.me,playbb.me,playpanda.net,videofun.me,videowing.me,videozoo.me##div[style^=\"z-index:\"]\neclipse.org##div[width=\"200\"]\nisnare.com##div[width=\"905\"]\nblackcatradio.biz##div[width=\"969\"][height=\"282\"]\nfilepuma.com##dt[style=\"height:25px; text-indent:3px; padding-top:5px;\"]\nxtremesystems.org##embed[width=\"728\"]\nopensubtitles.org##fieldset > table[style=\"width:100%;\"] > tbody > .change\nastatalk.com##fieldset[style=\"border: 1px solid #fff; margin-bottom: 15px; height: 60px; background-color: navy;\"]\nbit.com.au,pcauthority.com.au##fieldset[style=\"width:98%;border:1px solid #CCC;margin:0px;padding:0px 0px 0px 5px;\"]\ncinemablend.com##font[color=\"#737373\"]\nimgburn.com,majorgeeks.com##font[face=\"Arial\"][size=\"1\"]\nbargaineering.com##font[face=\"Verdana\"][color=\"#808080\"]\nap.org##font[size=\"1\"][color=\"#999999\"]\nrealitytvworld.com##font[size=\"1\"][color=\"gray\"]\nnufc.com##font[size=\"1\"][face=\"Verdana\"] > table[width=\"297\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"][align=\"center\"]\nzippyshare.com##font[style=\"font-size: 10px; letter-spacing: 3px; word-spacing: 2px; line-height: 18px;\"]\nzippyshare.com##font[style=\"font-size: 10px; letter-spacing: 3px; word-spacing: 2px;\"]\nlaw.com,topcultured.com##h3\nrapidog.com##h3[style=\"color:#00CC00\"]\nvirtualmedicalcentre.com##h5\nbigpond.com##h5.subheading\nindowebster.com##h6.size_1\nsketchucation.com##h6[style^=\"width:766px;height:88px;\"]\nforums.eteknix.com##hgroup[style=\"width:728px; margin:10px auto; height:90px;\"]\ndiscovermagazine.com##hr[size=\"1\"]\nbangfiles.net##iframe[height=\"210px\"]\nthepiratebay.se##iframe[height=\"60\"]\ntotallystressedout.com##iframe[height=\"600\"]\nziddu.com##iframe[height=\"80\"]\nimgbar.net##iframe[src=\"earn.php\"]\nthepiratebay.se##iframe[src^=\"//cdn2.adexprt.com/\"]\ncybergamer.com##iframe[src^=\"http://au.cybergamer.com/iframe_cgbanners.php?\"]\nbtmon.com##iframe[style=\"height: 600px; width: 160px\"]\nthestreet.com##iframe[style=\"margin-top:5px;\"]\nbizjournals.com##iframe[style=\"width: 340px; height: 165px; overflow: hidden; padding: 10px; margin: 0px; border-style: none;\"]\nhinduwebsite.com##iframe[style=\"width:320px; height:260px;\"]\nadjet.biz##iframe[style^=\" width:100%;\"]\nwiki.answers.com##iframe[width=\"160px\"]\nfrance24.com##iframe[width=\"300\"][height=\"170\"]\ntherecord.com##iframe[width=\"300\"][height=\"180\"]\nfansshare.com,shanghaidaily.com##iframe[width=\"300\"][height=\"250\"]\nwiki.answers.com##iframe[width=\"300px\"]\nmouthshut.com##iframe[width=\"336\"]\nnowwatchtvlive.com##iframe[width=\"460\"]\n1tvlive.in,ahashare.com,ziddu.com##iframe[width=\"728\"]\nwiki.answers.com##iframe[width=\"728px\"]\nshoesession.com##iframe[width=\"732\"]\ngamecopyworld.com##iframe[width=\"760\"]\nnewsbtc.com##img.aligncenter[width=\"200\"][height=\"200\"]\nthegremlin.co.za##img[alt*=\"Advertising\"]\nchroniclelive.co.uk,liverpoolecho.co.uk##img[alt*=\"sponsor\"]\nthecuttingedgenews.com##img[alt=\"Ad by The Cutting Edge News\"]\ninmr.com##img[alt=\"Ad\"]\ntechnologyreview.com,tmz.com##img[alt=\"Advertisement\"]\ntechxav.com##img[alt=\"Commercial WordPress themes\"]\njoox.net##img[alt=\"Download FLV Direct\"]\njdownloader.org##img[alt=\"Filesonic Premium Download\"]\nisohunt.to##img[alt=\"Free download\"]\nonhax.net##img[alt=\"Full Version\"]\nscriptmafia.org##img[alt=\"SM AdSpaces\"]\nsearchquotes.com##img[alt=\"Sponsored\"]\nawazfm.co.uk##img[alt=\"advert\"]\nwarezchick.com##img[border=\"0\"]\njozikids.co.za##img[height=\"140\"][width=\"140\"]\ngametrailers.com##img[height=\"15\"][width=\"300\"]\nafricandesignmagazine.com##img[height=\"226\"]\nmypbrand.com##img[height=\"250\"]\nafricandesignmagazine.com##img[height=\"300\"]\n2pass.co.uk##img[height=\"470\"]\nwarez-home.net##img[height=\"60\"][width=\"420\"]\npururin.com##img[height=\"600\"]\nafricandesignmagazine.com##img[height=\"688\"]\nabundance-and-happiness.com,professionalmuscle.com##img[height=\"90\"]\nnmap.org##img[height=\"90\"][width=\"120\"]\nairplaydirect.com,roadtester.com.au,slayradio.org##img[height=\"90\"][width=\"728\"]\nprowrestling.com##img[height=\"91\"]\nmodelhorseblab.com##img[name=\"js_ad\"]\nsporcle.com##img[src^=\"data:image/png;base64,\"]\nkino.to##img[src^=\"http://c.statcounter.com/\"] + span\ninamsoftwares.com##img[src^=\"http://my.60ads.com/\"]\nraysindex.com##img[style$=\"text-align: center; cursor: \\a \\a pointer; width: 728px;\"]\nrejournal.com##img[style=\"border-width:0px;\"]\ngrabchicago.com##img[style=\"border: 0px solid ; width: 728px; height: 90px;\"]\nthehackernews.com##img[style=\"border: 0px\"]\nthebradentontimes.com##img[style=\"border:0px;width:120px;height:300px\"]\nthebradentontimes.com##img[style=\"border:0px;width:180px;height:200px\"]\nthebradentontimes.com##img[style=\"border:0px;width:180px;height:250px\"]\nunblocked-piratebay.com##img[style=\"border:1px dotted black;\"]\nnoscript.net##img[style=\"float: left;padding: 32px 16px 8px 0; border: none\"]\nworld4free.in##img[style=\"height: 600px; width: 160px;\"]\nknco.com##img[style=\"max-width:120px;max-height:480px;\"]\nknco.com##img[style=\"max-width:180px;max-height:150px;\"]\nlinksave.in##img[style=\"max-width:468px; max-height:60px;\"]\nknco.com##img[style=\"max-width:650px;max-height:90px;\"]\nislamchannel.tv##img[style=\"vertical-align: top; width:468px; padding-left: 1px;padding-top: 5px;\"]\ncnykiss.com##img[style=\"width: 160px; height: 160px;\"]\ncbc-radio.com##img[style=\"width: 180px; float: left; height: 170px\"]\ncbc-radio.com##img[style=\"width: 180px; float: right; height: 170px\"]\ncnykiss.com,wutqfm.com##img[style=\"width: 180px; height: 180px;\"]\nwutqfm.com##img[style=\"width: 200px; height: 200px;\"]\nwcbm.com##img[style=\"width: 258px; height: 237px;\"]\nwcbm.com##img[style=\"width: 261px; height: 256px;\"]\nwbap.com##img[style=\"width: 299px; height: 85px;\"]\nespncleveland.com##img[style=\"width: 300px; height: 100px; float: left;\"]\ncountryfile.com,wmal.com##img[style=\"width: 300px; height: 150px;\"]\ndailymirror.lk,radiotoday.com.au##img[style=\"width: 300px; height: 200px;\"]\nbulletin.us.com##img[style=\"width: 300px; height: 238px;\"]\ndailymirror.lk##img[style=\"width: 300px; height: 248px;\"]\nktul.com##img[style=\"width: 300px; height: 24px; border: 0px;\"]\nindypendent.org##img[style=\"width: 300px; height: 250px; \"]\nflafnr.com,gizmochina.com##img[style=\"width: 300px; height: 250px;\"]\njq99.com##img[style=\"width: 300px; height: 75px;\"]\ndailymirror.lk##img[style=\"width: 302px; height: 202px;\"]\nozarkssportszone.com##img[style=\"width: 320px; height: 160px;\"]\npricecheck.co.za##img[style=\"width: 460px;\"]\nbulletin.us.com##img[style=\"width: 600px; height: 50px;\"]\nindypendent.org##img[style=\"width: 728px; height: 90px;\"]\nespn1420am.com##img[style=\"width: 900px; height: 150px;\"]\nunionleader.com##img[style=\"width:100px;height:38px;margin-top:-10px\"]\nglobalincidentmap.com##img[style=\"width:120px; height:600px; border:0;\"]\nthespiritsbusiness.com##img[style=\"width:170px;\"]\nnewsfirst.lk##img[style=\"width:300px; height:200px;\"]\nklfm967.co.uk##img[style=\"width:468px;height:60px;border:0px;margin:0px;\"]\nbitcoindifficulty.com##img[style=\"width:728px; height:90px;\"]\ncryptoinfinity.com##img[style=\"width:728px;height:90px;\"]\ntcweeklynews.com##img[title=\"AD: Advertising Graphics (11)\"]\nucreview.com##img[title=\"AD: Weekly Press (13)\"]\nucreview.com##img[title=\"AD: Weekly Press (14)\"]\nucreview.com##img[title=\"AD: Weekly Press (15)\"]\nonhax.net##img[title=\"Download Now\"]\ninmr.com##img[width=\"100\"][height=\"18\"]\ninmr.com##img[width=\"100\"][height=\"36\"]\ninmr.com##img[width=\"100\"][height=\"38\"]\ninmr.com##img[width=\"100\"][height=\"44\"]\ninmr.com##img[width=\"100\"][height=\"50\"]\nstaradvertiser.com##img[width=\"101\"][height=\"20\"]\nabpclub.co.uk##img[width=\"118\"]\nutahstories.com##img[width=\"120\"][height=\"120\"]\nscnsrc.net,traxarmstrong.com##img[width=\"120\"][height=\"600\"]\namericanisraelite.com,dailyblogtips.com,macintouch.com,utahstories.com,your-pagerank.com##img[width=\"125\"][height=\"125\"]\nsamoaobserver.ws##img[width=\"130\"][height=\"300\"]\nreflector.com##img[width=\"130px\"][height=\"52px\"]\nthefinancialexpress-bd.com##img[width=\"145\"]\naerobaticsweb.org##img[width=\"150\"][height=\"150\"]\nzonalmarking.net##img[width=\"150\"][height=\"750\"]\nklfm967.co.uk##img[width=\"155\"][height=\"167\"]\nklfm967.co.uk##img[width=\"155\"][height=\"192\"]\npalipost.com##img[width=\"160\"][height=\"100\"]\nyour-pagerank.com##img[width=\"160\"][height=\"108\"]\nradiocaroline.co.uk,yournews.com##img[width=\"160\"][height=\"160\"]\nzonalmarking.net##img[width=\"160\"][height=\"300\"]\nnewswireni.com##img[width=\"160\"][height=\"596\"]\nairplaydirect.com,ata.org,candofinance.com,newswireni.com,serialbay.com,temulator.com,windfm.com##img[width=\"160\"][height=\"600\"]\nyour-pagerank.com##img[width=\"160\"][height=\"80\"]\nyour-pagerank.com##img[width=\"160\"][height=\"89\"]\nyour-pagerank.com##img[width=\"160\"][height=\"90\"]\nnewswireni.com##img[width=\"161\"][height=\"600\"]\nbilingualweekly.com##img[width=\"162\"][height=\"170\"]\nunionleader.com##img[width=\"165\"][height=\"40\"]\nsunny106.fm,tompkinsweekly.com,wutqfm.com##img[width=\"180\"]\nwegoted.com,wyep.org##img[width=\"180\"][height=\"150\"]\nwegoted.com##img[width=\"180\"][height=\"204\"]\nwrno.com##img[width=\"185\"][height=\"60\"]\nfavicon.co.uk##img[width=\"190\"][height=\"380\"]\nbayfm.co.za##img[width=\"195\"][height=\"195\"]\nrejournal.com##img[width=\"200\"][height=\"100\"]\nsarasotatalkradio.com##img[width=\"200\"][height=\"200\"]\ncoffeegeek.com##img[width=\"200\"][height=\"250\"]\nprofessionalmuscle.com##img[width=\"201\"]\nbayfm.co.za##img[width=\"208\"][height=\"267\"]\nbayfm.co.za##img[width=\"208\"][height=\"301\"]\nbayfm.co.za##img[width=\"208\"][height=\"319\"]\nprofessionalmuscle.com##img[width=\"210\"]\nkhow.com##img[width=\"216\"][height=\"156\"]\nthisdaylive.com##img[width=\"220\"][height=\"147\"]\nisportconnect.com##img[width=\"220\"][height=\"150\"]\nisportconnect.com##img[width=\"220\"][height=\"200\"]\nisportconnect.com##img[width=\"220\"][height=\"300\"]\naroundhawaii.com##img[width=\"220\"][height=\"60\"]\nnufc.com##img[width=\"226\"][height=\"58\"]\naroundhawaii.com##img[width=\"230\"][height=\"150\"]\nislamchannel.tv##img[width=\"230\"][height=\"185\"]\nmlfat4arab.com##img[width=\"234\"][height=\"60\"]\nmommymatters.co.za##img[width=\"249\"][height=\"250\"]\nphillyrecord.com##img[width=\"250\"][height=\"218\"]\nmommymatters.co.za##img[width=\"250\"][height=\"250\"]\nukclimbing.com##img[width=\"250\"][height=\"350\"]\nyournews.com##img[width=\"250\"][height=\"90\"]\ntompkinsweekly.com##img[width=\"252\"]\ntheannouncer.co.za##img[width=\"252\"][height=\"100\"]\ntompkinsweekly.com##img[width=\"253\"]\nozarkssportszone.com##img[width=\"267\"][height=\"294\"]\nwrko.com##img[width=\"269\"][height=\"150\"]\nthreatpost.com##img[width=\"270\"]\nmagicmiami.com##img[width=\"273\"][height=\"620\"]\nstaugustine.com##img[width=\"275\"][height=\"75\"]\nworldfree4u.com##img[width=\"280\"][height=\"250\"]\nwwl.com##img[width=\"281\"][height=\"141\"]\nstaugustine.com##img[width=\"285\"][height=\"75\"]\nnufc.com##img[width=\"287\"][height=\"287\"]\nnufc.com##img[width=\"288\"][height=\"347\"]\nmypbrand.com##img[width=\"295\"]\nwareznova.com##img[width=\"298\"][height=\"53\"]\ninquirer.net##img[width=\"298\"][style=\"margin-bottom:5px;margin-top:5px;\"]\nafricandesignmagazine.com,punchng.com,technomag.co.zw##img[width=\"300\"]\nmomsmiami.com,nehandaradio.com##img[width=\"300\"][height=\"100\"]\nfancystreems.com##img[width=\"300\"][height=\"150\"]\n947wls.com##img[width=\"300\"][height=\"155\"]\nbusinessdayonline.com##img[width=\"300\"][height=\"200\"]\nredpepper.co.ug##img[width=\"300\"][height=\"248\"]\n360nobs.com,airplaydirect.com,businessdayonline.com,ciibroadcasting.com,clutchmagonline.com,cryptomining-blog.com,dotsauce.com,fancystreems.com,movin100.com,mycolumbuspower.com,nehandaradio.com,redpepper.co.ug,rlslog.net,sacobserver.com,samoatimes.co.nz,seguintoday.com,staugustine.com,tangatawhenua.com,theannouncer.co.za,three.fm,wolf1051.com,ynaija.com,yomzansi.com##img[width=\"300\"][height=\"250\"]\nynaija.com##img[width=\"300\"][height=\"290\"]\nlinkbitty.com,newspapers-online.com##img[width=\"300\"][height=\"300\"]\nredpepper.co.ug##img[width=\"300\"][height=\"360\"]\nredpepper.co.ug##img[width=\"300\"][height=\"420\"]\nredpepper.co.ug##img[width=\"300\"][height=\"500\"]\nredpepper.co.ug##img[width=\"300\"][height=\"528\"]\nclutchmagonline.com##img[width=\"300\"][height=\"600\"]\nwallstreetsurvivor.com##img[width=\"310\"][height=\"56\"]\nwben.com##img[width=\"316\"][height=\"120\"]\nciibroadcasting.com##img[width=\"325\"][height=\"200\"]\nradioasiafm.com##img[width=\"350\"][height=\"300\"]\nipwatchdog.com##img[width=\"350px\"][height=\"250px\"]\nnoordnuus.co.za##img[width=\"357\"][height=\"96\"]\nnufc.com##img[width=\"360\"][height=\"100\"]\ntransportxtra.com##img[width=\"373\"][height=\"200\"]\ntransportxtra.com##img[width=\"373\"][height=\"250\"]\nforum.blackhairmedia.com##img[width=\"400\"][height=\"82\"]\ngomlab.com##img[width=\"410\"][height=\"80\"]\nsunnewsonline.com##img[width=\"420\"][height=\"55\"]\ndrum.co.za##img[width=\"422\"][height=\"565\"]\npowerbot.org##img[width=\"428\"]\ninmr.com##img[width=\"450\"][height=\"64\"]\nwebresourcesdepot.com##img[width=\"452px\"][height=\"60px\"]\nmaltairport.com##img[width=\"453\"][height=\"115\"]\nch131.so##img[width=\"460\"][height=\"228\"]\n300mbmovies4u.com,chat-avenue.com,hollywoodbackwash.com,macintouch.com,muzique.com,wareznova.com##img[width=\"468\"]\nabpclub.co.uk,allforpeace.org,cpaelites.com,forum.gsmhosting.com,hulkload.com,load.to,rlslog.net,thetobagonews.com,warezhaven.org,waz-warez.org##img[width=\"468\"][height=\"60\"]\ntopprepperwebsites.com##img[width=\"468\"][height=\"80\"]\ninfinitecourses.com##img[width=\"468px\"][height=\"60px\"]\nsharktankblog.com##img[width=\"485\"][height=\"60\"]\nyournews.com##img[width=\"540\"][height=\"70\"]\nsunny106.fm##img[width=\"560\"][height=\"69\"]\nsunny106.fm##img[width=\"570\"][height=\"131\"]\nstaugustine.com##img[width=\"590\"][height=\"200\"]\nisportconnect.com##img[width=\"590\"][height=\"67\"]\nmail.macmillan.com,motortrader.com.my##img[width=\"600\"]\nredpepper.co.ug##img[width=\"600\"][height=\"117\"]\nnufc.com##img[width=\"600\"][height=\"85\"]\nsoftpedia.com##img[width=\"600\"][height=\"90\"]\nbloombergtvafrica.com##img[width=\"628\"][height=\"78\"]\nradiotoday.co.uk##img[width=\"630\"][height=\"120\"]\nshanghaiist.com##img[width=\"640\"][height=\"444\"]\nmotortrader.com.my##img[width=\"640\"][height=\"80\"]\ncryptothrift.com##img[width=\"700\"]\n1550wdlr.com##img[width=\"711\"][height=\"98\"]\ncrackingforum.com##img[width=\"720\"]\nbusinessdayonline.com,ch131.so##img[width=\"720\"][height=\"90\"]\nwharf.co.uk##img[width=\"720px\"][height=\"90px\"]\nlindaikeji.blogspot.com,livemixtapes.com,naija247news.com,powerbot.org,rsvlts.com,xtremesystems.org##img[width=\"728\"]\n9tools.org,add-anime.net,bodyboardingmovies.com,creditboards.com,dogepay.com,driverguide.com,ecostream.tv,freeforums.org,hulkload.com,imgbar.net,movin100.com,oldiesradio1050.com,radioinsight.com,sameip.org,tangatawhenua.com,thecsuite.co.uk,topprepperwebsites.com,wallstreetfool.com,warezlobby.org,wcfx.com,wolf1051.com,worldfree4u.com,wsoyam.com##img[width=\"728\"][height=\"90\"]\nmkfm.com##img[width=\"75\"][height=\"75\"]\ntelecomtiger.com##img[width=\"768\"][height=\"80\"]\namericanisraelite.com##img[width=\"778\"][height=\"114\"]\nmyretrotv.com##img[width=\"875\"][height=\"110\"]\nwaz-warez.org##img[width=\"88\"][height=\"31\"]\nptf.com##img[width=\"91\"][height=\"13\"]\nbilingualweekly.com##img[width=\"960\"][height=\"70\"]\nplayer.stv.tv##img[width=\"960px\"][height=\"32px\"]\nstaugustine.com##img[width=\"970\"][height=\"90\"]\nlockerz.com##img[width=\"980\"][height=\"60\"]\nmoneycontrol.com##img[width=\"996\"][height=\"169\"]\nvodu.ch##input[onclick^=\"parent.location='http://d2.zedo.com/\"]\nvodu.ch##input[onclick^=\"parent.location='http://imads.integral-marketing.com/\"]\ntorrentcrazy.com##input[onclick^=\"window.open('http://adtransfer.net/\"]\nonhax.net##input[type=\"button\"][value^=\"Download\"]\nbittorrent.am##input[value=\"Anonymous Download\"]\nad2links.com##input[value=\"Download Now\"]\nwareznova.com##input[value=\"Download from DLP\"]\nbittorrent.am##input[value=\"Download x10 faster\"]\nlix.in##input[value=\"Download\"]\nwareznova.com##input[value=\"Start Premium Downloader\"]\nmonova.org##input[value=\"Usenet\"]\npolitics.ie##ins[style=\"display:inline-table;border:none;height:250px;margin:0;padding:0;position:relative;visibility:visible;width:300px;background-color:transparent\"]\ntimesofisrael.com##item-spotlight\nyahoo.com##li[data-ad-enhanced=\"card\"]\nyahoo.com##li[data-ad-enhanced=\"pencil\"]\nyahoo.com##li[data-ad-enhanced=\"text\"]\nwebgurubb.com##li[data-author=\"Ads Master\"]\nyahoo.com##li[data-beacon^=\"https://beap.adss.yahoo.com/\"]\nyahoo.com##li[data-beacon^=\"https://beap.gemini.yahoo.com/\"]\nyahoo.com##li[id^=\"ad-\"]\nthefinancialbrand.com##li[id^=\"banner\"]\nsearch.yahoo.com##li[id^=\"yui_\"] > div[data-bns][data-bk][style=\"cursor: pointer;\"] > div[class]\ntwitter.com##li[label=\"promoted\"]\nmoneylife.in##li[style=\" font-family:tahoma; font-size:11px; margin: 0px; border-bottom: 0px solid #ddd; padding: 5px 5px;\"]\nebayclassifieds.com##li[style=\"padding: 10px 0px; min-height: 90px;\"]\nwebmastertalkforums.com##li[style=\"width: 100%; height: 100px !important;\"]\ncynagames.com##li[style=\"width: 25%; margin: 0; clear: none; padding: 0; float: left; display: block;\"]\npsfk.com##li[style=\"width:300px; height:250px; margin-left: auto; margin-right:auto;\"]\nbittorrent.am##noindex\nfeatve.com##object + script + div[class]\nstream4.tv##object[id^=\"stream\"] + script + div[class]\nbitcoinfees.com##p > span[style=\"color:#aaaaaa; font-size:8pt;\"]\ncaclubindia.com##p[style=\"border: 1px black solid; width: 300px; height: 250px\"]\ncaclubindia.com##p[style=\"border:1px black solid;width:300px;height:100px\"]\necommercetimes.com,linuxinsider.com,macnewsworld.com,technewsworld.com##p[style=\"clear: left;padding: 5px;border-top: solid 1px #cbcbcb;border-bottom: solid 1px #cbcbcb;\"]\nc9tk.com##p[style=\"clear:both; padding:10px 5px 5px 5px; text-align:center;\"]\ntweaktown.com##p[style=\"float:left;margin-right:10px\"]\ndiffen.com##p[style=\"float:right;width:340px;height:290px;padding:0;margin:0 0 0 15px;border:1px solid #DDD\"]\nfutureofcapitalism.com##p[style=\"font-size:11px; margin:0 0 2px 0; color:gray; text-align:center; letter-spacing:2px;\"]\nlyricsmania.com##p[style=\"font-size:14px; text-align:center;\"]\nhistory.ca##p[style=\"height:15px;\"]\nmidtownlunch.com##p[style=\"padding-bottom:295px\"]\ntruthdig.com##p[style=\"text-align: center; font-size: small;\"]\ntalkarcades.com##p[style=\"text-align: center; font-weight: bold; font-size: 150%;\"]\npcsx2.net##p[style=\"text-align: center;margin: 0px 160px -10px 0px;\"]\nsorelatable.com##script + a[target=\"_blank\"]\nservice.mail.com##script + div[tabindex=\"1\"] div[style=\"z-index:99996;position:absolute;cursor:default;background-color:white;opacity:0.95;left:0px;top:0px;width:1600px;height:552px;\"]\nservice.mail.com##script + div[tabindex=\"1\"] div[style^=\"z-index:99998;position:absolute;cursor:default;left:0px;top:0px;width:\"]\nkoreaherald.com##section[style=\"border:0px;width:670px;height:200px;\"]\nelitistjerks.com##small\nrokked.com##span[style=\"color: #555; font-size: 10px\"]\ntoucharcade.com##span[style=\"color:#555;\"]\nbitsnoop.com##span[style=\"color:#AAA;font-size:9px;\"]\nsiteslike.com##span[style=\"display: block; height: 180px; margin-top: -1em;\"]\nsiteslike.com##span[style=\"display: block; height: 181px; margin-top: -1em;\"]\nforum.ihubhost.net##span[style=\"font-family:arial,helvetica,sans-serif;\"]\nwashingtonmonthly.com##span[style=\"font-size:12px\"]\nopenwith.org##span[style=\"font-size:12px;\"]\niwannawatch.net##span[style=\"font-size:12px;margin-left:100px;\"]\nlyricsmania.com##span[style=\"font-size:14px;\"]\nliveleak.com##span[style=\"font-size:9px; font-weight:bold;\"]\ntechzilo.com##span[style=\"font-weight: 400; color: #888; font-size: 10px\"]\neurocardsharing.com,physicsforums.com##span[style=\"margin: 2px; float: left; width: 301px; height: 251px;\"]\nwindowsbbs.com##span[style=\"margin: 2px; float: left; width: 337px; height: 281px;\"]\nthisoldhouse.com,whatismyip.com##span[style=\"margin: 2px; float: right; width: 301px; height: 251px;\"]\nvidbux.com,vidxden.com##span[style=\"text-align:center; font-size: 10px\"]\nforbes.com##span[style=\"text-transform:upercase;font-size:10px;color:999999;\"]\nvideobash.com##span[style=\"vertical-align: bottom; width: 300px; height: 241px;\"]\naninews.in##span[style=\"vertical-align: bottom; width: 302px; height: 270px;\"]\nbitcointalk.org##span[style^=\"display:inline-block; width:700px\"]\nsythe.org##table[align=\"center\"][cellpadding=\"0\"][style=\"width:1220px;\"]\nforum.blackhairmedia.com##table[align=\"center\"][style=\"padding-left:10px\"] > tbody > tr > td[width=\"120\"][valign=\"top\"]:first-child\nforum.blackhairmedia.com##table[align=\"center\"][style=\"padding-left:10px\"] > tbody > tr > td[width=\"120\"][valign=\"top\"]:first-child + td[width=\"100%\"][valign=\"top\"] + td[width=\"120\"][valign=\"top\"]:last-child\ntorrentportal.com##table[align=\"center\"][width=\"800\"]\nlearninginfo.org##table[align=\"left\"][width=\"346\"]\njapantimes.co.jp##table[align=\"right\"][width=\"250\"]\n411mania.com##table[align=\"right\"][width=\"300\"]\nofficegamespot.com##table[bgcolor=\"#CCCCCC\"]\n4megaupload.com,ineedfile2.com##table[bgcolor=\"#D8D8D0\"]\ngeology.com##table[bgcolor=\"#cccccc\"]\nwebworldindex.com##table[bgcolor=\"#ceddf0\"]\nsearch.vmn.net##table[bgcolor=\"#ecf5fa\"]\nwwitv.com##table[bgcolor=\"222222\"]\nbiz.yahoo.com##table[bgcolor=\"white\"][width=\"100%\"]\nrealitytvworld.com##table[border=\"0\"][align=\"left\"]\nmdpub.com##table[border=\"0\"][align=\"top\"][style=\"border: 1px red solid; \"]\nomg-facts.com##table[border=\"0\"][width=\"330px\"][height=\"270px\"]\nsoftexia.com##table[border=\"0\"][width=\"728\"][align=\"center\"]\nshopping.net##table[border=\"1\"][width=\"580\"]\nmajorgeeks.com##table[cellpadding=\"3\"][align=\"center\"]\nanimecrave.com##table[cellpadding=\"3\"][bgcolor=\"#F4F4F4\"]\ndigitimes.com##table[cellpadding=\"4\"][bgcolor=\"#000000\"]\npcstats.com##table[cellpadding=\"5\"][width=\"866\"]\ntalkgold.com##table[cellpadding=\"7\"][align=\"center\"]\nroadtester.com.au##table[cellpadding=\"9\"][border=\"0\"]\nchinapost.com.tw##table[cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"][width=\"300\"]\niwebtool.com##table[cellspacing=\"0\"][cellpadding=\"0\"][border=\"1\"]\nxtremedotnettalk.com##table[cellspacing=\"0\"][cellpadding=\"5\"][border=\"0\"][width=\"100%\"][style=\"background:#ffffff; margin:10px;padding:10px;\"]:last-child\nchinapost.com.tw##table[cellspacing=\"1\"][cellpadding=\"1\"][bgcolor=\"#DD0000\"][width=\"120\"]\nrapidlibrary.com##table[cellspacing=\"1\"][cellpadding=\"3\"][border=\"0\"][width=\"98%\"]\ntdpri.com##table[cellspacing=\"2\"][width=\"860\"]\ndl4all.com##table[cellspacing=\"5\"][background=\"#FFFFFF\"]\ngoal.com##table[cellspacing=\"5\"][cellpadding=\"5\"][style=\"float: right; width: 300px;\"]\nps3news.com##table[cellspacing=\"5px\"]\nhotonlinenews.com,skyandtelescope.com##table[height=\"100\"]\ndaijiworld.com##table[height=\"100%\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"][width=\"150\"][style=\"border-left: 1px solid #000000\"]\nplaykidsgames.com##table[height=\"105\"]\nairlinequality.com##table[height=\"110\"][width=\"740\"]\nempireonline.com##table[height=\"130\"]\ndll-free-download.org##table[height=\"145\"][width=\"789\"]\nimpulsegamer.com##table[height=\"200\"][width=\"350\"]\nfoodnews.co.nz##table[height=\"217\"]\njapantimes.co.jp##table[height=\"250\"][width=\"250\"]\ntimesnewsline.com##table[height=\"250\"][width=\"300\"]\ntheboxotruth.com##table[height=\"252\"][bgcolor=\"#ffffff\"][width=\"748\"]\nwchstv.com##table[height=\"252\"][width=\"320\"]\ndenimology.com##table[height=\"254\"]\ntyrashow.warnerbros.com,wifinetnews.com##table[height=\"260\"][width=\"310\"]\nbitrebels.com##table[height=\"262\"]\nairlinequality.com##table[height=\"270\"][width=\"320\"]\ni-tk.com##table[height=\"280\"][width=\"180\"]\nlyngsat-logo.com##table[height=\"320\"]\ntheboxotruth.com##table[height=\"33\"][bgcolor=\"#ffffff\"][width=\"760\"]\nabundance-and-happiness.com##table[height=\"339\"]\nofficegamespot.com,ohgizmo.com,usconstitution.net##table[height=\"600\"]\nsoftpanorama.org##table[height=\"620\"]\npublichd.eu##table[height=\"75\"][align=\"center\"]\ncurezone.com##table[height=\"80\"][cellpadding=\"7\"]\ncar.com##table[height=\"90\"][width=\"100%\"]\nworldairportawards.com##table[height=\"90\"][width=\"728\"]\nindiaglitz.com##table[height=\"90\"][width=\"740\"]\ntheboxotruth.com##table[height=\"90\"][width=\"748\"]\nbillboard.biz##table[height=\"90px\"][bgcolor=\"#CCCCCC\"]\nworldairlineawards.com##table[height=\"95\"][width=\"740\"]\nlegendarydevils.com##table[multilinks-noscroll=\"true\"]\nthedailysheeple.com##table[style=\"background-color:#fdf1ca;\"]\njeepforum.com##table[style=\"border-width: 1px; border-color: gray; border-style: solid;\"]\nmonova.org##table[style=\"border: 1px solid #ccc; width: 85%; height: 250px;\"]\nngohq.com##table[style=\"border:1px solid #b2b2b2; width:153px; height:600px;\"]\ndlsdownload.com##table[style=\"border:3px outset red;font-size:16px;background-color:#fdfcf0;margin-bottom:10px\"]\nsina.com##table[style=\"margin-bottom:10px;border:0px solid #ddd;text-align:center;width:900px;height:100px;\"]\ntower.com##table[style=\"margin-top:10px;\"]\nrapid-search-engine.com##table[style=\"margin-top:5px;padding-top:10px;width:100%;background-color:#F5F8FE\"]\nsharedir.com##table[style=\"margin:15px 0 0 -8px;width:540px\"]\nbitsnoop.com##table[style=\"margin:6px 0 16px 0;padding:0px;\"]\ni3investor.com##table[style=\"padding:8px;border:6px solid #dbdbdb;min-width:228px\"]\naniscartujo.com##table[style=\"position:absolute; left:0; top:0; z-index:999; border-collapse:collapse\"]\nlocalstore.co.za##table[style=\"width: 952px; height: 90px; padding: 10px; border: 0; margin: 0 auto;\"]\nplaykidsgames.com##table[style=\"width:100%;height:105px;border-style:none;\"]\ntower.com##table[style=\"width:160px; height:600px;padding:0px; margin:0px\"]\nplaykidsgames.com##table[style=\"width:320px;height:219px;border-style:none;background-color:#333333;margin:0 auto;\"]\ntower.com##table[style=\"width:592px; height:200px;padding:0px; margin:0px\"]\ntower.com##table[style=\"width:592px; height:65px;padding:0px; margin:0px\"]\nwebsite.informer.com##table[style=\"width:728px\"]\nmoneyearningforum.com##table[style=\"width:945px;text-align:center\"]\nhotelnewsnow.com##table[style=\"width:970px;margin:0 auto;padding-bottom:10px;padding-top:10px;border-collapse:separate;border-spacing:0px;\"]\nnufc.com##table[title=\"Ford Direct - Used Cars Backed by Ford\"]\nchiff.com##table[title=\"Sponsored Links\"]\ntrucknetuk.com##table[width=\"100%\"][bgcolor=\"#cecbce\"] > tbody > tr > #sidebarright[valign=\"top\"]:last-child\nlinkreferral.com##table[width=\"100%\"][height=\"1\"] + table[width=\"750\"][border=\"0\"][bgcolor=\"ffffff\"][cellspacing=\"0\"][cellpadding=\"4\"]\nwvtlfm.com##table[width=\"1024\"][height=\"100\"]\natimes.com##table[width=\"120\"]\ntvsite.co.za##table[width=\"120\"][height=\"600\"]\nthephuketnews.com##table[width=\"1215\"][bgcolor=\"#DDDDDD\"]\naquariumfish.net##table[width=\"126\"][height=\"600\"]\nchinadaily.com.cn##table[width=\"130\"][height=\"130\"]\nsermonaudio.com##table[width=\"152\"][bgcolor=\"C8D6C9\"]\nafrol.com##table[width=\"159\"][height=\"70\"]\ncurezone.com,ziddu.com##table[width=\"160\"]\ntheboxotruth.com##table[width=\"162\"]\naudiforums.com##table[width=\"170\"]\ncurezone.com##table[width=\"180\"]\nflipline.com##table[width=\"180\"][height=\"100%\"]\narticlebiz.com##table[width=\"200\"][height=\"200\"]\nnews.excite.com##table[width=\"210\"]\nexcite.com,myway.com##table[width=\"210\"][height=\"199\"]\narticletrader.com,asiansexgazette.com,thestandard.com.hk##table[width=\"250\"]\nfont-cat.com##table[width=\"254\"]\nfoodnews.co.nz##table[width=\"270\"]\nastrocenter.com,iloveuquotes.com,kanoodle.com,sextails.com,tennis.com,wwitv.com##table[width=\"300\"]\npcstats.com##table[width=\"300\"][align=\"right\"]\nhighdefdigest.com##table[width=\"300\"][cellspacing=\"0\"][cellpadding=\"0\"]\nbusiness-standard.com,familyfun.go.com,idlebrain.com,itnewsonline.com,itweb.co.za,macsurfer.com,omgblog.com,themoviespoiler.com,ultimate-guitar.com##table[width=\"300\"][height=\"250\"]\nmissoulian.com##table[width=\"300px\"][height=\"487\"]\nnotdoppler.com##table[width=\"312\"][height=\"252\"]\ngarfield.com##table[width=\"332\"]\nidlebrain.com,lanewsmonitor.com,stickyminds.com,themoviespoiler.com##table[width=\"336\"]\niloveuquotes.com##table[width=\"350\"]\ncameralabs.com##table[width=\"350\"][align=\"right\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"]\nflmsdown.net##table[width=\"435\"][bgcolor=\"#575e57\"]\naquariumfish.net##table[width=\"440\"][height=\"330\"]\nfredericknewspost.com,geology.com,jeepforum.com,talkgold.com##table[width=\"468\"]\nairlinequality.com##table[width=\"470\"]\nworldtimezone.com##table[width=\"472\"][border=\"0\"][bgcolor=\"ffffff\"]\nstampnews.com##table[width=\"482\"][cellspacing=\"1\"][cellpadding=\"0\"]\ngardenstateapartments.com##table[width=\"486\"]\nbusiness-standard.com##table[width=\"490\"][height=\"250\"]\nabundance-and-happiness.com##table[width=\"500\"]\nchristiansunite.com##table[width=\"597\"]\nlowellsun.com##table[width=\"599\"]\nthegrumpiest.com##table[width=\"600\"]\nanimaltales.info##table[width=\"610\"]\nimageporter.com,imgspice.com,pixroute.com##table[width=\"610\"][height=\"260\"]\nblingcheese.com##table[width=\"620\"]\nrainbowdressup.com##table[width=\"620\"][height=\"250\"]\nscoop.co.nz##table[width=\"640\"][height=\"254\"]\nkingfiles.net##table[width=\"650px\"]\ntvseriesfinale.com##table[width=\"658\"]\nproaudioreview.com,rwonline.com,televisionbroadcast.com,tvtechnology.com,videography.com##table[width=\"665\"]\ntechlearning.com##table[width=\"665\"][align=\"center\"]\n911tabs.com,airlinequality.com,animalcrossingcommunity.com,asiaone.com,craftster.org,dreamteammoney.com,forums.wirelessadvisor.com,jobsearch.monsterindia.com,jokes2go.com,linuxgizmos.com,talkgold.com##table[width=\"728\"]\nmonsterindia.com##table[width=\"728\"][align=\"center\"]\nsoftexia.com##table[width=\"728\"][bordercolor=\"#003366\"]\nserialbay.com##table[width=\"728\"][cellspacing=\"0\"][cellpadding=\"0\"]\noteupload.com##table[width=\"728\"][height=\"430\"]\napanews.net,geekmontage.com,iphpbb3.com,silentera.com,webworldindex.com##table[width=\"728\"][height=\"90\"]\nknowfree.net##table[width=\"728px\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"]\nmonsterindia.com##table[width=\"730\"][align=\"left\"]\nfont-cat.com##table[width=\"732\"]\nairlinequality.com##table[width=\"736\"]\nlearnaboutmovieposters.com##table[width=\"744\"][border=\"2\"][bgcolor=\"#000000\"][align=\"center\"]\ngpdownloads.co.nz##table[width=\"760\"][height=\"120\"]\nsharedata.co.za##table[width=\"760\"][height=\"60\"]\ninquirer.net##table[width=\"780\"][height=\"90\"]\nasciiribbon.org,worldometers.info##table[width=\"800\"]\nblackstarnews.com##table[width=\"800\"][height=\"110\"]\nblackstarnews.com##table[width=\"800\"][height=\"130\"]\ntotallystressedout.com##table[width=\"800\"][height=\"90\"]\ng35driver.com##table[width=\"867\"]\ncurezone.com,curezone.org##table[width=\"88%\"][height=\"10\"]\nforums.syfy.com##table[width=\"900\"][bgcolor=\"#3A3163\"]\naaroads.com##table[width=\"900\"][height=\"110\"]\nksub590.com,newstalk890.com##table[width=\"910\"][height=\"100\"]\nasiaone.com##table[width=\"924\"]\nnewreviewsite.com##table[width=\"940\"][height=\"60\"]\npsl.co.za##table[width=\"952\"][height=\"115\"]\npsl.co.za##table[width=\"952\"][height=\"64\"]\npsl.co.za##table[width=\"952\"][height=\"87\"]\njapan-guide.com##table[width=\"965\"][height=\"90\"]\nscvnews.com##table[width=\"978\"][height=\"76\"]\nprowrestling.net##table[width=\"979\"][height=\"105\"]\ndining-out.co.za##table[width=\"980\"][vspace=\"0\"][hspace=\"0\"]\nwestportnow.com##table[width=\"981\"]\nkool.fm##table[width=\"983\"][height=\"100\"]\ngamecopyworld.com##table[width=\"984\"][height=\"90\"]\napanews.net##table[width=\"990\"]\ncnykiss.com,wbkvam.com,wutqfm.com##table[width=\"990\"][height=\"100\"]\ncbc-radio.com##table[width=\"990\"][height=\"100\"][align=\"center\"]\n965ksom.com##table[width=\"990\"][height=\"101\"]\nwbrn.com##table[width=\"990\"][height=\"98\"]\nv8x.com.au##td[align=\"RIGHT\"][width=\"50%\"][valign=\"BOTTOM\"]\ncanmag.com##td[align=\"center\"][height=\"278\"]\nautosport.com##td[align=\"center\"][valign=\"top\"][height=\"266\"][bgcolor=\"#dcdcdc\"]\ncoffeegeek.com##td[align=\"center\"][width=\"100%\"][valign=\"middle\"]\nforums.battle.net##td[align=\"center\"][width=\"130\"]\nrapidog.com##td[align=\"left\"][colspan=\"3\"]\nthegrumpiest.com##td[align=\"left\"][width=\"135px\"]\nthegrumpiest.com##td[align=\"left\"][width=\"135px\"] + #table1\nteenhut.net,whistlestopper.com##td[align=\"left\"][width=\"160\"][valign=\"top\"]\nhealthboards.com##td[align=\"left\"][width=\"300\"]:first-child\nnotdoppler.com##td[background*=\"/img/topad_\"]\n959kissfm.com##td[background=\"/i/banner_back.jpg\"]\ncrackdb.cd##td[background=\"/img/tittel.gif\"]:first-child > h1:first-child + h1:last-child\nvgcats.com##td[background=\"images/towerbanner.gif\"]\nvgcats.com##td[background=\"images/widebanner.gif\"]\nplanetlotus.org##td[bgcolor=\"#BCCEDC\"][align=\"center\"][colspan=\"6\"]\nplanetlotus.org##td[bgcolor=\"#FFFFFF\"][align=\"center\"][colspan=\"6\"]\nstickyminds.com##td[bgcolor=\"#acbcde\"][width=\"100%\"]\nappleinsider.com##td[bgcolor=\"#f5f5f5\"]\nixquick.com##td[bgcolor=\"#f7f9ff\"]\nixquick.com##td[bgcolor=\"#fbf0fa\"]\nlyrics007.com##td[bgcolor=\"#ffcc00\"][width=\"770\"][height=\"110\"]\ntheboxotruth.com##td[bgcolor=\"#ffffff\"][width=\"302\"]\npuretna.com##td[class=\"colhead\"][width=\"241\"]\ntitanshare.to,titantorrent.to##td[class^=\"downloadformat\"] > a[onclick]:first-child:last-child\nexpress.co.uk##td[colspan=\"2\"]\nschlockmercenary.com##td[colspan=\"3\"]\nbtmon.com##td[colspan=\"4\"]\nytmnd.com##td[colspan=\"5\"]\naffiliatescout.com,freewarefiles.com,mysavings.com,techarp.com##td[height=\"100\"]\nnotdoppler.com##td[height=\"100\"][rowspan=\"3\"]\neverythinggirl.com,extremeoverclocking.com##td[height=\"104\"]\nefytimes.com##td[height=\"108\"]\ndesignboom.com,indianetzone.com##td[height=\"110\"]\nlowyat.net,ultimatemetal.com##td[height=\"110px\"]\nusautoparts.net##td[height=\"111\"][align=\"center\"][valign=\"top\"]\naspfree.com,devarticles.com,devshed.com##td[height=\"115\"]\nbittorrent.am##td[height=\"120\"][align=\"center\"]\nofficegamespot.com##td[height=\"120\"][bgcolor=\"#FFFFFF\"]\n1980-games.com##td[height=\"129\"][colspan=\"4\"]\nultimate-guitar.com##td[height=\"130\"]\neurometeo.com##td[height=\"14\"][width=\"738\"]\neve-search.com##td[height=\"150\"]\nautosport.com##td[height=\"17\"]\nvideohelp.com##td[height=\"200\"]\nwrestlingnewsworld.com##td[height=\"204\"]\ncoolifiedgames.com,coolmath.com,elouai.com,spikesgamezone.com##td[height=\"250\"]\nmaxgames.com##td[height=\"250\"][bgcolor=\"#fff\"]\nvectorportal.com##td[height=\"250\"][colspan=\"3\"]\nhonda-tech.com,tennis.com##td[height=\"250\"][width=\"300\"]\ndllme.com##td[height=\"260\"]\ncrictime.com##td[height=\"265\"]\nautosport.com##td[height=\"266\"][bgcolor=\"#DCDCDC\"]\nkids-in-mind.com##td[height=\"270\"][align=\"center\"]\nrediff.com##td[height=\"280\"]\nseriouswheels.com##td[height=\"289\"]\nrediff.com,rentalads.com##td[height=\"290\"]\nbillionuploads.com##td[height=\"300\"]\nlyngsat-logo.com##td[height=\"320\"]\ncellular-news.com##td[height=\"350\"]\nkeepittrill.com##td[height=\"571\"]\nmoviesite.co.za##td[height=\"600\"]\nmusicjesus.com##td[height=\"600\"][width=\"160\"]\ntalkgold.com##td[height=\"61\"]\ntinyurl.com##td[height=\"610\"][width=\"310\"]\ncrictime.com##td[height=\"641\"]\nmybetting.co.uk##td[height=\"70\"]\nbusinessknowhow.com##td[height=\"70\"][colspan=\"3\"]\neve-search.com##td[height=\"90\"]\nstart64.com##td[height=\"92\"][colspan=\"2\"]\ncrictime.com##td[height=\"93\"]\ntigerdroppings.com##td[height=\"95\"][bgcolor=\"#dedede\"]\nimtranslator.net##td[height=\"96\"]\ntinyurl.com##td[height=\"98\"]\nsearchalot.com##td[onmouseout=\"cs()\"]\nbt-chat.com##td[rowspan=\"3\"]\nft.com##td[style=\" width:125px; height:100px; vertical-align:top; \"]\ntinyurl.com##td[style=\"background-color : #F1F0FF;\"]\nthemaineedge.com##td[style=\"background-color:#000000;\"]\nthesonglyrics.com##td[style=\"background:url('http://www.thesonglyrics.com/pics/rcolbk.png'); border-left: 1px solid #003366; border-right: 1px solid #003366;\"]\nhyipexplorer.com##td[style=\"border-bottom: 1px solid #EBEBEB; padding-right: 0px;\"]\nnewsfactor.com##td[style=\"border-left: #c0c0c0 solid 1px; padding-top:3px; padding-bottom:3px;\"]\ndslreports.com##td[style=\"border-right: 1px #CCCCCC solid;\"]\nnvnews.net##td[style=\"border: 0px solid #000000\"][rowspan=\"3\"]\naquariumfish.net##td[style=\"border: 2px solid #FF0000; padding-top:8px; padding-bottom:8px\"]\n2flashgames.com##td[style=\"border:1px solid #a1b851;background:#ffffff;\"]\nrapidog.com##td[style=\"font-size:11\"]\ncitationmachine.net##td[style=\"height: 100px;\"]\nfootytube.com##td[style=\"min-height: 292px; height: 250px; width: 342px; padding: 3px; padding-top:0px\"]\n360cities.net##td[style=\"min-width:210px;min-height:600px;\"]\ncellular-news.com##td[style=\"padding-bottom:20px;\"]\njimbotalk.net##td[style=\"padding-bottom:3px; background-color:#ffffff; height:90px;\"]\nkids-in-mind.com,kidsinmind.com##td[style=\"padding-left: 5; padding-right: 5\"]\nimagebam.com##td[style=\"padding-right: 1px; text-align: left; font-size:15px;\"]\nimagebam.com##td[style=\"padding-right: 2px; text-align: left; font-size:15px;\"]\nnewsfactor.com##td[style=\"padding-right: 5px; border-right: #BFBFBF solid 1px;\"]\nmg.co.za##td[style=\"padding-top:5px; width: 200px\"]\nbitcointalk.org##td[style=\"padding: 1px 1px 0 1px;\"] > .bfl\nbitcointalk.org##td[style=\"padding: 1px 1px 0 1px;\"] > .bvc\nbitcointalk.org##td[style=\"padding: 1px 1px 0 1px;\"] > .gyft\nbitcointalk.org##td[style=\"padding: 1px 1px 0 1px;\"] > a\nbitcointalk.org##td[style=\"padding: 1px 1px 0 1px;\"] > b + span[style*=\"font-size: 18px;\"]\ncar.com##td[style=\"padding: 8px; border: 1px solid #C9D9DD; background-color: #F9F9FF;\"]\nwikifeet.com##td[style=\"padding:10px\"]\nbusiness-standard.com##td[style=\"padding:5px\"]\nhealthsquare.com##td[style=\"padding:6px 0px 0px 4px;\"]\nultimate-guitar.com##td[style=\"padding:7px 0 10px 0; vertical-align:middle; text-align:center\"]\nisrabox.com##td[style=\"text-align: center; font-size: 16px; font-weight: bold;\"]\nfresherscafe.com##td[style=\"text-align:center; height:120px; vertical-align:middle; border:#aaa 5px solid\"]\nuploadc.com##td[style=\"text-align:center; vertical-align:middle; background:black\"]\ntixati.com##td[style=\"vertical-align: top; text-align: right; width: 346px; font-size: 12px;\"]\nenglishforum.ch##td[style=\"width: 160px; padding-left: 15px;\"]\narmslist.com##td[style=\"width: 190px; vertical-align: top;\"]\nmaannews.net##td[style=\"width: 250px; height: 120px; border: 1px solid #cccccc\"]\nuvnc.com##td[style=\"width: 300px; height: 250px;\"]\nmlbtraderumors.com##td[style=\"width: 300px;\"]\nmaannews.net##td[style=\"width: 640px; height: 80px; border: 1px solid #cccccc\"]\ntalkgold.com##td[style=\"width:150px\"]\nriverdalepress.com##td[style=\"width:728px; height:90px; border:1px solid #000;\"]\nbillionuploads.com##td[valign=\"baseline\"][colspan=\"3\"]\nefytimes.com##td[valign=\"middle\"][height=\"124\"]\nefytimes.com##td[valign=\"middle\"][height=\"300\"]\nstaticice.com.au##td[valign=\"middle\"][height=\"80\"]\njohnbridge.com##td[valign=\"top\"] > .tborder[width=\"140\"][cellspacing=\"1\"][cellpadding=\"6\"][border=\"0\"]\nwriting.com##td[valign=\"top\"][align=\"center\"][style=\"padding:10px;position:relative;\"][colspan=\"2\"] + .mainLineBorderLeft[width=\"170\"][rowspan=\"4\"]:last-child\nnewhampshire.com##td[valign=\"top\"][height=\"94\"]\ncruisecritic.com##td[valign=\"top\"][width=\"180\"]\ncruisecritic.com##td[valign=\"top\"][width=\"300\"]\ncdcovers.cc##td[width=\"10\"]\nlinkreferral.com##td[width=\"100%\"][bgcolor=\"dddddd\"][align=\"right\"] > table[width=\"800\"][border=\"0\"][align=\"center\"][cellspacing=\"0\"][cellpadding=\"0\"]\nmanoramaonline.com##td[width=\"1000\"]\ngotquestions.org##td[width=\"1000\"][height=\"93\"]\nrawstory.com##td[width=\"101\"][align=\"center\"][style][margin=\"0\"]\nworldtribune.com##td[width=\"1024\"]\nevolutionm.net,forumserver.twoplustwo.com,itnewsonline.com,talkgold.com##td[width=\"120\"]\neq2flames.com##td[width=\"120\"][style=\"padding-left:5px;white-space:normal\"]\nforums.webrats.com##td[width=\"120px\"]:first-child\npojo.biz##td[width=\"125\"]\nwetcanvas.com##td[width=\"125\"][align=\"center\"]:first-child\nzambiz.co.zm##td[width=\"130\"][height=\"667\"]\nmanoramaonline.com##td[width=\"140\"]\nsongspk.link##td[width=\"145\"][height=\"21\"][style=\"background-color: #EAEF21\"]\nleo.org##td[width=\"15%\"][valign=\"top\"][style=\"font-size:100%;padding-top:2px;\"]\nappleinsider.com##td[width=\"150\"]\naerobaticsweb.org##td[width=\"156\"][height=\"156\"]\nzambiz.co.zm##td[width=\"158\"][height=\"667\"]\ngardenweb.com##td[width=\"159\"][bgcolor=\"#A39614\"]\nap.org,billoreilly.com,complaints.com,pprune.org,thinkbabynames.com,ultimatemetal.com,worldometers.info##td[width=\"160\"]\neweek.com,terradaily.com##td[width=\"160\"][align=\"left\"]\nsecurityfocus.com##td[width=\"160\"][bgcolor=\"#eaeaea\"]\nmanoramaonline.com##td[width=\"160\"][height=\"600\"]\nproductreview.com.au,wirelessforums.org##td[width=\"160\"][valign=\"top\"]\nthegrumpiest.com##td[width=\"160px\"]\nmanoramaonline.com##td[width=\"165\"]\nbarbie.com##td[width=\"168\"][height=\"640\"]\nsearch.excite.co.uk##td[width=\"170\"][valign=\"top\"]\ntampermonkey.net##td[width=\"170px\"][style=\"vertical-align: top; padding-top: 17px;\"]\neverythinggirl.com##td[width=\"174\"]\nmoneymakerdiscussion.com##td[width=\"175\"][style=\"padding-left: 15px\"]\nappleinsider.com##td[width=\"180\"]\naaroads.com##td[width=\"180\"][height=\"650\"]\nthemaineedge.com##td[width=\"180\"][style=\"background-color:#335F9B; text-align: center;\"]\nodili.net##td[width=\"180\"][valign=\"top\"]\nsys-con.com##td[width=\"180\"][valign=\"top\"][rowspan=\"3\"]\nthaivisa.com##td[width=\"182\"][valign=\"top\"][style=\"padding-left:18px;\"]\ncouponmom.com##td[width=\"184\"]\neab.abime.net##td[width=\"185\"][align=\"left\"]:first-child\ngateprep.com##td[width=\"187\"][style=\"padding:5px;\"]\nmuchshare.net##td[width=\"189\"][align=\"left\"]\navsforum.com##td[width=\"193\"]\ntivocommunity.com##td[width=\"193\"][valign=\"top\"]\nboxingscene.com##td[width=\"200\"][height=\"18\"]\ndir.yahoo.com##td[width=\"215\"]\nthesonglyrics.com##td[width=\"230\"][align=\"center\"]\nitweb.co.za##td[width=\"232\"][height=\"90\"]\ndegreeinfo.com,rubbernews.com##td[width=\"250\"]\nbigresource.com##td[width=\"250\"][valign=\"top\"][align=\"left\"]\nscriptmafia.org##td[width=\"250px\"]\nstumblehere.com##td[width=\"270\"][height=\"110\"]\nwebsitelooker.com##td[width=\"30%\"][align=\"center\"]\navsforum.com,ballerstatus.com,btobonline.com,coolmath-games.com,coolmath4kids.com,dzineblog.com##td[width=\"300\"]\nsoftpedia.com##td[width=\"300\"][align=\"right\"]\nzigzag.co.za##td[width=\"300\"][height=\"250\"]\nmusicsonglyrics.com,safemanuals.com,vector-logos.com##td[width=\"300\"][valign=\"top\"]\nziddu.com##td[width=\"305\"]\nbt-chat.com##td[width=\"305px\"]\npwtorch.com##td[width=\"306\"][height=\"250\"]\ntennis.com##td[width=\"330\"][height=\"250\"]\ndevarticles.com,rage3d.com##td[width=\"336\"]\ncodewalkers.com##td[width=\"336\"][valign=\"top\"]\nnet-security.org##td[width=\"337\"][height=\"287\"]\nplanet-source-code.com##td[width=\"340\"]\nrom-world.com##td[width=\"35%\"][style=\"border: solid #AAAAAA 1px;\"]\naskvg.com##td[width=\"370px\"]\nstoragereview.com##td[width=\"410\"]:first-child + td[align=\"right\"]\nfreeonlinegames.com##td[width=\"50%\"][height=\"250\"]\nboxofficeindia.com##td[width=\"50%\"][valign=\"top\"][height=\"265\"][align=\"left\"]\ngoodquotes.com##td[width=\"55%\"]\nleo.org##td[width=\"55%\"][valign=\"middle\"]\ndickens-literature.com##td[width=\"7%\"][valign=\"top\"]\nballerstatus.com,cellular-news.com,prowrestling.com,rivals.com##td[width=\"728\"]\nitweb.co.za,lyngsat-logo.com,lyngsat.com,notdoppler.com,thinkbabynames.com##td[width=\"728\"][height=\"90\"]\njapan-guide.com##td[width=\"728\"][valign=\"bottom\"]\npostchronicle.com##td[width=\"728\"][valign=\"top\"]\nsamachar.com##td[width=\"730\"][height=\"90\"]\nrailmuseums.com##td[width=\"760\"]:first-child + td[width=\"160\"][valign=\"top\"]:last-child\nbarbie.com##td[width=\"767\"][height=\"96\"]\ngardenweb.com##td[width=\"932\"][height=\"96\"]\nthe-numbers.com##td[width=\"95\"]\nempireonline.com##td[width=\"950\"][height=\"75\"]\nworkforce.com##td[width=\"970\"][height=\"110\"]\nusanetwork.com##td[width=\"970\"][height=\"66\"]\nhowstuffworks.com##td[width=\"980\"][height=\"90\"]\nhongkongindians.com##th[width=\"1000\"][height=\"141\"]\nlegendarydevils.com##th[width=\"600\"]\nuvnc.com##tr > td[valign=\"middle\"][style=\"width: 10px;\"]:first-child + td[valign=\"top\"][style=\"width: 180px;\"]\nforums.creativecow.net##tr > td[width=\"126\"][valign=\"top\"][style=\"padding:6px 0px 0px 10px;\"]:first-child\nrarlab.com,rarlabs.com##tr:first-child > .tbar2[width=\"48%\"]:first-child + td[width=\"4%\"] + .tbar2[width=\"48%\"]:last-child\ntopfriv.com##tr:first-child:last-child > td[style=\"padding-left:5px; width:260px\"]:first-child\nrarlab.com,rarlabs.com##tr:last-child > td[valign=\"top\"]:first-child + td + .tplain[valign=\"top\"]:last-child\nfredericknewspost.com##tr[height=\"250\"]\nwhatsmyip.org##tr[height=\"95\"]\nnowgoal.com##tr[id^=\"tr_ad\"]\nfulldls.com##tr[style=\"height:40px;font-size:13px\"]\nplaykidsgames.com##tr[style=\"height:60px;\"]\ninternetslang.com##tr[style=\"min-height:28px;height:28px\"]\ninternetslang.com##tr[style=\"min-height:28px;height:28px;\"]\nopensubtitles.org##tr[style^=\"height:115px;text-align:center;margin:0px;padding:0px;background-color:\"]\nsearch.yahoo.com##ul > .res[data-bg-link^=\"http://r.search.yahoo.com/_ylt=\"]\nsearch.aol.com##ul[content=\"SLMP\"]\nsearch.aol.com##ul[content=\"SLMS\"]\nfacebook.com##ul[id^=\"typeahead_list_\"] > ._20e._6_k._55y_\nelizium.nu##ul[style=\"padding: 0; width: 100%; margin: 0; list-style: none;\"]\n! Filter for testpages.adblockplus.org\ntestpages.adblockplus.org###abptest\n! *** easylist:easylist_adult/adult_specific_hide.txt ***\nashemaletube.com###ASHM_imBox_Container\nnudography.com###BannerContainer\nporntack.com###BannerUnder\ncam4.com###Cam4IMslider\nstarsex.pl###FLOW_frame\nthestranger.com###PersonalsScroller\nprivatehomeclips.com###Ssnw2ik\nimagehaven.net###TransparentBlack\nnamethatporn.com###a_block\nswfchan.com###aaaa\npornvideoxo.com###abox\n4tube.com###accBannerContainer03\n4tube.com###accBannerContainer04\npornhub.com,tube8.com,youporn.com###access_container\ncliphunter.com,isanyoneup.com,seochat.com###ad\nimagefap.com###ad1\npornhub.com###adA\npornhub.com###adB\nua-teens.com###ad_global_below_navbar\ndagay.com###add_1\ndagay.com###add_2\ndachix.com,dagay.com###add_3\ngaytube.com,pornomovies.com,turboimagehost.com,xvideos.com###ads\neporner.com###adv\nhiddencamsvideo.com###advert\nprimejailbait.com###advertical\nhairyclassic.com,qruq.com###advertisement\npornative.com###advertisers\ntimtube.com###advertising\nfleshbot.com###afleft\nfleshbot.com###afright\nxxxbunker.com###agePopup\nimageporter.com###agebox\nimagehaven.net###agreeCont\nimagevenue.com,intporn.com###ajax_load_indicator\npornoitaliana.com,pornologo.com###alfa_promo_parent\nmotherless.com###anonymous-notice\nliterotica.com###b-top\nlinkbucks.com###banner\ndesignm.ag###banner-holder\ndansmovies.com###banner4\nxxxbunker.com###bannerListBottom\nxxxbunker.com###bannerListTop\nyuvutu.com###bannerTop\ndebonairblog.com###banner_an\nadultfriendfinder.com###banner_con\ndansmovies.com###banner_video\nnamethatpornstar.com###bannercontainer\niafd.com###bantop\ndesktopangels.net###bg_tab_container\npornflex53.com###bigbox_adv\nxxxbunker.com###blackout\nchaturbate.com###botright\nporntube.com###bottomBanner\nxxxbunker.com###bottomBanners\nwankerhut.com###bottom_adv\nmydailytube.com###bottomadd\nwatchindianporn.net###boxban2\npornsharia.com###brazzers1\nfastpic.ru###brnd\nfastpic.ru###brnd-footer\nbefuck.com,hotshame.com,pinkrod.com,pornoid.com,thenewporn.com,updatetube.com,wetplace.com###c2p\nxvideos.com###channel_banner\n24porn7.com###closeSyntax_adpB\ndrtuber.com###close_bottom_banner\nthestranger.com###communityScroller\nimagewaste.com###container2\ntrovaporno.com###corpo_video_sponsor\nthisav.com###dhtmlwindowholder\nblackandrose.net###disclaimer\ntheync.com###divYNC-RC-BotAd\ntheync.com###divYNC-RC-TopAd\ntheync.com###divYNCFootAdHolder\ntheync.com###divYNCFooterAdsWrapper\ntheync.com###divYNCHeadAdHolder\ntheync.com###divYNCVidPageAboveAdWrapper\ntheync.com###divYNCVidPageBelowAdWrapper\ntheync.com###divYNCVidPageBotAdWrapper\ntheync.com###divYNCVidPageTopAdsWrapper\nceleb.gate.cc###div_alert\nceleb.gate.cc###div_alternative\ndojki.com###dosug\nxaxtube.com###download\ndominationtube.com###download-bar\nanyvids.com###eapromo\nefukt.com###ef-video-overlay\nadultdvdtalk.com###enter_overlay\neporner.com###eptable\ncrazyhomesex.com,deliciousmovies.com,homemademoviez.com,imgflare.com,momisnaked.com,momsteachboys.com,momsxboys.com,sex-movies.cc,topamateursexvideos.com###fadeinbox\npornday.org,yporn.tv###featured\nimagetwist.com###firopage\nbe3x.com###fl813695\nsexyclips.org###flash\nloadsofpics.com###floatdiv\nmonstertube.com###footer\nextremetube.com###footerWhole\nburningcamel.com###fp_promo\nadultfriendfinder.com###free_chat_models\nhomemoviestube.com###friendscontents\nnetasdesalim.com###frutuante\ncantoot.com###googlebox\nnangaspace.com###header\nfreepornvs.com###header > h1 > .buttons\naan.xxx###header-banner\nyoutubelike.com###header-top\ncam4.com###headerBanner\nspankwire.com###headerContainer\nxaxtube.com###header_banner_1\nxaxtube.com###header_banner_2\nphonedog.com###headerboard\ndumpaporn.com###headerbottom\ntodaysparent.com###hearst\nbonecasxxx.com###highlights\nprettyhotandsexy.sk###home-insert-1\nfapdu.com###home_300_250\nrealgfporn.com###iknow\ngotgayporn.com###index4x4ad\neporner.com###inpdiv\neporner.com###inplayer\nimageporter.com###interVeil\nfreebunker.com,imagesnake.com,imgcarry.com,loadsofpics.com,pornbus.org###introOverlayBg\nsex2ube.com###jFlowSlide\nperfectgirls.net,postyourpuss.com###leaderboard\nimagetwist.com###left[align=\"center\"] > center > a[target=\"_blank\"]\ncollegegrad.com###leftquad\nsuicidegirls.com###livetourbanner\nfreeimgup.com,imghost.us.to###lj_livecams\n5ilthy.com###ltas_overlay_unvalid\nynot.com###lw-bannertop728\nynot.com###lw-top\neporner.com###maindiv-topa\neporner.com###maindiv-topadv\nnews.com.au###match-widget\nxred2.com###mbEnd\nyobt.tv###media-bottom\n5ilthy.com,cockcheese.com,filthyrx.com,gfssex.com###mediaspace\nadultfriendfinder.com###mod\nyouporn.com,youporngay.com###moreVideosTabview3\naskjolene.com###more_from_this\nprotectlinks.com###mouselayer\neporner.com###movieplayer-right\nstarcelebs.com###mrskin-birthday-widget\nimagetwist.com###myad\nhollywoodrag.com###navcontainer\nalotporn.com,flashx.tv,myfreeblack.com###nuevoa\nma3comic.com###omad\nnewverhost.com###onload\nnewverhost.com###onload-main\nnewverhost.com###onload-overlay\nimagetwist.com,imagevenue.com,intporn.com###overlayBg\nheavy-r.com,vidiload.com###overlayVid\nvideos.com###pToolbar\njizzhut.com###pagetitle\nwide6.com###partner\ngamcore.com,wide6.com###partners\nextremetube.com,redtube.com,spankwire.com,youporngay.com###pb_block\npornhub.com,tube8.com,youporn.com###pb_template\nyouporn.com###personalizedHomePage > div:nth-child(2)\npornhub.com###player + div + div[style]\npornhub.com###player + div[style]\nvidgrab.net,xxvideo.us###player > #stop\nalotporn.com###playeradv\ndepic.me###popup_div\nimagehaven.net###popwin\nsextvx.com###porntube_hor_bottom_ads\nsextvx.com###porntube_hor_top_ads\nxtube.com###postrollContainer\nkaktuz.com###postroller\nimagepost.com###potd\neroclip.mobi,fuqer.com###premium\nyouporn.com,youporngay.com###producer\nredtube.com###puBody\ndrtuber.com,nuvid.com###puFloatDiv\nxvideoslatino.com###publicidadlateral1\nxvideoslatino.com###publicidadlateral2\npussy.org###pussyhbanner\npussy.org###pussytextlinks\nma3comic.com###pxhead\nflurl.com###rectbanner\nyourlust.com###relatedBanner\nxxxymovies.com###reltabContent\ntnaflix.com###rightPromo\nhomemoviestube.com###right_out\nnonktube.com###second\namateurfarm.net,retrovidz.com###showimage\nshesocrazy.com###sideBarsMiddle\nshesocrazy.com###sideBarsTop\npornday.org###side_subscribe_extra\nmydailytube.com###sideadd\nspankwire.com###sidebar\nimageporter.com###six_ban\nflurl.com###skybanner\nio9.com,postyourpuss.com###skyscraper\nimagedax.net,imagedunk.com,imageporter.com###slashpage\nfree-celebrity-tube.com###slide_up2\nfantasti.cc###smutty_widget\nporn.com###sp\nkindgirls.com###spon\nhiddencamshots.com,porn.com,sluttyred.com###sponsor\ndagay.com###sponsor_video_pub\nflingtube.com###sponsoredBy\nhiddencamshots.com###sponsors\nw3avenue.com###sponsorsbox\nmaxjizztube.com,yteenporn.com###spotxt\nxxxbunker.com###ssLeft\nxxxbunker.com###ssRight\ngotgayporn.com,motherless.com###ss_bar\nhot-jav.com###stop\nprivatehomeclips.com###stopImapwUx\nprivatehomeclips.com###stopVAD\neporner.com###subcontent_mediaspace\ncam4.com###subfoot\nadultfyi.com###table18\nhostingfailov.com###tablespons\nxtube.com###tabs\nfleshasiadaily.com###text-12\nfleshasiadaily.com###text-13\nfleshasiadaily.com###text-14\nfleshasiadaily.com###text-15\nfleshasiadaily.com###text-8\nfapgames.com###the720x90-spot\nfilhadaputa.tv###thumb[width=\"959\"]\nhiddencamshots.com,videarn.com###top-banner\nnude.hu###topPartners\nextremetube.com###topRightsquare\nxhamster.com###top_player_adv\nmataporno.com,sexmummy.com,sopervinhas.net,teenwantme.com,worldgatas.com,xpg.com.br###topbar\npinkems.com###topfriendsbar\nnamethatpornstar.com###topphotocontainer\naskjolene.com###tourpage\npornhyve.com###towerbanner\npornvideoxo.com###tube-right\npervclips.com###tube_ad_category\naxatube.com,creampietubeporn.com,fullxxxtube.com,gallsin.xxx,xxxxsextube.com,yourdarkdesires.com###ubr\nusatoday.com###usat_PosterBlog\nhomemoviestube.com###v_right\nstileproject.com###va1\nstileproject.com###va2\nstileproject.com###va3\nstileproject.com###va4\nstileproject.com###va5\nstileproject.com###va6\nstileproject.com###va7\nstileproject.com###va8\nteenist.com###video-bottom-right\nyouporn.com###videoCanvas > .grid_5[style=\"height: 455px;\"]\nspankwire.com###videoCounterStraight\nyouporn.com###videoWrapper + div[style]\nbangyoulater.com###video_ad\npornvideoscout.com,xsharebox.com###video_cover\ntube8.com###video_left_message\nadultfriendfinder.com###video_main_cams\npornhyve.com###videobanners\nrextube.com###videoright\npervclips.com,pornicom.com,wankoz.com###view_video_ad\npornhub.com###views_left\ntjoob.com###viewvidright\nmatureworld.ws###vote_popup\nadultfriendfinder.com###vp_left\nbustnow.com###xad900x250x1\nmrstiff.com###xdv-preroll\nporntack.com##.Banner\npornbanana.com##.DealContainer2\npornbanana.com##.RightBanners\nziporn.com##.RightBoxMain\nziporn.com##.RightRefBoxMain\npornbanana.com##.TopBann\nporntack.com##.TopBannerCon\npornbanana.com##.VidBottomBanner\npornbanana.com##.VidRightSide\nextremetube.com##._mapm_link_local_sex\nextremetube.com##._mapm_link_phone_sex\nextremetube.com##._mapm_link_premium\nseductivetease.com##.a-center\npornbb.org##.a1\nporn.com##.aRight\npornvideofile.com##.aWrapper\ncelebspank.com,chaturbate.com,cliphunter.com,gamcore.com,playboy.com,pornhub.com,signbucks.com,sxx.com,tehvids.com,uflash.tv,wankoz.com,yobt.tv##.ad\nextremetube.com##.ad-container\ncelebspank.com##.ad1\npornhub.com##.adContainer\npornoxo.com##.adblock\nxxxfuel.com##.adcontainer\nsex3.com##.add-box\nhentaistream.com##.adds\nadultbox.eu,analtubegirls.com,bangyoulater.com,beemtube.com,cam4.com,djs-teens.net,femdom-fetish-tube.com,free-celebrity-tube.com,glarysoft.com,hdporn.in,onlyhot.biz,pornshaft.com,porntalk.com,ratemypeach.com,springbreaktubegirls.com,teentube18.com##.ads\nmyfreeblack.com##.ads-player\nfamouspornstarstube.com,hdporntube.xxx,lustypuppy.com,mrstiff.com,pixhub.eu,pornfreebies.com,tubedupe.com,webanddesigners.com,youngartmodels.net##.adv\nfreexcafe.com##.adv1\nprivatehomeclips.com##.adv_block\nmygirlfriendvids.net,wastedamateurs.com##.advblock\nporn.hu##.advert\nfakku.net,pornmd.com,porntube.com,youporn.com,youporngay.com##.advertisement\nalphaporno.com,bravotube.net,privatehomeclips.com,tubewolf.com##.advertising\nfapdu.com##.aff300\naskjolene.com##.aj_lbanner_container\nah-me.com,befuck.com,pornoid.com,sunporno.com,thenewporn.com,twilightsex.com,updatetube.com,videoshome.com,xxxvogue.net##.allIM\npinkrod.com,pornsharia.com,pornsharing.com,wetplace.com##.allIMwindow\n1loop.com##.asblock\nliterotica.com##.b-s-share-love\nfuqer.com##.b300x250\nnude.hu##.badHeadline\ndevatube.com##.ban-list\ngayboystube.com##.bancentr\nfux.com##.baner-column\nxchimp.com##.bannadd\nchaturbate.com,dansmovies.com,fecaltube.com,imageporter.com,playvid.com,private.com,vid2c.com,videarn.com,vidxnet.com,wanknews.com,watchhentaivideo.com,xbabe.com,yourdailygirls.com##.banner\nwatchindianporn.net##.banner-1\nadultpornvideox.com##.banner-box\ntube8.com##.banner-container\n0xxx.in##.banner-naslovna\nwatchindianporn.net##.banner-vid\ndefinebabe.com##.banner1\ncelebritymovieblog.com##.banner700\nwatchhentaivideo.com##.bannerBottom\n4tube.com,empflix.com,tnaflix.com##.bannerContainer\n4tube.com##.banner_btn\nwunbuck.com##.banner_cell\ngalleries-pornstar.com##.banner_list\npenthouse.com##.banner_livechat\nfreeporn.com##.bannercube\nxfanz.com##.bannerframe\nthehun.net##.bannerhorizontal\nbustnow.com##.bannerlink\nchubby-ocean.com,cumlouder.com,grandpaporntube.net,sexu.com,skankhunter.com##.banners\nisanyoneup.com##.banners-125\nporntubevidz.com##.banners-area\nvid2c.com##.banners-aside\n5ilthy.com##.bannerside\nsexoncube.com##.bannerspot-index\nthehun.net##.bannervertical\nratemymelons.com##.bannus\nredtube.com##.belowVideo\ntnaflix.com##.bgDecor\neskimotube.com,tjoob.com##.bg_banner_l\neskimotube.com,tjoob.com##.bg_banner_r\nbangyoulater.com##.big-box-border\ntub99.com##.bigimg2\ndrtuber.com##.bl[style=\"height: auto;\"]\ntwilightsex.com##.bl_b_l\njapan-whores.com##.block-banners\nmylifetime.com##.block-doubleclick\nyoux.xxx##.block-sites\nxhamster.com##.block[style=\"text-align:center; width:902px; padding:15px;margin:0\"]\nstreamsexclips.com,tubesexclips.com,tubesexmovies.com##.botban\nfux.com##.bottom-baner\nxbabe.com,yumymilf.com##.bottom-banner\nplayvid.com##.bottom-banners\nyoutubelike.com##.bottom-thumbs\nyoutubelike.com##.bottom-top\npornvideoxo.com##.bottom_wide\ntube8.com##.bottomadblock\ntube8.com##.box-thumbnail-friends\nworldsex.com##.brandreach\nsublimedirectory.com##.browseAd\nxaxtube.com##.bthums\nrealgfporn.com##.btn-info\n4tube.com,tube8.com##.btnDownload\nredtube.com##.bvq\nredtube.com##.bvq-caption\ngamesofdesire.com##.c_align\nempflix.com##.camsBox\ntnaflix.com##.camsBox2\ncelebspank.com##.celeb_bikini\nadultfriendfinder.com##.chatDiv.rcc\nvoyeur.net##.cockholder\nxnxx.com##.combo.smallMargin[style=\"padding: 0px; width: 100%; text-align: center; height: 244px;\"]\nxnxx.com##.combo[style=\"padding: 0px; width: 830px; height: 244px;\"]\navn.com##.content-right[style=\"padding-top: 0px; padding-bottom: 0px; height: auto;\"]\nxbutter.com##.counters\npervclips.com,pornicom.com##.cs\ndronporn.com##.cs_spon\nalotporn.com##.cube\npornalized.com,pornoid.com,pornsharia.com##.discount\npornsharia.com##.discounts\nfapdu.com##.disp-underplayer\nkeezmovies.com##.double_right\ncameltoe.com##.downl\npinkrod.com,pornsharia.com,wetplace.com##.download\nrealgfporn.com##.downloadbtn\nhellporno.com##.dvb-advertisements\npornsharia.com##.eciframe\npornsharia.com##.eciframeright\nefukt.com##.ef_block_wrapper\ngoldporntube.com##.embadv\ngrandpaporntube.net##.embed_banners\ngrandpaporntube.net##.exo\nimagepost.com##.favsites\nmrstiff.com##.feedadv-wrap\nextremetube.com##.float-left[style=\"width: 49.9%; height: 534px;\"]\nwankerhut.com##.float-right\nextremetube.com##.float-right[style=\"width: 49.9%; height: 534px;\"]\nteensexyvirgins.com,xtravids.com##.foot_squares\nscio.us##.footer\nbabesandstars.com##.footer_banners\ncam111.com##.g_p_con300250\nsammobile.com##.gad\nyoux.xxx##.gallery-link\nyoutubelike.com##.gallery-thumbs\npornhub.com##.gay-ad-container\ntitsintops.com##.gensmall[width=\"250\"]\ntitsintops.com##.gensmall[width=\"305\"]\nfantasti.cc##.goodie01\nziporn.com##.hBannerHolder\nbgafd.co.uk##.hdradclip\npornsharia.com##.head > h3\ncelebspank.com##.header\nredtube.com##.header > #as_1\nnuvid.com##.holder_banner\npornhub.com##.home-ad-container + div\nalphaporno.com##.home-banner\ntube8.com##.home-message + .title-bar + .cont-col-02\njulesjordanvideo.com##.horiz_banner\norgasm.com##.horizontal-banner-module\norgasm.com##.horizontal-banner-module-small\npornanal.net##.i_br\ndrtuber.com##.img_video\npornsis.com##.indexadl\npornsis.com##.indexadr\npornicom.com##.info_row2\ncocoimage.com,hotlinkimage.com,picfoco.com##.inner_right\ne-hentai.org##.itd[colspan=\"4\"]\nnamethatporn.com##.item_a\nsex2ube.com##.jFlowControl\nteensanalfactor.com##.job\npornhub.com##.join\nredtube.com##.join-button\nextremetube.com##.join_box\npornhub.com,spankwire.com,tube8.com,youporn.com##.join_link\noverthumbs.com##.joinnow\nzuzandra.com##.jx-bar\ntnaflix.com##.leftAbsoluteAdd\nxxxporntalk.com##.left_col\ntaxidrivermovie.com##.left_right_border\nxxxporntalk.com##.leftsidenav\ngalleries-pornstar.com##.list_sites\nsexyfunpics.com##.listingadblock300\ntnaflix.com##.liveJasminHotModels\nns4w.org##.livejasmine\nmadthumbs.com##.logo\ntube8.com##.main-video-wrapper > .float-right\nsexdepartementet.com##.marketingcell\nlic.me##.miniplayer\nhanksgalleries.com##.mob_vids\nredtube.com##.ntva\nfinaid.org##.one\nlustgalore.com,yourasiansex.com##.opac_bg\nbaja-opcionez.com##.opaco2\nvporn.com##.overheaderbanner\ndrtuber.com##.p_adv\ntube8.com##.partner-link\nbravotube.net##.paysite\nah-me.com##.paysite-link\nmadmovs.com,pornosexxxtits.com##.player-outer-banner\n4tube.com##.player_faq_link\n4tube.com##.player_sub_link\nyobt.tv##.playpause.visible > div\nhornywhores.net##.post + script + div[style=\"border-top: black 1px dashed\"]\nhornywhores.net##.post + script + div[style=\"border-top: black 1px dashed\"] + br + center\nuflash.tv##.pps-banner\npornhub.com##.pre-footer\nporntubevidz.com##.promo-block\nnakedtube.com,pornmaki.com##.promotionbox\nnuvid.com##.puFloatLine\nsexy-toons.org##.pub300\ncumlouder.com,freemovies.tv##.publis-bottom\npussy.org##.pussytrbox\nxchimp.com##.rCol2\nbustedcoverage.com##.rcr-tower\ncandidvoyeurism.com##.rectangle\nburningcamel.com##.reklaim\ncam4.com##.removeAds\ntubaholic.com##.result_under_video\nyouporn.com##.right-column > div[style^=\"float: none;\"]:first-child\nyouporn.com##.right-column aside[class^=\"pad-right\"]\nporn.com##.right300\ntnaflix.com##.rightAbsoluteAdd\nxxxporntalk.com##.rightalt-1 > center > a[target=\"_blank\"] > img[width=\"160\"]\nporn.com##.rmedia\ncollegegrad.com##.roundedcornr_box_quad\nxxxymovies.com##.rtoptbl\nsticking.com##.sb-box\ndominationtube.com,gaysexarchive.com,skeezy.com,sticking.com##.sb-txt\nuselessjunk.com##.shadow_NFL\nsankakucomplex.com##.side300xmlc\ncelebspank.com##.sidebar5\n4tube.com##.sidebarVideos\nvidxnet.com##.sidebar_banner\ncliphunter.com##.sidecreative\nxxxporntalk.com##.sidenav\n4tube.com##.siteBannerHoriz\ntube8.com##.skin\ntube8.com##.skin1\ntube8.com##.skin2\ntube8.com##.skin3\ntube8.com##.skin4\ntube8.com##.skin6\ntube8.com##.skin7\ncandidvoyeurism.com##.skyscraper\ngaytube.com##.slider-section\nmovies.askjolene.com##.small_tourlink\nspringbreaktubegirls.com##.span-100\nnonktube.com##.span-300\nnonktube.com##.span-320\nns4w.org##.splink\nbgafd.co.uk##.spnsr\nabc-celebs.com##.spons\ndefinebabe.com,pornever.net,xbabe.com##.sponsor\ndefinebabe.com##.sponsor-bot\nxhamster.com##.sponsorB\nxxxbunker.com##.sponsorBoxAB\nxhamster.com##.sponsorS\nxhamster.com##.sponsor_top\nproporn.com,tubecup.com,xhamster.com##.spot\nmagicaltube.com##.spot-block\ntubecup.com##.spot_bottom\nredtube.com##.square-banner\nsunporno.com,twilightsex.com##.squarespot\nbabesandstars.com##.srcreen\nsexyandshocking.com##.sub-holder\npeepinghunter.com##.superbanner\nporndaddy.us##.svd\ndickbig.net##.t_14\nintporn.com##.tagcloudlink.level4\namateuralbum.net##.tb3\nhungangels.com##.tborder[width=\"160\"][cellspacing=\"0\"][cellpadding=\"4\"][border=\"0\"]\namateurvoyeurforum.com##.tborder[width=\"99%\"][cellpadding=\"6\"]\nimagepost.com##.textads1\nextremetube.com##.title-sponsor-box\ngalleries-pornstar.com##.title_slider\npopporn.com,xxxlinks.es##.top-banner\nsunporno.com##.top-player-link\n10movs.com##.top_banner\npornhub.com##.top_hd_banner\nmrstiff.com##.topad\npeepinghunter.com##.topbanner\nitsatechworld.com##.topd\nrealgfporn.com##.trade-slider\noverthumbs.com##.trailerspots\ntubedupe.com##.treview_link_1\ntubedupe.com##.tube_review\navn.com##.twobannersbot\navn.com##.twobannersbot-bot\ndumparump.com##.txt8pt[width=\"120\"]\nsunporno.com##.under-player-link\nbravotube.net##.under-video\nindianpornvideos.com##.vdo-unit\njulesjordanvideo.com##.vertical_banner\nfreepornvs.com##.vib > .cs\nh2porn.com##.video-banner\nhdporntube.xxx##.video-link\nredtube.com##.video-page\njapan-whores.com##.video-provider\nalphaporno.com,tubewolf.com##.video-sponsor\ntube8.com##.videoPageSkin\ntube8.com##.videoPageSkin1\ntube8.com##.videoPageSkin2\n4tube.com##.videoSponsor\nh2porn.com##.video_banner\nbonertube.com##.videoad940\nindianpornvideos.com##.videoads\nsexyshare.net##.videosz_banner\nyouporn.com##.views_left\nlubetube.com##.viewvideobanner\nimagearn.com##.wide_banner\nbeeg.com##.window\nmrskin.com##.yui3-u-1-3:last-child\nporn.com##.zone\nxhamster.com##[height=\"280\"][width=\"960\"]\nimagehaven.net##[href=\"http://clicks.totemcash.com/?s=38739&p=21&pp=4\"]\nimagevenue.com##[id^=\"MarketGid\"]\nliveleak.com##[style=\"color: rgb(204, 0, 0);\"]\nsubimg.net##[style=\"float: left; padding-left: 43px; padding-top: 21px;\"]\nhollywoodrag.com,imagefap.com##[style=\"font-weight: bold; font-family: Arial; font-size: 13px;\"]\nhomemade-voyeur.com##[style=\"height:250px;\"]\nstarpix.us##[style=\"left: 644px; top: 552.5px; visibility: visible;\"]\npornerbros.com##[style=\"margin: -150px auto 0px; width: 920px; height: 400px;\"]\nmyprops.org##[style=\"padding-top: 15px; padding-left: 81px;\"]\nsexyclips.org##[style=\"text-align: center; width: 1000px; height: 250px;\"]\nyuvutu.com##[width=\"480px\"][style=\"padding-left: 10px;\"]\nexgirlfriendmarket.com##[width=\"728\"][height=\"150\"]\n264porn.blogspot.com##[width=\"728\"][height=\"90\"]\nmatureworld.ws##a > img[height=\"180\"][width=\"250\"][src*=\".imageban.ru/out/\"]\nasspoint.com,babepedia.com,babesource.com,gaytube.com,girlsnaked.net,pornoxo.com,rogreviews.com,starcelebs.com,the-new-lagoon.com,tube8.com##a[href*=\".com/track/\"]\ntube8.com##a[href*=\"/affiliates/idevaffiliate.php?\"]\nmonstercockz.com##a[href*=\"/go/\"]\ntube8.com##a[href*=\"?coupon=\"]\nporn99.net##a[href=\"http://porn99.net/asian/\"]\nxhamster.com##a[href=\"http://premium.xhamster.com/join.html?from=no_ads\"]\npornwikileaks.com##a[href=\"http://www.adultdvd.com/?a=pwl\"]\nfootfetishtube.com##a[href=\"http://www.footfetishtube.com/advertising_banner.php\"]\ntwinsporn.net##a[href=\"http://www.herbostore.net/mens-health/spermomax.html\"]\nstockingstv.com##a[href=\"http://www.stockingstv.com/banners/default.php\"]\nhornywhores.net##a[href=\"https://cosyupload.com/affiliate\"]\nimagevenue.com##a[href^=\" http://www.pinporn.com\"]\nfecaltube.com##a[href^=\"/go/\"]\nanyvids.com##a[href^=\"http://ad.onyx7.com/\"]\nsex4fun.in##a[href^=\"http://adiquity.info/\"]\ntube8.com##a[href^=\"http://ads.trafficjunky.net\"]\ntube8.com##a[href^=\"http://ads2.contentabc.com\"]\npornbb.org##a[href^=\"http://ard.ihookup.com/\"]\npornbb.org##a[href^=\"http://ard.sexplaycam.com/\"]\nporn99.net##a[href^=\"http://bit.ly/\"]\nsex4fun.in##a[href^=\"http://c.mobpartner.mobi/\"]\nsex3dtoons.com##a[href^=\"http://click.bdsmartwork.com/\"]\nxxxgames.biz##a[href^=\"http://clicks.totemcash.com/?\"]\nimghit.com##a[href^=\"http://crtracklink.com/\"]\nceleb.gate.cc##a[href^=\"http://enter.\"][href*=\"/track/\"]\nhollywoodoops.com##a[href^=\"http://exclusive.bannedcelebs.com/\"]\ngamcore.com##a[href^=\"http://gamcore.com/ads/\"]\nhentai-imperia.org,rs-linkz.info##a[href^=\"http://goo.gl/\"]\nceleb.gate.cc##a[href^=\"http://join.\"][href*=\"/track/\"]\nporn99.net##a[href^=\"http://lauxanh.us/\"]\nincesttoons.info##a[href^=\"http://links.verotel.com/\"]\nxxxfile.net##a[href^=\"http://netload.in/index.php?refer_id=\"]\nimagepix.org##a[href^=\"http://putana.cz/index.php?partner=\"]\niseekgirls.com,small-breasted-teens.com,the-new-lagoon.com,tube8.com##a[href^=\"http://refer.ccbill.com/cgi-bin/clicks.cgi?\"]\nolala-porn.com##a[href^=\"http://ryushare.com/affiliate.\"]\nhentairules.net##a[href^=\"http://secure.bondanime.com/track/\"]\nhentairules.net##a[href^=\"http://secure.futafan.com/track/\"]\nhentairules.net##a[href^=\"http://secure.lestai.com/track/\"]\nfilthyrx.com##a[href^=\"http://secure.spitsters.com/track/\"]\nhentairules.net##a[href^=\"http://secure.titanime.com/track/\"]\nyoungpornvideos.com##a[href^=\"http://teensexmania.com/jump.php?\"]\nasianpornmovies.com##a[href^=\"http://tour.teenpornopass.com/track/\"]\nasianpornmovies.com##a[href^=\"http://webmasters.asiamoviepass.com/track/\"]\nimagetwist.com##a[href^=\"http://www.2girlsteachsex.com/\"]\nnifty.org##a[href^=\"http://www.adlbooks.com/\"]\nhentai-imperia.org##a[href^=\"http://www.adult-empire.com/rs.php?\"]\npicfoco.com##a[href^=\"http://www.adultfriendfinder.com/search/\"]\nbravotube.net##a[href^=\"http://www.bravotube.net/cs/\"]\nfree-adult-anime.com##a[href^=\"http://www.cardsgate-cs.com/redir?\"]\nceleb.gate.cc##a[href^=\"http://www.cashdorado.de/track/\"]\nfreeones.com##a[href^=\"http://www.clickthruserver.com/cgi-bin/banner/\"]\nfilthdump.com##a[href^=\"http://www.filthdump.com/adtracker.php?\"]\nalotporn.com##a[href^=\"http://www.fling.com/\"]\nmyfreeblack.com##a[href^=\"http://www.fling.com/enter.php\"]\nfreeporninhd.com##a[href^=\"http://www.freeporninhd.com/download.php?\"]\nxhamster.com##a[href^=\"http://www.linkfame.com/\"]\ngirlsnaked.net##a[href^=\"http://www.mrvids.com/out/\"]\nsluttyred.com##a[href^=\"http://www.realitykings.com/main.htm?id=\"]\nredtube.com##a[href^=\"http://www.redtube.com/click.php?id=\"]\nmotherless.com##a[href^=\"http://www.safelinktrk.com/\"]\nsex3dtoons.com##a[href^=\"http://www.shinydollars.com/sites/3dld/?id=\"]\nxxxprivates.com##a[href^=\"http://www.xxxprivates.com/out-sponsor-\"]\nprestashop.com##a[href^=\"https://partners.a2hosting.com/solutions.php?id=\"]\nfreeporninhd.com##a[onclick^=\"window.open('http://www.freeporninhd.com/cb5.php\"]\nliterotica.com##a[style=\"display: block; text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: 110%;\"]\navn.com##a[style=\"position: absolute; top: -16px; width: 238px; left: -226px; height: 1088px;\"]\navn.com##a[style=\"position: absolute; top: -16px; width: 238px; right: -226px; height: 1088px;\"]\noopspicture.com##a[target=\"_blank\"] > img[alt=\"real amateur porn\"]\nimagevenue.com##a[target=\"_blank\"][href*=\"&utm_campaign=\"]\nimagevenue.com##a[target=\"_blank\"][href*=\"http://trw12.com/\"]\nyouporn.com##a[target=\"_blank\"][href^=\"http://www.youporn.com/\"] > img[src^=\"http://www.youporn.com/\"]\npicfoco.com##a[title=\"Sponsor link\"]\nshowyourdick.org##center + hr + table[width=\"800\"][align=\"center\"]\nsex3dtoons.com##div[align=\"center\"] > table[width=\"940\"][cellspacing=\"0\"][cellpadding=\"0\"][border=\"0\"]\njailbaitgallery.com##div[align=\"center\"][style=\"margin-bottom: 15px;\"]\nbabesandbitches.net##div[class^=\"banner\"]\ntube8.com##div[class^=\"footer-ad\"]\npornhub.com##div[id$=\"rightColVideoPage\"] > div[style]:first-child\nceleb.gate.cc##div[id^=\"bnrrotator_\"]\npornuppz.info##div[id^=\"dyn\"][style^=\"position: fixed; left: 30px; top: 20px; z-index:\"]\nhentaistream.com##div[id^=\"hs_ad\"]\neporner.com##div[style$=\" border:1px solid #666666;\"]\ncasanovax.com##div[style=\"background-color: #5B1111; width: 728px; height: 90px; text-align: center; margin: auto;\"]\nxtravids.com##div[style=\"background-color:#DDD; padding:5px;\"]\nx3xtube.com##div[style=\"border: 1px solid red; margin-bottom: 15px;\"]\ncrazyandhot.com##div[style=\"border:1px solid #000000; width:300px; height:250px;\"]\nimagecherry.com##div[style=\"border:1px solid black; padding:15px; width:550px;\"]\nvoyeur.net##div[style=\"display:inline-block;vertical-align:middle;margin: 2px;\"]\nredtube.com##div[style=\"float: none; height: 250px; position: static; clear: both; text-align: left; margin: 0px auto;\"]\npornhub.com##div[style=\"float: none; width: 950px; position: static; clear: none; text-align: center; margin: 0px auto;\"]\nredtube.com##div[style=\"float: right; height: 330px; width: 475px; position: relative; clear: left; text-align: center; margin: 0px auto;\"]\nredtube.com##div[style=\"float: right; height: 528px; width: 300px; position: relative; clear: left; text-align: center; margin: 0px auto;\"]\nxhamster.com##div[style=\"font-size: 10px; margin-top: 5px;\"]\nredtube.com##div[style=\"height: 250px; position: static; clear: both; float: none; text-align: left; margin: 0px auto;\"]\nredtube.com##div[style=\"height: 250px; position: static; float: none; clear: both; text-align: left; margin: 0px auto;\"]\nredtube.com##div[style=\"height: 250px; position: static; float: none; clear: both; text-align: left;\"]\npichunter.com##div[style=\"height: 250px; width: 800px; overflow: hidden;\"]\nxxxstash.com##div[style=\"height: 250px; width: 960px;\"]\nredtube.com##div[style=\"height: 330px; width: 475px; position: relative; float: right; clear: left; text-align: center; margin: 0px auto;\"]\nempflix.com##div[style=\"height: 400px;\"]\nredtube.com##div[style=\"height: 528px; width: 300px; position: relative; float: right; clear: left; text-align: center;\"]\nquerverweis.net##div[style=\"height:140px;padding-top:15px;\"]\nfantasti.cc##div[style=\"height:300px; width:310px;float:right; line-height:10px;margin-bottom:0px;text-align:center;\"]\npornmade.com##div[style=\"margin-left:40px;width:600px; background-color:#FBF8F1;padding:20px;margin-top:20px;border-top:1px solid #909090;border-left:1px solid #909090;border-right:1px solid #909090;border-bottom:1px solid #909090;-webkit-border-top-right-radius:10px;-webkit-border-top-left-radius:10px;-webkit-border-bottom-right-radius:10px;-webkit-border-bottom-left-radius:10px;\"]\ndata18.com##div[style=\"margin-top: 6px; margin-left: 6px; width: 293px; height: 200px; overflow: hidden;\"]\npornmade.com##div[style=\"margin-top:100px;border:1px solid black;padding:10px;background:#fff;z-index:999;overflow:hidden;width:255px;\"]\npornerbros.com##div[style=\"margin: 10px auto; text-align: center;\"]\npornmade.com##div[style=\"margin:0 auto;padding:10px;border:2px solid black;background-color:white;width:960px;\"]\neccie.net##div[style=\"overflow: hidden; width: 728px; height: 90px\"]\nfreeones.com##div[style=\"padding: 0px; margin: 10px 0px; height: 100px; width: 898px; background-color: #4C89F9; border: 1px solid #4C89F9\"]\ndefinebabe.com##div[style=\"padding:5px 15px 5px 15px;height:228px;background-color:#000000;\"]\npornhub.com##div[style=\"position: static; float: none; clear: none; text-align: center; margin: 0px auto;\"]\npornhub.com##div[style=\"position: static; float: none; clear: none; text-align: center;\"]\npornhub.com##div[style=\"position: static; height: 75px; float: none; clear: none; text-align: center; margin: 0px auto;\"]\ntwinsporn.net##div[style=\"position:fixed;right:10px;bottom:10px;color:#ff0000;border:0;\"]\nvidearn.com##div[style=\"text-align: center; margin-bottom: 10px;\"]\nxtube.com##div[style=\"text-align:center; width:1000px; height: 150px;\"]\nsluttyred.com##div[style=\"width: 300px; height: 250px; background-color: #CCCCCC;\"]\ngivemegay.com##div[style=\"width: 300px; height: 250px; margin: 0 auto;margin-bottom: 10px;\"]\nvid2c.com##div[style=\"width: 300px; height: 280px; margin-left: 215px; margin-top: 90px; position: absolute; z-index: 999999998; overflow: hidden; border-radius: 10px; transform: scale(1.33); background-color: black; opacity: 0.8; display: block;\"]\npornhub.com##div[style=\"width: 380px; margin: 0 auto;background-color: #101010;text-align: center;\"]\nvporn.com##div[style=\"width: 720px; height: 90px; text-align: center; overflow: hidden;\"]\ncasanovax.com##div[style=\"width: 728px; height: 90px; text-align: center; margin: auto\"]\ncrazyandhot.com##div[style=\"width: 728px; height: 90px; text-align: left;\"]\npichunter.com##div[style=\"width: 800px; height: 250px; overflow: hidden;\"]\npornhub.com##div[style=\"width: 950px; float: none; position: static; clear: none; text-align: center; margin: 0px auto;\"]\npornhub.com##div[style=\"width: 950px; position: static; clear: none; float: none; text-align: center; margin: 0px auto;\"]\npornhub.com##div[style=\"width: 950px; position: static; float: none; clear: none; text-align: center; margin: 0px auto;\"]\nxogogo.com##div[style=\"width:1000px\"]\niloveinterracial.com##div[style=\"width:1000px;height:110px; background-color:#E9DECA; font-family: Tahoma,Helvetica,Arial,sans-serif; font-size: 11px; font-style:normal; color:#535353;\"]\nsexbot.com##div[style=\"width:300px;height:20px;text-align:center;padding-top:30px;\"]\nimgbabes.com##div[style=\"width:604px; height:250px; background:#241521; padding:4px 3px 4px 3px; margin-top:-5px; margin-bottom:-8px; -moz-border-radius:2px; border-radius:2px; -webkit-border-radius:2px;\"]\ncam111.com##div[style=\"width:626px; height:60px; margin-top:10px; margin-bottom:10px;\"]\ncam111.com##div[style=\"width:627px; height:30px; margin-bottom:10px;\"]\nefukt.com##div[style=\"width:630px; height:255px;\"]\nnewbigtube.com##div[style=\"width:640px; min-height:54px; margin-top:8px; padding:5px;\"]\nbriefmobile.com##div[style=\"width:728px;height:90px;margin-left:auto;margin-right:auto;margin-bottom:20px;\"]\ntmz.com##div[style^=\"display: block; height: 35px;\"]\nshockingtube.com##div[style^=\"display: block; padding: 5px; width:\"]\neporner.com##div[style^=\"height:250px; width:1198px;\"]\neporner.com##div[style^=\"height:250px; width:300px;\"]\npornvideoxo.com##div[style^=\"width: 470px; height: 64px;\"]\neporner.com##div[style^=\"width:1198px; height:250px;\"]\neporner.com##div[style^=\"width:300px; height:250px;\"]\nimgflare.com##div[style^=\"width:604px; height:250px;\"]\nrateherpussy.com##font[size=\"1\"][face=\"Verdana\"]\nnude.hu##font[stlye=\"font: normal 10pt Arial; text-decoration: none; color: black;\"]\ncliphunter.com##h2[style=\"color: blue;\"]\npornhub.com,redtube.com##iframe\nluvmilfs.com##iframe + div > div[style=\"position: absolute; top: -380px; left: 200px; \"]\nyouporn.com##iframe[frameborder]\njavjunkies.com##iframe[height=\"670\"]\nyouporn.com##iframe[style=\"height: 250px; width: 300px; position: static; float: none; clear: none; text-align: start;\"]\nyouporn.com##iframe[style=\"height: 250px; width: 950px; float: none; position: static; clear: both; text-align: center; margin: 0px auto;\"]\nyouporn.com##iframe[style=\"height: 250px; width: 950px; position: static; float: none; clear: both; text-align: center;\"]\nyouporn.com##iframe[width=\"300\"][height=\"250\"]\nyourasiansex.com##iframe[width=\"660\"]\nimagevenue.com##iframe[width=\"728\"][height=\"90\"]\nvideosgls.com.br##iframe[width=\"800\"]\nxxxgames.biz##img[height=\"250\"][width=\"300\"]\npornhub.com##img[src^=\"http://www.pornhub.com/album/strange/\"]\nimagewaste.com##img[style=\"border: 2px solid ; width: 160px; height: 135px;\"]\nimagewaste.com##img[style=\"border: 2px solid ; width: 162px; height: 135px;\"]\nsoniared.org##img[width=\"120\"]\nlukeisback.com##img[width=\"140\"][height=\"525\"]\nloralicious.com##img[width=\"250\"]\n171gifs.com##img[width=\"250\"][height=\"1000\"]\nloralicious.com##img[width=\"300\"]\n4sex4.com##img[width=\"300\"][height=\"244\"]\n171gifs.com,efukt.com,pornhub.com##img[width=\"300\"][height=\"250\"]\nnaughty.com##img[width=\"450\"]\nadultwork.com,babepicture.co.uk,imagetwist.com,naughty.com,sexmummy.com,tophentai.biz,tvgirlsgallery.co.uk,veronika-fasterova.cz,victoriarose.eu##img[width=\"468\"]\nclips4sale.com##img[width=\"468px\"]\nanetakeys.net,angelinacrow.org,cherryjul.eu,madisonparker.eu,nikkythorne.com,sexysandra.eu,sharkablue.eu,vanessasmoke.net##img[width=\"500\"]\n171gifs.com##img[width=\"500\"][height=\"150\"]\n171gifs.com##img[width=\"500\"][height=\"180\"]\n171gifs.com##img[width=\"640\"][height=\"90\"]\nfleshasiadaily.com##img[width=\"700\"]\n171gifs.com,babeshows.co.uk##img[width=\"728\"][height=\"90\"]\nmofosex.com##li[style=\"width: 385px; height: 380px; display: block; float: right;\"]\npicfoco.com##table[border=\"0\"][width=\"728\"]\nxcritic.com##table[cellpadding=\"10\"][width=\"600\"]\nxnxx.com##table[cellspacing=\"3\"][width=\"930\"]\nxnxx.com,xvideos.com##table[height=\"244\"][width=\"930\"]\nhomemademoviez.com##table[height=\"450\"][width=\"600\"]\nxvideos.com##table[height=\"480\"]\nloadsofpics.com##table[height=\"750\"]\nimagewaste.com##table[style=\"width: 205px; height: 196px;\"]\nstarcelebs.com##table[style=\"width:218px; border-width:1px; border-style:solid; border-color:black; border-collapse: collapse\"]\npornper.com,xxxkinky.com##table[width=\"100%\"][height=\"260\"]\ntaxidrivermovie.com##table[width=\"275\"]\nxvideos.com##table[width=\"342\"]\nhumoron.com##table[width=\"527\"]\nexgfpics.com##table[width=\"565\"]\nxcritic.com##table[width=\"610\"][height=\"150\"]\nimagecarry.com##table[width=\"610\"][height=\"260\"]\nmilkmanbook.com##table[width=\"620\"]\nfree-adult-anime.com##table[width=\"620\"][cellspacing=\"1\"][cellpadding=\"4\"][bordercolor=\"#FF33FF\"][border=\"0\"]\namateuralbum.net##table[width=\"722\"]\nhotlinkimage.com##table[width=\"728\"]\nexgfpics.com##table[width=\"750\"][height=\"248\"]\ngrannysexforum.com##table[width=\"768\"][height=\"226\"]\ntitsintops.com##table[width=\"780\"]\nnewsfilter.org##table[width=\"800px\"]\nanyvids.com##table[width=\"860\"][cellspacing=\"1\"][cellpadding=\"10\"][border=\"1\"]\nxnxx.com##table[width=\"900\"][height=\"244\"]\nmagnetxxx.com##table[width=\"900\"][height=\"250\"]\nxxvideo.us##table[width=\"950\"][height=\"252\"]\npetiteteenager.com##table[width=\"960\"][height=\"102\"]\nhomemademoviez.com##table[width=\"980\"]\nboobieblog.com##td[align=\"center\"][width=\"20%\"]\nskimtube.com##td[align=\"center\"][width=\"330\"]\nrude.com##td[height=\"25\"]\nfurnow.com##td[height=\"300\"][align=\"center\"]\nmotherless.com##td[style=\"padding-top: 10px; padding-left: 2px; padding-right: 4px;\"]\nezilon.com##td[width=\"120\"][align=\"center\"]\nasianforumer.com##td[width=\"160\"][valign=\"top\"][align=\"left\"]\nsharks-lagoon.fr##td[width=\"164\"][valign=\"top\"][bgcolor=\"#3366ff\"][align=\"center\"]\nxvideos.com##td[width=\"180\"]\nimagedunk.com##td[width=\"250\"]\nimagedax.net##td[width=\"300\"]\nxhamster.com##td[width=\"360\"]\npornwikileaks.com##td[width=\"43\"]\ntube8.com##topadblock\n!-----------------------Whitelists to fix broken sites------------------------!\n! *** easylist:easylist/easylist_whitelist.txt ***\n@@.com/b/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@.com/banners/$image,domain=catalogfavoritesvip.com|deliverydeals.co.uk|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@.com/image-*-$image,domain=affrity.com|catalogfavoritesvip.com|deliverydeals.co.uk|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|theperfectsaver.com|travelplus.com\n@@.net/image-*-$image,domain=affrity.com|catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@/advertising-glype/*$image,stylesheet\n@@/display-ad/*$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@/wordpress/wp-admin/*-ads-manager/*$~third-party\n@@/wordpress/wp-admin/*/adrotate/*$~third-party\n@@/wp-content/plugins/bwp-minify/min/?f=$script,stylesheet,~third-party\n@@||192.168.$xmlhttprequest\n@@||192.168.*/images/adv_\n@@||196.30.218.174/admentor/sirius_sdo_top.htm$subdocument,domain=sharedata.co.za\n@@||196.30.218.174/admentor/top_$subdocument,domain=fundsdata.co.za\n@@||208.100.24.244^$script,domain=sankakucomplex.com\n@@||209.222.8.217/crossdomain.xml$object-subrequest,domain=~p2p.adserver.ip\n@@||247realmedia.com^*/farecomp/\n@@||24ur.com/adserver/adall.\n@@||24ur.com/static/*/banners.js\n@@||2mdn.net/crossdomain.xml$domain=rte.ie\n@@||2mdn.net/instream/*/adsapi_$object-subrequest,domain=3news.co.nz|49ers.com|atlantafalcons.com|azcardinals.com|baltimoreravens.com|buccaneers.com|buffalobills.com|chargers.com|chicagobears.com|clevelandbrowns.com|colts.com|dallascowboys.com|denverbroncos.com|detroitlions.com|egirlgames.net|euronews.com|giants.com|globaltv.com|houstontexans.com|jaguars.com|kcchiefs.com|ktvu.com|miamidolphins.com|neworleanssaints.com|newyorkjets.com|packers.com|panthers.com|patriots.com|philadelphiaeagles.com|raiders.com|redskins.com|rte.ie|seahawks.com|steelers.com|stlouisrams.com|thecomedynetwork.ca|titansonline.com|vikings.com|wpcomwidgets.com\n@@||2mdn.net/instream/flash/*/adsapi.swf$object-subrequest\n@@||2mdn.net/instream/html5/ima3.js\n@@||2mdn.net/instream/video/client.js$domain=cbc.ca\n@@||2mdn.net/viewad/*/B*_$image,domain=jabong.com\n@@||2mdn.net^*/jwplayer.js$domain=doubleclick.net\n@@||2mdn.net^*/player.swf$domain=doubleclick.net\n@@||33universal.adprimemedia.com/vn/vna/data/ad.php?$object-subrequest\n@@||360gig.com/images/1_468x60.png\n@@||4cdn.org/adv/$image,domain=4chan.org\n@@||53.com/resources/images/ad-rotator/\n@@||6waves.com/ads/720x300/\n@@||6waves.com/js/adshow.js\n@@||961bobfm.com/Pics/Ad%20Images/LISTEN_LIVE_BUTTON.png\n@@||9msn.com.au/Services/Service.axd?callback=ninemsn_ads_contextualTargeting_$script,domain=ninemsn.com.au\n@@||9msn.com.au/share/com/adtrack/adtrack.js$domain=ninemsn.com.au\n@@||9msn.com.au^*/ads/ninemsn.ads$script\n@@||a.giantrealm.com/assets/vau/grplayer*.swf\n@@||a.intentmedia.net/adServer/$script,domain=hotwire.com\n@@||abbyy.com/adx/$~third-party\n@@||abc.com/streaming/ads/preroll_$object-subrequest,domain=abc.go.com\n@@||abcnews.com/assets/static/ads/fwps.js\n@@||abcnews.go.com/assets/static/ads/fwps.js\n@@||activelydisengaged.com/wp-content/uploads/*/ad$image\n@@||ad.103092804.com/st?ad_type=$subdocument,domain=wizard.mediacoderhq.com\n@@||ad.71i.de/crossdomain.xml$object-subrequest\n@@||ad.71i.de/global_js/magic/sevenload_magic.js$object-subrequest\n@@||ad.adorika.com/st?ad_type=ad&ad_size=728x90$script,domain=lshunter.tv\n@@||ad.adserve.com/crossdomain.xml$object-subrequest\n@@||ad.afy11.net/crossdomain.xml$object-subrequest\n@@||ad.doubleclick.net/ad/*.JABONG.COM$image,domain=jabong.com\n@@||ad.doubleclick.net/ad/can/cbs/*;pausead=1;$object-subrequest\n@@||ad.doubleclick.net/adi/*.JABONG.COM$document,subdocument,domain=jabong.com\n@@||ad.doubleclick.net/adj/*/cartalk.audio_player;$script,domain=cartalk.com\n@@||ad.doubleclick.net/adj/rstone.site/music/photos^$script,domain=rollingstone.com\n@@||ad.doubleclick.net/adx/nbcu.nbc/rewind$object-subrequest\n@@||ad.doubleclick.net/clk;*?https://dm.victoriassecret.com/product/$image,domain=freeshipping.com\n@@||ad.doubleclick.net/N7175/adj/fdc.forbes/welcome;id=fdc/welcome;pos=thoughtx;$script,domain=forbes.com\n@@||ad.doubleclick.net/pfadx/nbcu.nbc/rewind$object-subrequest\n@@||ad.ghfusion.com/constants.js$domain=gamehouse.com\n@@||ad.reebonz.com/www/\n@@||ad.smartclip.net/crossdomain.xml$object-subrequest\n@@||ad.wsod.com^$domain=scottrade.com\n@@||ad.zanox.com/ppc/$subdocument,domain=wisedock.at|wisedock.co.uk|wisedock.com|wisedock.de|wisedock.eu\n@@||ad2.zophar.net/images/logo.jpg$image\n@@||ad3.eu^$~third-party\n@@||ad4.liverail.com/?compressed|$domain=majorleaguegaming.com|pbs.org|wikihow.com\n@@||ad4.liverail.com/?LR_ORDER_ID=$object-subrequest,domain=volarvideo.com\n@@||ad4.liverail.com/?LR_PUBLISHER_ID=$object-subrequest,domain=playreplay.net\n@@||ad4.liverail.com/crossdomain.xml$object-subrequest\n@@||ad4.liverail.com/|$object-subrequest,domain=bizu.tv|foxsports.com.au|majorleaguegaming.com|pbs.org|wikihow.com\n@@||ad4.liverail.com/|$xmlhttprequest,domain=c.brightcove.com\n@@||ad4.liverail.com^*LR_VIDEO_ID=$object-subrequest,domain=bizu.tv\n@@||ad4game.com/ima3_preloader_*.swf$object,domain=escapefan.com\n@@||ad4game.com/www/delivery/video.php?zoneid=$script,domain=escapefan.com\n@@||adap.tv/control?$object-subrequest\n@@||adap.tv/crossdomain.xml$object-subrequest\n@@||adap.tv/redir/client/adplayer.swf$object-subrequest\n@@||adap.tv/redir/client/static/as3adplayer.swf$object-subrequest,domain=blogtalkradio.com|britannica.com|collegehumor.com|freeonlinegames.com|openfilmpod.com|stickam.com|talkingpointsmemo.com|thesource.com|wildearth.tv|wunderground.com\n@@||adap.tv/redir/client/swfloader.swf?$domain=box10.com|freeonlinegames.com|games.aarp.org|kizi.com|latimes.com|merriam-webster.com|puzzles.usatoday.com\n@@||adap.tv/redir/javascript/adaptvAdPlayer.js$domain=yepi.com\n@@||adap.tv/redir/javascript/vpaid.js\n@@||adap.tv/redir/plugins/*/adotubeplugin.swf?$domain=stickam.com\n@@||adbar.pp.ua^$~third-party\n@@||adblockplus.org^$elemhide,domain=easylist.adblockplus.org|reports.adblockplus.org\n@@||adboost.io^$~third-party\n@@||adbureau.net^*/images/adselector/$domain=brisbanetimes.com.au|smh.com.au|theage.com.au|watoday.com.au\n@@||adcode.mobi^$~third-party\n@@||addictinggames.com^*/mtvi_ads_reporting.js\n@@||adevents.com.au^$~third-party\n@@||adf.ly/images/ad*.png\n@@||adf.ly/static/image/ad_top_bg.png\n@@||adfarm.mediaplex.com^$domain=afl.com.au\n@@||adflyer.co.uk/adverts/$image\n@@||adgear.com^*/adgear.js$domain=lifemadedelicious.ca|tac.tv\n@@||adguard.com^$~third-party\n@@||adhostingsolutions.com/crossdomain.xml$object-subrequest\n@@||adimages.go.com/crossdomain.xml$object-subrequest\n@@||adm.fwmrm.net^*/AdManager.js$domain=msnbc.com|sky.com\n@@||adm.fwmrm.net^*/BrightcovePlugin.js$domain=9jumpin.com.au|9news.com.au|bigbrother.com.au|ninemsn.com.au\n@@||adm.fwmrm.net^*/LinkTag2.js$domain=6abc.com|7online.com|abc11.com|abc13.com|abc30.com|abc7.com|abc7chicago.com|abc7news.com|ahctv.com|animalplanet.com|destinationamerica.com|discovery.com|discoverylife.com|tlc.com\n@@||adm.fwmrm.net^*/TremorAdRenderer.$object-subrequest,domain=go.com\n@@||adm.fwmrm.net^*/videoadrenderer.$object-subrequest,domain=cnbc.com|espnfc.co.uk|espnfc.com|espnfc.com.au|espnfc.us|espnfcasia.com|go.com|nbc.com\n@@||adman.se^$~third-party\n@@||admedia.wsod.com^$domain=scottrade.com\n@@||admin.brightcove.com/viewer/*/brightcovebootloader.swf?$object,domain=gamesradar.com\n@@||adnet.mennonite.net^$domain=adnetonline.org\n@@||adnet.twitvid.com/crossdomain.xml$object-subrequest\n@@||adnews.pl^$~third-party\n@@||adotube.com/adapters/as3overstream*.swf?$domain=livestream.com\n@@||adotube.com/crossdomain.xml$object-subrequest\n@@||adpages.com^$~third-party\n@@||adphoto.eu^$~third-party\n@@||adroll.com/j/roundtrip.js$domain=onehourtranslation.com\n@@||ads.adap.tv/applist|$object-subrequest,domain=wunderground.com\n@@||ads.ahds.ac.uk^$~document\n@@||ads.awadserver.com^$domain=sellallautos.com\n@@||ads.badassembly.com^$~third-party\n@@||ads.belointeractive.com/realmedia/ads/adstream_mjx.ads/www.kgw.com/video/$script\n@@||ads.bizx.info/www/delivery/spc.php?zones$script,domain=nyctourist.com\n@@||ads.bridgetrack.com/ads_v2/script/btwrite.js$domain=ads.bridgetrack.com\n@@||ads.cnn.com/js.ng/*&cnn_intl_subsection=download$script\n@@||ads.ehealthcaresolutions.com/tag/$domain=familydoctor.org\n@@||ads.eu.com/ads-$~third-party\n@@||ads.expedia.com/event.ng/type=click&$domain=expedia.com\n@@||ads.forbes.com/realmedia/ads/*@videopreroll$script\n@@||ads.fox.com/fox/black_2sec_600.flv\n@@||ads.foxnews.com/api/*-slideshow-data.js?\n@@||ads.foxnews.com/js/ad.js\n@@||ads.foxnews.com/js/adv2.js\n@@||ads.foxnews.com/js/omtr_code.js\n@@||ads.fusac.fr^$~third-party\n@@||ads.globo.com^*/globovideo/player/\n@@||ads.golfweek.com^$~third-party\n@@||ads.healthline.com/v2/adajax?$subdocument\n@@||ads.intergi.com/adrawdata/*/ADTECH;$object-subrequest,domain=melting-mindz.com\n@@||ads.intergi.com/crossdomain.xml$object-subrequest\n@@||ads.jetpackdigital.com.s3.amazonaws.com^$image,domain=vibe.com\n@@||ads.jetpackdigital.com/jquery.tools.min.js?$domain=vibe.com\n@@||ads.jetpackdigital.com^*/_uploads/$image,domain=vibe.com\n@@||ads.m1.com.sg^$~third-party\n@@||ads.mefeedia.com/flash/flowplayer-3.1.2.min.js\n@@||ads.mefeedia.com/flash/flowplayer.controls-3.0.2.min.js\n@@||ads.mycricket.com/www/delivery/ajs.php?zoneid=$script,~third-party\n@@||ads.nyootv.com/crossdomain.xml$object-subrequest\n@@||ads.nyootv.com:8080/crossdomain.xml$object-subrequest\n@@||ads.pandora.tv/netinsight/text/pandora_global/channel/icf@\n@@||ads.pinterest.com^$~third-party\n@@||ads.pointroll.com/PortalServe/?pid=$xmlhttprequest,domain=thestreet.com\n@@||ads.reempresa.org^$domain=reempresa.org\n@@||ads.seriouswheels.com^$~third-party\n@@||ads.simplyhired.com^$domain=simply-partner.com|simplyhired.com\n@@||ads.smartfeedads.com^$~third-party\n@@||ads.socialtheater.com^$~third-party\n@@||ads.songs.pk/openx/www/delivery/\n@@||ads.spilgames.com/ad/$script,domain=games.co.uk\n@@||ads.sudpresse.be/adview.php?what=zone:$image\n@@||ads.tbs.com/html.ng/site=*600x400_$domain=tbs.com\n@@||ads.trackitdown.net/delivery/afr.php?zoneid=6&$subdocument,~third-party\n@@||ads.trutv.com/crossdomain.xml$object-subrequest\n@@||ads.trutv.com/html.ng/tile=*&site=trutv&tru_tv_pos=preroll&$object-subrequest\n@@||ads.undertone.com/*&zoneid=$domain=mlbtraderumors.com\n@@||ads.undertone.com/crossdomain.xml$object-subrequest\n@@||ads.yimg.com/a/$domain=autos.yahoo.com\n@@||ads.yimg.com/ev/eu/any/vint/videointerstitial*.js\n@@||ads.yimg.com/la/adv/y/yahooxtra$image,domain=movies.yahoo.com\n@@||ads.yimg.com^*/any/yahoologo$image\n@@||ads.yimg.com^*/search/b/syc_logo_2.gif\n@@||ads.yimg.com^*videoadmodule*.swf\n@@||ads1.msads.net^*/dapmsn.js$domain=msn.com\n@@||ads1.msn.com/ads/pronws/$image\n@@||ads1.msn.com/library/dap.js$domain=entertainment.msn.co.nz|msn.foxsports.com\n@@||adsbox.com.sg^$~third-party\n@@||adsbox.in^$~third-party\n@@||adseo.pl^$~third-party\n@@||adserver.adtech.de/?adrawdata$script,domain=we7.com\n@@||adserver.adtech.de/?advideo/*;vidas=pre_roll^$object-subrequest,domain=eurovisionsports.tv|talksport.co.uk|wrc.com\n@@||adserver.adtech.de/addyn/3.0/755/$domain=cartoonnetwork.co.nz|cartoonnetworkasia.com|cartoonnetworkhq.com|manutd.com\n@@||adserver.adtechus.com/addyn/$script,domain=teletoon.com\n@@||adserver.bigwigmedia.com/adfetch2.php?$object-subrequest,domain=y8.com\n@@||adserver.bigwigmedia.com/ingamead3.swf\n@@||adserver.bworldonline.com^\n@@||adserver.tvcatchup.com^$object-subrequest\n@@||adserver.vidcoin.com^*/get_campaigns?$xmlhttprequest\n@@||adserver.yahoo.com/a?*&l=head&$script,domain=yahoo.com\n@@||adserver.yahoo.com/a?*&l=VID&$xmlhttprequest,domain=yahoo.com\n@@||adserver.yahoo.com/a?*=headr$script,domain=mail.yahoo.com\n@@||adserver.yahoo.com/crossdomain.xml$object-subrequest\n@@||adserver.yahoo.com^*=weather&$domain=ca.weather.yahoo.com\n@@||adshost1.com/crossdomain.xml$object-subrequest\n@@||adshost1.com/ova/*.xml$object-subrequest,domain=4shared.com\n@@||adsign.republika.pl^$subdocument,domain=a-d-sign.pl\n@@||adsign.republika.pl^$~third-party\n@@||adsonar.com/js/adsonar.js$domain=ansingstatejournal.com|app.com|battlecreekenquirer.com|clarionledger.com|coloradoan.com|dailyrecord.com|dailyworld.com|delmarvanow.com|freep.com|greatfallstribune.com|guampdn.com|hattiesburgamerican.com|hometownlife.com|ithacajournal.com|jconline.com|livingstondaily.com|montgomeryadvertiser.com|mycentraljersey.com|news-press.com|pal-item.com|pnj.com|poughkeepsiejournal.com|press-citizen.com|pressconnects.com|rgj.com|shreveporttimes.com|stargazette.com|tallahassee.com|theadvertiser.com|thecalifornian.com|thedailyjournal.com|thenewsstar.com|thestarpress.com|thetimesherald.com|thetowntalk.com|visaliatimesdelta.com\n@@||adsonar.com/js/aslJSON.js$domain=engadget.com\n@@||adspot.lk^$~third-party\n@@||adsremote.scrippsnetworks.com/crossdomain.xml$object-subrequest\n@@||adsremote.scrippsnetworks.com/html.ng/adtype=*&playertype=$domain=gactv.com\n@@||adsremote.scrippsnetworks.com/js.ng/adtype=vsw$script,domain=food.com\n@@||adssecurity.com/app_themes/ads/images/\n@@||adswizz.com/www/components/$object-subrequest,domain=motogp.com\n@@||adswizz.com/www/delivery/swfindex.php?reqtype=adssetup&$object-subrequest,domain=motogp.com\n@@||adtech.de/?advideo/3.0/1215.1/3228528/*;vidas=pre_roll;$object-subrequest\n@@||adtech.de/apps/*.swf?targettag=$object,domain=cartoonnetworkasia.com\n@@||adtech.de/crossdomain.xml$object-subrequest,domain=~zattoo.com\n@@||adtechus.com/?advideo/$domain=snagfilms.com\n@@||adtechus.com/apps/$image,domain=teletoon.com|walmart.ca\n@@||adtechus.com/crossdomain.xml$object-subrequest\n@@||adtechus.com/dt/common/DAC.js$domain=wetpaint.com\n@@||adultvideotorrents.com/assets/blockblock/advertisement.js\n@@||adv.*.przedsiebiorca.pl^$~third-party\n@@||adv.blogupp.com^\n@@||adv.erti.se^$~third-party\n@@||adv.escreverdireito.com^$~third-party\n@@||adv.li^$~third-party\n@@||advantabankcorp.com/ADV/$~third-party\n@@||advertise.azcentral.com^$~third-party\n@@||advertise.fairfaxmedia.com.au^$domain=fairfaxmedia.com.au|myfairfax.com.au\n@@||advertise.movem.co.uk^$~third-party\n@@||advertiser.seek.co.nz^$~third-party\n@@||advertiser.seek.com.au^$~third-party\n@@||advertiser.trialpay.com^$~third-party\n@@||advertisers.io^$domain=advertisers.io\n@@||advertising.acne.se^$~third-party\n@@||advertising.autotrader.co.uk^$~third-party\n@@||advertising.racingpost.com^$image,script,stylesheet,~third-party,xmlhttprequest\n@@||advertising.scoop.co.nz^\n@@||advertising.theigroup.co.uk^$~third-party\n@@||advertising.utexas.edu^$~third-party\n@@||advertising.vrisko.gr^$~third-party\n@@||adverts.brighthouse.com/advertpro/servlet/view/banner/url/zone?*=preroll/2Black|$subdocument,domain=baynews9.com|cfnews13.com\n@@||adverts.cdn.tvcatchup.com^$object-subrequest\n@@||adverts.we7c.net/config/live/newusertraffickingconfig.json?$script,domain=we7.com\n@@||advisory.mtanyct.info/outsideWidget/widget.html?*.adPlacement=$subdocument\n@@||adweb.cis.mcmaster.ca^$~third-party\n@@||adweb.pl^$~third-party\n@@||adworks.com.co^$~third-party\n@@||ae.amgdgt.com/ads?t=$object-subrequest,domain=nfl.com\n@@||ae.amgdgt.com/crossdomain.xml$object-subrequest\n@@||affiliate.$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||affiliate.kickapps.com/crossdomain.xml$object-subrequest\n@@||affiliate.kickapps.com/service/\n@@||affiliate.skiamade.com^$subdocument,third-party\n@@||affiliates.$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||affiliates.mozilla.org^$subdocument,domain=facebook.com\n@@||affiliates.unpakt.com/widget/$subdocument\n@@||affiliates.unpakt.com/widget_loader/widget_loader.js\n@@||africam.com/adimages/\n@@||aimsworldrunning.org/images/AD_Box_$image,~third-party\n@@||airbaltic.com/banners/$~third-party\n@@||airguns.net/advertisement_images/\n@@||airguns.net/classifieds/ad_images/\n@@||airplaydirect.com/openx/www/images/$image\n@@||aiwip.com/advertisers/$image,~third-party,xmlhttprequest\n@@||aiwip.com/static/images/advertisers/$image,~third-party,xmlhttprequest\n@@||ajmadison.com/images/adverts/\n@@||aka-cdn-ns.adtech.de/apps/$object-subrequest,domain=manutd.com\n@@||akamai.net^*/ads/preroll_$object-subrequest,domain=bet.com\n@@||akamai.net^*/i.mallnetworks.com/images/*120x60$domain=ultimaterewardsearn.chase.com\n@@||akamai.net^*/pics.drugstore.com/prodimg/promo/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||akamaihd.net/hads-*.mp4?\n@@||akamaihd.net^*/videoAd.js$domain=zynga.com\n@@||al.com/static/common/js/ads/ads.js\n@@||albumartexchange.com/gallery/images/public/ad/$image\n@@||allot.com/Banners/*.swf$object\n@@||allulook4.com/min/?$stylesheet\n@@||alphabaseinc.com/images/display_adz/$~third-party\n@@||alusa.org/store/modules/blockadvertising/$~third-party\n@@||amazon-adsystem.com/aax2/amzn_ads.js$domain=deadspin.com|gawker.com|gizmodo.com|io9.com|jalopnik.com|jezebel.com|kotaku.com|lifehacker.com|weather.com\n@@||amazon-adsystem.com/e/cm?t=englcultrevi-21&$document,subdocument,domain=englishculturalrevival.com\n@@||amazon-adsystem.com/widgets/q?$image,domain=choose-one.com\n@@||amazon-adsystem.com^$document,subdocument,domain=affrity.com\n@@||amazon-adsystem.com^$domain=affrity.com\n@@||amazon.com/widgets/$domain=sotumblry.com\n@@||amazonaws.com/adplayer/player/newas3player.swf?$object,domain=india.com\n@@||amazonaws.com/banners/$image,domain=livefromdarylshouse.com|pandasecurity.com\n@@||amazonaws.com/bt-dashboard-logos/$domain=signal.co\n@@||amazonaws.com^*/sponsorbanners/$image,domain=members.portalbuzz.com\n@@||amctv.com/commons/advertisement/js/AdFrame.js\n@@||amiblood.com/Images/ad.jpg\n@@||amwa.net/sites/default/files/styles/promotion_image/public/promotions/$~third-party\n@@||ananzi.co.za/ads/$~third-party\n@@||andcorp.com.au^*.swf?clicktag=\n@@||andohs.net/crossdomain.xml$object-subrequest\n@@||andomediagroup.com/crossdomain.xml$object-subrequest\n@@||annfammed.org/adsystem/$image,~third-party\n@@||aolcdn.com/ads/adsWrapper.js$domain=aol.com|engadget.com|games.com|huffingtonpost.com|mapquest.com|stylelist.ca\n@@||aolcdn.com/ads/adsWrapperIntl.js$domain=huffingtonpost.co.uk\n@@||aolcdn.com/os_merge/?file=/aol/*.js&$script\n@@||aolcdn.com^*/adhads.css$domain=aol.com\n@@||aone-soft.com/style/images/ad*.jpg\n@@||api.cirqle.nl^*&advertiserId=$script,xmlhttprequest\n@@||api.hexagram.com^$domain=scribol.com\n@@||api.paymentwall.com^$domain=adguard.com\n@@||apmebf.com/ad/$domain=betfair.com\n@@||apmebf.com^$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||apmex.com/resources/ads/\n@@||app.promo.tubemogul.com/feed/placement.html?id=$script,domain=comedy.com\n@@||apple.com^*/ads/$object,object-subrequest,xmlhttprequest\n@@||apple.com^*/images/ad-$image,domain=apple.com\n@@||apple.com^*/images/ads_$image,domain=apple.com\n@@||apple.com^*/includes/ads\n@@||apple.com^*/video-ad.html\n@@||applegate.co.uk/stats/recordclick.html?$xmlhttprequest\n@@||apps.digmyweb.com/ads?$xmlhttprequest\n@@||apwg.org/images/sponsors/\n@@||archaeologydataservice.ac.uk/images/ads_$image\n@@||archiproducts.com/adv/\n@@||architecturaldigest.com/etc/designs/ad/images/shell/ad-sprite.png\n@@||area51.stackexchange.com/ads/$image\n@@||arti-mediagroup.com/crossdomain.xml$object-subrequest\n@@||arti-mediagroup.com/flowplayer/amta_plugin.swf$object-subrequest\n@@||as.bankrate.com/RealMedia/ads/adstream_mjx.ads/$script,~third-party\n@@||as.medscape.com/html.ng/transactionid%$subdocument,domain=medscape.com\n@@||as.webmd.com/html.ng/transactionid=$object-subrequest,script,subdocument\n@@||asiasold.com/assets/home/openx/$image,~third-party\n@@||asrock.com/images/ad-$~third-party\n@@||assets.rewardstyle.com^$domain=glamour.com|itsjudytime.com\n@@||assiniboine.mb.ca/files/intrasite_ads/\n@@||assoc-amazon.com/widgets/$domain=sotumblry.com\n@@||assoc-amazon.com^*/js/swfobject_$domain=gactv.com\n@@||asterisk.org/sites/asterisk/files/mce_files/graphics/ads/ad-training.png\n@@||athena365.com/web/components/ads/rma.html\n@@||att.com/images/*/admanager/\n@@||au.adserver.yahoo.com/a?$subdocument,domain=dating.yahoo.com.au\n@@||auditude.com/adserver?$object-subrequest,domain=ap.org|majorleaguegaming.com|newsinc.com\n@@||auditude.com/crossdomain.xml$object-subrequest\n@@||auditude.com^*/AuditudeAdUnit.swf$object-subrequest\n@@||auditude.com^*/auditudebrightcoveplugin.swf$object-subrequest,domain=channel5.com\n@@||auditude.com^*/auditudeosmfproxyplugin.swf$object-subrequest,domain=dramafever.com|majorleaguegaming.com\n@@||autogespot.info/upload/ads/$image\n@@||autotrader.co.uk/advert/$xmlhttprequest\n@@||autotrader.co.uk/static/*/images/adv/icons.png\n@@||autotrader.co.uk^*/advert/$~third-party,xmlhttprequest\n@@||autotrader.co.uk^*_adverts/$xmlhttprequest\n@@||avclub.com/ads/av-video-ad/$xmlhttprequest\n@@||aviationclassifieds.com/adimg/$image,~third-party\n@@||aviationdocumentstorage.com/Av_Docs/CSS/ADS-1.css\n@@||aviationexplorer.com/airline_aviation_ads/\n@@||awin1.com/cshow.php?s=$image,domain=deliverydeals.co.uk\n@@||awltovhc.com^$object,domain=affrity.com\n@@||backpackinglight.com/backpackinglight/ads/banner-$~third-party\n@@||bafta.org/static/site/javascript/banners.js\n@@||bahtsold.com/assets/home/openx/Thailand/$image,~third-party\n@@||bahtsold.com/assets/images/ads/no_img_main.png\n@@||bankofamerica.com^*?adx=$xmlhttprequest\n@@||banner.pumpkinpatchkids.com/www/delivery/$domain=pumpkinpatch.co.nz|pumpkinpatch.co.uk|pumpkinpatch.com|pumpkinpatch.com.au\n@@||banner4five.com/banners/$~third-party\n@@||bannerfans.com/banners/$image,~third-party\n@@||bannerist.com/images/$image,domain=bannerist.com\n@@||banners.gametracker.rs^$image\n@@||banners.goldbroker.com/widget/\n@@||banners.wunderground.com^$image\n@@||bannersnack.net^$domain=bannersnack.com\n@@||barafranca.*/banner.php|\n@@||bbc.co.uk^*/adsense_write.js$domain=bbc.com\n@@||bbc.co.uk^*/advert.js$domain=bbc.com\n@@||bbc.co.uk^*/adverts.js$domain=bbc.com\n@@||bbci.co.uk^*/adsense_write.js$domain=bbc.com\n@@||bbci.co.uk^*/adverts.js$domain=bbc.co.uk|bbc.com\n@@||bbcimg.co.uk^*/adsense_write.js$domain=bbc.com\n@@||bbcimg.co.uk^*/advert.js$domain=bbc.co.uk|bbc.com\n@@||bbcimg.co.uk^*/adverts.js$domain=bbc.co.uk|bbc.com\n@@||bbcimg.co.uk^*/SmpAds.swf$object-subrequest,domain=bbc.com\n@@||beatthebrochure.com/js/jquery.popunder.js\n@@||bebusiness.eu/js/adview.js\n@@||bellaliant.net^*/banners/ads/$image,~third-party\n@@||betar.gov.bd/wp-content/plugins/useful-banner-manager/\n@@||betar.gov.bd/wp-content/uploads/useful_banner_manager_banners/\n@@||betteradvertising.com/logos/$image,domain=ghostery.com\n@@||bigfishaudio.com/banners/$image\n@@||bikeexchange.com.au/adverts/\n@@||bing.com/images/async?q=$xmlhttprequest\n@@||bing.com/maps/Ads.ashx$xmlhttprequest\n@@||bing.net/images/thumbnail.aspx?q=$image\n@@||blackshoppingchannel.com^*/ad_agency/$~third-party\n@@||blackshoppingchannel.com^*/com_adagency/$~third-party\n@@||blastro.com/pl_ads.php?$object-subrequest\n@@||bloomberg.com/rapi/ads/js_config.js\n@@||bluetooth.com/banners/\n@@||bluetree.co.uk/hji/advertising.$object-subrequest\n@@||bnbfinder.com/adv_getCity.php?$xmlhttprequest\n@@||boats.com/ad/$~third-party,xmlhttprequest\n@@||bonappetit.com/ams/page-ads.js?\n@@||bonappetit.com^*/cn.dart.js\n@@||boracay.mobi/boracay/imageAds/$image,domain=boracay.tel\n@@||boston.com/images/ads/yourtown_social_widget/$image\n@@||box10.com/advertising/*-preroll.swf\n@@||boxedlynch.com/advertising-gallery.html\n@@||brainient.com/crossdomain.xml$object-subrequest\n@@||brightcove.com^*bannerid$third-party\n@@||britannica.com/resources/images/shared/ad-loading.gif\n@@||britishairways.com/cms/global/styles/*/openx.css\n@@||brocraft.net/js/banners.js\n@@||brothersoft.com/gads/coop_show_download.php?soft_id=$script\n@@||bsvideos.com/json/ad.php?\n@@||bthomehub.home/images/adv_\n@@||btrll.com/crossdomain.xml$object-subrequest\n@@||btrll.com/vast/$object-subrequest,domain=nfl.com\n@@||burbankleader.com/hive/images/adv_\n@@||burfordadvertising.com/advertising/$~third-party\n@@||business-supply.com/images/adrotator/\n@@||butlereagle.com/static/ads/\n@@||buy.com/buy_assets/addeals/$~third-party\n@@||buyandsell.ie/ad/$~third-party\n@@||buyandsell.ie/ads/$~third-party\n@@||buyandsell.ie/images/ads/$~third-party\n@@||buyforlessok.com/advertising/\n@@||buyselltrade.ca/adimages/$image,~third-party\n@@||bworldonline.com/adserver/\n@@||cache.nymag.com/scripts/ad_manager.js\n@@||cameralabs.com/PG_library/Regional/US/Love_a_Coffee_120x240.jpg\n@@||campingworld.com/images/AffiliateAds/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||canadianlisted.com/css/*/ad/index.css\n@@||candystand.com/assets/images/ads/$image\n@@||capitalone360.com/js/adwizard/adwizard_homepage.js?\n@@||caranddriver.com/tools/iframe/?$subdocument\n@@||carzone.ie/es-ie/*advert$image,script,stylesheet\n@@||cas.clickability.com/cas/cas.js?r=$script,domain=kmvt.com\n@@||cbc.ca/ads/*.php?$xmlhttprequest\n@@||cbs.com/sitecommon/includes/cacheable/combine.php?*/adfunctions.\n@@||cbsistatic.com/cnwk.1d/ads/common/manta/adfunctions*.js$domain=cnettv.cnet.com\n@@||cbslocal.com/flash/videoads.*.swf$object,domain=radio.com\n@@||cc-dt.com/link/tplimage?lid=$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||cdn.betrad.com/pub/icon1.png$domain=usanetwork.com\n@@||cdn.complexmedianetwork.com/cdn/agenda.complex.com/js/jquery.writecapture.js\n@@||cdn.complexmedianetwork.com/cdn/agenda.complex.com/js/jwplayerl.js\n@@||cdn.complexmedianetwork.com/cdn/agenda.complex.com/js/swfobject.js\n@@||cdn.complexmedianetwork.com/cdn/agenda.complex.com/js/writecapture.js\n@@||cdn.cpmstar.com/cached/js/$script,domain=xfire.com\n@@||cdn.cpmstar.com/cached/swf/preplay.swf$object,domain=xfire.com\n@@||cdn.inskinmedia.com/*inskinfiles/flvs/$object-subrequest,domain=tvcatchup.com\n@@||cdn.inskinmedia.com/isfe/4.1/swf/unitcontainer2.swf$domain=tvcatchup.com\n@@||cdn.inskinmedia.com^*/brightcove3.js$domain=virginmedia.com\n@@||cdn.inskinmedia.com^*/ipcgame.js?$domain=mousebreaker.com\n@@||cdn.intentmedia.net^$image,script,domain=travelzoo.com\n@@||cdn.pch.com/spectrummedia/spectrum/adunit/\n@@||cdn.travidia.com/fsi-page/$image\n@@||cdn.travidia.com/rop-ad/$image\n@@||cdn.travidia.com/rop-sub/$image\n@@||cdn.turner.com^*/video/336x280_ad.gif\n@@||cdn.vdopia.com^$object,object-subrequest,script,domain=indiatvnews.com|intoday.in|moneycontrol.com\n@@||cellc.co.za/adserv/$image,object,script,~third-party\n@@||cerebral.s4.bizhat.com/banners/$image,~third-party\n@@||channel4.com/media/scripts/oasconfig/siteads.js\n@@||charlieandmekids.com/www/delivery/$script,domain=charlieandmekids.co.nz|charlieandmekids.com.au\n@@||chase.com/content/*/ads/$image,~third-party\n@@||chase.com^*/adserving/\n@@||cheapoair.ca/desktopmodules/adsales/adsaleshandle.ashx?$xmlhttprequest\n@@||cheapoair.com/desktopmodules/adsales/adsaleshandle.ashx?$xmlhttprequest\n@@||checkerdist.com/product-detail.cfm?*advert_id=$~third-party\n@@||checkm8.com/adam/$script,domain=askqology.com\n@@||checkm8.com/crossdomain.xml$object-subrequest\n@@||chemistwarehouse.com.au/images/AdImages/\n@@||chibis.adotube.com/appruntime/player/$object,object-subrequest\n@@||chibis.adotube.com/appRuntime/swfobject/$script\n@@||chibis.adotube.com/napp/$object,object-subrequest\n@@||chicavenue.com.au/assets/ads/$image,~third-party\n@@||christianhouseshare.com.au/images/publish_ad1.jpg\n@@||cio.com/www/js/ads/gpt_includes.js\n@@||classifiedads.com/adbox.php$xmlhttprequest\n@@||classifieds.wsj.com/ad/$~third-party\n@@||classistatic.com^*/banner-ads/\n@@||cleveland.com/static/common/js/ads/ads.js\n@@||clickbd.com^*/ads/$image,~third-party\n@@||cloudfront.net/_ads/$xmlhttprequest,domain=jobstreet.co.id|jobstreet.co.in|jobstreet.co.th|jobstreet.com|jobstreet.com.my|jobstreet.com.ph|jobstreet.com.sg|jobstreet.vn\n@@||club777.com/banners/$~third-party\n@@||clustrmaps.com/images/clustrmaps-back-soon.jpg$third-party\n@@||cnet.com/ad/ad-cookie/*?_=$xmlhttprequest\n@@||coastlinepilot.com/hive/images/adv_\n@@||collective-media.net/crossdomain.xml$object-subrequest\n@@||collective-media.net/pfadx/wtv.wrc/$object-subrequest,domain=wrc.com\n@@||colorado.gov/airquality/psi/adv.png\n@@||comboadmedia.adperfect.com^$domain=classifieds.nydailynews.com\n@@||commarts.com/Images/missinganissue_ad.gif\n@@||completemarkets.com/pictureHandler.ashx?adid=$image,~third-party\n@@||computerworld.com/resources/scripts/lib/doubleclick_ads.js$script\n@@||comsec.com.au^*/homepage_banner_ad.gif\n@@||condenast.co.uk/scripts/cn-advert.js$domain=cntraveller.com\n@@||connectingdirectories.com/advertisers/$~third-party,xmlhttprequest\n@@||constructalia.com/banners/$image,~third-party\n@@||contactmusic.com/advertpro/servlet/view/dynamic/$object-subrequest\n@@||content.ad/images/$image,domain=wmpoweruser.com\n@@||content.datingfactory.com/promotools/$script\n@@||content.hallmark.com/scripts/ecards/adspot.js\n@@||copesdistributing.com/images/adds/banner_$~third-party\n@@||cosmopolitan.com/ams/page-ads.js\n@@||cosmopolitan.com/cm/shared/scripts/refreshads-$script\n@@||countryliving.com/ams/page-ads.js\n@@||cracker.com.au^*/cracker-classifieds-free-ads.$~document\n@@||cricbuzz.com/includes/ads/images/wct20/$image\n@@||cricbuzz.com/includes/ads/images/worldcup/more_arrow_$image\n@@||cricbuzz.com/includes/ads/schedule/$~third-party\n@@||cricketcountry.com/js/ad-gallery.js$script\n@@||csair.com/*/adpic.js\n@@||csmonitor.com/advertising/sharetools.php$subdocument\n@@||csoonline.com/js/doubleclick_ads.js?\n@@||css.washingtonpost.com/wpost/css/combo?*/ads.css\n@@||css.washingtonpost.com/wpost2/css/combo?*/ads.css\n@@||css.wpdigital.net/wpost/css/combo?*/ads.css\n@@||ctv.ca/players/mediaplayer/*/AdManager.js^\n@@||cubeecraft.com/openx/$~third-party\n@@||cvs.com/webcontent/images/weeklyad/adcontent/$~third-party\n@@||cydiaupdates.net/CydiaUpdates.com_600x80.png\n@@||d1sp6mwzi1jpx1.cloudfront.net^*/advertisement_min.js$domain=reelkandi.com\n@@||d3con.org/data1/$image,~third-party\n@@||d3pkae9owd2lcf.cloudfront.net/mb102.js$domain=wowhead.com\n@@||da-ads.com/truex.html?$domain=deviantart.com\n@@||dailycaller.com/wp-content/plugins/advertisements/$script\n@@||dailyhiit.com/sites/*/ad-images/\n@@||dailymail.co.uk^*/googleads--.js\n@@||dailymotion.com/videowall/*&clickTAG=http\n@@||dailypilot.com/hive/images/adv_\n@@||danielechevarria.com^*/advertising-$~third-party\n@@||dart.clearchannel.com/crossdomain.xml$object-subrequest\n@@||data.panachetech.com/crossdomain.xml$object-subrequest\n@@||data.panachetech.com/|$object-subrequest,domain=southpark.nl\n@@||davescomputertips.com/images/ads/paypal.png\n@@||dawanda.com^*/ad_center.css$~third-party\n@@||dawanda.com^*/adcenter.js$~third-party\n@@||dc.tremormedia.com/crossdomain.xml$object-subrequest\n@@||dealerimg.com/Ads/$image\n@@||delicious.com^*/compose?url=$xmlhttprequest\n@@||deliciousdigital.com/data/our-work/advertising/\n@@||delish.com/cm/shared/scripts/refreshads-*.js\n@@||delivery.anchorfree.us/player-multi.php?$subdocument,domain=anchorfree.us\n@@||delvenetworks.com/player/*_ad_$subdocument\n@@||demo.inskinmedia.com^$object-subrequest,domain=tvcatchup.com\n@@||deviantart.net/fs*/20*_by_$image,domain=deviantart.com\n@@||deviantart.net/minish/advertising/downloadad_splash_close.png\n@@||digiads.com.au/images/shared/misc/ad-disclaimer.gif\n@@||digsby.com/affiliate/banners/$image,~third-party\n@@||direct.fairfax.com.au/hserver/*/site=vid.*/adtype=embedded/$script\n@@||directorym.com/articles_media/$domain=localmarket.autismsupportnetwork.com\n@@||directtextbook.com^*.php?ad_\n@@||discovery.com/components/consolidate-static/?files=*/adsense-\n@@||disney.com.au/global/swf/banner300x250.swf\n@@||disney.go.com/dxd/data/ads/game_ad.xml?gameid=$object-subrequest\n@@||disneyphotopass.com/adimages/\n@@||disruptorbeam.com/assets/uploaded/ads/$image,~third-party\n@@||dmgt.grapeshot.co.uk^$domain=dailymail.co.uk\n@@||dmstatic.com^*/adEntry.js$domain=daft.ie\n@@||doityourself.com^*/shared/ads.css$stylesheet\n@@||dolidoli.com/images/ads-\n@@||dolimg.com^*/dxd_ad_code.swf$domain=go.com\n@@||dolphinimaging.com/banners.js\n@@||dolphinimaging.com/banners/\n@@||domandgeri.com/banners/$~third-party\n@@||dotomi.com/commonid/match?$script,domain=betfair.com\n@@||doubleclick.net/ad/*.linkshare/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||doubleclick.net/ad/can/chow/$object-subrequest\n@@||doubleclick.net/ad/can/tvcom/$object-subrequest,domain=tv.com\n@@||doubleclick.net/adi/*.mlb/photos;*;sz=300x250;$subdocument,domain=mlb.com\n@@||doubleclick.net/adi/*.mlb/scoreboard;pageid=scoreboard_ymd;sz=$subdocument,domain=mlb.com\n@@||doubleclick.net/adi/amzn.*;ri=digital-music-track;$subdocument\n@@||doubleclick.net/adi/apts.com/home;pos=$subdocument,domain=apartments.com\n@@||doubleclick.net/adi/ebay.*/video;$subdocument,domain=ebay.com\n@@||doubleclick.net/adi/mlb.mlb/*;pageid=cutfour;sz=$subdocument,domain=mlb.mlb.com\n@@||doubleclick.net/adi/mlb.mlb/*^free_agent_tracker_12^$subdocument,domain=mlb.com\n@@||doubleclick.net/adi/sny.tv/media;$subdocument,domain=sny.tv\n@@||doubleclick.net/adi/sony.oz.opus/*;pos=bottom;$subdocument,domain=doctoroz.com\n@@||doubleclick.net/adi/yesnetwork.com/media;$subdocument,domain=yesnetwork.com\n@@||doubleclick.net/adi/zillow.hdp/$subdocument,domain=zillow.com\n@@||doubleclick.net/adj/bbccom.live.site.auto/*^sz=1x1^$script,domain=bbc.com\n@@||doubleclick.net/adj/cm.peo/*;cmpos=$script,domain=people.com\n@@||doubleclick.net/adj/cm.tim/*;cmpos=$script,domain=time.com\n@@||doubleclick.net/adj/ctv.muchmusicblog.com/$script\n@@||doubleclick.net/adj/gamesco.socialgaming/$script,domain=ghsrv.com\n@@||doubleclick.net/adj/imdb2.consumer.video/*;sz=320x240,$script\n@@||doubleclick.net/adj/kval/health;pos=gallerytop;sz=$script,domain=kval.com\n@@||doubleclick.net/adj/nbcu.nbc/videoplayer-$script\n@@||doubleclick.net/adj/oiq.man.$script,domain=manualsonline.com\n@@||doubleclick.net/adj/pch.candystand/video;pos=box;sz=300x250;a=$script,domain=candystand.com\n@@||doubleclick.net/adj/pong.all/*;dcopt=ist;$script\n@@||doubleclick.net/adj/profootballreference.fsv/$script,domain=pro-football-reference.com\n@@||doubleclick.net/adj/wiredcom.dart/*;sz=300x250;*;kw=top;$script,domain=wired.com\n@@||doubleclick.net/adj/yorkshire.jp/main-section;*;sz=120x600,160x600$script,domain=yorkshirepost.co.uk\n@@||doubleclick.net/ddm/clk/*://www.amazon.jobs/jobs/$subdocument,domain=glassdoor.com\n@@||doubleclick.net/N2605/adi/MiLB.com/scoreboard;*;sz=728x90;$subdocument\n@@||doubleclick.net/N6545/adj/*_music/video;$script,domain=virginmedia.com\n@@||doubleclick.net/N6619/adj/zillow.hdp/$script,domain=zillow.com\n@@||doubleclick.net/pfadx/*/cbs/$object-subrequest,domain=latimes.com\n@@||doubleclick.net/pfadx/nfl.*/html5;$xmlhttprequest,domain=nfl.com\n@@||doubleclick.net/pfadx/umg.*;sz=10x$script\n@@||doubleclick.net^*/ad/nfl.*.smartclip/$object-subrequest,domain=nfl.com\n@@||doubleclick.net^*/adi/MiLB.com/multimedia^$subdocument,domain=milb.com\n@@||doubleclick.net^*/adi/MiLB.com/standings^$subdocument,domain=milb.com\n@@||doubleclick.net^*/adj/wwe.shows/ecw_ecwreplay;*;sz=624x325;$script\n@@||doubleclick.net^*/fdc.forbes/*;pos=thought;$script,domain=forbes.com\n@@||doubleclick.net^*/ftcom.*;sz=1x1;*;pos=refresh;$script,domain=ft.com\n@@||doubleclick.net^*/ndm.tcm/video;$script,domain=player.video.news.com.au\n@@||doubleclick.net^*/targeted.optimum/*;sz=968x286;$image,popup,script\n@@||doubleclick.net^*/videoplayer*=worldnow$subdocument,domain=ktiv.com|wflx.com\n@@||dove.saymedia.com^$xmlhttprequest\n@@||downvids.net/ads.js\n@@||drf-global.com/servicegateway/globaltrips-shopping-svcs/drfadserver-1.0/pub/adserver.js?$domain=igougo.com|travelocity.com\n@@||drf-global.com/servicegateway/globaltrips-shopping-svcs/drfadserver-1.0/pub/drfcomms/advertisers?$script,domain=igougo.com|travelocity.com\n@@||drf-global.com/servicegateway/globaltrips-shopping-svcs/drfadserver-1.0/pub/drfcomms/drf?$script,domain=igougo.com|travelocity.com\n@@||drizzle.monsoonads.com/ip.php$object-subrequest,domain=bollywoodhungama.com\n@@||dropzone.no/sap/its/gfx/top_ad_$image,~third-party\n@@||drunkard.com/banners/drunk-korps-banner.jpg\n@@||drunkard.com/banners/drunkard-gear.jpg\n@@||drunkard.com/banners/modern-drunkard-book.jpg\n@@||drupal.org^*/revealads.png\n@@||dstw.adgear.com/crossdomain.xml$object-subrequest\n@@||dstw.adgear.com/impressions/int/as=*.json?ag_r=$object-subrequest,domain=hot899.com|nj1015.com|streamtheworld.com|tsn.ca\n@@||dwiextreme.com/banners/dwiextreme$image\n@@||dx.com/openx/$image,~third-party\n@@||dyncdn.buzznet.com/catfiles/?f=dojo/*.googleadservices.$script\n@@||eagleboys.com.au/eagleboys/*/ads/$~third-party\n@@||earthcam.com/swf/ads5.swf\n@@||earthtechling.com^*/imasters-wp-adserver-styles.css\n@@||earthtv.com/player_tmp/overlayad.js\n@@||easyfundraising.org.uk/images/home/*-120x60.$image\n@@||ebayrtm.com/rtm?rtmcmd&a=json&cb=parent.$script\n@@||eboundservices.com/iframe/newads/iframe.php?stream=$subdocument\n@@||economist.com.na^*/banners/cartoon_\n@@||edgar.pro-g.co.uk/data/*/videos/adverts/$object-subrequest\n@@||edge.andomedia.com^*/ando/files/$object-subrequest,domain=radiou.com\n@@||edgesuite.net/general/ibn/ads/*.flv$object-subrequest,domain=ibnlive.in.com\n@@||edmontonjournal.com/js/adsync/adsynclibrary.js\n@@||eduspec.science.ru.nl^*-images/ad-\n@@||eeweb.com/comics/*_ads-$image\n@@||egotastic.us.intellitxt.com/intellitxt/front.asp\n@@||ehow.co.uk/frames/ad.html?$subdocument\n@@||eightinc.com/admin/zone.php?zoneid=$xmlhttprequest\n@@||elephantjournal.com/ad_art/\n@@||eluxe.ca^*_doubleclick.js*.pagespeed.$script\n@@||emailbidding.com^*/advertiser/$~third-party,xmlhttprequest\n@@||emergencymedicalparamedic.com/wp-content/themes/AdSense/style.css\n@@||emjcd.com^$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||empireonline.com/images/image_index/300x250/\n@@||engine.adzerk.net/ados?$script,domain=stackoverflow.com\n@@||englishanimes.com/wp-content/themes/englishanimes/js/pop.js\n@@||engrish.com/wp-content/uploads/*/advertisement-$image,~third-party\n@@||epicgameads.com/crossdomain.xml$object-subrequest\n@@||epicgameads.com/games/getSwfPath.php?$object-subrequest,domain=freewebarcade.com\n@@||epicgameads.com/games/mec_release_*.swf?$object-subrequest,domain=freewebarcade.com\n@@||eplayerhtml5.performgroup.com/js/tsEplayerHtml5/js/Eplayer/js/modules/bannerview/bannerview.main.js?\n@@||equippers.com/abm.aspx?$script\n@@||equippers.com/absolutebm.aspx?$script\n@@||espn.co.uk/ads/gamemodule_v0.2.swf$object\n@@||espn.go.com^*/espn360/banner?$subdocument\n@@||espncdn.com/combiner/*/admgr.$script,domain=espn.go.com\n@@||espncdn.com/combiner/c?*/ads.css$domain=espn.go.com\n@@||espncdn.com/combiner/c?*/advertising.$stylesheet,domain=espnfc.com\n@@||espngp.com/ads/*_sprite$domain=espnf1.com\n@@||esquire.com/ams/page-ads.js?$script\n@@||evanscycles.com/ads/$image,~third-party\n@@||eventcinemas.co.nz^*_adhub_server_$script\n@@||eventim.de/obj/basic/ad2_obj/layout/\n@@||ewallpapers.eu/ads/logo.jpg\n@@||exoclick.com/ads.php?*login$script,domain=imgserve.net|imgtiger.com\n@@||expedia.co.nz/html.cms/tpid=*&adsize=\n@@||expedia.com/daily/common/msi.asp\n@@||expedia.com/html.cms/TPID=*&ADSIZE=$subdocument\n@@||expedia.com/js.ng/*&PLACEMENT=CXHOMECORE_$script\n@@||expedia.com/minify/ads-min-*.js?\n@@||explosm.net/comics/$image\n@@||explosm.net/db/files/comics/$image\n@@||extras.chron.com/banners/*/social_icons/$image,subdocument\n@@||ezone.com/banners/swfs/$object,domain=ezone.com\n@@||f-cdn.com/build/js/ads/main.js?$domain=freelancer.com\n@@||faceinhole.com/adsense.swf$object-subrequest\n@@||farecompare.com^*/farecomp/\n@@||fbexternal-a.akamaihd.net/safe_image.php?$image,domain=facebook.com\n@@||feedroom.speedera.net/static.feedroom.com/affiliate/\n@@||feeds.videogamer.com^*/videoad.xml?$object-subrequest\n@@||festina.com/txt/advertising.xml$object-subrequest\n@@||ff.connextra.com^$domain=pinnaclesports.com\n@@||fifa.com/flash/videoplayer/libs/advert_$object-subrequest\n@@||files.coloribus.com^$image,~third-party\n@@||filestage.to/design/player/player.swf?*&popunder=$object,third-party\n@@||fixtracking.com/images/ad-$image,~third-party\n@@||flashgames247.com/advertising/ima-vast-preroll.swf$object,domain=flashgames247.com\n@@||flipboard.com/media/uploads/adv_$image,~third-party\n@@||flipkart.com/affiliate/displayWidget?$subdocument,domain=affrity.com\n@@||flossmanuals.net/site_static/xinha/plugins/DoubleClick/$~third-party\n@@||flyerservices.com/cached_banner_pages/*bannerid=\n@@||flysaa.com^*/jquery.adserver.js\n@@||fmpub.net/site/$domain=theawl.com\n@@||fncstatic.com^*/fox411/fox-411-head-728x90.png$domain=foxnews.com\n@@||folklands.com/health/advertise_with_us_files/$~third-party\n@@||forbesimg.com/assets/js/forbes/right_rail_sticky_ad.js$domain=forbes.com\n@@||forex.com/adx/$image\n@@||fortune.com/data/chartbeat/$xmlhttprequest\n@@||forums.realgm.com/banners/\n@@||freeads.in/classifieds/common/postad.css\n@@||freeads.in/freead.png\n@@||freeonlinegames.com/advertising/adaptv-as3.swf?$object\n@@||freeonlinegames.com/advertising/google-loader.swf?$object\n@@||freeride.co.uk/img/admarket/$~third-party\n@@||freeviewnz.tv^*/uploads/ads/\n@@||freeworldgroup.com/googleloader/GoogleAds.swf?contentId=FWG_Game_PreLoader&$object,domain=freeworldgroup.com\n@@||fs-freeware.net/images/jdownloads/downloadimages/banner_ads.png\n@@||fsdn.com/sd/topics/advertising_64.png$domain=slashdot.org\n@@||funiaste.net/obrazki/*&adtype=\n@@||g.doubleclick.net/aclk?$subdocument,domain=nedbank.co.za\n@@||g.doubleclick.net/crossdomain.xml$object-subrequest,domain=~newgrounds.com\n@@||g.doubleclick.net/gampad/ads?$object-subrequest,domain=majorleaguegaming.com|nfl.com|player.rogersradio.ca|twitch.tv|viki.com|volarvideo.com|worldstarhiphop.com\n@@||g.doubleclick.net/gampad/ads?$script,domain=app.com|argusleader.com|autoguide.com|battlecreekenquirer.com|baxterbulletin.com|beqala.com|boatshop24.com|bodas.com.mx|bodas.net|bucyrustelegraphforum.com|burlingtonfreepress.com|casamentos.com.br|casamentos.pt|casamiento.com.uy|casamientos.com.ar|chillicothegazette.com|cincinnati.com|clarionledger.com|coloradoan.com|coshoctontribune.com|courier-journal.com|courierpostonline.com|dailyrecord.com|dailyworld.com|deadspin.com|defensenews.com|delawareonline.com|democratandchronicle.com|desmoinesregister.com|dnj.com|drupalcommerce.org|escapegames.com|fdlreporter.com|floridatoday.com|freep.com|games.latimes.com|gawker.com|gizmodo.com|greatfallstribune.com|greenbaypressgazette.com|greenvilleonline.com|guampdn.com|hattiesburgamerican.com|hometownlife.com|htrnews.com|indystar.com|io9.com|ithacajournal.com|jacksonsun.com|jalopnik.com|jconline.com|jezebel.com|kotaku.com|lancastereaglegazette.com|lansingstatejournal.com|lifehacker.com|livingstondaily.com|lohud.com|mansfieldnewsjournal.com|mariages.net|marionstar.com|marshfieldnewsherald.com|matrimonio.com|matrimonio.com.co|matrimonio.com.pe|matrimonios.cl|montgomeryadvertiser.com|motorcycle.com|mycentraljersey.com|mydesert.com|mysoju.com|nauticexpo.com|nedbank.co.za|nedbankgreen.co.za|newarkadvocate.com|news-leader.com|news-press.com|newsleader.com|nonags.com|orbitz.com|pal-item.com|podomatic.com|portclintonnewsherald.com|postcrescent.com|poughkeepsiejournal.com|press-citizen.com|pressconnects.com|rgj.com|sctimes.com|sheboyganpress.com|shreveporttimes.com|stargazette.com|statesmanjournal.com|stevenspointjournal.com|tallahassee.com|tennessean.com|theadvertiser.com|thedailyjournal.com|theleafchronicle.com|thenews-messenger.com|thenewsstar.com|thenorthwestern.com|thesimsresource.com|thespectrum.com|thestarpress.com|thetimesherald.com|thetowntalk.com|ticketek.com.ar|urbandictionary.com|virginaustralia.com|visaliatimesdelta.com|volokh.com|wausaudailyherald.com|weddingspot.co.uk|wisconsinrapidstribune.com|wlj.net|zanesvilletimesrecorder.com|zavvi.com|zui.com\n@@||g.doubleclick.net/gampad/ads?adk$domain=rte.ie\n@@||g.doubleclick.net/gampad/google_ads.js$domain=nedbank.co.za|nitrome.com|ticketek.com.ar\n@@||g.doubleclick.net/pagead/ads?ad_type=image_text^$object-subrequest,domain=ebog.com|gameark.com\n@@||g.doubleclick.net/pagead/ads?ad_type=text_dynamicimage_flash^$object-subrequest\n@@||g4tv.com/clientscriptoptimizer.ashx?*-ads.$script,stylesheet\n@@||gactv.com^*/javascript/ad/coread/$script\n@@||game.zylom.com^*.swf?*&adURL=$object\n@@||game.zylom.com^*/cm_loader.*.swf?$object\n@@||gamehouse.com/adiframe/preroll-ad/$subdocument\n@@||gameitnow.com/ads/gameadvertentie.php?$subdocument\n@@||gameitnow.com/ads/google_loader.swf$object\n@@||games.cnn.com/ad/$object,object-subrequest,subdocument\n@@||gamesgames.com/vda/friendly-iframe.html?videoPreroll300x250$subdocument\n@@||gan.doubleclick.net/gan_impression?lid=$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||gannett.gcion.com/addyn/$script,domain=greenbaypressgazette.com|wcsh6.com\n@@||garmin.com^*/Sponsors.js?\n@@||garrysmod.org/ads/$image,script,stylesheet\n@@||gcultra.com/js/exit_popup.js\n@@||getgamesgo.com/Banners/$image,~third-party\n@@||getprice.com.au/images/$domain=shopping.ninemsn.com.au|shopping.yahoo.com.au\n@@||gfsrv.net/ad/$domain=ogame.org|ogame.us\n@@||ghstatic.com/archives/*&adURL=$domain=game.zylom.com\n@@||girlsplay.com/banners/ima3_preloader_$object\n@@||gitorious.org/adv/$~third-party,xmlhttprequest\n@@||glamour.com/aspen/components/cn-fe-ads/js/cn.dart.js\n@@||glamour.com/aspen/js/dartCall.js\n@@||glendalenewspress.com/hive/images/adv_\n@@||glnimages.s3.amazonaws.com/odw/ad$image,domain=odysseyware.com\n@@||globaltv.com/js/smdg_ads.js\n@@||gmfreeze.org/site_media//uploads/page_ad_images/$image\n@@||gmodules.com/ig/ifr?up_ad$domain=healthboards.com\n@@||gmx.com/images/outsource/application/mailclient/mailcom/resource/mailclient/flash/multiselection_upload/multiselectionupload-*.swf$object\n@@||go2cloud.org/aff_i?$image,domain=affrity.com\n@@||godlessnightsfilm.co.uk/scripts/ad-gallery/\n@@||godtube.com/resource/mediaplayer/*&adzone=$object-subrequest\n@@||goember.com/ad/*.xml?$xmlhttprequest\n@@||google.*/s?*&q=$xmlhttprequest\n@@||google.*/search?sclient=*&q=$xmlhttprequest\n@@||google.*/webpagethumbnail?*&query=$script\n@@||google.com/_/apps-static/*/socialads/$script,stylesheet\n@@||google.com/_static/images/*/ads.png\n@@||google.com/ads/search/module/ads/*/search.js$domain=about.com|armstrongmywire.com|atlanticbb.net|bestbuy.com|bresnan.net|broadstripe.net|buckeyecablesystem.net|cableone.net|centurylink.net|charter.net|cincinnatibell.net|dish.net|ehow.com|forbbbs.org|forbes.com|hargray.net|hawaiiantel.net|hickorytech.net|homeaway.co.uk|knology.net|livestrong.com|mediacomtoday.com|midco.net|mybendbroadband.com|mybrctv.com|mycenturylink.com|myconsolidated.net|myepb.net|mygrande.net|mygvtc.com|myhughesnet.com|myritter.com|northstate.net|nwcable.net|query.nytimes.com|rentals.com|search.rr.com|searchresults.verizon.com|suddenlink.net|surewest.com|synacor.net|tds.net|toshiba.com|trustedreviews.com|truvista.net|windstream.net|windstreambusiness.net|wowway.net|zoover.co.uk|zoover.com\n@@||google.com/adsense/$subdocument,domain=sedo.co.uk|sedo.com|sedo.jp|sedo.kr|sedo.pl\n@@||google.com/adsense/search/ads.js$domain=armstrongmywire.com|atlanticbb.net|bestbuy.com|bresnan.net|broadstripe.net|buckeyecablesystem.net|cableone.net|centurylink.net|charter.net|cincinnatibell.net|dish.net|forbbbs.org|forbes.com|hargray.net|hawaiiantel.net|hickorytech.net|homeaway.co.uk|knology.net|livestrong.com|mediacomtoday.com|midco.net|mybendbroadband.com|mybrctv.com|mycenturylink.com|myconsolidated.net|myepb.net|mygrande.net|mygvtc.com|myhughesnet.com|myritter.com|northstate.net|nwcable.net|query.nytimes.com|rentals.com|search.rr.com|searchresults.verizon.com|suddenlink.net|surewest.com|synacor.net|tds.net|toshiba.com|trustedreviews.com|truvista.net|windstream.net|windstreambusiness.net|wowway.net|www.google.com|zoover.co.uk|zoover.com\n@@||google.com/adsense/search/async-ads.js$domain=about.com|ehow.com\n@@||google.com/afs/ads?$document,subdocument,domain=ehow.com|livestrong.com\n@@||google.com/doubleclick/studio/swiffy/$domain=www.google.com\n@@||google.com/search?q=$xmlhttprequest\n@@||google.com/uds/?file=ads&$script,domain=guardian.co.uk|landandfarm.com\n@@||google.com/uds/afs?$document,subdocument,domain=about.com|ehow.com|livestrong.com\n@@||google.com/uds/api/ads/$script,domain=guardian.co.uk\n@@||google.com/uds/api/ads/*/search.$script,domain=landandfarm.com|query.nytimes.com|trustedreviews.com|www.google.com\n@@||google.com/uds/modules/elements/newsshow/iframe.html?format=728x90^$document,subdocument\n@@||google.com^*/show_afs_ads.js$domain=whitepages.com\n@@||googleapis.com/flash/*adsapi_*.swf$domain=viki.com|wwe.com\n@@||googlesyndication.com/pagead/ads?$object-subrequest,domain=nx8.com\n@@||googlesyndication.com/simgad/$image,domain=amctheatres.com|beqala.com|bodas.com.mx|bodas.net|casamentos.com.br|casamentos.pt|casamiento.com.uy|casamientos.com.ar|drupalcommerce.org|mariages.net|matrimonio.com|matrimonio.com.co|matrimonio.com.pe|matrimonios.cl|nedbank.co.za|orbitz.com|podomatic.com|weddingspot.co.uk|wlj.net|zavvi.com\n@@||gopjn.com/b/$image,domain=deliverydeals.co.uk\n@@||gorillanation.com/storage/lightbox_code/static/companion_ads.js$domain=comingsoon.net|gamerevolution.com|sohh.com\n@@||gotoassist.com/images/ad/\n@@||gotomeeting.com/images/ad/$image,stylesheet\n@@||guardian4.com/banners/$image,~third-party\n@@||guardianapps.co.uk^*/advertisement-features$xmlhttprequest\n@@||guim.co.uk^*/styles/wide/google-ads.css\n@@||gulflive.com/static/common/js/ads/ads.js\n@@||gumtree.com^*/postAd.js\n@@||guysen.com/script/ads.js\n@@||gws.ign.com/ws/search?*&google_adpage=$script\n@@||hafeezcentre.pk^*/ads_images/$image,~third-party\n@@||harmonsgrocery.com/ads/$image\n@@||hawaii-scuba.com/ads_styles.css\n@@||hbindependent.com/hive/images/adv_\n@@||healthadnet.adprimemedia.com/vn/vna/data/ad.php$object-subrequest\n@@||healthcare.gov/global/images/widgets/him/$domain=cms.gov\n@@||healthline.com/resources/base/js/responsive-ads.js?\n@@||healthline.com/v2/ad-leaderboard-iframe?$subdocument\n@@||healthline.com/v2/ad-mr2-iframe?useAdsHost=*&dfpAdSite=\n@@||hebdenbridge.co.uk/ads/images/smallads.png\n@@||hellotv.in/livetv/advertisements.xml$object-subrequest\n@@||hentai-foundry.com/themes/default/images/buttons/add_comment_icon.png\n@@||hillvue.com/banners/$image,~third-party\n@@||hipsterhitler.com/hhcomic/wp-content/uploads/2011/10/20_advertisement.jpg\n@@||hipsterhitler.com/wp-content/webcomic/$image\n@@||historyextra.com^*_advertorial$stylesheet\n@@||hologfx.com/banners/$image,~third-party\n@@||homedepot.com^*/thdGoogleAdSense.js\n@@||hotnewhiphop.com/web_root/images/ads/banner-*.png\n@@||housebeautiful.com/ams/page-ads.js\n@@||housebeautiful.com/cm/shared/scripts/refreshads-*.js\n@@||houstonpress.com/adindex/$xmlhttprequest\n@@||howcast.com/flash/assets/ads/liverail.swf\n@@||hp.com^*/scripts/ads/$~third-party\n@@||huffingtonpost.co.uk/_uac/adpage.html\n@@||huffingtonpost.com/_uac/adpage.html\n@@||huffingtonpost.com/images/ads/$~third-party\n@@||huffpost.com/images/ads/$domain=huffingtonpost.com\n@@||hulkshare.com/js/adsmanager.js\n@@||hulu.com/published/*.flv\n@@||hulu.com/published/*.mp4\n@@||humana-medicare.com/ad/$~document,domain=humana-medicare.com\n@@||huntington.com/Script/AdManager.js\n@@||i.cdn.turner.com^*/adserviceadapter.swf\n@@||i.com.com^*/adfunctionsd-*.js$domain=cbsnews.com|cbssports.com|cnettv.cnet.com|metacritic.com|tv.com|twitch.tv\n@@||i.espn.co.uk/ads/gamemodule_$object\n@@||ibnlive.com/videoads/*_ads_*.xml$object-subrequest\n@@||ibsrv.net/ads/$domain=carsdirect.com\n@@||icefilms.info/jquery.lazyload-ad-*-min.js\n@@||icons.iconarchive.com/icons/$image\n@@||identity-us.com/ads/ads.html\n@@||ifeelgoood.com/tapcontent-*.swf?clicktag=$object\n@@||iframe.ivillage.com/iframe_render?\n@@||ign.com/js.ng/size=headermainad&site=teamxbox$script,domain=teamxbox.com\n@@||ikea.com^*/img/ad_\n@@||ikea.com^*/img/ads/\n@@||images-amazon.com/images/*/adsimages/$domain=amazon.com\n@@||images-amazon.com/images/G/01/traffic/s9m/images/sweeps/$image,domain=amazon.com\n@@||images-amazon.com^$domain=affrity.com\n@@||images.dashtickets.co.nz/advertising/featured/$image\n@@||images.forbes.com/video/ads/blank_frame.flv$object-subrequest\n@@||images.frys.com/art/ads/images/$image,~third-party\n@@||images.frys.com/art/ads/js/$script,stylesheet\n@@||images.nationalgeographic.com/wpf/media-live/graphic/\n@@||images.nickjr.com/ads/promo/\n@@||images.rewardstyle.com/img?$image,domain=glamour.com|itsjudytime.com\n@@||images.vantage-media.net^$domain=yahoo.net\n@@||imagesbn.com/resources?*/googlead.$stylesheet,domain=barnesandnoble.com\n@@||imasdk.googleapis.com/flash/core/3.*/adsapi.swf$object-subrequest\n@@||imasdk.googleapis.com/flash/sdkloader/adsapi_3.swf$object-subrequest\n@@||imasdk.googleapis.com/js/core/bridge*.html$subdocument,domain=blinkboxmusic.com|cbc.ca|eboundservices.com|gamejolt.com|live.geo.tv|news.sky.com|softgames.de|thestreet.com|video.foxnews.com|waywire.com\n@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=blinkboxmusic.com|cbc.ca|gamejolt.com|news.sky.com|theverge.com\n@@||img-cdn.mediaplex.com^$image,domain=betfair.com\n@@||img.espngp.com/ads/$image,domain=espnf1.com\n@@||img.mediaplex.com^*_afl_bettingpage_$domain=afl.com.au\n@@||img.thedailywtf.com/images/ads/\n@@||img.travidia.com^$image\n@@||img.weather.weatherbug.com^*/stickers/$image,stylesheet\n@@||imgag.com^*/adaptvadplayer.swf$domain=egreetings.com\n@@||imobie.com/js/anytrans-adv.js\n@@||impgb.tradedoubler.com/imp?type(img)$image,domain=deliverydeals.co.uk\n@@||imwx.com/js/adstwo/adcontroller.js$domain=weather.com\n@@||incredibox.fr/advertise/_liste.js\n@@||incredibox.fr/image/advertise/\n@@||incredibox.fr/js/advertise.js\n@@||indiaresults.com/advertisements/submit.png\n@@||indiatimes.com/configspace/ads/$object,object-subrequest\n@@||infoworld.com/www/js/ads/gpt_includes.js\n@@||innovid.com/crossdomain.xml$object-subrequest,domain=~channel4.com\n@@||innovid.com/iroll/package/iab-vpaid-ex/$domain=cbs.com\n@@||innovid.com^*/VPAIDEXIRollPackage.swf$domain=cbs.com\n@@||inserts2online.com/*.jsp?*&adid=$subdocument\n@@||inserts2online.com/images/site/viewad.gif\n@@||inskin.vo.llnwd.net^*/api/tvcatchup-light.js$domain=tvcatchup.com\n@@||inskin.vo.llnwd.net^*/api/tvcatchup.js$domain=tvcatchup.com\n@@||inskin.vo.llnwd.net^*/preroll_$object-subrequest,domain=tvcatchup.com\n@@||inskinad.com/isapadserver/ads.aspx?$script,domain=tvcatchup.com\n@@||inskinmedia.com^*/api/brightcove3.js$domain=virginmedia.com\n@@||inskinmedia.com^*/js/base/api/$domain=mousebreaker.com\n@@||inspire.net.nz/adverts/$image\n@@||intellitext.co^$~third-party\n@@||intellitxt.com/ast/js/nbcuni/$script\n@@||intentmedia.net/adServer/$script,domain=travelzoo.com\n@@||intentmedia.net/javascripts/$script,domain=travelzoo.com\n@@||interadcorp.com/script/interad.$script,stylesheet\n@@||investors.com/Scripts/AdScript.js?\n@@||inviziads.com/crossdomain.xml$object-subrequest\n@@||ipcamhost.net/flashads/*.swf$object-subrequest,domain=canadianrockies.org\n@@||ipcdigital.co.uk^*/adloader.js?$domain=trustedreviews.com\n@@||ipcdigital.co.uk^*/adtech.js$domain=trustedreviews.com\n@@||island.lk/userfiles/image/danweem/island.gif\n@@||itv.com/itv/hserver/*/site=itv/$xmlhttprequest\n@@||itv.com^*.adserver.js\n@@||itv.com^*/flvplayer.swf?$object\n@@||itv.com^*/tvshows_adcall_08.js\n@@||itweb.co.za/banners/en-cdt*.gif\n@@||jivox.com/jivox/serverAPIs/getCampaignById.php?$object-subrequest,domain=ibnlive.in.com\n@@||jobs.wa.gov.au/images/advertimages/\n@@||jobsearch.careerone.com.au^*/bannerad.asmx/\n@@||jobstreet.com/_ads/\n@@||johnston.grapeshot.co.uk^$domain=peterboroughtoday.co.uk\n@@||joyhubs.com/View/*/js/pop.js\n@@||js.revsci.net/gateway/gw.js?$domain=app.com|argusleader.com|aviationweek.com|battlecreekenquirer.com|baxterbulletin.com|bucyrustelegraphforum.com|burlingtonfreepress.com|centralohio.com|chillicothegazette.com|cincinnati.com|citizen-times.com|clarionledger.com|coloradoan.com|coshoctontribune.com|courier-journal.com|courierpostonline.com|dailyrecord.com|dailyworld.com|delawareonline.com|delmarvanow.com|democratandchronicle.com|desmoinesregister.com|dnj.com|fdlreporter.com|foxsmallbusinesscenter.com|freep.com|greatfallstribune.com|greenbaypressgazette.com|greenvilleonline.com|guampdn.com|hattiesburgamerican.com|hometownlife.com|honoluluadvertiser.com|htrnews.com|indystar.com|jacksonsun.com|jconline.com|lancastereaglegazette.com|lansingstatejournal.com|livingstondaily.com|lohud.com|mansfieldnewsjournal.com|marionstar.com|marshfieldnewsherald.com|montgomeryadvertiser.com|mycentraljersey.com|mydesert.com|newarkadvocate.com|news-leader.com|news-press.com|newsleader.com|pal-item.com|pnj.com|portclintonnewsherald.com|postcrescent.com|poughkeepsiejournal.com|press-citizen.com|pressconnects.com|rgj.com|sctimes.com|sheboyganpress.com|shreveporttimes.com|stargazette.com|statesmanjournal.com|stevenspointjournal.com|tallahassee.com|tennessean.com|theadvertiser.com|thecalifornian.com|thedailyjournal.com|theithacajournal.com|theleafchronicle.com|thenews-messenger.com|thenewsstar.com|thenorthwestern.com|thespectrum.com|thestarpress.com|thetimesherald.com|thetowntalk.com|visaliatimesdelta.com|wausaudailyherald.com|weather.com|wisconsinrapidstribune.com|zanesvilletimesrecorder.com\n@@||jsstatic.com/_ads/\n@@||jtvnw.net/widgets/jtv_player.*&referer=http://talkrtv.com/ad/channel.php?$object,domain=talkrtv.com\n@@||justin-klein.com/banners/\n@@||kaltura.com^*/doubleClickPlugin.swf$object-subrequest,domain=tmz.com\n@@||kamernet.nl/Adverts/$~third-party\n@@||karolinashumilas.com/img/adv/\n@@||kcna.kp/images/ads_arrow_\n@@||kcra.com^*/adpositionsizein-min.js\n@@||keygamesnetwork.com/adserve/request/$object-subrequest,domain=gamesforwork.com\n@@||kidshealth.org/licensees/licensee1/js/gam.html\n@@||king5.com/templates/belo_dart_iframed_ad?dartTag=LeaderTop&$subdocument\n@@||kingofgames.net/gads/kingofgames.swf\n@@||kiz10.com/template/publicidad/ficha/ads_preloadgame/ima3_preloader_$object\n@@||kloubert.com/wp-content/uploads/*/Advertising_$image,~third-party\n@@||koaa.com/videoplayer/iframe.cfm?*&hide_ads=\n@@||kongcdn.com/game_icons/*-300x250_$domain=kongregate.com\n@@||kotak.com/banners/$image\n@@||krispykreme.com/content/images/ads/\n@@||ksl.com/resources/classifieds/graphics/ad_\n@@||l.yimg.com/*/adservice/\n@@||l.yimg.com/zz/combo?*/advertising.$stylesheet\n@@||lacanadaonline.com/hive/images/adv_\n@@||lads.myspace.com/videos/msvideoplayer.swf?$object,object-subrequest\n@@||lanacion.com.ar/*/publicidad/\n@@||larazon.es/larazon-theme/js/publicidad.js?\n@@||lbdevicons.brainient.com/flash/*/VPAIDWrapper.swf$object,domain=mousebreaker.com\n@@||lduhtrp.net/image-$domain=uscbookstore.com\n@@||leadback.advertising.com/adcedge/$domain=careerbuilder.com\n@@||lehighvalleylive.com/static/common/js/ads/ads.js\n@@||lelong.com.my/UserImages/Ads/$image,~third-party\n@@||lemon-ads.com^$~document,~third-party\n@@||lesacasino.com/banners/$~third-party\n@@||libraryjournal.com/wp-content/plugins/wp-intern-ads/$script,stylesheet\n@@||lightningcast.net/servlets/getplaylist?*&responsetype=asx&$object\n@@||lijit.com///www/delivery/fpi.js?*&width=728&height=90$script,domain=hypeseek.com\n@@||limecellular.com/resources/images/adv/$~third-party\n@@||linkbucks.com/tmpl/mint/css/ads.css\n@@||linkbucks.com/tmpl/mint/img/int_skip_ad.gif\n@@||linkbucks.com/tmpl/mint/img/int_skip_ad_disabled.gif\n@@||linkconnector.com/traffic_record.php?lc=$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||linksave.in/img/usercp/ads.png\n@@||linkshare.iregdev.com/images/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||linksynergy.com/fs-bin/show?id=$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||linksynergy.com/fs/banners/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||lipsum.com/images/banners/\n@@||listings.brokersweb.com/JsonSearchSb.aspx?*&maxAds=$script\n@@||live-support.se^*/Admax/$~third-party\n@@||live.seenreport.com:82/media/js/ads_controller.js?$domain=live.geo.tv\n@@||live.seenreport.com:82/media/js/fingerprint.js?$domain=live.geo.tv\n@@||live365.com/mini/blank300x250.html\n@@||live365.com/scripts/liveads.js\n@@||live365.com/web/components/ads/*.html?\n@@||liverail.com/js/LiveRail.AdManager$script,domain=~bluray-disc.de\n@@||liverail.com/js/LiveRail.Interstitial-$script,domain=keygames.com\n@@||liverail.com^*/liverail_preroll.swf$object,domain=newgrounds.com\n@@||liverail.com^*/vpaid-player.swf?$object,domain=addictinggames.com|keygames.com|nglmedia.com|shockwave.com\n@@||llnwd.net^*/js/3rdparty/swfobject$script\n@@||logmein.com/Serve.aspx?ZoneID=$script,~third-party\n@@||longtailvideo.com/flowplayer/ova-*.swf$domain=rosemaryconley.tv\n@@||longtailvideo.com^*/gapro.js$domain=physorg.com\n@@||loot.com/content/css/combo/advert_$domain=loot.com\n@@||lovefilm.com/ajax/widgets/advertising/$xmlhttprequest\n@@||lovefilm.com/static/scripts/advertising/dart.overlay.js\n@@||lovemybubbles.com/images/ads/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||ltassrv.com/crossdomain.xml$object-subrequest\n@@||ltassrv.com/yume.swf$domain=animecrazy.net|gamedorm.org|gamepro.com|satsukai.com|sparknotes.com\n@@||ltassrv.com/yume/yume_$object-subrequest,domain=animecrazy.net|gamedorm.org|gamepro.com|satsukai.com|sparknotes.com\n@@||luceosolutions.com/recruit/advert_details.php?id=$subdocument\n@@||lycos.com/catman/init.js$domain=video.lycos.com\n@@||lyngsat-logo.com/icon/flag/az/ad.gif\n@@||mac-sports.com/ads2/508128.swf\n@@||mads.cbs.com/mac-ad?$object-subrequest\n@@||mads.com.com/ads/common/faith/*.xml$object-subrequest\n@@||mads.tv.com/mac-ad?META^$script,domain=tv.com\n@@||magicbricks.com/img/adbanner/\n@@||mail.google.com^*&view=ad&$xmlhttprequest\n@@||mail.google.com^*/uploaderapi*.swf\n@@||mail.yahoo.com/neo/assets/swf/uploader.swf\n@@||manilatimes.net/images/banners/logo-mt.png\n@@||manoramaonline.com/advt/cricbuzz/\n@@||mansioncasino.com/banners/$~third-party\n@@||maps-static.chitika.net^\n@@||maps.chitika.net^\n@@||maps.gstatic.com/maps-api-*/adsense.js$domain=ctrlq.org|googlesightseeing.com|marinetraffic.com|satellite-calculations.com|walkscore.com\n@@||marca.com/deporte/css/*/publicidad.css\n@@||marciglesias.com/publicidad/\n@@||marcokrenn.com/public/images/pages/advertising/$~third-party\n@@||marcs.com^*/AdViewer.js\n@@||marieclaire.com/ams/page-ads.js?\n@@||marines.com/videos/commercials/$object-subrequest\n@@||marketing.beatport.com.s3.amazonaws.com/html/*/Banner_Ads/header_$image\n@@||masslive.com/static/common/js/ads/ads.js\n@@||maxim.com/advert*/countdown/$script,stylesheet\n@@||mcfc.co.uk/js/core/adtracking.js\n@@||mcpn.us/resources/images/adv/$~third-party\n@@||media-azeroth.cursecdn.com/Assets/*/DOODADS/$object-subrequest\n@@||media-imdb.com^*/js/ads.js$domain=imdb.com\n@@||media.avclub.com/onion/js/videoads.js$script\n@@||media.cargocollective.com^$image\n@@||media.expedia.com/*/ads/\n@@||media.glnsrv.com/ads/$image,domain=aopschools.com\n@@||media.monster.com/ads/$image,domain=monster.com\n@@||media.newjobs.com/ads/$image,object,domain=monster.com\n@@||media.salemwebnetwork.com/js/admanager/swfobject.js$domain=christianity.com\n@@||media.styleblueprint.com/ad.php?$script,~third-party\n@@||media.washingtonpost.com/wp-srv/ad/ad_v2.js\n@@||media.washingtonpost.com/wp-srv/ad/photo-ad-config.jsonp\n@@||media.washingtonpost.com/wp-srv/ad/tiffany_manager.js\n@@||mediabistro.com^*/displayadleader.asp?$subdocument\n@@||mediaplex.com/ad/$domain=betfair.com\n@@||medrx.sensis.com.au/images/sensis/*/util.js$domain=afl.com.au|goal.com\n@@||medrx.sensis.com.au/images/sensis/generic.js$domain=afl.com.au\n@@||medscape.com/html.ng/*slideshow\n@@||medscapestatic.com/pi/scripts/ads/dfp/profads2.js\n@@||memecdn.com/advertising_$image,domain=memecenter.com\n@@||meritline.com/banners/$image,~third-party\n@@||merkatia.com/adimages/$image\n@@||metacafe.com/banner.php?\n@@||metalmusicradio.com^*/banner.php\n@@||meviodisplayads.com/adholder.php$domain=mevio.com\n@@||mfcreative.com/lib/tgn/combo.ashx?$script,stylesheet,domain=ancestry.com|ancestry.com.au\n@@||militaryfleamarket.net/media/com_jomclassifieds/adverts/\n@@||miller-mccune.com/wp-content/plugins/*/oiopub-direct/images/style/output.css\n@@||miniclip.com/scripts/js.php?\n@@||miniclipcdn.com/content/push-ads/\n@@||mircscripts.org/advertisements.js\n@@||mlb.com/bundle?js=*/adproxy.$script,domain=mlb.com\n@@||mlb.com/scripts/dc_ads.js\n@@||mlb.com/shared/components/gameday/v6/js/adproxy.js\n@@||mlive.com/static/common/js/ads/ads.js\n@@||mns.com/ad/$domain=classifieds.nydailynews.com\n@@||mobilefish.com/scripts/advertisement.js\n@@||mochiads.com/ctr/*.swf?$domain=gamesforwork.com\n@@||mochiads.com/srv/*.swf?cachebust=$domain=gamesforwork.com\n@@||mochiads.com/srv/*.swf?cxnid=$domain=gamesforwork.com\n@@||mochiads.com/static/pub/swf/leaderboard.js$domain=mochigames.com\n@@||mofunzone.com/ads/ima3_preloader_*.swf$object\n@@||moneybookers.com/ads/$~third-party\n@@||monster.com/awm/*/ADVERTISING-\n@@||monster.com/services/bannerad.asmx/getadsrc$xmlhttprequest,domain=monster.com\n@@||movoto.com/LeaderboardAd.aspx?adSpotName=$subdocument\n@@||mp32u.net/adframe.js\n@@||msads.net/adbar/products/*/adbar.js$domain=mail.live.com\n@@||msi.com/js/topad/topad.css\n@@||msi.com/pic/banner/\n@@||msnbcmedia.msn.com^*/sitemanagement/ads/*/blog_printbutton.png\n@@||mstar.com/ads/$image,domain=morningstar.com\n@@||msy.com.au/images/ADbanner/eletter/$~third-party\n@@||muchmusic.com/includes/js/adzone.js\n@@||mudah.my/css/mudah_adview_min.css\n@@||music-clips.net/ads/list.txt?_=$xmlhttprequest\n@@||music-tags.com/tagengine/www/delivery/fl.js$domain=blastro.com\n@@||music-tags.com/tagengine/www/delivery/spcjs.php$domain=blastro.com\n@@||mussil.com/mussilcomfiles/commercials/*.jpg\n@@||mutualofomaha.com/images/ads/\n@@||mvapublicstorage.microsoft.com/banners/$domain=microsoftvirtualacademy.com\n@@||mxtabs.net/ads/interstitial$subdocument\n@@||myadt.com/js-ext/smartbanner/\n@@||mycricket.com/openx/offers/$image\n@@||myhouseabroad.com/*/ads/\n@@||myhouseabroad.com/js/adview.js\n@@||myprotein.com/Files/OpenX/$image,~third-party\n@@||myrecipes.com/static/advertising/\n@@||mythings.com/c.aspx?atok$domain=enter.ru\n@@||napaonline.com/Content/script/jquery.lazyload-ad-$script\n@@||nationalbusinessfurniture.com/product/advertising/$image\n@@||nationalgeographic.com/channel/videos/satellite/*.swf?adsite=\n@@||nationmultimedia.com/new/js/doubleclick.js\n@@||nature.com/advertising/$~third-party\n@@||nba.com/mobilevideo?*&ad_url=$script,domain=mavs.wpengine.netdna-cdn.com\n@@||nbc.com/collarity/\n@@||ncregister.com/images/ads/\n@@||ncregister.com/images/sized/images/ads/\n@@||nedbank.co.za/website/content/home/google_ad_Cut.jpg\n@@||neobux.com/v/?a=l&l=$document\n@@||netupd8.com/webupd8/*/adsense.js$domain=webupd8.org\n@@||netupd8.com/webupd8/*/advertisement.js$domain=webupd8.org\n@@||networkworld.com/www/js/ads/gpt_includes.js?\n@@||newgrounds.com/ads/ad_medals.gif\n@@||news.nate.com/etc/adrectanglebanner?\n@@||newsarama.com/common/js/advertisements.js\n@@||newsweek.com/ads/adscripts/prod/*_$script\n@@||newyorker.com/wp-content/assets/js/vendors/cn-fe-ads/cn.dart.js\n@@||newzimbabwe.com/banners/350x350/\n@@||nextag.com/buyer/dyad/$script,domain=nextag.com\n@@||nextmedia.com/admedia/$object-subrequest\n@@||nextmovie.com/plugins/mtvnimageresizer/actions/scale_image?$image,domain=nextmovie.com\n@@||nfl.com^*/ads.js\n@@||nflcdn.com/static/*/global/ads.js\n@@||nflcdn.com^*/adplayer.js$domain=nfl.com\n@@||nflcdn.com^*/scripts/global/ads.js$domain=nfl.com\n@@||ngads.com/getad.php?url=$object-subrequest,domain=newgrounds.com\n@@||nick.com/js/ads.jsp\n@@||nick.com/js/coda/nick/adrefresh.js$domain=nick.com\n@@||nickjr.com/assets/ad-entry/\n@@||nickjr.com/global/scripts/overture/sponsored_links_lib.js\n@@||nintandbox.net/images/*-Advertising_$image\n@@||nj.com/static/common/js/ads/ads.js\n@@||nola.com/static/common/js/ads/ads.js\n@@||nonstoppartner.net/a/$image,domain=deliverydeals.co.uk\n@@||nsandi.com/files/asset/banner-ads/\n@@||nyctourist.com/www/delivery/spcjs.php?$script,domain=nyctourist.com\n@@||nyt.com^*/ad-loader.js$domain=nytimes.com\n@@||nyt.com^*/ad-view-manager.js$domain=nytimes.com\n@@||nytimes.com/ads/interstitial/skip*.gif\n@@||nytimes.com/adx/bin/adx_remote.html?type=fastscript$script,xmlhttprequest,domain=nytimes.com\n@@||nytimes.com/adx/images/ADS$domain=myaccount.nytimes.com\n@@||nytimes.com/adx/images/ads/*_buynow_btn_53x18.gif\n@@||nytimes.com/adx/images/ads/*_premium-crosswords_bg_600x329.gif\n@@||nytimes.perfectmarket.com^$stylesheet\n@@||oas.absoluteradio.co.uk/realmedia/ads/$object-subrequest\n@@||oas.absoluteradio.co.uk^*/www.absoluteradio.co.uk/player/\n@@||oas.bigflix.com/realmedia/ads/$object-subrequest,domain=~tamilflix.net\n@@||oas.theguardian.com^$xmlhttprequest\n@@||oascentral.discovery.com/realmedia/ads/adstream_mjx.ads/$script,domain=discovery.com\n@@||oascentral.feedroom.com/realmedia/ads/adstream_sx.ads/$script,domain=businessweek.com|economist.com|feedroom.com|stanford.edu\n@@||oascentral.feedroom.com/realmedia/ads/adstream_sx.ads/brighthouse.com/$document,domain=oascentral.feedroom.com\n@@||oascentral.ibtimes.com/crossdomain.xml$object-subrequest\n@@||oascentral.post-gazette.com/realmedia/ads/$object-subrequest\n@@||oascentral.sumworld.com/crossdomain.xml$object-subrequest\n@@||oascentral.sumworld.com/realmedia/ads/adstream_sx.ads/*video$domain=mlssoccer.com\n@@||oascentral.sumworld.com/realmedia/ads/adstream_sx.ads/mlssoccer.com/$object-subrequest,domain=mlssoccer.com\n@@||oascentral.surfline.com/crossdomain.xml$object-subrequest\n@@||oascentral.surfline.com/realmedia/ads/adstream_sx.ads/www.surfline.com/articles$object-subrequest\n@@||oascentral.thechronicleherald.ca/realmedia/ads/adstream_mjx.ads$script\n@@||oascentral.thepostgame.com/om/$script\n@@||objects.tremormedia.com/embed/js/$domain=animecrave.com|bostonherald.com|deluxemusic.tv|deluxetelevision.com|theunlockr.com|videopoker.com|weeklyworldnews.com\n@@||objects.tremormedia.com/embed/sjs/$domain=nfl.com\n@@||objects.tremormedia.com/embed/swf/acudeoplayer.swf$domain=animecrave.com|bostonherald.com|deluxemusic.tv|deluxetelevision.com|theunlockr.com|videopoker.com|weeklyworldnews.com\n@@||objects.tremormedia.com/embed/swf/admanager*.swf\n@@||ocp.com.com/adfunctions.js?\n@@||offerpalads.com^*/opmbanner.js$domain=farmville.com\n@@||okta.com/js/app/sso/interstitial.js$~third-party\n@@||oldergames.com/adlib/\n@@||omgili.com/ads.search?\n@@||omgubuntu.co.uk^*/banner.js\n@@||omnikool.discovery.com/realmedia/ads/adstream_mjx.ads/dsc.discovery.com/$script\n@@||onetravel.com/desktopmodules/adsales/adsaleshandle.ashx?$xmlhttprequest\n@@||onionstatic.com^*/videoads.js\n@@||openx.ideastudios.ro^$script,domain=enjoydressup.com\n@@||openx.infrontams.tv/www/$image,object,script,domain=acmilan.com\n@@||openx.nobelprize.org/openx/www/delivery/$script\n@@||openx.org/afr.php?$subdocument,domain=cubeecraft.com\n@@||openx.org/avw.php?zoneid$image,domain=podomatic.com\n@@||openx.org/ck.php?$subdocument,domain=cubeecraft.com\n@@||optimatic.com/iframe.html$subdocument,domain=pch.com\n@@||optimatic.com/integral/wrapper/shell.swf$domain=pch.com\n@@||optimatic.com/shell.js$domain=pch.com\n@@||optimatic.com^*/wrapper/shell.swf?$object,domain=pch.com\n@@||optimatic.com^*/wrapper/shell_standalone.swf?$object,domain=pch.com\n@@||oregonlive.com/static/common/js/ads/ads.js\n@@||osdir.com/ml/dateindex*&num=$subdocument\n@@||otakumode.com/shop/titleArea?*_promo_id=$xmlhttprequest\n@@||otrkeyfinder.com/otr/frame*.php?ads=*&search=$subdocument,domain=onlinetvrecorder.com\n@@||overture.london^$~third-party\n@@||ox-d.motogp.com/v/1.0/av?*auid=$object-subrequest,domain=motogp.com\n@@||ox-d.qz.com/w/1.0/jstag|$script,domain=qz.com\n@@||ox-d.rantsports.com/w/1.0/jstag$script,domain=rantlifestyle.com\n@@||ox-d.sbnation.com/w/1.0/jstag|\n@@||ox.eurogamer.net/oa/delivery/ajs.php?$script,domain=vg247.com\n@@||ox.popcap.com/delivery/afr.php?&zoneid=$subdocument,~third-party\n@@||oxfordlearnersdictionaries.com/external/scripts/doubleclick.js\n@@||ozspeedtest.com/js/pop.js\n@@||pachanyc.com/_images/advertise_submit.gif\n@@||pachoumis.com/advertising-$~third-party\n@@||pacogames.com/ad/ima3_preloader_$object\n@@||pagead2.googlesyndication.com/pagead/gadgets/overlay/overlaytemplate.swf$object-subrequest,domain=bn0.com|ebog.com|gameark.com\n@@||pagead2.googlesyndication.com/pagead/googlevideoadslibrary.swf$object-subrequest,domain=flashgames247.com|freeonlinegames.com|gameitnow.com|play181.com|toongames.com\n@@||pagead2.googlesyndication.com/pagead/imgad?$image,domain=kingofgames.net|nedbank.co.za|nedbankgreen.co.za|virginaustralia.com\n@@||pagead2.googlesyndication.com/pagead/imgad?id=$object-subrequest,domain=bn0.com|ebog.com|gameark.com|yepi.com\n@@||pagead2.googlesyndication.com/pagead/js/*/show_ads_impl.js$domain=oldapps.com\n@@||pagead2.googlesyndication.com/pagead/scache/googlevideoads.swf$object-subrequest,domain=flashgames247.com|freeonlinegames.com|gameitnow.com|play181.com|toongames.com\n@@||pagead2.googlesyndication.com/pagead/scache/googlevideoadslibraryas3.swf$object-subrequest,domain=didigames.com|nitrome.com|nx8.com|oyunlar1.com\n@@||pagead2.googlesyndication.com/pagead/scache/googlevideoadslibrarylocalconnection.swf?$object-subrequest,domain=didigames.com|nitrome.com|nx8.com|oyunlar1.com\n@@||pagead2.googlesyndication.com/pagead/show_ads.js$domain=oldapps.com\n@@||pagead2.googlesyndication.com/pagead/static?format=in_video_ads&$elemhide,subdocument\n@@||pagesinventory.com/_data/flags/ad.gif\n@@||pandasecurity.com/banners/$image,~third-party\n@@||pantherssl.com/banners/\n@@||partner.googleadservices.com/gampad/google_ads.js$domain=autoguide.com|avclub.com|boatshop24.com|cadenasuper.com|dailygames.com|demotywatory.pl|drivearabia.com|ensonhaber.com|juegosdiarios.com|lbox.me|letio.com|lightinthebox.com|memegenerator.net|mysoju.com|nedbank.co.za|nedbankgreen.co.za|nitrome.com|nx8.com|playedonline.com|sulekha.com|volokh.com|yfrog.com\n@@||partner.googleadservices.com/gampad/google_ads2.js$domain=motorcycle.com|mysoju.com|nedbank.co.za\n@@||partner.googleadservices.com/gampad/google_ads_gpt.js$domain=amctheatres.com|pitchfork.com|podomatic.com|virginaustralia.com\n@@||partner.googleadservices.com/gampad/google_service.js$domain=autoguide.com|avclub.com|boatshop24.com|cadenasuper.com|dailygames.com|demotywatory.pl|drivearabia.com|ensonhaber.com|escapegames.com|juegosdiarios.com|lbox.me|letio.com|lightinthebox.com|memegenerator.net|motorcycle.com|mysoju.com|nedbank.co.za|nedbankgreen.co.za|nx8.com|playedonline.com|playstationlifestyle.net|readersdigest.com.au|sulekha.com|ticketek.com.ar|volokh.com|yfrog.com\n@@||partner.googleadservices.com/gpt/pubads_impl_$script,domain=beqala.com|bodas.com.mx|bodas.net|casamentos.com.br|casamentos.pt|casamiento.com.uy|casamientos.com.ar|deadspin.com|drupalcommerce.org|ew.com|gawker.com|gizmodo.com|io9.com|jalopnik.com|jezebel.com|kotaku.com|latimes.com|lifehacker.com|mariages.net|matrimonio.com|matrimonio.com.co|matrimonio.com.pe|matrimonios.cl|nauticexpo.com|orbitz.com|thesimsresource.com|urbandictionary.com|weddingspot.co.uk|wlj.net|zavvi.com\n@@||partners.thefilter.com/crossdomain.xml$object-subrequest\n@@||partners.thefilter.com/dailymotionservice/$image,object-subrequest,script,domain=dailymotion.com\n@@||paulfredrick.com/csimages/affiliate/banners/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||payload*.cargocollective.com^$image\n@@||pbs.org^*/sponsors/flvvideoplayer.swf\n@@||pch.com/templates/*/videoad.css$stylesheet\n@@||pennlive.com/static/common/js/ads/ads.js\n@@||perbang.dk/_pub/ads.php?u=$xmlhttprequest\n@@||perbang.dk/_pub/advertisement.js?\n@@||perezhilton.com/included_ads/\n@@||perezhilton.com^*-without-ads-$object,object-subrequest,subdocument\n@@||petapixel.com/ads/$~third-party\n@@||petcarerx.com/banners/\n@@||petra-fischer.com/tl_files/pics/*/ADVERTISING/$~third-party\n@@||pets4homes.co.uk/*/advert.js\n@@||pets4homes.co.uk^*/advert.css\n@@||pgatour.com/etc/designs/pgatour-advertisements/clientlibs/ad.min.js$script\n@@||phl.org/Advertising/$image,~third-party\n@@||phoenix.untd.com/OASX/$script,domain=netzero.net\n@@||photo.ekathimerini.com/ads/extra/$image,~third-party\n@@||photobucket.com/albums/ad$image\n@@||photobucket.com/pbkt/hserver/$object-subrequest,domain=photobucket.com\n@@||picmonkey.com/facebook-canvas/?ads$domain=apps.facebook.com\n@@||picplzthumbs.com/upload/img/ad/\n@@||piercesnorthsidemarket.com/ads/$image\n@@||ping.indieclicktv.com/www/delivery/ajs.php?zoneid$object-subrequest\n@@||pinkbike.org^*.swf?ad=0&$object\n@@||pioneerfcu.org/assets/images/bannerads/pfcu-system-upgrade-banner-02-180x218.gif\n@@||pitchfork.com/desktop/js/pitchfork/ads/interstitial.js\n@@||planetaxel.com^*.php?ad=$stylesheet\n@@||planetoddity.com/wp-content/*-ads-$image\n@@||planetrecruit.com/ad/$image\n@@||player.animelicio.us/adimages/$subdocument\n@@||player.cdn.targetspot.com/crossdomain.xml$object-subrequest,domain=slacker.com\n@@||player.cdn.targetspot.com/player/ts_as3.swf?$object-subrequest,domain=slacker.com\n@@||player.cdn.targetspot.com/station/*/ts_config.xml$object-subrequest,domain=slacker.com\n@@||player.cdn.targetspot.com/ts_embed_functions_as3.php$domain=tritonmedia.com\n@@||player.goviral-content.com/crossdomain.xml$object-subrequest\n@@||player.onescreen.net/*/MediaPlayer.swf?ads=$object-subrequest\n@@||player.streamtheworld.com/liveplayer.php?*adstype=\n@@||player.tritondigital.com^$domain=kmozart.com\n@@||player.ventunotech.com/VtnGoogleVpaidIMA_1.swf?$object-subrequest,domain=indianexpress.com|thehindu.com\n@@||player.vioapi.com/ads/flash/vioplayer.swf\n@@||playintraffik.com/advertising/\n@@||plugcomputer.org^*/ad1.jpg\n@@||pntrs.com^$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||politico.com/js/magazine/ads.js\n@@||pollen.vc/views/ads.html$domain=pollen.vc\n@@||pop.advecs.com^$~third-party\n@@||popad.co^$~third-party\n@@||popcap.com/sites/all/modules/popcap/js/popcap_openx.js?\n@@||popularmechanics.com/ams/page-ads.js$domain=popularmechanics.com\n@@||popunder.ru/banners/$domain=magesy.be\n@@||powercolor.com/image/ad/$~third-party\n@@||pressdisplay.com/advertising/showimage.aspx?\n@@||prism.opticsinfobase.org/Scripts/ADS/Details.js\n@@||procato.com/_pub/ads.php?u=$xmlhttprequest\n@@||procato.com/_pub/advertisement.js\n@@||productioncars.com/pics/menu/ads.gif\n@@||productioncars.com/pics/menu/ads2.gif\n@@||promo.acronis.com^*?base=www.acronis.$subdocument\n@@||promo.campaigndog.com^$third-party\n@@||promo2.tubemogul.com/adtags/slim_no_iframe.js$domain=comedy.com\n@@||promo2.tubemogul.com/flash/youtube.swf$domain=comedy.com\n@@||promo2.tubemogul.com/lib/tubemoguldisplaylib.js$domain=comedy.com\n@@||promophot.com/photo/ad/$image\n@@||proprofs.com/quiz-school/js/modernizr_ads.js\n@@||proxyserver.asia/themes/advertising-$image,stylesheet\n@@||pshared.5min.com/Scripts/ThumbSeed2.js?*&adUnit=$script\n@@||ptgrey.com/_PGR_Content/Advertising/$image,~third-party\n@@||pubmatic.com/AdServer/js/universalpixel.js$domain=politico.com\n@@||pubmatic.com/AdServer/UPug?$script,domain=politico.com\n@@||pumpkinpatchkids.com/www/delivery/ajs.php?$script\n@@||pursuit.co.za/css/globalAd.css\n@@||puzzler.com/commercials/*.htm$subdocument\n@@||q2servers.com/pop.js\n@@||qnsr.com/cgi/r?$domain=insure.com\n@@||query.vap.yahoo.net/nicobarMan/ads/acctid=$object-subrequest,domain=yahoo.com\n@@||quit.org.au/images/images/ad/\n@@||qzprod.files.wordpress.com^*?w=$domain=qz.com\n@@||r2games.com/bannerad/$image,~third-party\n@@||rackcdn.com/banners/$image,domain=rackspace.co.uk|rackspace.com.au\n@@||rackcdn.com/banners/default_coupon_banner.png$domain=michaels.com\n@@||rad.msn.com/ADSAdClient31.dll?GetAd=$xmlhttprequest,domain=ninemsn.com.au\n@@||rad.org.uk/images/adverts/$image,~third-party\n@@||radioguide.fm/minify/?*/Advertising/webroot/css/advertising.css\n@@||radiotimes.com/rt-service/resource/jspack?\n@@||rainbowdressup.com/ads/adsnewvars.swf\n@@||rapoo.com/images/ad/$image,~third-party\n@@||rc.hotkeys.com/interface/$domain=ehow.com\n@@||rcards.net/wp-content/plugins/useful-banner-manager/\n@@||rcards.net/wp-content/uploads/useful_banner_manager_banners/\n@@||rcm-images.amazon.com/images/$domain=rankbank.net\n@@||rcm.amazon.com/e/cm$domain=asianmommy.com|filmcrave.com\n@@||readwrite.com/files/styles/$image\n@@||realbeauty.com/ams/page-ads.js?\n@@||realmedia.channel4.com/realmedia/ads/adstream_sx.ads/channel4.newcu/$object-subrequest,~third-party\n@@||realvnc.com/assets/img/ad-bg.jpg\n@@||redbookmag.com/ams/page-ads.js?\n@@||redsharknews.com/components/com_adagency/includes/$script\n@@||refline.ch^*/advertisement.css\n@@||remo-xp.com/wp-content/themes/adsense-boqpod/style.css\n@@||replgroup.com/banners/$image,~third-party\n@@||req.tidaltv.com^$object-subrequest,domain=daisuki.net\n@@||revealads.appspot.com/revealads2/radioplayer.js$domain=talksport.co.uk\n@@||revit.eu/static/uploads/images/themes/banners/small-banner-$object-subrequest\n@@||revresda.com/event.ng/Type=click&$subdocument,domain=cheaptickets.com|orbitz.com\n@@||revresda.com/js.ng/*&adsize=544x275&$script,domain=cheaptickets.com\n@@||revresda.com/js.ng/*&adsize=960x400&$script,domain=orbitz.com\n@@||rewaz.org/ads/adframe2.js\n@@||rmncdn.com/ads/mini-$image\n@@||rogersdigitalmedia.com^*/rdm-ad-util.min.js$domain=citytv.com\n@@||rogersmagazines.com/ads/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||rosauers.com/locations/ads.html\n@@||rotate.infowars.com/www/delivery/fl.js\n@@||rotate.infowars.com/www/delivery/spcjs.php\n@@||rottentomatoescdn.com^*/SocialAds.js$domain=rottentomatoes.com\n@@||rover.ebay.com^*&size=120x60&$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||rovicorp.com/advertising/*&appver=$xmlhttprequest,domain=charter.net\n@@||rsvlts.com/wp-content/uploads/*-advertisment-\n@@||rt.liftdna.com/forbes_welcome.js$domain=forbes.com\n@@||rt.liftdna.com/fs.js$domain=formspring.me\n@@||rt.liftdna.com/liftrtb2_2.js$domain=formspring.me\n@@||rthk.hk/assets/flash/rthk/*/ad_banner$object\n@@||rthk.org.hk/assets/flash/rthk/*/ad_banner$object\n@@||russellrooftiles.co.uk/images/rrt_envirotile_home_advert.png\n@@||ryuutama.com/ads/ads.php?get=$xmlhttprequest\n@@||s.ytimg.com/yts/swfbin/player-*/watch_as3.swf$object,domain=youtube.com\n@@||s0.2mdn.net^$domain=britishgas.co.uk|luxurylink.com\n@@||sal.co.th/ads/$image,~third-party\n@@||sales.liveperson.net/visitor/addons/deploy2.asp?*&d_id=adcenter&$script\n@@||salon.com/content/plugins/salon-ad-controller/ad-utilities.js\n@@||sascdn.com/crossdomain.xml$object-subrequest\n@@||sascdn.com^*/jwplayer-plugin.swf?$object-subrequest\n@@||sascdn.com^*/jwplayerAdPlugin.swf$object-subrequest\n@@||save.ca/img/ads/$~third-party\n@@||scanscout.com/ads/$object-subrequest,domain=livestream.com\n@@||scanscout.com/crossdomain.xml$object-subrequest\n@@||scity.tv/js/ads.js$domain=live.scity.tv\n@@||screenwavemedia.com/play/SWMAdPlayer/SWMAdPlayer.html?type=ADREQUEST&$xmlhttprequest,domain=cinemassacre.com\n@@||scribdassets.com/aggregated/javascript/ads.js?$domain=scribd.com\n@@||scrippsnetworks.com/common/adimages/networkads/video_ad_vendor_list/approved_vendors.xml$object-subrequest\n@@||scutt.eu/ads/$~third-party\n@@||sdcdn.com/cms/ads/piczo/$image\n@@||sdelkino.com/images/ad/$image\n@@||sdltutorials.com/Data/Ads/AppStateBanner.jpg\n@@||search.comcast.net/static.php?$stylesheet\n@@||sec-ads.bridgetrack.com/ads_img/\n@@||secondlife.com/assets/*_AD3.jpg\n@@||securenetsystems.net/advertising/ad_campaign_get.cfm?$xmlhttprequest\n@@||securenetsystems.net/scripts/*/sdfy_scripts_advertising.js\n@@||sedo.com/ox/www/delivery/ajs.php$domain=sedo.com|sedo.de\n@@||sekonda.co.uk/advert_images/\n@@||selsin.net/imprint-$image\n@@||serve.vdopia.com/crossdomain.xml$object-subrequest\n@@||serve.vdopia.com/js/vdo.js$domain=indiatvnews.com|intoday.in\n@@||servebom.com/tmnhead.js$domain=tomsguide.com|tomshardware.com\n@@||server.cpmstar.com/adviewas3.swf?contentspotid=$object-subrequest\n@@||server.cpmstar.com/view.aspx?poolid=$domain=manga2u.co|newgrounds.com|xfire.com\n@@||serviceexpress.net/js/pop.js\n@@||serving-sys.com/SemiCachedScripts/$domain=cricketwireless.com\n@@||seventeen.com/ams/page-ads.js\n@@||sfdict.com/app/*/js/ghostwriter_adcall.js$domain=dynamo.dictionary.com\n@@||sh.st/bundles/smeadvertisement/img/track.gif?$xmlhttprequest\n@@||shacknews.com/advertising/preroll/$domain=gamefly.com\n@@||shackvideo.com/playlist_xml.x?\n@@||share.pingdom.com/banners/$image\n@@||shareasale.com/image/$domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||sharinspireds.co.nf/Images/Ads/$~third-party\n@@||shawfloors.com/adx/$image,~third-party\n@@||shelleytheatre.co.uk/filmimages/banners/160\n@@||shopmanhattanite.com/affiliatebanners/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||siamautologistics.com/ads/$image,~third-party\n@@||sify.com/news/postcomments.php?*468x60.html\n@@||signin.verizon.com^*/affiliate/$subdocument,xmlhttprequest\n@@||sihanoukvilleonline.com/banners/sologo.png\n@@||silive.com/static/common/js/ads/ads.js\n@@||sillyvamp.com/ads/Donate.png\n@@||site-jump.com/banners/\n@@||sjsuspartans.com/ads2/$image\n@@||skymediator.com/ads/*/skymediator.php?$subdocument\n@@||skypeassets.com^*/advertise/$domain=skype.com\n@@||slotsheaven.com/banners/$~third-party\n@@||slowblog.com/ad.js\n@@||smartadserver.com/call/pubj/*/8596/s/*/?$script,domain=cuantarazon.com|cuantocabron.com|vistoenfb.com\n@@||smartclip.net/delivery/tag?$object-subrequest,domain=nfl.com\n@@||smc.temple.edu/advertising/$domain=smctemple.wpengine.com\n@@||smctemple.wpengine.com/advertising/$~third-party\n@@||smileonthetiles2.co.uk/openx/www/$image,script,subdocument,domain=smileonthetiles.com|smileonthetiles2.co.uk\n@@||smmirror.com^*/getads.php\n@@||socialblogsitewebdesign.com^*/advertising_conversion_images/\n@@||softwarepromotions.com/adwords/$~third-party\n@@||softwarepromotions.com/images/google-adwords-professional.gif\n@@||somethingsexyplanet.com/image/adzones/\n@@||somewheresouth.net/banner/banner.php$image\n@@||songza.com/advertising/top/\n@@||songza.com/static/*/songza/ads/iframe.js\n@@||sonicstate.com/video/hd/hdconfig-geo.cfm?$object-subrequest\n@@||sonypictures.com/global/images/ads/300x250/ad300x250.json$xmlhttprequest\n@@||sonypictures.com^*/admedia/\n@@||southwest.com/assets/images/ads/ad_select_flight_\n@@||southwest.com^*/homepage/ads/\n@@||spectrum.ieee.org/assets/js/masonry-ads-right.min.js\n@@||spendino.de/admanager/\n@@||sploder.com/prerollad.swf?s=$object-subrequest\n@@||sponsorselect.com/direct/preroll.aspx?$subdocument,domain=pch.com\n@@||sponsorselect.com/Direct/SponsorIndex.aspx$domain=pch.com\n@@||spotrails.com/crossdomain.xml$object-subrequest\n@@||spotrails.com^*/flowplayeradplayerplugin.swf\n@@||spotxchange.com/ad_player/as3.swf$domain=games.yahoo.com|onescreen.net\n@@||spotxchange.com/crossdomain.xml$object-subrequest\n@@||spotxchange.com/flash/ad.swf?$domain=directon.tv|wii-cast.tv\n@@||spotxchange.com/flash/adplayer.swf$domain=boxlive.tv|directon.tv|foxnews.ws|icastlive.tv|wii-cast.tv\n@@||spotxchange.com/media/videos/flash/ad_player/$domain=directon.tv|games.yahoo.com|onescreen.net|wii-cast.tv\n@@||spotxchange.com/media/videos/flash/adplayer_$domain=directon.tv\n@@||springboardplatform.com/storage/lightbox_code/static/companion_ads.js\n@@||springbokradio.com/images/ads-\n@@||springbokradio.com/sitebuilder/images/ads-\n@@||sprint.com^*/adservice/$xmlhttprequest\n@@||sprouts.com/ad/$image,subdocument\n@@||ssacdn.com/banners/$domain=supersonicads.com\n@@||ssl-images-amazon.com/images/G/01/traffic/s9m/images/sweeps/$image,domain=amazon.com\n@@||ssl-images-amazon.com^*/popover/popover-$script\n@@||st.com^*/banners.js\n@@||startxchange.com/textad.php?$xmlhttprequest\n@@||state.co.us/caic/pub_bc_avo.php?zone_id=$subdocument\n@@||statedesign.com/advertisers/$image,~third-party\n@@||static.adzerk.net/ados.js$domain=stackoverflow.com\n@@||static.ak.fbcdn.net^*/ads/$script\n@@||static.bored.com/advertising/top10/$image,domain=bored.com\n@@||stats.g.doubleclick.net/dc.js$domain=native-instruments.com|nest.com|theheldrich.com\n@@||stclassifieds.sg/images/ads/$~third-party\n@@||stclassifieds.sg/postad/\n@@||stickam.com/css/ver1/asset/sharelayout2col_ad300x250.css\n@@||streaming.gmgradio.com/adverts/*.mp3$object-subrequest\n@@||streamlive.to/ads/$object,script\n@@||style.com/flashxml/*.doubleclick$object\n@@||style.com/images/*.doubleclick$object\n@@||subscribe.newyorker.com/ams/page-ads.js\n@@||subscribe.teenvogue.com/ams/page-ads.js\n@@||sulekhalive.com/images/property/bannerads/$domain=sulekha.com\n@@||summitracing.com/global/images/bannerads/\n@@||supercartoons.net/ad-preroll.html\n@@||superfundo.org/advertisement.js\n@@||supersonicads.com/api/rest/funds/*/advertisers/$~third-party\n@@||supersonicads.com/api/v1/trackCommission.php*password=$image\n@@||supersonicads.com/delivery/singleBanner.php?*&bannerId$subdocument\n@@||support.dlink.com/Scripts/custom/pop.js\n@@||svcs.ebay.com/services/search/FindingService/*affiliate.tracking$domain=bkshopper.com|geo-ship.com|testfreaks.co.uk|watchmydeals.com\n@@||swordfox.co.nz^*/advertising/$~third-party\n@@||syn.5min.com/handlers/SenseHandler.ashx?*&adUnit=$script\n@@||syndication.streamads.yahoo.com/na_stream_brewer/brew/*?cid=*&url=*&pvid=*&callback=$script,domain=yimg.com\n@@||syracuse.com/static/common/js/ads/ads.js\n@@||tacdn.com^*_popunder_$script,stylesheet\n@@||tags.bkrtx.com/js/bk-coretag.js$domain=zillow.com\n@@||take40.com/common/javascript/ads.js\n@@||talkgold.com/bans/rss.png\n@@||talkrtv.com/ad/channel.php?$subdocument\n@@||tbns.com.au/shops/images/ads/$~third-party\n@@||tcadops.ca/consumer/adtagtc_$script,domain=metro.ca\n@@||tctechcrunch2011.files.wordpress.com^$image,domain=techcrunch.com\n@@||teamcococdn.com^*/AdManager_*.swf?$object-subrequest,domain=teamcoco.com\n@@||teknikor.com/content/wp-content/themes/*-adv.jpg\n@@||telegraphcouk.skimlinks.com/api/telegraph.skimlinks.js\n@@||temple.edu/advertising/$~third-party\n@@||tetrisfriends.com/ads/google_dfp_video_ad.html\n@@||texasstudentmedia.com/advertise/\n@@||theatlantic.com/widget/$xmlhttprequest\n@@||thedailygreen.com/ams/page-ads.js?\n@@||thedoujin.com/includes/ads/$subdocument,domain=thedoujin.com\n@@||theepochtimes.com/ads/video/inarticle-video.html$subdocument\n@@||theepochtimes.com/ads/videos-below.htm?$subdocument\n@@||theepochtimes.com/ads/videos-right.html?$subdocument\n@@||theepochtimes.com^*/article-ads.js?\n@@||thefrisky.com/js/adspaces.min.js\n@@||thekraftgroup.com/crossdomain.xml$object-subrequest\n@@||theloop.com.au/js/simplejob_ad_content.js?\n@@||themoneyconverter.com/CurrencyConverter.aspx?*business-standard.com/ads/currency_converter_img.jpg$subdocument,domain=business-standard.com\n@@||thenewage.co.za/classifieds/images2/postad.gif\n@@||thenewsroom.com^*/advertisement.xml$object-subrequest\n@@||theory-test.co.uk/css/ads.css\n@@||theplatform.com/current/pdk/js/plugins/doubleclick.js$domain=cbc.ca\n@@||thestreet-static.com/video/js/companionAdFunc.js$domain=thestreet.com\n@@||thetvdb.com/banners/\n@@||theweathernetwork.com/js/adrefresh.js\n@@||theweathernetwork.com/tpl/web/adtech/$xmlhttprequest\n@@||thomann.de/thumb/*/pics/adv/adv_image_\n@@||thomsonlocal.com/js/adsense-min.js\n@@||thrifty.co.uk/bannerads/\n@@||thumbs.hexagram.com^$domain=scribol.com\n@@||thunderheadeng.com/wp-content/uploads/*300x250\n@@||tidaltv.com/crossdomain.xml$object-subrequest,domain=~channel4.com|~itv.com\n@@||timeinc.net/golf/static/ads/iframe_ad_factory.js$domain=golf.com\n@@||timeinc.net/people/static/i/advertising/getpeopleeverywhere-$image,domain=people.com|peoplestylewatch.com\n@@||timeinc.net^*/tii_ads.js\n@@||timeout.com/images/ads/weather/\n@@||timesofmalta.com/videoads/*preroll.flv$object-subrequest\n@@||tinbuadserv.com/js/integrate/ads_common.js\n@@||tinbuadserv.com/v3/serve.php?$script\n@@||tinysubversions.com/clickbait/adjs.json\n@@||tkcarsites.com/soba/bannersservice\n@@||tnol.com/adimages/digitaledition/$object-subrequest\n@@||tntexpress.com.au^*/marketing/banners/\n@@||tooltrucks.com/ads/$image,~third-party\n@@||tooltrucks.com/banners/$image,~third-party\n@@||toongames.com/advertising/toon-google-preloader.swf$object\n@@||topgear.com^*/ads.min.js\n@@||topusajobs.com/banners/\n@@||toshiba.*^banner_id^$subdocument\n@@||track.adform.net/serving/scripts/trackpoint/$script,domain=strokekampanjen.se|tigerofsweden.com\n@@||trade-a-plane.com/AdBox/js/jquery.TAP_AdBox.js\n@@||tradecarview.com/material/housead/$image\n@@||tradedoubler.com/file/$image,domain=deliverydeals.co.uk\n@@||trader.ca/TraderMobileAPIBB.asmx/GetAds?$script,domain=autos.ca\n@@||traktorpool.de/scripts/advert/\n@@||traktorpool.de^*/advert.\n@@||translate.google.*/translate_*&q=$~third-party,xmlhttprequest\n@@||translate.google.com/translate/static/*-ads/\n@@||traumagame.com/trauma_data/ads/ad2.jpg\n@@||travelocity.com/event.ng/*click$domain=travelocity.com\n@@||travelocity.com/html.ng/*558x262$domain=travelocity.com\n@@||travelocity.com/js.ng/$script,domain=travelocity.com\n@@||travidia.com/fsi/page.aspx?$subdocument\n@@||travidia.com/ss-page/\n@@||tremor.nuggad.net/crossdomain.xml$object-subrequest\n@@||tremormedia.com/acudeo/$script,domain=indiatimes.com\n@@||trialpay.com/js/advertiser.js\n@@||trifort.org/ads/$~third-party\n@@||trulia.com/modules/ad_agents_$xmlhttprequest\n@@||trustedreviews.com^*/adtech.js\n@@||trutv.com/includes/banners/de/video/*.ad|$object-subrequest\n@@||tubemogul.com/bootloader/tubemogulflowplayer.swf$object-subrequest\n@@||tubemogul.com/crossdomain.xml$object-subrequest\n@@||tudouui.com/bin/player2/*&adsourceid=\n@@||turner.com/adultswim/big/promos/$media,domain=video.adultswim.com\n@@||turner.com/xslo/cvp/ads/freewheel/bundles/2/AdManager.swf?$object-subrequest,domain=tbs.com\n@@||turner.com^*/ads/freewheel/*/AdManager.js$domain=cnn.com\n@@||turner.com^*/ads/freewheel/bundles/*/renderers.xml$object-subrequest,domain=cartoonnetwork.com|tnt.tv\n@@||turner.com^*/ads/freewheel/bundles/2/admanager.swf$domain=adultswim.com|cartoonnetwork.com|games.cnn.com|nba.com\n@@||turner.com^*/ads/freewheel/js/fwjslib_1.1.js$domain=nba.com\n@@||turner.com^*/videoadrenderer.swf$domain=tntdrama.com\n@@||tut.by/uppod/frameid406/ads1/\n@@||tv-kino.net/wp-content/themes/*/advertisement.js\n@@||tvgorge.com^*/adplayer.swf\n@@||tvnz.co.nz/*/advertisement.js\n@@||twitvid.com/mediaplayer_*.swf?\n@@||twogag.com/comics/$image,~third-party\n@@||u.openx.net/v/1.0/sc?$object-subrequest,domain=motogp.com\n@@||ucaster.eu/static/scripts/adscript.js\n@@||uillinois.edu/eas/\n@@||ukbride.co.uk/css/*/adverts.css\n@@||ultimate-guitar.com/js/ug_ads.js\n@@||ultrabrown.com/images/adheader.jpg\n@@||undsports.com/ads2/$image\n@@||upc-cablecom.ch^*.swf?clicktag=http$object\n@@||upload.wikimedia.org/wikipedia/\n@@||uploaded.net/affiliate/$~third-party,xmlhttprequest\n@@||urbanog.com/banners/$image\n@@||usairways.com^*/doubleclick.js\n@@||usanetwork.com^*/usanetwork_ads.s_code.js?\n@@||usps.com/adserver/\n@@||utarget.co.uk/crossdomain.xml$object-subrequest\n@@||utdallas.edu/locator/maps/$image\n@@||utdallas.edu/maps/images/img/$image\n@@||utdallas.edu^*/banner.js\n@@||uuuploads.com/ads-on-buildings/$image,domain=boredpanda.com\n@@||v.fwmrm.net/*/AdManager.swf$domain=marthastewart.com\n@@||v.fwmrm.net/ad/p/1?$object-subrequest,domain=abc.go.com|abcfamily.go.com|abcnews.go.com|adultswim.com|cartoonnetwork.com|cc.com|channel5.com|cmt.com|colbertnation.com|comedycentral.com|eonline.com|espn.go.com|espndeportes.com|espnfc.co.uk|espnfc.com|espnfc.com.au|espnfc.us|espnfcasia.com|gametrailers.com|ign.com|logotv.com|mlb.mlb.com|mtv.com|mtvnservices.com|nascar.com|nbc.com|nbcnews.com|nbcsports.com|nick.com|player.theplatform.com|simpsonsworld.com|sky.com|southpark.nl|southparkstudios.com|spike.com|teamcoco.com|teennick.com|thedailyshow.com|thingx.tv|tv3play.se|tvland.com|uverseonline.att.net|vevo.com|vh1.com|video.cnbc.com|vod.fxnetworks.com\n@@||v.fwmrm.net/crossdomain.xml$object-subrequest\n@@||v.fwmrm.net/p/espn_live/$object-subrequest\n@@||v.fwmrm.net/|$object-subrequest,domain=tv10play.se|tv3play.se|tv6play.se|tv8play.se\n@@||vacationstarter.com/hive/images/adv_\n@@||vad.go.com/dynamicvideoad?$object-subrequest\n@@||vagazette.com/hive/images/adv_\n@@||valueram.com/banners/ads/\n@@||vancouversun.com/js/adsync/adsynclibrary.js\n@@||vanityfair.com/ads/js/cn.dart.bun.min.js\n@@||veetle.com/images/common/ads/\n@@||ventunotech.akamai-http.edgesuite.net/VtnGoogleVpaid.swf?*&ad_type=$object-subrequest,domain=cricketcountry.com\n@@||vhobbies.com/admgr/*.aspx?ZoneID=$script,domain=vcoins.com\n@@||viamichelin.*/rentacar.js\n@@||viamichelin.*/static/advert/afsquery/afsquery.js\n@@||viamichelin.*/static/advert/sponsoring/itinerarypage/itinerarypage.js\n@@||vidcoin.com/adserver/$subdocument,xmlhttprequest\n@@||video.economist.com/adfinder.jsp?\n@@||video.nbcuni.com^*/ad_engine_extension_nbc.swf\n@@||video.nbcuni.com^*/inext_ad_engine/ad_engine_extension.swf\n@@||video.unrulymedia.com/iframe_$subdocument,domain=theemptynestexpress.com\n@@||video.unrulymedia.com/wildfire_$script,domain=theemptynestexpress.com\n@@||videoads.washingtonpost.com^$object-subrequest,domain=slatev.com\n@@||videosxml.mobileads.indiatimes.com^$object-subrequest\n@@||vidspot.net/blank.html|$subdocument\n@@||vidspot.net/builtin-$subdocument\n@@||vidspot.net/cgi-bin/upload.cgi?upload_id=*&X-Progress-ID=*&js_on=*&utype=*&upload_type=$subdocument\n@@||vidspot.net/tmp/status.html?*upload=file$subdocument\n@@||vidtech.cbsinteractive.com/plugins/*_adplugin.swf\n@@||villermen.com/minecraft/banner/banner.php$image\n@@||vindicoasset.edgesuite.net/repository/campaigncreative/*/instreamad/$object-subrequest\n@@||vistek.ca/ads/\n@@||vitalitymall.co.za/images/adrotator/\n@@||vizanime.com/ad/get_ads?\n@@||vk.com/ads?act=$~third-party\n@@||vk.com/ads_rotate.php$domain=vk.com\n@@||vmagazine.com/web/css/ads.css\n@@||vombasavers.com^*.swf?clickTAG=$object,~third-party\n@@||vswebapp.com^$~third-party\n@@||vtstage.cbsinteractive.com/plugins/*_adplugin.swf\n@@||w.org/adsense-plugin/assets/banner-$image,domain=wordpress.org\n@@||w.org/plugins/adsense-plugin/screenshot-$image,domain=wordpress.org\n@@||wahoha.com^$~third-party\n@@||wahooads.com/Ads.nsf/$~third-party\n@@||wallpapersmania.com/ad/$image,~third-party\n@@||walmartmoneycard.com^*/shared/ad_rotater.swf\n@@||wappalyzer.com/sites/default/files/icons/$image\n@@||washingtonpost.com/wp-adv/advertisers/russianow/\n@@||washingtonpost.com/wp-srv/ad/generic_ad.js\n@@||washingtonpost.com/wp-srv/ad/textlink_driver.js\n@@||washingtonpost.com/wp-srv/ad/textlinks.js\n@@||washingtonpost.com/wp-srv/ad/textlinks_config.js\n@@||washingtonpost.com/wp-srv/ad/wp.js\n@@||washingtonpost.com/wp-srv/ad/wp_ad.js\n@@||washingtonpost.com/wp-srv/ad/wp_config.js\n@@||washingtonpost.com/wp-srv/ad/wpni_generic_ad.js\n@@||washingtonpost.com^*=/ad/audsci.js\n@@||we7.com/api/streaming/advert-info?$object-subrequest\n@@||wearetennis.com/pages/home/img/ad-$image\n@@||web-jp.ad-v.jp/adam/inline?$object-subrequest,domain=daisuki.net\n@@||web-jp.ad-v.jp/crossdomain.xml$domain=daisuki.net\n@@||wellsfargo.com/img/ads/$~third-party\n@@||whitepages.com^*/google_adsense.js?\n@@||whittakersworldwide.com/site-media/advertisements/\n@@||whstatic.com/images/thumb/*-Popup-Ads-$image,domain=wikihow.com\n@@||widget.breakingburner.com/ad/$subdocument\n@@||widget.slide.com^*/ads/*/preroll.swf\n@@||widgets.cbslocal.com/player/embed?affiliate=$subdocument\n@@||widgets.rewardstyle.com^$domain=glamour.com|itsjudytime.com\n@@||widgetserver.com/syndication/get_widget.html?*&widget.adplacement=$subdocument\n@@||williamsauction.com/Resources/images/ads/$~third-party\n@@||wired.com^*/cn-fe-ads/cn.dart.js\n@@||wirefly.com/_images/ads/\n@@||wisegeek.com/res/contentad/\n@@||worldstarhiphop.com^*/dj2.swf\n@@||wortech.ac.uk/publishingimages/adverts/\n@@||wp.com/_static/*/criteo.js\n@@||wp.com/ads-pd.universalsports.com/media/$image\n@@||wp.com/www.noobpreneur.com/wp-content/uploads/*-ad.jpg?resize=$domain=noobpreneur.com\n@@||wpthemedetector.com/ad/$~third-party\n@@||wrapper.teamxbox.com/a?size=headermainad\n@@||wsj.net^*/images/adv-$image,domain=marketwatch.com\n@@||www.facebook.com/ad.*^ajaxpipe^$subdocument,~third-party\n@@||www.google.*/aclk?*&adurl=$subdocument,~third-party\n@@||www.google.*/search?$subdocument\n@@||www.google.*/settings/u/0/ads/preferences/$~third-party,xmlhttprequest\n@@||www.google.com/ads/preferences/$image,script,subdocument\n@@||www.networkadvertising.org/choices/|$document\n@@||www8-hp.com^*/styles/ads/$domain=hp.com\n@@||yadayadayada.nl/banner/banner.php$image,domain=murf.nl|workhardclimbharder.nl\n@@||yahoo.com/combo?$stylesheet\n@@||yahoo.net/1/adnetwork/$object-subrequest\n@@||yceml.net^$image,domain=affrity.com|catalogfavoritesvip.com|deliverydeals.co.uk|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||yceml.net^$object,domain=affrity.com\n@@||yellowpages.com.mt/Images/Design/Buttons/advert.png\n@@||yellupload.com/yell/videoads/*.flv|\n@@||yellupload.com/yell/videoads/yellvideoplayer.swf?\n@@||yimg.com/ks/plugin/adplugin.swf?$domain=yahoo.com\n@@||yimg.com/p/combo?$stylesheet,domain=yahoo.com\n@@||yimg.com/rq/darla/*/g-r-min.js$domain=yahoo.com\n@@||yimg.com/zz/combo?*&*.js\n@@||yimg.com^*&yat/js/ads_\n@@||yimg.com^*/adplugin_*.swf$object,domain=games.yahoo.com\n@@||yimg.com^*/ads-min.css$domain=yahoo.com\n@@||yimg.com^*/java/promotions/js/ad_eo_1.1.js\n@@||ykhandler.com/adframe.js\n@@||yokosonews.com/files/cache/\n@@||yoox.com/img//banner/affiliation/$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@||youtube.com/yt/advertise/medias/images/$image\n@@||youtube.com/yt/css/www-advertise.css\n@@||youtube.com^*_adsense_$xmlhttprequest\n@@||ytimg.com/yts/img/channels/*_banner-*.jpg$domain=youtube.com\n@@||ytimg.com/yts/img/channels/*_banner-*.png$domain=youtube.com\n@@||ytimg.com^*/channels4_banner.jpg?$domain=youtube.com\n@@||ytimg.com^*/channels4_banner_hd.jpg?$domain=youtube.com\n@@||yttalk.com/threads/*/add-reply$domain=yttalk.com\n@@||yumenetworks.com/content/static/$domain=dailygames.com\n@@||yumenetworks.com/crossdomain.xml$object-subrequest\n@@||zamimg.com/modelviewer/*/doodads/$object-subrequest,domain=wowhead.com\n@@||zap2it.com/ads/newsletter/$image,~third-party\n@@||zattoo.com/?advideo/*;vidAS=PRE_ROLL;$object-subrequest\n@@||zattoo.com/advertising/channelswitch/$subdocument\n@@||zedo.com/bar/*/fnsr.vast?$object-subrequest,domain=ibnlive.in.com\n@@||zedo.com/crossdomain.xml$object-subrequest\n@@||zedo.com/jsc/c5/fhs.js$domain=rrstar.com\n@@||zedo.com/swf/$domain=startv.in\n@@||zeenews.india.com/ads/jw/player.swf$object\n@@||ziehl-abegg.com/images/img_adverts/$~third-party\n@@||zillow.com/ads/FlexAd.htm?did=$subdocument\n@@||zillow.com/widgets/search/ZillowListingsWidget.htm?*&adsize=$subdocument,domain=patch.com\n! Bug #1865: ABP for Chrome messes up the page on high DPI (https://issues.adblockplus.org/ticket/1865)\n@@||ads.tw.adsonar.com/adserving/getAdsAPI.jsp?callback=aslHandleAds*&c=aslHandleAds*&key=$script,domain=techcrunch.com\n! Anti-Adblock\n@@.audio/$script,domain=cbs.com\n@@.bmp^$image,domain=cbs.com\n@@.click/$script,third-party,domain=cbs.com\n@@.gif#$domain=9tutorials.com|aseanlegacy.net|budget101.com|cbox.ws|eventosppv.me|funniermoments.com|ibmmainframeforum.com|onlinemoviesfreee.com|premiumleecher.com|remo-xp.com|showsport-tv.com|superplatyna.com|turktorrent.cc|tv-porinternet.com.mx|ver-flv.com|xup.in\n@@.gif#$image,domain=360haven.com|needrom.com\n@@.gif?ad_banner=$domain=majorleaguegaming.com\n@@.gif|$object-subrequest,domain=cbs.com\n@@.info^$image,script,third-party,domain=cbs.com\n@@.javascript|$domain=cbsnews.com\n@@.jpeg|$object-subrequest,domain=cbs.com\n@@.jpg#$domain=desionlinetheater.com|firsttube.co|lag10.net|livrosdoexilado.org|mac2sell.net|masfuertequeelhierro.com|movie1k.net|play-old-pc-games.com|rtube.de|uploadlw.com\n@@.jpg|$object-subrequest,domain=cbs.com\n@@.jscript|$script,third-party,domain=cbs.com\n@@.link/$script,domain=cbs.com\n@@.min.js$domain=ftlauderdalewebcam.com|nyharborwebcam.com|portcanaveralwebcam.com|portevergladeswebcam.com|portmiamiwebcam.com\n@@.mobi/$script,domain=cbs.com\n@@.png#$domain=300mblink.com|amigosdelamili.com|android-zone.org|anime2enjoy.com|anizm.com|anonytext.tk|backin.net|better-explorer.com|bitcofree.com|chrissmoove.com|cleodesktop.com|debrastagi.com|debridit.com|debridx.com|fcportables.com|go4up.com|hackintosh.zone|hogarutil.com|hostyd.com|ilive.to|lordpyrak.net|marketmilitia.org|mastertoons.com|mediaplaybox.com|minecraft-forum.net|myksn.net|pes-patch.com|portalzuca.net|premium4.us|puromarketing.com|realidadscans.org|secureupload.eu|stream2watch.me|stream4free.eu|streamlive.to|superplatyna.com|trizone91.com|turkdown.com|url4u.org|vencko.net|wowhq.eu\n@@.png?*#$domain=mypapercraft.net|xlocker.net\n@@.png?ad_banner=$domain=majorleaguegaming.com\n@@.png?advertisement_$domain=majorleaguegaming.com\n@@.png^$image,domain=cbs.com\n@@.streamads.js$third-party,domain=cbs.com\n@@.xzn.ir/$script,third-party,domain=psarips.com\n@@/adFunctionsD-cbs.js$domain=cbs.com\n@@/adlogger_tracker.php$subdocument,domain=chrissmoove.com\n@@/ads/popudner/banner.jpg?$domain=spinandw.in\n@@/advertisement.js$domain=dramacafe.in|ilive.to\n@@/advertisement2.js$domain=ilive.to\n@@/afr.php?$script,domain=sankakucomplex.com\n@@/banman/*$script,domain=atlanticcitywebcam.com|ftlauderdalebeachcam.com|ftlauderdalewebcam.com|keywestharborwebcam.com|morganhillwebcam.com|nyharborwebcam.com|portarubawebcam.com|portbermudawebcam.com|portcanaveralwebcam.com|portevergladeswebcam.com|portmiamiwebcam.com|portnywebcam.com\n@@/banner.jpg?$image,domain=filmux.net\n@@/blockalyzer-adblock-counter/js/advertisement.js$script\n@@/crosdomain.xml$object-subrequest,domain=dramafever.com\n@@/crossdomain.xml$object-subrequest,domain=dramafever.com\n@@/pubads.jpeg$object-subrequest,domain=cbs.com\n@@/pubads.png$object-subrequest,domain=cbs.com\n@@/searchad.$object-subrequest,domain=cbs.com\n@@/wp-content/plugins/adblock-notify-by-bweb/js/advertisement.js\n@@/wp-content/plugins/anti-block/js/advertisement.js\n@@/wp-content/plugins/wordpress-adblock-blocker/adframe.js\n@@/wp-prevent-adblocker/*$script\n@@|http://$image,subdocument,third-party,domain=filmovizija.com\n@@|http://$image,third-party,domain=seekingalpha.com\n@@|http://$script,third-party,domain=eventhubs.com\n@@|http://$subdocument,domain=uptobox.com\n@@|http://*.co^$script,third-party,domain=cbs.com\n@@|http://*.com^*.js|$third-party,domain=cbs.com\n@@|http://*.jpg?$image,domain=cbs.com\n@@|http://*.js|$script,third-party,domain=cbs.com\n@@|http://*.net^*.bmp|$object-subrequest,domain=cbs.com\n@@|http://*.net^*.js|$third-party,domain=cbs.com\n@@|http://*.pw^$script,third-party,domain=cbs.com\n@@|http://*.tk^$script,domain=ilive.to\n@@|http://*.xyz^$script,third-party,domain=cbs.com\n@@|http://*/pubads.$object-subrequest,domain=cbs.com\n@@|http://*?_$image,domain=cbs.com\n@@|http://l.$script,third-party,domain=cbs.com\n@@|http://popsads.com^$script,domain=filmovizija.com\n@@|https://$script,domain=kissanime.com\n@@|https://$script,third-party,domain=cbs.com|eventhubs.com\n@@||247realmedia.com/RealMedia/ads/Creatives/default/empty.gif$image,domain=surfline.com\n@@||2mdn.net/instream/flash/v3/adsapi_$object-subrequest,domain=cbs.com\n@@||2mdn.net/instream/video/client.js$domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com|majorleaguegaming.com\n@@||300mblink.com^$elemhide\n@@||360haven.com/adframe.js\n@@||360haven.com^$elemhide\n@@||4fuckr.com^*/adframe.js\n@@||4shared.com^$script\n@@||4sysops.com^*/adframe.js\n@@||94.23.147.101^$script,domain=filmovizija.com\n@@||95.211.184.210/js/advertisement.js\n@@||95.211.194.229^$script,domain=slickvid.com\n@@||9msn.com.au/Services/Service.axd?*=AdExpert&$script,domain=9news.com.au\n@@||9tutorials.com^$elemhide\n@@||9xbuddy.com/js/ads.js\n@@||ad-emea.doubleclick.net/ad/*.CHANNEL41/*;sz=1x1;$object-subrequest,domain=channel4.com\n@@||ad-emea.doubleclick.net/crossdomain.xml$object-subrequest,domain=channel4.com\n@@||ad.doubleclick.net/|$image,domain=cwtv.com\n@@||ad.filmweb.pl^$script\n@@||ad.leadbolt.net/show_cu.js\n@@||ad.uptobox.com/www/delivery/ajs.php?$script\n@@||ad.yieldmanager.com/imp^$script,domain=watchseries-online.eu\n@@||ad4game.com*/images/$image,domain=kissanime.com\n@@||adexprt.com/cdn3/*&m=magnet$subdocument\n@@||adm.fwmrm.net/p/MTG_Live/Video2AdRenderer.swf$object-subrequest,domain=tv3play.se\n@@||admeld.com/ad/iframe/1122/pixfuture/300x250/$subdocument,domain=fileover.net\n@@||admeld.com/meld128.js$domain=fileover.net\n@@||admin.brightcove.com^$object-subrequest,domain=tvn.pl|tvn24.pl\n@@||adnxs.com^$script,domain=kissanime.com\n@@||adocean.pl^*/ad.js?id=$script,domain=tvn24.pl\n@@||ads.adk2.com/|$subdocument,domain=vivo.sx\n@@||ads.avazu.net^$subdocument,domain=casadossegredos.tv|xuuby.com\n@@||ads.clubedohardware.com.br/www/delivery/$script\n@@||ads.intergi.com^$script,domain=spoilertv.com\n@@||ads.lzjl.com/newserving/showad.php$domain=everythingon.tv\n@@||ads.milliyet.cubecdn.net/winwords/adhood/winwords2.client.js$domain=dizi-mag.com\n@@||ads.rubiconproject.com/ad/$domain=mangasky.co\n@@||ads.rubiconproject.com/ad/$script,domain=manga2u.co|mangabird.com|memegenerator.net|onemanga.me|waoanime.tv\n@@||ads.uptobox.com/www/delivery/ajs.php?zoneid=$script\n@@||ads.uptobox.com/www/images/*.png\n@@||adscale.de/getads.js$domain=filmovizija.com\n@@||adscendmedia.com/gwjs.php?$script,domain=civilization5cheats.com|kzupload.com\n@@||adserver.adtech.de/?adrawdata/3.0/$object-subrequest,domain=groovefm.fi|hs.fi|istv.fi|jimtv.fi|livtv.fi|loop.fi|metrohelsinki.fi|nelonen.fi|nyt.fi|radioaalto.fi|radiorock.fi|radiosuomipop.fi|ruutu.fi\n@@||adserver.adtech.de/?adrawdata/3.0/$script,domain=entertainment.ie\n@@||adserver.adtech.de/multiad/$script,domain=hardware.no|vg.no\n@@||adserver.liverc.com/getBannerVerify.js\n@@||adshost2.com/js/show_ads.js$domain=bitcoinker.com\n@@||adtechus.com/dt/common/postscribe.js$domain=vg.no\n@@||adv.wp.pl/RM/Box/*.mp4$object-subrequest,domain=wp.tv\n@@||advertisegame.com^$image,domain=kissanime.com\n@@||adverts.eclypsia.com/www/images/*.jpg|$domain=eclypsia.com\n@@||adzerk.net/ados.js$domain=majorleaguegaming.com\n@@||afdah.com^$script\n@@||afreesms.com/ad*.js\n@@||afterburnerleech.com/js/show_ads.js\n@@||ahctv.com^$elemhide\n@@||aidinge.com^$image,domain=cbs.com\n@@||ailde.net^$object-subrequest,domain=cbs.com\n@@||aildu.net^$object-subrequest,domain=cbs.com\n@@||airpush.com/wp-content/plugins/m-wp-popup/js/wpp-popup-frontend.js$domain=filmovizija.com\n@@||aka-cdn-ns.adtech.de/images/*.gif$image,domain=akam.no|amobil.no|gamer.no|hardware.no|teknofil.no\n@@||alcohoin-faucet.tk/advertisement.js\n@@||alidv.net^$object-subrequest,domain=cbs.com\n@@||alidw.net^$object-subrequest,domain=cbs.com\n@@||allkpop.com/ads.js\n@@||amazonaws.com/*.js$domain=cwtv.com\n@@||amazonaws.com/atzuma/ajs.php?adserver=$script\n@@||amazonaws.com/ssbss.ss/$script\n@@||amigosdelamili.com^$elemhide\n@@||amk.to/js/adcode.js?\n@@||ancensored.com/sites/all/modules/player/images/ad.jpg\n@@||android-zone.org^$elemhide\n@@||animalplanet.com^$elemhide\n@@||anime2enjoy.com^$elemhide\n@@||animecrave.com/_content/$script\n@@||anisearch.com^*/ads.js?\n@@||anizm.com^$elemhide\n@@||anonytext.tk^$elemhide\n@@||antena3.com/adsxml/$object-subrequest\n@@||anti-adblock-scripts.googlecode.com/files/adscript.js\n@@||apkmirror.com/wp-content/themes/APKMirror/js/ads.js\n@@||appfull.net^$elemhide\n@@||ar51.eu/ad/advertisement.js\n@@||arto.com/includes/js/adtech.de/script.axd/adframe.js?\n@@||aseanlegacy.net/ad*.js\n@@||aseanlegacy.net/assets/advertisement.js\n@@||aseanlegacy.net/images/ads.png\n@@||aseanlegacy.net^$elemhide\n@@||atresmedia.com/adsxml/$object-subrequest\n@@||atresplayer.com/adsxml/$object-subrequest\n@@||atresplayer.com/static/js/advertisement.js\n@@||auditude.com/player/js/lib/aud.html5player.js\n@@||autolikergroup.com/advertisement.js\n@@||avforums.com/*ad$script\n@@||ax-d.pixfuture.net/w/$script,domain=fileover.net\n@@||backin.net^$elemhide\n@@||bdrip.ws/web_data/*/ad$image\n@@||bdrip.ws^$elemhide\n@@||bestofmedia.com^*/advertisement.js\n@@||better-explorer.com^$elemhide\n@@||bezaldfamily.net^$elemhide\n@@||bitcofree.com^$elemhide\n@@||bitcoiner.net/advertisement.js\n@@||biz.tm^$script,domain=ilix.in|priva.us|urlink.at\n@@||blinkboxmusic.com^*/advertisement.js\n@@||blogspot.com^*#-$image,domain=cricket-365.pw|cricpower.com|pirlotv.tv\n@@||boincstats.com/js/adframe.js\n@@||boxxod.net/advertisement.js\n@@||brightcove.com^*/AdvertisingModule.swf$object-subrequest,domain=channel5.com|dave.uktv.co.uk|player.stv.tv|wwe.com\n@@||btspread.com/eroex.js\n@@||budget101.com^$elemhide\n@@||buysellads.com/ac/bsa.js$domain=jc-mp.com\n@@||bywarrior.com^$elemhide\n@@||c1.popads.net/pop.js$domain=go4up.com\n@@||captchme.net/js/advertisement-min.js\n@@||captchme.net/js/advertisement.js\n@@||casadossegredos.tv/ads/ads_$subdocument\n@@||caspion.com/cas.js$domain=clubedohardware.com.br\n@@||catchvideo.net/adframe.js\n@@||cbs.com^$elemhide\n@@||cbsistatic.com^*/advertisement.js$domain=cnet.com\n@@||cdn-surfline.com/ads/VolcomSurflinePlayerHo13.jpg$domain=surfline.com\n@@||cdnco.us^$script\n@@||celogeek.com/stylesheets/blogads.css\n@@||chango.com^*/adexchanger.png?$domain=kissanime.com\n@@||channel4.com/ad/l/1?|$object-subrequest\n@@||channel4.com/p/c4_live/ExternalHTMLAdRenderer.swf$object-subrequest\n@@||channel4.com/p/c4_live/PauseAdExtension.swf$object-subrequest\n@@||channel4.com/p/c4_live/UberlayAdRenderer.swf$object-subrequest\n@@||channel4.com/p/c4_live/Video2AdRenderer.swf$object-subrequest\n@@||channel4.com/p/c4_live/VPAIDAdRenderer.swf$object-subrequest\n@@||chitika.net/getads.js$domain=anisearch.com\n@@||chrissmoove.com^$elemhide\n@@||cleodesktop.com^$elemhide\n@@||clicksor.net/images/$domain=kissanime.com\n@@||clickxchange.com^$image,domain=kissanime.com\n@@||clkrev.com/adServe/banners?tid=$script,domain=filmovizija.com\n@@||clkrev.com/banners/script/$script,domain=filmovizija.com\n@@||cloudvidz.net^$elemhide\n@@||clubedohardware.com.br^$elemhide\n@@||codingcrazy.com/demo/adframe.js\n@@||coincheckin.com/js/adframe.js\n@@||coinracket.com^$elemhide\n@@||coinurl.com/get.php?id=18045\n@@||concutao.tk^$script,domain=ilive.to\n@@||core.adprotected.com^$subdocument,domain=kissanime.com\n@@||cpalead.com/gwjs.php?pub=$script,domain=freebitcoinz.com|youserials.com\n@@||cpalead.com/mygateway.php?pub=$script,domain=free-space.net|hxcmusic.com|hxcmusic.me|justfortrendygirls.com|mmusicz.com|receive-sms.com|runescapehack.net|spotifyripping.com|stumblehere.com|tvgorge.com|tvokay.com|videodownloadx.com|wtso.net\n@@||cpalead.com^$domain=kissanime.com\n@@||cpmstar.com^$image,domain=kissanime.com\n@@||cpmstar.com^$script,domain=kissanime.com\n@@||cpmtree.com^$script,domain=kissanime.com\n@@||cpxinteractive.com^$script,domain=kissanime.com\n@@||cricket-365.tv^$elemhide\n@@||criteo.com/content/$image,domain=kissanime.com\n@@||criteo.com/delivery/ajs.php?zoneid=$script,domain=clubedohardware.com.br\n@@||cyberdevilz.net^$elemhide\n@@||d2anfhdgjxf8s1.cloudfront.net/ajs.php?adserver=$script\n@@||d3tlss08qwqpkt.cloudfront.net/assets/api/advertisement-$script,domain=games.softgames.de\n@@||dailymotion.com/embed/video/$subdocument,domain=team-vitality.fr\n@@||debrastagi.com^$elemhide\n@@||debridit.com^$elemhide\n@@||debridx.com^$elemhide\n@@||decomaniacos.es^*/advertisement.js\n@@||demonoid.ph^$script,domain=demonoid.ph\n@@||demonoid.pw^$script,domain=demonoid.pw\n@@||desionlinetheater.com^$elemhide\n@@||destinationamerica.com^$elemhide\n@@||destinypublicevents.com/src/advertisement.js\n@@||dialde.com^$domain=cbs.com\n@@||dinglydangly.com^$script,domain=eventhubs.com\n@@||dinozap.tv/adimages/\n@@||directrev.com/js/gp.min.js$domain=filmovizija.com\n@@||discovery.com^$elemhide\n@@||discoverylife.com^$elemhide\n@@||dizi-mag.com/ads/$subdocument\n@@||dizicdn.com/i/ads/groupon.png$domain=dizi-mag.com\n@@||dlh.net^*/advertisement.js.\n@@||dnswatch.info^$script,domain=dnswatch.info\n@@||doge-faucet.tk/advertisement.js\n@@||dogefaucet.com^*/advertisement.js\n@@||dollarade.com/overlay_gateway.php?oid=$script,domain=dubs.me|filestore123.info|myfilestore.com|portable77download.blogspot.com|pspmaniaonline.com\n@@||dontdrinkandroot.net/js/adframe.js\n@@||doodle.com/builtstatic/*/doodle/js/$script\n@@||doubleclick.net/adj/gn.eventhubs.com/*;sz=728x90;$script,domain=eventhubs.com\n@@||doubleclick.net^*/adx/zattoo/video_*;cue=pre;$object-subrequest,domain=zattoo.com\n@@||dropboxusercontent.com/*ad$script,domain=kissanime.com\n@@||drugs.com^$subdocument,~third-party\n@@||dutplanet.net/ajax/reclamecheck.php?$xmlhttprequest\n@@||e24.no^$elemhide\n@@||ebkimg.com/banners/\n@@||eclypsia.com^$script,~third-party\n@@||edgekey.net^*/advertisement.js$domain=play.spotify.com\n@@||elektrotanya.com/ads/$script,~third-party\n@@||elrellano.com/ad/ad.js\n@@||enrondev.net/ads/server/www/delivery/*&zoneid=1$subdocument,domain=filecore.co.nz\n@@||epicgameads.com^$image,script,domain=kissanime.com\n@@||epmads.com/ads?$subdocument,domain=fcportables.com\n@@||epmads.com/js/show_ads_epmads.js$domain=fcportables.com\n@@||eska.pl^*bbelements.js\n@@||eskago.pl/html/js/ads-banner.js\n@@||eskago.pl/html/js/adv.bbelements.js\n@@||eskago.pl/html/js/advertisement.js\n@@||eu5.org^*/advert.js\n@@||eventhubs.com^*.$script\n@@||exoclick.com/wp-content/themes/exoclick/images/loader.gif?$domain=xmovies8.co\n@@||exponential.com/tags/ClubeDoHardwarecombr/ROS/tags.js$domain=clubedohardware.com.br\n@@||exponential.com^*/tags.js$domain=yellowbridge.com\n@@||exrapidleech.info/templates/$image\n@@||exrapidleech.info^$elemhide,script\n@@||exsite.pl^*/advert.js\n@@||ezcast.tv/static/scripts/adscript.js\n@@||fastclick.net/w/get.media?sid=58322&tp=5&$script,domain=flv2mp3.com\n@@||fastcocreate.com/js/advertisement.js\n@@||fastcodesign.com/js/advertisement.js\n@@||fastcoexist.com/js/advertisement.js\n@@||fastcolabs.com/js/advertisement.js\n@@||fastcompany.com/js/advertisement.js\n@@||fasts.tv^$script,domain=ilive.to\n@@||fcportables.com^$elemhide\n@@||ffiles.com/images/mmfiles_\n@@||fhscheck.zapto.org^$script,~third-party\n@@||fhsload.hopto.org^$script,~third-party\n@@||filecom.net/advertisement.js\n@@||fileice.net/js/advertisement.js\n@@||files.bannersnack.com/iframe/embed.html?$subdocument,domain=thegayuk.com\n@@||filmovisaprevodom.net/advertisement.js\n@@||filmovizija.com^$elemhide\n@@||filmovizija.com^$script\n@@||filmovizija.com^$subdocument\n@@||filmovizija.com^*&$image\n@@||filmovizija.com^*?$image\n@@||filmovizija.net/js/advertisement.js\n@@||filmovizija.net^$elemhide\n@@||filmovizija.net^*#$image\n@@||filmux.net/ads/banner.jpg?\n@@||filmux.org^$elemhide\n@@||filmweb.pl/adbanner/$script\n@@||firstonetv.com/ads_advertisement.js\n@@||firstrow*.eu^$script\n@@||firsttube.co^$elemhide\n@@||fitshr.net^$script,stylesheet\n@@||fm.tuba.pl/tuba3/_js/advert.js\n@@||fragflix.com^*.png?*=$image,domain=majorleaguegaming.com\n@@||free.smsmarkaz.urdupoint.com^$elemhide\n@@||free.smsmarkaz.urdupoint.com^*#-$image\n@@||freebitco.in^$script\n@@||freebitcoin.wmat.pl^*/advertisement.js\n@@||freegamehosting.nl/advertisement.js\n@@||freegamehosting.nl/js/advertisement.js\n@@||freeprosurfer.com^$elemhide\n@@||freesportsbet.com/js/advertisement.js\n@@||freshdown.net/templates/Blaster/img/*/ads/$image\n@@||freshdown.net^$elemhide\n@@||funniermoments.com/adframe.js\n@@||funniermoments.com^$elemhide\n@@||funniermoments.com^$stylesheet\n@@||fwcdn.pl^$script,domain=filmweb.pl\n@@||fwmrm.net/ad/g/1?$xmlhttprequest,domain=vevo.com\n@@||fwmrm.net/ad/g/1?prof=$script,domain=testtube.com\n@@||fwmrm.net/p/*/admanager.js$domain=adultswim.com|animalist.com|revision3.com|testtube.com\n@@||g.doubleclick.net/gampad/ad?iu=*/Leaderboard&sz=728x90$image,domain=magicseaweed.com\n@@||g.doubleclick.net/gampad/ads?*^slotname=NormalLeaderboard^$script,domain=drivearabia.com\n@@||g.doubleclick.net/gampad/ads?ad_rule=1&adk=*&ciu_szs=300x250&*&gdfp_req=1&*&output=xml_vast2&$object-subrequest,domain=rte.ie\n@@||g.doubleclick.net/gampad/adx?$object-subrequest,domain=player.muzu.tv\n@@||g.doubleclick.net/|$object-subrequest,domain=cbs.com\n@@||gallery.aethereality.net/advertisement.js\n@@||game-advertising-online.com/img/icon_stoplight.jpg?$domain=kissanime.com\n@@||game-advertising-online.com/index.php?section=serve&id=7740&subid=$subdocument,domain=anizm.com\n@@||gamecopyworld.com/games/$script\n@@||gamecopyworld.eu/games/$script\n@@||gamereactor.$script,~third-party\n@@||gamersconnexion.com/js/advert.js\n@@||gameshark.com/images/ads/\n@@||gameslivetv.com/js/advertisement.js\n@@||gdataonline.com/exp/textad.js\n@@||genvideos.com/js/show_ads.js$domain=genvideos.com\n@@||go4up.com/advertisement.js\n@@||go4up.com^$elemhide\n@@||gofirstrow.eu/advertisement.js\n@@||gofirstrow.eu^*/advertisement.js\n@@||google-it.info^$script,domain=hqq.tv\n@@||google.com/ads/popudner/banner.jpg?$domain=magesy.be\n@@||googlecode.com/files/google_ads.js$domain=turkdown.com\n@@||googlesyndication.com/favicon.ico$domain=multiup.org\n@@||gscontxt.net/main/channels-jsonp.cgi?$domain=9news.com.au\n@@||hackers.co.id/adframe/adframe.js\n@@||hackintosh.zone/adblock/advertisement.js\n@@||hackintosh.zone^$elemhide\n@@||hardware.no/ads/$image\n@@||hardware.no/artikler/$image,~third-party\n@@||hardware.no^$script\n@@||hcpc.co.uk/*ad$script,domain=avforums.com\n@@||hentai-foundry.com^*/ads.js\n@@||hexawebhosting.com/adcode.js\n@@||hitcric.info^$elemhide\n@@||hogarutil.com^$elemhide\n@@||hornyspots.com^$image,domain=kissanime.com\n@@||hostyd.com^$elemhide\n@@||hpfanficarchive.com^*/advertisement.js\n@@||hqpdb.com/ads/banner.jpg?\n@@||hqq.tv^$elemhide\n@@||i-stream.pl^*/advertisement.js\n@@||i.imgur.com^*#.$image,domain=newmusicforpeople.org\n@@||ibmmainframeforum.com^$elemhide\n@@||ifirstrow.eu^$script\n@@||iguide.to/js/advertisement.js\n@@||ilive.to/js/advert*.js\n@@||ilive.to^$elemhide\n@@||ilix.in^$script,domain=ilix.in|priva.us\n@@||ima3vpaid.appspot.com/?adTagUrl=$object-subrequest,domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com\n@@||ima3vpaid.appspot.com/crossdomain.xml$object-subrequest,domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com\n@@||imageontime.com/ads/banner.jpg?\n@@||images.bangtidy.net^$elemhide\n@@||imasdk.googleapis.com/js/core/bridge*.html$subdocument,domain=mobinozer.com\n@@||imgleech.com/ads/banner.jpg?\n@@||imgsure.com/ads/banner.jpg?\n@@||in.popsads.com^$script,domain=filmovizija.com\n@@||incredibox.com/js/advertisement.js\n@@||incredibox.com/js/fuckadblock.js\n@@||infineoncorp.com^$domain=eventhubs.com\n@@||info.tm^$script,domain=ilix.in|priva.us\n@@||innovid.com/1x1.gif?$object-subrequest,domain=channel4.com\n@@||innovid.com/iroll/config/*.xml?cb=[$object-subrequest,domain=channel4.com\n@@||innovid.com^*/VPAIDIRollPackage.swf$object-subrequest,domain=channel4.com\n@@||inskinmedia.com/crossdomain.xml$object-subrequest\n@@||install.wtf/advertisement/advertisement.js\n@@||intellitxt.com/intellitxt/front.asp?ipid=$script,domain=forums.tweaktown.com\n@@||investigationdiscovery.com/shared/ad-enablers/\n@@||investigationdiscovery.com^$elemhide\n@@||iriptv.com/player/ads.js\n@@||jjcast.com^$elemhide\n@@||jkanime.net/assets/js/advertisement.js\n@@||jkanime.net^*/advertisement2.js\n@@||jtvnw.net/*/advertisement.js$domain=twitch.tv\n@@||juba-get.com^*/advertisement.js\n@@||junksport.com/watch/advertisement.js\n@@||juzupload.com/advert*.js\n@@||katsomo.fi^*/advert.js\n@@||katsomo.fi^*/advertisement.js\n@@||kissanime.com/ads/$image,subdocument\n@@||kissanime.com^$elemhide\n@@||lag10.net^$elemhide\n@@||lasexta.com/adsxml/$object-subrequest\n@@||leaguesecretary.com/advertisement.js\n@@||leecher.us/assets/img/*/ads/$image\n@@||leecher.us^$elemhide\n@@||liberallogic101.com/show_ads.js\n@@||lilfile.com/js/advertise-2.js\n@@||lilfile.com/js/advertise.js\n@@||linkcrypt.ws/image/*#$image\n@@||linkcrypt.ws^$elemhide\n@@||liquidcompass.net/js/advertisement.js\n@@||litecoin-faucet.tk/advertisement.js\n@@||litecoiner.net/advertisement.js\n@@||livrosdoexilado.org^$elemhide\n@@||lordpyrak.net^$elemhide\n@@||lpg-forum.pl/advertise.js\n@@||mac2sell.net^$elemhide\n@@||macobserver.com/js/adlink.js\n@@||madadsmedia.com^$image,script,domain=kissanime.com\n@@||majorleaguegaming.com/live/assets/advertisement-*.js\n@@||majorleaguegaming.com^$elemhide\n@@||majorleaguegaming.com^*.png?*=$image\n@@||makemehost.com/js/ads.js\n@@||manga2u.co/css/advertiser.js\n@@||mangabird.com/sites/all/themes/zen/js/advertiser.js\n@@||mangabird.com^$elemhide\n@@||mangabird.me/sites/default/files/manga/*/advertise-$image\n@@||mangahost.com/ads.js?\n@@||mangakaka.com/ad/$subdocument\n@@||mangakaka.com^*/advertiser.js\n@@||marketmilitia.org/advertisement.js\n@@||marketmilitia.org^$elemhide\n@@||masfuertequeelhierro.com^$elemhide\n@@||mastertoons.com^$elemhide\n@@||maxcheaters.com/public/js/jsLoader.js\n@@||maxedtech.com^$elemhide\n@@||media.eventhubs.com/images/*#$image\n@@||mediaplaybox.com^$elemhide\n@@||megadown.us/advertisement.js\n@@||megahd.me^*/advertisement.js\n@@||megavideodownloader.com/adframe.js\n@@||megawypas.pl/includes/adframe.js\n@@||mgcash.com/common/adblock.js\n@@||mgcashgate.com/cpalocker/$script,domain=movieleaks.co|videodepot.org\n@@||mgid.com^$image,domain=kissanime.com\n@@||minecraft-forum.net^$elemhide\n@@||miniclipcdn.com/js/advertisement.js\n@@||mix.dj/jscripts/jquery/mdj_adverts.js\n@@||mix.dj^*/advertisement.js\n@@||mma-core.com/Scripts/adscript.js\n@@||mmatko.com/images/ad/$image\n@@||moje-dzialdowo.pl/delivery/ajs.php?zoneid=$script\n@@||moje-dzialdowo.pl/images/*.swf|$object\n@@||monsoonads.com/crossdomain.xml$object-subrequest\n@@||monsoonads.com:8080/crossdomain.xml$object-subrequest\n@@||monsoonads.com:8080/monsoon1/monsoonservice?$object-subrequest,domain=bollywoodhungama.com|videos.mid-day.com\n@@||moon-faucet.tk/advertisement.js\n@@||mousebreaker.com/scripts/ads.js\n@@||movie1k.net^$elemhide\n@@||mp3clan.com^*/advertisement.js\n@@||mrtzcmp3.net/advertisement.js\n@@||msecnd.net/scripts/compressed.pop.lib.v2.5.js$domain=filmovizija.com\n@@||multiup.org/img/theme/*?$image\n@@||muzu.tv/ads/advert.js\n@@||mwfiles.net/advertisement.js\n@@||mybannermaker.com/banner.php$~third-party\n@@||myfineforum.org/advertisement.js\n@@||myfreeforum.org/advertisement.js\n@@||myiplayer.com/ad*.js\n@@||myiplayer.com^$elemhide\n@@||myksn.net^$elemhide\n@@||mypapercraft.net^$elemhide\n@@||mzstatic.com^*.jpg#$image,domain=newmusicforpeople.org\n@@||ndtv.com/static/js/advertisement.js\n@@||needrom.com^$elemhide\n@@||nettavisen.no^*/advertisement.js\n@@||newmusicforpeople.org^$elemhide\n@@||nextthreedays.com/Include/Javascript/AdFunctions.js\n@@||ngads.com/*.js?$script,domain=newgrounds.com\n@@||nicoblog-games.com^$elemhide\n@@||nonags.com^$elemhide\n@@||nonags.com^*/ad$image\n@@||nosteam.ro/advertisement.js\n@@||nosteam.ro^*/advertisement.js\n@@||nzbstars.com*/advertisement.js\n@@||nzd.co.nz^*/ads/webads$script,domain=nzdating.com\n@@||olcdn.net/ads1.js$domain=olweb.tv\n@@||onlinemoviesfreee.com^$elemhide\n@@||onlinevideoconverter.com^*ad*.js\n@@||onvasortir.com/advert$script\n@@||openrunner.com/js/advertisement.js\n@@||openspeedtest.com/advertisement.js\n@@||openx.gamereactor.dk/multi.php?$script\n@@||openx.net/w/$script,domain=fileover.net\n@@||openx.net/w/1.0/acj?$script,domain=clubedohardware.com.br\n@@||openx.net/w/1.0/jstag$script,domain=clubedohardware.com.br\n@@||optimized-by.rubiconproject.com/a/$domain=manga2u.co|onemanga.me|pro-football-reference.com\n@@||optimized-by.rubiconproject.com/a/*-2.html?$subdocument,domain=mangasky.co\n@@||overclock3d.net/js/advert.js\n@@||own3d.tv/templates/*adsense$object-subrequest\n@@||own3d.tv^*_adsense.$object-subrequest\n@@||pagead2.googlesyndication.com/pagead/expansion_embed.js$domain=ffiles.com|full-ngage-games.blogspot.com|kingofgames.net|megaallday.com|ninjaraider.com|nonags.com|upfordown.com|wtf-teen.com\n@@||pagead2.googlesyndication.com/pagead/js/*/show_ads_impl.js$domain=360haven.com|9bis.net|9tutorials.com|afreesms.com|apkmirror.com|aseanlegacy.net|atlanticcitywebcam.com|bitcofree.com|bitcoiner.net|bitcoinker.com|borfast.com|budget101.com|bullywiihacks.com|chrissmoove.com|clubedohardware.com.br|darkreloaded.com|debridit.com|dev-metal.com|dreamscene.org|drivearabia.com|dsero.com|epmads.com|ezoden.com|fcportables.com|file4go.com|free.smsmarkaz.urdupoint.com|freecoins4.me|ftlauderdalebeachcam.com|ftlauderdalewebcam.com|full-ngage-games.blogspot.com|gamespowerita.com|gnomio.com|hackintosh.zone|hostyd.com|ibmmainframeforum.com|ilix.in|incredibox.com|keywestharborwebcam.com|kingofgames.net|korean-candy.com|leecher.us|litecoiner.net|livenewschat.eu|lordpyrak.net|mailbait.info|mangacap.com|masfuertequeelhierro.com|misheel.net|morganhillwebcam.com|moviemistakes.com|mypapercraft.net|needrom.com|niresh.co|niresh12495.com|nonags.com|numberempire.com|nyharborwebcam.com|omegadrivers.net|play-old-pc-games.com|portarubawebcam.com|portbermudawebcam.com|portcanaveralwebcam.com|portevergladeswebcam.com|portmiamiwebcam.com|portnywebcam.com|preemlinks.com|priva.us|puromarketing.com|radioaficion.com|rapid8.com|settlersonlinemaps.com|smashgamez.com|spoilertv.com|tech-blog.net|techydoor.com|thememypc.com|themes.themaxdavis.com|tipstank.com|trutower.com|unlocktheinbox.com|upfordown.com|uploadlw.com|urlink.at|washington.edu|whatismyip.com|winterrowd.com|yellowbridge.com|zeperfs.com\n@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$domain=activistpost.com|afreesms.com|apkmirror.com|appraisersforum.com|aseanlegacy.net|bitcofree.com|bitcoinker.com|chrissmoove.com|clubedohardware.com.br|debridit.com|demo-uhd3d.com|dev-metal.com|ezoden.com|firstonetv.com|freeprosurfer.com|gnomio.com|hackintosh.zone|i-stats.net|incredibox.com|leecher.us|mangacap.com|masfuertequeelhierro.com|mypapercraft.net|niresh.co|niresh12495.com|nonags.com|play-old-pc-games.com|settlersonlinemaps.com|unlocktheinbox.com|zeperfs.com\n@@||pagead2.googlesyndication.com/pagead/js/google_top_exp.js$domain=cleodesktop.com\n@@||pagead2.googlesyndication.com/pagead/js/lidar.js$domain=majorleaguegaming.com\n@@||pagead2.googlesyndication.com/pagead/show_ads.js$domain=360haven.com|9bis.net|9tutorials.com|afreesms.com|atlanticcitywebcam.com|bbc.com|bitcoiner.net|budget101.com|bullywiihacks.com|carsfromitaly.info|codeasily.com|darkreloaded.com|dreamscene.org|drivearabia.com|dsero.com|epmads.com|everythingon.tv|fcportables.com|ffiles.com|file4go.com|filmovizija.com|filmovizija.net|free.smsmarkaz.urdupoint.com|freecoins4.me|freewaregenius.com|ftlauderdalebeachcam.com|ftlauderdalewebcam.com|full-ngage-games.blogspot.com|gamespowerita.com|gifmagic.com|hackintosh.zone|hostyd.com|ibmmainframeforum.com|ilix.in|keywestharborwebcam.com|kingofgames.net|korean-candy.com|litecoiner.net|livenewschat.eu|lordpyrak.net|mangakaka.com|megaallday.com|misheel.net|morganhillwebcam.com|moviemistakes.com|needrom.com|newsok.com|ninjaraider.com|nonags.com|numberempire.com|nx8.com|nyharborwebcam.com|omegadrivers.net|photos.essence.com|portarubawebcam.com|portbermudawebcam.com|portcanaveralwebcam.com|portevergladeswebcam.com|portmiamiwebcam.com|portnywebcam.com|preemlinks.com|priva.us|puromarketing.com|radioaficion.com|rapid8.com|readersdigest.com.au|seeingwithsound.com|smashgamez.com|spoilertv.com|tech-blog.net|techydoor.com|thememypc.com|themes.themaxdavis.com|tipstank.com|top100clans.com|trutower.com|tv-kino.net|upfordown.com|uploadlw.com|urlink.at|virginmedia.com|warp2search.net|washington.edu|winterrowd.com|wtf-teen.com|yellowbridge.com\n@@||pagead2.googlesyndication.com/pub-config/ca-pub-$script,domain=firstonetv.com\n@@||pagead2.googlesyndication.com/simgad/573912609820809|$image,domain=hardocp.com\n@@||pandora.com/static/ads/\n@@||partner.googleadservices.com/gpt/pubads_impl_$script,domain=baseball-reference.com|basketball-reference.com|hockey-reference.com|pro-football-reference.com|sports-reference.com\n@@||pastes.binbox.io/ad/banner?$subdocument\n@@||pastes.binbox.io^$elemhide\n@@||perkuinternete.lt/modules/mod_jpayday/js/advertisement.js\n@@||pes-patch.com^$elemhide\n@@||picu.pk^$elemhide\n@@||pipocas.tv/js/advertisement.js\n@@||pirlotv.tv^$elemhide\n@@||play-old-pc-games.com^$elemhide\n@@||playhd.eu/advertisement.js\n@@||playindiafilms.com/advertisement.js\n@@||popads.net/pop.js$domain=filmovizija.com|hqq.tv\n@@||popsads.com/adhandler/$script,domain=filmovizija.com\n@@||poreil.com^$domain=cbs.com\n@@||prad.de/en/$elemhide\n@@||premium4.us^$elemhide\n@@||premiumleecher.com/inc/adframe.js\n@@||premiumleecher.com/inc/adsense.js\n@@||premiumleecher.com^$elemhide\n@@||primeshare.tv^*/adframe.js\n@@||primeshare.tv^*/advertisement.js\n@@||primewire.ag/js/advertisement.js\n@@||priva.us^$script,domain=ilix.in|priva.us\n@@||propellerads.com^$image,domain=kissanime.com\n@@||protect-url.net^$script,~third-party\n@@||psarips.com^$script\n@@||puromarketing.com/js/advertisement.js\n@@||puromarketing.com^$elemhide\n@@||qrrro.com^*/adhandler/\n@@||racedepartment.com^*/advertisement.js\n@@||rackcdn.com^$image,object-subrequest,script,domain=cbs.com\n@@||radar-toulouse.fr/advertisement.js\n@@||radioaficion.com/HamNews/*/ad$image\n@@||radioaficion.com^$elemhide\n@@||radioio.com^*/adframe.js\n@@||rapid8.com^$script\n@@||rapidmoviez.com/ad$image,subdocument\n@@||rapidmoviez.com/files/php/mgid-ad$subdocument\n@@||ratebeer.com/javascript/advertisement.js\n@@||rctrails.com^$script,domain=eventhubs.com\n@@||realidadscans.org^$elemhide\n@@||redtube.com*/adframe.js\n@@||rek.www.wp.pl/pliki/$script,domain=wp.tv\n@@||rek.www.wp.pl/vad.xml?$xmlhttprequest,domain=wp.tv\n@@||remo-xp.com^$elemhide\n@@||resources.infolinks.com/js/*/ice.js$domain=cyberdevilz.net\n@@||resources.infolinks.com/js/infolinks_main.js$domain=cyberdevilz.net\n@@||rincondelvago.com^*_adsense.js\n@@||rojadirecta.me^$elemhide\n@@||rsense-ad.realclick.co.kr/favicon.ico?id=$image,domain=mangaumaru.com\n@@||rtube.de^$elemhide\n@@||rubiconproject.com^$image,script,domain=kissanime.com\n@@||runners.es^*/advertisement.js\n@@||s.stooq.$script,domain=stooq.com|stooq.com.br|stooq.pl|stooq.sk\n@@||saavn.com/ads/search_config_ad.php?$subdocument\n@@||saikoanimes.net^*/advertisement.js\n@@||sankakucomplex.com^$script\n@@||sankakustatic.com^$script\n@@||sascdn.com/diff/js/smart.js$domain=onvasortir.com\n@@||sascdn.com/diff/video/$script,domain=eskago.pl\n@@||sascdn.com/video/$script,domain=eskago.pl\n@@||savevideo.me/images/banner_ads.gif\n@@||sawlive.tv/adscript.js\n@@||scan-manga.com/ads.html\n@@||scan-manga.com/ads/banner.jpg$image\n@@||sciencechannel.com^$elemhide\n@@||scoutingbook.com/js/adsense.js\n@@||search.spotxchange.com/vast/$object-subrequest,domain=maniatv.com\n@@||secureupload.eu^$elemhide\n@@||seekingalpha.com/adsframe.html#que=$subdocument\n@@||seekingalpha.com^$script\n@@||senmanga.com/advertisement.js\n@@||series-cravings.info/wp-content/plugins/wordpress-adblock-blocker/$script\n@@||sheepskinproxy.com/js/advertisement.js\n@@||shimory.com/js/show_ads.js\n@@||showsport-tv.com^$elemhide\n@@||siamfishing.com^*/advert.js\n@@||sixpool.me^$image,domain=majorleaguegaming.com\n@@||skidrowcrack.com/advertisement.js\n@@||smartadserver.com/call/pubj/*/M/*/?$domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com\n@@||smartadserver.com/call/pubj/*/S/*/?$domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com\n@@||smartadserver.com/config.js?nwid=$domain=onvasortir.com\n@@||sms-mmm.com/pads.js$domain=hqq.tv\n@@||sms-mmm.com/script.php|$script,domain=hqq.tv\n@@||sockshare.com/js/$script\n@@||sominaltvfilms.com/wp-content/*/adbanner/$image\n@@||sominaltvfilms.com^$elemhide\n@@||sonobi.com/welcome/$image,domain=kissanime.com\n@@||sounddrain.net^*/advertisement.js\n@@||spaste.com^$script\n@@||springstreetads.com/scripts/advertising.js\n@@||stackexchange.com/affiliate/\n@@||static-avforums.com/*ad$script,domain=avforums.com\n@@||static9.net.au^*/advert.js$domain=9news.com.au\n@@||stooq.com.br^$elemhide,script,xmlhttprequest\n@@||stooq.com^$elemhide,script,xmlhttprequest\n@@||stooq.me^$script,domain=stooq.com|stooq.pl|stooq.sk\n@@||stooq.pl^$elemhide,script,xmlhttprequest\n@@||stooq.sk^$elemhide,script,xmlhttprequest\n@@||stream2watch.me^$elemhide\n@@||stream4free.eu^$elemhide\n@@||streamcloud.eu^$xmlhttprequest\n@@||streamin.to/adblock/advert.js\n@@||streamlive.to/js/ads.js\n@@||streamlive.to^$elemhide\n@@||streamlive.to^*/ad/$image\n@@||superplatyna.com^$elemhide\n@@||talksport.com/sites/default/files/ben/advert.js\n@@||team-vitality.fr/assets/images/advert.png\n@@||teenidols4you.com^$elemhide\n@@||teenidols4you.com^*#-$image\n@@||teknogods.com/advert.js\n@@||telemetryverification.net/crossdomain.xml$object-subrequest\n@@||thelordofstreaming.it/wp-content/uploads/*/ad_$image\n@@||thelordofstreaming.it^$elemhide\n@@||thememypc.com/wp-content/*/ads/$image\n@@||thememypc.com^$elemhide\n@@||thesilverforum.com/public/js/jsLoader.js?adType=$script\n@@||thesimsresource.com/downloads/download/itemId/$elemhide\n@@||thesimsresource.com/js/ads.js\n@@||thesominaltv.com/advertisement.js\n@@||thevideos.tv/js/ads.js\n@@||theweatherspace.com^*/advertisement.js\n@@||tidaltv.com/ILogger.aspx?*&adId=[$object-subrequest,domain=channel4.com\n@@||tidaltv.com/tpas*.aspx?*&rand=[$object-subrequest,domain=channel4.com\n@@||tklist.net/tklist/*ad$image\n@@||tklist.net^$elemhide\n@@||tlc.com^$elemhide\n@@||tpmrpg.net/adframe.js\n@@||tradedoubler.com/anet?type(iframe)loc($subdocument,domain=topzone.lt\n@@||tribalfusion.com/displayAd.js?$domain=clubedohardware.com.br\n@@||tribalfusion.com/j.ad?$script,domain=clubedohardware.com.br\n@@||trizone91.com^$elemhide\n@@||turkdown.com^$elemhide\n@@||turkdown.com^$script\n@@||turktorrent.cc^$elemhide\n@@||tv-porinternet.com.mx^$elemhide\n@@||tv3.co.nz/Portals/*/advertisement.js\n@@||tvdez.com/ads/ads_$subdocument\n@@||tvn.adocean.pl/files/js/ado.js$domain=tvn.pl|tvn24.pl\n@@||tvpelis.net^*/advertisement2.js\n@@||twitch.tv/ads/ads.js\n@@||ucoz.com/ads/banner.jpg?$image\n@@||uktv.co.uk/static/js/ads.js\n@@||up-flow.org/advertisement.js\n@@||uploadlw.com/getbanner.cfm?$script\n@@||uploadlw.com^$elemhide\n@@||upshare.org/advertisement.js\n@@||uptobox.com^*.js?\n@@||urbeez.com/adver$script\n@@||urdupoint.com/js/advertisement.js\n@@||urdupoint.googlecode.com/files/advertisement.js$domain=free.smsmarkaz.urdupoint.com\n@@||ureoal.com^$script,domain=cbs.com\n@@||url4u.org^$elemhide\n@@||urlgalleries.net^*/adhandler/$subdocument\n@@||usaupload.net/ads.js\n@@||v.fwmrm.net/ad/p/1$xmlhttprequest,domain=uktv.co.uk\n@@||v.fwmrm.net/ad/p/1?$object-subrequest,domain=dave.uktv.co.uk\n@@||vcnt3rd.com/Scripts/adscript.js$domain=mma-core.com\n@@||velocity.com^$elemhide\n@@||vencko.net^$elemhide\n@@||veohb.net/js/advertisement.js$domain=veohb.net\n@@||ver-flv.com^$elemhide\n@@||verticalscope.com/js/advert.js\n@@||vgunetwork.com/public/js/*/advertisement.js\n@@||video.unrulymedia.com^$script,subdocument,domain=springstreetads.com\n@@||videocelebrities.eu^*/adframe/\n@@||videomega.tv/pub/interstitial.css\n@@||videomega.tv^$elemhide\n@@||videomega.tv^$script\n@@||videomega.tv^$stylesheet\n@@||videomega.tv^*/ad.php?id=$subdocument\n@@||videoplaza.tv/contrib/*/advertisement.js$domain=tv4play.se\n@@||vidup.me^*/adlayer.js\n@@||vietvbb.vn/up/clientscript/google_ads.js\n@@||viki.com/*.js$script\n@@||vipbox.tv/js/ads.js\n@@||vipleague.se/js/ads.js\n@@||vodu.ch^$script\n@@||wallpapermania.eu/assets/js/advertisement.js\n@@||wanamlite.com/images/ad/$image\n@@||weather.com^*/advertisement.js\n@@||webfirstrow.eu/advertisement.js\n@@||webfirstrow.eu^*/advertisement.js\n@@||webtv.rs/media/blic/advertisement.jpg\n@@||winwords.adhood.com^$script,domain=dizi-mag.com\n@@||world-of-hentai.to/advertisement.js\n@@||worldofapk.tk^$elemhide\n@@||wowhq.eu^$elemhide\n@@||writing.com^$script\n@@||www.vg.no^$elemhide\n@@||xlocker.net^$elemhide\n@@||xup.in^$elemhide\n@@||yasni.*/adframe.js\n@@||yellowbridge.com/ad/show_ads.js\n@@||yellowbridge.com^*/advertisement.js\n@@||yolohobo.us^$script,domain=eventhubs.com\n@@||youwatch.org/adframe.js\n@@||youwatch.org^$elemhide\n@@||youwatch.org^*#$image\n@@||ytconv.net/*google_ads.js\n@@||zattoo.com/ads/cs?$xmlhttprequest\n@@||zman.com/adv/ova/overlay.xml\n@@||zoomin.tv/adhandler/amalia.adm?$object-subrequest\n! Non-English\n@@||2mdn.net/viewad/*.jpg|$domain=dafiti.cl|dafiti.com.ar|dafiti.com.br|dafiti.com.co\n@@||ad.doubleclick.net^*.jpg|$domain=dafiti.cl|dafiti.com.ar|dafiti.com.br|dafiti.com.co\n@@||ad.e-kolay.net/ad.js\n@@||ad.e-kolay.net/jquery-*-Medyanet.min.js\n@@||ad.e-kolay.net/Medyanet.js\n@@||ad.e-kolay.net/mnetorfad.js\n@@||ad.nl/ad/css/$~third-party\n@@||ad3.l3go.com.br^$~third-party\n@@||adap.tv/redir/client/swfloader.swf?$object,domain=my-magazine.me\n@@||adman.gr/adman-video.js$domain=alphatv.gr\n@@||adman.gr/jwplayer.flash.swf$object,domain=alphatv.gr\n@@||adocean.pl/crossdomain.xml$object-subrequest\n@@||adocean.pl/files/*.flv?$domain=blesk.cz|open.fm\n@@||adocean.pl^*/ad.js?id=$object-subrequest,domain=open.fm\n@@||adocean.pl^*^aocodetype=$object-subrequest\n@@||adpriv.nikkei.com/bservers/AAMALL/*/acc_random=$script\n@@||ads.cvut.cz^$~third-party\n@@||ads.e-planning.net^*/preroll?$object-subrequest,domain=ole.com.ar\n@@||ads.hosting.vcmedia.vn/crossdomain.xml$object-subrequest\n@@||ads.hosting.vcmedia.vn/jinfo.ashx?$object-subrequest\n@@||ads.nicovideo.jp/assets/js/ads-*.js\n@@||ads.peteava.ro/crossdomain.xml$object-subrequest\n@@||ads.peteava.ro/www/serve_ads/serve2.php?campaign=$object-subrequest\n@@||ads.postimees.ee/crossdomain.xml$object-subrequest\n@@||ads.telecinco.es/crossdomain.xml$object-subrequest\n@@||ads.telecinco.es/RealMedia/ads/adstream_sx.ads/*@$object-subrequest,domain=mitele.es|telecinco.es\n@@||ads.us.e-planning.net/crossdomain.xml$object-subrequest\n@@||ads.us.e-planning.net^*&ma=*&vv=$object-subrequest,domain=elcomercio.pe\n@@||adserver.netsprint.eu//widgets/widgets.js$domain=autocentrum.pl\n@@||adsystem.pl^$~third-party\n@@||adtech.de/?adrawdata/3.0/*;|$object-subrequest,domain=tv2.dk\n@@||adtech.panthercustomer.com^*.flv$domain=tv3.ie\n@@||adtechus.com/adxml|*|rettype=$object-subrequest,domain=papeldigital.info\n@@||adtechus.com/images/*_503x720.gif$object-subrequest,domain=papeldigital.info\n@@||adv.adview.pl/ads/*.mp4$object-subrequest,domain=polskieradio.pl|radiozet.pl|spryciarze.pl|tvp.info\n@@||adv.pt^$~third-party\n@@||advert.ee^$~third-party\n@@||advert.mgimg.com/servlet/view/$xmlhttprequest,domain=uzmantv.com\n@@||advert.uzmantv.com/advertpro/servlet/view/dynamic/url/zone?zid=$script,domain=uzmantv.com\n@@||advertising.mercadolivre.com.br^$xmlhttprequest,domain=mercadolivre.com.br\n@@||advertising.sun-sentinel.com/el-sentinel/elsentinel-landing-page.gif\n@@||affiliate.fsas.eu^$subdocument,domain=iprima.cz\n@@||aka-cdn-ns.adtech.de^*.flv$domain=talksport.co.uk|tv3.ie\n@@||akamaihd.net^*/advert/$object-subrequest,domain=skai.gr\n@@||alio.lt/public/advertisement/texttoimage.html?$image\n@@||am10.ru/letitbit.net_in.php$subdocument,domain=moevideos.net\n@@||amarillas.cl/advertise.do?$xmlhttprequest\n@@||amarillas.cl/js/advertise/$script\n@@||amazon-adsystem.com/e/ir?$image,domain=kasi-time.com\n@@||amazon-adsystem.com/widgets/q?$image,domain=kasi-time.com\n@@||americateve.com/mediaplayer_ads/new_config_openx.xml$xmlhttprequest\n@@||analytics.disneyinternational.com/ads/tagsv2/video/$xmlhttprequest,domain=disney.no\n@@||annonser.dagbladet.no/eas?$script,domain=se.no\n@@||annonser.dagbladet.no/EAS_tag.1.0.js$domain=se.no\n@@||app.medyanetads.com/ad.js$domain=fanatik.com.tr\n@@||applevideo.edgesuite.net/admedia/$object-subrequest\n@@||atresplayer.com/static/imgs/no_ads.jpg$object-subrequest\n@@||autoscout24.*/all.js.aspx?m=css&*=/stylesheets/adbanner.css\n@@||autotube.cz/ui/player/ad.php?id=$object-subrequest\n@@||bancainternet.com.ar/eBanking/images/*-PUBLICIDAD.\n@@||bancodevenezuela.com/imagenes/publicidad/$~third-party\n@@||banki.ru/bitrix/*/advertising.block/$stylesheet\n@@||bbelements.com/bb/bb_one2n.js$domain=moviezone.cz\n@@||bbelements.com/please/showit/*/?typkodu=$script,domain=idnes.cz|moviezone.cz\n@@||blocket.se^*/newad.js\n@@||bmwoglasnik.si/images/ads/\n@@||bn.uol.com.br/html.ng/$object-subrequest\n@@||bnrs.ilm.ee/www/delivery/fl.js\n@@||bolha.com/css/ad.css?\n@@||bomnegocio.com/css/ad_insert.css\n@@||carfinder.gr/api/ads/$xmlhttprequest\n@@||catmusica.cat/paudio/getads.jsp?$xmlhttprequest\n@@||content.reklamz.com/internethaber/SPOR_*.mp4$object-subrequest,domain=tvhaber.com\n@@||custojusto.pt/user/myads/\n@@||doladowania.pl/pp/$script\n@@||doubleclick.net/adx/es.esmas.videonot_embed/$script,domain=esmas.com\n@@||doubleclick.net^*;sz=*;ord=$image,script,domain=dafiti.cl|dafiti.com.ar|dafiti.com.br|dafiti.com.co\n@@||doublerecall.com/core.js.php?$script,domain=delo.si\n@@||ehow.com.br/frames/ad.html?$subdocument\n@@||ehowenespanol.com/frames/ad.html?$subdocument\n@@||emag.hu/site_ajax_ads?id=$xmlhttprequest\n@@||emagst.net/openx/$image,domain=emag.hu|emag.ro\n@@||emediate.eu/crossdomain.xml$object-subrequest\n@@||emediate.eu/eas?cu_key=*;ty=playlist;$object-subrequest,domain=bandit.se|lugnafavoriter.com|nrj.se|playradio.se|radio1.se|rixfm.com|tv3play.ee|tv3play.se|tv6play.se|tv8play.se\n@@||emediate.se/crossdomain.xml$object-subrequest\n@@||emediate.se/eas?$domain=novatv.bg|tv2.dk|tv3.se|tv3play.ee|tv3play.se|tv6play.se|tv8play.se\n@@||emediate.se/eas_tag.1.0.js$domain=tv2.dk|tv3play.ee|tv3play.se|tv6play.se|tv8play.se\n@@||epaper.andhrajyothy.com/js/newads.js\n@@||ettevotja.ee/templates/*/images/advert.gif\n@@||expdash.adtlgc.com^$xmlhttprequest,domain=expressen.se\n@@||fajerwerkilider.pl/environment/cache/images/300_250_productGfx_$image\n@@||feed.theplatform.com^*=adtech_$object-subrequest,domain=tv2.dk\n@@||filmon.com/ad/affiliateimages/banner-250x350.png\n@@||flashgames247.com/advertising/preroll/google-fg247-preloader.swf$object\n@@||forads.pl^$~third-party\n@@||fotojorgen.no/images/*/webadverts/\n@@||fotosioon.com/wp-content/*/images/advert.gif\n@@||freeride.se/img/admarket/$~third-party\n@@||gov.in/pdf/ADVERTISEMENT/$~third-party\n@@||guloggratis.dk/modules/$script,~third-party,xmlhttprequest\n@@||haberler.com/video-haber/adsense_news_politics.swf?$object\n@@||happymtb.org/annonser/$~third-party\n@@||hizlial.com/banners/$~third-party\n@@||homad.eu^$~third-party\n@@||honfoglalo.hu/aagetad.php?$subdocument\n@@||hry.cz/ad/adcode.js\n@@||hub.com.pl/reklama_video/instream_ebmed/vStitial_inttv_$object,domain=interia.tv\n@@||impact-ad.jp/combo?$subdocument,domain=jalan.net\n@@||iplsc.com^*/inpl.box.ad.js$domain=rmf24.pl\n@@||isanook.com/vi/0/js/ads-$script\n@@||islafenice.net^*/adsense.js\n@@||izigo.pt/AdPictures/\n@@||izigo.pt^*/adsearch?\n@@||jesper.nu/javascript/libs/videoads.js\n@@||joemonster.org^*_reklama_$image\n@@||kompas.com^*/supersized.*.min_ads.js?\n@@||kopavogur.is/umsoknarvefur/advertisement.aspx$subdocument\n@@||krotoszyn.pl/uploads/pub/ads_files/$image,~third-party\n@@||laredoute.*/scripts/combinejs.ashx?*/affiliation/$script\n@@||longtailvideo.com/5/adttext/adttext.js$domain=ostrow24.tv|yuvutu.com\n@@||longtailvideo.com/5/adtvideo/adtvideo.js$domain=ostrow24.tv\n@@||lrytas.lt/ads/video_feed.js\n@@||mail.bg/mail/index/getads/$xmlhttprequest\n@@||megatv.com^*/adverts.asp?$object-subrequest\n@@||minuripsmed.ee/templates/*/images/advert.gif\n@@||mjhobbymassan.se/r/annonser/$image,~third-party\n@@||mlstatic.com^*/product_ads/$image,domain=mercadolibre.com.ve\n@@||mmgastro.pl/img/reklama/$image,~third-party\n@@||mmgastro.pl/js/reklama/$~third-party\n@@||moviezone.cz//moviezone/reklama/$object-subrequest\n@@||moviezone.cz/swf/ad-player/$object,object-subrequest\n@@||muyinteresante.es/templates/muy/js/criteo.js$domain=muyinteresante.es\n@@||mynet.com.tr/nocache/adocean.js?\n@@||mynet.com/nocache/adocean.js?\n@@||newmedia.lu^*/adtech_video/*.xml$object-subrequest,domain=rtl.lu\n@@||niedziela.nl/adverts/$image,~third-party\n@@||nordjyske.dk/scripts/ads/StoryAds.js\n@@||nuggad.net/rc?nuggn=$script,domain=ekstrabladet.dk\n@@||oas.di.se/RealMedia/ads/Creatives/di.se/$object,script,domain=di.se\n@@||oas.di.se^*/di.se/Lopet/*@$script,domain=di.se\n@@||oas.dn.se/adstream_mjx.ads/dn.se/nyheter/ettan/*@$script\n@@||oascentral.gfradnetwork.net/RealMedia/ads/adstream_nx.ads/$image,domain=primerahora.com\n@@||openimage.interpark.com/_nip_ui/category_shopping/shopping_morningcoffee/leftbanner/null.jpg\n@@||openx.zomoto.nl/live/www/delivery/fl.js\n@@||openx.zomoto.nl/live/www/delivery/spcjs.php?id=\n@@||peoplegreece.com/assets/js/adtech_res.js\n@@||player.terra.com^*&adunit=$script\n@@||player.theplatform.com^$subdocument,domain=nbc.com\n@@||polovniautomobili.com/images/ad-$~third-party\n@@||prohardver.hu/js/common/forms_$script\n@@||propellerads.com/afu.php?zoneid=$subdocument,domain=moevideos.net\n@@||propellerads.com^*/adlogo/$domain=kissanime.com\n@@||psoe.es/Areas/Affiliation/\n@@||ptchan.net/imagens/banner.php\n@@||ptcliente.pt/App_Themes/Default/Img/ad_$image\n@@||quebarato.com.br/css/static/ad_detail.css\n@@||quebarato.com.br/css/static/ad_search.css\n@@||reklama.hiking.sk/openx_new/www/delivery/spcjs.php?id=*&target=_blank$script,domain=mapy.hiking.sk\n@@||reklama5.mk^$~third-party\n@@||rentalsystems.com/advert_price_imbed.asp?$subdocument\n@@||ring.bg/adserver/adall.php?*&video_on_page=1\n@@||rtl.lu/ipljs/adtech_async.js\n@@||run.admost.com/adx/get.ashx?z=*&accptck=true&nojs=1\n@@||run.admost.com/adx/js/admost.js?\n@@||s-nk.pl/img/ads/icons_pack\n@@||s1emagst.akamaized.net/openx/*.jpg$domain=emag.hu\n@@||sanook.com/php/get_ads.php?vast_linear=$xmlhttprequest\n@@||sigmalive.com/assets/js/jquery.openxtag.js\n@@||skai.gr/advert/*.flv$object-subrequest\n@@||smart.allocine.fr/crossdomain.xml$object-subrequest\n@@||smart.allocine.fr/def/def/xshowdef.asp$object-subrequest,domain=beyazperde.com\n@@||smartadserver.com/call/pubj/$object-subrequest,domain=antena3.com|europafm.com|ondacero.es|vertele.com\n@@||smartadserver.com/call/pubx/*/M/$object-subrequest,domain=get.x-link.pl\n@@||smartadserver.com/call/pubx/*blq$object-subrequest,domain=antena3.com|atresmedia.com|atresplayer.com|lasexta.com\n@@||smartadserver.com/crossdomain.xml$object-subrequest\n@@||smartadserver.com/diff/*/show*.asp?*blq$object-subrequest,domain=antena3.com|atresplayer.com|lasexta.com|ondacero.es\n@@||sms.cz/bannery/$object-subrequest,~third-party\n@@||soov.ee/js/newad.js\n@@||staircase.pl/wp-content/*/adwords.jpg$domain=staircase.pl\n@@||start.no/advertpro/servlet/view/text/html/zone?zid=$script\n@@||start.no/includes/js/adCode.js\n@@||stat24.com/*/ad.xml?id=$object-subrequest,domain=ipla.tv\n@@||stat24.com/ad.xml?id=$object-subrequest,domain=ipla.tv\n@@||style.seznam.cz/ad/im.js\n@@||submarino.com.br/openx/www/delivery/\n@@||ta3.com/advert-async-system/$xmlhttprequest\n@@||terra.cl^*/admanager.html$subdocument\n@@||terra.com.br^*/admanager.html$subdocument\n@@||tn.com.ar^*/vivo/300/publicidad.html$subdocument\n@@||trrsf.com.br/playerttv/$xmlhttprequest\n@@||trrsf.com.br^*/admanager.js$domain=terra.com.br\n@@||trrsf.com^*/admanager.js\n@@||tugaleaks.com^*/wp-super-popup-pro/sppro.js\n@@||tugaleaks.com^*/wp-super-popup-pro/sppro.php\n@@||tv2.dk/mpx/player.php/adtech_$subdocument\n@@||tvn.adocean.pl^$object-subrequest\n@@||uol.com.br/html.ng/*&affiliate=$object-subrequest\n@@||varno-zavarovanje.com/system/modules/cp_pagepeel/html/peel.js\n@@||velasridaura.com/modules/*/advertising_custom.$image,~third-party\n@@||video.appledaily.com.hk/admedia/$object-subrequest,domain=nextmedia.com\n@@||videonuz.ensonhaber.com/player/hdflvplayer/xml/ads.xml?$object-subrequest\n@@||videoplaza.tv/proxy/distributor?$object-subrequest,domain=aftenposten.no|bt.no|ekstrabladet.dk|kuriren.nu|qbrick.com|svd.se\n@@||vinden.se/ads/$~third-party\n@@||xe.gr/property/recent_ads?$xmlhttprequest\n@@||yapo.cl/js/viewad.js?\n@@||yimg.jp/images/listing/tool/yads/yjaxc-stream-ex.js$domain=yahoo.co.jp\n@@||ziarelive.ro/assets/js/advertisement.js\n! Whitelists to fix broken pages of advertisers\n! adwolf.eu\n@@||adwolf.eu^$~third-party\n! Facebook\n@@||www.facebook.com/ads/$elemhide\n@@||www.facebook.com/ajax/ads/$xmlhttprequest,domain=www.facebook.com\n! Google\n@@||accounts.google.com/accounts/adwords/$image,~third-party\n@@||accounts.google.com/adwords/$domain=accounts.google.com\n@@||accounts.google.com^$document,subdocument,domain=adwords.google.com\n@@||ads.google.com/jsapi$script,domain=www.google.com\n@@||adwords.google.com^$domain=adwords.google.com\n@@||apps.admob.com/admob/*.adsense.$script,domain=apps.admob.com\n@@||bpui0.google.com^$document,subdocument,domain=adwords.google.com\n@@||google.com/help/hc/images/adwords/$image,~third-party\n@@||google.com/payments/*/adwords.$document,subdocument\n@@||google.com/tools/feedback/open.js?*^url=https://adwords.google.com/$script,domain=adwords.google.com\n@@||gstatic.com/accounts/services/adwords/$image,domain=accounts.google.com\n@@||gstatic.com/images/icons/product/adsense-$image,domain=accounts.google.com\n@@||gstatic.com/images/icons/product/adsense_$image,domain=accounts.google.com\n@@||support.google.com/adsense/$~third-party\n@@||support.google.com/adwords/$~third-party\n@@||www.google.*/ads/css/$~third-party\n@@||www.google.*/ads/images/$~third-party\n@@||www.google.*/ads/js/$~third-party\n@@||www.google.*/ads/start/$~third-party\n@@||www.google.*/adsense/$~third-party\n@@||www.google.*/adwords/$~third-party\n@@||www.google.com/ads/admob/images/$image,domain=google.com\n@@||www.google.com/ads/js/$script,domain=www.google.com\n@@||www.google.com/adwords/$elemhide\n@@||www.google.com/analytics/web/$xmlhttprequest,domain=www.google.com\n@@||www.google.com/doubleclick/$domain=www.google.com\n@@||www.google.com/doubleclick/images/favicon.ico\n@@||www.google.com/images/icons/feature/adsense_$image\n@@||www.google.com/images/icons/product/adsense-$image\naccounts.google.com#@#.adwords\n! Mobicow.com\n@@||adcenter.mobicow.com^$~third-party\n! advertising.com\n@@||www.advertising.com^$~third-party\n! Quantcast.com\n! http://forums.lanik.us/viewtopic.php?f=64&t=15116&p=53518\n@@||quantcast.com/advertise$domain=quantcast.com\n! Marketgid/MGID\n@@||dashboard.idealmedia.com^$~third-party\n@@||dashboard.lentainform.com^$~third-party\n@@||dashboard.marketgid.com^$~third-party\n@@||dashboard.mgid.com^$~third-party\n@@||dashboard.tovarro.com^$~third-party\n! Full.Ad\n@@||fullad.com.br^$~third-party\n! Healthy Advertising (Spanish)\n@@||healthyadvertising.es^$~third-party\n! Adfox\n@@||adfox.ru^$~third-party\n! Apple (iAd)\n@@||advertising.apple.com^$domain=advertising.apple.com\n! Adhese\n@@||adhese.com^$~third-party\n! Openx.com\n@@||netdna-cdn.com^*/OpenX/$domain=openx.com\n! Skimlinks\n@@||api-merchants.skimlinks.com^\n@@||authentication-api.skimlinks.com^\n! Microsoft\n@@||advertise.bingads.microsoft.com/Includes/$domain=login.live.com\n@@||advertise.bingads.microsoft.com/wwimages/search/global/$image\n@@||advertising.microsoft.com^$~third-party\n@@||bingads.microsoft.com/ApexContentHandler.ashx?$script,domain=bingads.microsoft.com\n! VK.ru/.com\n@@||paymentgate.ru/payment/*_Advert/\n@@||vk.com/ads$elemhide\n@@||vk.com/ads.php?$subdocument,domain=vk.com\n@@||vk.com/ads?act=payments&type$script,stylesheet\n@@||vk.com/css/al/ads.css$domain=vk.com\n@@||vk.com/images/ads_$domain=vk.com\n@@||vk.com/js/al/ads.js?$domain=vk.com\n@@||vk.me/css/al/ads.css$domain=vk.com\n@@||vk.me/images/ads_$domain=vk.com\n! Mxit\n@@||advertise.mxit.com^$~third-party\n! Sanoma media\n@@||advertising.sanoma.be^$domain=advertising.sanoma.be\n! AdRoll\n@@||adroll.com^$xmlhttprequest,domain=adroll.com\n@@||app.adroll.com^$elemhide\n! Teliad\n@@||seedingup.*/advertiser/$~third-party,xmlhttprequest\n@@||teliad.*/advertiser/$~third-party,xmlhttprequest\n! EasyAds\n@@||easyads.eu^$domain=easyads.eu\n! SiteAds\n@@||siteads.com^$domain=siteads.com\n! Amazon Associates/PartnerNet\n@@||amazon-adsystem.com/e/cm?$document,subdocument,domain=affiliate-program.amazon.co.uk|affiliate-program.amazon.com|affiliate-program.amazon.in|affiliate.amazon.co.jp|afiliados.amazon.es|associados.amazon.com.br|associates.amazon.ca|associates.amazon.cn|partenaires.amazon.fr|partnernet.amazon.de|programma-affiliazione.amazon.it\n@@||amazon-adsystem.com^$domain=affiliate-program.amazon.com\n@@||ssl-images-amazon.com/images/*/assoc/$image,domain=affiliate-program.amazon.co.uk|affiliate-program.amazon.com|affiliate-program.amazon.in|affiliate.amazon.co.jp|afiliados.amazon.es|associados.amazon.com.br|associates.amazon.ca|associates.amazon.cn|partenaires.amazon.fr|partnernet.amazon.de|programma-affiliazione.amazon.it\n@@||ssl-images-amazon.com/images/*/associate/$image,domain=affiliate-program.amazon.co.uk|affiliate-program.amazon.com|affiliate-program.amazon.in|affiliate.amazon.co.jp|afiliados.amazon.es|associados.amazon.com.br|associates.amazon.ca|associates.amazon.cn|partenaires.amazon.fr|partnernet.amazon.de|programma-affiliazione.amazon.it\n@@||ssl-images-amazon.com/images/*/associates/$image,domain=affiliate-program.amazon.co.uk|affiliate-program.amazon.com|affiliate-program.amazon.in|affiliate.amazon.co.jp|afiliados.amazon.es|associados.amazon.com.br|associates.amazon.ca|associates.amazon.cn|partenaires.amazon.fr|partnernet.amazon.de|programma-affiliazione.amazon.it\n@@||ssl-images-amazon.com/images/*_assoc_$image,domain=affiliate-program.amazon.co.uk|affiliate-program.amazon.com|affiliate-program.amazon.in|affiliate.amazon.co.jp|afiliados.amazon.es|associados.amazon.com.br|associates.amazon.ca|associates.amazon.cn|partenaires.amazon.fr|partnernet.amazon.de|programma-affiliazione.amazon.it\n! Yavli.com-related\n@@||disqus.com/count-data.js$domain=dailycaller.com|valuewalk.com\n@@||newsinc.com/player/show/$domain=dailycaller.com|valuewalk.com\n! Yahoo\n@@||eioservices.marketingsolutions.yahoo.com^$domain=eio.manhattan.yahoo.com\n! Twitter\n@@||ads.twitter.com^$domain=ads.twitter.com|analytics.twitter.com\n@@||ton.twimg.com^$domain=ads.twitter.com|analytics.twitter.com\n! StumbleUpon\n@@||ads.stumbleupon.com^$popup\n@@||ads.stumbleupon.com^$~third-party\n! advertise.ru\n@@||advertise.ru^$~third-party\n! acesse.com\n@@||ads.acesse.com^$elemhide\n@@||ads.acesse.com^$~third-party\n! integralads.com\n@@||integralplatform.com/static/js/Advertiser/$~third-party\n! Revealads.com\n@@||revealads.com^$~third-party\n! *** easylist:easylist/easylist_whitelist_dimensions.txt ***\n@@-120x60-$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@-120x60.$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@_120_60.$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|travelplus.com\n@@_120x60.$image,domain=2dayshippingbymastercard.com|catalogfavoritesvip.com|chase.com|deliverydeals.co.uk|freeshipping.com|freeshippingbymastercard.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|theperfectsaver.com|travelplus.com\n@@_120x60_$image,domain=catalogfavoritesvip.com|freeshipping.com|freeshippingrewards.com|habandvipplus.com|inthecompanyofdogsvip.com|naturesjewelryvip.com|northstylevip.com|pyramidcollectionvip.com|serengeticatalogvip.com|theperfectsaver.com|travelplus.com\n@@_300x250.$image,domain=affrity.com|lockd.co.uk\n@@||ajax.googleapis.com/ajax/services/search/news?*-728x90&$script\n@@||amazonaws.com/content-images/article/*_120x60$domain=vice.com\n@@||amazonaws.com^*-300x250_$image,domain=snapapp.com\n@@||amazonaws.com^*/300x250_$image,domain=snapapp.com\n@@||anitasrecipes.com/Content/Images/*160x500$image\n@@||arnhemland-safaris.com/images/*_480_80_\n@@||artserieshotels.com.au/images/*_460_60.\n@@||assets.vice.com^*_120x60.jpg\n@@||assets1.plinxmedia.net^*_300x250.\n@@||assets2.plinxmedia.net^*_300x250.\n@@||bettermarks.com/media$~third-party\n@@||bizquest.com^*_img/_franchise/*_120x60.$image\n@@||canada.com/news/*-300-250.gif\n@@||cdn.vidible.tv/prod/*_300x250_*.mp4|\n@@||cinemanow.com/images/banners/300x250/\n@@||consumerist-com.wpengine.netdna-cdn.com/assets/*300x250\n@@||crowdignite.com/img/upload/*300x250\n@@||cubeecraft.com/images/home/features/300x250/$image,~third-party\n@@||dawn.com/wp-content/uploads/*_300x250.jpg\n@@||discovery.com^*/ratio-size/pixel-ratio/300x250.png\n@@||disney.com.au/global/swf/*728x90.swf\n@@||disney.com.au/global/swf/banner160x600.swf\n@@||educationpost.com.hk^*/300x250/$image\n@@||efvi.eu/badge/*-120x60.png\n@@||etsystatic.com^*_760x100.$domain=etsy.com\n@@||film.com/plugins/*-300x250\n@@||findafranchise.com/_img/*_120x60.$image\n@@||firestormgames.co.uk/image/*-120x60.\n@@||flumotion.com/play/player?*/300x250-$subdocument,domain=flaixfm.cat\n@@||framestr.com^*/300x250/$image,~third-party\n@@||freetvhub.com/ad1_300x250.html\n@@||google.com/uds/modules/elements/newsshow/iframe.html?*=300x250&\n@@||harpers.co.uk/pictures/300x250/\n@@||hortifor.com/images/*120x60$~third-party\n@@||images.itreviews.com/*300x250_$domain=itreviews.com\n@@||images.outbrain.com/imageserver/*-120x60.$image\n@@||imawow.weather.com/web/wow/$image\n@@||imdb.com/images/*doubleclick/*300x250\n@@||imdb.com/images/*doubleclick/*320x240\n@@||imperialwonderservices.ie/images/banner/*-468x60.$~third-party\n@@||komikslandia.pl/environment/cache/images/300_250_\n@@||la-finca-distribution.de/wp-content/uploads/*-120x240.$image\n@@||maps.google.*/staticmap*^size=300x250^$image\n@@||maps.googleapis.com/maps/api/*=300x250&\n@@||marketing.beatport.com.s3.amazonaws.com^*/728x90_\n@@||metrics.target.com/b/ss/*_300x250_$image\n@@||motherboard.tv/content-images/*_120x60.\n@@||mozilla.org/img/covehead/plugincheck/*/728_90/loading.png$domain=mozilla.org\n@@||msecnd.net/socialfactoryimagesresized/mediaspotlight/2/300x250/$image\n@@||mxtoolbox.com/Public/images/banners/Mx-Pro-160x600.jpg\n@@||nationalgeographic.com/exposure/content/*300x250\n@@||onescreen.net/os/static/widgets/*300x250\n@@||opposingviews.com^*/300x250/\n@@||player.grabnetworks.com^*/vox_300x250_inline.xml$domain=mavrixonline.com\n@@||quisqualis.com/QBanner_760x100.jpg\n@@||static-origin.openedition.org^*-120x240.jpg\n@@||stickam.com/wb/www/category/300x250/$image\n@@||target.122.2o7.net/b/ss/*_300x250_$image,domain=target.com\n@@||techpakistani.com/wp-content/uploads/*-300x100.$image\n@@||tribune.com.ng/news2013/cache/mod_yt_k2megaslider/images/*_120_60.jpg\n@@||turner.com/v5cache/TCM/images/*_120x60.\n@@||turner.com/v5cache/TCM/Images/*_120x60_\n@@||ubi.com/resource/*/game/*_300x250_$image,domain=ubi.com\n@@||union.edu/media/galleryPics/400x250/$~third-party\n@@||usanetwork.com/sites/usanetwork/*300x250\n@@||usopen.org/images/pics/misc/*.300x250.jpg\n@@||viamichelin.*&size=728x90,$subdocument\n@@||vortex.accuweather.com^*_120x60_bg.jpg\n@@||vortex.accuweather.com^*_160x600_bg.jpg\n@@||vortex.accuweather.com^*_300x250_bg.jpg\n@@||w3easy.org/templates/*_120x60.\n@@||w3easy.org/templates/*_120x60_\n@@||weather.craven.net.au/weather/products/300x250.asp?$image\n@@||weatherbug.com/desktop-weather/*=728x90&\n@@||weatherbug.com/images/stickers/*/728x90/\n@@||weatherbug.com/style/stickers/*_728x90.css\n@@||wixstatic.com/media/*_300_250_$image,domain=lenislens.com\n@@||zorza-polarna.pl/environment/cache/images/300_250_\n! *** easylist:easylist/easylist_whitelist_popup.txt ***\n@@/redirect.aspx?pid=*&bid=$popup,domain=betbeaver.com\n@@||adfarm.mediaplex.com/ad/ck/$popup,domain=betwonga.com\n@@||ads.betfair.com/redirect.aspx?pid=$popup,domain=betwonga.com\n@@||ads.flipkart.com/delivery/ck.php?$popup,domain=flipkart.com\n@@||ads.pinterest.com^$popup,~third-party\n@@||ads.reempresa.org^$popup,domain=reempresa.org\n@@||ads.sudpresse.be^$popup,domain=sudinfo.be\n@@||ads.twitter.com^$popup,~third-party\n@@||ads.williamhillcasino.com/redirect.aspx?*=internal&$popup,domain=williamhillcasino.com\n@@||adserving.unibet.com/redirect.aspx?pid=$popup,domain=betwonga.com\n@@||adv.blogupp.com^$popup\n@@||bet365.com/home/?affiliate=$popup,domain=betbeaver.com|betwonga.com\n@@||doubleclick.net/click%$popup,domain=people.com|time.com\n@@||doubleclick.net/clk;$popup,domain=hotukdeals.com|jobamatic.com|play.google.com|santander.co.uk|techrepublic.com\n@@||doubleclick.net/ddm/clk/$popup,domain=couponcodeswap.com\n@@||g.doubleclick.net/aclk?$popup,domain=bodas.com.mx|bodas.net|casamentos.com.br|casamentos.pt|casamiento.com.uy|casamientos.com.ar|mariages.net|matrimonio.com|matrimonio.com.co|matrimonio.com.pe|matrimonios.cl|weddingspot.co.uk|zillow.com\n@@||gsmarena.com/adclick.php?bannerid=$popup\n@@||serving-sys.com/BurstingPipe/adServer.bs?$popup,domain=jobamatic.com\n@@||viroll.com^$popup,domain=imagebam.com|imgbox.com\n! *** easylist:easylist_adult/adult_whitelist.txt ***\n@@||ad.thisav.com/player/jw.swf\n@@||ads.fuckingmachines.com^$image,~third-party\n@@||ads.ultimatesurrender.com^$image,~third-party\n@@||adv.alsscan.com^$image,stylesheet,domain=alscash.com\n@@||as.sexad.net/as/r?d=preroll-mov-$object-subrequest,domain=youjizz.com\n@@||burningcamel.com/ads/banner.jpg\n@@||cam4.*/ads/directory/$xmlhttprequest\n@@||dpmate.com/exports/tour_20/$domain=digitalplayground.com\n@@||eskimotube.com/advertisements.php?$script\n@@||fucktube.com/work/videoad.php?\n@@||graphics.pop6.com/javascript/live/$script\n@@||graphics.pop6.com/javascript/live_cd/$script\n@@||hostave4.net^*/video/$object-subrequest,domain=kporno.com\n@@||hostedadsp.realitykings.com/hosted/flash/rk_player_1.5_300x250.swf$object\n@@||img.livejasmin.com^$image,domain=4mycams.com\n@@||kuntfutube.com/go.php?ad=\n@@||lp.longtailvideo.com^*/adttext/adttext.js$domain=yuvutu.com\n@@||mrstiff.com/view/textad/$xmlhttprequest\n@@||nonktube.com/img/adyea.jpg\n@@||panicporn.com/Bannerads/player/player_flv_multi.swf$object\n@@||pop6.com/banners/$domain=horny.net|xmatch.com\n@@||promo.cdn.homepornbay.com/key=*.mp4$object-subrequest,domain=hiddencamsvideo.com\n@@||sextoyfun.com/admin/aff_files/BannerManager/$~third-party\n@@||sextoyfun.com/control/aff_banners/$~third-party\n@@||skimtube.com/advertisements.php?\n@@||starcelebs.com/logos/logo10.jpg\n@@||sundaysportclassifieds.co.uk/ads/$image,~third-party\n@@||sundaysportclassifieds.com/ads/$image,domain=sundaysportclassifieds.co.uk\n@@||thisav.com/uploaded_banners/jw.swf$domain=thisav.com\n@@||tjoob.com/go.php?ad=$script,~third-party\n@@||tnaflix.com/ad/$object-subrequest\n@@||tracking.hornymatches.com/track?type=unsubscribe&enid=$subdocument,third-party\n@@||widget.plugrush.com^$subdocument,domain=amateursexy.net\n@@||xxxporntalk.com/images/xxxpt-chrome.jpg\n! Pornhub network\n@@||pornhub.com/channel/\n@@||pornhub.com/comment/\n@@||pornhub.com/front/\n@@||pornhub.com/pornstar/\n@@||pornhub.com/svvt/add?\n@@||pornhub.com/video/\n@@||redtube.com/message/\n@@||redtube.com/rate\n@@||redtube.com/starsuggestion/\n@@||tube8.com/ajax/\n@@||youporn.com/change/rate/\n@@||youporn.com/change/user/\n@@||youporn.com/change/videos/\n@@||youporn.com/esi_home/subscriptions/\n@@||youporn.com/mycollections.json\n@@||youporn.com/notifications/\n@@||youporn.com/subscriptions/\n! Anti-Adblock\n@@.png#$domain=indiangilma.com|lfporn.com\n@@||adultadworld.com/adhandler/$subdocument\n@@||fapxl.com^$elemhide\n@@||fuqer.com^*/advertisement.js\n@@||gaybeeg.info/wp-content/plugins/blockalyzer-adblock-counter/$image,domain=gaybeeg.info\n@@||google.com/ads/$domain=hinduladies.com\n@@||hentaimoe.com/js/advertisement.js\n@@||imgadult.com/js/advertisement.js\n@@||indiangilma.com^$elemhide\n@@||jamo.tv^$script,domain=jamo.tv\n@@||javpee.com/eroex.js\n@@||lfporn.com^$elemhide\n@@||mongoporn.com^*/adframe/$subdocument\n@@||n4mo.org/wp-content/*/ads/\n@@||n4mo.org^$elemhide\n@@||nightchan.com/advertisement.js\n@@||phncdn.com/js/advertisement.js\n@@||phncdn.com/v2/js/adblockdetect.js$domain=keezmovies.com\n@@||phncdn.com^*/ads.js\n@@||phncdn.com^*/fuckadblock.js\n@@||pornomovies.com/js/1/ads-1.js$domain=submityourflicks.com\n@@||pornve.com^$elemhide\n@@||submityourflicks.com/player/player-ads.swf$object\n@@||syndication.exoclick.com/ads.php?type=728x90&$script,domain=dirtstyle.tv\n@@||tmoncdn.com/scripts/advertisement.js$domain=tubemonsoon.com\n@@||trafficjunky.net/js/ad*.js\n@@||tube8.com/js/advertisement.js\n@@||xibitnet.com/check/advertisement.js\n@@||xibitnet.com/check/advertisements.js\n! Non-English\n@@||ads.b10f.jp/flv/$~third-party\n! *** easylist:easylist_adult/adult_whitelist_popup.txt ***\n@@||imagebam.com/image/$popup\n@@||supportchat.contentabc.com^$popup,domain=brazzerssupport.com"
  },
  {
    "path": "splash_utils/perform_actions.js",
    "content": ";(function(){\n\nvar _waitAsync = waitAsync;\nvar setTimeout = waitAsync.setTimeout;\nvar clearTimeout = waitAsync.clearTimeout;\n\nfunction log() {\n    console.log.apply(console, arguments);\n}\n\nfunction _select_set_value(select, value) {\n    for (var i = 0, len = select.options.length; i < len; i++) {\n        var option = select.options[ i ];\n        if (option.value === value) {\n            option.selected = true;\n            return;\n        }\n    }\n    select.selectedIndex = -1;\n}\n\nfunction forEach(arr, fn){\n    Array.prototype.forEach.call(arr, fn);\n}\n\nvar WAIT_ASYNC_OPTS = {\n    maxXhr: 5,\n    maxTimeouts: 400\n};\n\nvar actions = {\n    wait: function(data, callback){\n        setTimeout.call(window, callback, data.timeout);\n    },\n    click: function(data, callback) {\n        var events = [\"mousemove\", \"mouseover\", \"mousedown\", \"mouseup\", \"click\"];\n        var elements = document.querySelectorAll(data.selector);\n        _waitAsync(function(){\n            forEach(elements, function(element){\n                var clientRect = element.getBoundingClientRect();\n                var clientX = clientRect.left + clientRect.width / 2;\n                var clientY = clientRect.top + clientRect.height / 2;\n                forEach(events, function(event){\n                    var ev = document.createEvent(\"MouseEvent\");\n                    ev.initMouseEvent(event, true, true, window, 0,\n                                      clientX, clientY, clientX, clientY,\n                                      false, false, false, false, 0, null);\n                    element.dispatchEvent(ev);\n                });\n            });\n        }, WAIT_ASYNC_OPTS, callback);\n    },\n    scroll: function(data, callback){\n        var elements = document.querySelectorAll(data.selector);\n        _waitAsync(function(){\n            forEach(elements, function(element){\n                // Scroll events in the body are dispatched on the documentElement, reverse this\n                if(element === document.documentElement && element.scrollHeight === document.body.scrollHeight){\n                    element = document.body;\n                }\n                var maxY = element.scrollMaxY || element.scrollHeight;\n                element.scrollTop = (data.percent/100)*maxY;\n            });\n        }, WAIT_ASYNC_OPTS, callback);\n    },\n    set: function(data, callback) {\n        var elements = document.querySelectorAll(data.selector);\n        _waitAsync(function(){\n            forEach(elements, function(element){\n                var type;\n                if(element.tagName === 'SELECT') {\n                    type = 'change';\n                    _select_set_value(element, data.value);\n                } else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\n                    type = 'input';\n                    element.value = data.value;\n                }\n                var ev = document.createEvent('Event');\n                ev.initEvent(type, true, false);\n                element.dispatchEvent(ev);\n            });\n        }, WAIT_ASYNC_OPTS, callback);\n    }\n};\n\nfunction once(fn){\n    var called = false;\n    return function(){\n        if(!called) {\n            called = true;\n            return fn.apply(this, arguments);\n        }\n    };\n}\n\nfunction performAction(action, callback){\n    callback = once(callback);\n    try{\n        var tid = setTimeout.call(window, function(){\n            callback();\n        }, 2000);\n        actions[action.type](action, function(){\n            clearTimeout.call(window, tid);\n            callback();\n        });\n    }catch(e){\n        callback();\n    }\n}\n\nfunction performEvents(eventList, callback) {\n    callback = once(callback);\n    setTimeout.call(window, callback, 8000);\n    function performNext() {\n        if(eventList.length) {\n            performAction(eventList.shift(), performNext);\n        } else {\n            callback();\n        }\n    }\n    performNext();\n}\nwindow.__slybot__performEvents = performEvents;\n\n})();\n"
  },
  {
    "path": "splash_utils/waitAsync.js",
    "content": "\nvar waitAsync = (function(global){\nvar currentContext = null;\nvar waitAsyncSymbol = ('Symbol' in global) ? Symbol() : '__waitAsync__symbol__';\nvar xhrs = 0;\n\n// http://stackoverflow.com/a/20261974/1322817\nfunction locationOf(element, array, comparer, start, end) {\n    if (array.length === 0)\n        return -1;\n\n    start = start || 0;\n    end = end || array.length;\n    var pivot = (start + end) >> 1;\n\n    var c = comparer(element, array[pivot]);\n    if (end - start <= 1) return c == -1 ? pivot - 1 : pivot;\n\n    switch (c) {\n        case -1: return locationOf(element, array, comparer, start, pivot);\n        case 0: return pivot;\n        case 1: return locationOf(element, array, comparer, pivot, end);\n    }\n}\n\nfunction canUseFastTimeouts() {\n    return waitAsync.fastTimeouts && xhrs === 0;\n}\n\nfunction openContext(ctx) {\n    currentContext = ctx;\n}\n\nfunction notifyError(err) {\n    oldSetTimeout(function(){\n        throw err;\n    }, 0);\n    console.error(err);\n}\n\nfunction closeContext(context){\n    currentContext = null;\n    if(context.timeouts === 0 && context.xhrs === 0) {\n        context.onFinish();\n    }\n}\n\nfunction wrapInContext(fn, context) {\n    if(!context || waitAsyncSymbol in fn) return fn;\n    var wrapped = function contextWrapper() {\n        openContext(context);\n        var res, err;\n        try{\n            res = fn.apply(this, arguments);\n        } catch(e) {\n            err = e;\n        }\n        closeContext(context);\n        if(err) {\n            throw err;\n        }\n        return res;\n    };\n    wrapped[waitAsyncSymbol] = context;\n    return wrapped;\n}\n\nfunction compareTimeouts(t1, t2){\n    if (t1.time > t2.time) {\n        return 1;\n    } else if (t1.time < t2.time){\n        return -1;\n    } else {\n        if(t1.tid > t2.tid) {\n            return 1;\n        } else if (t1.tid < t2.tid) {\n            return -1;\n        } else {\n            return 0;\n        }\n    }\n}\n\nfunction FakeDate(y, m, d, h, M, s, ms) {\n    if(arguments.length === 0){\n        return new oldDate(FakeDate.now());\n    } else if (arguments.length === 1){\n        return new oldDate(y);\n    }\n    return new oldDate(y, m, d, h, M, s, ms);\n}\nFakeDate.timeTraveled = 0; // Length of time we have travelled, in milliseconds\nFakeDate.travel = function(ammount){\n    FakeDate.timeTraveled += ammount;\n};\nFakeDate.now = function(){\n    return oldDate.now() + FakeDate.timeTraveled;\n};\n\n// List of \"waiting\" timeout/intervals.\nvar timeouts = [];\nvar timeoutsByTid = {};\n\nvar lastTid = 1;\n\nfunction insertTimeout(fn, timeout, repeat){\n    if(currentContext.timeoutCredits <= 0) {\n        return;\n    }\n    currentContext.timeoutCredits--;\n    var tid = ++lastTid;\n    timeout = Math.max(+timeout, 0);\n    if(currentContext) {\n        currentContext.timeouts++;\n    }\n    var timeoutObj = {\n        time: FakeDate.now() + timeout,\n        context: currentContext,\n        fn: wrapInContext(fn, currentContext),\n        timeout: timeout,\n        tid: tid,\n        repeat: repeat,\n        cleared: false,\n    };\n    timeouts.splice(locationOf(timeoutObj, timeouts, compareTimeouts) + 1, 0, timeoutObj);\n    timeoutsByTid[tid] = timeoutObj;\n    scheduleIfNeccessary();\n    return tid;\n}\n\nfunction setTimeout(fn, timeout){\n    return insertTimeout(fn, timeout, false);\n}\n\nfunction setInterval(fn, timeout){\n    return insertTimeout(fn, timeout, true);\n}\n\nfunction clearTimeout(tid) {\n    var timeoutObj = timeoutsByTid[tid];\n    if(timeoutObj) {\n        timeoutObj.context.timeoutCredits++;\n        clearTimeoutObj(timeoutObj, true);\n    }\n}\n\nfunction clearTimeoutObj(timeoutObj, removeFromArray){\n    if(timeoutObj.context) {\n        timeoutObj.context.timeouts--;\n    }\n    if(removeFromArray) {\n        var loc = locationOf(timeoutObj, timeouts, compareTimeouts);\n        timeouts.splice(loc, 1);\n    }\n    delete timeoutsByTid[timeoutObj.tid];\n}\n\nfunction clearInterval(tid) {\n    clearTimeout(tid);\n}\n\nfunction timeTravel(){\n    if(canUseFastTimeouts() && timeouts.length){\n        FakeDate.travel(Math.max(0, timeouts[0].time - FakeDate.now()));\n    }\n}\n\nfunction runTimeouts() {\n    timeTravel();\n    while(timeouts.length && FakeDate.now() >= timeouts[0].time) {\n        var timeoutObj = timeouts.shift();\n        // Run the timeout\n        if(timeoutObj.repeat && !timeoutObj.cleared && timeoutObj.context.timeoutCredits > 0) {\n            timeoutObj.context.timeoutCredits--;\n            timeoutObj.time = FakeDate.now() + timeoutObj.timeout;\n            timeouts.splice(locationOf(timeoutObj, timeouts, compareTimeouts) + 1, 0, timeoutObj);\n        } else {\n            clearTimeoutObj(timeoutObj, false);\n        }\n        try {\n            timeoutObj.fn.call(global);\n        } catch(e) {\n            notifyError(e);\n        }\n        timeTravel();\n    }\n    scheduleIfNeccessary();\n}\n\nvar scheduledTid = null;\nfunction scheduleIfNeccessary(){\n    if(scheduledTid) {\n        oldClearTimeout(scheduledTid);\n    }\n    if(timeouts.length) {\n        var time = canUseFastTimeouts() ? 0 : timeouts[0].time - FakeDate.now();\n        scheduledTid = oldSetTimeout(function(){\n            scheduledTid = null;\n            runTimeouts();\n        }, time);\n    }\n}\n\nfunction waitAsync(fn, config, callback) {\n    if(typeof config == 'function') {\n        callback = config;\n        config = {};\n    }\n    var ctx = {\n        xhrCredits: typeof config.maxXhr === 'number' ? config.maxXhr : Number.MAX_VALUE,\n        timeoutCredits: typeof config.maxTimeouts === 'number' ? config.maxTimeouts : Number.MAX_VALUE,\n        config: config,\n        timeouts: 0,\n        xhrs: 0,\n        onFinish: callback\n    };\n    openContext(ctx);\n    fn();\n    closeContext(ctx);\n}\n\n\nvar xhrEvents = ['abort', 'error', 'load', 'loadend', 'loadstart', 'progress', 'readystatechange'];\nfunction Xhr(){\n    var context = currentContext;\n    var xhr = new oldXhr();\n\n    var oldSend = patch(xhr, 'send', function(){\n        context = currentContext || context;\n        if(context) {\n            console.log('xhr credits:', context.xhrCredits);\n            if(context.xhrCredits <= 0) {\n                return;\n            }\n            context.xhrCredits--;\n            context.xhrs++;\n            xhrs++;\n        }\n        return oldSend.apply(this, arguments);\n    });\n\n    var oldAEL = patch(xhr, 'addEventListener', function(event, fn){\n        return oldAEL.call(this, event, wrapInContext(fn, context));\n    });\n\n    function patchEventProp(event){\n        var handler = xhr['on' + event];\n        if(typeof handler === 'function' && !(waitAsyncSymbol in handler)){\n            xhr['on' + event] = wrapInContext(handler, context);\n        }\n    }\n\n    xhrEvents.forEach(function(event){\n        oldAEL.call(xhr, event, function(){\n            patchEventProp(event);\n        });\n    });\n\n    oldSetTimeout(function(){\n        xhrEvents.forEach(function(event){\n            patchEventProp(event);\n        });\n\n        xhr.addEventListener('loadend', function(){\n            context.xhrs--;\n            xhrs--;\n        });\n    }, 0);\n\n    return xhr;\n}\n\nfunction requestAnimationFrame(fn){\n    return setTimeout(fn, 16);\n}\n\nfunction cancelAnimationFrame(tid){\n    return clearTimeout(tid);\n}\n\nfunction patch(obj, key, newval) {\n    var old = obj[key];\n    obj[key] = newval;\n    return old;\n}\n\nvar oldSetTimeout = patch(global, 'setTimeout', setTimeout);\nvar oldSetInterval = patch(global, 'setInterval', setInterval);\nvar oldClearInterval = patch(global, 'clearInterval', clearInterval);\nvar oldClearTimeout = patch(global, 'clearTimeout', clearTimeout);\nvar oldXhr = patch(global, 'XMLHttpRequest', Xhr);\nvar oldDate = patch(global, 'Date', FakeDate);\n\nvar oldRequestAnimationFrame = null;\n['requestAnimationFrame', 'webkitRequestAnimationFrame', 'mozRequestAnimationFrame'].forEach(function(prop){\n    if(!(prop in global)) return;\n    oldRequestAnimationFrame = patch(global, prop, requestAnimationFrame);\n});\nvar oldCancelAnimationFrame = null;\n['cancelAnimationFrame', 'webkitCancelAnimationFrame', 'mozCancelAnimationFrame'].forEach(function(prop){\n    if(!(prop in global)) return;\n    patch(global, prop, requestAnimationFrame);\n});\n\nwaitAsync.fastTimeouts = false;\nwaitAsync.setTimeout = oldSetTimeout;\nwaitAsync.setInterval = oldSetInterval;\nwaitAsync.clearTimeout = oldClearTimeout;\nwaitAsync.clearInterval = oldClearInterval;\nwaitAsync.XMLHttpRequest = oldXhr;\nwaitAsync.Date = oldDate;\nreturn waitAsync;\n\n})(this);\n\n"
  },
  {
    "path": "splash_utils/z_inject_this.js",
    "content": "// Keep a reference to some native methods, so we use the originals if\n// they are overridden by the page\nvar Json = JSON;\nvar JSONstringify = JSON.stringify;\nvar arraySplice = Array.prototype.splice;\nvar ArrayProto = Array.prototype;\nvar ObjectProto = Object.prototype;\nvar NumberProto = Number.prototype;\nvar StringProto = String.prototype;\nvar BooleanProto = Boolean.prototype;\n\n\n// Note: Variables here are not leaked to the global scope because the compiler wraps it in a function\n\nvar MAX_DIALOGS = 15;  // Maximum number of dialogs (alert, confirm, prompt) before throwing an exception\n\nvar PortiaPage = function PortiaPage() {\n    var that = this;\n    this.mirrorClient = new TreeMirrorClient(document, {\n        initialize: function(rootId, children, baseURI){\n            that.sendMessage('mutation', ['initialize', rootId, children, baseURI]);\n        },\n        applyChanged: function(removed, addedOrMoved, attributes, text){\n            that.sendMessage('mutation', ['applyChanged', removed, addedOrMoved, attributes, text]);\n        }\n    });\n};\n\nPortiaPage.prototype.sendMutation = function(){\n    this.sendMessage('mutation', arraySplice.call(arguments, 0));\n};\n\nPortiaPage.prototype.sendMessage = function(action, message) {\n    var oldAPtoJson = ArrayProto.toJSON;\n    var oldOPtoJson = ObjectProto.toJSON;\n    var oldNPtoJson = NumberProto.toJSON;\n    var oldSPtoJson = StringProto.toJSON;\n    var oldBPtoJson = BooleanProto.toJSON;\n    delete ArrayProto.toJSON;\n    delete ObjectProto.toJSON;\n    delete NumberProto.toJSON;\n    delete StringProto.toJSON;\n    delete BooleanProto.toJSON;\n\n    __portiaApi.sendMessage(JSONstringify.call(Json, [action, message]));\n\n    if(oldAPtoJson) { ArrayProto.toJSON   = oldAPtoJson; }\n    if(oldOPtoJson) { ObjectProto.toJSON  = oldOPtoJson; }\n    if(oldNPtoJson) { NumberProto.toJSON  = oldNPtoJson; }\n    if(oldSPtoJson) { StringProto.toJSON  = oldSPtoJson; }\n    if(oldBPtoJson) { BooleanProto.toJSON = oldBPtoJson; }\n};\n\nPortiaPage.prototype.url = function() {\n    return window.location;\n};\n\nPortiaPage.prototype.scrollX = function() {\n    return window.scrollX;\n};\n\nPortiaPage.prototype.scrollY = function() {\n    return window.scrollY;\n};\n\nPortiaPage.prototype.screenX = function() {\n    return window.screenX;\n};\n\nPortiaPage.prototype.screenY = function() {\n    return window.screenY;\n};\n\nPortiaPage.prototype.currentState = function() {\n    return {\n        url: this.url,\n        scroll: {\n            x: this.scrollX(),\n            y: this.scrollY(),\n            v: this.screenX(),\n            h: this.screenY(),\n            mx: window.scrollMaxX,\n            my: window.scrollMaxY\n        }\n    };\n};\n\nPortiaPage.sendEvent = {};\n\nPortiaPage.sendEvent.keyboard = function(element, data, type){\n    var ev = document.createEvent(\"KeyboardEvent\");\n    ev.initKeyboardEvent(type, true, true, window, data.ctrlKey, data.altKey, data.shiftKey, data.metaKey, data.keyCode, data.charCode);\n    element.dispatchEvent(ev);\n};\n\nPortiaPage.sendEvent.simple = function(element, data, type) {\n    var ev = document.createEvent('Event');\n    ev.initEvent(type, true, false);\n    element.dispatchEvent(ev);\n};\n\nPortiaPage.sendEvent.focus = function(element, data, type) {\n    if(type in element){\n        element[type](); // This will trigger the event\n    }\n};\n\nPortiaPage.sendEvent.scroll = function(element, data){\n    // Scroll events in the body are dispatched on the documentElement, reverse this\n    if(element === document.documentElement && element.scrollHeight === document.body.scrollHeight){\n        element = document.body;\n    }\n    // This will trigger the scroll event\n    element.scrollTop = data.scrollTop;\n    element.scrollLeft = data.scrollLeft;\n};\n\nPortiaPage.sendEvent.unknown = function(element, data, type) {\n    console.log('Unknown event category for event ' + type);\n};\n\nPortiaPage.sendEvent.mouse = function(element, data, type) {\n    var clientRect = element.getBoundingClientRect();\n    var clientX = data.targetX + clientRect.left;\n    var clientY = data.targetY + clientRect.top;\n\n    var ev = document.createEvent(\"MouseEvent\");\n    ev.initMouseEvent(type, true, true, window, data.detail || 0,\n                      clientX, clientY, clientX, clientY,\n                      data.ctrlKey, data.altKey, data.shiftKey, data.metaKey, data.button, null);\n    element.dispatchEvent(ev);\n};\n\nPortiaPage.prototype.sendEvent = function(data) {\n    var element = this.getByNodeId(data.target);\n    if (!element) {\n        throw new Error(\"Event target doesn't exist.\");\n    }\n    Object.keys(data.propsBefore || {}).forEach(function(propName){\n        element[propName] = data.propsBefore[propName];\n    });\n\n    PortiaPage.sendEvent[data.category].call(this, element, data, data.type);\n\n    Object.keys(data.propsAfter || {}).forEach(function(propName){\n        element[propName] = data.propsAfter[propName];\n    });\n};\n\nPortiaPage.prototype.getByNodeId = function(nodeId){\n    return this.mirrorClient.knownNodes.byId[nodeId];\n};\n\nPortiaPage.prototype.pyGetByNodeId = function(nodeId){\n    // Workarround to return QWebElement in python\n    var res = this.getByNodeId(nodeId);\n    if(res) {\n        __portiaApi.returnElement(res);\n    }\n};\n\nvar incrementDialogCounter = function(){\n    if(++incrementDialogCounter.count > MAX_DIALOGS) {\n        throw new Error('Not allowed');\n    }\n};\nincrementDialogCounter.count = 0;\n\nwindow.alert = function(){};\n\nwindow.prompt = function(){\n    incrementDialogCounter();\n    return null; // dismiss the prompt (clicking cancel or closing the window)\n};\nwindow.confirm = function(){\n    incrementDialogCounter();\n    return true;\n};\n\nif(!('livePortiaPage' in window)){\n    window.livePortiaPage = new PortiaPage();\n}"
  }
]