commit 3367d512ad5dba3ef3cdfa5815773bbf51ea7b8b Author: jmgao Date: Sat Nov 11 19:14:21 2017 +0800 k8s-calico initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e46d03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +down/* +!down/download.sh +bin/ +ansible.cfg +hosts +*.crt +*.pem +roles/prepare/files/ca* diff --git a/01.prepare.yml b/01.prepare.yml new file mode 100644 index 0000000..b35e32b --- /dev/null +++ b/01.prepare.yml @@ -0,0 +1,17 @@ +# 在deploy节点生成CA相关证书,以供整个集群使用 +- hosts: deploy + gather_facts: False + roles: + - ca + +# 集群节点的公共配置任务 +- hosts: kube-cluster + gather_facts: False + roles: + - prepare + +# 可选,多master部署时的负载均衡配置 +- hosts: lb + gather_facts: False + roles: + - lb diff --git a/02.etcd.yml b/02.etcd.yml new file mode 100644 index 0000000..57d5858 --- /dev/null +++ b/02.etcd.yml @@ -0,0 +1,4 @@ +- hosts: etcd + gather_facts: False + roles: + - etcd diff --git a/03.kubectl.yml b/03.kubectl.yml new file mode 100644 index 0000000..56c3d29 --- /dev/null +++ b/03.kubectl.yml @@ -0,0 +1,4 @@ +- hosts: kube-cluster + gather_facts: False + roles: + - kubectl diff --git a/04.docker.yml b/04.docker.yml new file mode 100644 index 0000000..dd7fb11 --- /dev/null +++ b/04.docker.yml @@ -0,0 +1,4 @@ +- hosts: kube-cluster + gather_facts: False + roles: + - docker diff --git a/05.calico.yml b/05.calico.yml new file mode 100644 index 0000000..45bfee5 --- /dev/null +++ b/05.calico.yml @@ -0,0 +1,4 @@ +- hosts: kube-cluster + gather_facts: False + roles: + - calico diff --git a/06.kube-master.yml b/06.kube-master.yml new file mode 100644 index 0000000..b946f86 --- /dev/null +++ b/06.kube-master.yml @@ -0,0 +1,4 @@ +- hosts: kube-master + gather_facts: False + roles: + - kube-master diff --git a/07.kube-node.yml b/07.kube-node.yml new file mode 100644 index 0000000..bb47e27 --- /dev/null +++ b/07.kube-node.yml @@ -0,0 +1,4 @@ +- hosts: kube-node + gather_facts: False + roles: + - kube-node diff --git a/90.setup.yml b/90.setup.yml new file mode 100644 index 0000000..8b27580 --- /dev/null +++ b/90.setup.yml @@ -0,0 +1,34 @@ +- hosts: kube-cluster + gather_facts: False + roles: + - prepare + +- hosts: etcd + gather_facts: False + roles: + - etcd + +- hosts: kube-cluster + gather_facts: False + roles: + - kubectl + +- hosts: kube-cluster + gather_facts: False + roles: + - docker + +- hosts: kube-cluster + gather_facts: False + roles: + - calico + +- hosts: kube-master + gather_facts: False + roles: + - kube-master + +- hosts: kube-node + gather_facts: False + roles: + - kube-node diff --git a/95.clean.yml b/95.clean.yml new file mode 100644 index 0000000..7de7a04 --- /dev/null +++ b/95.clean.yml @@ -0,0 +1,79 @@ +- hosts: kube-node + gather_facts: False + tasks: + - name: stop kube-node service + shell: "systemctl stop kubelet kube-proxy calico-node docker" + ignore_errors: true + + - name: umount kubelet 挂载的目录 + shell: "mount | grep '/var/lib/kubelet'| awk '{print $3}'|xargs umount" + ignore_errors: true + + - name: 清理目录和文件 + file: name={{ item }} state=absent + with_items: + - "/var/lib/kubelet/" + - "/var/lib/docker/" + - "/var/run/docker/" + - "/etc/kubernetes/" + - "/etc/systemd/system/kubelet.service" + - "/etc/systemd/system/docker.service" + - "/etc/systemd/system/kube-proxy.service" + - "/etc/systemd/system/calico-node.service" + # - "/root/local/bin/" + + - name: 清理 iptables + shell: iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat + + - name: 清理网络 + shell: "ip link del docker0; ip link del tunl0" + ignore_errors: true + +- hosts: kube-master + gather_facts: False + tasks: + - name: stop kube-master service + shell: "systemctl stop kube-apiserver kube-controller-manager kube-scheduler calico-node" + ignore_errors: true + + - name: 清理目录和文件 + file: name={{ item }} state=absent + with_items: + - "/var/run/kubernetes" + - "/etc/systemd/system/kube-apiserver.service" + - "/etc/systemd/system/kube-controller-manager.service" + - "/etc/systemd/system/kube-scheduler.service" + - "/etc/kubernetes/" + +- hosts: etcd + gather_facts: False + tasks: + - name: stop etcd service + shell: systemctl stop etcd + ignore_errors: true + + - name: 清理目录和文件 + file: name={{ item }} state=absent + with_items: + - "/var/lib/etcd" + - "/etc/etcd/" + - "/etc/systemd/system/etcd.service" + +- hosts: lb + gather_facts: False + tasks: + - name: stop keepalived service + shell: systemctl disable keepalived && systemctl stop keepalived + ignore_errors: true + + - name: stop haproxy service + shell: systemctl disable haproxy && systemctl stop haproxy + ignore_errors: true + + - name: 清理LB 配置文件目录 + file: name={{ item }} state=absent + with_items: + - "/etc/haproxy" + - "/etc/keepalived" + ignore_errors: true + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..48a6741 --- /dev/null +++ b/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "{}" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright 2017 jmgao + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d33a76 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +# 利用Ansible部署kubernetes集群 + +本文档记录自己实践部署高可用k8s集群的过程,利用ansible-playbook简化二进制方式部署过程。 + +网上有很多类似shell脚本和ansible部署版本,要不看得太复杂,或者久未更新,所以这里自己造轮子吧。 + +二进制方式手动部署,将有助于理解系统各组件的交互原理和熟悉组建启动参数,进而能快速解决实际问题。 + +1. 建议阅读 [feisky.gitbooks](https://feisky.gitbooks.io/kubernetes/) 原理和部署章节。 +1. 建议阅读 [opsnull教程](https://github.com/opsnull/follow-me-install-kubernetes-cluster) 二进制手工部署。 + +本文是按照上述文档,更新组件实践修饰而成,修改了部分安全特性。 + +## 特性 + +1. 截至2017-10-4 最新组件版本,参见[down版本](./down/download.sh) 文件。 +1. 因本人部署节点IP属于同一网段,使用flannel新后端[host-gw](https://github.com/coreos/flannel/blob/master/Documentation/backends.md) 提升部分性能。 + +## 快速指南 + +以下为快速体验k8s集群的测试、开发环境--AllinOne部署,觉得比官方的minikube方便、简单很多。 + +### 1.准备一台虚机(推荐内存3G,CPU 2,硬盘 30G以上),安装Ubuntu16.04,配置基础网络、更新源、SSH登陆等。 +### 2.安装python2/git/python-pip/ansible +``` bash +# 更新 +apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y +# 删除不要的默认安装 +apt-get purge ufw lxd lxd-client lxcfs lxc-common +# 安装依赖工具 +apt-get install python2.7 git python-pip +# 安装ansible +pip install pip --upgrade +pip install ansible +# 国内加速 +pip install pip --upgrade -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com +pip install --no-cache-dir ansible -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com +# 配置ansible ssh密钥登陆 +ssh-keygen -t rsa -b 2048 回车 回车 回车 +ssh-copy-id $IP //$IP为本虚机地址 +``` +### 3.安装k8s +``` bash +git clone https://gitee.com/netmon/deploy-k8s-with-ansible.git +mv deploy-k8s-with-ansible/ /etc/ansible +cd /etc/ansible +# 配置ansible +cp example/ansible.cfg.example ansible.cfg +# 配置集群hosts +cp example/hosts.allinone.example hosts +然后根据实际情况修改此hosts文件 +# 准备二进制安装包 +按照down/download.sh文件提示先手工下载各种tar包到 ./down目录 +sh down/download.sh +# 开始安装(一步安装) +ansible-playbook 90.setup.yml +# 或者采用分步安装 +ansible-playbook 01.prepare.yml +ansible-playbook 02.etcd.yml +... +``` +如果执行成功,k8s集群就安装好了 + +### 4.验证安装 +``` bash +kubectl version +kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等组件 Healthy +kubectl clusterinfo # 可以看到kubernetes master(apiserver)组件 running +kubectl get node # 可以看到单 node Ready状态 +kubectl get pod --all-namespaces # 可以查看所有集群pod状态 +kubectl get svc --all-namespaces # 可以查看所有集群服务状态 +``` + +## 多节点指南(文档更新中...) +1. 准备4台虚机(物理机也可,虚机实验更方便),安装Ubuntu16.04(centos7理论上一样,不想ansible脚本太多条件判断) +1. 准备一台部署机(可以复用上述4台虚机),安装ansible,配置到4台目标机器ssh无密码登陆等 +1. 准备外部负载均衡,准备master节点的vip地址 +1. 规划集群节点,完成ansible inventory文件[参考](hosts) +1. 其他安装步骤同单节点安装 + diff --git a/down/download.sh b/down/download.sh new file mode 100644 index 0000000..40267f2 --- /dev/null +++ b/down/download.sh @@ -0,0 +1,109 @@ +#!/bin/bash +#主要组件版本如下 +export K8S_VER=v1.7.7 +export ETCD_VER=v3.2.8 +export FLANNEL_VER=v0.9.0 +export DOCKER_VER=17.09.0-ce +export CALICO_VER=v1.6.1 + +echo "\n----download k8s binary at:" +echo https://dl.k8s.io/${K8S_VER}/kubernetes-server-linux-amd64.tar.gz + +echo "\n----download etcd binary at:" +echo https://github.com/coreos/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz +echo https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz + +echo "\n----download flannel binary at:" +echo https://github.com/coreos/flannel/releases/download/${FLANNEL_VER}/flannel-${FLANNEL_VER}-linux-amd64.tar.gz + +echo "\n----download calicoctl binary at:" +echo https://github.com/projectcalico/calicoctl/releases/download/${CALICO_VER}/calicoctl + +echo "\n----download docker binary at:" +echo https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VER}.tgz + +echo "\n----download ca tools at:" +echo https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 +echo https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 +echo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 + +echo "\n注意1:因为网络原因不进行自动下载" +echo "请按照以上链接手动下载二进制包到down目录中,包含如下:" +echo "-rw-r--r-- 1 root root 6595195 Mar 30 2016 cfssl-certinfo_linux-amd64" +echo "-rw-r--r-- 1 root root 2277873 Mar 30 2016 cfssljson_linux-amd64" +echo "-rw-r--r-- 1 root root 10376657 Mar 30 2016 cfssl_linux-amd64" +echo "-rwxr--r-- 1 root root 29699281 Aug 24 17:09 docker-17.06.1-ce.tgz*" +echo "-rwxr--r-- 1 root root 10176124 Aug 24 17:09 etcd-v3.2.6-linux-amd64.tar.gz*" +echo "-rwxr--r-- 1 root root 9090192 Aug 24 17:09 flannel-v0.8.0-linux-amd64.tar.gz*" +echo "-rwxr--r-- 1 root root 437406487 Aug 24 17:09 kubernetes-server-linux-amd64.tar.gz*" + +echo "\n注意2:如果还没有手工下载tar包,请Ctrl-c结束此脚本\nsleep 60" +sleep 60 + +mkdir -p ../bin +### 准备证书工具程序 +echo "\n准备证书工具程序..." +if [ -f "cfssl_linux-amd64" ]; then + mv cfssl_linux-amd64 ../bin/cfssl +else + echo 请先下载https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 +fi +if [ -f "cfssljson_linux-amd64" ]; then + mv cfssljson_linux-amd64 ../bin/cfssljson +else + echo 请先下载https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 +fi +if [ -f "cfssl-certinfo_linux-amd64" ]; then + mv cfssl-certinfo_linux-amd64 ../bin/cfssl-certinfo +else + echo 请先下载https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 +fi + +### 准备etcd程序 +echo "\n准备etcd二进制程序..." +if [ -f "etcd-${ETCD_VER}-linux-amd64.tar.gz" ]; then + echo "\nextracting etcd binaries..." + tar zxf etcd-${ETCD_VER}-linux-amd64.tar.gz + mv etcd-${ETCD_VER}-linux-amd64/etcd* ../bin +else + echo 请先下载etcd-${ETCD_VER}-linux-amd64.tar.gz +fi + +### 准备flannel程序 +echo "\n准备flannel二进制程序..." +if [ -f "flannel-${FLANNEL_VER}-linux-amd64.tar.gz" ]; then + echo "\nextracting flannel binaries..." + tar zxf flannel-${FLANNEL_VER}-linux-amd64.tar.gz + mv flanneld mk-docker-opts.sh ../bin + rm README.md +else + echo 请先下载flannel-${FLANNEL_VER}-linux-amd64.tar.gz +fi + +### 准备kubernetes程序 +echo "\n准备kubernetes二进制程序..." +if [ -f "kubernetes-server-linux-amd64.tar.gz" ]; then + echo "\nextracting kubernetes binaries..." + tar zxf kubernetes-server-linux-amd64.tar.gz + mv kubernetes/server/bin/kube-apiserver ../bin + mv kubernetes/server/bin/kube-controller-manager ../bin + mv kubernetes/server/bin/kubectl ../bin + mv kubernetes/server/bin/kubelet ../bin + mv kubernetes/server/bin/kube-proxy ../bin + mv kubernetes/server/bin/kube-scheduler ../bin +else + echo 请先下载kubernetes-server-linux-amd64.tar.gz +fi + +### 准备docker程序 +echo "\n准备docker二进制程序..." +if [ -f "docker-${DOCKER_VER}.tgz" ]; then + echo "\nextracting docker binaries..." + tar zxf docker-${DOCKER_VER}.tgz + mv docker/docker* ../bin + if [ -f "docker/completion/bash/docker" ]; then + mv -f docker/completion/bash/docker ../roles/kube-node/files/docker + fi +else + echo 请先下载docker-${DOCKER_VER}.tgz +fi diff --git a/example/ansible.cfg.example b/example/ansible.cfg.example new file mode 100644 index 0000000..b008026 --- /dev/null +++ b/example/ansible.cfg.example @@ -0,0 +1,264 @@ +# config file for ansible -- http://ansible.com/ +# ============================================== + +# nearly all parameters can be overridden in ansible-playbook +# or with command line flags. ansible will read ANSIBLE_CONFIG, +# ansible.cfg in the current working directory, .ansible.cfg in +# the home directory or /etc/ansible/ansible.cfg, whichever it +# finds first + +[defaults] + +# some basic default values... + +#inventory = /etc/ansible/hosts +#library = /usr/share/my_modules/ +#remote_tmp = $HOME/.ansible/tmp +#forks = 5 +#poll_interval = 15 +#sudo_user = root +#ask_sudo_pass = True +#ask_pass = True +#transport = smart +#remote_port = 22 +#module_lang = C + +# plays will gather facts by default, which contain information about +# the remote system. +# +# smart - gather by default, but don't regather if already gathered +# implicit - gather by default, turn off with gather_facts: False +# explicit - do not gather by default, must say gather_facts: True +#gathering = implicit + +# additional paths to search for roles in, colon separated +roles_path = /etc/ansible/roles + +# uncomment this to disable SSH key host checking +#host_key_checking = False + +# change the default callback +#stdout_callback = skippy +# enable additional callbacks +#callback_whitelist = timer, mail + +# change this for alternative sudo implementations +#sudo_exe = sudo + +# What flags to pass to sudo +# WARNING: leaving out the defaults might create unexpected behaviours +#sudo_flags = -H -S -n + +# SSH timeout +#timeout = 10 + +# default user to use for playbooks if user is not specified +# (/usr/bin/ansible will use current user as default) +#remote_user = root + +# logging is off by default unless this path is defined +# if so defined, consider logrotate +#log_path = /var/log/ansible.log + +# default module name for /usr/bin/ansible +#module_name = command + +# use this shell for commands executed under sudo +# you may need to change this to bin/bash in rare instances +# if sudo is constrained +#executable = /bin/sh + +# if inventory variables overlap, does the higher precedence one win +# or are hash values merged together? The default is 'replace' but +# this can also be set to 'merge'. +#hash_behaviour = replace + +# by default, variables from roles will be visible in the global variable +# scope. To prevent this, the following option can be enabled, and only +# tasks and handlers within the role will see the variables there +#private_role_vars = yes + +# list any Jinja2 extensions to enable here: +#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n + +# if set, always use this private key file for authentication, same as +# if passing --private-key to ansible or ansible-playbook +#private_key_file = /path/to/file + +# format of string {{ ansible_managed }} available within Jinja2 +# templates indicates to users editing templates files will be replaced. +# replacing {file}, {host} and {uid} and strftime codes with proper values. +#ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} +# This short version is better used in templates as it won't flag the file as changed every run. +#ansible_managed = Ansible managed: {file} on {host} + +# by default, ansible-playbook will display "Skipping [host]" if it determines a task +# should not be run on a host. Set this to "False" if you don't want to see these "Skipping" +# messages. NOTE: the task header will still be shown regardless of whether or not the +# task is skipped. +#display_skipped_hosts = True + +# by default (as of 1.3), Ansible will raise errors when attempting to dereference +# Jinja2 variables that are not set in templates or action lines. Uncomment this line +# to revert the behavior to pre-1.3. +#error_on_undefined_vars = False + +# by default (as of 1.6), Ansible may display warnings based on the configuration of the +# system running ansible itself. This may include warnings about 3rd party packages or +# other conditions that should be resolved if possible. +# to disable these warnings, set the following value to False: +#system_warnings = True + +# by default (as of 1.4), Ansible may display deprecation warnings for language +# features that should no longer be used and will be removed in future versions. +# to disable these warnings, set the following value to False: +#deprecation_warnings = True + +# (as of 1.8), Ansible can optionally warn when usage of the shell and +# command module appear to be simplified by using a default Ansible module +# instead. These warnings can be silenced by adjusting the following +# setting or adding warn=yes or warn=no to the end of the command line +# parameter string. This will for example suggest using the git module +# instead of shelling out to the git command. +# command_warnings = False + + +# set plugin path directories here, separate with colons +#action_plugins = /usr/share/ansible/plugins/action +#callback_plugins = /usr/share/ansible/plugins/callback +#connection_plugins = /usr/share/ansible/plugins/connection +#lookup_plugins = /usr/share/ansible/plugins/lookup +#vars_plugins = /usr/share/ansible/plugins/vars +#filter_plugins = /usr/share/ansible/plugins/filter +#test_plugins = /usr/share/ansible/plugins/test + +# by default callbacks are not loaded for /bin/ansible, enable this if you +# want, for example, a notification or logging callback to also apply to +# /bin/ansible runs +#bin_ansible_callbacks = False + + +# don't like cows? that's unfortunate. +# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1 +#nocows = 1 + +# set which cowsay stencil you'd like to use by default. When set to 'random', +# a random stencil will be selected for each task. The selection will be filtered +# against the `cow_whitelist` option below. +#cow_selection = default +#cow_selection = random + +# when using the 'random' option for cowsay, stencils will be restricted to this list. +# it should be formatted as a comma-separated list with no spaces between names. +# NOTE: line continuations here are for formatting purposes only, as the INI parser +# in python does not support them. +#cow_whitelist=bud-frogs,bunny,cheese,daemon,default,dragon,elephant-in-snake,elephant,eyes,\ +# hellokitty,kitty,luke-koala,meow,milk,moofasa,moose,ren,sheep,small,stegosaurus,\ +# stimpy,supermilker,three-eyes,turkey,turtle,tux,udder,vader-koala,vader,www + +# don't like colors either? +# set to 1 if you don't want colors, or export ANSIBLE_NOCOLOR=1 +#nocolor = 1 + +# if set to a persistent type (not 'memory', for example 'redis') fact values +# from previous runs in Ansible will be stored. This may be useful when +# wanting to use, for example, IP information from one group of servers +# without having to talk to them in the same playbook run to get their +# current IP information. +#fact_caching = memory + + +# retry files +# When a playbook fails by default a .retry file will be created in ~/ +# You can disable this feature by setting retry_files_enabled to False +# and you can change the location of the files by setting retry_files_save_path + +#retry_files_enabled = False +#retry_files_save_path = ~/.ansible-retry + + +# prevents logging of task data, off by default +#no_log = False + +# prevents logging of tasks, but only on the targets, data is still logged on the master/controller +#no_target_syslog = False + +# controls the compression level of variables sent to +# worker processes. At the default of 0, no compression +# is used. This value must be an integer from 0 to 9. +#var_compression_level = 9 + +[privilege_escalation] +#become=True +#become_method=sudo +#become_user=root +#become_ask_pass=False + +[paramiko_connection] + +# uncomment this line to cause the paramiko connection plugin to not record new host +# keys encountered. Increases performance on new host additions. Setting works independently of the +# host key checking setting above. +#record_host_keys=False + +# by default, Ansible requests a pseudo-terminal for commands executed under sudo. Uncomment this +# line to disable this behaviour. +#pty=False + +[ssh_connection] + +# ssh arguments to use +# Leaving off ControlPersist will result in poor performance, so use +# paramiko on older platforms rather than removing it +#ssh_args = -o ControlMaster=auto -o ControlPersist=60s + +# The path to use for the ControlPath sockets. This defaults to +# "%(directory)s/ansible-ssh-%%h-%%p-%%r", however on some systems with +# very long hostnames or very long path names (caused by long user names or +# deeply nested home directories) this can exceed the character limit on +# file socket names (108 characters for most platforms). In that case, you +# may wish to shorten the string below. +# +# Example: +# control_path = %(directory)s/%%h-%%r +#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r + +# Enabling pipelining reduces the number of SSH operations required to +# execute a module on the remote server. This can result in a significant +# performance improvement when enabled, however when using "sudo:" you must +# first disable 'requiretty' in /etc/sudoers +# +# By default, this option is disabled to preserve compatibility with +# sudoers configurations that have requiretty (the default on many distros). +# +#pipelining = False + +# if True, make ansible use scp if the connection type is ssh +# (default is sftp) +#scp_if_ssh = True + +# if False, sftp will not use batch mode to transfer files. This may cause some +# types of file transfer failures impossible to catch however, and should +# only be disabled if your sftp version has problems with batch mode +#sftp_batch_mode = False + +[accelerate] +#accelerate_port = 5099 +#accelerate_timeout = 30 +#accelerate_connect_timeout = 5.0 + +# The daemon timeout is measured in minutes. This time is measured +# from the last activity to the accelerate daemon. +#accelerate_daemon_timeout = 30 + +# If set to yes, accelerate_multi_key will allow multiple +# private keys to be uploaded to it, though each user must +# have access to the system via SSH to add a new key. The default +# is "no". +#accelerate_multi_key = yes + +[selinux] +# file systems that require special treatment when dealing with security context +# the default behaviour that copies the existing context or uses the user default +# needs to be changed to use the file system dependent context. +#special_context_filesystems=nfs,vboxsf,fuse,ramfs diff --git a/example/hosts.allinone.example b/example/hosts.allinone.example new file mode 100644 index 0000000..37c975a --- /dev/null +++ b/example/hosts.allinone.example @@ -0,0 +1,74 @@ +# 部署节点:运行ansible 脚本的节点 +[deploy] +192.168.1.1 + +#etcd集群请提供如下NODE_NAME、NODE_IP变量 +[etcd] +192.168.1.1 NODE_NAME=etcd1 NODE_IP="192.168.1.1" + +[kube-master] +192.168.1.1 + +#确保node节点有变量NODE_ID=node1 +[kube-node] +192.168.1.1 NODE_ID=node1 NODE_IP="192.168.1.1" + +[kube-cluster:children] +kube-node +kube-master + +[kube-cluster:vars] +# ---------集群主要参数--------------- +#集群 MASTER IP +MASTER_IP="192.168.1.1" + +#集群 APISERVER +KUBE_APISERVER="https://192.168.1.1:6443" + +#TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 +BOOTSTRAP_TOKEN="d18f94b5fa585c7123f56803d925d2e7" + +# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达 +SERVICE_CIDR="10.68.0.0/16" + +# POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达 (flanneld 保证) +CLUSTER_CIDR="172.20.0.0/16" + +# 服务端口范围 (NodePort Range) +NODE_PORT_RANGE="2000-8000" + +# flanneld 网络配置前缀 +FLANNEL_ETCD_PREFIX="/kubernetes/network" + +# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP) +CLUSTER_KUBERNETES_SVC_IP="10.68.0.1" + +# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配) +CLUSTER_DNS_SVC_IP="10.68.0.2" + +# 集群 DNS 域名 +CLUSTER_DNS_DOMAIN="cluster.local." + +# etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置** +ETCD_NODES="etcd1=https://192.168.1.1:2380" + +# etcd 集群服务地址列表, **根据实际 etcd 集群成员设置** +ETCD_ENDPOINTS="https://192.168.1.1:2379" + +# 集群basic auth 使用的用户名和密码 +BASIC_AUTH_USER="admin" +BASIC_AUTH_PASS="test1234" + +# ---------附加参数-------------------- +#默认二进制文件目录 +bin_dir="/root/local/bin" + +#证书目录 +ca_dir="/etc/kubernetes/ssl" + +#部署目录,即 ansible 工作目录 +base_dir="/etc/ansible" + +#私有仓库 harbor服务器 (域名或者IP) +#需要把 harbor服务器证书复制到roles/harbor/files/harbor-ca.crt +HARBOR_SERVER="harbor.yourdomain.com" diff --git a/example/hosts.m-masters.example b/example/hosts.m-masters.example new file mode 100644 index 0000000..9f7eaa8 --- /dev/null +++ b/example/hosts.m-masters.example @@ -0,0 +1,91 @@ +# 部署节点:运行这份 ansible 脚本的节点 +[deploy] +192.168.1.1 + +# 负载均衡至少两个节点,安装 haproxy+keepalived +[lb] +192.168.1.1 LB_NAME=lb1 LB_IF="eth0" LB_ROLE=master +192.168.1.2 LB_NAME=lb2 LB_IF="eth0" LB_ROLE=backup +[lb:vars] +LB_EP1="192.168.1.1:6443" # api-server 实际成员地址端口 +LB_EP2="192.168.1.2:6443" # api-server 实际成员地址端口 +MASTER_IP="192.168.1.100" # api-server 虚地址 +MASTER_PORT="8443" # api-server 服务端口 + +# etcd集群请提供如下NODE_NAME、NODE_IP变量 +# 请注意etcd集群必须是3,5,7...奇数个节点 +[etcd] +192.168.1.1 NODE_NAME=etcd1 NODE_IP="192.168.1.1" +192.168.1.2 NODE_NAME=etcd2 NODE_IP="192.168.1.2" +192.168.1.3 NODE_NAME=etcd3 NODE_IP="192.168.1.3" + +[kube-master] +192.168.1.1 +192.168.1.2 + +#确保node节点有变量NODE_ID=node1 +[kube-node] +192.168.1.1 NODE_ID=node1 NODE_IP="192.168.1.1" +192.168.1.2 NODE_ID=node2 NODE_IP="192.168.1.2" +192.168.1.3 NODE_ID=node3 NODE_IP="192.168.1.3" +192.168.1.4 NODE_ID=node4 NODE_IP="192.168.1.4" +192.168.1.5 NODE_ID=node5 NODE_IP="192.168.1.5" + +[kube-cluster:children] +kube-node +kube-master +lb + +[kube-cluster:vars] +# ---------集群主要参数--------------- +#集群 MASTER IP, 需要外部负载均衡,一般为VIP地址 +MASTER_IP="192.168.1.100" +KUBE_APISERVER="https://192.168.1.100:8443" + +#TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 +BOOTSTRAP_TOKEN="d18f94b5fa585c7123f56803d925d2e7" + +# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达 +SERVICE_CIDR="10.68.0.0/16" + +# POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达 (flanneld 保证) +CLUSTER_CIDR="172.20.0.0/16" + +# 服务端口范围 (NodePort Range) +NODE_PORT_RANGE="2000-8000" + +# flanneld 网络配置前缀 +FLANNEL_ETCD_PREFIX="/kubernetes/network" + +# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP) +CLUSTER_KUBERNETES_SVC_IP="10.68.0.1" + +# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配) +CLUSTER_DNS_SVC_IP="10.68.0.2" + +# 集群 DNS 域名 +CLUSTER_DNS_DOMAIN="cluster.local." + +# etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置** +ETCD_NODES="etcd1=https://192.168.1.1:2380,etcd2=https://192.168.1.2:2380,etcd3=https://192.168.1.3:2380" + +# etcd 集群服务地址列表, **根据实际 etcd 集群成员设置** +ETCD_ENDPOINTS="https://192.168.1.1:2379,https://192.168.1.2:2379,https://192.168.1.3:2379" + +# 集群basic auth 使用的用户名和密码 +BASIC_AUTH_USER="admin" +BASIC_AUTH_PASS="test1234" + +# ---------附加参数-------------------- +#默认二进制文件目录 +bin_dir="/root/local/bin" + +#证书目录 +ca_dir="/etc/kubernetes/ssl" + +#部署目录,即 ansible 工作目录 +base_dir="/etc/ansible" + +#私有仓库 harbor服务器 (域名或者IP) +#需要把 harbor服务器证书复制到roles/harbor/files/harbor-ca.crt +HARBOR_SERVER="harbor.yourdomain.com" diff --git a/example/hosts.s-master.example b/example/hosts.s-master.example new file mode 100644 index 0000000..0056d1a --- /dev/null +++ b/example/hosts.s-master.example @@ -0,0 +1,78 @@ +# 部署节点:运行ansible 脚本的节点 +[deploy] +192.168.1.1 + +#etcd集群请提供如下NODE_NAME、NODE_IP变量 +[etcd] +192.168.1.1 NODE_NAME=etcd1 NODE_IP="192.168.1.1" +192.168.1.2 NODE_NAME=etcd2 NODE_IP="192.168.1.2" +192.168.1.3 NODE_NAME=etcd3 NODE_IP="192.168.1.3" + +[kube-master] +192.168.1.1 + +#确保node节点有变量NODE_ID=node1 +[kube-node] +192.168.1.1 NODE_ID=node1 NODE_IP="192.168.1.1" +192.168.1.2 NODE_ID=node2 NODE_IP="192.168.1.2" +192.168.1.3 NODE_ID=node3 NODE_IP="192.168.1.3" + +[kube-cluster:children] +kube-node +kube-master + +[kube-cluster:vars] +# ---------集群主要参数--------------- +#集群 MASTER IP +MASTER_IP="192.168.1.1" + +#集群 APISERVER +KUBE_APISERVER="https://192.168.1.1:6443" + +#TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 +BOOTSTRAP_TOKEN="d18f94b5fa585c7123f56803d925d2e7" + +# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达 +SERVICE_CIDR="10.68.0.0/16" + +# POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达 (flanneld 保证) +CLUSTER_CIDR="172.20.0.0/16" + +# 服务端口范围 (NodePort Range) +NODE_PORT_RANGE="2000-8000" + +# flanneld 网络配置前缀 +FLANNEL_ETCD_PREFIX="/kubernetes/network" + +# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP) +CLUSTER_KUBERNETES_SVC_IP="10.68.0.1" + +# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配) +CLUSTER_DNS_SVC_IP="10.68.0.2" + +# 集群 DNS 域名 +CLUSTER_DNS_DOMAIN="cluster.local." + +# etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置** +ETCD_NODES="etcd1=https://192.168.1.1:2380,etcd2=https://192.168.1.2:2380,etcd3=https://192.168.1.3:2380" + +# etcd 集群服务地址列表, **根据实际 etcd 集群成员设置** +ETCD_ENDPOINTS="https://192.168.1.1:2379,https://192.168.1.2:2379,https://192.168.1.3:2379" + +# 集群basic auth 使用的用户名和密码 +BASIC_AUTH_USER="admin" +BASIC_AUTH_PASS="test1234" + +# ---------附加参数-------------------- +#默认二进制文件目录 +bin_dir="/root/local/bin" + +#证书目录 +ca_dir="/etc/kubernetes/ssl" + +#部署目录,即 ansible 工作目录 +base_dir="/etc/ansible" + +#私有仓库 harbor服务器 (域名或者IP) +#需要把 harbor服务器证书复制到roles/harbor/files/harbor-ca.crt +HARBOR_SERVER="harbor.yourdomain.com" diff --git a/roles/ca/tasks/main.yml b/roles/ca/tasks/main.yml new file mode 100644 index 0000000..681e40a --- /dev/null +++ b/roles/ca/tasks/main.yml @@ -0,0 +1,28 @@ +- name: prepare some dirs + file: name={{ item }} state=directory + with_items: + - "{{ bin_dir }}" + - "{{ ca_dir }}" + +- name: 下载证书工具 CFSSL + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - cfssl + - cfssl-certinfo + - cfssljson + +- name: 准备CA配置文件 + template: src=ca-config.json.j2 dest={{ ca_dir }}/ca-config.json + +- name: 准备CA签名请求 + template: src=ca-csr.json.j2 dest={{ ca_dir }}/ca-csr.json + +- name: 生成 CA 证书和私钥 + shell: "cd {{ ca_dir }} && {{ bin_dir }}/cfssl gencert -initca ca-csr.json | {{ bin_dir }}/cfssljson -bare ca" + +- name: 准备分发 CA证书 + shell: "cd {{ ca_dir }} && cp ca* {{ base_dir }}/roles/prepare/files/" + +- name: 复制 CA证书生成calico secret 使用 + shell: "cp -f {{ ca_dir }}/ca.pem {{ base_dir }}/roles/calico/files/" + diff --git a/roles/ca/templates/ca-config.json.j2 b/roles/ca/templates/ca-config.json.j2 new file mode 100644 index 0000000..9f84cd3 --- /dev/null +++ b/roles/ca/templates/ca-config.json.j2 @@ -0,0 +1,18 @@ +{ + "signing": { + "default": { + "expiry": "87600h" + }, + "profiles": { + "kubernetes": { + "usages": [ + "signing", + "key encipherment", + "server auth", + "client auth" + ], + "expiry": "87600h" + } + } + } +} diff --git a/roles/ca/templates/ca-csr.json.j2 b/roles/ca/templates/ca-csr.json.j2 new file mode 100644 index 0000000..d603ae5 --- /dev/null +++ b/roles/ca/templates/ca-csr.json.j2 @@ -0,0 +1,16 @@ +{ + "CN": "kubernetes", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "HangZhou", + "L": "XS", + "O": "k8s", + "OU": "System" + } + ] +} diff --git a/roles/calico/files/rbac.yaml b/roles/calico/files/rbac.yaml new file mode 100644 index 0000000..3cbee3a --- /dev/null +++ b/roles/calico/files/rbac.yaml @@ -0,0 +1,64 @@ +# Calico Version v2.6.2 +# https://docs.projectcalico.org/v2.6/releases#v2.6.2 + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: calico-kube-controllers + namespace: kube-system +rules: + - apiGroups: + - "" + - extensions + resources: + - pods + - namespaces + - networkpolicies + verbs: + - watch + - list +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: calico-kube-controllers +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: calico-kube-controllers +subjects: +- kind: ServiceAccount + name: calico-kube-controllers + namespace: kube-system + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: calico-node + namespace: kube-system +rules: + - apiGroups: [""] + resources: + - pods + - nodes + verbs: + - get + +--- + +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: calico-node +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: calico-node +subjects: +- kind: ServiceAccount + name: calico-node + namespace: kube-system diff --git a/roles/calico/tasks/main.yml b/roles/calico/tasks/main.yml new file mode 100644 index 0000000..134fdad --- /dev/null +++ b/roles/calico/tasks/main.yml @@ -0,0 +1,34 @@ +- name: 创建calico证书目录 + file: name=/etc/calico/ssl state=directory + +- name: 复制CA 证书和etcd 证书 + copy: src={{ item }} dest=/etc/calico/ssl/{{ item }} + with_items: + - ca.pem + - etcd.pem + - etcd-key.pem + +- name: 创建 calico 的 systemd unit 文件 + template: src=calico-node.service.j2 dest=/etc/systemd/system/calico-node.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-calico + shell: systemctl enable calico-node + +- name: 重新启动calico + shell: systemctl restart calico-node + +- name: 下载calico cni plugins + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - calico + - calico-ipam + - loopback + +- name: 创建cni config 目录 + file: name=/etc/cni/net.d state=directory + +- name: 准备 cni配置文件 + template: src=cni-calico.conf.j2 dest=/etc/cni/net.d/10-calico.conf diff --git a/roles/calico/templates/calico-node.service.j2 b/roles/calico/templates/calico-node.service.j2 new file mode 100644 index 0000000..7c65df6 --- /dev/null +++ b/roles/calico/templates/calico-node.service.j2 @@ -0,0 +1,37 @@ +[Unit] +Description=calico node +After=docker.service +Requires=docker.service + +[Service] +User=root +PermissionsStartOnly=true +ExecStart={{ bin_dir }}/docker run --net=host --privileged --name=calico-node \ + -e ETCD_ENDPOINTS={{ ETCD_ENDPOINTS }} \ + -e ETCD_CA_CERT_FILE=/etc/calico/ssl/ca.pem \ + -e ETCD_CERT_FILE=/etc/calico/ssl//etcd.pem \ + -e ETCD_KEY_FILE=/etc/calico/ssl/etcd-key.pem \ + -e CALICO_LIBNETWORK_ENABLED=true \ + -e CALICO_NETWORKING_BACKEND=bird \ + -e CALICO_DISABLE_FILE_LOGGING=true \ + -e CALICO_IPV4POOL_CIDR={{ CLUSTER_CIDR }} \ + -e CALICO_IPV4POOL_IPIP=always \ + -e FELIX_DEFAULTENDPOINTTOHOSTACTION=ACCEPT \ + -e FELIX_IPV6SUPPORT=false \ + -e FELIX_LOGSEVERITYSCREEN=info \ + -e FELIX_IPINIPMTU=1440 \ + -e FELIX_HEALTHENABLED=true \ + -e IP= \ + -v /etc/calico/ssl:/etc/calico/ssl \ + -v /var/run/calico:/var/run/calico \ + -v /lib/modules:/lib/modules \ + -v /run/docker/plugins:/run/docker/plugins \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/log/calico:/var/log/calico \ + calico/node:v2.6.2 +ExecStop={{ bin_dir }}/docker rm -f calico-node +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/roles/calico/templates/calico.yaml b/roles/calico/templates/calico.yaml new file mode 100644 index 0000000..ec9db95 --- /dev/null +++ b/roles/calico/templates/calico.yaml @@ -0,0 +1,358 @@ +# Calico Version v2.6.2 +# https://docs.projectcalico.org/v2.6/releases#v2.6.2 +# This manifest includes the following component versions: +# calico/node:v2.6.2 +# calico/cni:v1.11.0 +# calico/kube-controllers:v1.0.0 + +# This ConfigMap is used to configure a self-hosted Calico installation. +kind: ConfigMap +apiVersion: v1 +metadata: + name: calico-config + namespace: kube-system +data: + # Configure this with the location of your etcd cluster. + etcd_endpoints: "http://127.0.0.1:2379" + + # Configure the Calico backend to use. + calico_backend: "bird" + + # The CNI network configuration to install on each node. + cni_network_config: |- + { + "name": "k8s-pod-network", + "cniVersion": "0.1.0", + "type": "calico", + "etcd_endpoints": "__ETCD_ENDPOINTS__", + "etcd_key_file": "__ETCD_KEY_FILE__", + "etcd_cert_file": "__ETCD_CERT_FILE__", + "etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__", + "log_level": "info", + "mtu": 1500, + "ipam": { + "type": "calico-ipam" + }, + "policy": { + "type": "k8s", + "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", + "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" + }, + "kubernetes": { + "kubeconfig": "__KUBECONFIG_FILEPATH__" + } + } + + # If you're using TLS enabled etcd uncomment the following. + # You must also populate the Secret below with these files. + etcd_ca: "" # "/calico-secrets/etcd-ca" + etcd_cert: "" # "/calico-secrets/etcd-cert" + etcd_key: "" # "/calico-secrets/etcd-key" + +--- + +# The following contains k8s Secrets for use with a TLS enabled etcd cluster. +# For information on populating Secrets, see http://kubernetes.io/docs/user-guide/secrets/ +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: calico-etcd-secrets + namespace: kube-system +data: + # Populate the following files with etcd TLS configuration if desired, but leave blank if + # not using TLS for etcd. + # This self-hosted install expects three files with the following names. The values + # should be base64 encoded strings of the entire contents of each file. + # etcd-key: null + # etcd-cert: null + # etcd-ca: null + +--- + +# This manifest installs the calico/node container, as well +# as the Calico CNI plugins and network config on +# each master and worker node in a Kubernetes cluster. +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: calico-node + namespace: kube-system + labels: + k8s-app: calico-node +spec: + selector: + matchLabels: + k8s-app: calico-node + template: + metadata: + labels: + k8s-app: calico-node + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, + {"key":"CriticalAddonsOnly", "operator":"Exists"}] + spec: + hostNetwork: true + serviceAccountName: calico-node + # Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force + # deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods. + terminationGracePeriodSeconds: 0 + containers: + # Runs calico/node container on each Kubernetes node. This + # container programs network policy and routes on each + # host. + - name: calico-node + image: quay.io/calico/node:v2.6.2 + env: + # The location of the Calico etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_endpoints + # Choose the backend to use. + - name: CALICO_NETWORKING_BACKEND + valueFrom: + configMapKeyRef: + name: calico-config + key: calico_backend + # Cluster type to identify the deployment type + - name: CLUSTER_TYPE + value: "k8s,bgp" + # Disable file logging so `kubectl logs` works. + - name: CALICO_DISABLE_FILE_LOGGING + value: "true" + # Set Felix endpoint to host default action to ACCEPT. + - name: FELIX_DEFAULTENDPOINTTOHOSTACTION + value: "ACCEPT" + # Configure the IP Pool from which Pod IPs will be chosen. + - name: CALICO_IPV4POOL_CIDR + value: "192.168.0.0/16" + - name: CALICO_IPV4POOL_IPIP + value: "always" + # Disable IPv6 on Kubernetes. + - name: FELIX_IPV6SUPPORT + value: "false" + # Set Felix logging to "info" + - name: FELIX_LOGSEVERITYSCREEN + value: "info" + # Set MTU for tunnel device used if ipip is enabled + - name: FELIX_IPINIPMTU + value: "1440" + # Location of the CA certificate for etcd. + - name: ETCD_CA_CERT_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_ca + # Location of the client key for etcd. + - name: ETCD_KEY_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_key + # Location of the client certificate for etcd. + - name: ETCD_CERT_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_cert + # Auto-detect the BGP IP address. + - name: IP + value: "" + - name: FELIX_HEALTHENABLED + value: "true" + securityContext: + privileged: true + resources: + requests: + cpu: 250m + livenessProbe: + httpGet: + path: /liveness + port: 9099 + periodSeconds: 10 + initialDelaySeconds: 10 + failureThreshold: 6 + readinessProbe: + httpGet: + path: /readiness + port: 9099 + periodSeconds: 10 + volumeMounts: + - mountPath: /lib/modules + name: lib-modules + readOnly: true + - mountPath: /var/run/calico + name: var-run-calico + readOnly: false + - mountPath: /calico-secrets + name: etcd-certs + # This container installs the Calico CNI binaries + # and CNI network config file on each node. + - name: install-cni + image: quay.io/calico/cni:v1.11.0 + command: ["/install-cni.sh"] + env: + # The location of the Calico etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_endpoints + # The CNI network config to install on each node. + - name: CNI_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: calico-config + key: cni_network_config + volumeMounts: + - mountPath: /host/opt/cni/bin + name: cni-bin-dir + - mountPath: /host/etc/cni/net.d + name: cni-net-dir + - mountPath: /calico-secrets + name: etcd-certs + volumes: + # Used by calico/node. + - name: lib-modules + hostPath: + path: /lib/modules + - name: var-run-calico + hostPath: + path: /var/run/calico + # Used to install CNI. + - name: cni-bin-dir + hostPath: + path: /opt/cni/bin + - name: cni-net-dir + hostPath: + path: /etc/cni/net.d + # Mount in the etcd TLS secrets. + - name: etcd-certs + secret: + secretName: calico-etcd-secrets + +--- + +# This manifest deploys the Calico Kubernetes controllers. +# See https://github.com/projectcalico/kube-controllers +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: calico-kube-controllers + namespace: kube-system + labels: + k8s-app: calico-kube-controllers + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: | + [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, + {"key":"CriticalAddonsOnly", "operator":"Exists"}] +spec: + # The controllers can only have a single active instance. + replicas: 1 + strategy: + type: Recreate + template: + metadata: + name: calico-kube-controllers + namespace: kube-system + labels: + k8s-app: calico-kube-controllers + spec: + # The controllers must run in the host network namespace so that + # it isn't governed by policy that would prevent it from working. + hostNetwork: true + serviceAccountName: calico-kube-controllers + containers: + - name: calico-kube-controllers + image: quay.io/calico/kube-controllers:v1.0.0 + env: + # The location of the Calico etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_endpoints + # Location of the CA certificate for etcd. + - name: ETCD_CA_CERT_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_ca + # Location of the client key for etcd. + - name: ETCD_KEY_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_key + # Location of the client certificate for etcd. + - name: ETCD_CERT_FILE + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_cert + volumeMounts: + # Mount in the etcd TLS secrets. + - mountPath: /calico-secrets + name: etcd-certs + volumes: + # Mount in the etcd TLS secrets. + - name: etcd-certs + secret: + secretName: calico-etcd-secrets + +--- + +# This deployment turns off the old "policy-controller". It should remain at 0 replicas, and then +# be removed entirely once the new kube-controllers deployment has been deployed above. +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: calico-policy-controller + namespace: kube-system + labels: + k8s-app: calico-policy +spec: + # Turn this deployment off in favor of the kube-controllers deployment above. + replicas: 0 + strategy: + type: Recreate + template: + metadata: + name: calico-policy-controller + namespace: kube-system + labels: + k8s-app: calico-policy + spec: + hostNetwork: true + serviceAccountName: calico-kube-controllers + containers: + - name: calico-policy-controller + image: quay.io/calico/kube-controllers:v1.0.0 + env: + # The location of the Calico etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: calico-config + key: etcd_endpoints + +--- + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: calico-kube-controllers + namespace: kube-system + +--- + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: calico-node + namespace: kube-system diff --git a/roles/calico/templates/cni-calico.conf.j2 b/roles/calico/templates/cni-calico.conf.j2 new file mode 100644 index 0000000..1287320 --- /dev/null +++ b/roles/calico/templates/cni-calico.conf.j2 @@ -0,0 +1,22 @@ +{ + "name": "calico-k8s-network", + "cniVersion": "0.1.0", + "type": "calico", + "etcd_endpoints": "{{ ETCD_ENDPOINTS }}", + "etcd_key_file": "/etc/calico/ssl/etcd-key.pem", + "etcd_cert_file": "/etc/calico/ssl//etcd.pem", + "etcd_ca_cert_file": "/etc/calico/ssl/ca.pem", + "log_level": "info", + "mtu": 1500, + "ipam": { + "type": "calico-ipam" + }, + "policy": { + "type": "k8s", + "k8s_api_root": "{{ KUBE_APISERVER }}", + "k8s_auth_token": "{{ BOOTSTRAP_TOKEN }}" + }, + "kubernetes": { + "kubeconfig": "/root/.kube/config" + } +} diff --git a/roles/docker/files/daemon.json b/roles/docker/files/daemon.json new file mode 100644 index 0000000..5e66623 --- /dev/null +++ b/roles/docker/files/daemon.json @@ -0,0 +1,3 @@ +{ + "registry-mirrors": ["https://registry.docker-cn.com"] +} diff --git a/roles/docker/files/docker b/roles/docker/files/docker new file mode 100644 index 0000000..78715d1 --- /dev/null +++ b/roles/docker/files/docker @@ -0,0 +1,4512 @@ +#!/usr/bin/env bash +# +# bash completion file for core docker commands +# +# This script provides completion of: +# - commands and their options +# - container ids and names +# - image repos and tags +# - filepaths +# +# To enable the completions either: +# - place this file in /etc/bash_completion.d +# or +# - copy this file to e.g. ~/.docker-completion.sh and add the line +# below to your .bashrc after bash completion features are loaded +# . ~/.docker-completion.sh +# +# Configuration: +# +# For several commands, the amount of completions can be configured by +# setting environment variables. +# +# DOCKER_COMPLETION_SHOW_CONTAINER_IDS +# DOCKER_COMPLETION_SHOW_NETWORK_IDS +# DOCKER_COMPLETION_SHOW_NODE_IDS +# DOCKER_COMPLETION_SHOW_PLUGIN_IDS +# DOCKER_COMPLETION_SHOW_SECRET_IDS +# DOCKER_COMPLETION_SHOW_SERVICE_IDS +# "no" - Show names only (default) +# "yes" - Show names and ids +# +# You can tailor completion for the "events", "history", "inspect", "run", +# "rmi" and "save" commands by settings the following environment +# variables: +# +# DOCKER_COMPLETION_SHOW_IMAGE_IDS +# "none" - Show names only (default) +# "non-intermediate" - Show names and ids, but omit intermediate image IDs +# "all" - Show names and ids, including intermediate image IDs +# +# DOCKER_COMPLETION_SHOW_TAGS +# "yes" - include tags in completion options (default) +# "no" - don't include tags in completion options + +# +# Note: +# Currently, the completions will not work if the docker daemon is not +# bound to the default communication port/socket +# If the docker daemon is using a unix socket for communication your user +# must have access to the socket for the completions to function correctly +# +# Note for developers: +# Please arrange options sorted alphabetically by long name with the short +# options immediately following their corresponding long form. +# This order should be applied to lists, alternatives and code blocks. + +__docker_previous_extglob_setting=$(shopt -p extglob) +shopt -s extglob + +__docker_q() { + docker ${host:+-H "$host"} ${config:+--config "$config"} 2>/dev/null "$@" +} + +# __docker_containers returns a list of containers. Additional options to +# `docker ps` may be specified in order to filter the list, e.g. +# `__docker_containers --filter status=running` +# By default, only names are returned. +# Set DOCKER_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs. +# An optional first option `--id|--name` may be used to limit the +# output to the IDs or names of matching items. This setting takes +# precedence over the environment setting. +__docker_containers() { + local format + if [ "$1" = "--id" ] ; then + format='{{.ID}}' + shift + elif [ "$1" = "--name" ] ; then + format='{{.Names}}' + shift + elif [ "${DOCKER_COMPLETION_SHOW_CONTAINER_IDS}" = yes ] ; then + format='{{.ID}} {{.Names}}' + else + format='{{.Names}}' + fi + __docker_q ps --format "$format" "$@" +} + +# __docker_complete_containers applies completion of containers based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_containers`. +__docker_complete_containers() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_containers "$@")" -- "$current") ) +} + +__docker_complete_containers_all() { + __docker_complete_containers "$@" --all +} + +__docker_complete_containers_running() { + __docker_complete_containers "$@" --filter status=running +} + +__docker_complete_containers_stopped() { + __docker_complete_containers "$@" --filter status=exited +} + +__docker_complete_containers_unpauseable() { + __docker_complete_containers "$@" --filter status=paused +} + +__docker_complete_container_names() { + local containers=( $(__docker_q ps -aq --no-trunc) ) + local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") ) + names=( "${names[@]#/}" ) # trim off the leading "/" from the container names + COMPREPLY=( $(compgen -W "${names[*]}" -- "$cur") ) +} + +__docker_complete_container_ids() { + local containers=( $(__docker_q ps -aq) ) + COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") ) +} + +__docker_images() { + local images_args="" + + case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in + all) + images_args="--no-trunc -a" + ;; + non-intermediate) + images_args="--no-trunc" + ;; + esac + + local repo_print_command + if [ "${DOCKER_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then + repo_print_command='print $1; print $1":"$2' + else + repo_print_command='print $1' + fi + + local awk_script + case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in + all|non-intermediate) + awk_script='NR>1 { print $3; if ($1 != "") { '"$repo_print_command"' } }' + ;; + none|*) + awk_script='NR>1 && $1 != "" { '"$repo_print_command"' }' + ;; + esac + + __docker_q images $images_args | awk "$awk_script" | grep -v '$' +} + +__docker_complete_images() { + COMPREPLY=( $(compgen -W "$(__docker_images)" -- "$cur") ) + __ltrim_colon_completions "$cur" +} + +__docker_complete_image_repos() { + local repos="$(__docker_q images | awk 'NR>1 && $1 != "" { print $1 }')" + COMPREPLY=( $(compgen -W "$repos" -- "$cur") ) +} + +__docker_complete_image_repos_and_tags() { + local reposAndTags="$(__docker_q images | awk 'NR>1 && $1 != "" { print $1; print $1":"$2 }')" + COMPREPLY=( $(compgen -W "$reposAndTags" -- "$cur") ) + __ltrim_colon_completions "$cur" +} + +# __docker_networks returns a list of all networks. Additional options to +# `docker network ls` may be specified in order to filter the list, e.g. +# `__docker_networks --filter type=custom` +# By default, only names are returned. +# Set DOCKER_COMPLETION_SHOW_NETWORK_IDS=yes to also complete IDs. +# An optional first option `--id|--name` may be used to limit the +# output to the IDs or names of matching items. This setting takes +# precedence over the environment setting. +__docker_networks() { + local format + if [ "$1" = "--id" ] ; then + format='{{.ID}}' + shift + elif [ "$1" = "--name" ] ; then + format='{{.Name}}' + shift + elif [ "${DOCKER_COMPLETION_SHOW_NETWORK_IDS}" = yes ] ; then + format='{{.ID}} {{.Name}}' + else + format='{{.Name}}' + fi + __docker_q network ls --format "$format" "$@" +} + +# __docker_complete_networks applies completion of networks based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_networks`. +__docker_complete_networks() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_networks "$@")" -- "$current") ) +} + +__docker_complete_containers_in_network() { + local containers=$(__docker_q network inspect -f '{{range $i, $c := .Containers}}{{$i}} {{$c.Name}} {{end}}' "$1") + COMPREPLY=( $(compgen -W "$containers" -- "$cur") ) +} + +# __docker_volumes returns a list of all volumes. Additional options to +# `docker volume ls` may be specified in order to filter the list, e.g. +# `__docker_volumes --filter dangling=true` +# Because volumes do not have IDs, this function does not distinguish between +# IDs and names. +__docker_volumes() { + __docker_q volume ls -q "$@" +} + +# __docker_complete_volumes applies completion of volumes based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_volumes`. +__docker_complete_volumes() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_volumes "$@")" -- "$current") ) +} + +# __docker_plugins_bundled returns a list of all plugins of a given type. +# The type has to be specified with the mandatory option `--type`. +# Valid types are: Network, Volume, Authorization. +# Completions may be added or removed with `--add` and `--remove` +# This function only deals with plugins that come bundled with Docker. +# For plugins managed by `docker plugin`, see `__docker_plugins_installed`. +__docker_plugins_bundled() { + local type add=() remove=() + while true ; do + case "$1" in + --type) + type="$2" + shift 2 + ;; + --add) + add+=("$2") + shift 2 + ;; + --remove) + remove+=("$2") + shift 2 + ;; + *) + break + ;; + esac + done + + local plugins=($(__docker_q info --format "{{range \$i, \$p := .Plugins.$type}}{{.}} {{end}}")) + for del in "${remove[@]}" ; do + plugins=(${plugins[@]/$del/}) + done + echo "${plugins[@]} ${add[@]}" +} + +# __docker_complete_plugins_bundled applies completion of plugins based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# The plugin type has to be specified with the next option `--type`. +# This function only deals with plugins that come bundled with Docker. +# For completion of plugins managed by `docker plugin`, see +# `__docker_complete_plugins_installed`. +__docker_complete_plugins_bundled() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_plugins_bundled "$@")" -- "$current") ) +} + +# __docker_plugins_installed returns a list of all plugins that were installed with +# the Docker plugin API. +# By default, only names are returned. +# Set DOCKER_COMPLETION_SHOW_PLUGIN_IDS=yes to also complete IDs. +# Additional options to `docker plugin ls` may be specified in order to filter the list, +# e.g. `__docker_plugins_installed --filter enabled=true` +# For built-in pugins, see `__docker_plugins_bundled`. +__docker_plugins_installed() { + local format + if [ "$DOCKER_COMPLETION_SHOW_PLUGIN_IDS" = yes ] ; then + format='{{.ID}} {{.Name}}' + else + format='{{.Name}}' + fi + __docker_q plugin ls --format "$format" "$@" +} + +# __docker_complete_plugins_installed applies completion of plugins that were installed +# with the Docker plugin API, based on the current value of `$cur` or the value of +# the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_plugins_installed`. +# For completion of built-in pugins, see `__docker_complete_plugins_bundled`. +__docker_complete_plugins_installed() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_plugins_installed "$@")" -- "$current") ) +} + +__docker_runtimes() { + __docker_q info | sed -n 's/^Runtimes: \(.*\)/\1/p' +} + +__docker_complete_runtimes() { + COMPREPLY=( $(compgen -W "$(__docker_runtimes)" -- "$cur") ) +} + +# __docker_secrets returns a list of all secrets. +# By default, only names of secrets are returned. +# Set DOCKER_COMPLETION_SHOW_SECRET_IDS=yes to also complete IDs of secrets. +__docker_secrets() { + local fields='$2' # default: name only + [ "${DOCKER_COMPLETION_SHOW_SECRET_IDS}" = yes ] && fields='$1,$2' # ID and name + + __docker_q secret ls | awk "NR>1 {print $fields}" +} + +# __docker_complete_secrets applies completion of secrets based on the current value +# of `$cur`. +__docker_complete_secrets() { + COMPREPLY=( $(compgen -W "$(__docker_secrets)" -- "$cur") ) +} + +# __docker_stacks returns a list of all stacks. +__docker_stacks() { + __docker_q stack ls | awk 'NR>1 {print $1}' +} + +# __docker_complete_stacks applies completion of stacks based on the current value +# of `$cur` or the value of the optional first option `--cur`, if given. +__docker_complete_stacks() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_stacks "$@")" -- "$current") ) +} + +# __docker_nodes returns a list of all nodes. Additional options to +# `docker node ls` may be specified in order to filter the list, e.g. +# `__docker_nodes --filter role=manager` +# By default, only node names are returned. +# Set DOCKER_COMPLETION_SHOW_NODE_IDS=yes to also complete node IDs. +# An optional first option `--id|--name` may be used to limit the +# output to the IDs or names of matching items. This setting takes +# precedence over the environment setting. +# Completions may be added with `--add`, e.g. `--add self`. +__docker_nodes() { + local add=() + local fields='$2' # default: node name only + [ "${DOCKER_COMPLETION_SHOW_NODE_IDS}" = yes ] && fields='$1,$2' # ID and name + + while true ; do + case "$1" in + --id) + fields='$1' # IDs only + shift + ;; + --name) + fields='$2' # names only + shift + ;; + --add) + add+=("$2") + shift 2 + ;; + *) + break + ;; + esac + done + + echo $(__docker_q node ls "$@" | tr -d '*' | awk "NR>1 {print $fields}") "${add[@]}" +} + +# __docker_complete_nodes applies completion of nodes based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_nodes`. +__docker_complete_nodes() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_nodes "$@")" -- "$current") ) +} + +# __docker_services returns a list of all services. Additional options to +# `docker service ls` may be specified in order to filter the list, e.g. +# `__docker_services --filter name=xxx` +# By default, only node names are returned. +# Set DOCKER_COMPLETION_SHOW_SERVICE_IDS=yes to also complete IDs. +# An optional first option `--id|--name` may be used to limit the +# output to the IDs or names of matching items. This setting takes +# precedence over the environment setting. +__docker_services() { + local fields='$2' # default: service name only + [ "${DOCKER_COMPLETION_SHOW_SERVICE_IDS}" = yes ] && fields='$1,$2' # ID & name + + if [ "$1" = "--id" ] ; then + fields='$1' # IDs only + shift + elif [ "$1" = "--name" ] ; then + fields='$2' # names only + shift + fi + __docker_q service ls "$@" | awk "NR>1 {print $fields}" +} + +# __docker_complete_services applies completion of services based on the current +# value of `$cur` or the value of the optional first option `--cur`, if given. +# Additional filters may be appended, see `__docker_services`. +__docker_complete_services() { + local current="$cur" + if [ "$1" = "--cur" ] ; then + current="$2" + shift 2 + fi + COMPREPLY=( $(compgen -W "$(__docker_services "$@")" -- "$current") ) +} + +# __docker_append_to_completions appends the word passed as an argument to every +# word in `$COMPREPLY`. +# Normally you do this with `compgen -S` while generating the completions. +# This function allows you to append a suffix later. It allows you to use +# the __docker_complete_XXX functions in cases where you need a suffix. +__docker_append_to_completions() { + COMPREPLY=( ${COMPREPLY[@]/%/"$1"} ) +} + +# __docker_daemon_is_experimental tests whether the currently configured Docker +# daemon runs in experimental mode. If so, the function exits with 0 (true). +# Otherwise, or if the result cannot be determined, the exit value is 1 (false). +__docker_daemon_is_experimental() { + [ "$(__docker_q version -f '{{.Server.Experimental}}')" = "true" ] +} + +# __docker_daemon_os_is tests whether the currently configured Docker daemon runs +# on the operating system passed in as the first argument. +# It does so by querying the daemon for its OS. The result is cached for the duration +# of one invocation of bash completion so that this function can be used to test for +# several different operating systems without additional costs. +# Known operating systems: linux, windows. +__docker_daemon_os_is() { + local expected_os="$1" + local actual_os=${daemon_os=$(__docker_q version -f '{{.Server.Os}}')} + [ "$actual_os" = "$expected_os" ] +} + +# __docker_pos_first_nonflag finds the position of the first word that is neither +# option nor an option's argument. If there are options that require arguments, +# you should pass a glob describing those options, e.g. "--option1|-o|--option2" +# Use this function to restrict completions to exact positions after the argument list. +__docker_pos_first_nonflag() { + local argument_flags=$1 + + local counter=$((${subcommand_pos:-${command_pos}} + 1)) + while [ $counter -le $cword ]; do + if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then + (( counter++ )) + # eat "=" in case of --option=arg syntax + [ "${words[$counter]}" = "=" ] && (( counter++ )) + else + case "${words[$counter]}" in + -*) + ;; + *) + break + ;; + esac + fi + + # Bash splits words at "=", retaining "=" as a word, examples: + # "--debug=false" => 3 words, "--log-opt syslog-facility=daemon" => 4 words + while [ "${words[$counter + 1]}" = "=" ] ; do + counter=$(( counter + 2)) + done + + (( counter++ )) + done + + echo $counter +} + +# __docker_map_key_of_current_option returns `key` if we are currently completing the +# value of a map option (`key=value`) which matches the extglob given as an argument. +# This function is needed for key-specific completions. +__docker_map_key_of_current_option() { + local glob="$1" + + local key glob_pos + if [ "$cur" = "=" ] ; then # key= case + key="$prev" + glob_pos=$((cword - 2)) + elif [[ $cur == *=* ]] ; then # key=value case (OSX) + key=${cur%=*} + glob_pos=$((cword - 1)) + elif [ "$prev" = "=" ] ; then + key=${words[$cword - 2]} # key=value case + glob_pos=$((cword - 3)) + else + return + fi + + [ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax + + [[ ${words[$glob_pos]} == @($glob) ]] && echo "$key" +} + +# __docker_value_of_option returns the value of the first option matching `option_glob`. +# Valid values for `option_glob` are option names like `--log-level` and globs like +# `--log-level|-l` +# Only positions between the command and the current word are considered. +__docker_value_of_option() { + local option_extglob=$(__docker_to_extglob "$1") + + local counter=$((command_pos + 1)) + while [ $counter -lt $cword ]; do + case ${words[$counter]} in + $option_extglob ) + echo ${words[$counter + 1]} + break + ;; + esac + (( counter++ )) + done +} + +# __docker_to_alternatives transforms a multiline list of strings into a single line +# string with the words separated by `|`. +# This is used to prepare arguments to __docker_pos_first_nonflag(). +__docker_to_alternatives() { + local parts=( $1 ) + local IFS='|' + echo "${parts[*]}" +} + +# __docker_to_extglob transforms a multiline list of options into an extglob pattern +# suitable for use in case statements. +__docker_to_extglob() { + local extglob=$( __docker_to_alternatives "$1" ) + echo "@($extglob)" +} + +# __docker_subcommands processes subcommands +# Locates the first occurrence of any of the subcommands contained in the +# first argument. In case of a match, calls the corresponding completion +# function and returns 0. +# If no match is found, 1 is returned. The calling function can then +# continue processing its completion. +# +# TODO if the preceding command has options that accept arguments and an +# argument is equal ot one of the subcommands, this is falsely detected as +# a match. +__docker_subcommands() { + local subcommands="$1" + + local counter=$(($command_pos + 1)) + while [ $counter -lt $cword ]; do + case "${words[$counter]}" in + $(__docker_to_extglob "$subcommands") ) + subcommand_pos=$counter + local subcommand=${words[$counter]} + local completions_func=_docker_${command}_${subcommand//-/_} + declare -F $completions_func >/dev/null && $completions_func + return 0 + ;; + esac + (( counter++ )) + done + return 1 +} + +# __docker_nospace suppresses trailing whitespace +__docker_nospace() { + # compopt is not available in ancient bash versions + type compopt &>/dev/null && compopt -o nospace +} + +__docker_complete_resolved_hostname() { + command -v host >/dev/null 2>&1 || return + COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') ) +} + +__docker_local_interfaces() { + command -v ip >/dev/null 2>&1 || return + ip addr show scope global 2>/dev/null | sed -n 's| \+inet \([0-9.]\+\).* \([^ ]\+\)|\1 \2|p' +} + +__docker_complete_local_interfaces() { + local additional_interface + if [ "$1" = "--add" ] ; then + additional_interface="$2" + fi + + COMPREPLY=( $( compgen -W "$(__docker_local_interfaces) $additional_interface" -- "$cur" ) ) +} + +# __docker_complete_capabilities_addable completes Linux capabilities which are +# not granted by default and may be added. +# see https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities +__docker_complete_capabilities_addable() { + COMPREPLY=( $( compgen -W " + ALL + AUDIT_CONTROL + BLOCK_SUSPEND + DAC_READ_SEARCH + IPC_LOCK + IPC_OWNER + LEASE + LINUX_IMMUTABLE + MAC_ADMIN + MAC_OVERRIDE + NET_ADMIN + NET_BROADCAST + SYS_ADMIN + SYS_BOOT + SYSLOG + SYS_MODULE + SYS_NICE + SYS_PACCT + SYS_PTRACE + SYS_RAWIO + SYS_RESOURCE + SYS_TIME + SYS_TTY_CONFIG + WAKE_ALARM + " -- "$cur" ) ) +} + +# __docker_complete_capabilities_droppable completes Linux capability options which are +# allowed by default and can be dropped. +# see https://docs.docker.com/engine/reference/run/#/runtime-privilege-and-linux-capabilities +__docker_complete_capabilities_droppable() { + COMPREPLY=( $( compgen -W " + ALL + AUDIT_WRITE + CHOWN + DAC_OVERRIDE + FOWNER + FSETID + KILL + MKNOD + NET_BIND_SERVICE + NET_RAW + SETFCAP + SETGID + SETPCAP + SETUID + SYS_CHROOT + " -- "$cur" ) ) +} + +__docker_complete_detach_keys() { + case "$prev" in + --detach-keys) + case "$cur" in + *,) + COMPREPLY=( $( compgen -W "${cur}ctrl-" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "ctrl-" -- "$cur" ) ) + ;; + esac + + __docker_nospace + return + ;; + esac + return 1 +} + +__docker_complete_isolation() { + COMPREPLY=( $( compgen -W "default hyperv process" -- "$cur" ) ) +} + +__docker_complete_log_drivers() { + COMPREPLY=( $( compgen -W " + awslogs + etwlogs + fluentd + gcplogs + gelf + journald + json-file + logentries + none + splunk + syslog + " -- "$cur" ) ) +} + +__docker_complete_log_options() { + # see repository docker/docker.github.io/engine/admin/logging/ + local common_options="max-buffer-size mode" + + local awslogs_options="$common_options awslogs-region awslogs-group awslogs-stream awslogs-create-group" + local fluentd_options="$common_options env fluentd-address fluentd-async-connect fluentd-buffer-limit fluentd-retry-wait fluentd-max-retries labels tag" + local gcplogs_options="$common_options env gcp-log-cmd gcp-project labels" + local gelf_options="$common_options env gelf-address gelf-compression-level gelf-compression-type labels tag" + local journald_options="$common_options env labels tag" + local json_file_options="$common_options env labels max-file max-size" + local logentries_options="$common_options logentries-token" + local syslog_options="$common_options env labels syslog-address syslog-facility syslog-format syslog-tls-ca-cert syslog-tls-cert syslog-tls-key syslog-tls-skip-verify tag" + local splunk_options="$common_options env labels splunk-caname splunk-capath splunk-format splunk-gzip splunk-gzip-level splunk-index splunk-insecureskipverify splunk-source splunk-sourcetype splunk-token splunk-url splunk-verify-connection tag" + + local all_options="$fluentd_options $gcplogs_options $gelf_options $journald_options $logentries_options $json_file_options $syslog_options $splunk_options" + + case $(__docker_value_of_option --log-driver) in + '') + COMPREPLY=( $( compgen -W "$all_options" -S = -- "$cur" ) ) + ;; + awslogs) + COMPREPLY=( $( compgen -W "$awslogs_options" -S = -- "$cur" ) ) + ;; + fluentd) + COMPREPLY=( $( compgen -W "$fluentd_options" -S = -- "$cur" ) ) + ;; + gcplogs) + COMPREPLY=( $( compgen -W "$gcplogs_options" -S = -- "$cur" ) ) + ;; + gelf) + COMPREPLY=( $( compgen -W "$gelf_options" -S = -- "$cur" ) ) + ;; + journald) + COMPREPLY=( $( compgen -W "$journald_options" -S = -- "$cur" ) ) + ;; + json-file) + COMPREPLY=( $( compgen -W "$json_file_options" -S = -- "$cur" ) ) + ;; + logentries) + COMPREPLY=( $( compgen -W "$logentries_options" -S = -- "$cur" ) ) + ;; + syslog) + COMPREPLY=( $( compgen -W "$syslog_options" -S = -- "$cur" ) ) + ;; + splunk) + COMPREPLY=( $( compgen -W "$splunk_options" -S = -- "$cur" ) ) + ;; + *) + return + ;; + esac + + __docker_nospace +} + +__docker_complete_log_driver_options() { + local key=$(__docker_map_key_of_current_option '--log-opt') + case "$key" in + fluentd-async-connect) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + gelf-address) + COMPREPLY=( $( compgen -W "udp" -S "://" -- "${cur##*=}" ) ) + __docker_nospace + return + ;; + gelf-compression-level) + COMPREPLY=( $( compgen -W "1 2 3 4 5 6 7 8 9" -- "${cur##*=}" ) ) + return + ;; + gelf-compression-type) + COMPREPLY=( $( compgen -W "gzip none zlib" -- "${cur##*=}" ) ) + return + ;; + mode) + COMPREPLY=( $( compgen -W "blocking non-blocking" -- "${cur##*=}" ) ) + return + ;; + syslog-address) + COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur##*=}" ) ) + __docker_nospace + __ltrim_colon_completions "${cur}" + return + ;; + syslog-facility) + COMPREPLY=( $( compgen -W " + auth + authpriv + cron + daemon + ftp + kern + local0 + local1 + local2 + local3 + local4 + local5 + local6 + local7 + lpr + mail + news + syslog + user + uucp + " -- "${cur##*=}" ) ) + return + ;; + syslog-format) + COMPREPLY=( $( compgen -W "rfc3164 rfc5424 rfc5424micro" -- "${cur##*=}" ) ) + return + ;; + syslog-tls-ca-cert|syslog-tls-cert|syslog-tls-key) + _filedir + return + ;; + syslog-tls-skip-verify) + COMPREPLY=( $( compgen -W "true" -- "${cur##*=}" ) ) + return + ;; + splunk-url) + COMPREPLY=( $( compgen -W "http:// https://" -- "${cur##*=}" ) ) + __docker_nospace + __ltrim_colon_completions "${cur}" + return + ;; + splunk-gzip|splunk-insecureskipverify|splunk-verify-connection) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + splunk-format) + COMPREPLY=( $( compgen -W "inline json raw" -- "${cur##*=}" ) ) + return + ;; + esac + return 1 +} + +__docker_complete_log_levels() { + COMPREPLY=( $( compgen -W "debug info warn error fatal" -- "$cur" ) ) +} + +__docker_complete_restart() { + case "$prev" in + --restart) + case "$cur" in + on-failure:*) + ;; + *) + COMPREPLY=( $( compgen -W "always no on-failure on-failure: unless-stopped" -- "$cur") ) + ;; + esac + return + ;; + esac + return 1 +} + +# __docker_complete_signals returns a subset of the available signals that is most likely +# relevant in the context of docker containers +__docker_complete_signals() { + local signals=( + SIGCONT + SIGHUP + SIGINT + SIGKILL + SIGQUIT + SIGSTOP + SIGTERM + SIGUSR1 + SIGUSR2 + ) + COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo $cur | tr '[:lower:]' '[:upper:]')" ) ) +} + +__docker_complete_user_group() { + if [[ $cur == *:* ]] ; then + COMPREPLY=( $(compgen -g -- "${cur#*:}") ) + else + COMPREPLY=( $(compgen -u -S : -- "$cur") ) + __docker_nospace + fi +} + +_docker_docker() { + # global options that may appear after the docker command + local boolean_options=" + $global_boolean_options + --help + --version -v + " + + case "$prev" in + --config) + _filedir -d + return + ;; + --log-level|-l) + __docker_complete_log_levels + return + ;; + $(__docker_to_extglob "$global_options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $global_options_with_args" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag "$(__docker_to_extglob "$global_options_with_args")" ) + if [ $cword -eq $counter ]; then + __docker_daemon_is_experimental && commands+=(${experimental_commands[*]}) + COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) + fi + ;; + esac +} + +_docker_attach() { + _docker_container_attach +} + +_docker_build() { + _docker_image_build +} + + +_docker_checkpoint() { + local subcommands=" + create + ls + rm + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_checkpoint_create() { + case "$prev" in + --checkpoint-dir) + _filedir -d + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--checkpoint-dir --help --leave-running" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') + if [ $cword -eq $counter ]; then + __docker_complete_containers_running + fi + ;; + esac +} + +_docker_checkpoint_ls() { + case "$prev" in + --checkpoint-dir) + _filedir -d + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--checkpoint-dir --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_checkpoint_rm() { + case "$prev" in + --checkpoint-dir) + _filedir -d + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--checkpoint-dir --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--checkpoint-dir') + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + elif [ $cword -eq $(($counter + 1)) ]; then + COMPREPLY=( $( compgen -W "$(__docker_q checkpoint ls "$prev" | sed 1d)" -- "$cur" ) ) + fi + ;; + esac +} + + +_docker_container() { + local subcommands=" + attach + commit + cp + create + diff + exec + export + inspect + kill + logs + ls + pause + port + prune + rename + restart + rm + run + start + stats + stop + top + unpause + update + wait + " + local aliases=" + list + ps + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_container_attach() { + __docker_complete_detach_keys && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--detach-keys --help --no-stdin --sig-proxy=false" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--detach-keys') + if [ $cword -eq $counter ]; then + __docker_complete_containers_running + fi + ;; + esac +} + +_docker_container_commit() { + case "$prev" in + --author|-a|--change|-c|--message|-m) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--author -a --change -c --help --message -m --pause=false -p=false" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--author|-a|--change|-c|--message|-m') + + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + return + fi + (( counter++ )) + + if [ $cword -eq $counter ]; then + __docker_complete_image_repos_and_tags + return + fi + ;; + esac +} + +_docker_container_cp() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--follow-link -L --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + case "$cur" in + *:) + return + ;; + *) + # combined container and filename completion + _filedir + local files=( ${COMPREPLY[@]} ) + + __docker_complete_containers_all + COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) + local containers=( ${COMPREPLY[@]} ) + + COMPREPLY=( $( compgen -W "${files[*]} ${containers[*]}" -- "$cur" ) ) + if [[ "$COMPREPLY" == *: ]]; then + __docker_nospace + fi + return + ;; + esac + fi + (( counter++ )) + + if [ $cword -eq $counter ]; then + if [ -e "$prev" ]; then + __docker_complete_containers_all + COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) + __docker_nospace + else + _filedir + fi + return + fi + ;; + esac +} + +_docker_container_create() { + _docker_container_run_and_create +} + +_docker_container_diff() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_container_exec() { + __docker_complete_detach_keys && return + + case "$prev" in + --env|-e) + # we do not append a "=" here because "-e VARNAME" is legal systax, too + COMPREPLY=( $( compgen -e -- "$cur" ) ) + __docker_nospace + return + ;; + --user|-u) + __docker_complete_user_group + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--detach -d --detach-keys --env -e --help --interactive -i --privileged -t --tty -u --user" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_running + ;; + esac +} + +_docker_container_export() { + case "$prev" in + --output|-o) + _filedir + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_container_inspect() { + _docker_inspect --type container +} + +_docker_container_kill() { + case "$prev" in + --signal|-s) + __docker_complete_signals + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --signal -s" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_running + ;; + esac +} + +_docker_container_logs() { + case "$prev" in + --since|--tail) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--details --follow -f --help --since --tail --timestamps -t" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--since|--tail') + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_container_list() { + _docker_container_ls +} + +_docker_container_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + ancestor) + cur="${cur##*=}" + __docker_complete_images + return + ;; + before) + __docker_complete_containers_all --cur "${cur##*=}" + return + ;; + expose|publish) + return + ;; + id) + __docker_complete_containers_all --cur "${cur##*=}" --id + return + ;; + health) + COMPREPLY=( $( compgen -W "healthy starting none unhealthy" -- "${cur##*=}" ) ) + return + ;; + is-task) + COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) ) + return + ;; + name) + __docker_complete_containers_all --cur "${cur##*=}" --name + return + ;; + network) + __docker_complete_networks --cur "${cur##*=}" + return + ;; + since) + __docker_complete_containers_all --cur "${cur##*=}" + return + ;; + status) + COMPREPLY=( $( compgen -W "created dead exited paused restarting running removing" -- "${cur##*=}" ) ) + return + ;; + volume) + __docker_complete_volumes --cur "${cur##*=}" + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "ancestor before exited expose health id is-task label name network publish since status volume" -- "$cur" ) ) + __docker_nospace + return + ;; + --format|--last|-n) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --filter -f --format --help --last -n --latest -l --no-trunc --quiet -q --size -s" -- "$cur" ) ) + ;; + esac +} + +_docker_container_pause() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_running + ;; + esac +} + +_docker_container_port() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_container_prune() { + case "$prev" in + --filter) + COMPREPLY=( $( compgen -W "until" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --filter --help" -- "$cur" ) ) + ;; + esac +} + +_docker_container_ps() { + _docker_container_ls +} + +_docker_container_rename() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_container_restart() { + case "$prev" in + --time|-t) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_all + ;; + esac +} + +_docker_container_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help --link -l --volumes -v" -- "$cur" ) ) + ;; + *) + for arg in "${COMP_WORDS[@]}"; do + case "$arg" in + --force|-f) + __docker_complete_containers_all + return + ;; + esac + done + __docker_complete_containers_stopped + ;; + esac +} + +_docker_container_run() { + _docker_container_run_and_create +} + +# _docker_container_run_and_create is the combined completion for `_docker_container_run` +# and `_docker_container_create` +_docker_container_run_and_create() { + local options_with_args=" + --add-host + --attach -a + --blkio-weight + --blkio-weight-device + --cap-add + --cap-drop + --cgroup-parent + --cidfile + --cpu-period + --cpu-quota + --cpu-rt-period + --cpu-rt-runtime + --cpuset-cpus + --cpus + --cpuset-mems + --cpu-shares -c + --device + --device-cgroup-rule + --device-read-bps + --device-read-iops + --device-write-bps + --device-write-iops + --dns + --dns-option + --dns-search + --entrypoint + --env -e + --env-file + --expose + --group-add + --hostname -h + --init-path + --ip + --ip6 + --ipc + --kernel-memory + --label-file + --label -l + --link + --link-local-ip + --log-driver + --log-opt + --mac-address + --memory -m + --memory-swap + --memory-swappiness + --memory-reservation + --name + --network + --network-alias + --oom-score-adj + --pid + --pids-limit + --publish -p + --restart + --runtime + --security-opt + --shm-size + --stop-signal + --stop-timeout + --storage-opt + --tmpfs + --sysctl + --ulimit + --user -u + --userns + --uts + --volume-driver + --volumes-from + --volume -v + --workdir -w + " + __docker_daemon_os_is windows && options_with_args+=" + --cpu-count + --cpu-percent + --credentialspec + --io-maxbandwidth + --io-maxiops + --isolation + " + + local boolean_options=" + --disable-content-trust=false + --help + --init + --interactive -i + --oom-kill-disable + --privileged + --publish-all -P + --read-only + --tty -t + " + + if [ "$command" = "run" -o "$subcommand" = "run" ] ; then + options_with_args="$options_with_args + --detach-keys + --health-cmd + --health-interval + --health-retries + --health-timeout + " + boolean_options="$boolean_options + --detach -d + --no-healthcheck + --rm + --sig-proxy=false + " + __docker_complete_detach_keys && return + fi + + local all_options="$options_with_args $boolean_options" + + + __docker_complete_log_driver_options && return + __docker_complete_restart && return + + local key=$(__docker_map_key_of_current_option '--security-opt') + case "$key" in + label) + [[ $cur == *: ]] && return + COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "${cur##*=}") ) + if [ "${COMPREPLY[*]}" != "disable" ] ; then + __docker_nospace + fi + return + ;; + seccomp) + local cur=${cur##*=} + _filedir + COMPREPLY+=( $( compgen -W "unconfined" -- "$cur" ) ) + return + ;; + esac + + case "$prev" in + --add-host) + case "$cur" in + *:) + __docker_complete_resolved_hostname + return + ;; + esac + ;; + --attach|-a) + COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) ) + return + ;; + --cap-add) + __docker_complete_capabilities_addable + return + ;; + --cap-drop) + __docker_complete_capabilities_droppable + return + ;; + --cidfile|--env-file|--init-path|--label-file) + _filedir + return + ;; + --device|--tmpfs|--volume|-v) + case "$cur" in + *:*) + # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine) + ;; + '') + COMPREPLY=( $( compgen -W '/' -- "$cur" ) ) + __docker_nospace + ;; + /*) + _filedir + __docker_nospace + ;; + esac + return + ;; + --env|-e) + # we do not append a "=" here because "-e VARNAME" is legal systax, too + COMPREPLY=( $( compgen -e -- "$cur" ) ) + __docker_nospace + return + ;; + --ipc) + case "$cur" in + *:*) + cur="${cur#*:}" + __docker_complete_containers_running + ;; + *) + COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) ) + if [ "$COMPREPLY" = "container:" ]; then + __docker_nospace + fi + ;; + esac + return + ;; + --isolation) + if __docker_daemon_os_is windows ; then + __docker_complete_isolation + return + fi + ;; + --link) + case "$cur" in + *:*) + ;; + *) + __docker_complete_containers_running + COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) + __docker_nospace + ;; + esac + return + ;; + --log-driver) + __docker_complete_log_drivers + return + ;; + --log-opt) + __docker_complete_log_options + return + ;; + --network) + case "$cur" in + container:*) + __docker_complete_containers_all --cur "${cur#*:}" + ;; + *) + COMPREPLY=( $( compgen -W "$(__docker_plugins_bundled --type Network) $(__docker_networks) container:" -- "$cur") ) + if [ "${COMPREPLY[*]}" = "container:" ] ; then + __docker_nospace + fi + ;; + esac + return + ;; + --pid) + case "$cur" in + *:*) + __docker_complete_containers_running --cur "${cur#*:}" + ;; + *) + COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) ) + if [ "$COMPREPLY" = "container:" ]; then + __docker_nospace + fi + ;; + esac + return + ;; + --runtime) + __docker_complete_runtimes + return + ;; + --security-opt) + COMPREPLY=( $( compgen -W "apparmor= label= no-new-privileges seccomp=" -- "$cur") ) + if [ "${COMPREPLY[*]}" != "no-new-privileges" ] ; then + __docker_nospace + fi + return + ;; + --stop-signal) + __docker_complete_signals + return + ;; + --storage-opt) + COMPREPLY=( $( compgen -W "size" -S = -- "$cur") ) + __docker_nospace + return + ;; + --user|-u) + __docker_complete_user_group + return + ;; + --userns) + COMPREPLY=( $( compgen -W "host" -- "$cur" ) ) + return + ;; + --volume-driver) + __docker_complete_plugins_bundled --type Volume + return + ;; + --volumes-from) + __docker_complete_containers_all + return + ;; + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) ) + if [ $cword -eq $counter ]; then + __docker_complete_images + fi + ;; + esac +} + +_docker_container_start() { + __docker_complete_detach_keys && return + + case "$prev" in + --checkpoint) + if [ __docker_daemon_is_experimental ] ; then + return + fi + ;; + --checkpoint-dir) + if [ __docker_daemon_is_experimental ] ; then + _filedir -d + return + fi + ;; + esac + + case "$cur" in + -*) + local options="--attach -a --detach-keys --help --interactive -i" + __docker_daemon_is_experimental && options+=" --checkpoint --checkpoint-dir" + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_stopped + ;; + esac +} + +_docker_container_stats() { + case "$prev" in + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --format --help --no-stream" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_running + ;; + esac +} + +_docker_container_stop() { + case "$prev" in + --time|-t) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_running + ;; + esac +} + +_docker_container_top() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_running + fi + ;; + esac +} + +_docker_container_unpause() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_containers_unpauseable + fi + ;; + esac +} + +_docker_container_update() { + local options_with_args=" + --blkio-weight + --cpu-period + --cpu-quota + --cpu-rt-period + --cpu-rt-runtime + --cpuset-cpus + --cpuset-mems + --cpu-shares -c + --kernel-memory + --memory -m + --memory-reservation + --memory-swap + --restart + " + + local boolean_options=" + --help + " + + local all_options="$options_with_args $boolean_options" + + __docker_complete_restart && return + + case "$prev" in + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_all + ;; + esac +} + +_docker_container_wait() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_containers_all + ;; + esac +} + + +_docker_commit() { + _docker_container_commit +} + +_docker_cp() { + _docker_container_cp +} + +_docker_create() { + _docker_container_create +} + +_docker_daemon() { + local boolean_options=" + $global_boolean_options + --disable-legacy-registry + --experimental + --help + --icc=false + --init + --ip-forward=false + --ip-masq=false + --iptables=false + --ipv6 + --live-restore + --raw-logs + --selinux-enabled + --userland-proxy=false + " + local options_with_args=" + $global_options_with_args + --add-runtime + --api-cors-header + --authorization-plugin + --bip + --bridge -b + --cgroup-parent + --cluster-advertise + --cluster-store + --cluster-store-opt + --config-file + --containerd + --default-gateway + --default-gateway-v6 + --default-shm-size + --default-ulimit + --dns + --dns-search + --dns-opt + --exec-opt + --exec-root + --fixed-cidr + --fixed-cidr-v6 + --graph -g + --group -G + --init-path + --insecure-registry + --ip + --label + --log-driver + --log-opt + --max-concurrent-downloads + --max-concurrent-uploads + --mtu + --oom-score-adjust + --pidfile -p + --registry-mirror + --seccomp-profile + --shutdown-timeout + --storage-driver -s + --storage-opt + --userland-proxy-path + --userns-remap + " + + __docker_complete_log_driver_options && return + + key=$(__docker_map_key_of_current_option '--cluster-store-opt') + case "$key" in + kv.*file) + cur=${cur##*=} + _filedir + return + ;; + esac + + local key=$(__docker_map_key_of_current_option '--storage-opt') + case "$key" in + dm.blkdiscard|dm.override_udev_sync_check|dm.use_deferred_removal|dm.use_deferred_deletion) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + dm.fs) + COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur##*=}" ) ) + return + ;; + dm.thinpooldev) + cur=${cur##*=} + _filedir + return + ;; + esac + + case "$prev" in + --authorization-plugin) + __docker_complete_plugins_bundled --type Authorization + return + ;; + --cluster-store) + COMPREPLY=( $( compgen -W "consul etcd zk" -S "://" -- "$cur" ) ) + __docker_nospace + return + ;; + --cluster-store-opt) + COMPREPLY=( $( compgen -W "discovery.heartbeat discovery.ttl kv.cacertfile kv.certfile kv.keyfile kv.path" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + --config-file|--containerd|--init-path|--pidfile|-p|--tlscacert|--tlscert|--tlskey|--userland-proxy-path) + _filedir + return + ;; + --exec-root|--graph|-g) + _filedir -d + return + ;; + --log-driver) + __docker_complete_log_drivers + return + ;; + --storage-driver|-s) + COMPREPLY=( $( compgen -W "aufs btrfs devicemapper overlay overlay2 vfs zfs" -- "$(echo $cur | tr '[:upper:]' '[:lower:]')" ) ) + return + ;; + --storage-opt) + local btrfs_options="btrfs.min_space" + local devicemapper_options=" + dm.basesize + dm.blkdiscard + dm.blocksize + dm.fs + dm.loopdatasize + dm.loopmetadatasize + dm.min_free_space + dm.mkfsarg + dm.mountopt + dm.override_udev_sync_check + dm.thinpooldev + dm.use_deferred_deletion + dm.use_deferred_removal + " + local zfs_options="zfs.fsname" + + case $(__docker_value_of_option '--storage-driver|-s') in + '') + COMPREPLY=( $( compgen -W "$btrfs_options $devicemapper_options $zfs_options" -S = -- "$cur" ) ) + ;; + btrfs) + COMPREPLY=( $( compgen -W "$btrfs_options" -S = -- "$cur" ) ) + ;; + devicemapper) + COMPREPLY=( $( compgen -W "$devicemapper_options" -S = -- "$cur" ) ) + ;; + zfs) + COMPREPLY=( $( compgen -W "$zfs_options" -S = -- "$cur" ) ) + ;; + *) + return + ;; + esac + __docker_nospace + return + ;; + --log-level|-l) + __docker_complete_log_levels + return + ;; + --log-opt) + __docker_complete_log_options + return + ;; + --seccomp-profile) + _filedir json + return + ;; + --userns-remap) + __docker_complete_user_group + return + ;; + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + esac +} + +_docker_deploy() { + __docker_daemon_is_experimental && _docker_stack_deploy +} + +_docker_diff() { + _docker_container_diff +} + +_docker_events() { + _docker_system_events +} + +_docker_exec() { + _docker_container_exec +} + +_docker_export() { + _docker_container_export +} + +_docker_help() { + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) ) + fi +} + +_docker_history() { + _docker_image_history +} + + +_docker_image() { + local subcommands=" + build + history + import + inspect + load + ls + prune + pull + push + rm + save + tag + " + local aliases=" + images + list + remove + rmi + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_image_build() { + local options_with_args=" + --add-host + --build-arg + --cache-from + --cgroup-parent + --cpuset-cpus + --cpuset-mems + --cpu-shares -c + --cpu-period + --cpu-quota + --file -f + --label + --memory -m + --memory-swap + --network + --shm-size + --tag -t + --ulimit + " + __docker_daemon_os_is windows && options_with_args+=" + --isolation + " + + local boolean_options=" + --compress + --disable-content-trust=false + --force-rm + --help + --no-cache + --pull + --quiet -q + --rm + " + __docker_daemon_is_experimental && boolean_options+="--squash" + + local all_options="$options_with_args $boolean_options" + + case "$prev" in + --add-host) + case "$cur" in + *:) + __docker_complete_resolved_hostname + return + ;; + esac + ;; + --build-arg) + COMPREPLY=( $( compgen -e -- "$cur" ) ) + __docker_nospace + return + ;; + --cache-from) + __docker_complete_image_repos_and_tags + return + ;; + --file|-f) + _filedir + return + ;; + --isolation) + if __docker_daemon_os_is windows ; then + __docker_complete_isolation + return + fi + ;; + --network) + case "$cur" in + container:*) + __docker_complete_containers_all --cur "${cur#*:}" + ;; + *) + COMPREPLY=( $( compgen -W "$(__docker_plugins --type Network) $(__docker_networks) container:" -- "$cur") ) + if [ "${COMPREPLY[*]}" = "container:" ] ; then + __docker_nospace + fi + ;; + esac + return + ;; + --tag|-t) + __docker_complete_image_repos_and_tags + return + ;; + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) ) + if [ $cword -eq $counter ]; then + _filedir -d + fi + ;; + esac +} + +_docker_image_history() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --human=false -H=false --no-trunc --quiet -q" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_images + fi + ;; + esac +} + +_docker_image_images() { + _docker_image_ls +} + +_docker_image_import() { + case "$prev" in + --change|-c|--message|-m) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--change -c --help --message -m" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--change|-c|--message|-m') + if [ $cword -eq $counter ]; then + return + fi + (( counter++ )) + + if [ $cword -eq $counter ]; then + __docker_complete_image_repos_and_tags + return + fi + ;; + esac +} + +_docker_image_inspect() { + _docker_inspect --type image +} + +_docker_image_load() { + case "$prev" in + --input|-i) + _filedir + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --input -i --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_image_list() { + _docker_image_ls +} + +_docker_image_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + before|since|reference) + cur="${cur##*=}" + __docker_complete_images + return + ;; + dangling) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + label) + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "before dangling label reference since" -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --digests --filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) + ;; + =) + return + ;; + *) + __docker_complete_image_repos + ;; + esac +} + +_docker_image_prune() { + case "$prev" in + --filter) + COMPREPLY=( $( compgen -W "until" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --force -f --filter --help" -- "$cur" ) ) + ;; + esac +} + +_docker_image_pull() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all-tags -a --disable-content-trust=false --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + for arg in "${COMP_WORDS[@]}"; do + case "$arg" in + --all-tags|-a) + __docker_complete_image_repos + return + ;; + esac + done + __docker_complete_image_repos_and_tags + fi + ;; + esac +} + +_docker_image_push() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--disable-content-trust=false --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_image_repos_and_tags + fi + ;; + esac +} + +_docker_image_remove() { + _docker_image_rm +} + +_docker_image_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) ) + ;; + *) + __docker_complete_images + ;; + esac +} + +_docker_image_rmi() { + _docker_image_rm +} + +_docker_image_save() { + case "$prev" in + --output|-o) + _filedir + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) ) + ;; + *) + __docker_complete_images + ;; + esac +} + +_docker_image_tag() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + + if [ $cword -eq $counter ]; then + __docker_complete_image_repos_and_tags + return + fi + (( counter++ )) + + if [ $cword -eq $counter ]; then + __docker_complete_image_repos_and_tags + return + fi + ;; + esac +} + + +_docker_images() { + _docker_image_ls +} + +_docker_import() { + _docker_image_import +} + +_docker_info() { + _docker_system_info +} + +_docker_inspect() { + local preselected_type + local type + + if [ "$1" = "--type" ] ; then + preselected_type=yes + type="$2" + else + type=$(__docker_value_of_option --type) + fi + + case "$prev" in + --format|-f) + return + ;; + --type) + if [ -z "$preselected_type" ] ; then + COMPREPLY=( $( compgen -W "container image network node plugin service volume" -- "$cur" ) ) + return + fi + ;; + esac + + case "$cur" in + -*) + local options="--format -f --help --size -s" + if [ -z "$preselected_type" ] ; then + options+=" --type" + fi + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + ;; + *) + case "$type" in + '') + COMPREPLY=( $( compgen -W " + $(__docker_containers --all) + $(__docker_images) + $(__docker_networks) + $(__docker_nodes) + $(__docker_plugins_installed) + $(__docker_services) + $(__docker_volumes) + " -- "$cur" ) ) + ;; + container) + __docker_complete_containers_all + ;; + image) + __docker_complete_images + ;; + network) + __docker_complete_networks + ;; + node) + __docker_complete_nodes + ;; + plugin) + __docker_complete_plugins_installed + ;; + service) + __docker_complete_services + ;; + volume) + __docker_complete_volumes + ;; + esac + esac +} + +_docker_kill() { + _docker_container_kill +} + +_docker_load() { + _docker_image_load +} + +_docker_login() { + case "$prev" in + --password|-p|--username|-u) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --password -p --username -u" -- "$cur" ) ) + ;; + esac +} + +_docker_logout() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + esac +} + +_docker_logs() { + _docker_container_logs +} + +_docker_network_connect() { + local options_with_args=" + --alias + --ip + --ip6 + --link + --link-local-ip + " + + local boolean_options=" + --help + " + + case "$prev" in + --link) + case "$cur" in + *:*) + ;; + *) + __docker_complete_containers_running + COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) ) + __docker_nospace + ;; + esac + return + ;; + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) ) + if [ $cword -eq $counter ]; then + __docker_complete_networks + elif [ $cword -eq $(($counter + 1)) ]; then + __docker_complete_containers_all + fi + ;; + esac +} + +_docker_network_create() { + case "$prev" in + --aux-address|--gateway|--internal|--ip-range|--ipam-opt|--ipv6|--opt|-o|--subnet) + return + ;; + --ipam-driver) + COMPREPLY=( $( compgen -W "default" -- "$cur" ) ) + return + ;; + --driver|-d) + # remove drivers that allow one instance only, add drivers missing in `docker info` + __docker_complete_plugins_bundled --type Network --remove host --remove null --add macvlan + return + ;; + --label) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--attachable --aux-address --driver -d --gateway --help --internal --ip-range --ipam-driver --ipam-opt --ipv6 --label --opt -o --subnet" -- "$cur" ) ) + ;; + esac +} + +_docker_network_disconnect() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_networks + elif [ $cword -eq $(($counter + 1)) ]; then + __docker_complete_containers_in_network "$prev" + fi + ;; + esac +} + +_docker_network_inspect() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_networks + esac +} + +_docker_network_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + driver) + __docker_complete_plugins_bundled --cur "${cur##*=}" --type Network --add macvlan + return + ;; + id) + __docker_complete_networks --cur "${cur##*=}" --id + return + ;; + name) + __docker_complete_networks --cur "${cur##*=}" --name + return + ;; + type) + COMPREPLY=( $( compgen -W "builtin custom" -- "${cur##*=}" ) ) + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "driver id label name type" -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_network_prune() { + case "$prev" in + --filter) + COMPREPLY=( $( compgen -W "until" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --filter --help" -- "$cur" ) ) + ;; + esac +} + +_docker_network_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_networks --filter type=custom + esac +} + +_docker_network() { + local subcommands=" + connect + create + disconnect + inspect + ls + prune + rm + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_service() { + local subcommands=" + create + inspect + ls + rm + scale + ps + update + " + __docker_daemon_is_experimental && subcommands+="logs" + + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_service_create() { + _docker_service_update_and_create +} + +_docker_service_inspect() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) + ;; + *) + __docker_complete_services + esac +} + +_docker_service_logs() { + case "$prev" in + --since|--tail) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--follow -f --help --no-resolve --no-task-ids --no-trunc --since --tail --timestamps -t" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--since|--tail') + if [ $cword -eq $counter ]; then + __docker_complete_services + fi + ;; + esac +} + +_docker_service_list() { + _docker_service_ls +} + +_docker_service_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + id) + __docker_complete_services --cur "${cur##*=}" --id + return + ;; + name) + __docker_complete_services --cur "${cur##*=}" --name + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -W "id label name" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_service_remove() { + _docker_service_rm +} + +_docker_service_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_services + esac +} + +_docker_service_scale() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_services + __docker_append_to_completions "=" + __docker_nospace + ;; + esac +} + +_docker_service_ps() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + desired-state) + COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) + return + ;; + name) + __docker_complete_services --cur "${cur##*=}" --name + return + ;; + node) + __docker_complete_nodes --cur "${cur##*=}" --add self + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -W "desired-state id name node" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --help --no-resolve --no-trunc --quiet -q" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--filter|-f') + if [ $cword -eq $counter ]; then + __docker_complete_services + fi + ;; + esac +} + +_docker_service_update() { + _docker_service_update_and_create +} + +# _docker_service_update_and_create is the combined completion for `docker service create` +# and `docker service update` +_docker_service_update_and_create() { + local $subcommand="${words[$subcommand_pos]}" + + local options_with_args=" + --endpoint-mode + --env -e + --force + --health-cmd + --health-interval + --health-retries + --health-timeout + --hostname + --label -l + --limit-cpu + --limit-memory + --log-driver + --log-opt + --mount + --network + --no-healthcheck + --replicas + --reserve-cpu + --reserve-memory + --restart-condition + --restart-delay + --restart-max-attempts + --restart-window + --rollback-delay + --rollback-failure-action + --rollback-max-failure-ratio + --rollback-monitor + --rollback-parallelism + --stop-grace-period + --stop-signal + --update-delay + --update-failure-action + --update-max-failure-ratio + --update-monitor + --update-parallelism + --user -u + --workdir -w + " + + local boolean_options=" + --help + --read-only + --tty -t + --with-registry-auth + " + + __docker_complete_log_driver_options && return + + if [ "$subcommand" = "create" ] ; then + options_with_args="$options_with_args + --constraint + --container-label + --dns + --dns-option + --dns-search + --env-file + --group + --host + --mode + --name + --placement-pref + --publish -p + --secret + " + + case "$prev" in + --env-file) + _filedir + return + ;; + --group) + COMPREPLY=( $(compgen -g -- "$cur") ) + return + ;; + --host) + case "$cur" in + *:) + __docker_complete_resolved_hostname + return + ;; + esac + ;; + --mode) + COMPREPLY=( $( compgen -W "global replicated" -- "$cur" ) ) + return + ;; + --placement-pref) + COMPREPLY=( $( compgen -W "spread" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + --secret) + __docker_complete_secrets + return + ;; + esac + fi + if [ "$subcommand" = "update" ] ; then + options_with_args="$options_with_args + --arg + --constraint-add + --constraint-rm + --container-label-add + --container-label-rm + --dns-add + --dns-option-add + --dns-option-rm + --dns-rm + --dns-search-add + --dns-search-rm + --group-add + --group-rm + --host-add + --host-rm + --image + --placement-pref-add + --placement-pref-rm + --publish-add + --publish-rm + --rollback + --secret-add + --secret-rm + " + + case "$prev" in + --group-add|--group-rm) + COMPREPLY=( $(compgen -g -- "$cur") ) + return + ;; + --host-add|--host-rm) + case "$cur" in + *:) + __docker_complete_resolved_hostname + return + ;; + esac + ;; + --image) + __docker_complete_image_repos_and_tags + return + ;; + --placement-pref-add|--placement-pref-rm) + COMPREPLY=( $( compgen -W "spread" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + --secret-add|--secret-rm) + __docker_complete_secrets + return + ;; + esac + fi + + local strategy=$(__docker_map_key_of_current_option '--placement-pref|--placement-pref-add|--placement-pref-rm') + case "$strategy" in + spread) + COMPREPLY=( $( compgen -W "engine.labels node.labels" -S . -- "${cur##*=}" ) ) + __docker_nospace + return + ;; + esac + + case "$prev" in + --endpoint-mode) + COMPREPLY=( $( compgen -W "dnsrr vip" -- "$cur" ) ) + return + ;; + --env|-e) + # we do not append a "=" here because "-e VARNAME" is legal systax, too + COMPREPLY=( $( compgen -e -- "$cur" ) ) + __docker_nospace + return + ;; + --log-driver) + __docker_complete_log_drivers + return + ;; + --log-opt) + __docker_complete_log_options + return + ;; + --network) + __docker_complete_networks + return + ;; + --restart-condition) + COMPREPLY=( $( compgen -W "any none on-failure" -- "$cur" ) ) + return + ;; + --rollback-failure-action) + COMPREPLY=( $( compgen -W "continue pause" -- "$cur" ) ) + return + ;; + --stop-signal) + __docker_complete_signals + return + ;; + --update-failure-action) + COMPREPLY=( $( compgen -W "continue pause rollback" -- "$cur" ) ) + return + ;; + --user|-u) + __docker_complete_user_group + return + ;; + $(__docker_to_extglob "$options_with_args") ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) ) + if [ "$subcommand" = "update" ] ; then + if [ $cword -eq $counter ]; then + __docker_complete_services + fi + else + if [ $cword -eq $counter ]; then + __docker_complete_images + fi + fi + ;; + esac +} + +_docker_swarm() { + local subcommands=" + init + join + join-token + leave + unlock + unlock-key + update + " + __docker_subcommands "$subcommands" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_swarm_init() { + case "$prev" in + --advertise-addr) + if [[ $cur == *: ]] ; then + COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) + else + __docker_complete_local_interfaces + __docker_nospace + fi + return + ;; + --availability) + COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) + return + ;; + --cert-expiry|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit) + return + ;; + --listen-addr) + if [[ $cur == *: ]] ; then + COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) + else + __docker_complete_local_interfaces --add 0.0.0.0 + __docker_nospace + fi + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--advertise-addr --autolock --availability --cert-expiry --dispatcher-heartbeat --external-ca --force-new-cluster --help --listen-addr --max-snapshots --snapshot-interval --task-history-limit" -- "$cur" ) ) + ;; + esac +} + +_docker_swarm_join() { + case "$prev" in + --advertise-addr) + if [[ $cur == *: ]] ; then + COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) + else + __docker_complete_local_interfaces + __docker_nospace + fi + return + ;; + --listen-addr) + if [[ $cur == *: ]] ; then + COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) + else + __docker_complete_local_interfaces --add 0.0.0.0 + __docker_nospace + fi + return + ;; + --availability) + COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) + return + ;; + --token) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--advertise-addr --availability --help --listen-addr --token" -- "$cur" ) ) + ;; + *:) + COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) ) + ;; + esac +} + +_docker_swarm_join_token() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --quiet -q --rotate" -- "$cur" ) ) + ;; + *) + local counter=$( __docker_pos_first_nonflag ) + if [ $cword -eq $counter ]; then + COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) ) + fi + ;; + esac +} + +_docker_swarm_leave() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + esac +} + +_docker_swarm_unlock() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + esac +} + +_docker_swarm_unlock_key() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --quiet -q --rotate" -- "$cur" ) ) + ;; + esac +} + +_docker_swarm_update() { + case "$prev" in + --cert-expiry|--dispatcher-heartbeat|--external-ca|--max-snapshots|--snapshot-interval|--task-history-limit) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--autolock --cert-expiry --dispatcher-heartbeat --external-ca --help --max-snapshots --snapshot-interval --task-history-limit" -- "$cur" ) ) + ;; + esac +} + +_docker_node() { + local subcommands=" + demote + inspect + ls + promote + rm + ps + update + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_node_demote() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes --filter role=manager + esac +} + +_docker_node_inspect() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes --add self + esac +} + +_docker_node_list() { + _docker_node_ls +} + +_docker_node_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + id) + __docker_complete_nodes --cur "${cur##*=}" --id + return + ;; + membership) + COMPREPLY=( $( compgen -W "accepted pending" -- "${cur##*=}" ) ) + return + ;; + name) + __docker_complete_nodes --cur "${cur##*=}" --name + return + ;; + role) + COMPREPLY=( $( compgen -W "manager worker" -- "${cur##*=}" ) ) + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -W "id label membership name role" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --help --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_node_promote() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes --filter role=worker + esac +} + +_docker_node_remove() { + _docker_node_rm +} + +_docker_node_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes + esac +} + +_docker_node_ps() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + desired-state) + COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) + return + ;; + name) + __docker_complete_services --cur "${cur##*=}" --name + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -W "desired-state id label name" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --help --no-resolve --no-trunc" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes --add self + ;; + esac +} + +_docker_node_update() { + case "$prev" in + --availability) + COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) ) + return + ;; + --role) + COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) ) + return + ;; + --label-add|--label-rm) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--availability --help --label-add --label-rm --role" -- "$cur" ) ) + ;; + *) + __docker_complete_nodes + esac +} + +_docker_pause() { + _docker_container_pause +} + +_docker_plugin() { + local subcommands=" + create + disable + enable + inspect + install + ls + push + rm + set + upgrade + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_plugin_create() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--compress --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + # reponame + return + elif [ $cword -eq $((counter + 1)) ]; then + _filedir -d + fi + ;; + esac +} + +_docker_plugin_disable() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_plugins_installed --filter enabled=true + fi + ;; + esac +} + +_docker_plugin_enable() { + case "$prev" in + --timeout) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --timeout" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--timeout') + if [ $cword -eq $counter ]; then + __docker_complete_plugins_installed --filter enabled=false + fi + ;; + esac +} + +_docker_plugin_inspect() { + case "$prev" in + --format|f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_plugins_installed + ;; + esac +} + +_docker_plugin_install() { + case "$prev" in + --alias) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--alias --disable --disable-content-trust=false --grant-all-permissions --help" -- "$cur" ) ) + ;; + esac +} + +_docker_plugin_list() { + _docker_plugin_ls +} + +_docker_plugin_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + capability) + COMPREPLY=( $( compgen -W "authz ipamdriver networkdriver volumedriver" -- "${cur##*=}" ) ) + return + ;; + enabled) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "capability enabled" -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_plugin_push() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_plugins_installed + fi + ;; + esac +} + +_docker_plugin_remove() { + _docker_plugin_rm +} + +_docker_plugin_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_plugins_installed + ;; + esac +} + +_docker_plugin_set() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_plugins_installed + fi + ;; + esac +} + +_docker_plugin_upgrade() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--disable-content-trust --grant-all-permissions --help --skip-remote-check" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_plugins_installed + __ltrim_colon_completions "$cur" + elif [ $cword -eq $((counter + 1)) ]; then + local plugin_images="$(__docker_plugins_installed)" + COMPREPLY=( $(compgen -S : -W "${plugin_images%:*}" -- "$cur") ) + __docker_nospace + fi + ;; + esac +} + + +_docker_port() { + _docker_container_port +} + +_docker_ps() { + _docker_container_ls +} + +_docker_pull() { + _docker_image_pull +} + +_docker_push() { + _docker_image_push +} + +_docker_rename() { + _docker_container_rename +} + +_docker_restart() { + _docker_container_restart +} + +_docker_rm() { + _docker_container_rm +} + +_docker_rmi() { + _docker_image_rm +} + +_docker_run() { + _docker_container_run +} + +_docker_save() { + _docker_image_save +} + + +_docker_secret() { + local subcommands=" + create + inspect + ls + rm + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_secret_create() { + case "$prev" in + --label|-l) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --label -l" -- "$cur" ) ) + ;; + esac +} + +_docker_secret_inspect() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_secrets + ;; + esac +} + +_docker_secret_list() { + _docker_secret_ls +} + +_docker_secret_ls() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_secret_remove() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + __docker_complete_secrets + ;; + esac +} + +_docker_secret_rm() { + _docker_secret_remove +} + + + +_docker_search() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + is-automated) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + is-official) + COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "is-automated is-official stars" -- "$cur" ) ) + __docker_nospace + return + ;; + --limit) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter --help --limit --no-trunc" -- "$cur" ) ) + ;; + esac +} + + +_docker_stack() { + local subcommands=" + deploy + ls + ps + rm + services + " + local aliases=" + down + list + remove + up + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_stack_deploy() { + case "$prev" in + --bundle-file) + if __docker_daemon_is_experimental ; then + _filedir dab + return + fi + ;; + --compose-file|-c) + _filedir yml + return + ;; + esac + + case "$cur" in + -*) + local options="--compose-file -c --help --with-registry-auth" + __docker_daemon_is_experimental && options+=" --bundle-file" + COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) + ;; + esac +} + +_docker_stack_down() { + _docker_stack_rm +} + +_docker_stack_list() { + _docker_stack_ls +} + +_docker_stack_ls() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + esac +} + +_docker_stack_ps() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + desired-state) + COMPREPLY=( $( compgen -W "accepted running shutdown" -- "${cur##*=}" ) ) + return + ;; + id) + __docker_complete_stacks --cur "${cur##*=}" --id + return + ;; + name) + __docker_complete_stacks --cur "${cur##*=}" --name + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "id name desired-state" -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --filter -f --help --no-resolve --no-trunc" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--filter|-f') + if [ $cword -eq $counter ]; then + __docker_complete_stacks + fi + ;; + esac +} + +_docker_stack_remove() { + _docker_stack_rm +} + +_docker_stack_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag) + if [ $cword -eq $counter ]; then + __docker_complete_stacks + fi + ;; + esac +} + +_docker_stack_services() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + id) + __docker_complete_services --cur "${cur##*=}" --id + return + ;; + label) + return + ;; + name) + __docker_complete_services --cur "${cur##*=}" --name + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "id label name" -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) + ;; + *) + local counter=$(__docker_pos_first_nonflag '--filter|-f|--format') + if [ $cword -eq $counter ]; then + __docker_complete_stacks + fi + ;; + esac +} + +_docker_stack_up() { + _docker_stack_deploy +} + + +_docker_start() { + _docker_container_start +} + +_docker_stats() { + _docker_container_stats +} + +_docker_stop() { + _docker_container_stop +} + + +_docker_system() { + local subcommands=" + df + events + info + prune + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_system_df() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help --verbose -v" -- "$cur" ) ) + ;; + esac +} + +_docker_system_events() { + local key=$(__docker_map_key_of_current_option '-f|--filter') + case "$key" in + container) + __docker_complete_containers_all --cur "${cur##*=}" + return + ;; + daemon) + local name=$(__docker_q info | sed -n 's/^\(ID\|Name\): //p') + COMPREPLY=( $( compgen -W "$name" -- "${cur##*=}" ) ) + return + ;; + event) + COMPREPLY=( $( compgen -W " + attach + commit + connect + copy + create + delete + destroy + detach + die + disconnect + exec_create + exec_detach + exec_start + export + health_status + import + kill + load + mount + oom + pause + pull + push + reload + rename + resize + restart + save + start + stop + tag + top + unmount + unpause + untag + update + " -- "${cur##*=}" ) ) + return + ;; + image) + cur="${cur##*=}" + __docker_complete_images + return + ;; + network) + __docker_complete_networks --cur "${cur##*=}" + return + ;; + type) + COMPREPLY=( $( compgen -W "container daemon image network volume" -- "${cur##*=}" ) ) + return + ;; + volume) + __docker_complete_volumes --cur "${cur##*=}" + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "container daemon event image label network type volume" -- "$cur" ) ) + __docker_nospace + return + ;; + --since|--until) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --help --since --until --format" -- "$cur" ) ) + ;; + esac +} + +_docker_system_info() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + esac +} + +_docker_system_prune() { + case "$prev" in + --filter) + COMPREPLY=( $( compgen -W "until" -S = -- "$cur" ) ) + __docker_nospace + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--all -a --force -f --filter --help" -- "$cur" ) ) + ;; + esac +} + + +_docker_tag() { + _docker_image_tag +} + +_docker_unpause() { + _docker_container_unpause +} + +_docker_update() { + _docker_container_update +} + +_docker_top() { + _docker_container_top +} + +_docker_version() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + esac +} + +_docker_volume_create() { + case "$prev" in + --driver|-d) + __docker_complete_plugins_bundled --type Volume + return + ;; + --label|--opt|-o) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--driver -d --help --label --opt -o" -- "$cur" ) ) + ;; + esac +} + +_docker_volume_inspect() { + case "$prev" in + --format|-f) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_volumes + ;; + esac +} + +_docker_volume_list() { + _docker_volume_ls +} + +_docker_volume_ls() { + local key=$(__docker_map_key_of_current_option '--filter|-f') + case "$key" in + dangling) + COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) ) + return + ;; + driver) + __docker_complete_plugins_bundled --cur "${cur##*=}" --type Volume + return + ;; + name) + __docker_complete_volumes --cur "${cur##*=}" + return + ;; + esac + + case "$prev" in + --filter|-f) + COMPREPLY=( $( compgen -S = -W "dangling driver label name" -- "$cur" ) ) + __docker_nospace + return + ;; + --format) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--filter -f --format --help --quiet -q" -- "$cur" ) ) + ;; + esac +} + +_docker_volume_prune() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + esac +} + +_docker_volume_remove() { + _docker_volume_rm +} + +_docker_volume_rm() { + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--force -f --help" -- "$cur" ) ) + ;; + *) + __docker_complete_volumes + ;; + esac +} + +_docker_volume() { + local subcommands=" + create + inspect + ls + prune + rm + " + local aliases=" + list + remove + " + __docker_subcommands "$subcommands $aliases" && return + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "--help" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) ) + ;; + esac +} + +_docker_wait() { + _docker_container_wait +} + +_docker() { + local previous_extglob_setting=$(shopt -p extglob) + shopt -s extglob + + local management_commands=( + container + image + network + node + plugin + secret + service + stack + system + volume + ) + + local top_level_commands=( + build + login + logout + run + search + version + ) + + local legacy_commands=( + commit + cp + create + diff + events + exec + export + history + images + import + info + inspect + kill + load + logs + pause + port + ps + pull + push + rename + restart + rm + rmi + save + start + stats + stop + swarm + tag + top + unpause + update + wait + ) + + local experimental_commands=( + checkpoint + deploy + ) + + local commands=(${management_commands[*]} ${top_level_commands[*]}) + [ -z "$DOCKER_HIDE_LEGACY_COMMANDS" ] && commands+=(${legacy_commands[*]}) + + # These options are valid as global options for all client commands + # and valid as command options for `docker daemon` + local global_boolean_options=" + --debug -D + --tls + --tlsverify + " + local global_options_with_args=" + --config + --host -H + --log-level -l + --tlscacert + --tlscert + --tlskey + " + + local host config daemon_os + + COMPREPLY=() + local cur prev words cword + _get_comp_words_by_ref -n : cur prev words cword + + local command='docker' command_pos=0 subcommand_pos + local counter=1 + while [ $counter -lt $cword ]; do + case "${words[$counter]}" in + # save host so that completion can use custom daemon + --host|-H) + (( counter++ )) + host="${words[$counter]}" + ;; + # save config so that completion can use custom configuration directories + --config) + (( counter++ )) + config="${words[$counter]}" + ;; + $(__docker_to_extglob "$global_options_with_args") ) + (( counter++ )) + ;; + -*) + ;; + =) + (( counter++ )) + ;; + *) + command="${words[$counter]}" + command_pos=$counter + break + ;; + esac + (( counter++ )) + done + + local binary="${words[0]}" + if [[ $binary == ?(*/)dockerd ]] ; then + # for the dockerd binary, we reuse completion of `docker daemon`. + # dockerd does not have subcommands and global options. + command=daemon + command_pos=0 + fi + + local completions_func=_docker_${command//-/_} + declare -F $completions_func >/dev/null && $completions_func + + eval "$previous_extglob_setting" + return 0 +} + +eval "$__docker_previous_extglob_setting" +unset __docker_previous_extglob_setting + +complete -F _docker docker docker.exe dockerd dockerd.exe diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml new file mode 100644 index 0000000..9f58450 --- /dev/null +++ b/roles/docker/tasks/main.yml @@ -0,0 +1,33 @@ +## ---------docker daemon配置部分----------- +- name: 下载 docker 二进制文件 + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - docker-containerd + - docker-containerd-shim + - docker-init + - docker-runc + - docker + - docker-containerd-ctr + - dockerd + - docker-proxy + +- name: docker命令自动补全 + copy: src=docker dest=/etc/bash_completion.d/docker mode=0644 + +- name: docker国内镜像加速 + copy: src=daemon.json dest=/etc/docker/daemon.json + +- name: 创建docker的systemd unit文件 + template: src=docker.service.j2 dest=/etc/systemd/system/docker.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-docker + shell: systemctl enable docker + +- name: flush-iptables + shell: iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat + +- name: start-docker + shell: systemctl restart docker diff --git a/roles/docker/templates/docker.service.j2 b/roles/docker/templates/docker.service.j2 new file mode 100644 index 0000000..1e4cff4 --- /dev/null +++ b/roles/docker/templates/docker.service.j2 @@ -0,0 +1,19 @@ +[Unit] +Description=Docker Application Container Engine +Documentation=http://docs.docker.io + +[Service] +Environment="PATH={{ bin_dir }}:/bin:/sbin:/usr/bin:/usr/sbin" +ExecStart={{ bin_dir }}/dockerd --log-level=error +ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT +ExecReload=/bin/kill -s HUP $MAINPID +Restart=on-failure +RestartSec=5 +LimitNOFILE=infinity +LimitNPROC=infinity +LimitCORE=infinity +Delegate=yes +KillMode=process + +[Install] +WantedBy=multi-user.target diff --git a/roles/etcd/tasks/main.yml b/roles/etcd/tasks/main.yml new file mode 100644 index 0000000..3b1b778 --- /dev/null +++ b/roles/etcd/tasks/main.yml @@ -0,0 +1,38 @@ +- name: 下载etcd二进制文件 + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - etcd + - etcdctl + +- name: 创建etcd证书目录 + file: name=/etc/etcd/ssl state=directory + +- name: 创建etcd证书请求 + template: src=etcd-csr.json.j2 dest=/etc/etcd/ssl/etcd-csr.json + +- name: 创建 etcd证书和私钥 + shell: "cd /etc/etcd/ssl && {{ bin_dir }}/cfssl gencert \ + -ca={{ ca_dir }}/ca.pem \ + -ca-key={{ ca_dir }}/ca-key.pem \ + -config={{ ca_dir }}/ca-config.json \ + -profile=kubernetes etcd-csr.json | {{ bin_dir }}/cfssljson -bare etcd" + +- name: 复制ectd相关证书生成calico secrets使用 + shell: "cd /etc/etcd/ssl && \ + cp etcd.pem etcd-key.pem {{ base_dir }}/roles/calico/files/" + when: NODE_NAME is defined and NODE_NAME == "etcd1" + +- name: 创建etcd工作目录 + file: name=/var/lib/etcd state=directory + +- name: 创建etcd的systemd unit文件 + template: src=etcd.service.j2 dest=/etc/systemd/system/etcd.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-etcd + shell: systemctl enable etcd + +- name: 重启etcd服务 + shell: systemctl restart etcd diff --git a/roles/etcd/templates/etcd-csr.json.j2 b/roles/etcd/templates/etcd-csr.json.j2 new file mode 100644 index 0000000..f1e1bb1 --- /dev/null +++ b/roles/etcd/templates/etcd-csr.json.j2 @@ -0,0 +1,20 @@ +{ + "CN": "etcd", + "hosts": [ + "127.0.0.1", + "{{ NODE_IP }}" + ], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "HangZhou", + "L": "XS", + "O": "k8s", + "OU": "System" + } + ] +} diff --git a/roles/etcd/templates/etcd.service.j2 b/roles/etcd/templates/etcd.service.j2 new file mode 100644 index 0000000..6f92c90 --- /dev/null +++ b/roles/etcd/templates/etcd.service.j2 @@ -0,0 +1,32 @@ +[Unit] +Description=Etcd Server +After=network.target +After=network-online.target +Wants=network-online.target +Documentation=https://github.com/coreos + +[Service] +Type=notify +WorkingDirectory=/var/lib/etcd/ +ExecStart={{ bin_dir }}/etcd \ + --name={{ NODE_NAME }} \ + --cert-file=/etc/etcd/ssl/etcd.pem \ + --key-file=/etc/etcd/ssl/etcd-key.pem \ + --peer-cert-file=/etc/etcd/ssl/etcd.pem \ + --peer-key-file=/etc/etcd/ssl/etcd-key.pem \ + --trusted-ca-file={{ ca_dir }}/ca.pem \ + --peer-trusted-ca-file={{ ca_dir }}/ca.pem \ + --initial-advertise-peer-urls=https://{{ NODE_IP }}:2380 \ + --listen-peer-urls=https://{{ NODE_IP }}:2380 \ + --listen-client-urls=https://{{ NODE_IP }}:2379,http://127.0.0.1:2379 \ + --advertise-client-urls=https://{{ NODE_IP }}:2379 \ + --initial-cluster-token=etcd-cluster-0 \ + --initial-cluster={{ ETCD_NODES }} \ + --initial-cluster-state=new \ + --data-dir=/var/lib/etcd +Restart=on-failure +RestartSec=5 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kube-master/tasks/main.yml b/roles/kube-master/tasks/main.yml new file mode 100644 index 0000000..f437411 --- /dev/null +++ b/roles/kube-master/tasks/main.yml @@ -0,0 +1,55 @@ +- name: 下载 kube-master 二进制 + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - kube-apiserver + - kube-controller-manager + - kube-scheduler + - kubectl + - kube-proxy + - kubelet + +- name: 创建 kubernetes 证书签名请求 + template: src=kubernetes-csr.json.j2 dest={{ ca_dir }}/kubernetes-csr.json + +- name: 创建 kubernetes 证书和私钥 + shell: "cd {{ ca_dir }} && {{ bin_dir }}/cfssl gencert \ + -ca={{ ca_dir }}/ca.pem \ + -ca-key={{ ca_dir }}/ca-key.pem \ + -config={{ ca_dir }}/ca-config.json \ + -profile=kubernetes kubernetes-csr.json | {{ bin_dir }}/cfssljson -bare kubernetes" + +- name: 创建 token.csv + template: src=token.csv.j2 dest={{ ca_dir }}/token.csv + +- name: 创建 basic-auth.csv + template: src=basic-auth.csv.j2 dest={{ ca_dir }}/basic-auth.csv + +- name: 创建kube-apiserver的systemd unit文件 + template: src=kube-apiserver.service.j2 dest=/etc/systemd/system/kube-apiserver.service + +- name: 创建kube-controller-manager的systemd unit文件 + template: src=kube-controller-manager.service.j2 dest=/etc/systemd/system/kube-controller-manager.service + +- name: 创建kube-scheduler的systemd unit文件 + template: src=kube-scheduler.service.j2 dest=/etc/systemd/system/kube-scheduler.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-kube-apiserver + shell: systemctl enable kube-apiserver + +- name: enable-kube-controller-manager + shell: systemctl enable kube-controller-manager + +- name: enable-kube-scheduler + shell: systemctl enable kube-scheduler + +- name: start-kube-apiserver + shell: systemctl restart kube-apiserver + +- name: start-kube-controller-manager + shell: systemctl restart kube-controller-manager + +- name: start-kube-scheduler + shell: systemctl restart kube-scheduler diff --git a/roles/kube-master/templates/basic-auth.csv.j2 b/roles/kube-master/templates/basic-auth.csv.j2 new file mode 100644 index 0000000..223b053 --- /dev/null +++ b/roles/kube-master/templates/basic-auth.csv.j2 @@ -0,0 +1,2 @@ +{{ BASIC_AUTH_PASS }},{{ BASIC_AUTH_USER }},1 +readonly,readonly,2 diff --git a/roles/kube-master/templates/kube-apiserver.service.j2 b/roles/kube-master/templates/kube-apiserver.service.j2 new file mode 100644 index 0000000..911b1be --- /dev/null +++ b/roles/kube-master/templates/kube-apiserver.service.j2 @@ -0,0 +1,42 @@ +[Unit] +Description=Kubernetes API Server +Documentation=https://github.com/GoogleCloudPlatform/kubernetes +After=network.target + +[Service] +ExecStart={{ bin_dir }}/kube-apiserver \ + --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \ + --bind-address={{ NODE_IP }} \ + --insecure-bind-address=127.0.0.1 \ + --authorization-mode=Node,RBAC \ + --runtime-config=rbac.authorization.k8s.io/v1beta1 \ + --kubelet-https=true \ + --anonymous-auth=false \ + --basic-auth-file={{ ca_dir }}/basic-auth.csv \ + --experimental-bootstrap-token-auth \ + --token-auth-file={{ ca_dir }}/token.csv \ + --service-cluster-ip-range={{ SERVICE_CIDR }} \ + --service-node-port-range={{ NODE_PORT_RANGE }} \ + --tls-cert-file={{ ca_dir }}/kubernetes.pem \ + --tls-private-key-file={{ ca_dir }}/kubernetes-key.pem \ + --client-ca-file={{ ca_dir }}/ca.pem \ + --service-account-key-file={{ ca_dir }}/ca-key.pem \ + --etcd-cafile={{ ca_dir }}/ca.pem \ + --etcd-certfile={{ ca_dir }}/kubernetes.pem \ + --etcd-keyfile={{ ca_dir }}/kubernetes-key.pem \ + --etcd-servers={{ ETCD_ENDPOINTS }} \ + --enable-swagger-ui=true \ + --allow-privileged=true \ + --audit-log-maxage=30 \ + --audit-log-maxbackup=3 \ + --audit-log-maxsize=100 \ + --audit-log-path=/var/lib/audit.log \ + --event-ttl=1h \ + --v=2 +Restart=on-failure +RestartSec=5 +Type=notify +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kube-master/templates/kube-controller-manager.service.j2 b/roles/kube-master/templates/kube-controller-manager.service.j2 new file mode 100644 index 0000000..cc0f6f3 --- /dev/null +++ b/roles/kube-master/templates/kube-controller-manager.service.j2 @@ -0,0 +1,23 @@ +[Unit] +Description=Kubernetes Controller Manager +Documentation=https://github.com/GoogleCloudPlatform/kubernetes + +[Service] +ExecStart={{ bin_dir }}/kube-controller-manager \ + --address=127.0.0.1 \ + --master=http://127.0.0.1:8080 \ + --allocate-node-cidrs=true \ + --service-cluster-ip-range={{ SERVICE_CIDR }} \ + --cluster-cidr={{ CLUSTER_CIDR }} \ + --cluster-name=kubernetes \ + --cluster-signing-cert-file={{ ca_dir }}/ca.pem \ + --cluster-signing-key-file={{ ca_dir }}/ca-key.pem \ + --service-account-private-key-file={{ ca_dir }}/ca-key.pem \ + --root-ca-file={{ ca_dir }}/ca.pem \ + --leader-elect=true \ + --v=2 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kube-master/templates/kube-scheduler.service.j2 b/roles/kube-master/templates/kube-scheduler.service.j2 new file mode 100644 index 0000000..c94cb34 --- /dev/null +++ b/roles/kube-master/templates/kube-scheduler.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Kubernetes Scheduler +Documentation=https://github.com/GoogleCloudPlatform/kubernetes + +[Service] +ExecStart={{ bin_dir }}/kube-scheduler \ + --address=127.0.0.1 \ + --master=http://127.0.0.1:8080 \ + --leader-elect=true \ + --v=2 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kube-master/templates/kubernetes-csr.json.j2 b/roles/kube-master/templates/kubernetes-csr.json.j2 new file mode 100644 index 0000000..c8a1ced --- /dev/null +++ b/roles/kube-master/templates/kubernetes-csr.json.j2 @@ -0,0 +1,27 @@ +{ + "CN": "kubernetes", + "hosts": [ + "127.0.0.1", + "{{ MASTER_IP }}", + "{{ NODE_IP }}", + "{{ CLUSTER_KUBERNETES_SVC_IP }}", + "kubernetes", + "kubernetes.default", + "kubernetes.default.svc", + "kubernetes.default.svc.cluster", + "kubernetes.default.svc.cluster.local" + ], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "HangZhou", + "L": "XS", + "O": "k8s", + "OU": "System" + } + ] +} diff --git a/roles/kube-master/templates/token.csv.j2 b/roles/kube-master/templates/token.csv.j2 new file mode 100644 index 0000000..60850ff --- /dev/null +++ b/roles/kube-master/templates/token.csv.j2 @@ -0,0 +1 @@ +{{ BOOTSTRAP_TOKEN }},kubelet-bootstrap,10001,"system:kubelet-bootstrap" diff --git a/roles/kube-node/tasks/main.yml b/roles/kube-node/tasks/main.yml new file mode 100644 index 0000000..c93274c --- /dev/null +++ b/roles/kube-node/tasks/main.yml @@ -0,0 +1,106 @@ +##----------kubelet 配置部分-------------- +- name: 下载 kubelet和kube-proxy 二进制 + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - kubelet + - kube-proxy + +# kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要绑定该角色 +# 只需单节点执行一次,重复执行的报错可以忽略 +- name: kubelet-bootstrap-setting + shell: "{{ bin_dir }}/kubectl create clusterrolebinding kubelet-bootstrap \ + --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap" + when: NODE_ID is defined and NODE_ID == "node1" + ignore_errors: true + +#创建bootstrap.kubeconfig配置文件 +- name: 设置集群参数 + shell: "{{ bin_dir }}/kubectl config set-cluster kubernetes \ + --certificate-authority={{ ca_dir }}/ca.pem \ + --embed-certs=true \ + --server={{ KUBE_APISERVER }} \ + --kubeconfig=bootstrap.kubeconfig" +- name: 设置客户端认证参数 + shell: "{{ bin_dir }}/kubectl config set-credentials kubelet-bootstrap \ + --token={{ BOOTSTRAP_TOKEN }} \ + --kubeconfig=bootstrap.kubeconfig" +- name: 设置上下文参数 + shell: "{{ bin_dir }}/kubectl config set-context default \ + --cluster=kubernetes \ + --user=kubelet-bootstrap \ + --kubeconfig=bootstrap.kubeconfig" +- name: 选择默认上下文 + shell: "{{ bin_dir }}/kubectl config use-context default --kubeconfig=bootstrap.kubeconfig" + +- name: 安装bootstrap.kubeconfig配置文件 + shell: "mv $HOME/bootstrap.kubeconfig /etc/kubernetes/bootstrap.kubeconfig" + +- name: 创建kubelet的工作目录 + file: name=/var/lib/kubelet state=directory + +- name: 创建kubelet的systemd unit文件 + template: src=kubelet.service.j2 dest=/etc/systemd/system/kubelet.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-kubelet + shell: systemctl enable kubelet + +- name: start-kubelet + shell: systemctl restart kubelet + +- name: approve-kubelet-csr + shell: "{{ bin_dir }}/kubectl get csr|grep 'Pending' | awk 'NR>0{print $1}'| xargs {{ bin_dir }}/kubectl certificate approve" + when: NODE_ID is defined and NODE_ID == "node1" + ignore_errors: true + +##-------kube-proxy部分---------------- +- name: 准备kube-proxy 证书签名请求 + template: src=kube-proxy-csr.json.j2 dest={{ ca_dir }}/kube-proxy-csr.json + +- name: 创建 kube-proxy证书与私钥 + shell: "cd {{ ca_dir }} && {{ bin_dir }}/cfssl gencert \ + -ca={{ ca_dir }}/ca.pem \ + -ca-key={{ ca_dir }}/ca-key.pem \ + -config={{ ca_dir }}/ca-config.json \ + -profile=kubernetes kube-proxy-csr.json | {{ bin_dir }}/cfssljson -bare kube-proxy" + +#创建kube-proxy.kubeconfig配置文件 +- name: 设置集群参数 + shell: "{{ bin_dir }}/kubectl config set-cluster kubernetes \ + --certificate-authority={{ ca_dir }}/ca.pem \ + --embed-certs=true \ + --server={{ KUBE_APISERVER }} \ + --kubeconfig=kube-proxy.kubeconfig" +- name: 设置客户端认证参数 + shell: "{{ bin_dir }}/kubectl config set-credentials kube-proxy \ + --client-certificate={{ ca_dir }}/kube-proxy.pem \ + --client-key={{ ca_dir }}/kube-proxy-key.pem \ + --embed-certs=true \ + --kubeconfig=kube-proxy.kubeconfig" +- name: 设置上下文参数 + shell: "{{ bin_dir }}/kubectl config set-context default \ + --cluster=kubernetes \ + --user=kube-proxy \ + --kubeconfig=kube-proxy.kubeconfig" +- name: 选择默认上下文 + shell: "{{ bin_dir }}/kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig" + +- name: 安装kube-proxy.kubeconfig配置文件 + shell: "mv $HOME/kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig" + +- name: 创建kube-proxy的工作目录 + file: name=/var/lib/kube-proxy state=directory + +- name: 创建kube-proxy的systemd unit文件 + template: src=kube-proxy.service.j2 dest=/etc/systemd/system/kube-proxy.service + +- name: daemon-reload + shell: systemctl daemon-reload + +- name: enable-kube-proxy + shell: systemctl enable kube-proxy + +- name: start-kube-proxy + shell: systemctl restart kube-proxy diff --git a/roles/kube-node/templates/kube-proxy-csr.json.j2 b/roles/kube-node/templates/kube-proxy-csr.json.j2 new file mode 100644 index 0000000..0ee912d --- /dev/null +++ b/roles/kube-node/templates/kube-proxy-csr.json.j2 @@ -0,0 +1,17 @@ +{ + "CN": "system:kube-proxy", + "hosts": [], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "HangZhou", + "L": "XS", + "O": "k8s", + "OU": "System" + } + ] +} diff --git a/roles/kube-node/templates/kube-proxy.service.j2 b/roles/kube-node/templates/kube-proxy.service.j2 new file mode 100644 index 0000000..a17d4b5 --- /dev/null +++ b/roles/kube-node/templates/kube-proxy.service.j2 @@ -0,0 +1,20 @@ +[Unit] +Description=Kubernetes Kube-Proxy Server +Documentation=https://github.com/GoogleCloudPlatform/kubernetes +After=network.target + +[Service] +WorkingDirectory=/var/lib/kube-proxy +ExecStart={{ bin_dir }}/kube-proxy \ + --bind-address={{ NODE_IP }} \ + --hostname-override={{ NODE_IP }} \ + --cluster-cidr={{ SERVICE_CIDR }} \ + --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ + --logtostderr=true \ + --v=2 +Restart=on-failure +RestartSec=5 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kube-node/templates/kubelet.service.j2 b/roles/kube-node/templates/kubelet.service.j2 new file mode 100644 index 0000000..cae5df2 --- /dev/null +++ b/roles/kube-node/templates/kubelet.service.j2 @@ -0,0 +1,37 @@ +[Unit] +Description=Kubernetes Kubelet +Documentation=https://github.com/GoogleCloudPlatform/kubernetes +After=docker.service +Requires=docker.service + +[Service] +WorkingDirectory=/var/lib/kubelet +#--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest +ExecStart={{ bin_dir }}/kubelet \ + --address={{ NODE_IP }} \ + --hostname-override={{ NODE_IP }} \ + --pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.0 \ + --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \ + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \ + --require-kubeconfig \ + --cert-dir={{ ca_dir }} \ + --network-plugin=cni \ + --cni-conf-dir=/etc/cni/net.d \ + --cni-bin-dir={{ bin_dir }} \ + --cluster-dns={{ CLUSTER_DNS_SVC_IP }} \ + --cluster-domain={{ CLUSTER_DNS_DOMAIN }} \ + --hairpin-mode promiscuous-bridge \ + --allow-privileged=true \ + --serialize-image-pulls=false \ + --logtostderr=true \ + --v=2 +#kubelet cAdvisor 默认在所有接口监听 4194 端口的请求, 以下iptables限制内网访问 +ExecStartPost=/sbin/iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 4194 -j ACCEPT +ExecStartPost=/sbin/iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 4194 -j ACCEPT +ExecStartPost=/sbin/iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 4194 -j ACCEPT +ExecStartPost=/sbin/iptables -A INPUT -p tcp --dport 4194 -j DROP +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/roles/kubectl/tasks/main.yml b/roles/kubectl/tasks/main.yml new file mode 100644 index 0000000..79a86ff --- /dev/null +++ b/roles/kubectl/tasks/main.yml @@ -0,0 +1,29 @@ +- name: 下载kubectl二进制 + copy: src={{ base_dir }}/bin/kubectl dest={{ bin_dir }}/kubectl mode=0755 + +- name: 准备kubectl使用的admin 证书签名请求 + template: src=admin-csr.json.j2 dest={{ ca_dir }}/admin-csr.json + +- name: 创建 admin证书与私钥 + shell: "cd {{ ca_dir }} && {{ bin_dir }}/cfssl gencert \ + -ca={{ ca_dir }}/ca.pem \ + -ca-key={{ ca_dir }}/ca-key.pem \ + -config={{ ca_dir }}/ca-config.json \ + -profile=kubernetes admin-csr.json | {{ bin_dir }}/cfssljson -bare admin" + +# 创建kubectl kubeconfig 文件 +- name: 设置集群参数 + shell: "{{ bin_dir }}/kubectl config set-cluster kubernetes \ + --certificate-authority={{ ca_dir }}/ca.pem \ + --embed-certs=true \ + --server={{ KUBE_APISERVER }}" +- name: 设置客户端认证参数 + shell: "{{ bin_dir }}/kubectl config set-credentials admin \ + --client-certificate={{ ca_dir }}/admin.pem \ + --embed-certs=true \ + --client-key={{ ca_dir }}/admin-key.pem" +- name: 设置上下文参数 + shell: "{{ bin_dir }}/kubectl config set-context kubernetes \ + --cluster=kubernetes --user=admin" +- name: 选择默认上下文 + shell: "{{ bin_dir }}/kubectl config use-context kubernetes" diff --git a/roles/kubectl/templates/admin-csr.json.j2 b/roles/kubectl/templates/admin-csr.json.j2 new file mode 100644 index 0000000..a6b8388 --- /dev/null +++ b/roles/kubectl/templates/admin-csr.json.j2 @@ -0,0 +1,17 @@ +{ + "CN": "admin", + "hosts": [], + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "ST": "HangZhou", + "L": "XS", + "O": "system:masters", + "OU": "System" + } + ] +} diff --git a/roles/lb/tasks/main.yml b/roles/lb/tasks/main.yml new file mode 100644 index 0000000..c3f5420 --- /dev/null +++ b/roles/lb/tasks/main.yml @@ -0,0 +1,29 @@ + +- name: 安装 haproxy + shell: "apt-get update && apt-get install haproxy -y" + +- name: 创建haproxy配置目录 + file: name=/etc/haproxy state=directory + +- name: 配置 haproxy + template: src=haproxy.cfg.j2 dest=/etc/haproxy/haproxy.cfg + +- name: 安装 keepalived + shell: "apt-get install keepalived -y" + +- name: 创建keepalived配置目录 + file: name=/etc/keepalived state=directory + +- name: 配置 keepalived 主节点 + template: src=keepalived-master.conf.j2 dest=/etc/keepalived/keepalived.conf + when: LB_ROLE == "master" + +- name: 配置 keepalived 备节点 + template: src=keepalived-backup.conf.j2 dest=/etc/keepalived/keepalived.conf + when: LB_ROLE == "backup" + +- name: 重启haproxy服务 + shell: systemctl enable haproxy && systemctl restart haproxy + +- name: 重启keepalived服务 + shell: systemctl enable keepalived && systemctl restart keepalived diff --git a/roles/lb/templates/haproxy.cfg.j2 b/roles/lb/templates/haproxy.cfg.j2 new file mode 100644 index 0000000..d13a9d2 --- /dev/null +++ b/roles/lb/templates/haproxy.cfg.j2 @@ -0,0 +1,24 @@ +global + log /dev/log local0 + log /dev/log local1 notice + chroot /var/lib/haproxy + stats socket /run/haproxy/admin.sock mode 660 level admin + stats timeout 30s + user haproxy + group haproxy + daemon + nbproc 1 + +defaults + log global + timeout connect 5000 + timeout client 50000 + timeout server 50000 + +listen kube-master + bind 0.0.0.0:{{ MASTER_PORT }} + mode tcp + option tcplog + balance source + server s1 {{ LB_EP1 }} check inter 10000 fall 2 rise 2 weight 1 + server s2 {{ LB_EP2 }} check inter 10000 fall 2 rise 2 weight 1 diff --git a/roles/lb/templates/keepalived-backup.conf.j2 b/roles/lb/templates/keepalived-backup.conf.j2 new file mode 100644 index 0000000..1cfd6ee --- /dev/null +++ b/roles/lb/templates/keepalived-backup.conf.j2 @@ -0,0 +1,15 @@ +global_defs { + router_id {{ LB_NAME }} +} + +vrrp_instance VI-kube-master { + state BACKUP + priority 110 + dont_track_primary + interface {{ LB_IF }} + virtual_router_id 51 + advert_int 3 + virtual_ipaddress { + {{ MASTER_IP }} + } +} diff --git a/roles/lb/templates/keepalived-master.conf.j2 b/roles/lb/templates/keepalived-master.conf.j2 new file mode 100644 index 0000000..827d155 --- /dev/null +++ b/roles/lb/templates/keepalived-master.conf.j2 @@ -0,0 +1,24 @@ +global_defs { + router_id {{ LB_NAME }} +} + +vrrp_script check-haproxy { + script "killall -0 haproxy" + interval 5 + weight -30 +} + +vrrp_instance VI-kube-master { + state MASTER + priority 120 + dont_track_primary + interface {{ LB_IF }} + virtual_router_id 51 + advert_int 3 + track_script { + check-haproxy + } + virtual_ipaddress { + {{ MASTER_IP }} + } +} diff --git a/roles/prepare/files/hosts.j2 b/roles/prepare/files/hosts.j2 new file mode 100644 index 0000000..0753519 --- /dev/null +++ b/roles/prepare/files/hosts.j2 @@ -0,0 +1,6774 @@ +127.0.0.1 localhost +10.100.97.200 harbor.tf56.lo + +# Modified hosts start + +# Armorgames Start +93.184.220.39 cache.armorgames.com +93.184.220.39 gamemedia.armorgames.com +93.184.220.39 quests.armorgames.com +93.184.220.39 armatars.armorgames.com +93.184.220.39 agi.armorgames.com + +# Armorgames End + +# Amazon AWS Start +54.239.31.69 aws.amazon.com +54.239.30.25 console.aws.amazon.com +54.239.96.90 ap-northeast-1.console.aws.amazon.com +54.240.226.81 ap-southeast-1.console.aws.amazon.com +54.240.193.125 ap-southeast-2.console.aws.amazon.com +54.239.38.102 eu-west-1.console.aws.amazon.com +54.239.54.102 eu-central-1.console.aws.amazon.com +54.231.49.3 s3.amazonaws.com +54.239.31.128 s3-console-us-standard.console.aws.amazon.com +52.219.0.4 s3-ap-northeast-1.amazonaws.com +54.231.242.170 s3-ap-southeast-1.amazonaws.com +54.231.251.21 s3-ap-southeast-2.amazonaws.com +52.218.16.140 s3-eu-west-1.amazonaws.com +54.231.193.37 s3-eu-central-1.amazonaws.com +52.92.72.2 s3-sa-east-1.amazonaws.com +54.231.236.6 s3-us-west-1.amazonaws.com +54.231.168.160 s3-us-west-2.amazonaws.com +177.72.244.194 sa-east-1.console.aws.amazon.com +176.32.114.59 us-west-1.console.aws.amazon.com +54.240.254.230 us-west-2.console.aws.amazon.com +52.216.80.48 github-cloud.s3.amazonaws.com +54.231.48.40 github-com.s3.amazonaws.com +# Amazon AWS End + +# Apkpure Start +104.20.82.194 apkpure.com +104.20.82.194 a.apkpure.com +104.20.82.194 download.apkpure.com +104.20.82.194 m.apkpure.com +104.20.82.194 static.apkpure.com +104.20.82.194 translate.apkpure.com +# Apkpure End + +# Archive Start +207.241.224.22 archive.org +207.241.224.22 www.archive.org +207.241.224.22 ia802704.us.archive.org +207.241.224.22 analytics.archive.org +207.241.226.190 web.archive.org +# Archive End + +# Box.com Start +74.112.184.70 app.box.com +74.112.184.85 m.box.com +# Box.com End + +# BundleStars Start +23.253.146.21 bundlestars.com +54.192.232.60 cdn-images.bundlestars.com +185.12.83.2 support.bundlestars.com +# BundleStars End + +# bandwagonhost.com Start +104.20.6.63 bandwagonhost.com +# bandwagonhost.com End + +# Disqus Start +151.101.100.134 disqus.com +151.101.100.134 www.disqus.com +151.101.100.134 content.disqus.com +151.101.100.134 referrer.disqus.com +151.101.100.134 docs.disqus.com +151.101.100.134 dropbox.disqus.com +151.101.100.134 apkpure.disqus.com +151.101.100.64 glitter.services.disqus.com +151.101.100.64 links.services.disqus.com +173.192.82.196 realtime.services.disqus.com +50.18.249.249 help.disqus.com +23.65.183.218 about.disqus.com +23.65.183.218 blog.disqus.com +23.65.183.218 publishers.disqus.com +# Disqus End + +# Dropbox Start +####### +# Warning: SNIProxy being used. +218.254.1.13 db.tt +218.254.1.13 dropbox.com +218.254.1.13 m.dropbox.com +218.254.1.13 www.v.dropbox.com +218.254.1.13 dl-debug.dropbox.com +####### +162.125.82.1 www.dropbox.com +52.85.76.60 linux.dropbox.com +108.160.172.193 d.dropbox.com +108.160.172.193 d.v.dropbox.com +162.125.18.132 dl-doc.dropbox.com +108.160.172.193 api-d.dropbox.com +108.160.172.237 api.dropboxapi.com +108.160.172.237 api.dropbox.com +108.160.172.237 api.v.dropbox.com +108.160.172.237 api-notify.dropbox.com +108.160.172.233 www.dropboxstatic.com +104.16.100.29 cfl.dropboxstatic.com +108.160.172.201 dbxlocal.dropboxstatic.com +199.47.217.36 api-content.dropbox.com +199.47.217.36 api-content-photos.dropbox.com +108.160.172.207 photos.dropbox.com +162.125.34.129 bolt.dropbox.com +162.125.17.129 photos-thumb.dropbox.com +162.125.17.129 photos-thumb.x.dropbox.com +199.47.217.97 block.dropbox.com +199.47.217.97 block.v.dropbox.com +54.230.214.100 cf.dropboxstatic.com +54.192.108.33 client-cf.dropbox.com +45.58.69.38 dl.dropbox.com +45.58.70.5 dl-web.dropbox.com +45.58.69.37 dl.dropboxusercontent.com +162.125.18.2 photos-1.dropbox.com +162.125.18.2 photos-2.dropbox.com +162.125.18.2 photos-3.dropbox.com +162.125.18.2 photos-4.dropbox.com +162.125.18.2 photos-5.dropbox.com +162.125.18.2 photos-6.dropbox.com +54.192.213.118 status.dropbox.com +54.192.213.118 marketing.dropbox.com +54.192.213.118 blogs.dropbox.com +54.192.213.118 forums.dropbox.com +54.192.213.118 snapengage.dropbox.com +162.125.32.129 notify.dropbox.com +108.160.172.236 client-lb.dropbox.com +108.160.172.236 client-web.dropbox.com +108.160.172.236 client.dropbox.com +108.160.172.236 client.v.dropbox.com +108.160.172.227 log.getdropbox.com +# Dropbox End + +# DuckDuckGo Start +46.51.216.186 duckduckgo.com +46.51.216.186 www.duckduckgo.com +46.51.216.186 ac.duckduckgo.com +54.251.178.52 icons.duckduckgo.com +54.251.178.52 images.duckduckgo.com +96.45.83.209 help.duckduckgo.com +# DuckDuckGo End + +# Facebook start +157.240.0.17 fb.me +157.240.0.17 facebook.com +157.240.0.17 www.facebook.com +157.240.0.17 m.facebook.com +157.240.0.17 mqtt.facebook.com +157.240.0.17 s-static.ak.facebook.com +23.76.153.42 static.ak.facebook.com +23.76.153.42 b.static.ak.facebook.com +157.240.0.17 graph.facebook.com +157.240.0.17 ssl.facebook.com +157.240.0.17 api.facebook.com +157.240.0.17 secure.facebook.com +157.240.0.17 zh-cn.facebook.com +157.240.0.17 login.facebook.com +157.240.0.17 attachments.facebook.com +157.240.0.17 touch.facebook.com +157.240.0.17 apps.facebook.com +157.240.0.17 upload.facebook.com +157.240.0.17 developers.facebook.com +157.240.0.17 beta-chat-01-05-ash3.facebook.com +157.240.0.17 channel-ecmp-05-ash3.facebook.com +157.240.0.17 channel-staging-ecmp-05-ash3.facebook.com +157.240.0.17 channel-testing-ecmp-05-ash3.facebook.com +157.240.0.17 0-edge-chat.facebook.com +157.240.0.17 1-edge-chat.facebook.com +157.240.0.17 2-edge-chat.facebook.com +157.240.0.17 3-edge-chat.facebook.com +157.240.0.17 4-edge-chat.facebook.com +157.240.0.17 5-edge-chat.facebook.com +157.240.0.17 6-edge-chat.facebook.com +157.240.0.17 api-read.facebook.com +157.240.0.17 bigzipfiles.facebook.com +157.240.0.17 check4.facebook.com +157.240.0.17 check6.facebook.com +157.240.0.17 code.facebook.com +157.240.0.17 connect.facebook.com +157.240.0.17 edge-chat.facebook.com +157.240.0.17 pixel.facebook.com +157.240.0.17 star.c10r.facebook.com +157.240.0.17 star.facebook.com +157.240.0.17 zh-tw.facebook.com +157.240.0.17 b-api.facebook.com +157.240.0.17 b-graph.facebook.com +157.240.0.17 orcart.facebook.com +157.240.0.17 s-static.facebook.com +157.240.0.17 vupload.facebook.com +157.240.0.17 vupload2.facebook.com +157.240.0.17 d.facebook.com +157.240.0.17 fbcdn.net +31.13.95.14 scontent.xx.fbcdn.net +31.13.95.14 scontent-a.xx.fbcdn.net +31.13.95.14 scontent-b.xx.fbcdn.net +31.13.95.14 scontent-c.xx.fbcdn.net +31.13.95.14 scontent-d.xx.fbcdn.net +31.13.95.14 scontent-e.xx.fbcdn.net +31.13.95.14 scontent-mxp.xx.fbcdn.net +31.13.95.14 scontent-a-lax.xx.fbcdn.net +31.13.95.14 scontent-a-sin.xx.fbcdn.net +31.13.95.14 scontent-b-lax.xx.fbcdn.net +31.13.95.14 scontent-b-sin.xx.fbcdn.net +31.13.95.14 ent-a.xx.fbcdn.net +31.13.95.14 ent-b.xx.fbcdn.net +31.13.95.14 ent-c.xx.fbcdn.net +31.13.95.14 ent-d.xx.fbcdn.net +31.13.95.14 ent-e.xx.fbcdn.net +23.207.122.24 s-external.ak.fbcdn.net +23.34.45.177 s-static.ak.fbcdn.net +157.240.0.17 static.thefacebook.com +157.240.0.17 attachment.fbsbx.com +31.13.73.7 staticxx.facebook.com +31.13.73.7 connect.facebook.net +192.0.78.13 live.fb.com +192.0.78.13 work.fb.com +192.0.78.13 techprep.fb.com +192.0.78.13 nonprofits.fb.com +192.0.78.13 managingbias.fb.com +192.0.78.13 rightsmanager.fb.com +192.0.78.13 instantarticles.fb.com +192.0.66.2 messengerplatform.fb.com +199.201.64.67 threatexchange.fb.com +31.13.95.14 video.xx.fbcdn.net +184.28.188.10 fbcdn-sphotos-b-a.akamaihd.net +184.28.188.10 vthumb.ak.fbcdn.net +184.28.188.10 photos-a.ak.fbcdn.net +184.28.188.10 photos-b.ak.fbcdn.net +184.28.188.10 photos-c.ak.fbcdn.net +184.28.188.10 photos-d.ak.fbcdn.net +184.28.188.10 photos-e.ak.fbcdn.net +184.28.188.10 photos-f.ak.fbcdn.net +184.28.188.10 photos-g.ak.fbcdn.net +184.28.188.10 photos-h.ak.fbcdn.net +184.28.188.10 creative.ak.fbcdn.net +184.28.188.10 external.ak.fbcdn.net +184.28.188.10 b.static.ak.fbcdn.net +184.28.188.10 static.ak.fbcdn.net +184.28.188.10 profile.ak.fbcdn.net +# Facebook end + +# FlipBoard start +54.225.64.251 beacon.flipboard.com +54.225.64.251 fbprod.flipboard.com +# FlipBoard End + +# Github start +192.30.253.113 gist.github.com +# Github end + +# Gmail web Start +61.91.161.217 chatenabled.mail.google.com +61.91.161.217 filetransferenabled.mail.google.com +61.91.161.217 gmail.com +61.91.161.217 gmail.google.com +61.91.161.217 googlemail.l.google.com +61.91.161.217 inbox.google.com +61.91.161.217 isolated.mail.google.com +61.91.161.217 m.gmail.com +61.91.161.217 m.googlemail.com +61.91.161.217 mail.google.com +61.91.161.217 www.gmail.com +61.91.161.217 mail-settings.google.com +64.233.188.121 m.android.com +# Gmail web End + +# Google Start +61.91.161.217 www.google.com +61.91.161.217 google.com +61.91.161.217 gcr.io +61.91.161.217 www.gcr.io +61.91.161.217 com.google +61.91.161.217 admin.google.com +61.91.161.217 accounts.google.com +61.91.161.217 accounts.google.cn +61.91.161.217 aboutme.google.com +61.91.161.217 atap.google.com +61.91.161.217 assistant.google.com +61.91.161.217 passwords.google.com +61.91.161.217 privacy.google.com +61.91.161.217 takeout.google.com +61.91.161.217 bpui0.google.com +61.91.161.217 cse.google.com +61.91.161.217 clients1.google.com +61.91.161.217 clients2.google.com +61.91.161.217 clients3.google.com +61.91.161.217 clients4.google.com +61.91.161.217 clients5.google.com +61.91.161.217 clients6.google.com +61.91.161.217 clouderrorreporting.clients6.google.com +61.91.161.217 datastore.clients6.google.com +61.91.161.217 contributor.google.com +61.91.161.217 dns.google.com +61.91.161.217 desktop.google.com +61.91.161.217 desktop2.google.com +61.91.161.217 encrypted.google.com +61.91.161.217 encrypted-tbn0.google.com +61.91.161.217 encrypted-tbn1.google.com +61.91.161.217 encrypted-tbn2.google.com +61.91.161.217 encrypted-tbn3.google.com +61.91.161.217 fi.google.com +61.91.161.217 fit.google.com +61.91.161.217 fonts.google.com +61.91.161.217 goto.google.com +61.91.161.217 gxc.google.com +61.91.161.217 get.google.com +61.91.161.217 gsuite.google.com +61.91.161.217 history.google.com +61.91.161.217 myactivity.google.com +61.91.161.217 isp.google.com +61.91.161.217 investor.google.com +61.91.161.217 jmt0.google.com +61.91.161.217 keep.google.com +61.91.161.217 linkhelp.clients.google.com +61.91.161.217 upload.clients.google.com +61.91.161.217 myaccount.google.com +61.91.161.217 peering.google.com +61.91.161.217 places.google.com +61.91.161.217 pki.google.com +61.91.161.217 patents.google.com +61.91.161.217 script.google.com +61.91.161.217 security.google.com +61.91.161.217 services.google.com +61.91.161.217 store.google.com +61.91.161.217 suggestqueries.google.com +61.91.161.217 support.google.com +61.91.161.217 upload.google.com +61.91.161.217 uploads.clients.google.com +61.91.161.217 video.google.com +61.91.161.217 video-stats.video.google.com +61.91.161.217 voice.google.com +61.91.161.217 upload.video.google.com +61.91.161.217 ads.google.com +61.91.161.217 www.googlegroups.com +61.91.161.217 a.orkut.gmodules.com +61.91.161.217 www.googlestore.com +61.91.161.217 ig.ig.gmodules.com +61.91.161.217 redirector.c.youtube.com +61.91.161.217 relay.google.com +61.91.161.217 image.google.com +61.91.161.217 mapsengine.google.com +61.91.161.217 client-channel.google.com +61.91.161.217 0.client-channel.google.com +61.91.161.217 1.client-channel.google.com +61.91.161.217 2.client-channel.google.com +61.91.161.217 3.client-channel.google.com +61.91.161.217 4.client-channel.google.com +61.91.161.217 5.client-channel.google.com +61.91.161.217 6.client-channel.google.com +61.91.161.217 7.client-channel.google.com +61.91.161.217 8.client-channel.google.com +61.91.161.217 9.client-channel.google.com +61.91.161.217 10.client-channel.google.com +61.91.161.217 11.client-channel.google.com +61.91.161.217 12.client-channel.google.com +61.91.161.217 13.client-channel.google.com +61.91.161.217 14.client-channel.google.com +61.91.161.217 15.client-channel.google.com +61.91.161.217 16.client-channel.google.com +61.91.161.217 17.client-channel.google.com +61.91.161.217 18.client-channel.google.com +61.91.161.217 19.client-channel.google.com +61.91.161.217 20.client-channel.google.com +61.91.161.217 21.client-channel.google.com +61.91.161.217 22.client-channel.google.com +61.91.161.217 23.client-channel.google.com +61.91.161.217 24.client-channel.google.com +61.91.161.217 25.client-channel.google.com +61.91.161.217 26.client-channel.google.com +61.91.161.217 27.client-channel.google.com +61.91.161.217 28.client-channel.google.com +61.91.161.217 29.client-channel.google.com +61.91.161.217 cello.client-channel.google.com +61.91.161.217 google.com.hk +61.91.161.217 www.google.com.hk +61.91.161.217 accounts.google.com.hk +61.91.161.217 clients1.google.com.hk +61.91.161.217 desktop.google.com.hk +61.91.161.217 gxc.google.com.hk +61.91.161.217 video.google.com.hk +61.91.161.217 id.google.com.hk +61.91.161.217 mobile.google.com.hk +61.91.161.217 picasaweb.google.com.hk +61.91.161.217 www.googlechinawebmaster.com +61.91.161.217 google.com.tw +61.91.161.217 www.google.com.tw +61.91.161.217 accounts.google.com.tw +61.91.161.217 books.google.com.tw +61.91.161.217 clients1.google.com.tw +61.91.161.217 desktop.google.com.tw +61.91.161.217 groups.google.com.tw +61.91.161.217 gxc.google.com.tw +61.91.161.217 id.google.com.tw +61.91.161.217 images.google.com.tw +61.91.161.217 picasaweb.google.com.tw +61.91.161.217 toolbar.google.com.tw +61.91.161.217 toolbarqueries.google.com.tw +61.91.161.217 video.google.com.tw +61.91.161.217 google.co.jp +61.91.161.217 www.google.co.jp +61.91.161.217 accounts.google.co.jp +61.91.161.217 blogsearch.google.co.jp +61.91.161.217 books.google.co.jp +61.91.161.217 clients1.google.co.jp +61.91.161.217 desktop.google.co.jp +61.91.161.217 groups.google.co.jp +61.91.161.217 images.google.co.jp +61.91.161.217 maps.google.co.jp +61.91.161.217 news.google.co.jp +61.91.161.217 picasaweb.google.co.jp +61.91.161.217 scholar.google.co.jp +61.91.161.217 toolbar.google.co.jp +61.91.161.217 toolbarqueries.google.co.jp +61.91.161.217 translate.google.co.jp +61.91.161.217 google.com.sg +61.91.161.217 www.google.com.sg +61.91.161.217 accounts.google.com.sg +61.91.161.217 blogsearch.google.com.sg +61.91.161.217 books.google.com.sg +61.91.161.217 clients1.google.com.sg +61.91.161.217 desktop.google.com.sg +61.91.161.217 groups.google.com.sg +61.91.161.217 gxc.google.com.sg +61.91.161.217 id.google.com.sg +61.91.161.217 images.google.com.sg +61.91.161.217 maps.google.com.sg +61.91.161.217 news.google.com.sg +61.91.161.217 scholar.google.com.sg +61.91.161.217 toolbar.google.com.sg +61.91.161.217 toolbarqueries.google.com.sg +61.91.161.217 translate.google.com.sg +61.91.161.217 apps.google.com +61.91.161.217 googlemashups.com +61.91.161.217 www.googlemashups.com +61.91.161.217 appengine.google.com +61.91.161.217 uploads.stage.gdata.youtube.com +61.91.161.217 answers.google.com +61.91.161.217 wenda.google.com.hk +61.91.161.217 analytics.googleblog.com +61.91.161.217 android.googleblog.com +61.91.161.217 research.googleblog.com +61.91.161.217 security.googleblog.com +61.91.161.217 gmail.googleblog.com +61.91.161.217 chrome.googleblog.com +61.91.161.217 search.googleblog.com +61.91.161.217 webmasters.googleblog.com +61.91.161.217 maps.googleblog.com +61.91.161.217 cloudplatform.googleblog.com +61.91.161.217 youtube.googleblog.com +61.91.161.217 blogsearch.google.com +61.91.161.217 blogsearch.google.com.hk +61.91.161.217 blogsearch.google.com.tw +61.91.161.217 accounts.blogger.com +61.91.161.217 www.blogger.com +61.91.161.217 blogger.com +61.91.161.217 www.googleblog.com +61.91.161.217 googleblog.com +61.91.161.217 blogger.google.com +61.91.161.217 www2.blogger.com +61.91.161.217 www.blogblog.com +61.91.161.217 www1.blogblog.com +61.91.161.217 www2.blogblog.com +61.91.161.217 beta.blogger.com +61.91.161.217 buttons.blogger.com +61.91.161.217 buzz.blogger.com +61.91.161.217 draft.blogger.com +61.91.161.217 status.blogger.com +61.91.161.217 help.blogger.com +61.91.161.217 photos1.blogger.com +61.91.161.217 bp0.blogger.com +61.91.161.217 bp1.blogger.com +61.91.161.217 bp2.blogger.com +61.91.161.217 bp3.blogger.com +61.91.161.217 img.blogblog.com +61.91.161.217 img1.blogblog.com +61.91.161.217 img2.blogblog.com +61.91.161.217 resources.blogblog.com +61.91.161.217 www.textcube.com +61.91.161.217 www.blogspot.com +61.91.161.217 blogspot.com +61.91.161.217 1.bp.blogspot.com +61.91.161.217 2.bp.blogspot.com +61.91.161.217 3.bp.blogspot.com +61.91.161.217 4.bp.blogspot.com +61.91.161.217 googleblog.blogspot.com +61.91.161.217 googleforstudents.blogspot.com +61.91.161.217 students.googleblog.com +61.91.161.217 chrome.blogspot.com +61.91.161.217 google-latlong.blogspot.com +61.91.161.217 insidesearch.blogspot.com +61.91.161.217 googleadsdeveloper.blogspot.com +61.91.161.217 officialandroid.blogspot.com +61.91.161.217 android-developers.blogspot.com +61.91.161.217 android-developers.blogspot.hk +61.91.161.217 developers.googleblog.com +61.91.161.217 books.google.com +61.91.161.217 books.google.com.hk +61.91.161.217 buzz.google.com +61.91.161.217 calendar.google.com +61.91.161.217 checkout.google.com +61.91.161.217 wallet.google.com +61.91.161.217 chrome.com +61.91.161.217 www.chrome.com +61.91.161.217 developer.chrome.com +61.91.161.217 www.chromestatus.com +61.91.161.217 chrome.google.com +61.91.161.217 browsersync.google.com +61.91.161.217 toolbarqueries.google.com.hk +61.91.161.217 toolbarqueries.clients.google.com +61.91.161.217 chromium.org +61.91.161.217 www.chromium.org +61.91.161.217 cs.chromium.org +61.91.161.217 dev.chromium.org +61.91.161.217 blog.chromium.org +64.233.188.121 bugs.chromium.org +61.91.161.217 www.appspot.com +61.91.161.217 appspot.com +61.91.161.217 apis-explorer.appspot.com +61.91.161.217 betaspike.appspot.com +61.91.161.217 hstspreload.appspot.com +61.91.161.217 chrome-devtools-frontend.appspot.com +61.91.161.217 chrometophone.appspot.com +61.91.161.217 download-chromium.appspot.com +61.91.161.217 jmoore-dot-android-experiments.appspot.com +61.91.161.217 lfe-alpo-gm.appspot.com +61.91.161.217 m-dot-betaspike.appspot.com +61.91.161.217 accounts.google.com.gi +61.91.161.217 accounts.google.co.nz +61.91.161.217 id.google.co.nz +61.91.161.217 www.googlecode.com +61.91.161.217 fuchsia.googlesource.com +61.91.161.217 googlesource.com +61.91.161.217 gerrit.googlesource.com +61.91.161.217 chromium.googlesource.com +61.91.161.217 kernel.googlesource.com +61.91.161.217 android-review.googlesource.com +61.91.161.217 r.android.com +61.91.161.217 gwt.googlesource.com +61.91.161.217 code.google.com +61.91.161.217 uploads.code.google.com +61.91.161.217 chromium.googlecode.com +61.91.161.217 closure-library.googlecode.com +61.91.161.217 earth-api-samples.googlecode.com +61.91.161.217 gmaps-samples-flash.googlecode.com +61.91.161.217 googleappengine.googlecode.com +61.91.161.217 google-code-feed-gadget.googlecode.com +61.91.161.217 google-code-prettify.googlecode.com +61.91.161.217 www.googlesource.com +61.91.161.217 android.googlesource.com +61.91.161.217 cloud.google.com +61.91.161.217 packages.cloud.google.com +61.91.161.217 console.cloud.google.com +61.91.161.217 status.cloud.google.com +61.91.161.217 ssh.cloud.google.com +61.91.161.217 developers.google.com +61.91.161.217 cloudssh.developers.google.com +61.91.161.217 codelabs.developers.google.com +61.91.161.217 console.developers.google.com +61.91.161.217 source.developers.google.com +61.91.161.217 cla.developers.google.com +61.91.161.217 design.google.com +61.91.161.217 directory.google.com +61.91.161.217 dir.google.com +61.91.161.217 events.google.com +61.91.161.217 googledrive.com +61.91.161.217 docs.google.com +61.91.161.217 drive.google.com +61.91.161.217 docs0.google.com +61.91.161.217 docs1.google.com +61.91.161.217 docs2.google.com +61.91.161.217 docs3.google.com +61.91.161.217 docs4.google.com +61.91.161.217 docs5.google.com +61.91.161.217 docs6.google.com +61.91.161.217 docs7.google.com +61.91.161.217 docs8.google.com +61.91.161.217 docs9.google.com +61.91.161.217 firebase.google.com +61.91.161.217 material.google.com +61.91.161.217 writely.google.com +61.91.161.217 upload.docs.google.com +61.91.161.217 upload.drive.google.com +61.91.161.217 0.docs.google.com +61.91.161.217 1.docs.google.com +61.91.161.217 2.docs.google.com +61.91.161.217 3.docs.google.com +61.91.161.217 4.docs.google.com +61.91.161.217 5.docs.google.com +61.91.161.217 6.docs.google.com +61.91.161.217 7.docs.google.com +61.91.161.217 8.docs.google.com +61.91.161.217 9.docs.google.com +61.91.161.217 10.docs.google.com +61.91.161.217 11.docs.google.com +61.91.161.217 12.docs.google.com +61.91.161.217 13.docs.google.com +61.91.161.217 14.docs.google.com +61.91.161.217 15.docs.google.com +61.91.161.217 16.docs.google.com +61.91.161.217 0.drive.google.com +61.91.161.217 1.drive.google.com +61.91.161.217 2.drive.google.com +61.91.161.217 3.drive.google.com +61.91.161.217 4.drive.google.com +61.91.161.217 5.drive.google.com +61.91.161.217 6.drive.google.com +61.91.161.217 7.drive.google.com +61.91.161.217 8.drive.google.com +61.91.161.217 9.drive.google.com +61.91.161.217 10.drive.google.com +61.91.161.217 11.drive.google.com +61.91.161.217 12.drive.google.com +61.91.161.217 13.drive.google.com +61.91.161.217 14.drive.google.com +61.91.161.217 15.drive.google.com +61.91.161.217 16.drive.google.com +61.91.161.217 spreadsheet.google.com +61.91.161.217 spreadsheets.google.com +61.91.161.217 spreadsheets0.google.com +61.91.161.217 spreadsheets1.google.com +61.91.161.217 spreadsheets2.google.com +61.91.161.217 spreadsheets3.google.com +61.91.161.217 spreadsheets4.google.com +61.91.161.217 spreadsheets5.google.com +61.91.161.217 spreadsheets6.google.com +61.91.161.217 spreadsheets7.google.com +61.91.161.217 spreadsheets8.google.com +61.91.161.217 spreadsheets9.google.com +61.91.161.217 drivenotepad.appspot.com +61.91.161.217 8c953efe117cb4ee14eaffe2b417623a104ce4e6.googledrive.com +61.91.161.217 v3.cache1.c.docs.google.com +61.91.161.217 domains.google.com +61.91.161.217 dl-ssl.google.com +61.91.161.217 earth.google.com +61.91.161.217 auth.keyhole.com +61.91.161.217 geoauth.google.com +61.91.161.217 finance.google.com +61.91.161.217 fusion.google.com +61.91.161.217 groups.google.com +61.91.161.217 groups.google.com.hk +61.91.161.217 groups-beta.google.com +61.91.161.217 productforums.google.com +61.91.161.217 a77db9aa-a-7b23c8ea-s-sites.googlegroups.com +61.91.161.217 blob-s-docs.googlegroups.com +61.91.161.217 health.google.com +61.91.161.217 images.google.com +61.91.161.217 images.google.com.hk +61.91.161.217 tbn0.google.com +61.91.161.217 tbn1.google.com +61.91.161.217 tbn2.google.com +61.91.161.217 tbn3.google.com +61.91.161.217 inputtools.google.com +61.91.161.217 knol.google.com +61.91.161.217 mars.google.com +61.91.161.217 maps.google.com +61.91.161.217 maps.google.com.hk +61.91.161.217 maps.google.com.tw +61.91.161.217 local.google.com +61.91.161.217 ditu.google.com +61.91.161.217 maps-api-ssl.google.com +61.91.161.217 map.google.com +61.91.161.217 cbk0.google.com +61.91.161.217 cbk1.google.com +61.91.161.217 cbk2.google.com +61.91.161.217 cbk3.google.com +61.91.161.217 khms.google.com +61.91.161.217 khms0.google.com +61.91.161.217 khms1.google.com +61.91.161.217 khms2.google.com +61.91.161.217 khms3.google.com +61.91.161.217 cbks0.google.com +61.91.161.217 cbks1.google.com +61.91.161.217 cbks2.google.com +61.91.161.217 cbks3.google.com +61.91.161.217 ipv4.google.com +61.91.161.217 mw1.google.com +61.91.161.217 mw2.google.com +61.91.161.217 mt.google.com +61.91.161.217 mt0.google.com +61.91.161.217 mt1.google.com +61.91.161.217 mt2.google.com +61.91.161.217 mt3.google.com +61.91.161.217 gg.google.com +61.91.161.217 id.google.com +61.91.161.217 mts.google.com +61.91.161.217 mts0.google.com +61.91.161.217 mts1.google.com +61.91.161.217 mts2.google.com +61.91.161.217 mts3.google.com +61.91.161.217 mobilemaps.clients.google.com +61.91.161.217 music.google.com +61.91.161.217 music.googleusercontent.com +61.91.161.217 scholar.googleusercontent.com +61.91.161.217 uploadsj.clients.google.com +61.91.161.217 news.google.com +61.91.161.217 news.google.com.hk +61.91.161.217 news.google.com.tw +61.91.161.217 orkut.google.com +61.91.161.217 www.orkut.gmodules.com +61.91.161.217 pack.google.com +61.91.161.217 photos.google.com +61.91.161.217 picasa.google.com +61.91.161.217 picasaweb.google.com +61.91.161.217 lh2.google.com +61.91.161.217 lh3.google.com +61.91.161.217 lh4.google.com +61.91.161.217 lh5.google.com +61.91.161.217 lh6.google.com +61.91.161.217 upload.photos.google.com +61.91.161.217 profiles.google.com +61.91.161.217 plusone.google.com +61.91.161.217 plus.google.com +61.91.161.217 plus.url.google.com +61.91.161.217 spaces.google.com +61.91.161.217 pixel.google.com +61.91.161.217 madeby.google.com +61.91.161.217 vr.google.com +61.91.161.217 reader.google.com +61.91.161.217 research.google.com +61.91.161.217 sb.google.com +61.91.161.217 sb-ssl.google.com +61.91.161.217 safebrowsing.google.com +61.91.161.217 search.google.com +61.91.161.217 alt1-safebrowsing.google.com +61.91.161.217 safebrowsing.clients.google.com +61.91.161.217 safebrowsing-cache.google.com +61.91.161.217 sandbox.google.com +61.91.161.217 scholar.google.com +61.91.161.217 scholar.google.com.hk +61.91.161.217 scholar.google.com.tw +61.91.161.217 sites.google.com +61.91.161.217 sketchup.google.com +61.91.161.217 talkgadget.google.com +61.91.161.217 tools.google.com +61.91.161.217 toolbar.google.com +61.91.161.217 toolbar.google.com.hk +61.91.161.217 translate.google.com +61.91.161.217 translate.google.com.hk +61.91.161.217 translate.google.com.tw +61.91.161.217 trends.google.com +61.91.161.217 0.gvt0.com +61.91.161.217 1.gvt0.com +61.91.161.217 2.gvt0.com +61.91.161.217 3.gvt0.com +61.91.161.217 4.gvt0.com +61.91.161.217 5.gvt0.com +61.91.161.217 wave.google.com +61.91.161.217 wave1.google.com +61.91.161.217 googlewave.com +61.91.161.217 wifi.google.com +61.91.161.217 gmodules.com +61.91.161.217 www.gmodules.com +61.91.161.217 www.ig.gmodules.com +61.91.161.217 ig.gmodules.com +61.91.161.217 ads.gmodules.com +61.91.161.217 p.gmodules.com +61.91.161.217 1.ig.gmodules.com +61.91.161.217 2.ig.gmodules.com +61.91.161.217 3.ig.gmodules.com +61.91.161.217 4.ig.gmodules.com +61.91.161.217 5.ig.gmodules.com +61.91.161.217 6.ig.gmodules.com +61.91.161.217 maps.gmodules.com +61.91.161.217 img0.gmodules.com +61.91.161.217 img1.gmodules.com +61.91.161.217 img2.gmodules.com +61.91.161.217 img3.gmodules.com +61.91.161.217 skins.gmodules.com +61.91.161.217 friendconnect.gmodules.com +61.91.161.217 0.blogger.gmodules.com +61.91.161.217 partnerpage.google.com +61.91.161.217 apis.google.com +61.91.161.217 domains.google +61.91.161.217 www.registry.google +61.91.161.217 www.domains.google +61.91.161.217 registry.google +61.91.161.217 apikeys.clients6.google.com +61.91.161.217 servicemanagement.clients6.google.com +61.91.161.217 cloudconsole-pa.clients6.google.com +61.91.161.217 iam.clients6.google.com +61.91.161.217 clientauthconfig.clients6.google.com +61.91.161.217 realtimesupport.clients6.google.com +61.91.161.217 360suite.google.com +61.91.161.217 optimize.google.com +216.58.203.85 attribution.google.com +61.91.161.217 audiencecenter.google.com +61.91.161.217 datastudio.google.com +61.91.161.217 studykit.google.com +61.91.161.217 business.google.com +61.91.161.217 google-analytics.com +61.91.161.217 artsandculture.google.com + +# gstatic Start +61.91.161.217 geo0.ggpht.com +61.91.161.217 geo1.ggpht.com +61.91.161.217 geo2.ggpht.com +61.91.161.217 geo3.ggpht.com +61.91.161.217 gm1.ggpht.com +61.91.161.217 gm2.ggpht.com +61.91.161.217 gm3.ggpht.com +61.91.161.217 gm4.ggpht.com +61.91.161.217 lh3.ggpht.com +61.91.161.217 lh4.ggpht.com +61.91.161.217 lh5.ggpht.com +61.91.161.217 lh6.ggpht.com +61.91.161.217 nt0.ggpht.com +61.91.161.217 nt1.ggpht.com +61.91.161.217 nt2.ggpht.com +61.91.161.217 nt3.ggpht.com +61.91.161.217 yt3.ggpht.com +61.91.161.217 yt4.ggpht.com +61.91.161.217 accounts.gstatic.com +61.91.161.217 maps.gstatic.com +61.91.161.217 ssl.gstatic.com +61.91.161.217 www.gstatic.com +61.91.161.217 encrypted-tbn0.gstatic.com +61.91.161.217 encrypted-tbn1.gstatic.com +61.91.161.217 encrypted-tbn2.gstatic.com +61.91.161.217 encrypted-tbn3.gstatic.com +61.91.161.217 g0.gstatic.com +61.91.161.217 g1.gstatic.com +61.91.161.217 g2.gstatic.com +61.91.161.217 g3.gstatic.com +61.91.161.217 mt0.gstatic.com +61.91.161.217 mt1.gstatic.com +61.91.161.217 mt2.gstatic.com +61.91.161.217 mt3.gstatic.com +61.91.161.217 mt4.gstatic.com +61.91.161.217 mt5.gstatic.com +61.91.161.217 mt6.gstatic.com +61.91.161.217 mt7.gstatic.com +61.91.161.217 t0.gstatic.com +61.91.161.217 t1.gstatic.com +61.91.161.217 t2.gstatic.com +61.91.161.217 t3.gstatic.com +# gstatic End + +# Googleapis Start +61.91.161.217 chart.apis.google.com +61.91.161.217 googleapis.com +61.91.161.217 www.googleapis.com +61.91.161.217 ajax.googleapis.com +61.91.161.217 android.googleapis.com +61.91.161.217 bigcache.googleapis.com +61.91.161.217 chart.googleapis.com +61.91.161.217 content.googleapis.com +61.91.161.217 khms0.googleapis.com +61.91.161.217 khms1.googleapis.com +61.91.161.217 maps.googleapis.com +61.91.161.217 origin-commondatastorage.googleapis.com +216.58.221.144 commondatastorage.googleapis.com +61.91.161.217 play.googleapis.com +61.91.161.217 plus.googleapis.com +61.91.161.217 redirector-bigcache.googleapis.com +61.91.161.217 youtube.googleapis.com +61.91.161.217 youtubei.googleapis.com +61.91.161.217 mt0.googleapis.com +61.91.161.217 mt1.googleapis.com +61.91.161.217 mt2.googleapis.com +61.91.161.217 mt3.googleapis.com +61.91.161.217 mts0.googleapis.com +61.91.161.217 mts1.googleapis.com +61.91.161.217 mts2.googleapis.com +61.91.161.217 mts3.googleapis.com +61.91.161.217 ct.googleapis.com +61.91.161.217 securetoken.googleapis.com +61.91.161.217 firebasestorage.googleapis.com +61.91.161.217 www--google--com.safenup.googleusercontent.com +61.91.161.217 www--google--com--hk.safenup.googleusercontent.com +64.233.188.121 code.getmdl.io +64.233.189.128 storage.googleapis.com +# Googleapis End + +61.91.161.217 www.googlehosted.com +61.91.161.217 base.googlehosted.com +61.91.161.217 base0.googlehosted.com +61.91.161.217 base1.googlehosted.com +61.91.161.217 base2.googlehosted.com +61.91.161.217 base3.googlehosted.com +61.91.161.217 base4.googlehosted.com +61.91.161.217 base5.googlehosted.com +61.91.161.217 analytics.google.com +61.91.161.217 www.googleartproject.com +61.91.161.217 feedburner.google.com +61.91.161.217 www.feedburner.com +61.91.161.217 feeds.feedburner.com +61.91.161.217 feeds2.feedburner.com +61.91.161.217 feedproxy.google.com +61.91.161.217 go.googlesource.com +61.91.161.217 golang.org +61.91.161.217 www.golang.org +61.91.161.217 blog.golang.org +61.91.161.217 play.golang.org +61.91.161.217 tip.golang.org +61.91.161.217 tour.golang.org +74.125.28.14 google.golang.org +61.91.161.217 goo.gl +61.91.161.217 pay.app.goo.gl +61.91.161.217 g.co +61.91.161.217 www.google.org +61.91.161.217 blog.google.org +216.58.208.151 panoramio.com +216.58.208.151 www.panoramio.com +64.233.189.128 static.panoramio.com +61.91.161.217 blog.panoramio.com +61.91.161.217 www.recaptcha.net +61.91.161.217 api.recaptcha.net +61.91.161.217 api-secure.recaptcha.net +61.91.161.217 mailhide.recaptcha.net +61.91.161.217 webmproject.org +61.91.161.217 www.webmproject.org +61.91.161.217 www.chromercise.com +61.91.161.217 www.data-vocabulary.org +61.91.161.217 www.googleinsidesearch.com +61.91.161.217 www.teachparentstech.org +61.91.161.217 www.thinkwithgoogle.com +61.91.161.217 www.oneworldmanystories.com +61.91.161.217 www.l.google.com +61.91.161.217 www2.l.google.com +61.91.161.217 www3.l.google.com +61.91.161.217 www4.l.google.com +61.91.161.217 accounts.l.google.com +61.91.161.217 accounts-cctld.l.google.com +61.91.161.217 android-market.l.google.com +61.91.161.217 android.l.google.com +61.91.161.217 android-china.l.google.com +61.91.161.217 adwords.l.google.com +61.91.161.217 appspot.l.google.com +61.91.161.217 aspmx.l.google.com +61.91.161.217 b.googlemail.l.google.com +61.91.161.217 blogger.l.google.com +61.91.161.217 bloggerphotos.l.google.com +61.91.161.217 browsersync.l.google.com +61.91.161.217 browserchannel-docs.l.google.com +61.91.161.217 cbk.l.google.com +61.91.161.217 code.l.google.com +61.91.161.217 checkout.l.google.com +61.91.161.217 clients.l.google.com +61.91.161.217 clients-cctld.l.google.com +61.91.161.217 csi.l.google.com +61.91.161.217 desktop.l.google.com +61.91.161.217 dl-ssl.l.google.com +61.91.161.217 encrypted-tbn.l.google.com +61.91.161.217 gadgets.l.google.com +61.91.161.217 googleapis.l.google.com +61.91.161.217 googlecode.l.google.com +61.91.161.217 googlehosted.l.google.com +61.91.161.217 groups.l.google.com +61.91.161.217 history.l.google.com +61.91.161.217 id.l.google.com +61.91.161.217 images.l.google.com +61.91.161.217 ipv4.l.google.com +61.91.161.217 khms.l.google.com +61.91.161.217 large-uploads.l.google.com +61.91.161.217 maps.l.google.com +61.91.161.217 maps-cctld.l.google.com +61.91.161.217 mt.l.google.com +61.91.161.217 mts.l.google.com +61.91.161.217 music-china.l.google.com +61.91.161.217 music-streaming.l.google.com +61.91.161.217 mw-medium.l.google.com +61.91.161.217 mw-small.l.google.com +61.91.161.217 news.l.google.com +61.91.161.217 pagead-tpc.l.google.com +61.91.161.217 picasaweb.l.google.com +61.91.161.217 plus.l.google.com +61.91.161.217 photos-ugc.l.google.com +61.91.161.217 sandbox.l.google.com +61.91.161.217 safebrowsing.cache.l.google.com +61.91.161.217 sb.l.google.com +61.91.161.217 sb-ssl.l.google.com +61.91.161.217 scholar.l.google.com +61.91.161.217 sketchup.l.google.com +61.91.161.217 spreadsheets.l.google.com +61.91.161.217 spreadsheets-china.l.google.com +61.91.161.217 sslvideo-upload.l.google.com +61.91.161.217 suggestqueries.l.google.com +61.91.161.217 tbn.l.google.com +61.91.161.217 tools.l.google.com +61.91.161.217 video.l.google.com +61.91.161.217 googlecl.googlecode.com +61.91.161.217 video-stats.l.google.com +61.91.161.217 video-analytics.l.google.com +61.91.161.217 video-thumbnails.l.google.com +61.91.161.217 wifi.l.google.com +61.91.161.217 writely.l.google.com +61.91.161.217 writely-china.l.google.com +61.91.161.217 www3-china.l.google.com +61.91.161.217 wildcard-talkgadget.l.google.com +61.91.161.217 www-wide.l.google.com +61.91.161.217 youtube-ui.l.google.com +61.91.161.217 yt-video-upload.l.google.com +61.91.161.217 ytimg.l.google.com +61.91.161.217 ytstatic.l.google.com +61.91.161.217 admob.com +61.91.161.217 www.admob.com +61.91.161.217 apps.admob.com +61.91.161.217 adwords.google.com +61.91.161.217 adwords.google.sk +61.91.161.217 www.android.com +61.91.161.217 android.com +61.91.161.217 connectivitycheck.android.com +61.91.161.217 developer.android.com +61.91.161.217 dev.android.com +61.91.161.217 d.android.com +64.233.188.121 b.android.com +64.233.188.121 tools.android.com +61.91.161.217 source.android.com +61.91.161.217 a.android.com +61.91.161.217 market.android.com +61.91.161.217 play.google.com +61.91.161.217 payments.google.com +61.91.161.217 android.clients.google.com +61.91.161.217 withgoogle.com +61.91.161.217 www.withgoogle.com +61.91.161.217 edutrainingcenter.withgoogle.com +61.91.161.217 earthview.withgoogle.com +61.91.161.217 lightsaber.withgoogle.com +61.91.161.217 britishmuseum.withgoogle.com +61.91.161.217 beyondthemap.withgoogle.com +61.91.161.217 analyticsacademy.withgoogle.com +61.91.161.217 spellup.withgoogle.com + +# Googleusercontent Start +61.91.161.217 www.googleusercontent.com +61.91.161.217 apidata.googleusercontent.com +61.91.161.217 androidmarket.googleusercontent.com +61.91.161.217 blogger.googleusercontent.com +61.91.161.217 gadgets.l.googleusercontent.com +61.91.161.217 googlehosted.l.googleusercontent.com +61.91.161.217 googlecode.l.googleusercontent.com +61.91.161.217 googlegroups.l.googleusercontent.com +61.91.161.217 markuphelper.googleusercontent.com +61.91.161.217 photos-ugc.l.googleusercontent.com +61.91.161.217 storage.l.googleusercontent.com +61.91.161.217 storage-ugc.l.googleusercontent.com +61.91.161.217 a-fc-opensocial.googleusercontent.com +61.91.161.217 images-focus-opensocial.googleusercontent.com +61.91.161.217 www-blogger-opensocial.googleusercontent.com +61.91.161.217 books.googleusercontent.com +61.91.161.217 ap1.googleusercontent.com +61.91.161.217 ap2.googleusercontent.com +61.91.161.217 ap3.googleusercontent.com +61.91.161.217 ap4.googleusercontent.com +61.91.161.217 ap5.googleusercontent.com +61.91.161.217 ap6.googleusercontent.com +61.91.161.217 ap7.googleusercontent.com +61.91.161.217 ap8.googleusercontent.com +61.91.161.217 ap9.googleusercontent.com +61.91.161.217 ci0.googleusercontent.com +61.91.161.217 ci1.googleusercontent.com +61.91.161.217 ci2.googleusercontent.com +61.91.161.217 ci3.googleusercontent.com +61.91.161.217 ci4.googleusercontent.com +61.91.161.217 ci5.googleusercontent.com +61.91.161.217 ci6.googleusercontent.com +61.91.161.217 gp3.googleusercontent.com +61.91.161.217 gp4.googleusercontent.com +61.91.161.217 gp5.googleusercontent.com +61.91.161.217 gp6.googleusercontent.com +61.91.161.217 gp.googleusercontent.com +61.91.161.217 sp0.googleusercontent.com +61.91.161.217 sp1.googleusercontent.com +61.91.161.217 sp2.googleusercontent.com +61.91.161.217 sp3.googleusercontent.com +61.91.161.217 sp4.googleusercontent.com +61.91.161.217 sp5.googleusercontent.com +61.91.161.217 sp6.googleusercontent.com +61.91.161.217 sp7.googleusercontent.com +61.91.161.217 sp8.googleusercontent.com +61.91.161.217 sp9.googleusercontent.com +61.91.161.217 1-ps.googleusercontent.com +61.91.161.217 2-ps.googleusercontent.com +61.91.161.217 3-ps.googleusercontent.com +61.91.161.217 4-ps.googleusercontent.com +61.91.161.217 gp0.googleusercontent.com +61.91.161.217 gp1.googleusercontent.com +61.91.161.217 gp2.googleusercontent.com +61.91.161.217 www-hangouts-opensocial.googleusercontent.com +61.91.161.217 clients1.googleusercontent.com +61.91.161.217 clients2.googleusercontent.com +61.91.161.217 clients3.googleusercontent.com +61.91.161.217 clients4.googleusercontent.com +61.91.161.217 clients5.googleusercontent.com +61.91.161.217 clients6.googleusercontent.com +61.91.161.217 clients7.googleusercontent.com +61.91.161.217 code-opensocial.googleusercontent.com +61.91.161.217 t.doc-0-0-sj.sj.googleusercontent.com +61.91.161.217 doc-00-00-docs.googleusercontent.com +61.91.161.217 doc-04-00-docs.googleusercontent.com +61.91.161.217 doc-08-00-docs.googleusercontent.com +61.91.161.217 doc-0c-00-docs.googleusercontent.com +61.91.161.217 doc-0g-00-docs.googleusercontent.com +61.91.161.217 doc-0k-00-docs.googleusercontent.com +61.91.161.217 doc-0o-00-docs.googleusercontent.com +61.91.161.217 doc-0s-00-docs.googleusercontent.com +61.91.161.217 doc-10-00-docs.googleusercontent.com +61.91.161.217 doc-14-00-docs.googleusercontent.com +61.91.161.217 doc-00-04-docs.googleusercontent.com +61.91.161.217 doc-04-04-docs.googleusercontent.com +61.91.161.217 doc-08-04-docs.googleusercontent.com +61.91.161.217 doc-0c-04-docs.googleusercontent.com +61.91.161.217 doc-0g-04-docs.googleusercontent.com +61.91.161.217 doc-0k-04-docs.googleusercontent.com +61.91.161.217 doc-0o-04-docs.googleusercontent.com +61.91.161.217 doc-0s-04-docs.googleusercontent.com +61.91.161.217 doc-10-04-docs.googleusercontent.com +61.91.161.217 doc-14-04-docs.googleusercontent.com +61.91.161.217 doc-00-08-docs.googleusercontent.com +61.91.161.217 doc-04-08-docs.googleusercontent.com +61.91.161.217 doc-08-08-docs.googleusercontent.com +61.91.161.217 doc-0c-08-docs.googleusercontent.com +61.91.161.217 doc-0g-08-docs.googleusercontent.com +61.91.161.217 doc-0k-08-docs.googleusercontent.com +61.91.161.217 doc-0o-08-docs.googleusercontent.com +61.91.161.217 doc-0s-08-docs.googleusercontent.com +61.91.161.217 doc-10-08-docs.googleusercontent.com +61.91.161.217 doc-14-08-docs.googleusercontent.com +61.91.161.217 doc-00-0c-docs.googleusercontent.com +61.91.161.217 doc-04-0c-docs.googleusercontent.com +61.91.161.217 doc-08-0c-docs.googleusercontent.com +61.91.161.217 doc-0c-0c-docs.googleusercontent.com +61.91.161.217 doc-0g-0c-docs.googleusercontent.com +61.91.161.217 doc-0k-0c-docs.googleusercontent.com +61.91.161.217 doc-0o-0c-docs.googleusercontent.com +61.91.161.217 doc-0s-0c-docs.googleusercontent.com +61.91.161.217 doc-10-0c-docs.googleusercontent.com +61.91.161.217 doc-14-0c-docs.googleusercontent.com +61.91.161.217 doc-00-0g-docs.googleusercontent.com +61.91.161.217 doc-04-0g-docs.googleusercontent.com +61.91.161.217 doc-08-0g-docs.googleusercontent.com +61.91.161.217 doc-0c-0g-docs.googleusercontent.com +61.91.161.217 doc-0g-0g-docs.googleusercontent.com +61.91.161.217 doc-0k-0g-docs.googleusercontent.com +61.91.161.217 doc-0o-0g-docs.googleusercontent.com +61.91.161.217 doc-0s-0g-docs.googleusercontent.com +61.91.161.217 doc-10-0g-docs.googleusercontent.com +61.91.161.217 doc-14-0g-docs.googleusercontent.com +61.91.161.217 doc-00-0k-docs.googleusercontent.com +61.91.161.217 doc-04-0k-docs.googleusercontent.com +61.91.161.217 doc-08-0k-docs.googleusercontent.com +61.91.161.217 doc-0c-0k-docs.googleusercontent.com +61.91.161.217 doc-0g-0k-docs.googleusercontent.com +61.91.161.217 doc-0k-0k-docs.googleusercontent.com +61.91.161.217 doc-0o-0k-docs.googleusercontent.com +61.91.161.217 doc-0s-0k-docs.googleusercontent.com +61.91.161.217 doc-10-0k-docs.googleusercontent.com +61.91.161.217 doc-14-0k-docs.googleusercontent.com +61.91.161.217 doc-00-0o-docs.googleusercontent.com +61.91.161.217 doc-04-0o-docs.googleusercontent.com +61.91.161.217 doc-08-0o-docs.googleusercontent.com +61.91.161.217 doc-0c-0o-docs.googleusercontent.com +61.91.161.217 doc-0g-0o-docs.googleusercontent.com +61.91.161.217 doc-0k-0o-docs.googleusercontent.com +61.91.161.217 doc-0o-0o-docs.googleusercontent.com +61.91.161.217 doc-0s-0o-docs.googleusercontent.com +61.91.161.217 doc-10-0o-docs.googleusercontent.com +61.91.161.217 doc-14-0o-docs.googleusercontent.com +61.91.161.217 doc-00-0s-docs.googleusercontent.com +61.91.161.217 doc-04-0s-docs.googleusercontent.com +61.91.161.217 doc-08-0s-docs.googleusercontent.com +61.91.161.217 doc-0c-0s-docs.googleusercontent.com +61.91.161.217 doc-0g-0s-docs.googleusercontent.com +61.91.161.217 doc-0k-0s-docs.googleusercontent.com +61.91.161.217 doc-0o-0s-docs.googleusercontent.com +61.91.161.217 doc-0s-0s-docs.googleusercontent.com +61.91.161.217 doc-10-0s-docs.googleusercontent.com +61.91.161.217 doc-14-0s-docs.googleusercontent.com +61.91.161.217 doc-00-10-docs.googleusercontent.com +61.91.161.217 doc-04-10-docs.googleusercontent.com +61.91.161.217 doc-08-10-docs.googleusercontent.com +61.91.161.217 doc-0c-10-docs.googleusercontent.com +61.91.161.217 doc-0g-10-docs.googleusercontent.com +61.91.161.217 doc-0k-10-docs.googleusercontent.com +61.91.161.217 doc-0o-10-docs.googleusercontent.com +61.91.161.217 doc-0s-10-docs.googleusercontent.com +61.91.161.217 doc-10-10-docs.googleusercontent.com +61.91.161.217 doc-14-10-docs.googleusercontent.com +61.91.161.217 doc-00-14-docs.googleusercontent.com +61.91.161.217 doc-04-14-docs.googleusercontent.com +61.91.161.217 doc-08-14-docs.googleusercontent.com +61.91.161.217 doc-0c-14-docs.googleusercontent.com +61.91.161.217 doc-0g-14-docs.googleusercontent.com +61.91.161.217 doc-0k-14-docs.googleusercontent.com +61.91.161.217 doc-0o-14-docs.googleusercontent.com +61.91.161.217 doc-0s-14-docs.googleusercontent.com +61.91.161.217 doc-10-14-docs.googleusercontent.com +61.91.161.217 doc-14-14-docs.googleusercontent.com +61.91.161.217 doc-00-18-docs.googleusercontent.com +61.91.161.217 doc-04-18-docs.googleusercontent.com +61.91.161.217 doc-08-18-docs.googleusercontent.com +61.91.161.217 doc-0c-18-docs.googleusercontent.com +61.91.161.217 doc-0g-18-docs.googleusercontent.com +61.91.161.217 doc-0k-18-docs.googleusercontent.com +61.91.161.217 doc-0o-18-docs.googleusercontent.com +61.91.161.217 doc-0s-18-docs.googleusercontent.com +61.91.161.217 doc-10-18-docs.googleusercontent.com +61.91.161.217 doc-14-18-docs.googleusercontent.com +61.91.161.217 doc-00-1c-docs.googleusercontent.com +61.91.161.217 doc-04-1c-docs.googleusercontent.com +61.91.161.217 doc-08-1c-docs.googleusercontent.com +61.91.161.217 doc-0c-1c-docs.googleusercontent.com +61.91.161.217 doc-0g-1c-docs.googleusercontent.com +61.91.161.217 doc-0k-1c-docs.googleusercontent.com +61.91.161.217 doc-0o-1c-docs.googleusercontent.com +61.91.161.217 doc-0s-1c-docs.googleusercontent.com +61.91.161.217 doc-10-1c-docs.googleusercontent.com +61.91.161.217 doc-14-1c-docs.googleusercontent.com +61.91.161.217 doc-00-1g-docs.googleusercontent.com +61.91.161.217 doc-04-1g-docs.googleusercontent.com +61.91.161.217 doc-08-1g-docs.googleusercontent.com +61.91.161.217 doc-0c-1g-docs.googleusercontent.com +61.91.161.217 doc-0g-1g-docs.googleusercontent.com +61.91.161.217 doc-0k-1g-docs.googleusercontent.com +61.91.161.217 doc-0o-1g-docs.googleusercontent.com +61.91.161.217 doc-0s-1g-docs.googleusercontent.com +61.91.161.217 doc-10-1g-docs.googleusercontent.com +61.91.161.217 doc-14-1g-docs.googleusercontent.com +61.91.161.217 doc-00-1k-docs.googleusercontent.com +61.91.161.217 doc-04-1k-docs.googleusercontent.com +61.91.161.217 doc-08-1k-docs.googleusercontent.com +61.91.161.217 doc-0c-1k-docs.googleusercontent.com +61.91.161.217 doc-0g-1k-docs.googleusercontent.com +61.91.161.217 doc-0k-1k-docs.googleusercontent.com +61.91.161.217 doc-0o-1k-docs.googleusercontent.com +61.91.161.217 doc-0s-1k-docs.googleusercontent.com +61.91.161.217 doc-10-1k-docs.googleusercontent.com +61.91.161.217 doc-14-1k-docs.googleusercontent.com +61.91.161.217 doc-00-1o-docs.googleusercontent.com +61.91.161.217 doc-04-1o-docs.googleusercontent.com +61.91.161.217 doc-08-1o-docs.googleusercontent.com +61.91.161.217 doc-0c-1o-docs.googleusercontent.com +61.91.161.217 doc-0g-1o-docs.googleusercontent.com +61.91.161.217 doc-0k-1o-docs.googleusercontent.com +61.91.161.217 doc-0o-1o-docs.googleusercontent.com +61.91.161.217 doc-0s-1o-docs.googleusercontent.com +61.91.161.217 doc-10-1o-docs.googleusercontent.com +61.91.161.217 doc-14-1o-docs.googleusercontent.com +61.91.161.217 doc-00-1s-docs.googleusercontent.com +61.91.161.217 doc-04-1s-docs.googleusercontent.com +61.91.161.217 doc-08-1s-docs.googleusercontent.com +61.91.161.217 doc-0c-1s-docs.googleusercontent.com +61.91.161.217 doc-0g-1s-docs.googleusercontent.com +61.91.161.217 doc-0k-1s-docs.googleusercontent.com +61.91.161.217 doc-0o-1s-docs.googleusercontent.com +61.91.161.217 doc-0s-1s-docs.googleusercontent.com +61.91.161.217 doc-10-1s-docs.googleusercontent.com +61.91.161.217 doc-14-1s-docs.googleusercontent.com +61.91.161.217 doc-00-20-docs.googleusercontent.com +61.91.161.217 doc-04-20-docs.googleusercontent.com +61.91.161.217 doc-08-20-docs.googleusercontent.com +61.91.161.217 doc-0c-20-docs.googleusercontent.com +61.91.161.217 doc-0g-20-docs.googleusercontent.com +61.91.161.217 doc-0k-20-docs.googleusercontent.com +61.91.161.217 doc-0o-20-docs.googleusercontent.com +61.91.161.217 doc-0s-20-docs.googleusercontent.com +61.91.161.217 doc-10-20-docs.googleusercontent.com +61.91.161.217 doc-14-20-docs.googleusercontent.com +61.91.161.217 doc-00-24-docs.googleusercontent.com +61.91.161.217 doc-04-24-docs.googleusercontent.com +61.91.161.217 doc-08-24-docs.googleusercontent.com +61.91.161.217 doc-0c-24-docs.googleusercontent.com +61.91.161.217 doc-0g-24-docs.googleusercontent.com +61.91.161.217 doc-0k-24-docs.googleusercontent.com +61.91.161.217 doc-0o-24-docs.googleusercontent.com +61.91.161.217 doc-0s-24-docs.googleusercontent.com +61.91.161.217 doc-10-24-docs.googleusercontent.com +61.91.161.217 doc-14-24-docs.googleusercontent.com +61.91.161.217 doc-00-28-docs.googleusercontent.com +61.91.161.217 doc-04-28-docs.googleusercontent.com +61.91.161.217 doc-08-28-docs.googleusercontent.com +61.91.161.217 doc-0c-28-docs.googleusercontent.com +61.91.161.217 doc-0g-28-docs.googleusercontent.com +61.91.161.217 doc-0k-28-docs.googleusercontent.com +61.91.161.217 doc-0o-28-docs.googleusercontent.com +61.91.161.217 doc-0s-28-docs.googleusercontent.com +61.91.161.217 doc-10-28-docs.googleusercontent.com +61.91.161.217 doc-14-28-docs.googleusercontent.com +61.91.161.217 doc-00-2c-docs.googleusercontent.com +61.91.161.217 doc-04-2c-docs.googleusercontent.com +61.91.161.217 doc-08-2c-docs.googleusercontent.com +61.91.161.217 doc-0c-2c-docs.googleusercontent.com +61.91.161.217 doc-0g-2c-docs.googleusercontent.com +61.91.161.217 doc-0k-2c-docs.googleusercontent.com +61.91.161.217 doc-0o-2c-docs.googleusercontent.com +61.91.161.217 doc-0s-2c-docs.googleusercontent.com +61.91.161.217 doc-10-2c-docs.googleusercontent.com +61.91.161.217 doc-14-2c-docs.googleusercontent.com +61.91.161.217 doc-00-2g-docs.googleusercontent.com +61.91.161.217 doc-04-2g-docs.googleusercontent.com +61.91.161.217 doc-08-2g-docs.googleusercontent.com +61.91.161.217 doc-0c-2g-docs.googleusercontent.com +61.91.161.217 doc-0g-2g-docs.googleusercontent.com +61.91.161.217 doc-0k-2g-docs.googleusercontent.com +61.91.161.217 doc-0o-2g-docs.googleusercontent.com +61.91.161.217 doc-0s-2g-docs.googleusercontent.com +61.91.161.217 doc-10-2g-docs.googleusercontent.com +61.91.161.217 doc-14-2g-docs.googleusercontent.com +61.91.161.217 doc-00-2k-docs.googleusercontent.com +61.91.161.217 doc-04-2k-docs.googleusercontent.com +61.91.161.217 doc-08-2k-docs.googleusercontent.com +61.91.161.217 doc-0c-2k-docs.googleusercontent.com +61.91.161.217 doc-0g-2k-docs.googleusercontent.com +61.91.161.217 doc-0k-2k-docs.googleusercontent.com +61.91.161.217 doc-0o-2k-docs.googleusercontent.com +61.91.161.217 doc-0s-2k-docs.googleusercontent.com +61.91.161.217 doc-10-2k-docs.googleusercontent.com +61.91.161.217 doc-14-2k-docs.googleusercontent.com +61.91.161.217 doc-00-2o-docs.googleusercontent.com +61.91.161.217 doc-04-2o-docs.googleusercontent.com +61.91.161.217 doc-08-2o-docs.googleusercontent.com +61.91.161.217 doc-0c-2o-docs.googleusercontent.com +61.91.161.217 doc-0g-2o-docs.googleusercontent.com +61.91.161.217 doc-0k-2o-docs.googleusercontent.com +61.91.161.217 doc-0o-2o-docs.googleusercontent.com +61.91.161.217 doc-0s-2o-docs.googleusercontent.com +61.91.161.217 doc-10-2o-docs.googleusercontent.com +61.91.161.217 doc-14-2o-docs.googleusercontent.com +61.91.161.217 doc-00-2s-docs.googleusercontent.com +61.91.161.217 doc-04-2s-docs.googleusercontent.com +61.91.161.217 doc-08-2s-docs.googleusercontent.com +61.91.161.217 doc-0c-2s-docs.googleusercontent.com +61.91.161.217 doc-0g-2s-docs.googleusercontent.com +61.91.161.217 doc-0k-2s-docs.googleusercontent.com +61.91.161.217 doc-0o-2s-docs.googleusercontent.com +61.91.161.217 doc-0s-2s-docs.googleusercontent.com +61.91.161.217 doc-10-2s-docs.googleusercontent.com +61.91.161.217 doc-14-2s-docs.googleusercontent.com +61.91.161.217 doc-00-30-docs.googleusercontent.com +61.91.161.217 doc-04-30-docs.googleusercontent.com +61.91.161.217 doc-08-30-docs.googleusercontent.com +61.91.161.217 doc-0c-30-docs.googleusercontent.com +61.91.161.217 doc-0g-30-docs.googleusercontent.com +61.91.161.217 doc-0k-30-docs.googleusercontent.com +61.91.161.217 doc-0o-30-docs.googleusercontent.com +61.91.161.217 doc-0s-30-docs.googleusercontent.com +61.91.161.217 doc-10-30-docs.googleusercontent.com +61.91.161.217 doc-14-30-docs.googleusercontent.com +61.91.161.217 doc-00-34-docs.googleusercontent.com +61.91.161.217 doc-04-34-docs.googleusercontent.com +61.91.161.217 doc-08-34-docs.googleusercontent.com +61.91.161.217 doc-0c-34-docs.googleusercontent.com +61.91.161.217 doc-0g-34-docs.googleusercontent.com +61.91.161.217 doc-0k-34-docs.googleusercontent.com +61.91.161.217 doc-0o-34-docs.googleusercontent.com +61.91.161.217 doc-0s-34-docs.googleusercontent.com +61.91.161.217 doc-10-34-docs.googleusercontent.com +61.91.161.217 doc-14-34-docs.googleusercontent.com +61.91.161.217 doc-00-38-docs.googleusercontent.com +61.91.161.217 doc-04-38-docs.googleusercontent.com +61.91.161.217 doc-08-38-docs.googleusercontent.com +61.91.161.217 doc-0c-38-docs.googleusercontent.com +61.91.161.217 doc-0g-38-docs.googleusercontent.com +61.91.161.217 doc-0k-38-docs.googleusercontent.com +61.91.161.217 doc-0o-38-docs.googleusercontent.com +61.91.161.217 doc-0s-38-docs.googleusercontent.com +61.91.161.217 doc-10-38-docs.googleusercontent.com +61.91.161.217 doc-14-38-docs.googleusercontent.com +61.91.161.217 doc-00-3c-docs.googleusercontent.com +61.91.161.217 doc-04-3c-docs.googleusercontent.com +61.91.161.217 doc-08-3c-docs.googleusercontent.com +61.91.161.217 doc-0c-3c-docs.googleusercontent.com +61.91.161.217 doc-0g-3c-docs.googleusercontent.com +61.91.161.217 doc-0k-3c-docs.googleusercontent.com +61.91.161.217 doc-0o-3c-docs.googleusercontent.com +61.91.161.217 doc-0s-3c-docs.googleusercontent.com +61.91.161.217 doc-10-3c-docs.googleusercontent.com +61.91.161.217 doc-14-3c-docs.googleusercontent.com +61.91.161.217 doc-00-3g-docs.googleusercontent.com +61.91.161.217 doc-04-3g-docs.googleusercontent.com +61.91.161.217 doc-08-3g-docs.googleusercontent.com +61.91.161.217 doc-0c-3g-docs.googleusercontent.com +61.91.161.217 doc-0g-3g-docs.googleusercontent.com +61.91.161.217 doc-0k-3g-docs.googleusercontent.com +61.91.161.217 doc-0o-3g-docs.googleusercontent.com +61.91.161.217 doc-0s-3g-docs.googleusercontent.com +61.91.161.217 doc-10-3g-docs.googleusercontent.com +61.91.161.217 doc-14-3g-docs.googleusercontent.com +61.91.161.217 doc-00-3k-docs.googleusercontent.com +61.91.161.217 doc-04-3k-docs.googleusercontent.com +61.91.161.217 doc-08-3k-docs.googleusercontent.com +61.91.161.217 doc-0c-3k-docs.googleusercontent.com +61.91.161.217 doc-0g-3k-docs.googleusercontent.com +61.91.161.217 doc-0k-3k-docs.googleusercontent.com +61.91.161.217 doc-0o-3k-docs.googleusercontent.com +61.91.161.217 doc-0s-3k-docs.googleusercontent.com +61.91.161.217 doc-10-3k-docs.googleusercontent.com +61.91.161.217 doc-14-3k-docs.googleusercontent.com +61.91.161.217 doc-00-3o-docs.googleusercontent.com +61.91.161.217 doc-04-3o-docs.googleusercontent.com +61.91.161.217 doc-08-3o-docs.googleusercontent.com +61.91.161.217 doc-0c-3o-docs.googleusercontent.com +61.91.161.217 doc-0g-3o-docs.googleusercontent.com +61.91.161.217 doc-0k-3o-docs.googleusercontent.com +61.91.161.217 doc-0o-3o-docs.googleusercontent.com +61.91.161.217 doc-0s-3o-docs.googleusercontent.com +61.91.161.217 doc-10-3o-docs.googleusercontent.com +61.91.161.217 doc-14-3o-docs.googleusercontent.com +61.91.161.217 doc-00-3s-docs.googleusercontent.com +61.91.161.217 doc-04-3s-docs.googleusercontent.com +61.91.161.217 doc-08-3s-docs.googleusercontent.com +61.91.161.217 doc-0c-3s-docs.googleusercontent.com +61.91.161.217 doc-0g-3s-docs.googleusercontent.com +61.91.161.217 doc-0k-3s-docs.googleusercontent.com +61.91.161.217 doc-0o-3s-docs.googleusercontent.com +61.91.161.217 doc-0s-3s-docs.googleusercontent.com +61.91.161.217 doc-10-3s-docs.googleusercontent.com +61.91.161.217 doc-14-3s-docs.googleusercontent.com +61.91.161.217 doc-00-40-docs.googleusercontent.com +61.91.161.217 doc-04-40-docs.googleusercontent.com +61.91.161.217 doc-08-40-docs.googleusercontent.com +61.91.161.217 doc-0c-40-docs.googleusercontent.com +61.91.161.217 doc-0g-40-docs.googleusercontent.com +61.91.161.217 doc-0k-40-docs.googleusercontent.com +61.91.161.217 doc-0o-40-docs.googleusercontent.com +61.91.161.217 doc-0s-40-docs.googleusercontent.com +61.91.161.217 doc-10-40-docs.googleusercontent.com +61.91.161.217 doc-14-40-docs.googleusercontent.com +61.91.161.217 doc-00-44-docs.googleusercontent.com +61.91.161.217 doc-04-44-docs.googleusercontent.com +61.91.161.217 doc-08-44-docs.googleusercontent.com +61.91.161.217 doc-0c-44-docs.googleusercontent.com +61.91.161.217 doc-0g-44-docs.googleusercontent.com +61.91.161.217 doc-0k-44-docs.googleusercontent.com +61.91.161.217 doc-0o-44-docs.googleusercontent.com +61.91.161.217 doc-0s-44-docs.googleusercontent.com +61.91.161.217 doc-10-44-docs.googleusercontent.com +61.91.161.217 doc-14-44-docs.googleusercontent.com +61.91.161.217 doc-00-48-docs.googleusercontent.com +61.91.161.217 doc-04-48-docs.googleusercontent.com +61.91.161.217 doc-08-48-docs.googleusercontent.com +61.91.161.217 doc-0c-48-docs.googleusercontent.com +61.91.161.217 doc-0g-48-docs.googleusercontent.com +61.91.161.217 doc-0k-48-docs.googleusercontent.com +61.91.161.217 doc-0o-48-docs.googleusercontent.com +61.91.161.217 doc-0s-48-docs.googleusercontent.com +61.91.161.217 doc-10-48-docs.googleusercontent.com +61.91.161.217 doc-14-48-docs.googleusercontent.com +61.91.161.217 doc-00-4c-docs.googleusercontent.com +61.91.161.217 doc-04-4c-docs.googleusercontent.com +61.91.161.217 doc-08-4c-docs.googleusercontent.com +61.91.161.217 doc-0c-4c-docs.googleusercontent.com +61.91.161.217 doc-0g-4c-docs.googleusercontent.com +61.91.161.217 doc-0k-4c-docs.googleusercontent.com +61.91.161.217 doc-0o-4c-docs.googleusercontent.com +61.91.161.217 doc-0s-4c-docs.googleusercontent.com +61.91.161.217 doc-10-4c-docs.googleusercontent.com +61.91.161.217 doc-14-4c-docs.googleusercontent.com +61.91.161.217 doc-00-4g-docs.googleusercontent.com +61.91.161.217 doc-04-4g-docs.googleusercontent.com +61.91.161.217 doc-08-4g-docs.googleusercontent.com +61.91.161.217 doc-0c-4g-docs.googleusercontent.com +61.91.161.217 doc-0g-4g-docs.googleusercontent.com +61.91.161.217 doc-0k-4g-docs.googleusercontent.com +61.91.161.217 doc-0o-4g-docs.googleusercontent.com +61.91.161.217 doc-0s-4g-docs.googleusercontent.com +61.91.161.217 doc-10-4g-docs.googleusercontent.com +61.91.161.217 doc-14-4g-docs.googleusercontent.com +61.91.161.217 doc-00-4k-docs.googleusercontent.com +61.91.161.217 doc-04-4k-docs.googleusercontent.com +61.91.161.217 doc-08-4k-docs.googleusercontent.com +61.91.161.217 doc-0c-4k-docs.googleusercontent.com +61.91.161.217 doc-0g-4k-docs.googleusercontent.com +61.91.161.217 doc-0k-4k-docs.googleusercontent.com +61.91.161.217 doc-0o-4k-docs.googleusercontent.com +61.91.161.217 doc-0s-4k-docs.googleusercontent.com +61.91.161.217 doc-10-4k-docs.googleusercontent.com +61.91.161.217 doc-14-4k-docs.googleusercontent.com +61.91.161.217 doc-00-4o-docs.googleusercontent.com +61.91.161.217 doc-04-4o-docs.googleusercontent.com +61.91.161.217 doc-08-4o-docs.googleusercontent.com +61.91.161.217 doc-0c-4o-docs.googleusercontent.com +61.91.161.217 doc-0g-4o-docs.googleusercontent.com +61.91.161.217 doc-0k-4o-docs.googleusercontent.com +61.91.161.217 doc-0o-4o-docs.googleusercontent.com +61.91.161.217 doc-0s-4o-docs.googleusercontent.com +61.91.161.217 doc-10-4o-docs.googleusercontent.com +61.91.161.217 doc-14-4o-docs.googleusercontent.com +61.91.161.217 doc-00-4s-docs.googleusercontent.com +61.91.161.217 doc-04-4s-docs.googleusercontent.com +61.91.161.217 doc-08-4s-docs.googleusercontent.com +61.91.161.217 doc-0c-4s-docs.googleusercontent.com +61.91.161.217 doc-0g-4s-docs.googleusercontent.com +61.91.161.217 doc-0k-4s-docs.googleusercontent.com +61.91.161.217 doc-0o-4s-docs.googleusercontent.com +61.91.161.217 doc-0s-4s-docs.googleusercontent.com +61.91.161.217 doc-10-4s-docs.googleusercontent.com +61.91.161.217 doc-14-4s-docs.googleusercontent.com +61.91.161.217 doc-00-50-docs.googleusercontent.com +61.91.161.217 doc-04-50-docs.googleusercontent.com +61.91.161.217 doc-08-50-docs.googleusercontent.com +61.91.161.217 doc-0c-50-docs.googleusercontent.com +61.91.161.217 doc-0g-50-docs.googleusercontent.com +61.91.161.217 doc-0k-50-docs.googleusercontent.com +61.91.161.217 doc-0o-50-docs.googleusercontent.com +61.91.161.217 doc-0s-50-docs.googleusercontent.com +61.91.161.217 doc-10-50-docs.googleusercontent.com +61.91.161.217 doc-14-50-docs.googleusercontent.com +61.91.161.217 doc-00-54-docs.googleusercontent.com +61.91.161.217 doc-04-54-docs.googleusercontent.com +61.91.161.217 doc-08-54-docs.googleusercontent.com +61.91.161.217 doc-0c-54-docs.googleusercontent.com +61.91.161.217 doc-0g-54-docs.googleusercontent.com +61.91.161.217 doc-0k-54-docs.googleusercontent.com +61.91.161.217 doc-0o-54-docs.googleusercontent.com +61.91.161.217 doc-0s-54-docs.googleusercontent.com +61.91.161.217 doc-10-54-docs.googleusercontent.com +61.91.161.217 doc-14-54-docs.googleusercontent.com +61.91.161.217 doc-00-58-docs.googleusercontent.com +61.91.161.217 doc-04-58-docs.googleusercontent.com +61.91.161.217 doc-08-58-docs.googleusercontent.com +61.91.161.217 doc-0c-58-docs.googleusercontent.com +61.91.161.217 doc-0g-58-docs.googleusercontent.com +61.91.161.217 doc-0k-58-docs.googleusercontent.com +61.91.161.217 doc-0o-58-docs.googleusercontent.com +61.91.161.217 doc-0s-58-docs.googleusercontent.com +61.91.161.217 doc-10-58-docs.googleusercontent.com +61.91.161.217 doc-14-58-docs.googleusercontent.com +61.91.161.217 doc-00-5c-docs.googleusercontent.com +61.91.161.217 doc-04-5c-docs.googleusercontent.com +61.91.161.217 doc-08-5c-docs.googleusercontent.com +61.91.161.217 doc-0c-5c-docs.googleusercontent.com +61.91.161.217 doc-0g-5c-docs.googleusercontent.com +61.91.161.217 doc-0k-5c-docs.googleusercontent.com +61.91.161.217 doc-0o-5c-docs.googleusercontent.com +61.91.161.217 doc-0s-5c-docs.googleusercontent.com +61.91.161.217 doc-10-5c-docs.googleusercontent.com +61.91.161.217 doc-14-5c-docs.googleusercontent.com +61.91.161.217 doc-00-5g-docs.googleusercontent.com +61.91.161.217 doc-04-5g-docs.googleusercontent.com +61.91.161.217 doc-08-5g-docs.googleusercontent.com +61.91.161.217 doc-0c-5g-docs.googleusercontent.com +61.91.161.217 doc-0g-5g-docs.googleusercontent.com +61.91.161.217 doc-0k-5g-docs.googleusercontent.com +61.91.161.217 doc-0o-5g-docs.googleusercontent.com +61.91.161.217 doc-0s-5g-docs.googleusercontent.com +61.91.161.217 doc-10-5g-docs.googleusercontent.com +61.91.161.217 doc-14-5g-docs.googleusercontent.com +61.91.161.217 doc-00-5k-docs.googleusercontent.com +61.91.161.217 doc-04-5k-docs.googleusercontent.com +61.91.161.217 doc-08-5k-docs.googleusercontent.com +61.91.161.217 doc-0c-5k-docs.googleusercontent.com +61.91.161.217 doc-0g-5k-docs.googleusercontent.com +61.91.161.217 doc-0k-5k-docs.googleusercontent.com +61.91.161.217 doc-0o-5k-docs.googleusercontent.com +61.91.161.217 doc-0s-5k-docs.googleusercontent.com +61.91.161.217 doc-10-5k-docs.googleusercontent.com +61.91.161.217 doc-14-5k-docs.googleusercontent.com +61.91.161.217 doc-00-5o-docs.googleusercontent.com +61.91.161.217 doc-04-5o-docs.googleusercontent.com +61.91.161.217 doc-08-5o-docs.googleusercontent.com +61.91.161.217 doc-0c-5o-docs.googleusercontent.com +61.91.161.217 doc-0g-5o-docs.googleusercontent.com +61.91.161.217 doc-0k-5o-docs.googleusercontent.com +61.91.161.217 doc-0o-5o-docs.googleusercontent.com +61.91.161.217 doc-0s-5o-docs.googleusercontent.com +61.91.161.217 doc-10-5o-docs.googleusercontent.com +61.91.161.217 doc-14-5o-docs.googleusercontent.com +61.91.161.217 doc-00-5s-docs.googleusercontent.com +61.91.161.217 doc-04-5s-docs.googleusercontent.com +61.91.161.217 doc-08-5s-docs.googleusercontent.com +61.91.161.217 doc-0c-5s-docs.googleusercontent.com +61.91.161.217 doc-0g-5s-docs.googleusercontent.com +61.91.161.217 doc-0k-5s-docs.googleusercontent.com +61.91.161.217 doc-0o-5s-docs.googleusercontent.com +61.91.161.217 doc-0s-5s-docs.googleusercontent.com +61.91.161.217 doc-10-5s-docs.googleusercontent.com +61.91.161.217 doc-14-5s-docs.googleusercontent.com +61.91.161.217 doc-00-60-docs.googleusercontent.com +61.91.161.217 doc-04-60-docs.googleusercontent.com +61.91.161.217 doc-08-60-docs.googleusercontent.com +61.91.161.217 doc-0c-60-docs.googleusercontent.com +61.91.161.217 doc-0g-60-docs.googleusercontent.com +61.91.161.217 doc-0k-60-docs.googleusercontent.com +61.91.161.217 doc-0o-60-docs.googleusercontent.com +61.91.161.217 doc-0s-60-docs.googleusercontent.com +61.91.161.217 doc-10-60-docs.googleusercontent.com +61.91.161.217 doc-14-60-docs.googleusercontent.com +61.91.161.217 doc-00-64-docs.googleusercontent.com +61.91.161.217 doc-04-64-docs.googleusercontent.com +61.91.161.217 doc-08-64-docs.googleusercontent.com +61.91.161.217 doc-0c-64-docs.googleusercontent.com +61.91.161.217 doc-0g-64-docs.googleusercontent.com +61.91.161.217 doc-0k-64-docs.googleusercontent.com +61.91.161.217 doc-0o-64-docs.googleusercontent.com +61.91.161.217 doc-0s-64-docs.googleusercontent.com +61.91.161.217 doc-10-64-docs.googleusercontent.com +61.91.161.217 doc-14-64-docs.googleusercontent.com +61.91.161.217 doc-00-68-docs.googleusercontent.com +61.91.161.217 doc-04-68-docs.googleusercontent.com +61.91.161.217 doc-08-68-docs.googleusercontent.com +61.91.161.217 doc-0c-68-docs.googleusercontent.com +61.91.161.217 doc-0g-68-docs.googleusercontent.com +61.91.161.217 doc-0k-68-docs.googleusercontent.com +61.91.161.217 doc-0o-68-docs.googleusercontent.com +61.91.161.217 doc-0s-68-docs.googleusercontent.com +61.91.161.217 doc-10-68-docs.googleusercontent.com +61.91.161.217 doc-14-68-docs.googleusercontent.com +61.91.161.217 doc-00-6c-docs.googleusercontent.com +61.91.161.217 doc-04-6c-docs.googleusercontent.com +61.91.161.217 doc-08-6c-docs.googleusercontent.com +61.91.161.217 doc-0c-6c-docs.googleusercontent.com +61.91.161.217 doc-0g-6c-docs.googleusercontent.com +61.91.161.217 doc-0k-6c-docs.googleusercontent.com +61.91.161.217 doc-0o-6c-docs.googleusercontent.com +61.91.161.217 doc-0s-6c-docs.googleusercontent.com +61.91.161.217 doc-10-6c-docs.googleusercontent.com +61.91.161.217 doc-14-6c-docs.googleusercontent.com +61.91.161.217 doc-00-6g-docs.googleusercontent.com +61.91.161.217 doc-04-6g-docs.googleusercontent.com +61.91.161.217 doc-08-6g-docs.googleusercontent.com +61.91.161.217 doc-0c-6g-docs.googleusercontent.com +61.91.161.217 doc-0g-6g-docs.googleusercontent.com +61.91.161.217 doc-0k-6g-docs.googleusercontent.com +61.91.161.217 doc-0o-6g-docs.googleusercontent.com +61.91.161.217 doc-0s-6g-docs.googleusercontent.com +61.91.161.217 doc-10-6g-docs.googleusercontent.com +61.91.161.217 doc-14-6g-docs.googleusercontent.com +61.91.161.217 doc-00-6k-docs.googleusercontent.com +61.91.161.217 doc-04-6k-docs.googleusercontent.com +61.91.161.217 doc-08-6k-docs.googleusercontent.com +61.91.161.217 doc-0c-6k-docs.googleusercontent.com +61.91.161.217 doc-0g-6k-docs.googleusercontent.com +61.91.161.217 doc-0k-6k-docs.googleusercontent.com +61.91.161.217 doc-0o-6k-docs.googleusercontent.com +61.91.161.217 doc-0s-6k-docs.googleusercontent.com +61.91.161.217 doc-10-6k-docs.googleusercontent.com +61.91.161.217 doc-14-6k-docs.googleusercontent.com +61.91.161.217 doc-00-6o-docs.googleusercontent.com +61.91.161.217 doc-04-6o-docs.googleusercontent.com +61.91.161.217 doc-08-6o-docs.googleusercontent.com +61.91.161.217 doc-0c-6o-docs.googleusercontent.com +61.91.161.217 doc-0g-6o-docs.googleusercontent.com +61.91.161.217 doc-0k-6o-docs.googleusercontent.com +61.91.161.217 doc-0o-6o-docs.googleusercontent.com +61.91.161.217 doc-0s-6o-docs.googleusercontent.com +61.91.161.217 doc-10-6o-docs.googleusercontent.com +61.91.161.217 doc-14-6o-docs.googleusercontent.com +61.91.161.217 doc-00-6s-docs.googleusercontent.com +61.91.161.217 doc-04-6s-docs.googleusercontent.com +61.91.161.217 doc-08-6s-docs.googleusercontent.com +61.91.161.217 doc-0c-6s-docs.googleusercontent.com +61.91.161.217 doc-0g-6s-docs.googleusercontent.com +61.91.161.217 doc-0k-6s-docs.googleusercontent.com +61.91.161.217 doc-0o-6s-docs.googleusercontent.com +61.91.161.217 doc-0s-6s-docs.googleusercontent.com +61.91.161.217 doc-10-6s-docs.googleusercontent.com +61.91.161.217 doc-14-6s-docs.googleusercontent.com +61.91.161.217 doc-00-70-docs.googleusercontent.com +61.91.161.217 doc-04-70-docs.googleusercontent.com +61.91.161.217 doc-08-70-docs.googleusercontent.com +61.91.161.217 doc-0c-70-docs.googleusercontent.com +61.91.161.217 doc-0g-70-docs.googleusercontent.com +61.91.161.217 doc-0k-70-docs.googleusercontent.com +61.91.161.217 doc-0o-70-docs.googleusercontent.com +61.91.161.217 doc-0s-70-docs.googleusercontent.com +61.91.161.217 doc-10-70-docs.googleusercontent.com +61.91.161.217 doc-14-70-docs.googleusercontent.com +61.91.161.217 doc-00-74-docs.googleusercontent.com +61.91.161.217 doc-04-74-docs.googleusercontent.com +61.91.161.217 doc-08-74-docs.googleusercontent.com +61.91.161.217 doc-0c-74-docs.googleusercontent.com +61.91.161.217 doc-0g-74-docs.googleusercontent.com +61.91.161.217 doc-0k-74-docs.googleusercontent.com +61.91.161.217 doc-0o-74-docs.googleusercontent.com +61.91.161.217 doc-0s-74-docs.googleusercontent.com +61.91.161.217 doc-10-74-docs.googleusercontent.com +61.91.161.217 doc-14-74-docs.googleusercontent.com +61.91.161.217 doc-00-78-docs.googleusercontent.com +61.91.161.217 doc-04-78-docs.googleusercontent.com +61.91.161.217 doc-08-78-docs.googleusercontent.com +61.91.161.217 doc-0c-78-docs.googleusercontent.com +61.91.161.217 doc-0g-78-docs.googleusercontent.com +61.91.161.217 doc-0k-78-docs.googleusercontent.com +61.91.161.217 doc-0o-78-docs.googleusercontent.com +61.91.161.217 doc-0s-78-docs.googleusercontent.com +61.91.161.217 doc-10-78-docs.googleusercontent.com +61.91.161.217 doc-14-78-docs.googleusercontent.com +61.91.161.217 doc-00-7c-docs.googleusercontent.com +61.91.161.217 doc-04-7c-docs.googleusercontent.com +61.91.161.217 doc-08-7c-docs.googleusercontent.com +61.91.161.217 doc-0c-7c-docs.googleusercontent.com +61.91.161.217 doc-0g-7c-docs.googleusercontent.com +61.91.161.217 doc-0k-7c-docs.googleusercontent.com +61.91.161.217 doc-0o-7c-docs.googleusercontent.com +61.91.161.217 doc-0s-7c-docs.googleusercontent.com +61.91.161.217 doc-10-7c-docs.googleusercontent.com +61.91.161.217 doc-14-7c-docs.googleusercontent.com +61.91.161.217 doc-00-7g-docs.googleusercontent.com +61.91.161.217 doc-04-7g-docs.googleusercontent.com +61.91.161.217 doc-08-7g-docs.googleusercontent.com +61.91.161.217 doc-0c-7g-docs.googleusercontent.com +61.91.161.217 doc-0g-7g-docs.googleusercontent.com +61.91.161.217 doc-0k-7g-docs.googleusercontent.com +61.91.161.217 doc-0o-7g-docs.googleusercontent.com +61.91.161.217 doc-0s-7g-docs.googleusercontent.com +61.91.161.217 doc-10-7g-docs.googleusercontent.com +61.91.161.217 doc-14-7g-docs.googleusercontent.com +61.91.161.217 doc-00-7k-docs.googleusercontent.com +61.91.161.217 doc-04-7k-docs.googleusercontent.com +61.91.161.217 doc-08-7k-docs.googleusercontent.com +61.91.161.217 doc-0c-7k-docs.googleusercontent.com +61.91.161.217 doc-0g-7k-docs.googleusercontent.com +61.91.161.217 doc-0k-7k-docs.googleusercontent.com +61.91.161.217 doc-0o-7k-docs.googleusercontent.com +61.91.161.217 doc-0s-7k-docs.googleusercontent.com +61.91.161.217 doc-10-7k-docs.googleusercontent.com +61.91.161.217 doc-14-7k-docs.googleusercontent.com +61.91.161.217 doc-00-7o-docs.googleusercontent.com +61.91.161.217 doc-04-7o-docs.googleusercontent.com +61.91.161.217 doc-08-7o-docs.googleusercontent.com +61.91.161.217 doc-0c-7o-docs.googleusercontent.com +61.91.161.217 doc-0g-7o-docs.googleusercontent.com +61.91.161.217 doc-0k-7o-docs.googleusercontent.com +61.91.161.217 doc-0o-7o-docs.googleusercontent.com +61.91.161.217 doc-0s-7o-docs.googleusercontent.com +61.91.161.217 doc-10-7o-docs.googleusercontent.com +61.91.161.217 doc-14-7o-docs.googleusercontent.com +61.91.161.217 doc-00-7s-docs.googleusercontent.com +61.91.161.217 doc-04-7s-docs.googleusercontent.com +61.91.161.217 doc-08-7s-docs.googleusercontent.com +61.91.161.217 doc-0c-7s-docs.googleusercontent.com +61.91.161.217 doc-0g-7s-docs.googleusercontent.com +61.91.161.217 doc-0k-7s-docs.googleusercontent.com +61.91.161.217 doc-0o-7s-docs.googleusercontent.com +61.91.161.217 doc-0s-7s-docs.googleusercontent.com +61.91.161.217 doc-10-7s-docs.googleusercontent.com +61.91.161.217 doc-14-7s-docs.googleusercontent.com +61.91.161.217 doc-00-80-docs.googleusercontent.com +61.91.161.217 doc-04-80-docs.googleusercontent.com +61.91.161.217 doc-08-80-docs.googleusercontent.com +61.91.161.217 doc-0c-80-docs.googleusercontent.com +61.91.161.217 doc-0g-80-docs.googleusercontent.com +61.91.161.217 doc-0k-80-docs.googleusercontent.com +61.91.161.217 doc-0o-80-docs.googleusercontent.com +61.91.161.217 doc-0s-80-docs.googleusercontent.com +61.91.161.217 doc-10-80-docs.googleusercontent.com +61.91.161.217 doc-14-80-docs.googleusercontent.com +61.91.161.217 doc-00-84-docs.googleusercontent.com +61.91.161.217 doc-04-84-docs.googleusercontent.com +61.91.161.217 doc-08-84-docs.googleusercontent.com +61.91.161.217 doc-0c-84-docs.googleusercontent.com +61.91.161.217 doc-0g-84-docs.googleusercontent.com +61.91.161.217 doc-0k-84-docs.googleusercontent.com +61.91.161.217 doc-0o-84-docs.googleusercontent.com +61.91.161.217 doc-0s-84-docs.googleusercontent.com +61.91.161.217 doc-10-84-docs.googleusercontent.com +61.91.161.217 doc-14-84-docs.googleusercontent.com +61.91.161.217 doc-00-88-docs.googleusercontent.com +61.91.161.217 doc-04-88-docs.googleusercontent.com +61.91.161.217 doc-08-88-docs.googleusercontent.com +61.91.161.217 doc-0c-88-docs.googleusercontent.com +61.91.161.217 doc-0g-88-docs.googleusercontent.com +61.91.161.217 doc-0k-88-docs.googleusercontent.com +61.91.161.217 doc-0o-88-docs.googleusercontent.com +61.91.161.217 doc-0s-88-docs.googleusercontent.com +61.91.161.217 doc-10-88-docs.googleusercontent.com +61.91.161.217 doc-14-88-docs.googleusercontent.com +61.91.161.217 doc-00-8c-docs.googleusercontent.com +61.91.161.217 doc-04-8c-docs.googleusercontent.com +61.91.161.217 doc-08-8c-docs.googleusercontent.com +61.91.161.217 doc-0c-8c-docs.googleusercontent.com +61.91.161.217 doc-0g-8c-docs.googleusercontent.com +61.91.161.217 doc-0k-8c-docs.googleusercontent.com +61.91.161.217 doc-0o-8c-docs.googleusercontent.com +61.91.161.217 doc-0s-8c-docs.googleusercontent.com +61.91.161.217 doc-10-8c-docs.googleusercontent.com +61.91.161.217 doc-14-8c-docs.googleusercontent.com +61.91.161.217 doc-00-8g-docs.googleusercontent.com +61.91.161.217 doc-04-8g-docs.googleusercontent.com +61.91.161.217 doc-08-8g-docs.googleusercontent.com +61.91.161.217 doc-0c-8g-docs.googleusercontent.com +61.91.161.217 doc-0g-8g-docs.googleusercontent.com +61.91.161.217 doc-0k-8g-docs.googleusercontent.com +61.91.161.217 doc-0o-8g-docs.googleusercontent.com +61.91.161.217 doc-0s-8g-docs.googleusercontent.com +61.91.161.217 doc-10-8g-docs.googleusercontent.com +61.91.161.217 doc-14-8g-docs.googleusercontent.com +61.91.161.217 doc-00-8k-docs.googleusercontent.com +61.91.161.217 doc-04-8k-docs.googleusercontent.com +61.91.161.217 doc-08-8k-docs.googleusercontent.com +61.91.161.217 doc-0c-8k-docs.googleusercontent.com +61.91.161.217 doc-0g-8k-docs.googleusercontent.com +61.91.161.217 doc-0k-8k-docs.googleusercontent.com +61.91.161.217 doc-0o-8k-docs.googleusercontent.com +61.91.161.217 doc-0s-8k-docs.googleusercontent.com +61.91.161.217 doc-10-8k-docs.googleusercontent.com +61.91.161.217 doc-14-8k-docs.googleusercontent.com +61.91.161.217 doc-00-8o-docs.googleusercontent.com +61.91.161.217 doc-04-8o-docs.googleusercontent.com +61.91.161.217 doc-08-8o-docs.googleusercontent.com +61.91.161.217 doc-0c-8o-docs.googleusercontent.com +61.91.161.217 doc-0g-8o-docs.googleusercontent.com +61.91.161.217 doc-0k-8o-docs.googleusercontent.com +61.91.161.217 doc-0o-8o-docs.googleusercontent.com +61.91.161.217 doc-0s-8o-docs.googleusercontent.com +61.91.161.217 doc-10-8o-docs.googleusercontent.com +61.91.161.217 doc-14-8o-docs.googleusercontent.com +61.91.161.217 doc-00-8s-docs.googleusercontent.com +61.91.161.217 doc-04-8s-docs.googleusercontent.com +61.91.161.217 doc-08-8s-docs.googleusercontent.com +61.91.161.217 doc-0c-8s-docs.googleusercontent.com +61.91.161.217 doc-0g-8s-docs.googleusercontent.com +61.91.161.217 doc-0k-8s-docs.googleusercontent.com +61.91.161.217 doc-0o-8s-docs.googleusercontent.com +61.91.161.217 doc-0s-8s-docs.googleusercontent.com +61.91.161.217 doc-10-8s-docs.googleusercontent.com +61.91.161.217 doc-14-8s-docs.googleusercontent.com +61.91.161.217 doc-00-90-docs.googleusercontent.com +61.91.161.217 doc-04-90-docs.googleusercontent.com +61.91.161.217 doc-08-90-docs.googleusercontent.com +61.91.161.217 doc-0c-90-docs.googleusercontent.com +61.91.161.217 doc-0g-90-docs.googleusercontent.com +61.91.161.217 doc-0k-90-docs.googleusercontent.com +61.91.161.217 doc-0o-90-docs.googleusercontent.com +61.91.161.217 doc-0s-90-docs.googleusercontent.com +61.91.161.217 doc-10-90-docs.googleusercontent.com +61.91.161.217 doc-14-90-docs.googleusercontent.com +61.91.161.217 doc-00-94-docs.googleusercontent.com +61.91.161.217 doc-04-94-docs.googleusercontent.com +61.91.161.217 doc-08-94-docs.googleusercontent.com +61.91.161.217 doc-0c-94-docs.googleusercontent.com +61.91.161.217 doc-0g-94-docs.googleusercontent.com +61.91.161.217 doc-0k-94-docs.googleusercontent.com +61.91.161.217 doc-0o-94-docs.googleusercontent.com +61.91.161.217 doc-0s-94-docs.googleusercontent.com +61.91.161.217 doc-10-94-docs.googleusercontent.com +61.91.161.217 doc-14-94-docs.googleusercontent.com +61.91.161.217 doc-00-98-docs.googleusercontent.com +61.91.161.217 doc-04-98-docs.googleusercontent.com +61.91.161.217 doc-08-98-docs.googleusercontent.com +61.91.161.217 doc-0c-98-docs.googleusercontent.com +61.91.161.217 doc-0g-98-docs.googleusercontent.com +61.91.161.217 doc-0k-98-docs.googleusercontent.com +61.91.161.217 doc-0o-98-docs.googleusercontent.com +61.91.161.217 doc-0s-98-docs.googleusercontent.com +61.91.161.217 doc-10-98-docs.googleusercontent.com +61.91.161.217 doc-14-98-docs.googleusercontent.com +61.91.161.217 doc-00-9c-docs.googleusercontent.com +61.91.161.217 doc-04-9c-docs.googleusercontent.com +61.91.161.217 doc-08-9c-docs.googleusercontent.com +61.91.161.217 doc-0c-9c-docs.googleusercontent.com +61.91.161.217 doc-0g-9c-docs.googleusercontent.com +61.91.161.217 doc-0k-9c-docs.googleusercontent.com +61.91.161.217 doc-0o-9c-docs.googleusercontent.com +61.91.161.217 doc-0s-9c-docs.googleusercontent.com +61.91.161.217 doc-10-9c-docs.googleusercontent.com +61.91.161.217 doc-14-9c-docs.googleusercontent.com +61.91.161.217 doc-00-9g-docs.googleusercontent.com +61.91.161.217 doc-04-9g-docs.googleusercontent.com +61.91.161.217 doc-08-9g-docs.googleusercontent.com +61.91.161.217 doc-0c-9g-docs.googleusercontent.com +61.91.161.217 doc-0g-9g-docs.googleusercontent.com +61.91.161.217 doc-0k-9g-docs.googleusercontent.com +61.91.161.217 doc-0o-9g-docs.googleusercontent.com +61.91.161.217 doc-0s-9g-docs.googleusercontent.com +61.91.161.217 doc-10-9g-docs.googleusercontent.com +61.91.161.217 doc-14-9g-docs.googleusercontent.com +61.91.161.217 doc-00-9k-docs.googleusercontent.com +61.91.161.217 doc-04-9k-docs.googleusercontent.com +61.91.161.217 doc-08-9k-docs.googleusercontent.com +61.91.161.217 doc-0c-9k-docs.googleusercontent.com +61.91.161.217 doc-0g-9k-docs.googleusercontent.com +61.91.161.217 doc-0k-9k-docs.googleusercontent.com +61.91.161.217 doc-0o-9k-docs.googleusercontent.com +61.91.161.217 doc-0s-9k-docs.googleusercontent.com +61.91.161.217 doc-10-9k-docs.googleusercontent.com +61.91.161.217 doc-14-9k-docs.googleusercontent.com +61.91.161.217 doc-00-9o-docs.googleusercontent.com +61.91.161.217 doc-04-9o-docs.googleusercontent.com +61.91.161.217 doc-08-9o-docs.googleusercontent.com +61.91.161.217 doc-0c-9o-docs.googleusercontent.com +61.91.161.217 doc-0g-9o-docs.googleusercontent.com +61.91.161.217 doc-0k-9o-docs.googleusercontent.com +61.91.161.217 doc-0o-9o-docs.googleusercontent.com +61.91.161.217 doc-0s-9o-docs.googleusercontent.com +61.91.161.217 doc-10-9o-docs.googleusercontent.com +61.91.161.217 doc-14-9o-docs.googleusercontent.com +61.91.161.217 doc-00-9s-docs.googleusercontent.com +61.91.161.217 doc-04-9s-docs.googleusercontent.com +61.91.161.217 doc-08-9s-docs.googleusercontent.com +61.91.161.217 doc-0c-9s-docs.googleusercontent.com +61.91.161.217 doc-0g-9s-docs.googleusercontent.com +61.91.161.217 doc-0k-9s-docs.googleusercontent.com +61.91.161.217 doc-0o-9s-docs.googleusercontent.com +61.91.161.217 doc-0s-9s-docs.googleusercontent.com +61.91.161.217 doc-10-9s-docs.googleusercontent.com +61.91.161.217 doc-14-9s-docs.googleusercontent.com +61.91.161.217 doc-00-a0-docs.googleusercontent.com +61.91.161.217 doc-04-a0-docs.googleusercontent.com +61.91.161.217 doc-08-a0-docs.googleusercontent.com +61.91.161.217 doc-0c-a0-docs.googleusercontent.com +61.91.161.217 doc-0g-a0-docs.googleusercontent.com +61.91.161.217 doc-0k-a0-docs.googleusercontent.com +61.91.161.217 doc-0o-a0-docs.googleusercontent.com +61.91.161.217 doc-0s-a0-docs.googleusercontent.com +61.91.161.217 doc-10-a0-docs.googleusercontent.com +61.91.161.217 doc-14-a0-docs.googleusercontent.com +61.91.161.217 doc-00-a4-docs.googleusercontent.com +61.91.161.217 doc-04-a4-docs.googleusercontent.com +61.91.161.217 doc-08-a4-docs.googleusercontent.com +61.91.161.217 doc-0c-a4-docs.googleusercontent.com +61.91.161.217 doc-0g-a4-docs.googleusercontent.com +61.91.161.217 doc-0k-a4-docs.googleusercontent.com +61.91.161.217 doc-0o-a4-docs.googleusercontent.com +61.91.161.217 doc-0s-a4-docs.googleusercontent.com +61.91.161.217 doc-10-a4-docs.googleusercontent.com +61.91.161.217 doc-14-a4-docs.googleusercontent.com +61.91.161.217 doc-00-a8-docs.googleusercontent.com +61.91.161.217 doc-04-a8-docs.googleusercontent.com +61.91.161.217 doc-08-a8-docs.googleusercontent.com +61.91.161.217 doc-0c-a8-docs.googleusercontent.com +61.91.161.217 doc-0g-a8-docs.googleusercontent.com +61.91.161.217 doc-0k-a8-docs.googleusercontent.com +61.91.161.217 doc-0o-a8-docs.googleusercontent.com +61.91.161.217 doc-0s-a8-docs.googleusercontent.com +61.91.161.217 doc-10-a8-docs.googleusercontent.com +61.91.161.217 doc-14-a8-docs.googleusercontent.com +61.91.161.217 doc-00-ac-docs.googleusercontent.com +61.91.161.217 doc-04-ac-docs.googleusercontent.com +61.91.161.217 doc-08-ac-docs.googleusercontent.com +61.91.161.217 doc-0c-ac-docs.googleusercontent.com +61.91.161.217 doc-0g-ac-docs.googleusercontent.com +61.91.161.217 doc-0k-ac-docs.googleusercontent.com +61.91.161.217 doc-0o-ac-docs.googleusercontent.com +61.91.161.217 doc-0s-ac-docs.googleusercontent.com +61.91.161.217 doc-10-ac-docs.googleusercontent.com +61.91.161.217 doc-14-ac-docs.googleusercontent.com +61.91.161.217 doc-00-ag-docs.googleusercontent.com +61.91.161.217 doc-04-ag-docs.googleusercontent.com +61.91.161.217 doc-08-ag-docs.googleusercontent.com +61.91.161.217 doc-0c-ag-docs.googleusercontent.com +61.91.161.217 doc-0g-ag-docs.googleusercontent.com +61.91.161.217 doc-0k-ag-docs.googleusercontent.com +61.91.161.217 doc-0o-ag-docs.googleusercontent.com +61.91.161.217 doc-0s-ag-docs.googleusercontent.com +61.91.161.217 doc-10-ag-docs.googleusercontent.com +61.91.161.217 doc-14-ag-docs.googleusercontent.com +61.91.161.217 doc-00-ak-docs.googleusercontent.com +61.91.161.217 doc-04-ak-docs.googleusercontent.com +61.91.161.217 doc-08-ak-docs.googleusercontent.com +61.91.161.217 doc-0c-ak-docs.googleusercontent.com +61.91.161.217 doc-0g-ak-docs.googleusercontent.com +61.91.161.217 doc-0k-ak-docs.googleusercontent.com +61.91.161.217 doc-0o-ak-docs.googleusercontent.com +61.91.161.217 doc-0s-ak-docs.googleusercontent.com +61.91.161.217 doc-10-ak-docs.googleusercontent.com +61.91.161.217 doc-14-ak-docs.googleusercontent.com +61.91.161.217 doc-00-ao-docs.googleusercontent.com +61.91.161.217 doc-04-ao-docs.googleusercontent.com +61.91.161.217 doc-08-ao-docs.googleusercontent.com +61.91.161.217 doc-0c-ao-docs.googleusercontent.com +61.91.161.217 doc-0g-ao-docs.googleusercontent.com +61.91.161.217 doc-0k-ao-docs.googleusercontent.com +61.91.161.217 doc-0o-ao-docs.googleusercontent.com +61.91.161.217 doc-0s-ao-docs.googleusercontent.com +61.91.161.217 doc-10-ao-docs.googleusercontent.com +61.91.161.217 doc-14-ao-docs.googleusercontent.com +61.91.161.217 doc-00-as-docs.googleusercontent.com +61.91.161.217 doc-04-as-docs.googleusercontent.com +61.91.161.217 doc-08-as-docs.googleusercontent.com +61.91.161.217 doc-0c-as-docs.googleusercontent.com +61.91.161.217 doc-0g-as-docs.googleusercontent.com +61.91.161.217 doc-0k-as-docs.googleusercontent.com +61.91.161.217 doc-0o-as-docs.googleusercontent.com +61.91.161.217 doc-0s-as-docs.googleusercontent.com +61.91.161.217 doc-10-as-docs.googleusercontent.com +61.91.161.217 doc-14-as-docs.googleusercontent.com +61.91.161.217 doc-00-b0-docs.googleusercontent.com +61.91.161.217 doc-04-b0-docs.googleusercontent.com +61.91.161.217 doc-08-b0-docs.googleusercontent.com +61.91.161.217 doc-0c-b0-docs.googleusercontent.com +61.91.161.217 doc-0g-b0-docs.googleusercontent.com +61.91.161.217 doc-0k-b0-docs.googleusercontent.com +61.91.161.217 doc-0o-b0-docs.googleusercontent.com +61.91.161.217 doc-0s-b0-docs.googleusercontent.com +61.91.161.217 doc-10-b0-docs.googleusercontent.com +61.91.161.217 doc-14-b0-docs.googleusercontent.com +61.91.161.217 doc-00-b4-docs.googleusercontent.com +61.91.161.217 doc-04-b4-docs.googleusercontent.com +61.91.161.217 doc-08-b4-docs.googleusercontent.com +61.91.161.217 doc-0c-b4-docs.googleusercontent.com +61.91.161.217 doc-0g-b4-docs.googleusercontent.com +61.91.161.217 doc-0k-b4-docs.googleusercontent.com +61.91.161.217 doc-0o-b4-docs.googleusercontent.com +61.91.161.217 doc-0s-b4-docs.googleusercontent.com +61.91.161.217 doc-10-b4-docs.googleusercontent.com +61.91.161.217 doc-14-b4-docs.googleusercontent.com +61.91.161.217 doc-00-b8-docs.googleusercontent.com +61.91.161.217 doc-04-b8-docs.googleusercontent.com +61.91.161.217 doc-08-b8-docs.googleusercontent.com +61.91.161.217 doc-0c-b8-docs.googleusercontent.com +61.91.161.217 doc-0g-b8-docs.googleusercontent.com +61.91.161.217 doc-0k-b8-docs.googleusercontent.com +61.91.161.217 doc-0o-b8-docs.googleusercontent.com +61.91.161.217 doc-0s-b8-docs.googleusercontent.com +61.91.161.217 doc-10-b8-docs.googleusercontent.com +61.91.161.217 doc-14-b8-docs.googleusercontent.com +61.91.161.217 doc-00-bc-docs.googleusercontent.com +61.91.161.217 doc-04-bc-docs.googleusercontent.com +61.91.161.217 doc-08-bc-docs.googleusercontent.com +61.91.161.217 doc-0c-bc-docs.googleusercontent.com +61.91.161.217 doc-0g-bc-docs.googleusercontent.com +61.91.161.217 doc-0k-bc-docs.googleusercontent.com +61.91.161.217 doc-0o-bc-docs.googleusercontent.com +61.91.161.217 doc-0s-bc-docs.googleusercontent.com +61.91.161.217 doc-10-bc-docs.googleusercontent.com +61.91.161.217 doc-14-bc-docs.googleusercontent.com +61.91.161.217 doc-00-bg-docs.googleusercontent.com +61.91.161.217 doc-04-bg-docs.googleusercontent.com +61.91.161.217 doc-08-bg-docs.googleusercontent.com +61.91.161.217 doc-0c-bg-docs.googleusercontent.com +61.91.161.217 doc-0g-bg-docs.googleusercontent.com +61.91.161.217 doc-0k-bg-docs.googleusercontent.com +61.91.161.217 doc-0o-bg-docs.googleusercontent.com +61.91.161.217 doc-0s-bg-docs.googleusercontent.com +61.91.161.217 doc-10-bg-docs.googleusercontent.com +61.91.161.217 doc-14-bg-docs.googleusercontent.com +61.91.161.217 doc-00-bk-docs.googleusercontent.com +61.91.161.217 doc-04-bk-docs.googleusercontent.com +61.91.161.217 doc-08-bk-docs.googleusercontent.com +61.91.161.217 doc-0c-bk-docs.googleusercontent.com +61.91.161.217 doc-0g-bk-docs.googleusercontent.com +61.91.161.217 doc-0k-bk-docs.googleusercontent.com +61.91.161.217 doc-0o-bk-docs.googleusercontent.com +61.91.161.217 doc-0s-bk-docs.googleusercontent.com +61.91.161.217 doc-10-bk-docs.googleusercontent.com +61.91.161.217 doc-14-bk-docs.googleusercontent.com +61.91.161.217 doc-00-bo-docs.googleusercontent.com +61.91.161.217 doc-04-bo-docs.googleusercontent.com +61.91.161.217 doc-08-bo-docs.googleusercontent.com +61.91.161.217 doc-0c-bo-docs.googleusercontent.com +61.91.161.217 doc-0g-bo-docs.googleusercontent.com +61.91.161.217 doc-0k-bo-docs.googleusercontent.com +61.91.161.217 doc-0o-bo-docs.googleusercontent.com +61.91.161.217 doc-0s-bo-docs.googleusercontent.com +61.91.161.217 doc-10-bo-docs.googleusercontent.com +61.91.161.217 doc-14-bo-docs.googleusercontent.com +61.91.161.217 doc-00-bs-docs.googleusercontent.com +61.91.161.217 doc-04-bs-docs.googleusercontent.com +61.91.161.217 doc-08-bs-docs.googleusercontent.com +61.91.161.217 doc-0c-bs-docs.googleusercontent.com +61.91.161.217 doc-0g-bs-docs.googleusercontent.com +61.91.161.217 doc-0k-bs-docs.googleusercontent.com +61.91.161.217 doc-0o-bs-docs.googleusercontent.com +61.91.161.217 doc-0s-bs-docs.googleusercontent.com +61.91.161.217 doc-10-bs-docs.googleusercontent.com +61.91.161.217 doc-14-bs-docs.googleusercontent.com +61.91.161.217 doc-00-c0-docs.googleusercontent.com +61.91.161.217 doc-04-c0-docs.googleusercontent.com +61.91.161.217 doc-08-c0-docs.googleusercontent.com +61.91.161.217 doc-0c-c0-docs.googleusercontent.com +61.91.161.217 doc-0g-c0-docs.googleusercontent.com +61.91.161.217 doc-0k-c0-docs.googleusercontent.com +61.91.161.217 doc-0o-c0-docs.googleusercontent.com +61.91.161.217 doc-0s-c0-docs.googleusercontent.com +61.91.161.217 doc-10-c0-docs.googleusercontent.com +61.91.161.217 doc-14-c0-docs.googleusercontent.com +61.91.161.217 doc-00-c4-docs.googleusercontent.com +61.91.161.217 doc-04-c4-docs.googleusercontent.com +61.91.161.217 doc-08-c4-docs.googleusercontent.com +61.91.161.217 doc-0c-c4-docs.googleusercontent.com +61.91.161.217 doc-0g-c4-docs.googleusercontent.com +61.91.161.217 doc-0k-c4-docs.googleusercontent.com +61.91.161.217 doc-0o-c4-docs.googleusercontent.com +61.91.161.217 doc-0s-c4-docs.googleusercontent.com +61.91.161.217 doc-10-c4-docs.googleusercontent.com +61.91.161.217 doc-14-c4-docs.googleusercontent.com +61.91.161.217 doc-00-c8-docs.googleusercontent.com +61.91.161.217 doc-04-c8-docs.googleusercontent.com +61.91.161.217 doc-08-c8-docs.googleusercontent.com +61.91.161.217 doc-0c-c8-docs.googleusercontent.com +61.91.161.217 doc-0g-c8-docs.googleusercontent.com +61.91.161.217 doc-0k-c8-docs.googleusercontent.com +61.91.161.217 doc-0o-c8-docs.googleusercontent.com +61.91.161.217 doc-0s-c8-docs.googleusercontent.com +61.91.161.217 doc-10-c8-docs.googleusercontent.com +61.91.161.217 doc-14-c8-docs.googleusercontent.com +61.91.161.217 doc-00-cc-docs.googleusercontent.com +61.91.161.217 doc-04-cc-docs.googleusercontent.com +61.91.161.217 doc-08-cc-docs.googleusercontent.com +61.91.161.217 doc-0c-cc-docs.googleusercontent.com +61.91.161.217 doc-0g-cc-docs.googleusercontent.com +61.91.161.217 doc-0k-cc-docs.googleusercontent.com +61.91.161.217 doc-0o-cc-docs.googleusercontent.com +61.91.161.217 doc-0s-cc-docs.googleusercontent.com +61.91.161.217 doc-10-cc-docs.googleusercontent.com +61.91.161.217 doc-14-cc-docs.googleusercontent.com +61.91.161.217 doc-00-cg-docs.googleusercontent.com +61.91.161.217 doc-04-cg-docs.googleusercontent.com +61.91.161.217 doc-08-cg-docs.googleusercontent.com +61.91.161.217 doc-0c-cg-docs.googleusercontent.com +61.91.161.217 doc-0g-cg-docs.googleusercontent.com +61.91.161.217 doc-0k-cg-docs.googleusercontent.com +61.91.161.217 doc-0o-cg-docs.googleusercontent.com +61.91.161.217 doc-0s-cg-docs.googleusercontent.com +61.91.161.217 doc-10-cg-docs.googleusercontent.com +61.91.161.217 doc-14-cg-docs.googleusercontent.com +61.91.161.217 doc-00-ck-docs.googleusercontent.com +61.91.161.217 doc-04-ck-docs.googleusercontent.com +61.91.161.217 doc-08-ck-docs.googleusercontent.com +61.91.161.217 doc-0c-ck-docs.googleusercontent.com +61.91.161.217 doc-0g-ck-docs.googleusercontent.com +61.91.161.217 doc-0k-ck-docs.googleusercontent.com +61.91.161.217 doc-0o-ck-docs.googleusercontent.com +61.91.161.217 doc-0s-ck-docs.googleusercontent.com +61.91.161.217 doc-10-ck-docs.googleusercontent.com +61.91.161.217 doc-14-ck-docs.googleusercontent.com +61.91.161.217 doc-00-co-docs.googleusercontent.com +61.91.161.217 doc-04-co-docs.googleusercontent.com +61.91.161.217 doc-08-co-docs.googleusercontent.com +61.91.161.217 doc-0c-co-docs.googleusercontent.com +61.91.161.217 doc-0g-co-docs.googleusercontent.com +61.91.161.217 doc-0k-co-docs.googleusercontent.com +61.91.161.217 doc-0o-co-docs.googleusercontent.com +61.91.161.217 doc-0s-co-docs.googleusercontent.com +61.91.161.217 doc-10-co-docs.googleusercontent.com +61.91.161.217 doc-14-co-docs.googleusercontent.com +61.91.161.217 doc-00-cs-docs.googleusercontent.com +61.91.161.217 doc-04-cs-docs.googleusercontent.com +61.91.161.217 doc-08-cs-docs.googleusercontent.com +61.91.161.217 doc-0c-cs-docs.googleusercontent.com +61.91.161.217 doc-0g-cs-docs.googleusercontent.com +61.91.161.217 doc-0k-cs-docs.googleusercontent.com +61.91.161.217 doc-0o-cs-docs.googleusercontent.com +61.91.161.217 doc-0s-cs-docs.googleusercontent.com +61.91.161.217 doc-10-cs-docs.googleusercontent.com +61.91.161.217 doc-14-cs-docs.googleusercontent.com +61.91.161.217 doc-00-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-04-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-08-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0c-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0g-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0k-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0o-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0s-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-10-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-14-2g-3dwarehouse.googleusercontent.com +61.91.161.217 feedback.googleusercontent.com +61.91.161.217 images1-esmobile-opensocial.googleusercontent.com +61.91.161.217 images2-esmobile-opensocial.googleusercontent.com +61.91.161.217 images3-esmobile-opensocial.googleusercontent.com +61.91.161.217 images4-esmobile-opensocial.googleusercontent.com +61.91.161.217 images5-esmobile-opensocial.googleusercontent.com +61.91.161.217 images6-esmobile-opensocial.googleusercontent.com +61.91.161.217 images7-esmobile-opensocial.googleusercontent.com +61.91.161.217 images8-esmobile-opensocial.googleusercontent.com +61.91.161.217 images9-esmobile-opensocial.googleusercontent.com +61.91.161.217 images1-hangout-opensocial.googleusercontent.com +61.91.161.217 images2-hangout-opensocial.googleusercontent.com +61.91.161.217 images3-hangout-opensocial.googleusercontent.com +61.91.161.217 images4-hangout-opensocial.googleusercontent.com +61.91.161.217 images5-hangout-opensocial.googleusercontent.com +61.91.161.217 images6-hangout-opensocial.googleusercontent.com +61.91.161.217 images7-hangout-opensocial.googleusercontent.com +61.91.161.217 images8-hangout-opensocial.googleusercontent.com +61.91.161.217 images9-hangout-opensocial.googleusercontent.com +61.91.161.217 images-docs-opensocial.googleusercontent.com +61.91.161.217 images-oz-opensocial.googleusercontent.com +61.91.161.217 images-lso-opensocial.googleusercontent.com +61.91.161.217 images-blogger-opensocial.googleusercontent.com +61.91.161.217 images-pos-opensocial.googleusercontent.com +61.91.161.217 www-calendar-opensocial.googleusercontent.com +61.91.161.217 a-oz-opensocial.googleusercontent.com +61.91.161.217 lh0.googleusercontent.com +61.91.161.217 lh1.googleusercontent.com +61.91.161.217 lh2.googleusercontent.com +61.91.161.217 lh3.googleusercontent.com +61.91.161.217 lh4.googleusercontent.com +61.91.161.217 lh5.googleusercontent.com +61.91.161.217 lh6.googleusercontent.com +61.91.161.217 mail-attachment.googleusercontent.com +61.91.161.217 music-onebox.googleusercontent.com +61.91.161.217 newsstand.googleusercontent.com +61.91.161.217 oauth.googleusercontent.com +61.91.161.217 producer.googleusercontent.com +61.91.161.217 reader.googleusercontent.com +61.91.161.217 s1.googleusercontent.com +61.91.161.217 s2.googleusercontent.com +61.91.161.217 s3.googleusercontent.com +61.91.161.217 s4.googleusercontent.com +61.91.161.217 s5.googleusercontent.com +61.91.161.217 s6.googleusercontent.com +61.91.161.217 spreadsheets-opensocial.googleusercontent.com +61.91.161.217 static.googleusercontent.com +61.91.161.217 themes.googleusercontent.com +61.91.161.217 translate.googleusercontent.com +61.91.161.217 video.googleusercontent.com +61.91.161.217 wave.googleusercontent.com +61.91.161.217 webcache.googleusercontent.com +61.91.161.217 ytimg.googleusercontent.com +61.91.161.217 www-opensocial.googleusercontent.com +61.91.161.217 www-gm-opensocial.googleusercontent.com +61.91.161.217 www-opensocial-sandbox.googleusercontent.com +61.91.161.217 www-fc-opensocial.googleusercontent.com +61.91.161.217 www-focus-opensocial.googleusercontent.com +61.91.161.217 images0-focus-opensocial.googleusercontent.com +61.91.161.217 images1-focus-opensocial.googleusercontent.com +61.91.161.217 images2-focus-opensocial.googleusercontent.com +61.91.161.217 images3-focus-opensocial.googleusercontent.com +61.91.161.217 images4-focus-opensocial.googleusercontent.com +61.91.161.217 images5-focus-opensocial.googleusercontent.com +61.91.161.217 images6-focus-opensocial.googleusercontent.com +61.91.161.217 images7-focus-opensocial.googleusercontent.com +61.91.161.217 images8-focus-opensocial.googleusercontent.com +61.91.161.217 images9-focus-opensocial.googleusercontent.com +61.91.161.217 0-focus-opensocial.googleusercontent.com +61.91.161.217 1-focus-opensocial.googleusercontent.com +61.91.161.217 2-focus-opensocial.googleusercontent.com +61.91.161.217 3-focus-opensocial.googleusercontent.com +61.91.161.217 www-fusiontables-opensocial.googleusercontent.com +61.91.161.217 www-kix-opensocial.googleusercontent.com +61.91.161.217 www-onepick-opensocial.googleusercontent.com +61.91.161.217 images-onepick-opensocial.googleusercontent.com +61.91.161.217 www-open-opensocial.googleusercontent.com +61.91.161.217 0-open-opensocial.googleusercontent.com +61.91.161.217 1-open-opensocial.googleusercontent.com +61.91.161.217 2-open-opensocial.googleusercontent.com +61.91.161.217 3-open-opensocial.googleusercontent.com +61.91.161.217 www-oz-opensocial.googleusercontent.com +61.91.161.217 www-trixcopysheet-opensocial.googleusercontent.com +61.91.161.217 www-wave-opensocial.googleusercontent.com +61.91.161.217 wave-opensocial.googleusercontent.com +61.91.161.217 0-wave-opensocial.googleusercontent.com +61.91.161.217 1-wave-opensocial.googleusercontent.com +61.91.161.217 2-wave-opensocial.googleusercontent.com +61.91.161.217 3-wave-opensocial.googleusercontent.com +61.91.161.217 4-wave-opensocial.googleusercontent.com +61.91.161.217 5-wave-opensocial.googleusercontent.com +61.91.161.217 6-wave-opensocial.googleusercontent.com +61.91.161.217 7-wave-opensocial.googleusercontent.com +61.91.161.217 8-wave-opensocial.googleusercontent.com +61.91.161.217 9-wave-opensocial.googleusercontent.com +61.91.161.217 10-wave-opensocial.googleusercontent.com +61.91.161.217 11-wave-opensocial.googleusercontent.com +61.91.161.217 12-wave-opensocial.googleusercontent.com +61.91.161.217 13-wave-opensocial.googleusercontent.com +61.91.161.217 14-wave-opensocial.googleusercontent.com +61.91.161.217 15-wave-opensocial.googleusercontent.com +61.91.161.217 16-wave-opensocial.googleusercontent.com +61.91.161.217 17-wave-opensocial.googleusercontent.com +61.91.161.217 18-wave-opensocial.googleusercontent.com +61.91.161.217 19-wave-opensocial.googleusercontent.com +61.91.161.217 20-wave-opensocial.googleusercontent.com +61.91.161.217 21-wave-opensocial.googleusercontent.com +61.91.161.217 22-wave-opensocial.googleusercontent.com +61.91.161.217 23-wave-opensocial.googleusercontent.com +61.91.161.217 24-wave-opensocial.googleusercontent.com +61.91.161.217 25-wave-opensocial.googleusercontent.com +61.91.161.217 26-wave-opensocial.googleusercontent.com +61.91.161.217 27-wave-opensocial.googleusercontent.com +61.91.161.217 28-wave-opensocial.googleusercontent.com +61.91.161.217 29-wave-opensocial.googleusercontent.com +61.91.161.217 30-wave-opensocial.googleusercontent.com +61.91.161.217 31-wave-opensocial.googleusercontent.com +61.91.161.217 32-wave-opensocial.googleusercontent.com +61.91.161.217 33-wave-opensocial.googleusercontent.com +61.91.161.217 34-wave-opensocial.googleusercontent.com +61.91.161.217 35-wave-opensocial.googleusercontent.com +61.91.161.217 36-wave-opensocial.googleusercontent.com +61.91.161.217 37-wave-opensocial.googleusercontent.com +61.91.161.217 38-wave-opensocial.googleusercontent.com +61.91.161.217 39-wave-opensocial.googleusercontent.com +61.91.161.217 40-wave-opensocial.googleusercontent.com +# Googleusercontent End + +61.91.161.217 toolbox.googleapps.com +61.91.161.217 m.google.com +61.91.161.217 m.google.com.hk +61.91.161.217 m.google.com.tw +61.91.161.217 m.google.com.sg +61.91.161.217 mobile.google.com +61.91.161.217 mobile.l.google.com +216.58.196.236 proxy.googlezip.net +216.58.196.236 compress.googlezip.net +216.58.196.236 proxy-dev.googlezip.net +216.239.34.21 polymer-project.org +61.91.161.217 www.polymer-project.org +61.91.161.217 talkgadget.l.google.com +61.91.161.217 hangouts.google.com +61.91.161.217 hangout.google.com +61.91.161.217 0.talkgadget.google.com +61.91.161.217 chromoting-oauth.talkgadget.google.com +61.91.161.217 chromoting-host.talkgadget.google.com +61.91.161.217 chromoting-client.talkgadget.google.com +61.91.161.217 remoting-pa.googleapis.com +61.91.161.217 clientmetrics-pa.googleapis.com +61.91.161.217 contacts.google.com +61.91.161.217 youtube.com +61.91.161.217 www.youtube.com +61.91.161.217 au.youtube.com +61.91.161.217 ca.youtube.com +61.91.161.217 de.youtube.com +61.91.161.217 jp.youtube.com +61.91.161.217 ru.youtube.com +61.91.161.217 uk.youtube.com +61.91.161.217 tw.youtube.com +61.91.161.217 ads.youtube.com +61.91.161.217 www.youtube-nocookie.com +61.91.161.217 m.youtube.com +61.91.161.217 youtu.be +61.91.161.217 gdata.youtube.com +61.91.161.217 stage.gdata.youtube.com +61.91.161.217 s.youtube.com +61.91.161.217 accounts.youtube.com +61.91.161.217 img.youtube.com +61.91.161.217 help.youtube.com +61.91.161.217 upload.youtube.com +61.91.161.217 insight.youtube.com +61.91.161.217 apiblog.youtube.com +61.91.161.217 i.ytimg.com +61.91.161.217 i1.ytimg.com +61.91.161.217 i2.ytimg.com +61.91.161.217 i3.ytimg.com +61.91.161.217 i4.ytimg.com +61.91.161.217 i9.ytimg.com +61.91.161.217 s.ytimg.com +61.91.161.217 manifest.googlevideo.com +64.233.162.83 onetoday.google.com +64.233.162.83 notifications.google.com + +# Google:others Start +61.91.161.217 google.ad +61.91.161.217 google.ae +61.91.161.217 google.al +61.91.161.217 google.am +61.91.161.217 google.as +61.91.161.217 google.at +61.91.161.217 google.az +61.91.161.217 google.ba +61.91.161.217 google.be +61.91.161.217 google.bf +61.91.161.217 google.bg +61.91.161.217 google.bi +61.91.161.217 google.bj +61.91.161.217 google.bs +61.91.161.217 google.bt +61.91.161.217 google.by +61.91.161.217 google.ca +61.91.161.217 google.cat +61.91.161.217 google.cd +61.91.161.217 google.cf +61.91.161.217 google.cg +61.91.161.217 google.ch +61.91.161.217 google.ci +61.91.161.217 google.cl +61.91.161.217 google.cm +61.91.161.217 google.co.ao +61.91.161.217 google.co.bw +61.91.161.217 google.co.ck +61.91.161.217 google.co.cr +61.91.161.217 google.co.id +61.91.161.217 google.co.il +61.91.161.217 google.co.in +61.91.161.217 google.co.ke +61.91.161.217 google.co.kr +61.91.161.217 google.co.ls +61.91.161.217 google.co.ma +61.91.161.217 google.co.mz +61.91.161.217 google.co.nz +61.91.161.217 google.co.th +61.91.161.217 google.co.tz +61.91.161.217 google.co.ug +61.91.161.217 google.co.uk +61.91.161.217 google.co.uz +61.91.161.217 google.co.ve +61.91.161.217 google.co.vi +61.91.161.217 google.co.za +61.91.161.217 google.co.zm +61.91.161.217 google.co.zw +61.91.161.217 google.com.af +61.91.161.217 google.com.ag +61.91.161.217 google.com.ai +61.91.161.217 google.com.ar +61.91.161.217 google.com.au +61.91.161.217 google.com.bd +61.91.161.217 google.com.bh +61.91.161.217 google.com.bn +61.91.161.217 google.com.bo +61.91.161.217 google.com.br +61.91.161.217 google.com.bz +61.91.161.217 google.com.co +61.91.161.217 google.com.cu +61.91.161.217 google.com.cy +61.91.161.217 google.com.do +61.91.161.217 google.com.ec +61.91.161.217 google.com.eg +61.91.161.217 google.com.et +61.91.161.217 google.com.fj +61.91.161.217 google.com.gh +61.91.161.217 google.com.gi +61.91.161.217 google.com.gt +61.91.161.217 google.com.jm +61.91.161.217 google.com.kh +61.91.161.217 google.com.kw +61.91.161.217 google.com.lb +61.91.161.217 google.com.ly +61.91.161.217 google.com.mm +61.91.161.217 google.com.mt +61.91.161.217 google.com.mx +61.91.161.217 google.com.my +61.91.161.217 google.com.na +61.91.161.217 google.com.nf +61.91.161.217 google.com.ng +61.91.161.217 google.com.ni +61.91.161.217 google.com.np +61.91.161.217 google.com.om +61.91.161.217 google.com.pa +61.91.161.217 google.com.pe +61.91.161.217 google.com.pg +61.91.161.217 google.com.ph +61.91.161.217 google.com.pk +61.91.161.217 google.com.pr +61.91.161.217 google.com.py +61.91.161.217 google.com.qa +61.91.161.217 google.com.sa +61.91.161.217 google.com.sb +61.91.161.217 google.com.sl +61.91.161.217 google.com.sv +61.91.161.217 google.com.tj +61.91.161.217 google.com.tr +61.91.161.217 google.com.ua +61.91.161.217 google.com.uy +61.91.161.217 google.com.vc +61.91.161.217 google.com.vn +61.91.161.217 google.cv +61.91.161.217 google.cz +61.91.161.217 google.de +61.91.161.217 google.dj +61.91.161.217 google.dk +61.91.161.217 google.dm +61.91.161.217 google.dz +61.91.161.217 google.ee +61.91.161.217 google.es +61.91.161.217 google.fi +61.91.161.217 google.fm +61.91.161.217 google.fr +61.91.161.217 google.ga +61.91.161.217 google.ge +61.91.161.217 google.gg +61.91.161.217 google.gl +61.91.161.217 google.gm +61.91.161.217 google.gp +61.91.161.217 google.gr +61.91.161.217 google.gy +61.91.161.217 google.hn +61.91.161.217 google.hr +61.91.161.217 google.ht +61.91.161.217 google.hu +61.91.161.217 google.ie +61.91.161.217 google.im +61.91.161.217 google.iq +61.91.161.217 google.is +61.91.161.217 google.it +61.91.161.217 google.je +61.91.161.217 google.jo +61.91.161.217 google.kg +61.91.161.217 google.ki +61.91.161.217 google.kz +61.91.161.217 google.la +61.91.161.217 google.li +61.91.161.217 google.lk +61.91.161.217 google.lt +61.91.161.217 google.lu +61.91.161.217 google.lv +61.91.161.217 google.md +61.91.161.217 google.me +61.91.161.217 google.mg +61.91.161.217 google.mk +61.91.161.217 google.ml +61.91.161.217 google.mn +61.91.161.217 google.ms +61.91.161.217 google.mu +61.91.161.217 google.mv +61.91.161.217 google.mw +61.91.161.217 google.ne +61.91.161.217 google.nl +61.91.161.217 google.no +61.91.161.217 google.nr +61.91.161.217 google.nu +61.91.161.217 google.pl +61.91.161.217 google.pn +61.91.161.217 google.ps +61.91.161.217 google.pt +61.91.161.217 google.ro +61.91.161.217 google.rs +61.91.161.217 google.ru +61.91.161.217 google.rw +61.91.161.217 google.sc +61.91.161.217 google.se +61.91.161.217 google.sh +61.91.161.217 google.si +61.91.161.217 google.sk +61.91.161.217 google.sm +61.91.161.217 google.sn +61.91.161.217 google.so +61.91.161.217 google.st +61.91.161.217 google.td +61.91.161.217 google.tg +61.91.161.217 google.tk +61.91.161.217 google.tl +61.91.161.217 google.tm +61.91.161.217 google.tn +61.91.161.217 google.to +61.91.161.217 google.tt +61.91.161.217 google.vg +61.91.161.217 google.vu +61.91.161.217 google.ws +61.91.161.217 www.google.ad +61.91.161.217 www.google.ae +61.91.161.217 www.google.al +61.91.161.217 www.google.am +61.91.161.217 www.google.as +61.91.161.217 www.google.at +61.91.161.217 www.google.az +61.91.161.217 www.google.ba +61.91.161.217 www.google.be +61.91.161.217 www.google.bf +61.91.161.217 www.google.bg +61.91.161.217 www.google.bi +61.91.161.217 www.google.bj +61.91.161.217 www.google.bs +61.91.161.217 www.google.bt +61.91.161.217 www.google.by +61.91.161.217 www.google.ca +61.91.161.217 www.google.cat +61.91.161.217 www.google.cd +61.91.161.217 www.google.cf +61.91.161.217 www.google.cg +61.91.161.217 www.google.ch +61.91.161.217 www.google.ci +61.91.161.217 www.google.cl +61.91.161.217 www.google.cm +61.91.161.217 www.google.co.ao +61.91.161.217 www.google.co.bw +61.91.161.217 www.google.co.ck +61.91.161.217 www.google.co.cr +61.91.161.217 www.google.co.id +61.91.161.217 www.google.co.il +61.91.161.217 www.google.co.in +61.91.161.217 www.google.co.ke +61.91.161.217 www.google.co.kr +61.91.161.217 www.google.co.ls +61.91.161.217 www.google.co.ma +61.91.161.217 www.google.co.mz +61.91.161.217 www.google.co.nz +61.91.161.217 www.google.co.th +61.91.161.217 www.google.co.tz +61.91.161.217 www.google.co.ug +61.91.161.217 www.google.co.uk +61.91.161.217 www.google.co.uz +61.91.161.217 www.google.co.ve +61.91.161.217 www.google.co.vi +61.91.161.217 www.google.co.za +61.91.161.217 www.google.co.zm +61.91.161.217 www.google.co.zw +61.91.161.217 www.google.com.af +61.91.161.217 www.google.com.ag +61.91.161.217 www.google.com.ai +61.91.161.217 www.google.com.ar +61.91.161.217 www.google.com.au +61.91.161.217 www.google.com.bd +61.91.161.217 www.google.com.bh +61.91.161.217 www.google.com.bn +61.91.161.217 www.google.com.bo +61.91.161.217 www.google.com.br +61.91.161.217 www.google.com.bz +61.91.161.217 www.google.com.co +61.91.161.217 www.google.com.cu +61.91.161.217 www.google.com.cy +61.91.161.217 www.google.com.do +61.91.161.217 www.google.com.ec +61.91.161.217 www.google.com.eg +61.91.161.217 www.google.com.et +61.91.161.217 www.google.com.fj +61.91.161.217 www.google.com.gh +61.91.161.217 www.google.com.gi +61.91.161.217 www.google.com.gr +61.91.161.217 www.google.com.gt +61.91.161.217 www.google.com.jm +61.91.161.217 www.google.com.kh +61.91.161.217 www.google.com.kw +61.91.161.217 www.google.com.lb +61.91.161.217 www.google.com.ly +61.91.161.217 www.google.com.mm +61.91.161.217 www.google.com.mt +61.91.161.217 www.google.com.mx +61.91.161.217 www.google.com.my +61.91.161.217 www.google.com.na +61.91.161.217 www.google.com.nf +61.91.161.217 www.google.com.ng +61.91.161.217 www.google.com.ni +61.91.161.217 www.google.com.np +61.91.161.217 www.google.com.om +61.91.161.217 www.google.com.pa +61.91.161.217 www.google.com.pe +61.91.161.217 www.google.com.pg +61.91.161.217 www.google.com.ph +61.91.161.217 www.google.com.pk +61.91.161.217 www.google.com.pr +61.91.161.217 www.google.com.py +61.91.161.217 www.google.com.qa +61.91.161.217 www.google.com.ru +61.91.161.217 www.google.com.sa +61.91.161.217 www.google.com.sb +61.91.161.217 www.google.com.sl +61.91.161.217 www.google.com.sv +61.91.161.217 www.google.com.tj +61.91.161.217 www.google.com.tr +61.91.161.217 www.google.com.ua +61.91.161.217 www.google.com.uy +61.91.161.217 www.google.com.vc +61.91.161.217 www.google.com.vn +61.91.161.217 www.google.cv +61.91.161.217 www.google.cz +61.91.161.217 www.google.de +61.91.161.217 www.google.dj +61.91.161.217 www.google.dk +61.91.161.217 www.google.dm +61.91.161.217 www.google.dz +61.91.161.217 www.google.ee +61.91.161.217 www.google.es +61.91.161.217 www.google.fi +61.91.161.217 www.google.fm +61.91.161.217 www.google.fr +61.91.161.217 www.google.ga +61.91.161.217 www.google.ge +61.91.161.217 www.google.gg +61.91.161.217 www.google.gl +61.91.161.217 www.google.gm +61.91.161.217 www.google.gp +61.91.161.217 www.google.gr +61.91.161.217 www.google.gy +61.91.161.217 www.google.hn +61.91.161.217 www.google.hr +61.91.161.217 www.google.ht +61.91.161.217 www.google.hu +61.91.161.217 www.google.ie +61.91.161.217 www.google.im +61.91.161.217 www.google.iq +61.91.161.217 www.google.is +61.91.161.217 www.google.it +61.91.161.217 www.google.je +61.91.161.217 www.google.jo +61.91.161.217 www.google.kg +61.91.161.217 www.google.ki +61.91.161.217 www.google.kz +61.91.161.217 www.google.la +61.91.161.217 www.google.li +61.91.161.217 www.google.lk +61.91.161.217 www.google.lt +61.91.161.217 www.google.lu +61.91.161.217 www.google.lv +61.91.161.217 www.google.md +61.91.161.217 www.google.me +61.91.161.217 www.google.mg +61.91.161.217 www.google.mk +61.91.161.217 www.google.ml +61.91.161.217 www.google.mn +61.91.161.217 www.google.ms +61.91.161.217 www.google.mu +61.91.161.217 www.google.mv +61.91.161.217 www.google.mw +61.91.161.217 www.google.ne +61.91.161.217 www.google.nl +61.91.161.217 www.google.no +61.91.161.217 www.google.nr +61.91.161.217 www.google.nu +61.91.161.217 www.google.pl +61.91.161.217 www.google.pn +61.91.161.217 www.google.ps +61.91.161.217 www.google.pt +61.91.161.217 www.google.ro +61.91.161.217 www.google.rs +61.91.161.217 www.google.ru +61.91.161.217 www.google.rw +61.91.161.217 www.google.sc +61.91.161.217 www.google.se +61.91.161.217 www.google.sh +61.91.161.217 www.google.si +61.91.161.217 www.google.sk +61.91.161.217 www.google.sm +61.91.161.217 www.google.sn +61.91.161.217 www.google.so +61.91.161.217 www.google.st +61.91.161.217 www.google.td +61.91.161.217 www.google.tg +61.91.161.217 www.google.tk +61.91.161.217 www.google.tl +61.91.161.217 www.google.tm +61.91.161.217 www.google.tn +61.91.161.217 www.google.to +61.91.161.217 www.google.tt +61.91.161.217 www.google.vg +61.91.161.217 www.google.vu +61.91.161.217 www.google.ws +61.91.161.217 foobar.withgoogle.com +61.91.161.217 interstellar.withgoogle.com +61.91.161.217 edudirectory.withgoogle.com +61.91.161.217 atmosphere.withgoogle.com +61.91.161.217 accelerate.withgoogle.com +61.91.161.217 insgruene.withgoogle.com +61.91.161.217 atmospheretokyo.withgoogle.com +61.91.161.217 connectedclassrooms.withgoogle.com +61.91.161.217 smartypins.withgoogle.com +61.91.161.217 streetart.withgoogle.com +61.91.161.217 cardboard.withgoogle.com +61.91.161.217 kickwithchrome.withgoogle.com +61.91.161.217 candidatos.withgoogle.com +61.91.161.217 trendstw.withgoogle.com +61.91.161.217 impactchallenge.withgoogle.com +61.91.161.217 virustotalcloud.appspot.com +61.91.161.217 eduproducts.withgoogle.com +61.91.161.217 certificate-transparency.org +61.91.161.217 www.certificate-transparency.org +61.91.161.217 abc.xyz +64.233.191.121 www.androidexperiments.com +64.233.191.121 androidexperiments.com +64.233.188.121 www.tensorflow.org +# Google:others End + +# Gmail SMTP/POP/IMAP Start +64.233.188.14 gmr-smtp-in.l.google.com +64.233.188.16 googlemail-imap.l.google.com +64.233.188.16 googlemail-smtp.l.google.com +64.233.188.16 googlemail-pop.l.google.com +64.233.188.16 pop.googlemail.com +64.233.188.16 imap.googlemail.com +64.233.188.16 smtp.googlemail.com +64.233.188.27 gmail-smtp-in.l.google.com +64.233.188.109 gmail-imap.l.google.com +64.233.188.109 gmail-pop.l.google.com +64.233.188.109 gmail-smtp.l.google.com +64.233.188.109 imap.gmail.com +64.233.188.109 smtp.gmail.com +64.233.188.109 pop.gmail.com +64.233.188.109 gmail-smtp-msa.l.google.com +# Gmail SMTP/POP/IMAP End + +# Google:stun Server Start +64.233.177.127 stun.l.google.com +64.233.177.127 alt1.stun.l.google.com +64.233.177.127 alt2.stun.l.google.com +64.233.177.127 alt3.stun.l.google.com +64.233.177.127 alt4.stun.l.google.com +64.233.177.127 alt5.stun.l.google.com +# Google:stun Server End + +# Google:Gtalk Start +64.233.188.125 talk.google.com +64.233.188.125 talk.l.google.com +64.233.188.125 talkx.l.google.com +64.233.188.125 alt1.talk.l.google.com +# Google:Gtalk End + +# Google:ghs Start +64.233.188.121 ghs.google.com +64.233.188.121 ghs46.google.com +64.233.188.121 ghs.l.google.com +64.233.188.121 ghs46.l.google.com +64.233.188.121 www.nianticlabs.com +64.233.188.121 gsamplemaps.googlepages.com +64.233.188.121 javascript-blocker.toggleable.com +64.233.188.121 goto.ext.google.com +64.233.188.121 webrtc.org +64.233.188.121 www.webrtc.org +64.233.188.121 chromeexperiments.com +64.233.188.121 www.chromeexperiments.com +64.233.188.121 vr.chromeexperiments.com +64.233.188.121 globe.chromeexperiments.com +64.233.188.121 workshop.chromeexperiments.com +64.233.188.121 www.gwtproject.org +64.233.188.121 www.html5rocks.com +64.233.188.121 slides.html5rocks.com +64.233.188.121 playground.html5rocks.com +64.233.188.121 studio.html5rocks.com +64.233.188.121 lists.webmproject.org +64.233.188.121 www.waveprotocol.org +64.233.188.121 www.20thingsilearned.com +64.233.188.121 www.creativelab5.com +64.233.188.121 blog.webmproject.org +64.233.188.121 www.agoogleaday.com +64.233.188.121 www.gosetsuden.jp +64.233.188.121 www.thegooglepuzzle.com +64.233.188.121 www.thegobridgeoglepuzzle.com +64.233.188.121 www.googlezeitgeist.com +64.233.188.121 news.dartlang.org +64.233.188.121 dartpad.dartlang.org +# Google:ghs End + +# Google:gcm Start +64.233.188.188 mobile-gtalk.l.google.com +64.233.188.188 mtalk.google.com +64.233.188.188 gcm.googleapis.com +64.233.188.188 gcm.l.google.com +64.233.188.188 gcm-xmpp.googleapis.com +64.233.188.188 gcm-preprod.l.google.com +64.233.188.188 gcm-preprod.googleapis.com +# Google:gcm End + +# Goole:duo Start +61.91.161.217 instantmessaging-pa.googleapis.com +# Goole:duo End + +# Google:A-GPS Start +64.233.171.192 supl.google.com +# Google:A-GPS End + +# Google:Made the code for girls Start +216.239.38.21 madewithcode.com +216.239.38.21 www.madewithcode.com +# Google:Made the code for girls End +# Google End + +# HumbleBundle Start +5.153.35.171 humble.pubnub.com +198.41.186.33 humblebundle.com +203.69.81.33 humblebundle-a.akamaihd.net +52.36.140.12 pubnub.com +74.125.34.32 www.humblebundle.com +# HumbleBundle End + +# imgur Start +103.245.224.193 imgur.com +103.245.224.193 www.imgur.com +103.245.224.193 i.imgur.com +103.245.224.193 s.imgur.com +# imgur End + +# Instagram Start +31.13.70.52 instagram.com +31.13.70.52 www.instagram.com +31.13.70.52 i.instagram.com +31.13.70.52 api.instagram.com +31.13.70.52 help.instagram.com +31.13.70.52 blog.instagram.com +74.117.178.40 graph.instagram.com +31.13.70.52 logger.instagram.com +31.13.70.52 badges.instagram.com +31.13.95.48 platform.instagram.com +31.13.70.52 maps.instagram.com +31.13.70.52 scontent.cdninstagram.com +31.13.70.52 scontent-a.cdninstagram.com +31.13.70.52 scontent-b.cdninstagram.com +184.51.15.142 igcdn-photos-a-a.akamaihd.net +184.51.15.142 igcdn-photos-b-a.akamaihd.net +184.51.15.142 igcdn-photos-c-a.akamaihd.net +184.51.15.142 igcdn-photos-d-a.akamaihd.net +184.51.15.142 igcdn-photos-e-a.akamaihd.net +184.51.15.142 igcdn-photos-f-a.akamaihd.net +184.51.15.142 igcdn-photos-g-a.akamaihd.net +184.51.15.142 igcdn-photos-h-a.akamaihd.net +184.51.15.142 igcdn-videos-a-0-a.akamaihd.net +184.51.15.142 igcdn-videos-a-1-a.akamaihd.net +184.51.15.142 igcdn-videos-a-2-a.akamaihd.net +184.51.15.142 igcdn-videos-a-3-a.akamaihd.net +184.51.15.142 igcdn-videos-a-4-a.akamaihd.net +184.51.15.142 igcdn-videos-a-5-a.akamaihd.net +184.51.15.142 igcdn-videos-a-6-a.akamaihd.net +184.51.15.142 igcdn-videos-a-7-a.akamaihd.net +184.51.15.142 igcdn-videos-a-8-a.akamaihd.net +184.51.15.142 igcdn-videos-a-9-a.akamaihd.net +184.51.15.142 igcdn-videos-a-10-a.akamaihd.net +184.51.15.142 igcdn-videos-a-11-a.akamaihd.net +184.51.15.142 igcdn-videos-a-12-a.akamaihd.net +184.51.15.142 igcdn-videos-a-13-a.akamaihd.net +184.51.15.142 igcdn-videos-a-14-a.akamaihd.net +184.51.15.142 igcdn-videos-a-15-a.akamaihd.net +184.51.15.142 igcdn-videos-a-16-a.akamaihd.net +184.51.15.142 igcdn-videos-a-17-a.akamaihd.net +184.51.15.142 igcdn-videos-a-18-a.akamaihd.net +184.51.15.142 igcdn-videos-a-19-a.akamaihd.net +184.51.15.142 igcdn-videos-b-0-a.akamaihd.net +184.51.15.142 igcdn-videos-b-1-a.akamaihd.net +184.51.15.142 igcdn-videos-b-2-a.akamaihd.net +184.51.15.142 igcdn-videos-b-3-a.akamaihd.net +184.51.15.142 igcdn-videos-b-4-a.akamaihd.net +184.51.15.142 igcdn-videos-b-5-a.akamaihd.net +184.51.15.142 igcdn-videos-b-6-a.akamaihd.net +184.51.15.142 igcdn-videos-b-7-a.akamaihd.net +184.51.15.142 igcdn-videos-b-8-a.akamaihd.net +184.51.15.142 igcdn-videos-b-9-a.akamaihd.net +184.51.15.142 igcdn-videos-b-10-a.akamaihd.net +184.51.15.142 igcdn-videos-b-11-a.akamaihd.net +184.51.15.142 igcdn-videos-b-12-a.akamaihd.net +184.51.15.142 igcdn-videos-b-13-a.akamaihd.net +184.51.15.142 igcdn-videos-b-14-a.akamaihd.net +184.51.15.142 igcdn-videos-b-15-a.akamaihd.net +184.51.15.142 igcdn-videos-b-16-a.akamaihd.net +184.51.15.142 igcdn-videos-b-17-a.akamaihd.net +184.51.15.142 igcdn-videos-b-18-a.akamaihd.net +184.51.15.142 igcdn-videos-b-19-a.akamaihd.net +184.51.15.142 igcdn-videos-c-0-a.akamaihd.net +184.51.15.142 igcdn-videos-c-1-a.akamaihd.net +184.51.15.142 igcdn-videos-c-2-a.akamaihd.net +184.51.15.142 igcdn-videos-c-3-a.akamaihd.net +184.51.15.142 igcdn-videos-c-4-a.akamaihd.net +184.51.15.142 igcdn-videos-c-5-a.akamaihd.net +184.51.15.142 igcdn-videos-c-6-a.akamaihd.net +184.51.15.142 igcdn-videos-c-7-a.akamaihd.net +184.51.15.142 igcdn-videos-c-8-a.akamaihd.net +184.51.15.142 igcdn-videos-c-9-a.akamaihd.net +184.51.15.142 igcdn-videos-c-10-a.akamaihd.net +184.51.15.142 igcdn-videos-c-11-a.akamaihd.net +184.51.15.142 igcdn-videos-c-12-a.akamaihd.net +184.51.15.142 igcdn-videos-c-13-a.akamaihd.net +184.51.15.142 igcdn-videos-c-14-a.akamaihd.net +184.51.15.142 igcdn-videos-c-15-a.akamaihd.net +184.51.15.142 igcdn-videos-c-16-a.akamaihd.net +184.51.15.142 igcdn-videos-c-17-a.akamaihd.net +184.51.15.142 igcdn-videos-c-18-a.akamaihd.net +184.51.15.142 igcdn-videos-c-19-a.akamaihd.net +184.51.15.142 igcdn-videos-d-0-a.akamaihd.net +184.51.15.142 igcdn-videos-d-1-a.akamaihd.net +184.51.15.142 igcdn-videos-d-2-a.akamaihd.net +184.51.15.142 igcdn-videos-d-3-a.akamaihd.net +184.51.15.142 igcdn-videos-d-4-a.akamaihd.net +184.51.15.142 igcdn-videos-d-5-a.akamaihd.net +184.51.15.142 igcdn-videos-d-6-a.akamaihd.net +184.51.15.142 igcdn-videos-d-7-a.akamaihd.net +184.51.15.142 igcdn-videos-d-8-a.akamaihd.net +184.51.15.142 igcdn-videos-d-9-a.akamaihd.net +184.51.15.142 igcdn-videos-d-10-a.akamaihd.net +184.51.15.142 igcdn-videos-d-11-a.akamaihd.net +184.51.15.142 igcdn-videos-d-12-a.akamaihd.net +184.51.15.142 igcdn-videos-d-13-a.akamaihd.net +184.51.15.142 igcdn-videos-d-14-a.akamaihd.net +184.51.15.142 igcdn-videos-d-15-a.akamaihd.net +184.51.15.142 igcdn-videos-d-16-a.akamaihd.net +184.51.15.142 igcdn-videos-d-17-a.akamaihd.net +184.51.15.142 igcdn-videos-d-18-a.akamaihd.net +184.51.15.142 igcdn-videos-d-19-a.akamaihd.net +184.51.15.142 igcdn-videos-e-0-a.akamaihd.net +184.51.15.142 igcdn-videos-e-1-a.akamaihd.net +184.51.15.142 igcdn-videos-e-2-a.akamaihd.net +184.51.15.142 igcdn-videos-e-3-a.akamaihd.net +184.51.15.142 igcdn-videos-e-4-a.akamaihd.net +184.51.15.142 igcdn-videos-e-5-a.akamaihd.net +184.51.15.142 igcdn-videos-e-6-a.akamaihd.net +184.51.15.142 igcdn-videos-e-7-a.akamaihd.net +184.51.15.142 igcdn-videos-e-8-a.akamaihd.net +184.51.15.142 igcdn-videos-e-9-a.akamaihd.net +184.51.15.142 igcdn-videos-e-10-a.akamaihd.net +184.51.15.142 igcdn-videos-e-11-a.akamaihd.net +184.51.15.142 igcdn-videos-e-12-a.akamaihd.net +184.51.15.142 igcdn-videos-e-13-a.akamaihd.net +184.51.15.142 igcdn-videos-e-14-a.akamaihd.net +184.51.15.142 igcdn-videos-e-15-a.akamaihd.net +184.51.15.142 igcdn-videos-e-16-a.akamaihd.net +184.51.15.142 igcdn-videos-e-17-a.akamaihd.net +184.51.15.142 igcdn-videos-e-18-a.akamaihd.net +184.51.15.142 igcdn-videos-e-19-a.akamaihd.net +184.51.15.142 igcdn-videos-f-0-a.akamaihd.net +184.51.15.142 igcdn-videos-f-1-a.akamaihd.net +184.51.15.142 igcdn-videos-f-2-a.akamaihd.net +184.51.15.142 igcdn-videos-f-3-a.akamaihd.net +184.51.15.142 igcdn-videos-f-4-a.akamaihd.net +184.51.15.142 igcdn-videos-f-5-a.akamaihd.net +184.51.15.142 igcdn-videos-f-6-a.akamaihd.net +184.51.15.142 igcdn-videos-f-7-a.akamaihd.net +184.51.15.142 igcdn-videos-f-8-a.akamaihd.net +184.51.15.142 igcdn-videos-f-9-a.akamaihd.net +184.51.15.142 igcdn-videos-f-10-a.akamaihd.net +184.51.15.142 igcdn-videos-f-11-a.akamaihd.net +184.51.15.142 igcdn-videos-f-12-a.akamaihd.net +184.51.15.142 igcdn-videos-f-13-a.akamaihd.net +184.51.15.142 igcdn-videos-f-14-a.akamaihd.net +184.51.15.142 igcdn-videos-f-15-a.akamaihd.net +184.51.15.142 igcdn-videos-f-16-a.akamaihd.net +184.51.15.142 igcdn-videos-f-17-a.akamaihd.net +184.51.15.142 igcdn-videos-f-18-a.akamaihd.net +184.51.15.142 igcdn-videos-f-19-a.akamaihd.net +184.51.15.142 igcdn-videos-g-0-a.akamaihd.net +184.51.15.142 igcdn-videos-g-1-a.akamaihd.net +184.51.15.142 igcdn-videos-g-2-a.akamaihd.net +184.51.15.142 igcdn-videos-g-3-a.akamaihd.net +184.51.15.142 igcdn-videos-g-4-a.akamaihd.net +184.51.15.142 igcdn-videos-g-5-a.akamaihd.net +184.51.15.142 igcdn-videos-g-6-a.akamaihd.net +184.51.15.142 igcdn-videos-g-7-a.akamaihd.net +184.51.15.142 igcdn-videos-g-8-a.akamaihd.net +184.51.15.142 igcdn-videos-g-9-a.akamaihd.net +184.51.15.142 igcdn-videos-g-10-a.akamaihd.net +184.51.15.142 igcdn-videos-g-11-a.akamaihd.net +184.51.15.142 igcdn-videos-g-12-a.akamaihd.net +184.51.15.142 igcdn-videos-g-13-a.akamaihd.net +184.51.15.142 igcdn-videos-g-14-a.akamaihd.net +184.51.15.142 igcdn-videos-g-15-a.akamaihd.net +184.51.15.142 igcdn-videos-g-16-a.akamaihd.net +184.51.15.142 igcdn-videos-g-17-a.akamaihd.net +184.51.15.142 igcdn-videos-g-18-a.akamaihd.net +184.51.15.142 igcdn-videos-g-19-a.akamaihd.net +184.51.15.142 igcdn-videos-h-0-a.akamaihd.net +184.51.15.142 igcdn-videos-h-1-a.akamaihd.net +184.51.15.142 igcdn-videos-h-2-a.akamaihd.net +184.51.15.142 igcdn-videos-h-3-a.akamaihd.net +184.51.15.142 igcdn-videos-h-4-a.akamaihd.net +184.51.15.142 igcdn-videos-h-5-a.akamaihd.net +184.51.15.142 igcdn-videos-h-6-a.akamaihd.net +184.51.15.142 igcdn-videos-h-7-a.akamaihd.net +184.51.15.142 igcdn-videos-h-8-a.akamaihd.net +184.51.15.142 igcdn-videos-h-9-a.akamaihd.net +184.51.15.142 igcdn-videos-h-10-a.akamaihd.net +184.51.15.142 igcdn-videos-h-11-a.akamaihd.net +184.51.15.142 igcdn-videos-h-12-a.akamaihd.net +184.51.15.142 igcdn-videos-h-13-a.akamaihd.net +184.51.15.142 igcdn-videos-h-14-a.akamaihd.net +184.51.15.142 igcdn-videos-h-15-a.akamaihd.net +184.51.15.142 igcdn-videos-h-16-a.akamaihd.net +184.51.15.142 igcdn-videos-h-17-a.akamaihd.net +184.51.15.142 igcdn-videos-h-18-a.akamaihd.net +184.51.15.142 igcdn-videos-h-19-a.akamaihd.net +184.51.15.142 instagramimages-a.akamaihd.net +184.51.15.142 instagramstatic-a.akamaihd.net +184.51.15.142 images.ak.instagram.com +184.51.15.142 static.ak.instagram.com +# Instagram End + +# issuu Start +52.72.26.162 issuu.com +52.72.26.162 www.issuu.com +52.72.26.162 blog.issuu.com +52.72.26.162 developers.issuu.com +52.72.26.162 pingback.issuu.com +52.72.26.162 photo.issuu.com +52.72.26.162 page.issuu.com +52.72.26.162 image.issuu.com +52.72.26.162 api.issuu.com +52.72.26.162 content.issuu.com +52.72.26.162 static.issuu.com +52.72.26.162 skin.issuu.com +52.72.26.162 help.issuu.com +# issuu End + +# Logmein Start +74.201.74.193 secure.logmein.com +# Logmein End + +# Medium start +104.16.120.127 medium.com +104.16.120.145 cdn-static-1.medium.com +104.16.120.145 cdn-images-1.medium.com +103.245.222.101 cdn-images-2.medium.com +# Medium end + +# MEGA Start +31.216.147.135 eu.api.mega.co.nz +154.53.224.130 eu.static.mega.co.nz +117.18.237.188 g.cdn1.mega.co.nz +154.53.224.150 mega.co.nz +154.53.224.166 mega.nz +31.216.147.130 w.api.mega.co.nz +# MEGA End + +# nytimes for mobile Start +170.149.159.135 nytimes.com +52.84.219.212 cn.nytimes.com +52.84.219.212 m.cn.nytimes.com +184.84.127.110 www.nytimes.com +184.84.127.110 graphics8.nytimes.com +184.84.127.110 json8.nytimes.com +184.84.127.110 typeface.nytimes.com +184.84.127.110 typeface.nyt.com +184.84.127.110 a1.nyt.com +184.84.127.110 s1.nyt.com +184.84.127.110 i1.nyt.com +184.84.127.110 static01.nyt.com +184.84.127.110 static02.nyt.com +184.84.127.110 static03.nyt.com +184.84.127.110 static04.nyt.com +184.84.127.110 static05.nyt.com +184.84.127.110 static06.nyt.com +184.84.127.110 static07.nyt.com +184.84.127.110 static08.nyt.com +184.84.127.110 static09.nyt.com +184.84.127.110 js.nyt.com +184.84.127.110 css.nyt.com +184.84.127.110 int.nyt.com +# nytimes for mobile End + +# OneDrive Start +134.170.108.26 onedrive.live.com +134.170.108.152 skyapi.onedrive.live.com +# OneDrive End + +# Smartdnsproxy start +103.28.248.96 www.smartdnsproxy.com +184.72.50.35 support.smartdnsproxy.com +# Smartdnsproxy end + +# SoundCloud Start +72.21.91.127 soundcloud.com +72.21.91.127 www.soundcloud.com +72.21.91.127 m.soundcloud.com +72.21.91.127 api.soundcloud.com +72.21.91.127 api-mobile.soundcloud.com +72.21.91.127 api-v2.soundcloud.com +45.33.14.185 blog.soundcloud.com +72.21.81.167 ec-media.soundcloud.com +68.232.32.220 ec-rtmp-media.soundcloud.com +72.21.91.127 on.soundcloud.com +72.21.91.127 promoted.soundcloud.com +72.21.91.127 visuals.soundcloud.com +72.21.91.96 a1.sndcdn.com +72.21.91.96 a-v2.sndcdn.com +54.230.233.111 cf-media.sndcdn.com +72.21.81.77 ec-media.sndcdn.com +72.21.91.96 ec-preview-media.sndcdn.com +72.21.91.96 style.sndcdn.com +72.21.91.96 va.sndcdn.com +# SoundCloud End + +# Startpage & Ixquick Start +43.249.39.38 startpage.com +43.249.39.38 www.startpage.com +43.249.39.49 www.ixquick.com +43.249.39.49 ixquick.com +37.0.89.56 support.startpage.com +37.0.89.57 support.ixquick.com +# Startpage & Ixquick End + +# telegram start +# As an alternative, you can use: +# https://telegram.ustclug.org +# +149.154.167.99 telegram.org +149.154.167.99 desktop.telegram.org +149.154.167.99 core.telegram.org +149.154.167.99 macos.telegram.org +149.154.167.120 web.telegram.org +# telegram end + +# Travis CI Start +151.101.76.249 travis-ci-org.global.ssl.fastly.net +# Travis CI End + +# Tumblr Start +66.6.33.193 tumblr.com +66.6.32.4 tumblr.co +66.6.32.4 api.tumblr.com +66.6.32.4 www.tumblr.com +66.6.32.22 cynicallys.tumblr.com +66.6.32.22 mx.tumblr.com +54.230.74.143 vt.tumblr.com +216.115.100.126 vtt.tumblr.com +66.6.32.162 ls.srvcs.tumblr.com +66.6.32.162 px.srvcs.tumblr.com +119.160.254.197 assets.tumblr.com +119.160.254.215 secure.assets.tumblr.com +54.182.6.6 secure.static.tumblr.com +66.6.44.4 media.tumblr.com +216.115.100.125 24.media.tumblr.com +192.229.237.98 30.media.tumblr.com +216.115.100.126 31.media.tumblr.com +52.85.155.236 32.media.tumblr.com +216.115.100.126 33.media.tumblr.com +54.230.158.13 36.media.tumblr.com +216.115.100.126 37.media.tumblr.com +216.115.100.126 38.media.tumblr.com +209.197.3.20 39.media.tumblr.com +192.229.237.98 40.media.tumblr.com +209.197.3.20 41.media.tumblr.com +192.229.237.185 42.media.tumblr.com +209.197.3.20 43.media.tumblr.com +192.229.237.98 44.media.tumblr.com +209.197.3.20 45.media.tumblr.com +192.229.237.98 46.media.tumblr.com +54.192.234.133 47.media.tumblr.com +209.197.3.20 48.media.tumblr.com +192.229.237.98 49.media.tumblr.com +54.192.234.244 50.media.tumblr.com +54.230.142.156 65.media.tumblr.com +192.229.237.98 66.media.tumblr.com +209.197.3.20 67.media.tumblr.com +216.115.100.126 68.media.tumblr.com +216.115.100.125 90.media.tumblr.com +128.127.159.1 94.media.tumblr.com +23.2.16.8 95.media.tumblr.com +52.85.155.236 96.media.tumblr.com +192.229.237.98 97.media.tumblr.com +151.101.76.249 98.media.tumblr.com +209.197.3.20 99.media.tumblr.com +# Tumblr End + +# Twitter Start +110.4.24.178 twitter.com +110.4.24.178 www.twitter.com +110.4.24.178 t.co +110.4.24.178 api.twitter.com +110.4.24.178 mobile.twitter.com +110.4.24.178 support.twitter.com +110.4.24.178 upload.twitter.com +110.4.24.178 tweetdeck.twitter.com +110.4.24.178 syndication.twitter.com +110.4.24.178 platform.twitter.com +110.4.24.178 about.twitter.com +110.4.24.178 blog.twitter.com +110.4.24.178 betastream.twitter.com +110.4.24.178 dev.twitter.com +110.4.24.178 pic.twitter.com +110.4.24.178 search.twitter.com +110.4.24.178 status.twitter.com +110.4.24.178 assets0.twitter.com +110.4.24.178 assets1.twitter.com +110.4.24.178 assets2.twitter.com +110.4.24.178 assets3.twitter.com +110.4.24.178 assets4.twitter.com +110.4.24.178 static.twitter.com +110.4.24.178 help.twitter.com +110.4.24.178 ton.twitter.com +110.4.24.178 s.twitter.com +110.4.24.178 analytics.twitter.com +110.4.24.178 urls-real.api.twitter.com +110.4.24.178 userstream.twitter.com +110.4.24.178 sitestream.twitter.com +110.4.24.178 stream.twitter.com +110.4.24.178 tdweb.twitter.com +173.236.110.98 twitpic.com +173.236.110.98 m1.twitpic.com +173.236.110.98 web1.twitpic.com +173.236.110.98 web10.twitpic.com +173.236.110.98 web2.twitpic.com +173.236.110.98 web3.twitpic.com +173.236.110.98 web4.twitpic.com +173.236.110.98 web5.twitpic.com +173.236.110.98 web6.twitpic.com +173.236.110.98 web7.twitpic.com +173.236.110.98 web8.twitpic.com +173.236.110.98 web9.twitpic.com +199.96.57.3 a0.twimg.com +199.96.57.3 a1.twimg.com +199.96.57.3 a2.twimg.com +199.96.57.3 a3.twimg.com +199.96.57.3 a4.twimg.com +199.96.57.3 a5.twimg.com +199.96.57.3 video.twimg.com +199.96.57.3 abs.twimg.com +199.96.57.3 g.twimg.com +199.96.57.3 o.twimg.com +199.96.57.3 p.twimg.com +199.96.57.3 r.twimg.com +199.96.57.3 ma.twimg.com +199.96.57.3 pbs.twimg.com +199.96.57.3 ton.twimg.com +199.96.57.3 syndication.twimg.com +199.96.57.3 syndication-o.twimg.com +199.96.57.3 image-proxy-origin.twimg.com +104.244.42.132 tweetdeck.com +104.244.42.132 api.tweetdeck.com +104.244.42.132 web.tweetdeck.com +104.244.42.132 www.tweetdeck.com +104.244.42.132 downloads.tweetdeck.com +110.4.24.178 cdn.syndication.twimg.com +110.4.24.178 cdn.syndication.twitter.com +110.4.24.178 apps.twitter.com +110.4.24.178 debates.twitter.com +# Twitter End + +# Vimeo Start +104.156.85.217 vimeo.com +104.156.85.217 www.vimeo.com +104.156.85.217 player.vimeo.com +103.245.224.143 i.vimeocdn.com +103.245.224.143 f.vimeocdn.com +103.245.222.249 vimeo-hp-videos.global.ssl.fastly.net +198.245.92.39 click.email.vimeo.com +# Vimeo End + +# W3schools Start +66.29.212.110 w3schools.com +68.232.44.251 www.w3schools.com +# W3schools End + +# Wikipedia Start +91.198.174.192 wuu.wikipedia.org +91.198.174.192 zh-yue.wikipedia.org +91.198.174.192 zh.wikipedia.org +91.198.174.192 zh.m.wikipedia.org +# Wikipedia End + +# WordPress Start +192.0.73.2 www.gravatar.com +192.0.73.2 0.gravatar.com +192.0.73.2 1.gravatar.com +192.0.73.2 2.gravatar.com +192.0.73.2 lb.gravatar.com +192.0.73.2 secure.gravatar.com +192.0.80.241 s.gravatar.com +192.0.80.239 en.gravatar.com +#192.0.80.240 en.gravatar.com +192.0.81.250 botd2.wordpress.com +66.155.9.238 dashboard.wordpress.com +66.155.9.238 en.blog.wordpress.com +66.155.9.238 en.forums.wordpress.com +66.155.9.238 forums.wordpress.com +192.0.77.2 i0.wp.com +192.0.77.2 i1.wp.com +192.0.77.2 i2.wp.com +66.155.9.238 lb.wordpress.com +66.155.9.238 lucifr.wordpress.com +192.0.81.250 r-login.wordpress.com +192.229.144.127 s.w.org +68.232.44.111 s.wordpress.com +68.232.44.111 s.wordpress.org +68.232.44.111 s0.wp.com +68.232.44.111 s1.wordpress.com +68.232.44.111 s1.wp.com +68.232.44.111 s2.wordpress.com +68.232.44.111 s2.wp.com +68.232.44.111 s3.wordpress.com +66.155.9.238 stats.wordpress.com +66.155.11.243 wordpress.com +66.155.9.238 wpcom.wordpress.com +66.155.9.238 zh.wordpress.com +66.155.9.238 zh-cn.wordpress.com +66.155.9.238 zh-sg.wordpress.com +# WordPress End + +# Yahoo Start +192.0.79.32 code.flickr.com +121.101.144.112 api.flickr.com +119.161.9.151 c5.ah.yahoo.com +119.160.254.215 d.yimg.com +106.10.136.195 de.yahoo.com +119.160.254.215 e.yimg.com +98.139.21.169 edit.yahoo.com +106.10.137.23 farm1.staticflickr.com +106.10.137.23 farm2.staticflickr.com +106.10.137.23 farm3.staticflickr.com +106.10.137.23 farm4.staticflickr.com +106.10.137.23 farm5.staticflickr.com +106.10.137.23 farm6.staticflickr.com +106.10.137.23 farm7.staticflickr.com +106.10.137.23 farm8.staticflickr.com +106.10.137.23 farm9.staticflickr.com +63.250.200.72 bf1.farm3.staticflickr.com +63.250.200.72 bf1.farm6.staticflickr.com +63.250.200.72 bf1.farm7.staticflickr.com +74.6.47.80 gq1.farm3.staticflickr.com +74.6.47.80 gq1.farm4.staticflickr.com +74.6.47.80 gq1.farm5.staticflickr.com +74.6.47.80 gq1.farm6.staticflickr.com +98.138.4.56 ne1.farm7.staticflickr.com +69.147.76.173 flickr.com +106.10.137.175 geo.query.yahoo.com +217.12.13.41 geo.yahoo.com +203.84.197.27 finance.yahoo.com +121.101.144.112 hk.finance.yahoo.com +27.123.201.252 tw.finance.yahoo.com +119.160.254.215 h.yimg.com +106.10.199.10 hk.news.yahoo.com +106.10.138.240 hk.yahoo.com +206.190.39.139 hsrd.yahoo.com +106.10.193.20 hk-mg61.mail.yahoo.com +119.160.254.215 l.yimg.com +106.10.193.20 login.yahoo.com +208.71.44.31 m.flickr.com +106.10.193.20 mail.yahoo.com +203.84.197.27 mg.mail.yahoo.com +106.10.193.20 na.edit.yahoo.com +106.10.193.20 open.login.yahoo.com +98.136.166.37 overview.mail.yahoo.com +119.160.254.215 p.yimg.com +216.115.100.106 s.yimg.com +119.160.254.215 s1.yimg.com +106.10.193.20 sa.edit.yahoo.com +208.71.44.31 secure.flickr.com +106.10.193.30 sp.analytics.yahoo.com +106.10.137.23 static.flickr.com +106.10.199.11 tw.news.yahoo.com +106.10.138.240 tw.yahoo.com +121.101.144.116 up.flickr.com +204.0.5.34 us.js2.yimg.com +106.10.138.240 us.yahoo.com +183.177.81.75 www.flickr.com +106.10.138.240 www.yahoo.com +98.138.253.109 yahoo.com +77.238.184.150 ying.com +183.177.81.75 downloadr.flickr.com +50.18.192.250 duckduckgo-owned-server.yahoo.net +116.214.11.98 tw.mobi.yahoo.com +# Yahoo End + +# Modified hosts end + + +# Armorgames Start +93.184.220.39 cache.armorgames.com +93.184.220.39 gamemedia.armorgames.com +93.184.220.39 quests.armorgames.com +93.184.220.39 armatars.armorgames.com +93.184.220.39 agi.armorgames.com +# Armorgames End + +# Amazon AWS Start +54.239.31.69 aws.amazon.com +54.239.30.25 console.aws.amazon.com +54.239.96.90 ap-northeast-1.console.aws.amazon.com +54.240.226.81 ap-southeast-1.console.aws.amazon.com +54.240.193.125 ap-southeast-2.console.aws.amazon.com +54.239.38.102 eu-west-1.console.aws.amazon.com +54.239.54.102 eu-central-1.console.aws.amazon.com +54.231.49.3 s3.amazonaws.com +54.239.31.128 s3-console-us-standard.console.aws.amazon.com +52.219.0.4 s3-ap-northeast-1.amazonaws.com +54.231.242.170 s3-ap-southeast-1.amazonaws.com +54.231.251.21 s3-ap-southeast-2.amazonaws.com +52.218.16.140 s3-eu-west-1.amazonaws.com +54.231.193.37 s3-eu-central-1.amazonaws.com +52.92.72.2 s3-sa-east-1.amazonaws.com +54.231.236.6 s3-us-west-1.amazonaws.com +54.231.168.160 s3-us-west-2.amazonaws.com +177.72.244.194 sa-east-1.console.aws.amazon.com +176.32.114.59 us-west-1.console.aws.amazon.com +54.240.254.230 us-west-2.console.aws.amazon.com +52.216.80.48 github-cloud.s3.amazonaws.com +54.231.48.40 github-com.s3.amazonaws.com +# Amazon AWS End + +# Apkpure Start +104.20.82.194 apkpure.com +104.20.82.194 a.apkpure.com +104.20.82.194 download.apkpure.com +104.20.82.194 m.apkpure.com +104.20.82.194 static.apkpure.com +104.20.82.194 translate.apkpure.com +# Apkpure End + +# Archive Start +207.241.224.22 archive.org +207.241.224.22 www.archive.org +207.241.224.22 ia802704.us.archive.org +207.241.224.22 analytics.archive.org +207.241.226.190 web.archive.org +# Archive End + +# Box.com Start +74.112.184.70 app.box.com +74.112.184.85 m.box.com +# Box.com End + +# BundleStars Start +23.253.146.21 bundlestars.com +54.192.232.60 cdn-images.bundlestars.com +185.12.83.2 support.bundlestars.com +# BundleStars End + +# Disqus Start +151.101.100.134 disqus.com +151.101.100.134 www.disqus.com +151.101.100.134 content.disqus.com +151.101.100.134 referrer.disqus.com +151.101.100.134 docs.disqus.com +151.101.100.134 dropbox.disqus.com +151.101.100.134 apkpure.disqus.com +151.101.100.64 glitter.services.disqus.com +151.101.100.64 links.services.disqus.com +173.192.82.196 realtime.services.disqus.com +50.18.249.249 help.disqus.com +23.65.183.218 about.disqus.com +23.65.183.218 blog.disqus.com +23.65.183.218 publishers.disqus.com +# Disqus End + +# Dropbox Start +####### +# Warning: SNIProxy being used. +218.254.1.13 db.tt +218.254.1.13 dropbox.com +218.254.1.13 m.dropbox.com +218.254.1.13 www.v.dropbox.com +218.254.1.13 dl-debug.dropbox.com +####### +162.125.82.1 www.dropbox.com +52.85.76.60 linux.dropbox.com +108.160.172.193 d.dropbox.com +108.160.172.193 d.v.dropbox.com +162.125.18.132 dl-doc.dropbox.com +108.160.172.193 api-d.dropbox.com +108.160.172.237 api.dropboxapi.com +108.160.172.237 api.dropbox.com +108.160.172.237 api.v.dropbox.com +108.160.172.237 api-notify.dropbox.com +108.160.172.233 www.dropboxstatic.com +104.16.100.29 cfl.dropboxstatic.com +108.160.172.201 dbxlocal.dropboxstatic.com +199.47.217.36 api-content.dropbox.com +199.47.217.36 api-content-photos.dropbox.com +108.160.172.207 photos.dropbox.com +162.125.34.129 bolt.dropbox.com +162.125.17.129 photos-thumb.dropbox.com +162.125.17.129 photos-thumb.x.dropbox.com +199.47.217.97 block.dropbox.com +199.47.217.97 block.v.dropbox.com +54.230.214.100 cf.dropboxstatic.com +54.192.108.33 client-cf.dropbox.com +45.58.69.38 dl.dropbox.com +45.58.70.5 dl-web.dropbox.com +45.58.69.37 dl.dropboxusercontent.com +162.125.18.2 photos-1.dropbox.com +162.125.18.2 photos-2.dropbox.com +162.125.18.2 photos-3.dropbox.com +162.125.18.2 photos-4.dropbox.com +162.125.18.2 photos-5.dropbox.com +162.125.18.2 photos-6.dropbox.com +54.192.213.118 status.dropbox.com +54.192.213.118 marketing.dropbox.com +54.192.213.118 blogs.dropbox.com +54.192.213.118 forums.dropbox.com +54.192.213.118 snapengage.dropbox.com +162.125.32.129 notify.dropbox.com +108.160.172.236 client-lb.dropbox.com +108.160.172.236 client-web.dropbox.com +108.160.172.236 client.dropbox.com +108.160.172.236 client.v.dropbox.com +108.160.172.227 log.getdropbox.com +# Dropbox End + +# DuckDuckGo Start +46.51.216.186 duckduckgo.com +46.51.216.186 www.duckduckgo.com +46.51.216.186 ac.duckduckgo.com +54.251.178.52 icons.duckduckgo.com +54.251.178.52 images.duckduckgo.com +96.45.83.209 help.duckduckgo.com +# DuckDuckGo End + +# Facebook start +157.240.0.17 fb.me +157.240.0.17 facebook.com +157.240.0.17 www.facebook.com +157.240.0.17 m.facebook.com +157.240.0.17 mqtt.facebook.com +157.240.0.17 s-static.ak.facebook.com +23.76.153.42 static.ak.facebook.com +23.76.153.42 b.static.ak.facebook.com +157.240.0.17 graph.facebook.com +157.240.0.17 ssl.facebook.com +157.240.0.17 api.facebook.com +157.240.0.17 secure.facebook.com +157.240.0.17 zh-cn.facebook.com +157.240.0.17 login.facebook.com +157.240.0.17 attachments.facebook.com +157.240.0.17 touch.facebook.com +157.240.0.17 apps.facebook.com +157.240.0.17 upload.facebook.com +157.240.0.17 developers.facebook.com +157.240.0.17 beta-chat-01-05-ash3.facebook.com +157.240.0.17 channel-ecmp-05-ash3.facebook.com +157.240.0.17 channel-staging-ecmp-05-ash3.facebook.com +157.240.0.17 channel-testing-ecmp-05-ash3.facebook.com +157.240.0.17 0-edge-chat.facebook.com +157.240.0.17 1-edge-chat.facebook.com +157.240.0.17 2-edge-chat.facebook.com +157.240.0.17 3-edge-chat.facebook.com +157.240.0.17 4-edge-chat.facebook.com +157.240.0.17 5-edge-chat.facebook.com +157.240.0.17 6-edge-chat.facebook.com +157.240.0.17 api-read.facebook.com +157.240.0.17 bigzipfiles.facebook.com +157.240.0.17 check4.facebook.com +157.240.0.17 check6.facebook.com +157.240.0.17 code.facebook.com +157.240.0.17 connect.facebook.com +157.240.0.17 edge-chat.facebook.com +157.240.0.17 pixel.facebook.com +157.240.0.17 star.c10r.facebook.com +157.240.0.17 star.facebook.com +157.240.0.17 zh-tw.facebook.com +157.240.0.17 b-api.facebook.com +157.240.0.17 b-graph.facebook.com +157.240.0.17 orcart.facebook.com +157.240.0.17 s-static.facebook.com +157.240.0.17 vupload.facebook.com +157.240.0.17 vupload2.facebook.com +157.240.0.17 d.facebook.com +157.240.0.17 fbcdn.net +31.13.95.14 scontent.xx.fbcdn.net +31.13.95.14 scontent-a.xx.fbcdn.net +31.13.95.14 scontent-b.xx.fbcdn.net +31.13.95.14 scontent-c.xx.fbcdn.net +31.13.95.14 scontent-d.xx.fbcdn.net +31.13.95.14 scontent-e.xx.fbcdn.net +31.13.95.14 scontent-mxp.xx.fbcdn.net +31.13.95.14 scontent-a-lax.xx.fbcdn.net +31.13.95.14 scontent-a-sin.xx.fbcdn.net +31.13.95.14 scontent-b-lax.xx.fbcdn.net +31.13.95.14 scontent-b-sin.xx.fbcdn.net +31.13.95.14 ent-a.xx.fbcdn.net +31.13.95.14 ent-b.xx.fbcdn.net +31.13.95.14 ent-c.xx.fbcdn.net +31.13.95.14 ent-d.xx.fbcdn.net +31.13.95.14 ent-e.xx.fbcdn.net +23.207.122.24 s-external.ak.fbcdn.net +23.34.45.177 s-static.ak.fbcdn.net +157.240.0.17 static.thefacebook.com +157.240.0.17 attachment.fbsbx.com +31.13.73.7 staticxx.facebook.com +31.13.73.7 connect.facebook.net +192.0.78.13 live.fb.com +192.0.78.13 work.fb.com +192.0.78.13 techprep.fb.com +192.0.78.13 nonprofits.fb.com +192.0.78.13 managingbias.fb.com +192.0.78.13 rightsmanager.fb.com +192.0.78.13 instantarticles.fb.com +192.0.66.2 messengerplatform.fb.com +199.201.64.67 threatexchange.fb.com +31.13.95.14 video.xx.fbcdn.net +184.28.188.10 fbcdn-sphotos-b-a.akamaihd.net +184.28.188.10 vthumb.ak.fbcdn.net +184.28.188.10 photos-a.ak.fbcdn.net +184.28.188.10 photos-b.ak.fbcdn.net +184.28.188.10 photos-c.ak.fbcdn.net +184.28.188.10 photos-d.ak.fbcdn.net +184.28.188.10 photos-e.ak.fbcdn.net +184.28.188.10 photos-f.ak.fbcdn.net +184.28.188.10 photos-g.ak.fbcdn.net +184.28.188.10 photos-h.ak.fbcdn.net +184.28.188.10 creative.ak.fbcdn.net +184.28.188.10 external.ak.fbcdn.net +184.28.188.10 b.static.ak.fbcdn.net +184.28.188.10 static.ak.fbcdn.net +184.28.188.10 profile.ak.fbcdn.net +# Facebook end + +# FlipBoard start +54.225.64.251 beacon.flipboard.com +54.225.64.251 fbprod.flipboard.com +# FlipBoard End + +# Github start +192.30.253.113 gist.github.com +# Github end + +# Gmail web Start +61.91.161.217 chatenabled.mail.google.com +61.91.161.217 filetransferenabled.mail.google.com +61.91.161.217 gmail.com +61.91.161.217 gmail.google.com +61.91.161.217 googlemail.l.google.com +61.91.161.217 inbox.google.com +61.91.161.217 isolated.mail.google.com +61.91.161.217 m.gmail.com +61.91.161.217 m.googlemail.com +61.91.161.217 mail.google.com +61.91.161.217 www.gmail.com +61.91.161.217 mail-settings.google.com +64.233.188.121 m.android.com +# Gmail web End + +# Google Start +61.91.161.217 www.google.com +61.91.161.217 google.com +61.91.161.217 gcr.io +61.91.161.217 www.gcr.io +61.91.161.217 com.google +61.91.161.217 admin.google.com +61.91.161.217 accounts.google.com +61.91.161.217 accounts.google.cn +61.91.161.217 aboutme.google.com +61.91.161.217 atap.google.com +61.91.161.217 assistant.google.com +61.91.161.217 passwords.google.com +61.91.161.217 privacy.google.com +61.91.161.217 takeout.google.com +61.91.161.217 bpui0.google.com +61.91.161.217 cse.google.com +61.91.161.217 clients1.google.com +61.91.161.217 clients2.google.com +61.91.161.217 clients3.google.com +61.91.161.217 clients4.google.com +61.91.161.217 clients5.google.com +61.91.161.217 clients6.google.com +61.91.161.217 contributor.google.com +61.91.161.217 dns.google.com +61.91.161.217 desktop.google.com +61.91.161.217 desktop2.google.com +61.91.161.217 encrypted.google.com +61.91.161.217 encrypted-tbn0.google.com +61.91.161.217 encrypted-tbn1.google.com +61.91.161.217 encrypted-tbn2.google.com +61.91.161.217 encrypted-tbn3.google.com +61.91.161.217 fi.google.com +61.91.161.217 fit.google.com +61.91.161.217 fonts.google.com +61.91.161.217 goto.google.com +61.91.161.217 gxc.google.com +61.91.161.217 gsuite.google.com +61.91.161.217 history.google.com +61.91.161.217 myactivity.google.com +61.91.161.217 isp.google.com +61.91.161.217 investor.google.com +61.91.161.217 jmt0.google.com +61.91.161.217 keep.google.com +61.91.161.217 linkhelp.clients.google.com +61.91.161.217 upload.clients.google.com +61.91.161.217 myaccount.google.com +61.91.161.217 peering.google.com +61.91.161.217 places.google.com +61.91.161.217 pki.google.com +61.91.161.217 patents.google.com +61.91.161.217 script.google.com +61.91.161.217 security.google.com +61.91.161.217 services.google.com +61.91.161.217 store.google.com +61.91.161.217 suggestqueries.google.com +61.91.161.217 support.google.com +61.91.161.217 upload.google.com +61.91.161.217 uploads.clients.google.com +61.91.161.217 video.google.com +61.91.161.217 video-stats.video.google.com +61.91.161.217 voice.google.com +61.91.161.217 upload.video.google.com +61.91.161.217 ads.google.com +61.91.161.217 www.googlegroups.com +61.91.161.217 a.orkut.gmodules.com +61.91.161.217 www.googlestore.com +61.91.161.217 ig.ig.gmodules.com +61.91.161.217 redirector.c.youtube.com +61.91.161.217 relay.google.com +61.91.161.217 image.google.com +61.91.161.217 mapsengine.google.com +61.91.161.217 client-channel.google.com +61.91.161.217 0.client-channel.google.com +61.91.161.217 1.client-channel.google.com +61.91.161.217 2.client-channel.google.com +61.91.161.217 3.client-channel.google.com +61.91.161.217 4.client-channel.google.com +61.91.161.217 5.client-channel.google.com +61.91.161.217 6.client-channel.google.com +61.91.161.217 7.client-channel.google.com +61.91.161.217 8.client-channel.google.com +61.91.161.217 9.client-channel.google.com +61.91.161.217 10.client-channel.google.com +61.91.161.217 11.client-channel.google.com +61.91.161.217 12.client-channel.google.com +61.91.161.217 13.client-channel.google.com +61.91.161.217 14.client-channel.google.com +61.91.161.217 15.client-channel.google.com +61.91.161.217 16.client-channel.google.com +61.91.161.217 17.client-channel.google.com +61.91.161.217 18.client-channel.google.com +61.91.161.217 19.client-channel.google.com +61.91.161.217 20.client-channel.google.com +61.91.161.217 21.client-channel.google.com +61.91.161.217 22.client-channel.google.com +61.91.161.217 23.client-channel.google.com +61.91.161.217 24.client-channel.google.com +61.91.161.217 25.client-channel.google.com +61.91.161.217 26.client-channel.google.com +61.91.161.217 27.client-channel.google.com +61.91.161.217 28.client-channel.google.com +61.91.161.217 29.client-channel.google.com +61.91.161.217 cello.client-channel.google.com +61.91.161.217 google.com.hk +61.91.161.217 www.google.com.hk +61.91.161.217 accounts.google.com.hk +61.91.161.217 clients1.google.com.hk +61.91.161.217 desktop.google.com.hk +61.91.161.217 gxc.google.com.hk +61.91.161.217 video.google.com.hk +61.91.161.217 id.google.com.hk +61.91.161.217 mobile.google.com.hk +61.91.161.217 picasaweb.google.com.hk +61.91.161.217 www.googlechinawebmaster.com +61.91.161.217 google.com.tw +61.91.161.217 www.google.com.tw +61.91.161.217 accounts.google.com.tw +61.91.161.217 books.google.com.tw +61.91.161.217 clients1.google.com.tw +61.91.161.217 desktop.google.com.tw +61.91.161.217 groups.google.com.tw +61.91.161.217 gxc.google.com.tw +61.91.161.217 id.google.com.tw +61.91.161.217 images.google.com.tw +61.91.161.217 picasaweb.google.com.tw +61.91.161.217 toolbar.google.com.tw +61.91.161.217 toolbarqueries.google.com.tw +61.91.161.217 video.google.com.tw +61.91.161.217 google.co.jp +61.91.161.217 www.google.co.jp +61.91.161.217 accounts.google.co.jp +61.91.161.217 blogsearch.google.co.jp +61.91.161.217 books.google.co.jp +61.91.161.217 clients1.google.co.jp +61.91.161.217 desktop.google.co.jp +61.91.161.217 groups.google.co.jp +61.91.161.217 images.google.co.jp +61.91.161.217 maps.google.co.jp +61.91.161.217 news.google.co.jp +61.91.161.217 picasaweb.google.co.jp +61.91.161.217 scholar.google.co.jp +61.91.161.217 toolbar.google.co.jp +61.91.161.217 toolbarqueries.google.co.jp +61.91.161.217 translate.google.co.jp +61.91.161.217 google.com.sg +61.91.161.217 www.google.com.sg +61.91.161.217 accounts.google.com.sg +61.91.161.217 blogsearch.google.com.sg +61.91.161.217 books.google.com.sg +61.91.161.217 clients1.google.com.sg +61.91.161.217 desktop.google.com.sg +61.91.161.217 groups.google.com.sg +61.91.161.217 gxc.google.com.sg +61.91.161.217 id.google.com.sg +61.91.161.217 images.google.com.sg +61.91.161.217 maps.google.com.sg +61.91.161.217 news.google.com.sg +61.91.161.217 scholar.google.com.sg +61.91.161.217 toolbar.google.com.sg +61.91.161.217 toolbarqueries.google.com.sg +61.91.161.217 translate.google.com.sg +61.91.161.217 apps.google.com +61.91.161.217 googlemashups.com +61.91.161.217 www.googlemashups.com +61.91.161.217 appengine.google.com +61.91.161.217 uploads.stage.gdata.youtube.com +61.91.161.217 answers.google.com +61.91.161.217 wenda.google.com.hk +61.91.161.217 analytics.googleblog.com +61.91.161.217 android.googleblog.com +61.91.161.217 research.googleblog.com +61.91.161.217 security.googleblog.com +61.91.161.217 gmail.googleblog.com +61.91.161.217 chrome.googleblog.com +61.91.161.217 search.googleblog.com +61.91.161.217 webmasters.googleblog.com +61.91.161.217 maps.googleblog.com +61.91.161.217 cloudplatform.googleblog.com +61.91.161.217 youtube.googleblog.com +61.91.161.217 blogsearch.google.com +61.91.161.217 blogsearch.google.com.hk +61.91.161.217 blogsearch.google.com.tw +61.91.161.217 accounts.blogger.com +61.91.161.217 www.blogger.com +61.91.161.217 blogger.com +61.91.161.217 www.googleblog.com +61.91.161.217 googleblog.com +61.91.161.217 blogger.google.com +61.91.161.217 www2.blogger.com +61.91.161.217 www.blogblog.com +61.91.161.217 www1.blogblog.com +61.91.161.217 www2.blogblog.com +61.91.161.217 beta.blogger.com +61.91.161.217 buttons.blogger.com +61.91.161.217 buzz.blogger.com +61.91.161.217 draft.blogger.com +61.91.161.217 status.blogger.com +61.91.161.217 help.blogger.com +61.91.161.217 photos1.blogger.com +61.91.161.217 bp0.blogger.com +61.91.161.217 bp1.blogger.com +61.91.161.217 bp2.blogger.com +61.91.161.217 bp3.blogger.com +61.91.161.217 img.blogblog.com +61.91.161.217 img1.blogblog.com +61.91.161.217 img2.blogblog.com +61.91.161.217 resources.blogblog.com +61.91.161.217 www.textcube.com +61.91.161.217 www.blogspot.com +61.91.161.217 blogspot.com +61.91.161.217 1.bp.blogspot.com +61.91.161.217 2.bp.blogspot.com +61.91.161.217 3.bp.blogspot.com +61.91.161.217 4.bp.blogspot.com +61.91.161.217 googleblog.blogspot.com +61.91.161.217 googleforstudents.blogspot.com +61.91.161.217 students.googleblog.com +61.91.161.217 chrome.blogspot.com +61.91.161.217 google-latlong.blogspot.com +61.91.161.217 insidesearch.blogspot.com +61.91.161.217 googleadsdeveloper.blogspot.com +61.91.161.217 officialandroid.blogspot.com +61.91.161.217 android-developers.blogspot.com +61.91.161.217 android-developers.blogspot.hk +61.91.161.217 program-think.blogspot.com +61.91.161.217 developers.googleblog.com +61.91.161.217 books.google.com +61.91.161.217 books.google.com.hk +61.91.161.217 buzz.google.com +61.91.161.217 calendar.google.com +61.91.161.217 checkout.google.com +61.91.161.217 wallet.google.com +61.91.161.217 chrome.com +61.91.161.217 www.chrome.com +61.91.161.217 developer.chrome.com +61.91.161.217 www.chromestatus.com +61.91.161.217 chrome.google.com +61.91.161.217 browsersync.google.com +61.91.161.217 toolbarqueries.google.com.hk +61.91.161.217 toolbarqueries.clients.google.com +61.91.161.217 chromium.org +61.91.161.217 www.chromium.org +61.91.161.217 cs.chromium.org +61.91.161.217 dev.chromium.org +61.91.161.217 blog.chromium.org +64.233.188.121 bugs.chromium.org +61.91.161.217 www.appspot.com +61.91.161.217 appspot.com +61.91.161.217 apis-explorer.appspot.com +61.91.161.217 betaspike.appspot.com +61.91.161.217 hstspreload.appspot.com +61.91.161.217 chrome-devtools-frontend.appspot.com +61.91.161.217 chrometophone.appspot.com +61.91.161.217 download-chromium.appspot.com +61.91.161.217 jmoore-dot-android-experiments.appspot.com +61.91.161.217 lfe-alpo-gm.appspot.com +61.91.161.217 m-dot-betaspike.appspot.com +61.91.161.217 accounts.google.com.gi +61.91.161.217 accounts.google.co.nz +61.91.161.217 id.google.co.nz +61.91.161.217 www.googlecode.com +61.91.161.217 fuchsia.googlesource.com +61.91.161.217 googlesource.com +61.91.161.217 gerrit.googlesource.com +61.91.161.217 chromium.googlesource.com +61.91.161.217 kernel.googlesource.com +61.91.161.217 android-review.googlesource.com +61.91.161.217 r.android.com +61.91.161.217 gwt.googlesource.com +61.91.161.217 code.google.com +61.91.161.217 uploads.code.google.com +61.91.161.217 chromium.googlecode.com +61.91.161.217 closure-library.googlecode.com +61.91.161.217 earth-api-samples.googlecode.com +61.91.161.217 gmaps-samples-flash.googlecode.com +61.91.161.217 googleappengine.googlecode.com +61.91.161.217 google-code-feed-gadget.googlecode.com +61.91.161.217 google-code-prettify.googlecode.com +61.91.161.217 www.googlesource.com +61.91.161.217 android.googlesource.com +61.91.161.217 cloud.google.com +61.91.161.217 packages.cloud.google.com +61.91.161.217 console.cloud.google.com +61.91.161.217 status.cloud.google.com +61.91.161.217 developers.google.com +61.91.161.217 cloudssh.developers.google.com +61.91.161.217 codelabs.developers.google.com +61.91.161.217 console.developers.google.com +61.91.161.217 source.developers.google.com +61.91.161.217 cla.developers.google.com +61.91.161.217 design.google.com +61.91.161.217 directory.google.com +61.91.161.217 dir.google.com +61.91.161.217 events.google.com +61.91.161.217 googledrive.com +61.91.161.217 docs.google.com +61.91.161.217 drive.google.com +61.91.161.217 docs0.google.com +61.91.161.217 docs1.google.com +61.91.161.217 docs2.google.com +61.91.161.217 docs3.google.com +61.91.161.217 docs4.google.com +61.91.161.217 docs5.google.com +61.91.161.217 docs6.google.com +61.91.161.217 docs7.google.com +61.91.161.217 docs8.google.com +61.91.161.217 docs9.google.com +61.91.161.217 firebase.google.com +61.91.161.217 material.google.com +61.91.161.217 writely.google.com +61.91.161.217 upload.docs.google.com +61.91.161.217 upload.drive.google.com +61.91.161.217 0.docs.google.com +61.91.161.217 1.docs.google.com +61.91.161.217 2.docs.google.com +61.91.161.217 3.docs.google.com +61.91.161.217 4.docs.google.com +61.91.161.217 5.docs.google.com +61.91.161.217 6.docs.google.com +61.91.161.217 7.docs.google.com +61.91.161.217 8.docs.google.com +61.91.161.217 9.docs.google.com +61.91.161.217 10.docs.google.com +61.91.161.217 11.docs.google.com +61.91.161.217 12.docs.google.com +61.91.161.217 13.docs.google.com +61.91.161.217 14.docs.google.com +61.91.161.217 15.docs.google.com +61.91.161.217 16.docs.google.com +61.91.161.217 0.drive.google.com +61.91.161.217 1.drive.google.com +61.91.161.217 2.drive.google.com +61.91.161.217 3.drive.google.com +61.91.161.217 4.drive.google.com +61.91.161.217 5.drive.google.com +61.91.161.217 6.drive.google.com +61.91.161.217 7.drive.google.com +61.91.161.217 8.drive.google.com +61.91.161.217 9.drive.google.com +61.91.161.217 10.drive.google.com +61.91.161.217 11.drive.google.com +61.91.161.217 12.drive.google.com +61.91.161.217 13.drive.google.com +61.91.161.217 14.drive.google.com +61.91.161.217 15.drive.google.com +61.91.161.217 16.drive.google.com +61.91.161.217 spreadsheet.google.com +61.91.161.217 spreadsheets.google.com +61.91.161.217 spreadsheets0.google.com +61.91.161.217 spreadsheets1.google.com +61.91.161.217 spreadsheets2.google.com +61.91.161.217 spreadsheets3.google.com +61.91.161.217 spreadsheets4.google.com +61.91.161.217 spreadsheets5.google.com +61.91.161.217 spreadsheets6.google.com +61.91.161.217 spreadsheets7.google.com +61.91.161.217 spreadsheets8.google.com +61.91.161.217 spreadsheets9.google.com +61.91.161.217 drivenotepad.appspot.com +61.91.161.217 8c953efe117cb4ee14eaffe2b417623a104ce4e6.googledrive.com +61.91.161.217 v3.cache1.c.docs.google.com +61.91.161.217 domains.google.com +61.91.161.217 dl-ssl.google.com +61.91.161.217 earth.google.com +61.91.161.217 auth.keyhole.com +61.91.161.217 geoauth.google.com +61.91.161.217 finance.google.com +61.91.161.217 fusion.google.com +61.91.161.217 groups.google.com +61.91.161.217 groups.google.com.hk +61.91.161.217 groups-beta.google.com +61.91.161.217 productforums.google.com +61.91.161.217 a77db9aa-a-7b23c8ea-s-sites.googlegroups.com +61.91.161.217 blob-s-docs.googlegroups.com +61.91.161.217 health.google.com +61.91.161.217 images.google.com +61.91.161.217 images.google.com.hk +61.91.161.217 tbn0.google.com +61.91.161.217 tbn1.google.com +61.91.161.217 tbn2.google.com +61.91.161.217 tbn3.google.com +61.91.161.217 inputtools.google.com +61.91.161.217 knol.google.com +61.91.161.217 mars.google.com +61.91.161.217 maps.google.com +61.91.161.217 maps.google.com.hk +61.91.161.217 maps.google.com.tw +61.91.161.217 local.google.com +61.91.161.217 ditu.google.com +61.91.161.217 maps-api-ssl.google.com +61.91.161.217 map.google.com +61.91.161.217 cbk0.google.com +61.91.161.217 cbk1.google.com +61.91.161.217 cbk2.google.com +61.91.161.217 cbk3.google.com +61.91.161.217 khms.google.com +61.91.161.217 khms0.google.com +61.91.161.217 khms1.google.com +61.91.161.217 khms2.google.com +61.91.161.217 khms3.google.com +61.91.161.217 cbks0.google.com +61.91.161.217 cbks1.google.com +61.91.161.217 cbks2.google.com +61.91.161.217 cbks3.google.com +61.91.161.217 ipv4.google.com +61.91.161.217 mw1.google.com +61.91.161.217 mw2.google.com +61.91.161.217 mt.google.com +61.91.161.217 mt0.google.com +61.91.161.217 mt1.google.com +61.91.161.217 mt2.google.com +61.91.161.217 mt3.google.com +61.91.161.217 gg.google.com +61.91.161.217 id.google.com +61.91.161.217 mts.google.com +61.91.161.217 mts0.google.com +61.91.161.217 mts1.google.com +61.91.161.217 mts2.google.com +61.91.161.217 mts3.google.com +61.91.161.217 mobilemaps.clients.google.com +61.91.161.217 music.google.com +61.91.161.217 music.googleusercontent.com +61.91.161.217 scholar.googleusercontent.com +61.91.161.217 uploadsj.clients.google.com +61.91.161.217 news.google.com +61.91.161.217 news.google.com.hk +61.91.161.217 news.google.com.tw +61.91.161.217 orkut.google.com +61.91.161.217 www.orkut.gmodules.com +61.91.161.217 pack.google.com +61.91.161.217 photos.google.com +61.91.161.217 picasa.google.com +61.91.161.217 picasaweb.google.com +61.91.161.217 lh2.google.com +61.91.161.217 lh3.google.com +61.91.161.217 lh4.google.com +61.91.161.217 lh5.google.com +61.91.161.217 lh6.google.com +61.91.161.217 upload.photos.google.com +61.91.161.217 profiles.google.com +61.91.161.217 plusone.google.com +61.91.161.217 plus.google.com +61.91.161.217 plus.url.google.com +61.91.161.217 spaces.google.com +61.91.161.217 pixel.google.com +61.91.161.217 madeby.google.com +61.91.161.217 vr.google.com +61.91.161.217 reader.google.com +61.91.161.217 research.google.com +61.91.161.217 sb.google.com +61.91.161.217 sb-ssl.google.com +61.91.161.217 safebrowsing.google.com +61.91.161.217 search.google.com +61.91.161.217 alt1-safebrowsing.google.com +61.91.161.217 safebrowsing.clients.google.com +61.91.161.217 safebrowsing-cache.google.com +61.91.161.217 sandbox.google.com +61.91.161.217 scholar.google.com +61.91.161.217 scholar.google.com.hk +61.91.161.217 scholar.google.com.tw +61.91.161.217 sites.google.com +61.91.161.217 sketchup.google.com +61.91.161.217 talkgadget.google.com +61.91.161.217 tools.google.com +61.91.161.217 toolbar.google.com +61.91.161.217 toolbar.google.com.hk +61.91.161.217 translate.google.com +61.91.161.217 translate.google.com.hk +61.91.161.217 translate.google.com.tw +61.91.161.217 trends.google.com +61.91.161.217 0.gvt0.com +61.91.161.217 1.gvt0.com +61.91.161.217 2.gvt0.com +61.91.161.217 3.gvt0.com +61.91.161.217 4.gvt0.com +61.91.161.217 5.gvt0.com +61.91.161.217 wave.google.com +61.91.161.217 wave1.google.com +61.91.161.217 googlewave.com +61.91.161.217 wifi.google.com +61.91.161.217 gmodules.com +61.91.161.217 www.gmodules.com +61.91.161.217 www.ig.gmodules.com +61.91.161.217 ig.gmodules.com +61.91.161.217 ads.gmodules.com +61.91.161.217 p.gmodules.com +61.91.161.217 1.ig.gmodules.com +61.91.161.217 2.ig.gmodules.com +61.91.161.217 3.ig.gmodules.com +61.91.161.217 4.ig.gmodules.com +61.91.161.217 5.ig.gmodules.com +61.91.161.217 6.ig.gmodules.com +61.91.161.217 maps.gmodules.com +61.91.161.217 img0.gmodules.com +61.91.161.217 img1.gmodules.com +61.91.161.217 img2.gmodules.com +61.91.161.217 img3.gmodules.com +61.91.161.217 skins.gmodules.com +61.91.161.217 friendconnect.gmodules.com +61.91.161.217 0.blogger.gmodules.com +61.91.161.217 partnerpage.google.com +61.91.161.217 apis.google.com +61.91.161.217 domains.google +61.91.161.217 www.registry.google +61.91.161.217 www.domains.google +61.91.161.217 registry.google +61.91.161.217 apikeys.clients6.google.com +61.91.161.217 servicemanagement.clients6.google.com +61.91.161.217 cloudconsole-pa.clients6.google.com +61.91.161.217 iam.clients6.google.com +61.91.161.217 clientauthconfig.clients6.google.com +61.91.161.217 realtimesupport.clients6.google.com +61.91.161.217 360suite.google.com +61.91.161.217 optimize.google.com +216.58.203.85 attribution.google.com +61.91.161.217 audiencecenter.google.com +61.91.161.217 datastudio.google.com +61.91.161.217 studykit.google.com +61.91.161.217 business.google.com +61.91.161.217 google-analytics.com + +# gstatic Start +61.91.161.217 geo0.ggpht.com +61.91.161.217 geo1.ggpht.com +61.91.161.217 geo2.ggpht.com +61.91.161.217 geo3.ggpht.com +61.91.161.217 gm1.ggpht.com +61.91.161.217 gm2.ggpht.com +61.91.161.217 gm3.ggpht.com +61.91.161.217 gm4.ggpht.com +61.91.161.217 lh3.ggpht.com +61.91.161.217 lh4.ggpht.com +61.91.161.217 lh5.ggpht.com +61.91.161.217 lh6.ggpht.com +61.91.161.217 nt0.ggpht.com +61.91.161.217 nt1.ggpht.com +61.91.161.217 nt2.ggpht.com +61.91.161.217 nt3.ggpht.com +61.91.161.217 yt3.ggpht.com +61.91.161.217 yt4.ggpht.com +61.91.161.217 accounts.gstatic.com +61.91.161.217 maps.gstatic.com +61.91.161.217 ssl.gstatic.com +61.91.161.217 www.gstatic.com +61.91.161.217 encrypted-tbn0.gstatic.com +61.91.161.217 encrypted-tbn1.gstatic.com +61.91.161.217 encrypted-tbn2.gstatic.com +61.91.161.217 encrypted-tbn3.gstatic.com +61.91.161.217 g0.gstatic.com +61.91.161.217 g1.gstatic.com +61.91.161.217 g2.gstatic.com +61.91.161.217 g3.gstatic.com +61.91.161.217 mt0.gstatic.com +61.91.161.217 mt1.gstatic.com +61.91.161.217 mt2.gstatic.com +61.91.161.217 mt3.gstatic.com +61.91.161.217 mt4.gstatic.com +61.91.161.217 mt5.gstatic.com +61.91.161.217 mt6.gstatic.com +61.91.161.217 mt7.gstatic.com +61.91.161.217 t0.gstatic.com +61.91.161.217 t1.gstatic.com +61.91.161.217 t2.gstatic.com +61.91.161.217 t3.gstatic.com +# gstatic End + +# Googleapis Start +61.91.161.217 chart.apis.google.com +61.91.161.217 googleapis.com +61.91.161.217 www.googleapis.com +61.91.161.217 ajax.googleapis.com +61.91.161.217 android.googleapis.com +61.91.161.217 bigcache.googleapis.com +61.91.161.217 chart.googleapis.com +61.91.161.217 content.googleapis.com +61.91.161.217 khms0.googleapis.com +61.91.161.217 khms1.googleapis.com +61.91.161.217 maps.googleapis.com +61.91.161.217 origin-commondatastorage.googleapis.com +216.58.221.144 commondatastorage.googleapis.com +61.91.161.217 play.googleapis.com +61.91.161.217 plus.googleapis.com +61.91.161.217 redirector-bigcache.googleapis.com +61.91.161.217 youtube.googleapis.com +61.91.161.217 youtubei.googleapis.com +61.91.161.217 mt0.googleapis.com +61.91.161.217 mt1.googleapis.com +61.91.161.217 mt2.googleapis.com +61.91.161.217 mt3.googleapis.com +61.91.161.217 mts0.googleapis.com +61.91.161.217 mts1.googleapis.com +61.91.161.217 mts2.googleapis.com +61.91.161.217 mts3.googleapis.com +61.91.161.217 ct.googleapis.com +61.91.161.217 securetoken.googleapis.com +61.91.161.217 firebasestorage.googleapis.com +61.91.161.217 www--google--com.safenup.googleusercontent.com +61.91.161.217 www--google--com--hk.safenup.googleusercontent.com +64.233.188.121 code.getmdl.io +64.233.189.128 storage.googleapis.com +# Googleapis End + +61.91.161.217 www.googlehosted.com +61.91.161.217 base.googlehosted.com +61.91.161.217 base0.googlehosted.com +61.91.161.217 base1.googlehosted.com +61.91.161.217 base2.googlehosted.com +61.91.161.217 base3.googlehosted.com +61.91.161.217 base4.googlehosted.com +61.91.161.217 base5.googlehosted.com +61.91.161.217 analytics.google.com +61.91.161.217 www.googleartproject.com +61.91.161.217 feedburner.google.com +61.91.161.217 www.feedburner.com +61.91.161.217 feeds.feedburner.com +61.91.161.217 feeds2.feedburner.com +61.91.161.217 feedproxy.google.com +61.91.161.217 go.googlesource.com +61.91.161.217 golang.org +61.91.161.217 www.golang.org +61.91.161.217 blog.golang.org +61.91.161.217 play.golang.org +61.91.161.217 tip.golang.org +61.91.161.217 tour.golang.org +74.125.28.14 google.golang.org +61.91.161.217 goo.gl +61.91.161.217 pay.app.goo.gl +61.91.161.217 g.co +61.91.161.217 www.google.org +61.91.161.217 blog.google.org +216.58.208.151 panoramio.com +216.58.208.151 www.panoramio.com +64.233.189.128 static.panoramio.com +61.91.161.217 blog.panoramio.com +61.91.161.217 www.recaptcha.net +61.91.161.217 api.recaptcha.net +61.91.161.217 api-secure.recaptcha.net +61.91.161.217 mailhide.recaptcha.net +61.91.161.217 webmproject.org +61.91.161.217 www.webmproject.org +61.91.161.217 www.chromercise.com +61.91.161.217 www.data-vocabulary.org +61.91.161.217 www.googleinsidesearch.com +61.91.161.217 www.teachparentstech.org +61.91.161.217 www.thinkwithgoogle.com +61.91.161.217 www.oneworldmanystories.com +61.91.161.217 www.l.google.com +61.91.161.217 www2.l.google.com +61.91.161.217 www3.l.google.com +61.91.161.217 www4.l.google.com +61.91.161.217 accounts.l.google.com +61.91.161.217 accounts-cctld.l.google.com +61.91.161.217 android-market.l.google.com +61.91.161.217 android.l.google.com +61.91.161.217 android-china.l.google.com +61.91.161.217 adwords.l.google.com +61.91.161.217 appspot.l.google.com +61.91.161.217 aspmx.l.google.com +61.91.161.217 b.googlemail.l.google.com +61.91.161.217 blogger.l.google.com +61.91.161.217 bloggerphotos.l.google.com +61.91.161.217 browsersync.l.google.com +61.91.161.217 browserchannel-docs.l.google.com +61.91.161.217 cbk.l.google.com +61.91.161.217 code.l.google.com +61.91.161.217 checkout.l.google.com +61.91.161.217 clients.l.google.com +61.91.161.217 clients-cctld.l.google.com +61.91.161.217 csi.l.google.com +61.91.161.217 desktop.l.google.com +61.91.161.217 dl-ssl.l.google.com +61.91.161.217 encrypted-tbn.l.google.com +61.91.161.217 gadgets.l.google.com +61.91.161.217 googleapis.l.google.com +61.91.161.217 googlecode.l.google.com +61.91.161.217 googlehosted.l.google.com +61.91.161.217 groups.l.google.com +61.91.161.217 history.l.google.com +61.91.161.217 id.l.google.com +61.91.161.217 images.l.google.com +61.91.161.217 ipv4.l.google.com +61.91.161.217 khms.l.google.com +61.91.161.217 large-uploads.l.google.com +61.91.161.217 maps.l.google.com +61.91.161.217 maps-cctld.l.google.com +61.91.161.217 mt.l.google.com +61.91.161.217 mts.l.google.com +61.91.161.217 music-china.l.google.com +61.91.161.217 music-streaming.l.google.com +61.91.161.217 mw-medium.l.google.com +61.91.161.217 mw-small.l.google.com +61.91.161.217 news.l.google.com +61.91.161.217 pagead-tpc.l.google.com +61.91.161.217 picasaweb.l.google.com +61.91.161.217 plus.l.google.com +61.91.161.217 photos-ugc.l.google.com +61.91.161.217 sandbox.l.google.com +61.91.161.217 safebrowsing.cache.l.google.com +61.91.161.217 sb.l.google.com +61.91.161.217 sb-ssl.l.google.com +61.91.161.217 scholar.l.google.com +61.91.161.217 sketchup.l.google.com +61.91.161.217 spreadsheets.l.google.com +61.91.161.217 spreadsheets-china.l.google.com +61.91.161.217 sslvideo-upload.l.google.com +61.91.161.217 suggestqueries.l.google.com +61.91.161.217 tbn.l.google.com +61.91.161.217 tools.l.google.com +61.91.161.217 video.l.google.com +61.91.161.217 googlecl.googlecode.com +61.91.161.217 video-stats.l.google.com +61.91.161.217 video-analytics.l.google.com +61.91.161.217 video-thumbnails.l.google.com +61.91.161.217 wifi.l.google.com +61.91.161.217 writely.l.google.com +61.91.161.217 writely-china.l.google.com +61.91.161.217 www3-china.l.google.com +61.91.161.217 wildcard-talkgadget.l.google.com +61.91.161.217 www-wide.l.google.com +61.91.161.217 youtube-ui.l.google.com +61.91.161.217 yt-video-upload.l.google.com +61.91.161.217 ytimg.l.google.com +61.91.161.217 ytstatic.l.google.com +61.91.161.217 admob.com +61.91.161.217 www.admob.com +61.91.161.217 apps.admob.com +61.91.161.217 adwords.google.com +61.91.161.217 adwords.google.sk +61.91.161.217 www.android.com +61.91.161.217 android.com +61.91.161.217 connectivitycheck.android.com +61.91.161.217 developer.android.com +61.91.161.217 dev.android.com +61.91.161.217 d.android.com +64.233.188.121 b.android.com +64.233.188.121 tools.android.com +61.91.161.217 source.android.com +61.91.161.217 a.android.com +61.91.161.217 market.android.com +61.91.161.217 play.google.com +61.91.161.217 payments.google.com +61.91.161.217 android.clients.google.com +61.91.161.217 withgoogle.com +61.91.161.217 www.withgoogle.com +61.91.161.217 edutrainingcenter.withgoogle.com +61.91.161.217 earthview.withgoogle.com +61.91.161.217 lightsaber.withgoogle.com +61.91.161.217 britishmuseum.withgoogle.com +61.91.161.217 beyondthemap.withgoogle.com +61.91.161.217 analyticsacademy.withgoogle.com +61.91.161.217 spellup.withgoogle.com + +# Googleusercontent Start +61.91.161.217 www.googleusercontent.com +61.91.161.217 apidata.googleusercontent.com +61.91.161.217 androidmarket.googleusercontent.com +61.91.161.217 blogger.googleusercontent.com +61.91.161.217 gadgets.l.googleusercontent.com +61.91.161.217 googlehosted.l.googleusercontent.com +61.91.161.217 googlecode.l.googleusercontent.com +61.91.161.217 googlegroups.l.googleusercontent.com +61.91.161.217 markuphelper.googleusercontent.com +61.91.161.217 photos-ugc.l.googleusercontent.com +61.91.161.217 storage.l.googleusercontent.com +61.91.161.217 storage-ugc.l.googleusercontent.com +61.91.161.217 a-fc-opensocial.googleusercontent.com +61.91.161.217 images-focus-opensocial.googleusercontent.com +61.91.161.217 www-blogger-opensocial.googleusercontent.com +61.91.161.217 books.googleusercontent.com +61.91.161.217 ap1.googleusercontent.com +61.91.161.217 ap2.googleusercontent.com +61.91.161.217 ap3.googleusercontent.com +61.91.161.217 ap4.googleusercontent.com +61.91.161.217 ap5.googleusercontent.com +61.91.161.217 ap6.googleusercontent.com +61.91.161.217 ap7.googleusercontent.com +61.91.161.217 ap8.googleusercontent.com +61.91.161.217 ap9.googleusercontent.com +61.91.161.217 ci0.googleusercontent.com +61.91.161.217 ci1.googleusercontent.com +61.91.161.217 ci2.googleusercontent.com +61.91.161.217 ci3.googleusercontent.com +61.91.161.217 ci4.googleusercontent.com +61.91.161.217 ci5.googleusercontent.com +61.91.161.217 ci6.googleusercontent.com +61.91.161.217 gp3.googleusercontent.com +61.91.161.217 gp4.googleusercontent.com +61.91.161.217 gp5.googleusercontent.com +61.91.161.217 gp6.googleusercontent.com +61.91.161.217 gp.googleusercontent.com +61.91.161.217 sp0.googleusercontent.com +61.91.161.217 sp1.googleusercontent.com +61.91.161.217 sp2.googleusercontent.com +61.91.161.217 sp3.googleusercontent.com +61.91.161.217 sp4.googleusercontent.com +61.91.161.217 sp5.googleusercontent.com +61.91.161.217 sp6.googleusercontent.com +61.91.161.217 sp7.googleusercontent.com +61.91.161.217 sp8.googleusercontent.com +61.91.161.217 sp9.googleusercontent.com +61.91.161.217 1-ps.googleusercontent.com +61.91.161.217 2-ps.googleusercontent.com +61.91.161.217 3-ps.googleusercontent.com +61.91.161.217 4-ps.googleusercontent.com +61.91.161.217 gp0.googleusercontent.com +61.91.161.217 gp1.googleusercontent.com +61.91.161.217 gp2.googleusercontent.com +61.91.161.217 www-hangouts-opensocial.googleusercontent.com +61.91.161.217 clients1.googleusercontent.com +61.91.161.217 clients2.googleusercontent.com +61.91.161.217 clients3.googleusercontent.com +61.91.161.217 clients4.googleusercontent.com +61.91.161.217 clients5.googleusercontent.com +61.91.161.217 clients6.googleusercontent.com +61.91.161.217 clients7.googleusercontent.com +61.91.161.217 code-opensocial.googleusercontent.com +61.91.161.217 t.doc-0-0-sj.sj.googleusercontent.com +61.91.161.217 doc-00-00-docs.googleusercontent.com +61.91.161.217 doc-04-00-docs.googleusercontent.com +61.91.161.217 doc-08-00-docs.googleusercontent.com +61.91.161.217 doc-0c-00-docs.googleusercontent.com +61.91.161.217 doc-0g-00-docs.googleusercontent.com +61.91.161.217 doc-0k-00-docs.googleusercontent.com +61.91.161.217 doc-0o-00-docs.googleusercontent.com +61.91.161.217 doc-0s-00-docs.googleusercontent.com +61.91.161.217 doc-10-00-docs.googleusercontent.com +61.91.161.217 doc-14-00-docs.googleusercontent.com +61.91.161.217 doc-00-04-docs.googleusercontent.com +61.91.161.217 doc-04-04-docs.googleusercontent.com +61.91.161.217 doc-08-04-docs.googleusercontent.com +61.91.161.217 doc-0c-04-docs.googleusercontent.com +61.91.161.217 doc-0g-04-docs.googleusercontent.com +61.91.161.217 doc-0k-04-docs.googleusercontent.com +61.91.161.217 doc-0o-04-docs.googleusercontent.com +61.91.161.217 doc-0s-04-docs.googleusercontent.com +61.91.161.217 doc-10-04-docs.googleusercontent.com +61.91.161.217 doc-14-04-docs.googleusercontent.com +61.91.161.217 doc-00-08-docs.googleusercontent.com +61.91.161.217 doc-04-08-docs.googleusercontent.com +61.91.161.217 doc-08-08-docs.googleusercontent.com +61.91.161.217 doc-0c-08-docs.googleusercontent.com +61.91.161.217 doc-0g-08-docs.googleusercontent.com +61.91.161.217 doc-0k-08-docs.googleusercontent.com +61.91.161.217 doc-0o-08-docs.googleusercontent.com +61.91.161.217 doc-0s-08-docs.googleusercontent.com +61.91.161.217 doc-10-08-docs.googleusercontent.com +61.91.161.217 doc-14-08-docs.googleusercontent.com +61.91.161.217 doc-00-0c-docs.googleusercontent.com +61.91.161.217 doc-04-0c-docs.googleusercontent.com +61.91.161.217 doc-08-0c-docs.googleusercontent.com +61.91.161.217 doc-0c-0c-docs.googleusercontent.com +61.91.161.217 doc-0g-0c-docs.googleusercontent.com +61.91.161.217 doc-0k-0c-docs.googleusercontent.com +61.91.161.217 doc-0o-0c-docs.googleusercontent.com +61.91.161.217 doc-0s-0c-docs.googleusercontent.com +61.91.161.217 doc-10-0c-docs.googleusercontent.com +61.91.161.217 doc-14-0c-docs.googleusercontent.com +61.91.161.217 doc-00-0g-docs.googleusercontent.com +61.91.161.217 doc-04-0g-docs.googleusercontent.com +61.91.161.217 doc-08-0g-docs.googleusercontent.com +61.91.161.217 doc-0c-0g-docs.googleusercontent.com +61.91.161.217 doc-0g-0g-docs.googleusercontent.com +61.91.161.217 doc-0k-0g-docs.googleusercontent.com +61.91.161.217 doc-0o-0g-docs.googleusercontent.com +61.91.161.217 doc-0s-0g-docs.googleusercontent.com +61.91.161.217 doc-10-0g-docs.googleusercontent.com +61.91.161.217 doc-14-0g-docs.googleusercontent.com +61.91.161.217 doc-00-0k-docs.googleusercontent.com +61.91.161.217 doc-04-0k-docs.googleusercontent.com +61.91.161.217 doc-08-0k-docs.googleusercontent.com +61.91.161.217 doc-0c-0k-docs.googleusercontent.com +61.91.161.217 doc-0g-0k-docs.googleusercontent.com +61.91.161.217 doc-0k-0k-docs.googleusercontent.com +61.91.161.217 doc-0o-0k-docs.googleusercontent.com +61.91.161.217 doc-0s-0k-docs.googleusercontent.com +61.91.161.217 doc-10-0k-docs.googleusercontent.com +61.91.161.217 doc-14-0k-docs.googleusercontent.com +61.91.161.217 doc-00-0o-docs.googleusercontent.com +61.91.161.217 doc-04-0o-docs.googleusercontent.com +61.91.161.217 doc-08-0o-docs.googleusercontent.com +61.91.161.217 doc-0c-0o-docs.googleusercontent.com +61.91.161.217 doc-0g-0o-docs.googleusercontent.com +61.91.161.217 doc-0k-0o-docs.googleusercontent.com +61.91.161.217 doc-0o-0o-docs.googleusercontent.com +61.91.161.217 doc-0s-0o-docs.googleusercontent.com +61.91.161.217 doc-10-0o-docs.googleusercontent.com +61.91.161.217 doc-14-0o-docs.googleusercontent.com +61.91.161.217 doc-00-0s-docs.googleusercontent.com +61.91.161.217 doc-04-0s-docs.googleusercontent.com +61.91.161.217 doc-08-0s-docs.googleusercontent.com +61.91.161.217 doc-0c-0s-docs.googleusercontent.com +61.91.161.217 doc-0g-0s-docs.googleusercontent.com +61.91.161.217 doc-0k-0s-docs.googleusercontent.com +61.91.161.217 doc-0o-0s-docs.googleusercontent.com +61.91.161.217 doc-0s-0s-docs.googleusercontent.com +61.91.161.217 doc-10-0s-docs.googleusercontent.com +61.91.161.217 doc-14-0s-docs.googleusercontent.com +61.91.161.217 doc-00-10-docs.googleusercontent.com +61.91.161.217 doc-04-10-docs.googleusercontent.com +61.91.161.217 doc-08-10-docs.googleusercontent.com +61.91.161.217 doc-0c-10-docs.googleusercontent.com +61.91.161.217 doc-0g-10-docs.googleusercontent.com +61.91.161.217 doc-0k-10-docs.googleusercontent.com +61.91.161.217 doc-0o-10-docs.googleusercontent.com +61.91.161.217 doc-0s-10-docs.googleusercontent.com +61.91.161.217 doc-10-10-docs.googleusercontent.com +61.91.161.217 doc-14-10-docs.googleusercontent.com +61.91.161.217 doc-00-14-docs.googleusercontent.com +61.91.161.217 doc-04-14-docs.googleusercontent.com +61.91.161.217 doc-08-14-docs.googleusercontent.com +61.91.161.217 doc-0c-14-docs.googleusercontent.com +61.91.161.217 doc-0g-14-docs.googleusercontent.com +61.91.161.217 doc-0k-14-docs.googleusercontent.com +61.91.161.217 doc-0o-14-docs.googleusercontent.com +61.91.161.217 doc-0s-14-docs.googleusercontent.com +61.91.161.217 doc-10-14-docs.googleusercontent.com +61.91.161.217 doc-14-14-docs.googleusercontent.com +61.91.161.217 doc-00-18-docs.googleusercontent.com +61.91.161.217 doc-04-18-docs.googleusercontent.com +61.91.161.217 doc-08-18-docs.googleusercontent.com +61.91.161.217 doc-0c-18-docs.googleusercontent.com +61.91.161.217 doc-0g-18-docs.googleusercontent.com +61.91.161.217 doc-0k-18-docs.googleusercontent.com +61.91.161.217 doc-0o-18-docs.googleusercontent.com +61.91.161.217 doc-0s-18-docs.googleusercontent.com +61.91.161.217 doc-10-18-docs.googleusercontent.com +61.91.161.217 doc-14-18-docs.googleusercontent.com +61.91.161.217 doc-00-1c-docs.googleusercontent.com +61.91.161.217 doc-04-1c-docs.googleusercontent.com +61.91.161.217 doc-08-1c-docs.googleusercontent.com +61.91.161.217 doc-0c-1c-docs.googleusercontent.com +61.91.161.217 doc-0g-1c-docs.googleusercontent.com +61.91.161.217 doc-0k-1c-docs.googleusercontent.com +61.91.161.217 doc-0o-1c-docs.googleusercontent.com +61.91.161.217 doc-0s-1c-docs.googleusercontent.com +61.91.161.217 doc-10-1c-docs.googleusercontent.com +61.91.161.217 doc-14-1c-docs.googleusercontent.com +61.91.161.217 doc-00-1g-docs.googleusercontent.com +61.91.161.217 doc-04-1g-docs.googleusercontent.com +61.91.161.217 doc-08-1g-docs.googleusercontent.com +61.91.161.217 doc-0c-1g-docs.googleusercontent.com +61.91.161.217 doc-0g-1g-docs.googleusercontent.com +61.91.161.217 doc-0k-1g-docs.googleusercontent.com +61.91.161.217 doc-0o-1g-docs.googleusercontent.com +61.91.161.217 doc-0s-1g-docs.googleusercontent.com +61.91.161.217 doc-10-1g-docs.googleusercontent.com +61.91.161.217 doc-14-1g-docs.googleusercontent.com +61.91.161.217 doc-00-1k-docs.googleusercontent.com +61.91.161.217 doc-04-1k-docs.googleusercontent.com +61.91.161.217 doc-08-1k-docs.googleusercontent.com +61.91.161.217 doc-0c-1k-docs.googleusercontent.com +61.91.161.217 doc-0g-1k-docs.googleusercontent.com +61.91.161.217 doc-0k-1k-docs.googleusercontent.com +61.91.161.217 doc-0o-1k-docs.googleusercontent.com +61.91.161.217 doc-0s-1k-docs.googleusercontent.com +61.91.161.217 doc-10-1k-docs.googleusercontent.com +61.91.161.217 doc-14-1k-docs.googleusercontent.com +61.91.161.217 doc-00-1o-docs.googleusercontent.com +61.91.161.217 doc-04-1o-docs.googleusercontent.com +61.91.161.217 doc-08-1o-docs.googleusercontent.com +61.91.161.217 doc-0c-1o-docs.googleusercontent.com +61.91.161.217 doc-0g-1o-docs.googleusercontent.com +61.91.161.217 doc-0k-1o-docs.googleusercontent.com +61.91.161.217 doc-0o-1o-docs.googleusercontent.com +61.91.161.217 doc-0s-1o-docs.googleusercontent.com +61.91.161.217 doc-10-1o-docs.googleusercontent.com +61.91.161.217 doc-14-1o-docs.googleusercontent.com +61.91.161.217 doc-00-1s-docs.googleusercontent.com +61.91.161.217 doc-04-1s-docs.googleusercontent.com +61.91.161.217 doc-08-1s-docs.googleusercontent.com +61.91.161.217 doc-0c-1s-docs.googleusercontent.com +61.91.161.217 doc-0g-1s-docs.googleusercontent.com +61.91.161.217 doc-0k-1s-docs.googleusercontent.com +61.91.161.217 doc-0o-1s-docs.googleusercontent.com +61.91.161.217 doc-0s-1s-docs.googleusercontent.com +61.91.161.217 doc-10-1s-docs.googleusercontent.com +61.91.161.217 doc-14-1s-docs.googleusercontent.com +61.91.161.217 doc-00-20-docs.googleusercontent.com +61.91.161.217 doc-04-20-docs.googleusercontent.com +61.91.161.217 doc-08-20-docs.googleusercontent.com +61.91.161.217 doc-0c-20-docs.googleusercontent.com +61.91.161.217 doc-0g-20-docs.googleusercontent.com +61.91.161.217 doc-0k-20-docs.googleusercontent.com +61.91.161.217 doc-0o-20-docs.googleusercontent.com +61.91.161.217 doc-0s-20-docs.googleusercontent.com +61.91.161.217 doc-10-20-docs.googleusercontent.com +61.91.161.217 doc-14-20-docs.googleusercontent.com +61.91.161.217 doc-00-24-docs.googleusercontent.com +61.91.161.217 doc-04-24-docs.googleusercontent.com +61.91.161.217 doc-08-24-docs.googleusercontent.com +61.91.161.217 doc-0c-24-docs.googleusercontent.com +61.91.161.217 doc-0g-24-docs.googleusercontent.com +61.91.161.217 doc-0k-24-docs.googleusercontent.com +61.91.161.217 doc-0o-24-docs.googleusercontent.com +61.91.161.217 doc-0s-24-docs.googleusercontent.com +61.91.161.217 doc-10-24-docs.googleusercontent.com +61.91.161.217 doc-14-24-docs.googleusercontent.com +61.91.161.217 doc-00-28-docs.googleusercontent.com +61.91.161.217 doc-04-28-docs.googleusercontent.com +61.91.161.217 doc-08-28-docs.googleusercontent.com +61.91.161.217 doc-0c-28-docs.googleusercontent.com +61.91.161.217 doc-0g-28-docs.googleusercontent.com +61.91.161.217 doc-0k-28-docs.googleusercontent.com +61.91.161.217 doc-0o-28-docs.googleusercontent.com +61.91.161.217 doc-0s-28-docs.googleusercontent.com +61.91.161.217 doc-10-28-docs.googleusercontent.com +61.91.161.217 doc-14-28-docs.googleusercontent.com +61.91.161.217 doc-00-2c-docs.googleusercontent.com +61.91.161.217 doc-04-2c-docs.googleusercontent.com +61.91.161.217 doc-08-2c-docs.googleusercontent.com +61.91.161.217 doc-0c-2c-docs.googleusercontent.com +61.91.161.217 doc-0g-2c-docs.googleusercontent.com +61.91.161.217 doc-0k-2c-docs.googleusercontent.com +61.91.161.217 doc-0o-2c-docs.googleusercontent.com +61.91.161.217 doc-0s-2c-docs.googleusercontent.com +61.91.161.217 doc-10-2c-docs.googleusercontent.com +61.91.161.217 doc-14-2c-docs.googleusercontent.com +61.91.161.217 doc-00-2g-docs.googleusercontent.com +61.91.161.217 doc-04-2g-docs.googleusercontent.com +61.91.161.217 doc-08-2g-docs.googleusercontent.com +61.91.161.217 doc-0c-2g-docs.googleusercontent.com +61.91.161.217 doc-0g-2g-docs.googleusercontent.com +61.91.161.217 doc-0k-2g-docs.googleusercontent.com +61.91.161.217 doc-0o-2g-docs.googleusercontent.com +61.91.161.217 doc-0s-2g-docs.googleusercontent.com +61.91.161.217 doc-10-2g-docs.googleusercontent.com +61.91.161.217 doc-14-2g-docs.googleusercontent.com +61.91.161.217 doc-00-2k-docs.googleusercontent.com +61.91.161.217 doc-04-2k-docs.googleusercontent.com +61.91.161.217 doc-08-2k-docs.googleusercontent.com +61.91.161.217 doc-0c-2k-docs.googleusercontent.com +61.91.161.217 doc-0g-2k-docs.googleusercontent.com +61.91.161.217 doc-0k-2k-docs.googleusercontent.com +61.91.161.217 doc-0o-2k-docs.googleusercontent.com +61.91.161.217 doc-0s-2k-docs.googleusercontent.com +61.91.161.217 doc-10-2k-docs.googleusercontent.com +61.91.161.217 doc-14-2k-docs.googleusercontent.com +61.91.161.217 doc-00-2o-docs.googleusercontent.com +61.91.161.217 doc-04-2o-docs.googleusercontent.com +61.91.161.217 doc-08-2o-docs.googleusercontent.com +61.91.161.217 doc-0c-2o-docs.googleusercontent.com +61.91.161.217 doc-0g-2o-docs.googleusercontent.com +61.91.161.217 doc-0k-2o-docs.googleusercontent.com +61.91.161.217 doc-0o-2o-docs.googleusercontent.com +61.91.161.217 doc-0s-2o-docs.googleusercontent.com +61.91.161.217 doc-10-2o-docs.googleusercontent.com +61.91.161.217 doc-14-2o-docs.googleusercontent.com +61.91.161.217 doc-00-2s-docs.googleusercontent.com +61.91.161.217 doc-04-2s-docs.googleusercontent.com +61.91.161.217 doc-08-2s-docs.googleusercontent.com +61.91.161.217 doc-0c-2s-docs.googleusercontent.com +61.91.161.217 doc-0g-2s-docs.googleusercontent.com +61.91.161.217 doc-0k-2s-docs.googleusercontent.com +61.91.161.217 doc-0o-2s-docs.googleusercontent.com +61.91.161.217 doc-0s-2s-docs.googleusercontent.com +61.91.161.217 doc-10-2s-docs.googleusercontent.com +61.91.161.217 doc-14-2s-docs.googleusercontent.com +61.91.161.217 doc-00-30-docs.googleusercontent.com +61.91.161.217 doc-04-30-docs.googleusercontent.com +61.91.161.217 doc-08-30-docs.googleusercontent.com +61.91.161.217 doc-0c-30-docs.googleusercontent.com +61.91.161.217 doc-0g-30-docs.googleusercontent.com +61.91.161.217 doc-0k-30-docs.googleusercontent.com +61.91.161.217 doc-0o-30-docs.googleusercontent.com +61.91.161.217 doc-0s-30-docs.googleusercontent.com +61.91.161.217 doc-10-30-docs.googleusercontent.com +61.91.161.217 doc-14-30-docs.googleusercontent.com +61.91.161.217 doc-00-34-docs.googleusercontent.com +61.91.161.217 doc-04-34-docs.googleusercontent.com +61.91.161.217 doc-08-34-docs.googleusercontent.com +61.91.161.217 doc-0c-34-docs.googleusercontent.com +61.91.161.217 doc-0g-34-docs.googleusercontent.com +61.91.161.217 doc-0k-34-docs.googleusercontent.com +61.91.161.217 doc-0o-34-docs.googleusercontent.com +61.91.161.217 doc-0s-34-docs.googleusercontent.com +61.91.161.217 doc-10-34-docs.googleusercontent.com +61.91.161.217 doc-14-34-docs.googleusercontent.com +61.91.161.217 doc-00-38-docs.googleusercontent.com +61.91.161.217 doc-04-38-docs.googleusercontent.com +61.91.161.217 doc-08-38-docs.googleusercontent.com +61.91.161.217 doc-0c-38-docs.googleusercontent.com +61.91.161.217 doc-0g-38-docs.googleusercontent.com +61.91.161.217 doc-0k-38-docs.googleusercontent.com +61.91.161.217 doc-0o-38-docs.googleusercontent.com +61.91.161.217 doc-0s-38-docs.googleusercontent.com +61.91.161.217 doc-10-38-docs.googleusercontent.com +61.91.161.217 doc-14-38-docs.googleusercontent.com +61.91.161.217 doc-00-3c-docs.googleusercontent.com +61.91.161.217 doc-04-3c-docs.googleusercontent.com +61.91.161.217 doc-08-3c-docs.googleusercontent.com +61.91.161.217 doc-0c-3c-docs.googleusercontent.com +61.91.161.217 doc-0g-3c-docs.googleusercontent.com +61.91.161.217 doc-0k-3c-docs.googleusercontent.com +61.91.161.217 doc-0o-3c-docs.googleusercontent.com +61.91.161.217 doc-0s-3c-docs.googleusercontent.com +61.91.161.217 doc-10-3c-docs.googleusercontent.com +61.91.161.217 doc-14-3c-docs.googleusercontent.com +61.91.161.217 doc-00-3g-docs.googleusercontent.com +61.91.161.217 doc-04-3g-docs.googleusercontent.com +61.91.161.217 doc-08-3g-docs.googleusercontent.com +61.91.161.217 doc-0c-3g-docs.googleusercontent.com +61.91.161.217 doc-0g-3g-docs.googleusercontent.com +61.91.161.217 doc-0k-3g-docs.googleusercontent.com +61.91.161.217 doc-0o-3g-docs.googleusercontent.com +61.91.161.217 doc-0s-3g-docs.googleusercontent.com +61.91.161.217 doc-10-3g-docs.googleusercontent.com +61.91.161.217 doc-14-3g-docs.googleusercontent.com +61.91.161.217 doc-00-3k-docs.googleusercontent.com +61.91.161.217 doc-04-3k-docs.googleusercontent.com +61.91.161.217 doc-08-3k-docs.googleusercontent.com +61.91.161.217 doc-0c-3k-docs.googleusercontent.com +61.91.161.217 doc-0g-3k-docs.googleusercontent.com +61.91.161.217 doc-0k-3k-docs.googleusercontent.com +61.91.161.217 doc-0o-3k-docs.googleusercontent.com +61.91.161.217 doc-0s-3k-docs.googleusercontent.com +61.91.161.217 doc-10-3k-docs.googleusercontent.com +61.91.161.217 doc-14-3k-docs.googleusercontent.com +61.91.161.217 doc-00-3o-docs.googleusercontent.com +61.91.161.217 doc-04-3o-docs.googleusercontent.com +61.91.161.217 doc-08-3o-docs.googleusercontent.com +61.91.161.217 doc-0c-3o-docs.googleusercontent.com +61.91.161.217 doc-0g-3o-docs.googleusercontent.com +61.91.161.217 doc-0k-3o-docs.googleusercontent.com +61.91.161.217 doc-0o-3o-docs.googleusercontent.com +61.91.161.217 doc-0s-3o-docs.googleusercontent.com +61.91.161.217 doc-10-3o-docs.googleusercontent.com +61.91.161.217 doc-14-3o-docs.googleusercontent.com +61.91.161.217 doc-00-3s-docs.googleusercontent.com +61.91.161.217 doc-04-3s-docs.googleusercontent.com +61.91.161.217 doc-08-3s-docs.googleusercontent.com +61.91.161.217 doc-0c-3s-docs.googleusercontent.com +61.91.161.217 doc-0g-3s-docs.googleusercontent.com +61.91.161.217 doc-0k-3s-docs.googleusercontent.com +61.91.161.217 doc-0o-3s-docs.googleusercontent.com +61.91.161.217 doc-0s-3s-docs.googleusercontent.com +61.91.161.217 doc-10-3s-docs.googleusercontent.com +61.91.161.217 doc-14-3s-docs.googleusercontent.com +61.91.161.217 doc-00-40-docs.googleusercontent.com +61.91.161.217 doc-04-40-docs.googleusercontent.com +61.91.161.217 doc-08-40-docs.googleusercontent.com +61.91.161.217 doc-0c-40-docs.googleusercontent.com +61.91.161.217 doc-0g-40-docs.googleusercontent.com +61.91.161.217 doc-0k-40-docs.googleusercontent.com +61.91.161.217 doc-0o-40-docs.googleusercontent.com +61.91.161.217 doc-0s-40-docs.googleusercontent.com +61.91.161.217 doc-10-40-docs.googleusercontent.com +61.91.161.217 doc-14-40-docs.googleusercontent.com +61.91.161.217 doc-00-44-docs.googleusercontent.com +61.91.161.217 doc-04-44-docs.googleusercontent.com +61.91.161.217 doc-08-44-docs.googleusercontent.com +61.91.161.217 doc-0c-44-docs.googleusercontent.com +61.91.161.217 doc-0g-44-docs.googleusercontent.com +61.91.161.217 doc-0k-44-docs.googleusercontent.com +61.91.161.217 doc-0o-44-docs.googleusercontent.com +61.91.161.217 doc-0s-44-docs.googleusercontent.com +61.91.161.217 doc-10-44-docs.googleusercontent.com +61.91.161.217 doc-14-44-docs.googleusercontent.com +61.91.161.217 doc-00-48-docs.googleusercontent.com +61.91.161.217 doc-04-48-docs.googleusercontent.com +61.91.161.217 doc-08-48-docs.googleusercontent.com +61.91.161.217 doc-0c-48-docs.googleusercontent.com +61.91.161.217 doc-0g-48-docs.googleusercontent.com +61.91.161.217 doc-0k-48-docs.googleusercontent.com +61.91.161.217 doc-0o-48-docs.googleusercontent.com +61.91.161.217 doc-0s-48-docs.googleusercontent.com +61.91.161.217 doc-10-48-docs.googleusercontent.com +61.91.161.217 doc-14-48-docs.googleusercontent.com +61.91.161.217 doc-00-4c-docs.googleusercontent.com +61.91.161.217 doc-04-4c-docs.googleusercontent.com +61.91.161.217 doc-08-4c-docs.googleusercontent.com +61.91.161.217 doc-0c-4c-docs.googleusercontent.com +61.91.161.217 doc-0g-4c-docs.googleusercontent.com +61.91.161.217 doc-0k-4c-docs.googleusercontent.com +61.91.161.217 doc-0o-4c-docs.googleusercontent.com +61.91.161.217 doc-0s-4c-docs.googleusercontent.com +61.91.161.217 doc-10-4c-docs.googleusercontent.com +61.91.161.217 doc-14-4c-docs.googleusercontent.com +61.91.161.217 doc-00-4g-docs.googleusercontent.com +61.91.161.217 doc-04-4g-docs.googleusercontent.com +61.91.161.217 doc-08-4g-docs.googleusercontent.com +61.91.161.217 doc-0c-4g-docs.googleusercontent.com +61.91.161.217 doc-0g-4g-docs.googleusercontent.com +61.91.161.217 doc-0k-4g-docs.googleusercontent.com +61.91.161.217 doc-0o-4g-docs.googleusercontent.com +61.91.161.217 doc-0s-4g-docs.googleusercontent.com +61.91.161.217 doc-10-4g-docs.googleusercontent.com +61.91.161.217 doc-14-4g-docs.googleusercontent.com +61.91.161.217 doc-00-4k-docs.googleusercontent.com +61.91.161.217 doc-04-4k-docs.googleusercontent.com +61.91.161.217 doc-08-4k-docs.googleusercontent.com +61.91.161.217 doc-0c-4k-docs.googleusercontent.com +61.91.161.217 doc-0g-4k-docs.googleusercontent.com +61.91.161.217 doc-0k-4k-docs.googleusercontent.com +61.91.161.217 doc-0o-4k-docs.googleusercontent.com +61.91.161.217 doc-0s-4k-docs.googleusercontent.com +61.91.161.217 doc-10-4k-docs.googleusercontent.com +61.91.161.217 doc-14-4k-docs.googleusercontent.com +61.91.161.217 doc-00-4o-docs.googleusercontent.com +61.91.161.217 doc-04-4o-docs.googleusercontent.com +61.91.161.217 doc-08-4o-docs.googleusercontent.com +61.91.161.217 doc-0c-4o-docs.googleusercontent.com +61.91.161.217 doc-0g-4o-docs.googleusercontent.com +61.91.161.217 doc-0k-4o-docs.googleusercontent.com +61.91.161.217 doc-0o-4o-docs.googleusercontent.com +61.91.161.217 doc-0s-4o-docs.googleusercontent.com +61.91.161.217 doc-10-4o-docs.googleusercontent.com +61.91.161.217 doc-14-4o-docs.googleusercontent.com +61.91.161.217 doc-00-4s-docs.googleusercontent.com +61.91.161.217 doc-04-4s-docs.googleusercontent.com +61.91.161.217 doc-08-4s-docs.googleusercontent.com +61.91.161.217 doc-0c-4s-docs.googleusercontent.com +61.91.161.217 doc-0g-4s-docs.googleusercontent.com +61.91.161.217 doc-0k-4s-docs.googleusercontent.com +61.91.161.217 doc-0o-4s-docs.googleusercontent.com +61.91.161.217 doc-0s-4s-docs.googleusercontent.com +61.91.161.217 doc-10-4s-docs.googleusercontent.com +61.91.161.217 doc-14-4s-docs.googleusercontent.com +61.91.161.217 doc-00-50-docs.googleusercontent.com +61.91.161.217 doc-04-50-docs.googleusercontent.com +61.91.161.217 doc-08-50-docs.googleusercontent.com +61.91.161.217 doc-0c-50-docs.googleusercontent.com +61.91.161.217 doc-0g-50-docs.googleusercontent.com +61.91.161.217 doc-0k-50-docs.googleusercontent.com +61.91.161.217 doc-0o-50-docs.googleusercontent.com +61.91.161.217 doc-0s-50-docs.googleusercontent.com +61.91.161.217 doc-10-50-docs.googleusercontent.com +61.91.161.217 doc-14-50-docs.googleusercontent.com +61.91.161.217 doc-00-54-docs.googleusercontent.com +61.91.161.217 doc-04-54-docs.googleusercontent.com +61.91.161.217 doc-08-54-docs.googleusercontent.com +61.91.161.217 doc-0c-54-docs.googleusercontent.com +61.91.161.217 doc-0g-54-docs.googleusercontent.com +61.91.161.217 doc-0k-54-docs.googleusercontent.com +61.91.161.217 doc-0o-54-docs.googleusercontent.com +61.91.161.217 doc-0s-54-docs.googleusercontent.com +61.91.161.217 doc-10-54-docs.googleusercontent.com +61.91.161.217 doc-14-54-docs.googleusercontent.com +61.91.161.217 doc-00-58-docs.googleusercontent.com +61.91.161.217 doc-04-58-docs.googleusercontent.com +61.91.161.217 doc-08-58-docs.googleusercontent.com +61.91.161.217 doc-0c-58-docs.googleusercontent.com +61.91.161.217 doc-0g-58-docs.googleusercontent.com +61.91.161.217 doc-0k-58-docs.googleusercontent.com +61.91.161.217 doc-0o-58-docs.googleusercontent.com +61.91.161.217 doc-0s-58-docs.googleusercontent.com +61.91.161.217 doc-10-58-docs.googleusercontent.com +61.91.161.217 doc-14-58-docs.googleusercontent.com +61.91.161.217 doc-00-5c-docs.googleusercontent.com +61.91.161.217 doc-04-5c-docs.googleusercontent.com +61.91.161.217 doc-08-5c-docs.googleusercontent.com +61.91.161.217 doc-0c-5c-docs.googleusercontent.com +61.91.161.217 doc-0g-5c-docs.googleusercontent.com +61.91.161.217 doc-0k-5c-docs.googleusercontent.com +61.91.161.217 doc-0o-5c-docs.googleusercontent.com +61.91.161.217 doc-0s-5c-docs.googleusercontent.com +61.91.161.217 doc-10-5c-docs.googleusercontent.com +61.91.161.217 doc-14-5c-docs.googleusercontent.com +61.91.161.217 doc-00-5g-docs.googleusercontent.com +61.91.161.217 doc-04-5g-docs.googleusercontent.com +61.91.161.217 doc-08-5g-docs.googleusercontent.com +61.91.161.217 doc-0c-5g-docs.googleusercontent.com +61.91.161.217 doc-0g-5g-docs.googleusercontent.com +61.91.161.217 doc-0k-5g-docs.googleusercontent.com +61.91.161.217 doc-0o-5g-docs.googleusercontent.com +61.91.161.217 doc-0s-5g-docs.googleusercontent.com +61.91.161.217 doc-10-5g-docs.googleusercontent.com +61.91.161.217 doc-14-5g-docs.googleusercontent.com +61.91.161.217 doc-00-5k-docs.googleusercontent.com +61.91.161.217 doc-04-5k-docs.googleusercontent.com +61.91.161.217 doc-08-5k-docs.googleusercontent.com +61.91.161.217 doc-0c-5k-docs.googleusercontent.com +61.91.161.217 doc-0g-5k-docs.googleusercontent.com +61.91.161.217 doc-0k-5k-docs.googleusercontent.com +61.91.161.217 doc-0o-5k-docs.googleusercontent.com +61.91.161.217 doc-0s-5k-docs.googleusercontent.com +61.91.161.217 doc-10-5k-docs.googleusercontent.com +61.91.161.217 doc-14-5k-docs.googleusercontent.com +61.91.161.217 doc-00-5o-docs.googleusercontent.com +61.91.161.217 doc-04-5o-docs.googleusercontent.com +61.91.161.217 doc-08-5o-docs.googleusercontent.com +61.91.161.217 doc-0c-5o-docs.googleusercontent.com +61.91.161.217 doc-0g-5o-docs.googleusercontent.com +61.91.161.217 doc-0k-5o-docs.googleusercontent.com +61.91.161.217 doc-0o-5o-docs.googleusercontent.com +61.91.161.217 doc-0s-5o-docs.googleusercontent.com +61.91.161.217 doc-10-5o-docs.googleusercontent.com +61.91.161.217 doc-14-5o-docs.googleusercontent.com +61.91.161.217 doc-00-5s-docs.googleusercontent.com +61.91.161.217 doc-04-5s-docs.googleusercontent.com +61.91.161.217 doc-08-5s-docs.googleusercontent.com +61.91.161.217 doc-0c-5s-docs.googleusercontent.com +61.91.161.217 doc-0g-5s-docs.googleusercontent.com +61.91.161.217 doc-0k-5s-docs.googleusercontent.com +61.91.161.217 doc-0o-5s-docs.googleusercontent.com +61.91.161.217 doc-0s-5s-docs.googleusercontent.com +61.91.161.217 doc-10-5s-docs.googleusercontent.com +61.91.161.217 doc-14-5s-docs.googleusercontent.com +61.91.161.217 doc-00-60-docs.googleusercontent.com +61.91.161.217 doc-04-60-docs.googleusercontent.com +61.91.161.217 doc-08-60-docs.googleusercontent.com +61.91.161.217 doc-0c-60-docs.googleusercontent.com +61.91.161.217 doc-0g-60-docs.googleusercontent.com +61.91.161.217 doc-0k-60-docs.googleusercontent.com +61.91.161.217 doc-0o-60-docs.googleusercontent.com +61.91.161.217 doc-0s-60-docs.googleusercontent.com +61.91.161.217 doc-10-60-docs.googleusercontent.com +61.91.161.217 doc-14-60-docs.googleusercontent.com +61.91.161.217 doc-00-64-docs.googleusercontent.com +61.91.161.217 doc-04-64-docs.googleusercontent.com +61.91.161.217 doc-08-64-docs.googleusercontent.com +61.91.161.217 doc-0c-64-docs.googleusercontent.com +61.91.161.217 doc-0g-64-docs.googleusercontent.com +61.91.161.217 doc-0k-64-docs.googleusercontent.com +61.91.161.217 doc-0o-64-docs.googleusercontent.com +61.91.161.217 doc-0s-64-docs.googleusercontent.com +61.91.161.217 doc-10-64-docs.googleusercontent.com +61.91.161.217 doc-14-64-docs.googleusercontent.com +61.91.161.217 doc-00-68-docs.googleusercontent.com +61.91.161.217 doc-04-68-docs.googleusercontent.com +61.91.161.217 doc-08-68-docs.googleusercontent.com +61.91.161.217 doc-0c-68-docs.googleusercontent.com +61.91.161.217 doc-0g-68-docs.googleusercontent.com +61.91.161.217 doc-0k-68-docs.googleusercontent.com +61.91.161.217 doc-0o-68-docs.googleusercontent.com +61.91.161.217 doc-0s-68-docs.googleusercontent.com +61.91.161.217 doc-10-68-docs.googleusercontent.com +61.91.161.217 doc-14-68-docs.googleusercontent.com +61.91.161.217 doc-00-6c-docs.googleusercontent.com +61.91.161.217 doc-04-6c-docs.googleusercontent.com +61.91.161.217 doc-08-6c-docs.googleusercontent.com +61.91.161.217 doc-0c-6c-docs.googleusercontent.com +61.91.161.217 doc-0g-6c-docs.googleusercontent.com +61.91.161.217 doc-0k-6c-docs.googleusercontent.com +61.91.161.217 doc-0o-6c-docs.googleusercontent.com +61.91.161.217 doc-0s-6c-docs.googleusercontent.com +61.91.161.217 doc-10-6c-docs.googleusercontent.com +61.91.161.217 doc-14-6c-docs.googleusercontent.com +61.91.161.217 doc-00-6g-docs.googleusercontent.com +61.91.161.217 doc-04-6g-docs.googleusercontent.com +61.91.161.217 doc-08-6g-docs.googleusercontent.com +61.91.161.217 doc-0c-6g-docs.googleusercontent.com +61.91.161.217 doc-0g-6g-docs.googleusercontent.com +61.91.161.217 doc-0k-6g-docs.googleusercontent.com +61.91.161.217 doc-0o-6g-docs.googleusercontent.com +61.91.161.217 doc-0s-6g-docs.googleusercontent.com +61.91.161.217 doc-10-6g-docs.googleusercontent.com +61.91.161.217 doc-14-6g-docs.googleusercontent.com +61.91.161.217 doc-00-6k-docs.googleusercontent.com +61.91.161.217 doc-04-6k-docs.googleusercontent.com +61.91.161.217 doc-08-6k-docs.googleusercontent.com +61.91.161.217 doc-0c-6k-docs.googleusercontent.com +61.91.161.217 doc-0g-6k-docs.googleusercontent.com +61.91.161.217 doc-0k-6k-docs.googleusercontent.com +61.91.161.217 doc-0o-6k-docs.googleusercontent.com +61.91.161.217 doc-0s-6k-docs.googleusercontent.com +61.91.161.217 doc-10-6k-docs.googleusercontent.com +61.91.161.217 doc-14-6k-docs.googleusercontent.com +61.91.161.217 doc-00-6o-docs.googleusercontent.com +61.91.161.217 doc-04-6o-docs.googleusercontent.com +61.91.161.217 doc-08-6o-docs.googleusercontent.com +61.91.161.217 doc-0c-6o-docs.googleusercontent.com +61.91.161.217 doc-0g-6o-docs.googleusercontent.com +61.91.161.217 doc-0k-6o-docs.googleusercontent.com +61.91.161.217 doc-0o-6o-docs.googleusercontent.com +61.91.161.217 doc-0s-6o-docs.googleusercontent.com +61.91.161.217 doc-10-6o-docs.googleusercontent.com +61.91.161.217 doc-14-6o-docs.googleusercontent.com +61.91.161.217 doc-00-6s-docs.googleusercontent.com +61.91.161.217 doc-04-6s-docs.googleusercontent.com +61.91.161.217 doc-08-6s-docs.googleusercontent.com +61.91.161.217 doc-0c-6s-docs.googleusercontent.com +61.91.161.217 doc-0g-6s-docs.googleusercontent.com +61.91.161.217 doc-0k-6s-docs.googleusercontent.com +61.91.161.217 doc-0o-6s-docs.googleusercontent.com +61.91.161.217 doc-0s-6s-docs.googleusercontent.com +61.91.161.217 doc-10-6s-docs.googleusercontent.com +61.91.161.217 doc-14-6s-docs.googleusercontent.com +61.91.161.217 doc-00-70-docs.googleusercontent.com +61.91.161.217 doc-04-70-docs.googleusercontent.com +61.91.161.217 doc-08-70-docs.googleusercontent.com +61.91.161.217 doc-0c-70-docs.googleusercontent.com +61.91.161.217 doc-0g-70-docs.googleusercontent.com +61.91.161.217 doc-0k-70-docs.googleusercontent.com +61.91.161.217 doc-0o-70-docs.googleusercontent.com +61.91.161.217 doc-0s-70-docs.googleusercontent.com +61.91.161.217 doc-10-70-docs.googleusercontent.com +61.91.161.217 doc-14-70-docs.googleusercontent.com +61.91.161.217 doc-00-74-docs.googleusercontent.com +61.91.161.217 doc-04-74-docs.googleusercontent.com +61.91.161.217 doc-08-74-docs.googleusercontent.com +61.91.161.217 doc-0c-74-docs.googleusercontent.com +61.91.161.217 doc-0g-74-docs.googleusercontent.com +61.91.161.217 doc-0k-74-docs.googleusercontent.com +61.91.161.217 doc-0o-74-docs.googleusercontent.com +61.91.161.217 doc-0s-74-docs.googleusercontent.com +61.91.161.217 doc-10-74-docs.googleusercontent.com +61.91.161.217 doc-14-74-docs.googleusercontent.com +61.91.161.217 doc-00-78-docs.googleusercontent.com +61.91.161.217 doc-04-78-docs.googleusercontent.com +61.91.161.217 doc-08-78-docs.googleusercontent.com +61.91.161.217 doc-0c-78-docs.googleusercontent.com +61.91.161.217 doc-0g-78-docs.googleusercontent.com +61.91.161.217 doc-0k-78-docs.googleusercontent.com +61.91.161.217 doc-0o-78-docs.googleusercontent.com +61.91.161.217 doc-0s-78-docs.googleusercontent.com +61.91.161.217 doc-10-78-docs.googleusercontent.com +61.91.161.217 doc-14-78-docs.googleusercontent.com +61.91.161.217 doc-00-7c-docs.googleusercontent.com +61.91.161.217 doc-04-7c-docs.googleusercontent.com +61.91.161.217 doc-08-7c-docs.googleusercontent.com +61.91.161.217 doc-0c-7c-docs.googleusercontent.com +61.91.161.217 doc-0g-7c-docs.googleusercontent.com +61.91.161.217 doc-0k-7c-docs.googleusercontent.com +61.91.161.217 doc-0o-7c-docs.googleusercontent.com +61.91.161.217 doc-0s-7c-docs.googleusercontent.com +61.91.161.217 doc-10-7c-docs.googleusercontent.com +61.91.161.217 doc-14-7c-docs.googleusercontent.com +61.91.161.217 doc-00-7g-docs.googleusercontent.com +61.91.161.217 doc-04-7g-docs.googleusercontent.com +61.91.161.217 doc-08-7g-docs.googleusercontent.com +61.91.161.217 doc-0c-7g-docs.googleusercontent.com +61.91.161.217 doc-0g-7g-docs.googleusercontent.com +61.91.161.217 doc-0k-7g-docs.googleusercontent.com +61.91.161.217 doc-0o-7g-docs.googleusercontent.com +61.91.161.217 doc-0s-7g-docs.googleusercontent.com +61.91.161.217 doc-10-7g-docs.googleusercontent.com +61.91.161.217 doc-14-7g-docs.googleusercontent.com +61.91.161.217 doc-00-7k-docs.googleusercontent.com +61.91.161.217 doc-04-7k-docs.googleusercontent.com +61.91.161.217 doc-08-7k-docs.googleusercontent.com +61.91.161.217 doc-0c-7k-docs.googleusercontent.com +61.91.161.217 doc-0g-7k-docs.googleusercontent.com +61.91.161.217 doc-0k-7k-docs.googleusercontent.com +61.91.161.217 doc-0o-7k-docs.googleusercontent.com +61.91.161.217 doc-0s-7k-docs.googleusercontent.com +61.91.161.217 doc-10-7k-docs.googleusercontent.com +61.91.161.217 doc-14-7k-docs.googleusercontent.com +61.91.161.217 doc-00-7o-docs.googleusercontent.com +61.91.161.217 doc-04-7o-docs.googleusercontent.com +61.91.161.217 doc-08-7o-docs.googleusercontent.com +61.91.161.217 doc-0c-7o-docs.googleusercontent.com +61.91.161.217 doc-0g-7o-docs.googleusercontent.com +61.91.161.217 doc-0k-7o-docs.googleusercontent.com +61.91.161.217 doc-0o-7o-docs.googleusercontent.com +61.91.161.217 doc-0s-7o-docs.googleusercontent.com +61.91.161.217 doc-10-7o-docs.googleusercontent.com +61.91.161.217 doc-14-7o-docs.googleusercontent.com +61.91.161.217 doc-00-7s-docs.googleusercontent.com +61.91.161.217 doc-04-7s-docs.googleusercontent.com +61.91.161.217 doc-08-7s-docs.googleusercontent.com +61.91.161.217 doc-0c-7s-docs.googleusercontent.com +61.91.161.217 doc-0g-7s-docs.googleusercontent.com +61.91.161.217 doc-0k-7s-docs.googleusercontent.com +61.91.161.217 doc-0o-7s-docs.googleusercontent.com +61.91.161.217 doc-0s-7s-docs.googleusercontent.com +61.91.161.217 doc-10-7s-docs.googleusercontent.com +61.91.161.217 doc-14-7s-docs.googleusercontent.com +61.91.161.217 doc-00-80-docs.googleusercontent.com +61.91.161.217 doc-04-80-docs.googleusercontent.com +61.91.161.217 doc-08-80-docs.googleusercontent.com +61.91.161.217 doc-0c-80-docs.googleusercontent.com +61.91.161.217 doc-0g-80-docs.googleusercontent.com +61.91.161.217 doc-0k-80-docs.googleusercontent.com +61.91.161.217 doc-0o-80-docs.googleusercontent.com +61.91.161.217 doc-0s-80-docs.googleusercontent.com +61.91.161.217 doc-10-80-docs.googleusercontent.com +61.91.161.217 doc-14-80-docs.googleusercontent.com +61.91.161.217 doc-00-84-docs.googleusercontent.com +61.91.161.217 doc-04-84-docs.googleusercontent.com +61.91.161.217 doc-08-84-docs.googleusercontent.com +61.91.161.217 doc-0c-84-docs.googleusercontent.com +61.91.161.217 doc-0g-84-docs.googleusercontent.com +61.91.161.217 doc-0k-84-docs.googleusercontent.com +61.91.161.217 doc-0o-84-docs.googleusercontent.com +61.91.161.217 doc-0s-84-docs.googleusercontent.com +61.91.161.217 doc-10-84-docs.googleusercontent.com +61.91.161.217 doc-14-84-docs.googleusercontent.com +61.91.161.217 doc-00-88-docs.googleusercontent.com +61.91.161.217 doc-04-88-docs.googleusercontent.com +61.91.161.217 doc-08-88-docs.googleusercontent.com +61.91.161.217 doc-0c-88-docs.googleusercontent.com +61.91.161.217 doc-0g-88-docs.googleusercontent.com +61.91.161.217 doc-0k-88-docs.googleusercontent.com +61.91.161.217 doc-0o-88-docs.googleusercontent.com +61.91.161.217 doc-0s-88-docs.googleusercontent.com +61.91.161.217 doc-10-88-docs.googleusercontent.com +61.91.161.217 doc-14-88-docs.googleusercontent.com +61.91.161.217 doc-00-8c-docs.googleusercontent.com +61.91.161.217 doc-04-8c-docs.googleusercontent.com +61.91.161.217 doc-08-8c-docs.googleusercontent.com +61.91.161.217 doc-0c-8c-docs.googleusercontent.com +61.91.161.217 doc-0g-8c-docs.googleusercontent.com +61.91.161.217 doc-0k-8c-docs.googleusercontent.com +61.91.161.217 doc-0o-8c-docs.googleusercontent.com +61.91.161.217 doc-0s-8c-docs.googleusercontent.com +61.91.161.217 doc-10-8c-docs.googleusercontent.com +61.91.161.217 doc-14-8c-docs.googleusercontent.com +61.91.161.217 doc-00-8g-docs.googleusercontent.com +61.91.161.217 doc-04-8g-docs.googleusercontent.com +61.91.161.217 doc-08-8g-docs.googleusercontent.com +61.91.161.217 doc-0c-8g-docs.googleusercontent.com +61.91.161.217 doc-0g-8g-docs.googleusercontent.com +61.91.161.217 doc-0k-8g-docs.googleusercontent.com +61.91.161.217 doc-0o-8g-docs.googleusercontent.com +61.91.161.217 doc-0s-8g-docs.googleusercontent.com +61.91.161.217 doc-10-8g-docs.googleusercontent.com +61.91.161.217 doc-14-8g-docs.googleusercontent.com +61.91.161.217 doc-00-8k-docs.googleusercontent.com +61.91.161.217 doc-04-8k-docs.googleusercontent.com +61.91.161.217 doc-08-8k-docs.googleusercontent.com +61.91.161.217 doc-0c-8k-docs.googleusercontent.com +61.91.161.217 doc-0g-8k-docs.googleusercontent.com +61.91.161.217 doc-0k-8k-docs.googleusercontent.com +61.91.161.217 doc-0o-8k-docs.googleusercontent.com +61.91.161.217 doc-0s-8k-docs.googleusercontent.com +61.91.161.217 doc-10-8k-docs.googleusercontent.com +61.91.161.217 doc-14-8k-docs.googleusercontent.com +61.91.161.217 doc-00-8o-docs.googleusercontent.com +61.91.161.217 doc-04-8o-docs.googleusercontent.com +61.91.161.217 doc-08-8o-docs.googleusercontent.com +61.91.161.217 doc-0c-8o-docs.googleusercontent.com +61.91.161.217 doc-0g-8o-docs.googleusercontent.com +61.91.161.217 doc-0k-8o-docs.googleusercontent.com +61.91.161.217 doc-0o-8o-docs.googleusercontent.com +61.91.161.217 doc-0s-8o-docs.googleusercontent.com +61.91.161.217 doc-10-8o-docs.googleusercontent.com +61.91.161.217 doc-14-8o-docs.googleusercontent.com +61.91.161.217 doc-00-8s-docs.googleusercontent.com +61.91.161.217 doc-04-8s-docs.googleusercontent.com +61.91.161.217 doc-08-8s-docs.googleusercontent.com +61.91.161.217 doc-0c-8s-docs.googleusercontent.com +61.91.161.217 doc-0g-8s-docs.googleusercontent.com +61.91.161.217 doc-0k-8s-docs.googleusercontent.com +61.91.161.217 doc-0o-8s-docs.googleusercontent.com +61.91.161.217 doc-0s-8s-docs.googleusercontent.com +61.91.161.217 doc-10-8s-docs.googleusercontent.com +61.91.161.217 doc-14-8s-docs.googleusercontent.com +61.91.161.217 doc-00-90-docs.googleusercontent.com +61.91.161.217 doc-04-90-docs.googleusercontent.com +61.91.161.217 doc-08-90-docs.googleusercontent.com +61.91.161.217 doc-0c-90-docs.googleusercontent.com +61.91.161.217 doc-0g-90-docs.googleusercontent.com +61.91.161.217 doc-0k-90-docs.googleusercontent.com +61.91.161.217 doc-0o-90-docs.googleusercontent.com +61.91.161.217 doc-0s-90-docs.googleusercontent.com +61.91.161.217 doc-10-90-docs.googleusercontent.com +61.91.161.217 doc-14-90-docs.googleusercontent.com +61.91.161.217 doc-00-94-docs.googleusercontent.com +61.91.161.217 doc-04-94-docs.googleusercontent.com +61.91.161.217 doc-08-94-docs.googleusercontent.com +61.91.161.217 doc-0c-94-docs.googleusercontent.com +61.91.161.217 doc-0g-94-docs.googleusercontent.com +61.91.161.217 doc-0k-94-docs.googleusercontent.com +61.91.161.217 doc-0o-94-docs.googleusercontent.com +61.91.161.217 doc-0s-94-docs.googleusercontent.com +61.91.161.217 doc-10-94-docs.googleusercontent.com +61.91.161.217 doc-14-94-docs.googleusercontent.com +61.91.161.217 doc-00-98-docs.googleusercontent.com +61.91.161.217 doc-04-98-docs.googleusercontent.com +61.91.161.217 doc-08-98-docs.googleusercontent.com +61.91.161.217 doc-0c-98-docs.googleusercontent.com +61.91.161.217 doc-0g-98-docs.googleusercontent.com +61.91.161.217 doc-0k-98-docs.googleusercontent.com +61.91.161.217 doc-0o-98-docs.googleusercontent.com +61.91.161.217 doc-0s-98-docs.googleusercontent.com +61.91.161.217 doc-10-98-docs.googleusercontent.com +61.91.161.217 doc-14-98-docs.googleusercontent.com +61.91.161.217 doc-00-9c-docs.googleusercontent.com +61.91.161.217 doc-04-9c-docs.googleusercontent.com +61.91.161.217 doc-08-9c-docs.googleusercontent.com +61.91.161.217 doc-0c-9c-docs.googleusercontent.com +61.91.161.217 doc-0g-9c-docs.googleusercontent.com +61.91.161.217 doc-0k-9c-docs.googleusercontent.com +61.91.161.217 doc-0o-9c-docs.googleusercontent.com +61.91.161.217 doc-0s-9c-docs.googleusercontent.com +61.91.161.217 doc-10-9c-docs.googleusercontent.com +61.91.161.217 doc-14-9c-docs.googleusercontent.com +61.91.161.217 doc-00-9g-docs.googleusercontent.com +61.91.161.217 doc-04-9g-docs.googleusercontent.com +61.91.161.217 doc-08-9g-docs.googleusercontent.com +61.91.161.217 doc-0c-9g-docs.googleusercontent.com +61.91.161.217 doc-0g-9g-docs.googleusercontent.com +61.91.161.217 doc-0k-9g-docs.googleusercontent.com +61.91.161.217 doc-0o-9g-docs.googleusercontent.com +61.91.161.217 doc-0s-9g-docs.googleusercontent.com +61.91.161.217 doc-10-9g-docs.googleusercontent.com +61.91.161.217 doc-14-9g-docs.googleusercontent.com +61.91.161.217 doc-00-9k-docs.googleusercontent.com +61.91.161.217 doc-04-9k-docs.googleusercontent.com +61.91.161.217 doc-08-9k-docs.googleusercontent.com +61.91.161.217 doc-0c-9k-docs.googleusercontent.com +61.91.161.217 doc-0g-9k-docs.googleusercontent.com +61.91.161.217 doc-0k-9k-docs.googleusercontent.com +61.91.161.217 doc-0o-9k-docs.googleusercontent.com +61.91.161.217 doc-0s-9k-docs.googleusercontent.com +61.91.161.217 doc-10-9k-docs.googleusercontent.com +61.91.161.217 doc-14-9k-docs.googleusercontent.com +61.91.161.217 doc-00-9o-docs.googleusercontent.com +61.91.161.217 doc-04-9o-docs.googleusercontent.com +61.91.161.217 doc-08-9o-docs.googleusercontent.com +61.91.161.217 doc-0c-9o-docs.googleusercontent.com +61.91.161.217 doc-0g-9o-docs.googleusercontent.com +61.91.161.217 doc-0k-9o-docs.googleusercontent.com +61.91.161.217 doc-0o-9o-docs.googleusercontent.com +61.91.161.217 doc-0s-9o-docs.googleusercontent.com +61.91.161.217 doc-10-9o-docs.googleusercontent.com +61.91.161.217 doc-14-9o-docs.googleusercontent.com +61.91.161.217 doc-00-9s-docs.googleusercontent.com +61.91.161.217 doc-04-9s-docs.googleusercontent.com +61.91.161.217 doc-08-9s-docs.googleusercontent.com +61.91.161.217 doc-0c-9s-docs.googleusercontent.com +61.91.161.217 doc-0g-9s-docs.googleusercontent.com +61.91.161.217 doc-0k-9s-docs.googleusercontent.com +61.91.161.217 doc-0o-9s-docs.googleusercontent.com +61.91.161.217 doc-0s-9s-docs.googleusercontent.com +61.91.161.217 doc-10-9s-docs.googleusercontent.com +61.91.161.217 doc-14-9s-docs.googleusercontent.com +61.91.161.217 doc-00-a0-docs.googleusercontent.com +61.91.161.217 doc-04-a0-docs.googleusercontent.com +61.91.161.217 doc-08-a0-docs.googleusercontent.com +61.91.161.217 doc-0c-a0-docs.googleusercontent.com +61.91.161.217 doc-0g-a0-docs.googleusercontent.com +61.91.161.217 doc-0k-a0-docs.googleusercontent.com +61.91.161.217 doc-0o-a0-docs.googleusercontent.com +61.91.161.217 doc-0s-a0-docs.googleusercontent.com +61.91.161.217 doc-10-a0-docs.googleusercontent.com +61.91.161.217 doc-14-a0-docs.googleusercontent.com +61.91.161.217 doc-00-a4-docs.googleusercontent.com +61.91.161.217 doc-04-a4-docs.googleusercontent.com +61.91.161.217 doc-08-a4-docs.googleusercontent.com +61.91.161.217 doc-0c-a4-docs.googleusercontent.com +61.91.161.217 doc-0g-a4-docs.googleusercontent.com +61.91.161.217 doc-0k-a4-docs.googleusercontent.com +61.91.161.217 doc-0o-a4-docs.googleusercontent.com +61.91.161.217 doc-0s-a4-docs.googleusercontent.com +61.91.161.217 doc-10-a4-docs.googleusercontent.com +61.91.161.217 doc-14-a4-docs.googleusercontent.com +61.91.161.217 doc-00-a8-docs.googleusercontent.com +61.91.161.217 doc-04-a8-docs.googleusercontent.com +61.91.161.217 doc-08-a8-docs.googleusercontent.com +61.91.161.217 doc-0c-a8-docs.googleusercontent.com +61.91.161.217 doc-0g-a8-docs.googleusercontent.com +61.91.161.217 doc-0k-a8-docs.googleusercontent.com +61.91.161.217 doc-0o-a8-docs.googleusercontent.com +61.91.161.217 doc-0s-a8-docs.googleusercontent.com +61.91.161.217 doc-10-a8-docs.googleusercontent.com +61.91.161.217 doc-14-a8-docs.googleusercontent.com +61.91.161.217 doc-00-ac-docs.googleusercontent.com +61.91.161.217 doc-04-ac-docs.googleusercontent.com +61.91.161.217 doc-08-ac-docs.googleusercontent.com +61.91.161.217 doc-0c-ac-docs.googleusercontent.com +61.91.161.217 doc-0g-ac-docs.googleusercontent.com +61.91.161.217 doc-0k-ac-docs.googleusercontent.com +61.91.161.217 doc-0o-ac-docs.googleusercontent.com +61.91.161.217 doc-0s-ac-docs.googleusercontent.com +61.91.161.217 doc-10-ac-docs.googleusercontent.com +61.91.161.217 doc-14-ac-docs.googleusercontent.com +61.91.161.217 doc-00-ag-docs.googleusercontent.com +61.91.161.217 doc-04-ag-docs.googleusercontent.com +61.91.161.217 doc-08-ag-docs.googleusercontent.com +61.91.161.217 doc-0c-ag-docs.googleusercontent.com +61.91.161.217 doc-0g-ag-docs.googleusercontent.com +61.91.161.217 doc-0k-ag-docs.googleusercontent.com +61.91.161.217 doc-0o-ag-docs.googleusercontent.com +61.91.161.217 doc-0s-ag-docs.googleusercontent.com +61.91.161.217 doc-10-ag-docs.googleusercontent.com +61.91.161.217 doc-14-ag-docs.googleusercontent.com +61.91.161.217 doc-00-ak-docs.googleusercontent.com +61.91.161.217 doc-04-ak-docs.googleusercontent.com +61.91.161.217 doc-08-ak-docs.googleusercontent.com +61.91.161.217 doc-0c-ak-docs.googleusercontent.com +61.91.161.217 doc-0g-ak-docs.googleusercontent.com +61.91.161.217 doc-0k-ak-docs.googleusercontent.com +61.91.161.217 doc-0o-ak-docs.googleusercontent.com +61.91.161.217 doc-0s-ak-docs.googleusercontent.com +61.91.161.217 doc-10-ak-docs.googleusercontent.com +61.91.161.217 doc-14-ak-docs.googleusercontent.com +61.91.161.217 doc-00-ao-docs.googleusercontent.com +61.91.161.217 doc-04-ao-docs.googleusercontent.com +61.91.161.217 doc-08-ao-docs.googleusercontent.com +61.91.161.217 doc-0c-ao-docs.googleusercontent.com +61.91.161.217 doc-0g-ao-docs.googleusercontent.com +61.91.161.217 doc-0k-ao-docs.googleusercontent.com +61.91.161.217 doc-0o-ao-docs.googleusercontent.com +61.91.161.217 doc-0s-ao-docs.googleusercontent.com +61.91.161.217 doc-10-ao-docs.googleusercontent.com +61.91.161.217 doc-14-ao-docs.googleusercontent.com +61.91.161.217 doc-00-as-docs.googleusercontent.com +61.91.161.217 doc-04-as-docs.googleusercontent.com +61.91.161.217 doc-08-as-docs.googleusercontent.com +61.91.161.217 doc-0c-as-docs.googleusercontent.com +61.91.161.217 doc-0g-as-docs.googleusercontent.com +61.91.161.217 doc-0k-as-docs.googleusercontent.com +61.91.161.217 doc-0o-as-docs.googleusercontent.com +61.91.161.217 doc-0s-as-docs.googleusercontent.com +61.91.161.217 doc-10-as-docs.googleusercontent.com +61.91.161.217 doc-14-as-docs.googleusercontent.com +61.91.161.217 doc-00-b0-docs.googleusercontent.com +61.91.161.217 doc-04-b0-docs.googleusercontent.com +61.91.161.217 doc-08-b0-docs.googleusercontent.com +61.91.161.217 doc-0c-b0-docs.googleusercontent.com +61.91.161.217 doc-0g-b0-docs.googleusercontent.com +61.91.161.217 doc-0k-b0-docs.googleusercontent.com +61.91.161.217 doc-0o-b0-docs.googleusercontent.com +61.91.161.217 doc-0s-b0-docs.googleusercontent.com +61.91.161.217 doc-10-b0-docs.googleusercontent.com +61.91.161.217 doc-14-b0-docs.googleusercontent.com +61.91.161.217 doc-00-b4-docs.googleusercontent.com +61.91.161.217 doc-04-b4-docs.googleusercontent.com +61.91.161.217 doc-08-b4-docs.googleusercontent.com +61.91.161.217 doc-0c-b4-docs.googleusercontent.com +61.91.161.217 doc-0g-b4-docs.googleusercontent.com +61.91.161.217 doc-0k-b4-docs.googleusercontent.com +61.91.161.217 doc-0o-b4-docs.googleusercontent.com +61.91.161.217 doc-0s-b4-docs.googleusercontent.com +61.91.161.217 doc-10-b4-docs.googleusercontent.com +61.91.161.217 doc-14-b4-docs.googleusercontent.com +61.91.161.217 doc-00-b8-docs.googleusercontent.com +61.91.161.217 doc-04-b8-docs.googleusercontent.com +61.91.161.217 doc-08-b8-docs.googleusercontent.com +61.91.161.217 doc-0c-b8-docs.googleusercontent.com +61.91.161.217 doc-0g-b8-docs.googleusercontent.com +61.91.161.217 doc-0k-b8-docs.googleusercontent.com +61.91.161.217 doc-0o-b8-docs.googleusercontent.com +61.91.161.217 doc-0s-b8-docs.googleusercontent.com +61.91.161.217 doc-10-b8-docs.googleusercontent.com +61.91.161.217 doc-14-b8-docs.googleusercontent.com +61.91.161.217 doc-00-bc-docs.googleusercontent.com +61.91.161.217 doc-04-bc-docs.googleusercontent.com +61.91.161.217 doc-08-bc-docs.googleusercontent.com +61.91.161.217 doc-0c-bc-docs.googleusercontent.com +61.91.161.217 doc-0g-bc-docs.googleusercontent.com +61.91.161.217 doc-0k-bc-docs.googleusercontent.com +61.91.161.217 doc-0o-bc-docs.googleusercontent.com +61.91.161.217 doc-0s-bc-docs.googleusercontent.com +61.91.161.217 doc-10-bc-docs.googleusercontent.com +61.91.161.217 doc-14-bc-docs.googleusercontent.com +61.91.161.217 doc-00-bg-docs.googleusercontent.com +61.91.161.217 doc-04-bg-docs.googleusercontent.com +61.91.161.217 doc-08-bg-docs.googleusercontent.com +61.91.161.217 doc-0c-bg-docs.googleusercontent.com +61.91.161.217 doc-0g-bg-docs.googleusercontent.com +61.91.161.217 doc-0k-bg-docs.googleusercontent.com +61.91.161.217 doc-0o-bg-docs.googleusercontent.com +61.91.161.217 doc-0s-bg-docs.googleusercontent.com +61.91.161.217 doc-10-bg-docs.googleusercontent.com +61.91.161.217 doc-14-bg-docs.googleusercontent.com +61.91.161.217 doc-00-bk-docs.googleusercontent.com +61.91.161.217 doc-04-bk-docs.googleusercontent.com +61.91.161.217 doc-08-bk-docs.googleusercontent.com +61.91.161.217 doc-0c-bk-docs.googleusercontent.com +61.91.161.217 doc-0g-bk-docs.googleusercontent.com +61.91.161.217 doc-0k-bk-docs.googleusercontent.com +61.91.161.217 doc-0o-bk-docs.googleusercontent.com +61.91.161.217 doc-0s-bk-docs.googleusercontent.com +61.91.161.217 doc-10-bk-docs.googleusercontent.com +61.91.161.217 doc-14-bk-docs.googleusercontent.com +61.91.161.217 doc-00-bo-docs.googleusercontent.com +61.91.161.217 doc-04-bo-docs.googleusercontent.com +61.91.161.217 doc-08-bo-docs.googleusercontent.com +61.91.161.217 doc-0c-bo-docs.googleusercontent.com +61.91.161.217 doc-0g-bo-docs.googleusercontent.com +61.91.161.217 doc-0k-bo-docs.googleusercontent.com +61.91.161.217 doc-0o-bo-docs.googleusercontent.com +61.91.161.217 doc-0s-bo-docs.googleusercontent.com +61.91.161.217 doc-10-bo-docs.googleusercontent.com +61.91.161.217 doc-14-bo-docs.googleusercontent.com +61.91.161.217 doc-00-bs-docs.googleusercontent.com +61.91.161.217 doc-04-bs-docs.googleusercontent.com +61.91.161.217 doc-08-bs-docs.googleusercontent.com +61.91.161.217 doc-0c-bs-docs.googleusercontent.com +61.91.161.217 doc-0g-bs-docs.googleusercontent.com +61.91.161.217 doc-0k-bs-docs.googleusercontent.com +61.91.161.217 doc-0o-bs-docs.googleusercontent.com +61.91.161.217 doc-0s-bs-docs.googleusercontent.com +61.91.161.217 doc-10-bs-docs.googleusercontent.com +61.91.161.217 doc-14-bs-docs.googleusercontent.com +61.91.161.217 doc-00-c0-docs.googleusercontent.com +61.91.161.217 doc-04-c0-docs.googleusercontent.com +61.91.161.217 doc-08-c0-docs.googleusercontent.com +61.91.161.217 doc-0c-c0-docs.googleusercontent.com +61.91.161.217 doc-0g-c0-docs.googleusercontent.com +61.91.161.217 doc-0k-c0-docs.googleusercontent.com +61.91.161.217 doc-0o-c0-docs.googleusercontent.com +61.91.161.217 doc-0s-c0-docs.googleusercontent.com +61.91.161.217 doc-10-c0-docs.googleusercontent.com +61.91.161.217 doc-14-c0-docs.googleusercontent.com +61.91.161.217 doc-00-c4-docs.googleusercontent.com +61.91.161.217 doc-04-c4-docs.googleusercontent.com +61.91.161.217 doc-08-c4-docs.googleusercontent.com +61.91.161.217 doc-0c-c4-docs.googleusercontent.com +61.91.161.217 doc-0g-c4-docs.googleusercontent.com +61.91.161.217 doc-0k-c4-docs.googleusercontent.com +61.91.161.217 doc-0o-c4-docs.googleusercontent.com +61.91.161.217 doc-0s-c4-docs.googleusercontent.com +61.91.161.217 doc-10-c4-docs.googleusercontent.com +61.91.161.217 doc-14-c4-docs.googleusercontent.com +61.91.161.217 doc-00-c8-docs.googleusercontent.com +61.91.161.217 doc-04-c8-docs.googleusercontent.com +61.91.161.217 doc-08-c8-docs.googleusercontent.com +61.91.161.217 doc-0c-c8-docs.googleusercontent.com +61.91.161.217 doc-0g-c8-docs.googleusercontent.com +61.91.161.217 doc-0k-c8-docs.googleusercontent.com +61.91.161.217 doc-0o-c8-docs.googleusercontent.com +61.91.161.217 doc-0s-c8-docs.googleusercontent.com +61.91.161.217 doc-10-c8-docs.googleusercontent.com +61.91.161.217 doc-14-c8-docs.googleusercontent.com +61.91.161.217 doc-00-cc-docs.googleusercontent.com +61.91.161.217 doc-04-cc-docs.googleusercontent.com +61.91.161.217 doc-08-cc-docs.googleusercontent.com +61.91.161.217 doc-0c-cc-docs.googleusercontent.com +61.91.161.217 doc-0g-cc-docs.googleusercontent.com +61.91.161.217 doc-0k-cc-docs.googleusercontent.com +61.91.161.217 doc-0o-cc-docs.googleusercontent.com +61.91.161.217 doc-0s-cc-docs.googleusercontent.com +61.91.161.217 doc-10-cc-docs.googleusercontent.com +61.91.161.217 doc-14-cc-docs.googleusercontent.com +61.91.161.217 doc-00-cg-docs.googleusercontent.com +61.91.161.217 doc-04-cg-docs.googleusercontent.com +61.91.161.217 doc-08-cg-docs.googleusercontent.com +61.91.161.217 doc-0c-cg-docs.googleusercontent.com +61.91.161.217 doc-0g-cg-docs.googleusercontent.com +61.91.161.217 doc-0k-cg-docs.googleusercontent.com +61.91.161.217 doc-0o-cg-docs.googleusercontent.com +61.91.161.217 doc-0s-cg-docs.googleusercontent.com +61.91.161.217 doc-10-cg-docs.googleusercontent.com +61.91.161.217 doc-14-cg-docs.googleusercontent.com +61.91.161.217 doc-00-ck-docs.googleusercontent.com +61.91.161.217 doc-04-ck-docs.googleusercontent.com +61.91.161.217 doc-08-ck-docs.googleusercontent.com +61.91.161.217 doc-0c-ck-docs.googleusercontent.com +61.91.161.217 doc-0g-ck-docs.googleusercontent.com +61.91.161.217 doc-0k-ck-docs.googleusercontent.com +61.91.161.217 doc-0o-ck-docs.googleusercontent.com +61.91.161.217 doc-0s-ck-docs.googleusercontent.com +61.91.161.217 doc-10-ck-docs.googleusercontent.com +61.91.161.217 doc-14-ck-docs.googleusercontent.com +61.91.161.217 doc-00-co-docs.googleusercontent.com +61.91.161.217 doc-04-co-docs.googleusercontent.com +61.91.161.217 doc-08-co-docs.googleusercontent.com +61.91.161.217 doc-0c-co-docs.googleusercontent.com +61.91.161.217 doc-0g-co-docs.googleusercontent.com +61.91.161.217 doc-0k-co-docs.googleusercontent.com +61.91.161.217 doc-0o-co-docs.googleusercontent.com +61.91.161.217 doc-0s-co-docs.googleusercontent.com +61.91.161.217 doc-10-co-docs.googleusercontent.com +61.91.161.217 doc-14-co-docs.googleusercontent.com +61.91.161.217 doc-00-cs-docs.googleusercontent.com +61.91.161.217 doc-04-cs-docs.googleusercontent.com +61.91.161.217 doc-08-cs-docs.googleusercontent.com +61.91.161.217 doc-0c-cs-docs.googleusercontent.com +61.91.161.217 doc-0g-cs-docs.googleusercontent.com +61.91.161.217 doc-0k-cs-docs.googleusercontent.com +61.91.161.217 doc-0o-cs-docs.googleusercontent.com +61.91.161.217 doc-0s-cs-docs.googleusercontent.com +61.91.161.217 doc-10-cs-docs.googleusercontent.com +61.91.161.217 doc-14-cs-docs.googleusercontent.com +61.91.161.217 doc-00-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-04-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-08-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0c-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0g-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0k-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0o-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-0s-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-10-2g-3dwarehouse.googleusercontent.com +61.91.161.217 doc-14-2g-3dwarehouse.googleusercontent.com +61.91.161.217 feedback.googleusercontent.com +61.91.161.217 images1-esmobile-opensocial.googleusercontent.com +61.91.161.217 images2-esmobile-opensocial.googleusercontent.com +61.91.161.217 images3-esmobile-opensocial.googleusercontent.com +61.91.161.217 images4-esmobile-opensocial.googleusercontent.com +61.91.161.217 images5-esmobile-opensocial.googleusercontent.com +61.91.161.217 images6-esmobile-opensocial.googleusercontent.com +61.91.161.217 images7-esmobile-opensocial.googleusercontent.com +61.91.161.217 images8-esmobile-opensocial.googleusercontent.com +61.91.161.217 images9-esmobile-opensocial.googleusercontent.com +61.91.161.217 images1-hangout-opensocial.googleusercontent.com +61.91.161.217 images2-hangout-opensocial.googleusercontent.com +61.91.161.217 images3-hangout-opensocial.googleusercontent.com +61.91.161.217 images4-hangout-opensocial.googleusercontent.com +61.91.161.217 images5-hangout-opensocial.googleusercontent.com +61.91.161.217 images6-hangout-opensocial.googleusercontent.com +61.91.161.217 images7-hangout-opensocial.googleusercontent.com +61.91.161.217 images8-hangout-opensocial.googleusercontent.com +61.91.161.217 images9-hangout-opensocial.googleusercontent.com +61.91.161.217 images-docs-opensocial.googleusercontent.com +61.91.161.217 images-oz-opensocial.googleusercontent.com +61.91.161.217 images-lso-opensocial.googleusercontent.com +61.91.161.217 images-blogger-opensocial.googleusercontent.com +61.91.161.217 images-pos-opensocial.googleusercontent.com +61.91.161.217 www-calendar-opensocial.googleusercontent.com +61.91.161.217 a-oz-opensocial.googleusercontent.com +61.91.161.217 lh0.googleusercontent.com +61.91.161.217 lh1.googleusercontent.com +61.91.161.217 lh2.googleusercontent.com +61.91.161.217 lh3.googleusercontent.com +61.91.161.217 lh4.googleusercontent.com +61.91.161.217 lh5.googleusercontent.com +61.91.161.217 lh6.googleusercontent.com +61.91.161.217 mail-attachment.googleusercontent.com +61.91.161.217 music-onebox.googleusercontent.com +61.91.161.217 newsstand.googleusercontent.com +61.91.161.217 oauth.googleusercontent.com +61.91.161.217 producer.googleusercontent.com +61.91.161.217 reader.googleusercontent.com +61.91.161.217 s1.googleusercontent.com +61.91.161.217 s2.googleusercontent.com +61.91.161.217 s3.googleusercontent.com +61.91.161.217 s4.googleusercontent.com +61.91.161.217 s5.googleusercontent.com +61.91.161.217 s6.googleusercontent.com +61.91.161.217 spreadsheets-opensocial.googleusercontent.com +61.91.161.217 static.googleusercontent.com +61.91.161.217 themes.googleusercontent.com +61.91.161.217 translate.googleusercontent.com +61.91.161.217 video.googleusercontent.com +61.91.161.217 wave.googleusercontent.com +61.91.161.217 webcache.googleusercontent.com +61.91.161.217 ytimg.googleusercontent.com +61.91.161.217 www-opensocial.googleusercontent.com +61.91.161.217 www-gm-opensocial.googleusercontent.com +61.91.161.217 www-opensocial-sandbox.googleusercontent.com +61.91.161.217 www-fc-opensocial.googleusercontent.com +61.91.161.217 www-focus-opensocial.googleusercontent.com +61.91.161.217 images0-focus-opensocial.googleusercontent.com +61.91.161.217 images1-focus-opensocial.googleusercontent.com +61.91.161.217 images2-focus-opensocial.googleusercontent.com +61.91.161.217 images3-focus-opensocial.googleusercontent.com +61.91.161.217 images4-focus-opensocial.googleusercontent.com +61.91.161.217 images5-focus-opensocial.googleusercontent.com +61.91.161.217 images6-focus-opensocial.googleusercontent.com +61.91.161.217 images7-focus-opensocial.googleusercontent.com +61.91.161.217 images8-focus-opensocial.googleusercontent.com +61.91.161.217 images9-focus-opensocial.googleusercontent.com +61.91.161.217 0-focus-opensocial.googleusercontent.com +61.91.161.217 1-focus-opensocial.googleusercontent.com +61.91.161.217 2-focus-opensocial.googleusercontent.com +61.91.161.217 3-focus-opensocial.googleusercontent.com +61.91.161.217 www-fusiontables-opensocial.googleusercontent.com +61.91.161.217 www-kix-opensocial.googleusercontent.com +61.91.161.217 www-onepick-opensocial.googleusercontent.com +61.91.161.217 images-onepick-opensocial.googleusercontent.com +61.91.161.217 www-open-opensocial.googleusercontent.com +61.91.161.217 0-open-opensocial.googleusercontent.com +61.91.161.217 1-open-opensocial.googleusercontent.com +61.91.161.217 2-open-opensocial.googleusercontent.com +61.91.161.217 3-open-opensocial.googleusercontent.com +61.91.161.217 www-oz-opensocial.googleusercontent.com +61.91.161.217 www-trixcopysheet-opensocial.googleusercontent.com +61.91.161.217 www-wave-opensocial.googleusercontent.com +61.91.161.217 wave-opensocial.googleusercontent.com +61.91.161.217 0-wave-opensocial.googleusercontent.com +61.91.161.217 1-wave-opensocial.googleusercontent.com +61.91.161.217 2-wave-opensocial.googleusercontent.com +61.91.161.217 3-wave-opensocial.googleusercontent.com +61.91.161.217 4-wave-opensocial.googleusercontent.com +61.91.161.217 5-wave-opensocial.googleusercontent.com +61.91.161.217 6-wave-opensocial.googleusercontent.com +61.91.161.217 7-wave-opensocial.googleusercontent.com +61.91.161.217 8-wave-opensocial.googleusercontent.com +61.91.161.217 9-wave-opensocial.googleusercontent.com +61.91.161.217 10-wave-opensocial.googleusercontent.com +61.91.161.217 11-wave-opensocial.googleusercontent.com +61.91.161.217 12-wave-opensocial.googleusercontent.com +61.91.161.217 13-wave-opensocial.googleusercontent.com +61.91.161.217 14-wave-opensocial.googleusercontent.com +61.91.161.217 15-wave-opensocial.googleusercontent.com +61.91.161.217 16-wave-opensocial.googleusercontent.com +61.91.161.217 17-wave-opensocial.googleusercontent.com +61.91.161.217 18-wave-opensocial.googleusercontent.com +61.91.161.217 19-wave-opensocial.googleusercontent.com +61.91.161.217 20-wave-opensocial.googleusercontent.com +61.91.161.217 21-wave-opensocial.googleusercontent.com +61.91.161.217 22-wave-opensocial.googleusercontent.com +61.91.161.217 23-wave-opensocial.googleusercontent.com +61.91.161.217 24-wave-opensocial.googleusercontent.com +61.91.161.217 25-wave-opensocial.googleusercontent.com +61.91.161.217 26-wave-opensocial.googleusercontent.com +61.91.161.217 27-wave-opensocial.googleusercontent.com +61.91.161.217 28-wave-opensocial.googleusercontent.com +61.91.161.217 29-wave-opensocial.googleusercontent.com +61.91.161.217 30-wave-opensocial.googleusercontent.com +61.91.161.217 31-wave-opensocial.googleusercontent.com +61.91.161.217 32-wave-opensocial.googleusercontent.com +61.91.161.217 33-wave-opensocial.googleusercontent.com +61.91.161.217 34-wave-opensocial.googleusercontent.com +61.91.161.217 35-wave-opensocial.googleusercontent.com +61.91.161.217 36-wave-opensocial.googleusercontent.com +61.91.161.217 37-wave-opensocial.googleusercontent.com +61.91.161.217 38-wave-opensocial.googleusercontent.com +61.91.161.217 39-wave-opensocial.googleusercontent.com +61.91.161.217 40-wave-opensocial.googleusercontent.com +# Googleusercontent End + +61.91.161.217 toolbox.googleapps.com +61.91.161.217 m.google.com +61.91.161.217 m.google.com.hk +61.91.161.217 m.google.com.tw +61.91.161.217 m.google.com.sg +61.91.161.217 mobile.google.com +61.91.161.217 mobile.l.google.com +216.58.196.236 proxy.googlezip.net +216.58.196.236 compress.googlezip.net +216.58.196.236 proxy-dev.googlezip.net +216.239.34.21 polymer-project.org +61.91.161.217 www.polymer-project.org +61.91.161.217 talkgadget.l.google.com +61.91.161.217 hangouts.google.com +61.91.161.217 hangout.google.com +61.91.161.217 0.talkgadget.google.com +61.91.161.217 chromoting-oauth.talkgadget.google.com +61.91.161.217 chromoting-host.talkgadget.google.com +61.91.161.217 chromoting-client.talkgadget.google.com +61.91.161.217 remoting-pa.googleapis.com +61.91.161.217 clientmetrics-pa.googleapis.com +61.91.161.217 contacts.google.com +61.91.161.217 youtube.com +61.91.161.217 www.youtube.com +61.91.161.217 au.youtube.com +61.91.161.217 ca.youtube.com +61.91.161.217 de.youtube.com +61.91.161.217 jp.youtube.com +61.91.161.217 ru.youtube.com +61.91.161.217 uk.youtube.com +61.91.161.217 tw.youtube.com +61.91.161.217 ads.youtube.com +61.91.161.217 www.youtube-nocookie.com +61.91.161.217 m.youtube.com +61.91.161.217 youtu.be +61.91.161.217 gdata.youtube.com +61.91.161.217 stage.gdata.youtube.com +61.91.161.217 s.youtube.com +61.91.161.217 accounts.youtube.com +61.91.161.217 img.youtube.com +61.91.161.217 help.youtube.com +61.91.161.217 upload.youtube.com +61.91.161.217 insight.youtube.com +61.91.161.217 apiblog.youtube.com +61.91.161.217 i.ytimg.com +61.91.161.217 i1.ytimg.com +61.91.161.217 i2.ytimg.com +61.91.161.217 i3.ytimg.com +61.91.161.217 i4.ytimg.com +61.91.161.217 i9.ytimg.com +61.91.161.217 s.ytimg.com +61.91.161.217 manifest.googlevideo.com +64.233.162.83 onetoday.google.com +64.233.162.83 notifications.google.com + +# Google:others Start +61.91.161.217 google.ad +61.91.161.217 google.ae +61.91.161.217 google.al +61.91.161.217 google.am +61.91.161.217 google.as +61.91.161.217 google.at +61.91.161.217 google.az +61.91.161.217 google.ba +61.91.161.217 google.be +61.91.161.217 google.bf +61.91.161.217 google.bg +61.91.161.217 google.bi +61.91.161.217 google.bj +61.91.161.217 google.bs +61.91.161.217 google.bt +61.91.161.217 google.by +61.91.161.217 google.ca +61.91.161.217 google.cat +61.91.161.217 google.cd +61.91.161.217 google.cf +61.91.161.217 google.cg +61.91.161.217 google.ch +61.91.161.217 google.ci +61.91.161.217 google.cl +61.91.161.217 google.cm +61.91.161.217 google.co.ao +61.91.161.217 google.co.bw +61.91.161.217 google.co.ck +61.91.161.217 google.co.cr +61.91.161.217 google.co.id +61.91.161.217 google.co.il +61.91.161.217 google.co.in +61.91.161.217 google.co.ke +61.91.161.217 google.co.kr +61.91.161.217 google.co.ls +61.91.161.217 google.co.ma +61.91.161.217 google.co.mz +61.91.161.217 google.co.nz +61.91.161.217 google.co.th +61.91.161.217 google.co.tz +61.91.161.217 google.co.ug +61.91.161.217 google.co.uk +61.91.161.217 google.co.uz +61.91.161.217 google.co.ve +61.91.161.217 google.co.vi +61.91.161.217 google.co.za +61.91.161.217 google.co.zm +61.91.161.217 google.co.zw +61.91.161.217 google.com.af +61.91.161.217 google.com.ag +61.91.161.217 google.com.ai +61.91.161.217 google.com.ar +61.91.161.217 google.com.au +61.91.161.217 google.com.bd +61.91.161.217 google.com.bh +61.91.161.217 google.com.bn +61.91.161.217 google.com.bo +61.91.161.217 google.com.br +61.91.161.217 google.com.bz +61.91.161.217 google.com.co +61.91.161.217 google.com.cu +61.91.161.217 google.com.cy +61.91.161.217 google.com.do +61.91.161.217 google.com.ec +61.91.161.217 google.com.eg +61.91.161.217 google.com.et +61.91.161.217 google.com.fj +61.91.161.217 google.com.gh +61.91.161.217 google.com.gi +61.91.161.217 google.com.gt +61.91.161.217 google.com.jm +61.91.161.217 google.com.kh +61.91.161.217 google.com.kw +61.91.161.217 google.com.lb +61.91.161.217 google.com.ly +61.91.161.217 google.com.mm +61.91.161.217 google.com.mt +61.91.161.217 google.com.mx +61.91.161.217 google.com.my +61.91.161.217 google.com.na +61.91.161.217 google.com.nf +61.91.161.217 google.com.ng +61.91.161.217 google.com.ni +61.91.161.217 google.com.np +61.91.161.217 google.com.om +61.91.161.217 google.com.pa +61.91.161.217 google.com.pe +61.91.161.217 google.com.pg +61.91.161.217 google.com.ph +61.91.161.217 google.com.pk +61.91.161.217 google.com.pr +61.91.161.217 google.com.py +61.91.161.217 google.com.qa +61.91.161.217 google.com.sa +61.91.161.217 google.com.sb +61.91.161.217 google.com.sl +61.91.161.217 google.com.sv +61.91.161.217 google.com.tj +61.91.161.217 google.com.tr +61.91.161.217 google.com.ua +61.91.161.217 google.com.uy +61.91.161.217 google.com.vc +61.91.161.217 google.com.vn +61.91.161.217 google.cv +61.91.161.217 google.cz +61.91.161.217 google.de +61.91.161.217 google.dj +61.91.161.217 google.dk +61.91.161.217 google.dm +61.91.161.217 google.dz +61.91.161.217 google.ee +61.91.161.217 google.es +61.91.161.217 google.fi +61.91.161.217 google.fm +61.91.161.217 google.fr +61.91.161.217 google.ga +61.91.161.217 google.ge +61.91.161.217 google.gg +61.91.161.217 google.gl +61.91.161.217 google.gm +61.91.161.217 google.gp +61.91.161.217 google.gr +61.91.161.217 google.gy +61.91.161.217 google.hn +61.91.161.217 google.hr +61.91.161.217 google.ht +61.91.161.217 google.hu +61.91.161.217 google.ie +61.91.161.217 google.im +61.91.161.217 google.iq +61.91.161.217 google.is +61.91.161.217 google.it +61.91.161.217 google.je +61.91.161.217 google.jo +61.91.161.217 google.kg +61.91.161.217 google.ki +61.91.161.217 google.kz +61.91.161.217 google.la +61.91.161.217 google.li +61.91.161.217 google.lk +61.91.161.217 google.lt +61.91.161.217 google.lu +61.91.161.217 google.lv +61.91.161.217 google.md +61.91.161.217 google.me +61.91.161.217 google.mg +61.91.161.217 google.mk +61.91.161.217 google.ml +61.91.161.217 google.mn +61.91.161.217 google.ms +61.91.161.217 google.mu +61.91.161.217 google.mv +61.91.161.217 google.mw +61.91.161.217 google.ne +61.91.161.217 google.nl +61.91.161.217 google.no +61.91.161.217 google.nr +61.91.161.217 google.nu +61.91.161.217 google.pl +61.91.161.217 google.pn +61.91.161.217 google.ps +61.91.161.217 google.pt +61.91.161.217 google.ro +61.91.161.217 google.rs +61.91.161.217 google.ru +61.91.161.217 google.rw +61.91.161.217 google.sc +61.91.161.217 google.se +61.91.161.217 google.sh +61.91.161.217 google.si +61.91.161.217 google.sk +61.91.161.217 google.sm +61.91.161.217 google.sn +61.91.161.217 google.so +61.91.161.217 google.st +61.91.161.217 google.td +61.91.161.217 google.tg +61.91.161.217 google.tk +61.91.161.217 google.tl +61.91.161.217 google.tm +61.91.161.217 google.tn +61.91.161.217 google.to +61.91.161.217 google.tt +61.91.161.217 google.vg +61.91.161.217 google.vu +61.91.161.217 google.ws +61.91.161.217 www.google.ad +61.91.161.217 www.google.ae +61.91.161.217 www.google.al +61.91.161.217 www.google.am +61.91.161.217 www.google.as +61.91.161.217 www.google.at +61.91.161.217 www.google.az +61.91.161.217 www.google.ba +61.91.161.217 www.google.be +61.91.161.217 www.google.bf +61.91.161.217 www.google.bg +61.91.161.217 www.google.bi +61.91.161.217 www.google.bj +61.91.161.217 www.google.bs +61.91.161.217 www.google.bt +61.91.161.217 www.google.by +61.91.161.217 www.google.ca +61.91.161.217 www.google.cat +61.91.161.217 www.google.cd +61.91.161.217 www.google.cf +61.91.161.217 www.google.cg +61.91.161.217 www.google.ch +61.91.161.217 www.google.ci +61.91.161.217 www.google.cl +61.91.161.217 www.google.cm +61.91.161.217 www.google.co.ao +61.91.161.217 www.google.co.bw +61.91.161.217 www.google.co.ck +61.91.161.217 www.google.co.cr +61.91.161.217 www.google.co.id +61.91.161.217 www.google.co.il +61.91.161.217 www.google.co.in +61.91.161.217 www.google.co.ke +61.91.161.217 www.google.co.kr +61.91.161.217 www.google.co.ls +61.91.161.217 www.google.co.ma +61.91.161.217 www.google.co.mz +61.91.161.217 www.google.co.nz +61.91.161.217 www.google.co.th +61.91.161.217 www.google.co.tz +61.91.161.217 www.google.co.ug +61.91.161.217 www.google.co.uk +61.91.161.217 www.google.co.uz +61.91.161.217 www.google.co.ve +61.91.161.217 www.google.co.vi +61.91.161.217 www.google.co.za +61.91.161.217 www.google.co.zm +61.91.161.217 www.google.co.zw +61.91.161.217 www.google.com.af +61.91.161.217 www.google.com.ag +61.91.161.217 www.google.com.ai +61.91.161.217 www.google.com.ar +61.91.161.217 www.google.com.au +61.91.161.217 www.google.com.bd +61.91.161.217 www.google.com.bh +61.91.161.217 www.google.com.bn +61.91.161.217 www.google.com.bo +61.91.161.217 www.google.com.br +61.91.161.217 www.google.com.bz +61.91.161.217 www.google.com.co +61.91.161.217 www.google.com.cu +61.91.161.217 www.google.com.cy +61.91.161.217 www.google.com.do +61.91.161.217 www.google.com.ec +61.91.161.217 www.google.com.eg +61.91.161.217 www.google.com.et +61.91.161.217 www.google.com.fj +61.91.161.217 www.google.com.gh +61.91.161.217 www.google.com.gi +61.91.161.217 www.google.com.gr +61.91.161.217 www.google.com.gt +61.91.161.217 www.google.com.jm +61.91.161.217 www.google.com.kh +61.91.161.217 www.google.com.kw +61.91.161.217 www.google.com.lb +61.91.161.217 www.google.com.ly +61.91.161.217 www.google.com.mm +61.91.161.217 www.google.com.mt +61.91.161.217 www.google.com.mx +61.91.161.217 www.google.com.my +61.91.161.217 www.google.com.na +61.91.161.217 www.google.com.nf +61.91.161.217 www.google.com.ng +61.91.161.217 www.google.com.ni +61.91.161.217 www.google.com.np +61.91.161.217 www.google.com.om +61.91.161.217 www.google.com.pa +61.91.161.217 www.google.com.pe +61.91.161.217 www.google.com.pg +61.91.161.217 www.google.com.ph +61.91.161.217 www.google.com.pk +61.91.161.217 www.google.com.pr +61.91.161.217 www.google.com.py +61.91.161.217 www.google.com.qa +61.91.161.217 www.google.com.ru +61.91.161.217 www.google.com.sa +61.91.161.217 www.google.com.sb +61.91.161.217 www.google.com.sl +61.91.161.217 www.google.com.sv +61.91.161.217 www.google.com.tj +61.91.161.217 www.google.com.tr +61.91.161.217 www.google.com.ua +61.91.161.217 www.google.com.uy +61.91.161.217 www.google.com.vc +61.91.161.217 www.google.com.vn +61.91.161.217 www.google.cv +61.91.161.217 www.google.cz +61.91.161.217 www.google.de +61.91.161.217 www.google.dj +61.91.161.217 www.google.dk +61.91.161.217 www.google.dm +61.91.161.217 www.google.dz +61.91.161.217 www.google.ee +61.91.161.217 www.google.es +61.91.161.217 www.google.fi +61.91.161.217 www.google.fm +61.91.161.217 www.google.fr +61.91.161.217 www.google.ga +61.91.161.217 www.google.ge +61.91.161.217 www.google.gg +61.91.161.217 www.google.gl +61.91.161.217 www.google.gm +61.91.161.217 www.google.gp +61.91.161.217 www.google.gr +61.91.161.217 www.google.gy +61.91.161.217 www.google.hn +61.91.161.217 www.google.hr +61.91.161.217 www.google.ht +61.91.161.217 www.google.hu +61.91.161.217 www.google.ie +61.91.161.217 www.google.im +61.91.161.217 www.google.iq +61.91.161.217 www.google.is +61.91.161.217 www.google.it +61.91.161.217 www.google.je +61.91.161.217 www.google.jo +61.91.161.217 www.google.kg +61.91.161.217 www.google.ki +61.91.161.217 www.google.kz +61.91.161.217 www.google.la +61.91.161.217 www.google.li +61.91.161.217 www.google.lk +61.91.161.217 www.google.lt +61.91.161.217 www.google.lu +61.91.161.217 www.google.lv +61.91.161.217 www.google.md +61.91.161.217 www.google.me +61.91.161.217 www.google.mg +61.91.161.217 www.google.mk +61.91.161.217 www.google.ml +61.91.161.217 www.google.mn +61.91.161.217 www.google.ms +61.91.161.217 www.google.mu +61.91.161.217 www.google.mv +61.91.161.217 www.google.mw +61.91.161.217 www.google.ne +61.91.161.217 www.google.nl +61.91.161.217 www.google.no +61.91.161.217 www.google.nr +61.91.161.217 www.google.nu +61.91.161.217 www.google.pl +61.91.161.217 www.google.pn +61.91.161.217 www.google.ps +61.91.161.217 www.google.pt +61.91.161.217 www.google.ro +61.91.161.217 www.google.rs +61.91.161.217 www.google.ru +61.91.161.217 www.google.rw +61.91.161.217 www.google.sc +61.91.161.217 www.google.se +61.91.161.217 www.google.sh +61.91.161.217 www.google.si +61.91.161.217 www.google.sk +61.91.161.217 www.google.sm +61.91.161.217 www.google.sn +61.91.161.217 www.google.so +61.91.161.217 www.google.st +61.91.161.217 www.google.td +61.91.161.217 www.google.tg +61.91.161.217 www.google.tk +61.91.161.217 www.google.tl +61.91.161.217 www.google.tm +61.91.161.217 www.google.tn +61.91.161.217 www.google.to +61.91.161.217 www.google.tt +61.91.161.217 www.google.vg +61.91.161.217 www.google.vu +61.91.161.217 www.google.ws +61.91.161.217 foobar.withgoogle.com +61.91.161.217 interstellar.withgoogle.com +61.91.161.217 edudirectory.withgoogle.com +61.91.161.217 atmosphere.withgoogle.com +61.91.161.217 accelerate.withgoogle.com +61.91.161.217 insgruene.withgoogle.com +61.91.161.217 atmospheretokyo.withgoogle.com +61.91.161.217 connectedclassrooms.withgoogle.com +61.91.161.217 smartypins.withgoogle.com +61.91.161.217 streetart.withgoogle.com +61.91.161.217 cardboard.withgoogle.com +61.91.161.217 kickwithchrome.withgoogle.com +61.91.161.217 candidatos.withgoogle.com +61.91.161.217 trendstw.withgoogle.com +61.91.161.217 impactchallenge.withgoogle.com +61.91.161.217 virustotalcloud.appspot.com +61.91.161.217 eduproducts.withgoogle.com +61.91.161.217 certificate-transparency.org +61.91.161.217 www.certificate-transparency.org +61.91.161.217 abc.xyz +64.233.191.121 www.androidexperiments.com +64.233.191.121 androidexperiments.com +64.233.188.121 www.tensorflow.org +# Google:others End + +# Gmail SMTP/POP/IMAP Start +64.233.188.14 gmr-smtp-in.l.google.com +64.233.188.16 googlemail-imap.l.google.com +64.233.188.16 googlemail-smtp.l.google.com +64.233.188.16 googlemail-pop.l.google.com +64.233.188.16 pop.googlemail.com +64.233.188.16 imap.googlemail.com +64.233.188.16 smtp.googlemail.com +64.233.188.27 gmail-smtp-in.l.google.com +64.233.188.109 gmail-imap.l.google.com +64.233.188.109 gmail-pop.l.google.com +64.233.188.109 gmail-smtp.l.google.com +64.233.188.109 imap.gmail.com +64.233.188.109 smtp.gmail.com +64.233.188.109 pop.gmail.com +64.233.188.109 gmail-smtp-msa.l.google.com +# Gmail SMTP/POP/IMAP End + +# Google:stun Server Start +64.233.177.127 stun.l.google.com +64.233.177.127 alt1.stun.l.google.com +64.233.177.127 alt2.stun.l.google.com +64.233.177.127 alt3.stun.l.google.com +64.233.177.127 alt4.stun.l.google.com +64.233.177.127 alt5.stun.l.google.com +# Google:stun Server End + +# Google:Gtalk Start +64.233.188.125 talk.google.com +64.233.188.125 talk.l.google.com +64.233.188.125 talkx.l.google.com +64.233.188.125 alt1.talk.l.google.com +# Google:Gtalk End + +# Google:ghs Start +64.233.188.121 ghs.google.com +64.233.188.121 ghs46.google.com +64.233.188.121 ghs.l.google.com +64.233.188.121 ghs46.l.google.com +64.233.188.121 www.nianticlabs.com +64.233.188.121 gsamplemaps.googlepages.com +64.233.188.121 javascript-blocker.toggleable.com +64.233.188.121 goto.ext.google.com +64.233.188.121 webrtc.org +64.233.188.121 www.webrtc.org +64.233.188.121 chromeexperiments.com +64.233.188.121 www.chromeexperiments.com +64.233.188.121 vr.chromeexperiments.com +64.233.188.121 globe.chromeexperiments.com +64.233.188.121 workshop.chromeexperiments.com +64.233.188.121 www.gwtproject.org +64.233.188.121 www.html5rocks.com +64.233.188.121 slides.html5rocks.com +64.233.188.121 playground.html5rocks.com +64.233.188.121 studio.html5rocks.com +64.233.188.121 lists.webmproject.org +64.233.188.121 www.waveprotocol.org +64.233.188.121 www.20thingsilearned.com +64.233.188.121 www.creativelab5.com +64.233.188.121 blog.webmproject.org +64.233.188.121 www.agoogleaday.com +64.233.188.121 www.gosetsuden.jp +64.233.188.121 www.thegooglepuzzle.com +64.233.188.121 www.thegobridgeoglepuzzle.com +64.233.188.121 www.googlezeitgeist.com +64.233.188.121 news.dartlang.org +64.233.188.121 dartpad.dartlang.org +# Google:ghs End + +# Google:gcm Start +64.233.188.188 mobile-gtalk.l.google.com +64.233.188.188 mtalk.google.com +64.233.188.188 gcm.googleapis.com +64.233.188.188 gcm.l.google.com +64.233.188.188 gcm-xmpp.googleapis.com +64.233.188.188 gcm-preprod.l.google.com +64.233.188.188 gcm-preprod.googleapis.com +# Google:gcm End + +# Goole:duo Start +61.91.161.217 instantmessaging-pa.googleapis.com +# Goole:duo End + +# Google:A-GPS Start +64.233.171.192 supl.google.com +# Google:A-GPS End + +# Google:Made the code for girls Start +216.239.38.21 madewithcode.com +216.239.38.21 www.madewithcode.com +# Google:Made the code for girls End +# Google End + +# HumbleBundle Start +5.153.35.171 humble.pubnub.com +198.41.186.33 humblebundle.com +203.69.81.33 humblebundle-a.akamaihd.net +52.36.140.12 pubnub.com +74.125.34.32 www.humblebundle.com +# HumbleBundle End + +# imgur Start +103.245.224.193 imgur.com +103.245.224.193 www.imgur.com +103.245.224.193 i.imgur.com +103.245.224.193 s.imgur.com +# imgur End + +# Instagram Start +31.13.70.52 instagram.com +31.13.70.52 www.instagram.com +31.13.70.52 i.instagram.com +31.13.70.52 api.instagram.com +31.13.70.52 help.instagram.com +31.13.70.52 blog.instagram.com +74.117.178.40 graph.instagram.com +31.13.70.52 logger.instagram.com +31.13.70.52 badges.instagram.com +31.13.95.48 platform.instagram.com +31.13.70.52 maps.instagram.com +31.13.70.52 scontent.cdninstagram.com +31.13.70.52 scontent-a.cdninstagram.com +31.13.70.52 scontent-b.cdninstagram.com +184.51.15.142 igcdn-photos-a-a.akamaihd.net +184.51.15.142 igcdn-photos-b-a.akamaihd.net +184.51.15.142 igcdn-photos-c-a.akamaihd.net +184.51.15.142 igcdn-photos-d-a.akamaihd.net +184.51.15.142 igcdn-photos-e-a.akamaihd.net +184.51.15.142 igcdn-photos-f-a.akamaihd.net +184.51.15.142 igcdn-photos-g-a.akamaihd.net +184.51.15.142 igcdn-photos-h-a.akamaihd.net +184.51.15.142 igcdn-videos-a-0-a.akamaihd.net +184.51.15.142 igcdn-videos-a-1-a.akamaihd.net +184.51.15.142 igcdn-videos-a-2-a.akamaihd.net +184.51.15.142 igcdn-videos-a-3-a.akamaihd.net +184.51.15.142 igcdn-videos-a-4-a.akamaihd.net +184.51.15.142 igcdn-videos-a-5-a.akamaihd.net +184.51.15.142 igcdn-videos-a-6-a.akamaihd.net +184.51.15.142 igcdn-videos-a-7-a.akamaihd.net +184.51.15.142 igcdn-videos-a-8-a.akamaihd.net +184.51.15.142 igcdn-videos-a-9-a.akamaihd.net +184.51.15.142 igcdn-videos-a-10-a.akamaihd.net +184.51.15.142 igcdn-videos-a-11-a.akamaihd.net +184.51.15.142 igcdn-videos-a-12-a.akamaihd.net +184.51.15.142 igcdn-videos-a-13-a.akamaihd.net +184.51.15.142 igcdn-videos-a-14-a.akamaihd.net +184.51.15.142 igcdn-videos-a-15-a.akamaihd.net +184.51.15.142 igcdn-videos-a-16-a.akamaihd.net +184.51.15.142 igcdn-videos-a-17-a.akamaihd.net +184.51.15.142 igcdn-videos-a-18-a.akamaihd.net +184.51.15.142 igcdn-videos-a-19-a.akamaihd.net +184.51.15.142 igcdn-videos-b-0-a.akamaihd.net +184.51.15.142 igcdn-videos-b-1-a.akamaihd.net +184.51.15.142 igcdn-videos-b-2-a.akamaihd.net +184.51.15.142 igcdn-videos-b-3-a.akamaihd.net +184.51.15.142 igcdn-videos-b-4-a.akamaihd.net +184.51.15.142 igcdn-videos-b-5-a.akamaihd.net +184.51.15.142 igcdn-videos-b-6-a.akamaihd.net +184.51.15.142 igcdn-videos-b-7-a.akamaihd.net +184.51.15.142 igcdn-videos-b-8-a.akamaihd.net +184.51.15.142 igcdn-videos-b-9-a.akamaihd.net +184.51.15.142 igcdn-videos-b-10-a.akamaihd.net +184.51.15.142 igcdn-videos-b-11-a.akamaihd.net +184.51.15.142 igcdn-videos-b-12-a.akamaihd.net +184.51.15.142 igcdn-videos-b-13-a.akamaihd.net +184.51.15.142 igcdn-videos-b-14-a.akamaihd.net +184.51.15.142 igcdn-videos-b-15-a.akamaihd.net +184.51.15.142 igcdn-videos-b-16-a.akamaihd.net +184.51.15.142 igcdn-videos-b-17-a.akamaihd.net +184.51.15.142 igcdn-videos-b-18-a.akamaihd.net +184.51.15.142 igcdn-videos-b-19-a.akamaihd.net +184.51.15.142 igcdn-videos-c-0-a.akamaihd.net +184.51.15.142 igcdn-videos-c-1-a.akamaihd.net +184.51.15.142 igcdn-videos-c-2-a.akamaihd.net +184.51.15.142 igcdn-videos-c-3-a.akamaihd.net +184.51.15.142 igcdn-videos-c-4-a.akamaihd.net +184.51.15.142 igcdn-videos-c-5-a.akamaihd.net +184.51.15.142 igcdn-videos-c-6-a.akamaihd.net +184.51.15.142 igcdn-videos-c-7-a.akamaihd.net +184.51.15.142 igcdn-videos-c-8-a.akamaihd.net +184.51.15.142 igcdn-videos-c-9-a.akamaihd.net +184.51.15.142 igcdn-videos-c-10-a.akamaihd.net +184.51.15.142 igcdn-videos-c-11-a.akamaihd.net +184.51.15.142 igcdn-videos-c-12-a.akamaihd.net +184.51.15.142 igcdn-videos-c-13-a.akamaihd.net +184.51.15.142 igcdn-videos-c-14-a.akamaihd.net +184.51.15.142 igcdn-videos-c-15-a.akamaihd.net +184.51.15.142 igcdn-videos-c-16-a.akamaihd.net +184.51.15.142 igcdn-videos-c-17-a.akamaihd.net +184.51.15.142 igcdn-videos-c-18-a.akamaihd.net +184.51.15.142 igcdn-videos-c-19-a.akamaihd.net +184.51.15.142 igcdn-videos-d-0-a.akamaihd.net +184.51.15.142 igcdn-videos-d-1-a.akamaihd.net +184.51.15.142 igcdn-videos-d-2-a.akamaihd.net +184.51.15.142 igcdn-videos-d-3-a.akamaihd.net +184.51.15.142 igcdn-videos-d-4-a.akamaihd.net +184.51.15.142 igcdn-videos-d-5-a.akamaihd.net +184.51.15.142 igcdn-videos-d-6-a.akamaihd.net +184.51.15.142 igcdn-videos-d-7-a.akamaihd.net +184.51.15.142 igcdn-videos-d-8-a.akamaihd.net +184.51.15.142 igcdn-videos-d-9-a.akamaihd.net +184.51.15.142 igcdn-videos-d-10-a.akamaihd.net +184.51.15.142 igcdn-videos-d-11-a.akamaihd.net +184.51.15.142 igcdn-videos-d-12-a.akamaihd.net +184.51.15.142 igcdn-videos-d-13-a.akamaihd.net +184.51.15.142 igcdn-videos-d-14-a.akamaihd.net +184.51.15.142 igcdn-videos-d-15-a.akamaihd.net +184.51.15.142 igcdn-videos-d-16-a.akamaihd.net +184.51.15.142 igcdn-videos-d-17-a.akamaihd.net +184.51.15.142 igcdn-videos-d-18-a.akamaihd.net +184.51.15.142 igcdn-videos-d-19-a.akamaihd.net +184.51.15.142 igcdn-videos-e-0-a.akamaihd.net +184.51.15.142 igcdn-videos-e-1-a.akamaihd.net +184.51.15.142 igcdn-videos-e-2-a.akamaihd.net +184.51.15.142 igcdn-videos-e-3-a.akamaihd.net +184.51.15.142 igcdn-videos-e-4-a.akamaihd.net +184.51.15.142 igcdn-videos-e-5-a.akamaihd.net +184.51.15.142 igcdn-videos-e-6-a.akamaihd.net +184.51.15.142 igcdn-videos-e-7-a.akamaihd.net +184.51.15.142 igcdn-videos-e-8-a.akamaihd.net +184.51.15.142 igcdn-videos-e-9-a.akamaihd.net +184.51.15.142 igcdn-videos-e-10-a.akamaihd.net +184.51.15.142 igcdn-videos-e-11-a.akamaihd.net +184.51.15.142 igcdn-videos-e-12-a.akamaihd.net +184.51.15.142 igcdn-videos-e-13-a.akamaihd.net +184.51.15.142 igcdn-videos-e-14-a.akamaihd.net +184.51.15.142 igcdn-videos-e-15-a.akamaihd.net +184.51.15.142 igcdn-videos-e-16-a.akamaihd.net +184.51.15.142 igcdn-videos-e-17-a.akamaihd.net +184.51.15.142 igcdn-videos-e-18-a.akamaihd.net +184.51.15.142 igcdn-videos-e-19-a.akamaihd.net +184.51.15.142 igcdn-videos-f-0-a.akamaihd.net +184.51.15.142 igcdn-videos-f-1-a.akamaihd.net +184.51.15.142 igcdn-videos-f-2-a.akamaihd.net +184.51.15.142 igcdn-videos-f-3-a.akamaihd.net +184.51.15.142 igcdn-videos-f-4-a.akamaihd.net +184.51.15.142 igcdn-videos-f-5-a.akamaihd.net +184.51.15.142 igcdn-videos-f-6-a.akamaihd.net +184.51.15.142 igcdn-videos-f-7-a.akamaihd.net +184.51.15.142 igcdn-videos-f-8-a.akamaihd.net +184.51.15.142 igcdn-videos-f-9-a.akamaihd.net +184.51.15.142 igcdn-videos-f-10-a.akamaihd.net +184.51.15.142 igcdn-videos-f-11-a.akamaihd.net +184.51.15.142 igcdn-videos-f-12-a.akamaihd.net +184.51.15.142 igcdn-videos-f-13-a.akamaihd.net +184.51.15.142 igcdn-videos-f-14-a.akamaihd.net +184.51.15.142 igcdn-videos-f-15-a.akamaihd.net +184.51.15.142 igcdn-videos-f-16-a.akamaihd.net +184.51.15.142 igcdn-videos-f-17-a.akamaihd.net +184.51.15.142 igcdn-videos-f-18-a.akamaihd.net +184.51.15.142 igcdn-videos-f-19-a.akamaihd.net +184.51.15.142 igcdn-videos-g-0-a.akamaihd.net +184.51.15.142 igcdn-videos-g-1-a.akamaihd.net +184.51.15.142 igcdn-videos-g-2-a.akamaihd.net +184.51.15.142 igcdn-videos-g-3-a.akamaihd.net +184.51.15.142 igcdn-videos-g-4-a.akamaihd.net +184.51.15.142 igcdn-videos-g-5-a.akamaihd.net +184.51.15.142 igcdn-videos-g-6-a.akamaihd.net +184.51.15.142 igcdn-videos-g-7-a.akamaihd.net +184.51.15.142 igcdn-videos-g-8-a.akamaihd.net +184.51.15.142 igcdn-videos-g-9-a.akamaihd.net +184.51.15.142 igcdn-videos-g-10-a.akamaihd.net +184.51.15.142 igcdn-videos-g-11-a.akamaihd.net +184.51.15.142 igcdn-videos-g-12-a.akamaihd.net +184.51.15.142 igcdn-videos-g-13-a.akamaihd.net +184.51.15.142 igcdn-videos-g-14-a.akamaihd.net +184.51.15.142 igcdn-videos-g-15-a.akamaihd.net +184.51.15.142 igcdn-videos-g-16-a.akamaihd.net +184.51.15.142 igcdn-videos-g-17-a.akamaihd.net +184.51.15.142 igcdn-videos-g-18-a.akamaihd.net +184.51.15.142 igcdn-videos-g-19-a.akamaihd.net +184.51.15.142 igcdn-videos-h-0-a.akamaihd.net +184.51.15.142 igcdn-videos-h-1-a.akamaihd.net +184.51.15.142 igcdn-videos-h-2-a.akamaihd.net +184.51.15.142 igcdn-videos-h-3-a.akamaihd.net +184.51.15.142 igcdn-videos-h-4-a.akamaihd.net +184.51.15.142 igcdn-videos-h-5-a.akamaihd.net +184.51.15.142 igcdn-videos-h-6-a.akamaihd.net +184.51.15.142 igcdn-videos-h-7-a.akamaihd.net +184.51.15.142 igcdn-videos-h-8-a.akamaihd.net +184.51.15.142 igcdn-videos-h-9-a.akamaihd.net +184.51.15.142 igcdn-videos-h-10-a.akamaihd.net +184.51.15.142 igcdn-videos-h-11-a.akamaihd.net +184.51.15.142 igcdn-videos-h-12-a.akamaihd.net +184.51.15.142 igcdn-videos-h-13-a.akamaihd.net +184.51.15.142 igcdn-videos-h-14-a.akamaihd.net +184.51.15.142 igcdn-videos-h-15-a.akamaihd.net +184.51.15.142 igcdn-videos-h-16-a.akamaihd.net +184.51.15.142 igcdn-videos-h-17-a.akamaihd.net +184.51.15.142 igcdn-videos-h-18-a.akamaihd.net +184.51.15.142 igcdn-videos-h-19-a.akamaihd.net +184.51.15.142 instagramimages-a.akamaihd.net +184.51.15.142 instagramstatic-a.akamaihd.net +184.51.15.142 images.ak.instagram.com +184.51.15.142 static.ak.instagram.com +# Instagram End + +# issuu Start +52.72.26.162 issuu.com +52.72.26.162 www.issuu.com +52.72.26.162 blog.issuu.com +52.72.26.162 developers.issuu.com +52.72.26.162 pingback.issuu.com +52.72.26.162 photo.issuu.com +52.72.26.162 page.issuu.com +52.72.26.162 image.issuu.com +52.72.26.162 api.issuu.com +52.72.26.162 content.issuu.com +52.72.26.162 static.issuu.com +52.72.26.162 skin.issuu.com +52.72.26.162 help.issuu.com +# issuu End + +# Logmein Start +74.201.74.193 secure.logmein.com +# Logmein End + +# Medium start +104.16.120.127 medium.com +104.16.120.145 cdn-static-1.medium.com +104.16.120.145 cdn-images-1.medium.com +103.245.222.101 cdn-images-2.medium.com +# Medium end + +# MEGA Start +31.216.147.135 eu.api.mega.co.nz +154.53.224.130 eu.static.mega.co.nz +117.18.237.188 g.cdn1.mega.co.nz +154.53.224.150 mega.co.nz +154.53.224.166 mega.nz +31.216.147.130 w.api.mega.co.nz +# MEGA End + +# nytimes for mobile Start +170.149.159.135 nytimes.com +52.84.219.212 cn.nytimes.com +52.84.219.212 m.cn.nytimes.com +184.84.127.110 www.nytimes.com +184.84.127.110 graphics8.nytimes.com +184.84.127.110 json8.nytimes.com +184.84.127.110 typeface.nytimes.com +184.84.127.110 typeface.nyt.com +184.84.127.110 a1.nyt.com +184.84.127.110 s1.nyt.com +184.84.127.110 i1.nyt.com +184.84.127.110 static01.nyt.com +184.84.127.110 static02.nyt.com +184.84.127.110 static03.nyt.com +184.84.127.110 static04.nyt.com +184.84.127.110 static05.nyt.com +184.84.127.110 static06.nyt.com +184.84.127.110 static07.nyt.com +184.84.127.110 static08.nyt.com +184.84.127.110 static09.nyt.com +184.84.127.110 js.nyt.com +184.84.127.110 css.nyt.com +184.84.127.110 int.nyt.com +# nytimes for mobile End + +# OneDrive Start +204.79.197.217 onedrive.live.com +134.170.104.24 skyapi.onedrive.live.com +# OneDrive End + +# Smartdnsproxy start +103.28.248.96 www.smartdnsproxy.com +184.72.50.35 support.smartdnsproxy.com +# Smartdnsproxy end + +# SoundCloud Start +72.21.91.127 soundcloud.com +72.21.91.127 www.soundcloud.com +72.21.91.127 m.soundcloud.com +72.21.91.127 api.soundcloud.com +72.21.91.127 api-mobile.soundcloud.com +72.21.91.127 api-v2.soundcloud.com +45.33.14.185 blog.soundcloud.com +72.21.81.167 ec-media.soundcloud.com +68.232.32.220 ec-rtmp-media.soundcloud.com +72.21.91.127 on.soundcloud.com +72.21.91.127 promoted.soundcloud.com +72.21.91.127 visuals.soundcloud.com +72.21.91.96 a1.sndcdn.com +72.21.91.96 a-v2.sndcdn.com +54.230.233.111 cf-media.sndcdn.com +72.21.81.77 ec-media.sndcdn.com +72.21.91.96 ec-preview-media.sndcdn.com +72.21.91.96 style.sndcdn.com +72.21.91.96 va.sndcdn.com +# SoundCloud End + +# Startpage & Ixquick Start +43.249.39.38 startpage.com +43.249.39.38 www.startpage.com +43.249.39.49 www.ixquick.com +43.249.39.49 ixquick.com +37.0.89.56 support.startpage.com +37.0.89.57 support.ixquick.com +# Startpage & Ixquick End + +# telegram start +# As an alternative, you can use: +# https://telegram.ustclug.org +# +149.154.167.99 telegram.org +149.154.167.99 desktop.telegram.org +149.154.167.99 core.telegram.org +149.154.167.99 macos.telegram.org +149.154.167.120 web.telegram.org +# telegram end + +# Travis CI Start +151.101.76.249 travis-ci-org.global.ssl.fastly.net +# Travis CI End + +# Tumblr Start +66.6.33.193 tumblr.com +66.6.32.4 tumblr.co +66.6.32.4 api.tumblr.com +66.6.32.4 www.tumblr.com +66.6.32.22 cynicallys.tumblr.com +66.6.32.22 mx.tumblr.com +54.230.74.143 vt.tumblr.com +216.115.100.126 vtt.tumblr.com +66.6.32.162 ls.srvcs.tumblr.com +66.6.32.162 px.srvcs.tumblr.com +119.160.254.197 assets.tumblr.com +119.160.254.215 secure.assets.tumblr.com +54.182.6.6 secure.static.tumblr.com +66.6.44.4 media.tumblr.com +216.115.100.125 24.media.tumblr.com +192.229.237.98 30.media.tumblr.com +216.115.100.126 31.media.tumblr.com +52.85.155.236 32.media.tumblr.com +216.115.100.126 33.media.tumblr.com +54.230.158.13 36.media.tumblr.com +216.115.100.126 37.media.tumblr.com +216.115.100.126 38.media.tumblr.com +209.197.3.20 39.media.tumblr.com +192.229.237.98 40.media.tumblr.com +209.197.3.20 41.media.tumblr.com +192.229.237.185 42.media.tumblr.com +209.197.3.20 43.media.tumblr.com +192.229.237.98 44.media.tumblr.com +209.197.3.20 45.media.tumblr.com +192.229.237.98 46.media.tumblr.com +54.192.234.133 47.media.tumblr.com +209.197.3.20 48.media.tumblr.com +192.229.237.98 49.media.tumblr.com +54.192.234.244 50.media.tumblr.com +54.230.142.156 65.media.tumblr.com +192.229.237.98 66.media.tumblr.com +209.197.3.20 67.media.tumblr.com +216.115.100.126 68.media.tumblr.com +216.115.100.125 90.media.tumblr.com +128.127.159.1 94.media.tumblr.com +23.2.16.8 95.media.tumblr.com +52.85.155.236 96.media.tumblr.com +192.229.237.98 97.media.tumblr.com +151.101.76.249 98.media.tumblr.com +209.197.3.20 99.media.tumblr.com +# Tumblr End + +# Twitter Start +202.171.253.111 twitter.com +202.171.253.111 www.twitter.com +185.45.5.36 t.co +202.171.253.111 api.twitter.com +202.171.253.111 mobile.twitter.com +202.171.253.111 support.twitter.com +202.171.253.111 upload.twitter.com +202.171.253.111 tweetdeck.twitter.com +202.171.253.111 syndication.twitter.com +202.171.253.111 platform.twitter.com +202.171.253.111 about.twitter.com +202.171.253.111 blog.twitter.com +202.171.253.111 betastream.twitter.com +202.171.253.111 dev.twitter.com +202.171.253.111 pic.twitter.com +202.171.253.111 search.twitter.com +202.171.253.111 status.twitter.com +202.171.253.111 assets0.twitter.com +202.171.253.111 assets1.twitter.com +202.171.253.111 assets2.twitter.com +202.171.253.111 assets3.twitter.com +202.171.253.111 assets4.twitter.com +202.171.253.111 static.twitter.com +202.171.253.111 help.twitter.com +202.171.253.111 ton.twitter.com +202.171.253.111 s.twitter.com +202.171.253.111 analytics.twitter.com +202.171.253.111 urls-real.api.twitter.com +202.171.253.111 userstream.twitter.com +202.171.253.111 sitestream.twitter.com +202.171.253.111 stream.twitter.com +202.171.253.111 tdweb.twitter.com +173.236.110.98 twitpic.com +173.236.110.98 m1.twitpic.com +173.236.110.98 web1.twitpic.com +173.236.110.98 web10.twitpic.com +173.236.110.98 web2.twitpic.com +173.236.110.98 web3.twitpic.com +173.236.110.98 web4.twitpic.com +173.236.110.98 web5.twitpic.com +173.236.110.98 web6.twitpic.com +173.236.110.98 web7.twitpic.com +173.236.110.98 web8.twitpic.com +173.236.110.98 web9.twitpic.com +199.96.57.3 a0.twimg.com +199.96.57.3 a1.twimg.com +199.96.57.3 a2.twimg.com +199.96.57.3 a3.twimg.com +199.96.57.3 a4.twimg.com +199.96.57.3 a5.twimg.com +199.96.57.3 video.twimg.com +199.96.57.3 abs.twimg.com +199.96.57.3 g.twimg.com +199.96.57.3 o.twimg.com +199.96.57.3 p.twimg.com +199.96.57.3 r.twimg.com +199.96.57.3 ma.twimg.com +199.96.57.3 pbs.twimg.com +199.96.57.3 ton.twimg.com +199.96.57.3 syndication.twimg.com +199.96.57.3 syndication-o.twimg.com +199.96.57.3 image-proxy-origin.twimg.com +104.244.42.132 tweetdeck.com +104.244.42.132 api.tweetdeck.com +104.244.42.132 web.tweetdeck.com +104.244.42.132 www.tweetdeck.com +104.244.42.132 downloads.tweetdeck.com +202.171.253.111 cdn.syndication.twimg.com +202.171.253.111 cdn.syndication.twitter.com +202.171.253.111 apps.twitter.com +202.171.253.111 debates.twitter.com +# Twitter End + +# Vimeo Start +104.156.85.217 vimeo.com +104.156.85.217 www.vimeo.com +104.156.85.217 player.vimeo.com +103.245.224.143 i.vimeocdn.com +103.245.224.143 f.vimeocdn.com +103.245.222.249 vimeo-hp-videos.global.ssl.fastly.net +198.245.92.39 click.email.vimeo.com +# Vimeo End + +# W3schools Start +66.29.212.110 w3schools.com +68.232.44.251 www.w3schools.com +# W3schools End + +# Wikipedia Start +91.198.174.192 wuu.wikipedia.org +91.198.174.192 zh-yue.wikipedia.org +91.198.174.192 zh.wikipedia.org +91.198.174.192 zh.m.wikipedia.org +# Wikipedia End + +# WordPress Start +192.0.73.2 www.gravatar.com +192.0.73.2 0.gravatar.com +192.0.73.2 1.gravatar.com +192.0.73.2 2.gravatar.com +192.0.73.2 lb.gravatar.com +192.0.73.2 secure.gravatar.com +192.0.80.241 s.gravatar.com +192.0.80.239 en.gravatar.com +#192.0.80.240 en.gravatar.com +192.0.81.250 botd2.wordpress.com +66.155.9.238 dashboard.wordpress.com +66.155.9.238 en.blog.wordpress.com +66.155.9.238 en.forums.wordpress.com +66.155.9.238 forums.wordpress.com +192.0.77.2 i0.wp.com +192.0.77.2 i1.wp.com +192.0.77.2 i2.wp.com +66.155.9.238 lb.wordpress.com +66.155.9.238 lucifr.wordpress.com +192.0.81.250 r-login.wordpress.com +192.229.144.127 s.w.org +68.232.44.111 s.wordpress.com +68.232.44.111 s.wordpress.org +68.232.44.111 s0.wp.com +68.232.44.111 s1.wordpress.com +68.232.44.111 s1.wp.com +68.232.44.111 s2.wordpress.com +68.232.44.111 s2.wp.com +68.232.44.111 s3.wordpress.com +66.155.9.238 stats.wordpress.com +66.155.11.243 wordpress.com +66.155.9.238 wpcom.wordpress.com +66.155.9.238 zh.wordpress.com +66.155.9.238 zh-cn.wordpress.com +66.155.9.238 zh-sg.wordpress.com +# WordPress End + +# Yahoo Start +192.0.79.32 code.flickr.com +121.101.144.112 api.flickr.com +119.161.9.151 c5.ah.yahoo.com +119.160.254.215 d.yimg.com +106.10.136.195 de.yahoo.com +119.160.254.215 e.yimg.com +98.139.21.169 edit.yahoo.com +106.10.137.23 farm1.staticflickr.com +106.10.137.23 farm2.staticflickr.com +106.10.137.23 farm3.staticflickr.com +106.10.137.23 farm4.staticflickr.com +106.10.137.23 farm5.staticflickr.com +106.10.137.23 farm6.staticflickr.com +106.10.137.23 farm7.staticflickr.com +106.10.137.23 farm8.staticflickr.com +106.10.137.23 farm9.staticflickr.com +63.250.200.72 bf1.farm3.staticflickr.com +63.250.200.72 bf1.farm6.staticflickr.com +63.250.200.72 bf1.farm7.staticflickr.com +74.6.47.80 gq1.farm3.staticflickr.com +74.6.47.80 gq1.farm4.staticflickr.com +74.6.47.80 gq1.farm5.staticflickr.com +74.6.47.80 gq1.farm6.staticflickr.com +98.138.4.56 ne1.farm7.staticflickr.com +69.147.76.173 flickr.com +106.10.137.175 geo.query.yahoo.com +217.12.13.41 geo.yahoo.com +203.84.197.27 finance.yahoo.com +121.101.144.112 hk.finance.yahoo.com +27.123.201.252 tw.finance.yahoo.com +119.160.254.215 h.yimg.com +106.10.199.10 hk.news.yahoo.com +106.10.138.240 hk.yahoo.com +206.190.39.139 hsrd.yahoo.com +106.10.193.20 hk-mg61.mail.yahoo.com +119.160.254.215 l.yimg.com +106.10.193.20 login.yahoo.com +208.71.44.31 m.flickr.com +106.10.193.20 mail.yahoo.com +203.84.197.27 mg.mail.yahoo.com +106.10.193.20 na.edit.yahoo.com +106.10.193.20 open.login.yahoo.com +98.136.166.37 overview.mail.yahoo.com +119.160.254.215 p.yimg.com +216.115.100.106 s.yimg.com +119.160.254.215 s1.yimg.com +106.10.193.20 sa.edit.yahoo.com +208.71.44.31 secure.flickr.com +106.10.193.30 sp.analytics.yahoo.com +106.10.137.23 static.flickr.com +106.10.199.11 tw.news.yahoo.com +106.10.138.240 tw.yahoo.com +121.101.144.116 up.flickr.com +204.0.5.34 us.js2.yimg.com +106.10.138.240 us.yahoo.com +183.177.81.75 www.flickr.com +106.10.138.240 www.yahoo.com +98.138.253.109 yahoo.com +77.238.184.150 ying.com +183.177.81.75 downloadr.flickr.com +50.18.192.250 duckduckgo-owned-server.yahoo.net +116.214.11.98 tw.mobi.yahoo.com +# Yahoo End + +# Modified hosts end diff --git a/roles/prepare/tasks/main.yml b/roles/prepare/tasks/main.yml new file mode 100644 index 0000000..001e672 --- /dev/null +++ b/roles/prepare/tasks/main.yml @@ -0,0 +1,28 @@ +- name: prepare some dirs + file: name={{ item }} state=directory + with_items: + - "{{ bin_dir }}" + - "{{ ca_dir }}" + - /root/.kube + - /etc/docker + +- name: 集群hosts文件更新 + copy: src=hosts.j2 dest=/etc/hosts + +- name: 写入环境变量$PATH + shell: "echo export PATH={{ bin_dir }}:$PATH >> /etc/profile" + +- name: 下载证书工具 CFSSL + copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755 + with_items: + - cfssl + - cfssl-certinfo + - cfssljson + +- name: 分发CA 证书 + copy: src={{ item }} dest={{ ca_dir }}/{{ item }} mode=0644 + with_items: + - ca.pem + - ca-key.pem + - ca.csr + - ca-config.json