diff --git a/examples/ambassador/canary/ambassador_canary.ipynb b/examples/ambassador/canary/ambassador_canary.ipynb index b97b903958..76e31b0a03 100644 --- a/examples/ambassador/canary/ambassador_canary.ipynb +++ b/examples/ambassador/canary/ambassador_canary.ipynb @@ -11,355 +11,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prerequisites\n", + "## Setup Seldon Core\n", "\n", - "You will need\n", - "\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core) running this notebook\n", - " - A running Kubernetes cluster with kubectl authenticated\n", - " - [Helm client](https://helm.sh/)\n", - " - Seldon Core Python Module : `pip install seldon-core`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Kubernetes Cluster\n", - "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Sun Jun 30 17:10:55 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "seldon-spartakus-volunteer-5866b6df59-vd58f 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.107.70.152 443/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Sun Jun 30 17:12:39 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-778b689797-kzj5f 0/1 ContainerCreating 0 1s\n", - "ambassador-778b689797-r8mqj 0/1 ContainerCreating 0 1s\n", - "ambassador-778b689797-wjm2k 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.108.250.98 80:30114/TCP,443:32175/TCP 1s\n", - "ambassador-admins ClusterIP 10.109.203.166 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Port Forward to Ambassador\n", - "\n", - "```\n", - "kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8003:8080\n", - "```" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -795,7 +449,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/ambassador/custom/ambassador_custom.ipynb b/examples/ambassador/custom/ambassador_custom.ipynb index b4aa5fc4f9..67156bc2e0 100644 --- a/examples/ambassador/custom/ambassador_custom.ipynb +++ b/examples/ambassador/custom/ambassador_custom.ipynb @@ -13,343 +13,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prerequisites\n", + "## Setup Seldon Core\n", "\n", - "You will need\n", - "\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core) running this notebook\n", - " - A running Kubernetes cluster with kubectl authenticated\n", - " - [Helm client](https://helm.sh/)\n", - " - Seldon Core Python Module : `pip install seldon-core`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Kubernetes Cluster\n", - "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 09:16:25 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.106.7.42 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 09:16:36 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.110.148.36 8877/TCP 0s\n", - "ambassador LoadBalancer 10.102.23.33 80:32682/TCP,443:30170/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-6g9fv 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-8n7rp 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-dwcxd 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Port Forward to Ambassador\n", - "\n", - "```\n", - "kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8003:8080\n", - "```" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -566,7 +232,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/ambassador/headers/ambassador_headers.ipynb b/examples/ambassador/headers/ambassador_headers.ipynb index afc29e5b1d..87d676b208 100644 --- a/examples/ambassador/headers/ambassador_headers.ipynb +++ b/examples/ambassador/headers/ambassador_headers.ipynb @@ -13,344 +13,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prerequisites\n", + "## Setup Seldon Core\n", "\n", - "You will need\n", - "\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core) running this notebook\n", - " - A running Kubernetes cluster with kubectl authenticated\n", - " - [Helm client](https://helm.sh/)\n", - " - Seldon Core Python Module : `pip install seldon-core`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Kubernetes Cluster\n", - "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 10:32:26 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.110.248.108 443/TCP 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 0s\n", - "\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 10:32:31 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.106.6.37 8877/TCP 0s\n", - "ambassador LoadBalancer 10.96.144.133 80:30709/TCP,443:30106/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-bz42r 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-nxlmc 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-tkgws 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Port Forward to Ambassador\n", - "\n", - "```\n", - "kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8003:8080\n", - "```" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -905,7 +570,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/ambassador/shadow/ambassador_shadow.ipynb b/examples/ambassador/shadow/ambassador_shadow.ipynb index 3bd2eaa7c2..c74a1ca5c7 100644 --- a/examples/ambassador/shadow/ambassador_shadow.ipynb +++ b/examples/ambassador/shadow/ambassador_shadow.ipynb @@ -15,431 +15,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prerequisites\n", + "## Setup Seldon Core\n", "\n", - "You will need\n", - "\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core) running this notebook\n", - " - A running Kubernetes cluster with kubectl authenticated\n", - " - [Helm client](https://helm.sh/)\n", - " - Seldon Core Python Module : `pip install seldon-core`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Kubernetes Cluster\n", - "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 10:55:02 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.111.111.87 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Install the Prometheus and Grafana example analytics" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-analytics\n", - "LAST DEPLOYED: Tue Apr 16 10:55:09 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "grafana-prom-secret Opaque 1 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "prometheus 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "prometheus 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "prometheus 1s\n", - "\n", - "==> v1/Job\n", - "NAME DESIRED SUCCESSFUL AGE\n", - "grafana-prom-import-dashboards 1 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "grafana-prom-import-dashboards-8rwbr 0/1 ContainerCreating 0 0s\n", - "alertmanager-deployment-7cd568f668-mn9xz 0/1 ContainerCreating 0 0s\n", - "grafana-prom-deployment-899b4dd7b-glkxl 0/1 ContainerCreating 0 0s\n", - "prometheus-node-exporter-cn2bt 0/1 Pending 0 0s\n", - "prometheus-deployment-7554c97586-6929p 0/1 Pending 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "alertmanager-server-conf 1 1s\n", - "grafana-import-dashboards 11 1s\n", - "prometheus-rules 0 1s\n", - "prometheus-server-conf 1 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "alertmanager-deployment 1 1 1 0 1s\n", - "grafana-prom-deployment 1 1 1 0 0s\n", - "prometheus-deployment 1 1 1 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "alertmanager ClusterIP 10.98.4.252 80/TCP 0s\n", - "grafana-prom NodePort 10.101.59.44 80:32280/TCP 0s\n", - "prometheus-node-exporter ClusterIP None 9100/TCP 0s\n", - "prometheus-seldon ClusterIP 10.108.131.166 80/TCP 0s\n", - "\n", - "==> v1beta1/DaemonSet\n", - "NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE\n", - "prometheus-node-exporter 1 1 0 1 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-analytics --name seldon-core-analytics --set grafana_prom_admin_password=password --set persistence.enabled=false --namespace seldon" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 10:55:37 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.111.3.211 8877/TCP 1s\n", - "ambassador LoadBalancer 10.111.26.70 80:30093/TCP,443:30568/TCP 1s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-98n89 0/1 ContainerCreating 0 1s\n", - "ambassador-5b89d44544-k4trg 0/1 ContainerCreating 0 1s\n", - "ambassador-5b89d44544-wpqkv 0/1 ContainerCreating 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set up Port Forwards\n", - "\n", - "**Ensure you port forward ambassador**:\n", - "\n", - "```\n", - "kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8003:8080\n", - "```\n", + "## Set up Port Forward\n", "\n", "**Ensure you port forward to Grafana**\n", "\n", @@ -830,7 +415,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/combiners/mnist_combiner/mnist_combiner.ipynb b/examples/combiners/mnist_combiner/mnist_combiner.ipynb index 069b628f64..cbe2ca00ad 100644 --- a/examples/combiners/mnist_combiner/mnist_combiner.ipynb +++ b/examples/combiners/mnist_combiner/mnist_combiner.ipynb @@ -115,256 +115,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Seldon Core" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu May 9 15:26:10 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.106.130.37 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu May 9 15:26:40 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.98.202.100 8877/TCP 0s\n", - "ambassador LoadBalancer 10.106.119.175 80:30104/TCP,443:31687/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-4l5dx 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-6k9rc 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-zxkh5 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To send requests to Ambassador ingress in another terminal run:\n", - " \n", - "```\n", - "kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8002:8080\n", - "```" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to setup [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -671,7 +424,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/combiners/spam_clf_combiner/spam-classification.ipynb b/examples/combiners/spam_clf_combiner/spam-classification.ipynb index 46ccb17f59..c17f947fef 100644 --- a/examples/combiners/spam_clf_combiner/spam-classification.ipynb +++ b/examples/combiners/spam_clf_combiner/spam-classification.ipynb @@ -622,7 +622,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/explainers/alibi_anchor_tabular/alibi_anchor_tabular_seldon_deployment.ipynb b/examples/explainers/alibi_anchor_tabular/alibi_anchor_tabular_seldon_deployment.ipynb index 642cbc7c59..cda80a933a 100644 --- a/examples/explainers/alibi_anchor_tabular/alibi_anchor_tabular_seldon_deployment.ipynb +++ b/examples/explainers/alibi_anchor_tabular/alibi_anchor_tabular_seldon_deployment.ipynb @@ -25,7 +25,7 @@ "## Before you start\n", "Make sure you install the following dependencies, as they are critical for this example to work:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)\n", "* kubectl v1.14+\n", "* ksonnet v0.13.1+\n", @@ -36,13 +36,6 @@ "Let's get started! 🚀🔥 \n" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 0) Make sure you have all the dependencies installed" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -251,210 +244,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Run Seldon in your Kubernetes cluster" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Install helm if not installed" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\n", - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "Warning: Tiller is already installed in the cluster.\n", - "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)\n", - "Happy Helming!\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "%%bash\n", - "kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default\n", - "helm init\n", - "kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hang tight while we grab the latest from your chart repositories...\n", - "...Skip local chart repository\n", - "...Successfully got an update from the \"elastic\" chart repository\n", - "...Successfully got an update from the \"argo\" chart repository\n", - "...Unable to get an update from the \"incubator\" chart repository (http://storage.googleapis.com/kubernetes-charts-incubator):\n", - "\tGet http://storage.googleapis.com/kubernetes-charts-incubator/index.yaml: dial tcp 172.217.24.16:80: connect: connection refused\n", - "...Unable to get an update from the \"stable\" chart repository (https://kubernetes-charts.storage.googleapis.com):\n", - "\tGet https://kubernetes-charts.storage.googleapis.com/index.yaml: dial tcp 172.217.24.16:443: connect: connection refused\n", - "Update Complete. ⎈ Happy Helming!⎈ \n" - ] - } - ], - "source": [ - "!helm repo update" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Install the Seldon Go Operator" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "LAST DEPLOYED: Thu Jun 20 03:36:53 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.107.15.69 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Jun 20 03:33:28 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-c8f5c967c-4vkpt 0/1 ContainerCreating 0 1s\n", - "ambassador-c8f5c967c-bj9kj 0/1 ContainerCreating 0 1s\n", - "ambassador-c8f5c967c-tjv68 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.109.84.169 localhost 80:31544/TCP,443:31495/TCP 1s\n", - "ambassador-admins ClusterIP 10.108.42.153 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "kubernetesserviceresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -2005,7 +1797,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/input_tranformer/spam-classification.ipynb b/examples/input_tranformer/spam-classification.ipynb index 083ba419b9..eaeae65444 100644 --- a/examples/input_tranformer/spam-classification.ipynb +++ b/examples/input_tranformer/spam-classification.ipynb @@ -394,7 +394,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/istio/canary_update/canary.ipynb b/examples/istio/canary_update/canary.ipynb index 92d82239ac..25e177a821 100644 --- a/examples/istio/canary_update/canary.ipynb +++ b/examples/istio/canary_update/canary.ipynb @@ -11,136 +11,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Prerequisites\n", - "You will need\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core)\n", - " - A running Kubernetes cluster with kubectl authenticated\n", - " - [seldon-core Python package](https://pypi.org/project/seldon-core/) (```pip install seldon-core>=0.2.6.1```)\n", - " - [Helm client](https://helm.sh/)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Kubernetes Cluster\n", - "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", + "## Running this example\n", "\n", - "***This demo needs egress when running the load test to allow MNIST digits to be downloaded. If you want to run the load test then you will need to follow the docs on egress [here](https://istio.io/docs/tasks/traffic-management/egress/#calling-external-services-directly) if you run istio in a way that egress is blocked***\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." + "***This demo needs egress when running the load test to allow MNIST digits to be downloaded. If you want to run the load test then you will need to follow the docs on egress [here](https://istio.io/docs/tasks/traffic-management/egress/#calling-external-services-directly) if you run istio in a way that egress is blocked***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" + "## Setup Cluster and Ingress\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Istio Ingress](../../seldon_core_setup.ipynb#Istio)." ] }, { @@ -264,104 +145,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Sun Jun 30 11:38:18 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "seldon-spartakus-volunteer-5866b6df59-sslhd 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.96.98.198 443/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set istio.enabled=true --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" + "## Start Seldon Core\n", + "Follow the instructions to [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core) with Istio Ingress." ] }, { @@ -942,7 +727,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/kubeflow/kubeflow_seldon_e2e_pipeline.ipynb b/examples/kubeflow/kubeflow_seldon_e2e_pipeline.ipynb index 92966b8e61..0c13feb0b4 100644 --- a/examples/kubeflow/kubeflow_seldon_e2e_pipeline.ipynb +++ b/examples/kubeflow/kubeflow_seldon_e2e_pipeline.ipynb @@ -27,7 +27,7 @@ "## Before you start\n", "Make sure you install the following dependencies, as they are critical for this example to work:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)\n", "* kubectl v1.14+\n", "* ksonnet v0.13.1+\n", @@ -130,121 +130,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Now let's run Seldon \n", - "For this we'll need Helm to be running, so we'll initialise it." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "Warning: Tiller is already installed in the cluster.\n", - "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)\n", - "Happy Helming!\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "%%bash\n", - "helm init \n", - "kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once it's running we can now run the installation command for Seldon.\n", + "## Setup Seldon Core\n", "\n", - "As you can see, we are running the Seldon Operator in the Kubeflow namespace. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: old-mastiff\n", - "LAST DEPLOYED: Tue May 28 11:47:35 2019\n", - "NAMESPACE: kubeflow\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.228.36 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --namespace kubeflow --repo https://storage.googleapis.com/seldon-charts --set usageMetrics.enabled=true " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check all the Seldon Deployment is running" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldon-operator-controller-manager-0 1/1 Running 1 6s\r\n" - ] - } - ], - "source": [ - "!kubectl get pod -n kubeflow | grep seldon" + "Follow the instructions to [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { diff --git a/examples/models/alibaba_ack_deep_mnist/alibaba_cloud_ack_deep_mnist.ipynb b/examples/models/alibaba_ack_deep_mnist/alibaba_cloud_ack_deep_mnist.ipynb index 2a8963445e..e3bf754454 100644 --- a/examples/models/alibaba_ack_deep_mnist/alibaba_cloud_ack_deep_mnist.ipynb +++ b/examples/models/alibaba_ack_deep_mnist/alibaba_cloud_ack_deep_mnist.ipynb @@ -23,7 +23,7 @@ "\n", "## Dependencies:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* kubectl v1.14+\n", "* Python 3.6+\n", "* Python DEV requirements\n" @@ -464,312 +464,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 4.4 Install Seldon Core and all Dependencies\n", + "## Setup Seldon Core\n", "\n", - "Now we can run all the commands you will need to install Seldon Core. Make sure you have all the dependencies listed at the top, including helm, kubectl, etc." + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### We first install seldon core, we need to install HELM to manage our packages" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Error from server (AlreadyExists): serviceaccounts \"tiller\" already exists\r\n" - ] - } - ], - "source": [ - "!kubectl create serviceaccount tiller --namespace kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/tiller-role-binding created\r\n" - ] - } - ], - "source": [ - "!kubectl apply -f tiller-role-binding.yaml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Once that is set-up we can update and install Tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hang tight while we grab the latest from your chart repositories...\n", - "...Skip local chart repository\n", - "...Successfully got an update from the \"argo\" chart repository\n", - "...Successfully got an update from the \"akomljen-charts\" chart repository\n", - "...Successfully got an update from the \"incubator\" chart repository\n", - "...Successfully got an update from the \"elastic\" chart repository\n", - "...Successfully got an update from the \"stable\" chart repository\n", - "Update Complete. ⎈ Happy Helming!⎈ \n" - ] - } - ], - "source": [ - "!helm repo update" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "Warning: Tiller is already installed in the cluster.\n", - "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "# Wait until Tiller finishes\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Now we can install SELDON. " - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "LAST DEPLOYED: Sat Jul 13 16:54:46 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 2s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 2s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 172.21.7.141 443/TCP 2s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-operator 1 2s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 2s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts --set usageMetrics.enabled=true\n", - "!kubectl rollout status deploy/seldon-controller-manager " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Now we set-up the ingress so we can access it\n", - "In alicloud this will actually create an Elastic Load Balancer that will enable us to access all our deployed Seldon Components" + "#### Fianlly we install the Seldon Analytics Package" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 1, "metadata": { - "scrolled": true + "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Sat Jul 13 16:55:11 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-67f5b657dd-fxpl9 0/1 ContainerCreating 0 1s\n", - "ambassador-67f5b657dd-ntzgx 0/1 ContainerCreating 0 1s\n", - "ambassador-67f5b657dd-wnlp7 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 172.21.6.30 80:31872/TCP,443:32589/TCP 1s\n", - "ambassador-admins ClusterIP 172.21.14.77 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "kubernetesserviceresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" + "Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: kind: Secret, namespace: default, name: grafana-prom-secret\n", + "deployment \"grafana-prom-deployment\" successfully rolled out\n", + "service/grafana-prom patched\n" ] } ], "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false\n", - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Fianlly we install the Seldon Analytics Package" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!helm install seldon-core-analytics --repo https://storage.googleapis.com/seldon-charts --name seldon-core-analytics\n", + "!helm install seldon-core-analytics seldon-core-analytics --repo https://storage.googleapis.com/seldon-charts\n", "!kubectl rollout status deployment.apps/grafana-prom-deployment\n", "!kubectl patch svc grafana-prom --type='json' -p '[{\"op\":\"replace\",\"path\":\"/spec/type\",\"value\":\"LoadBalancer\"}]'" ] @@ -840,14 +565,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[4B64f96dbc: Pushing 105.6MB/141.8MB\u001b[14A\u001b[1K\u001b[KPushing 512B/4.43kB\u001b[12A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 548.9kB/648.8MB\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[KPushing 7.426MB/16.85MB\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 57.75MB/65.26MB\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[KPushing 22.51MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 45.06MB/648.8MB\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 66.6MB/141.8MB\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 82.16MB/556.5MB\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 96.63MB/556.5MB\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13B4b2c556: Pushing 377MB/648.8MB\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 72.91MB/648.8MB\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 158.4MB/556.5MB\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 103.4MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 197.5MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 266.3MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 176.6MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 268.1MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 269.8MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 280.8MB/648.8MB\u001b[5A\u001b[1K\u001b[KPushing 404.4MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 422.9MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 345.7MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[13B4b2c556: Pushed 659.3MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 467.2MB/648.8MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K0.1: digest: sha256:13ab55662f0e8479bb51d998a8014f7f059a73422295bcd400f62615d36355dc size: 3482\n" + "\u001b[4B64f96dbc: Pushing 105.6MB/141.8MB\u001b[14A\u001b[1K\u001b[KPushing 512B/4.43kB\u001b[12A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 548.9kB/648.8MB\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[KPushing 7.426MB/16.85MB\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 57.75MB/65.26MB\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[KPushing 22.51MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 45.06MB/648.8MB\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 66.6MB/141.8MB\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 82.16MB/556.5MB\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 96.63MB/556.5MB\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13B4b2c556: Pushing 377MB/648.8MB\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 72.91MB/648.8MB\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 158.4MB/556.5MB\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 103.4MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 197.5MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 266.3MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 176.6MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 268.1MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 269.8MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 280.8MB/648.8MB\u001b[5A\u001b[1K\u001b[KPushing 404.4MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 422.9MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 345.7MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13B4b2c556: Pushed 659.3MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 467.2MB/648.8MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K0.1: digest: sha256:13ab55662f0e8479bb51d998a8014f7f059a73422295bcd400f62615d36355dc size: 3482\n" ] } ], @@ -1198,7 +916,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -1229,7 +946,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/autoscaling/autoscaling_example.ipynb b/examples/models/autoscaling/autoscaling_example.ipynb index 46dea2d5cd..9f8d5a5d59 100644 --- a/examples/models/autoscaling/autoscaling_example.ipynb +++ b/examples/models/autoscaling/autoscaling_example.ipynb @@ -12,361 +12,23 @@ "metadata": {}, "source": [ "## Prerequisites\n", - "\n", - "You will need\n", - "\n", - " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core)\n", - " - A running Kubernetes cluster with kubectl authenticated\n", " \n", - " - The cluster should have `heapster` and `metric-server` running in the `kube-system` namespace\n", - " - For Minikube run:\n", + "- The cluster should have `heapster` and `metric-server` running in the `kube-system` namespace\n", + "- For Minikube run:\n", " \n", " ```\n", " minikube addons enable metrics-server\n", " minikube addons enable heapster\n", - " ```\n", - " \n", - " - [seldon-core Python package](https://pypi.org/project/seldon-core/) (```pip install seldon-core```)\n", - " - [Helm client](https://helm.sh/)" + " ```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Creating a Kubernetes Cluster\n", + "## Setup Seldon Core\n", "\n", - "Follow the [Kubernetes documentation to create a cluster](https://kubernetes.io/docs/setup/).\n", - "\n", - "Once created ensure ```kubectl``` is authenticated against the running cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"gke_seldon-demos_europe-west4-c_standard-cluster-1\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Helm" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start seldon-core" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu Aug 29 13:09:08 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-config 1 2s\n", - "seldon-spartakus-config 1 2s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "seldon-spartakus-volunteer-5b568c587b-ww66l 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.0.22.99 443/TCP 1s\n", - "webhook-server-service ClusterIP 10.0.20.211 443/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 2s\n", - "seldon-spartakus-volunteer 1 2s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 2s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Aug 29 13:10:03 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-684d6f8cd9-cfxwc 0/1 ContainerCreating 0 1s\n", - "ambassador-684d6f8cd9-lxwcd 0/1 ContainerCreating 0 1s\n", - "ambassador-684d6f8cd9-ncv8b 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.0.21.195 80:30644/TCP,443:32376/TCP 1s\n", - "ambassador-admin ClusterIP 10.0.30.220 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "ambassador-crds 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "ambassador-crds 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "kubernetesserviceresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -686,7 +348,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/aws_eks_deep_mnist/aws_eks_deep_mnist.ipynb b/examples/models/aws_eks_deep_mnist/aws_eks_deep_mnist.ipynb index 600b266b77..e061409f01 100644 --- a/examples/models/aws_eks_deep_mnist/aws_eks_deep_mnist.ipynb +++ b/examples/models/aws_eks_deep_mnist/aws_eks_deep_mnist.ipynb @@ -27,7 +27,7 @@ "\n", "## Dependencies:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)\n", "* kubectl v1.14+\n", "* EKS CLI v0.1.32\n", @@ -540,320 +540,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Install Seldon Core" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Before we install seldon core, we need to install HELM\n", - "For that, we need to create a ClusterRoleBinding for us, a ServiceAccount, and then a RoleBinding" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\r\n" - ] - } - ], - "source": [ - "!kubectl create serviceaccount tiller --namespace kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/tiller-role-binding created\r\n" - ] - } - ], - "source": [ - "!kubectl apply -f tiller-role-binding.yaml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Once that is set-up we can install Tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "# Wait until Tiller finishes\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Now we can install SELDON. \n", - "We first start with the custom resource definitions (CRDs)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "LAST DEPLOYED: Wed May 22 16:24:10 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 2s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 2s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 2s\n", - "seldon-spartakus-volunteer-6954cffb89-qz4pq 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.100.198.157 443/TCP 2s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 2s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 2s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 2s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 2s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 2s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And confirm they are running by getting the pods:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Now we set-up the ingress\n", - "This will allow you to reach the Seldon models from outside the kubernetes cluster. \n", + "## Setup Seldon Core\n", "\n", - "In EKS it automatically creates an Elastic Load Balancer, which you can configure from the EC2 Console" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed May 22 16:25:38 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-6dbf99c886-frlfm 0/1 ContainerCreating 0 0s\n", - "ambassador-6dbf99c886-kj56r 0/1 ContainerCreating 0 0s\n", - "ambassador-6dbf99c886-v5mtv 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.100.59.146 80:30911/TCP,443:31715/TCP 0s\n", - "ambassador-admins ClusterIP 10.100.152.178 8877/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And let's wait until it's fully deployed" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -3788,7 +3477,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/azure_aks_deep_mnist/azure_aks_deep_mnist.ipynb b/examples/models/azure_aks_deep_mnist/azure_aks_deep_mnist.ipynb index 518251b5a0..7ee0826f83 100644 --- a/examples/models/azure_aks_deep_mnist/azure_aks_deep_mnist.ipynb +++ b/examples/models/azure_aks_deep_mnist/azure_aks_deep_mnist.ipynb @@ -27,7 +27,7 @@ "\n", "## Dependencies:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)\n", "* kubectl v1.14+\n", "* az CLI v2.0.66+\n", @@ -444,266 +444,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Install Seldon Core" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Before we install seldon core, we need to install HELM\n", - "For that, we need to create a ClusterRoleBinding for us, a ServiceAccount, and then a RoleBinding" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\r\n" - ] - } - ], - "source": [ - "!kubectl create serviceaccount tiller --namespace kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/tiller-role-binding created\r\n" - ] - } - ], - "source": [ - "!kubectl apply -f tiller-role-binding.yaml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Once that is set-up we can install Tiller" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!helm repo update" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "# Wait until Tiller finishes\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Now we can install SELDON. \n", - "We first start with the custom resource definitions (CRDs)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "LAST DEPLOYED: Thu Jun 6 12:03:45 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 3s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 3s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 1/1 Running 0 3s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 4 3s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.0.224.128 443/TCP 3s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 1/1 3s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 3s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts --set usageMetrics.enabled=true" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And confirm they are running by getting the pods:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Now we set-up the ingress\n", - "This will allow you to reach the Seldon models from outside the kubernetes cluster. \n", + "## Setup Seldon Core\n", "\n", - "In EKS it automatically creates an Elastic Load Balancer, which you can configure from the EC2 Console" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Error: release ambassador failed: serviceaccounts \"ambassador\" already exists\r\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And let's wait until it's fully deployed" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"ambassador\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -849,14 +592,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[13B4b2c556: Pushing 187.1MB/648.8MB\u001b[14A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[14A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 28.9MB/648.8MB\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 60.12MB/141.8MB\u001b[4A\u001b[1K\u001b[KPushing 60.64MB/141.8MB\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 141.9MB\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 185.5MB/648.8MB\u001b[5A\u001b[1K\u001b[K" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[5B32b1ff99: Pushed 570.6MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 254.7MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 268.7MB/648.8MB\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 6.456MB/100.6MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 345.2MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 398.1MB/648.8MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 55.64MB/100.6MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 481.1MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 473.8MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K0.1: digest: sha256:b6110da62719e103bfd8c4b187f868b4341c35be16d288018d529da1cfa2585c size: 3482\n" + "\u001b[13B4b2c556: Pushing 187.1MB/648.8MB\u001b[14A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[14A\u001b[1K\u001b[K\u001b[12A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[15A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[9A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[8A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[10A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[11A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 28.9MB/648.8MB\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[6A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[7A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 60.12MB/141.8MB\u001b[4A\u001b[1K\u001b[KPushing 60.64MB/141.8MB\u001b[7A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[3A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[KPushing 141.9MB\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[4A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 185.5MB/648.8MB\u001b[5A\u001b[1K\u001b[K\u001b[5B32b1ff99: Pushed 570.6MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 254.7MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 268.7MB/648.8MB\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[2A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 6.456MB/100.6MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 345.2MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 398.1MB/648.8MB\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[KPushing 55.64MB/100.6MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[KPushing 481.1MB/648.8MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[KPushing 473.8MB/556.5MB\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[13A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[1A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K\u001b[5A\u001b[1K\u001b[K0.1: digest: sha256:b6110da62719e103bfd8c4b187f868b4341c35be16d288018d529da1cfa2585c size: 3482\n" ] } ], @@ -3604,7 +3340,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/chainer_mnist/chainer_mnist.ipynb b/examples/models/chainer_mnist/chainer_mnist.ipynb index 37f0cf6804..9f01c4750d 100644 --- a/examples/models/chainer_mnist/chainer_mnist.ipynb +++ b/examples/models/chainer_mnist/chainer_mnist.ipynb @@ -1038,269 +1038,13 @@ "!minikube start --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /Users/dtaniwaki/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Fri Aug 16 22:53:14 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-config 1 1s\n", - "seldon-spartakus-config 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "seldon-spartakus-volunteer-7d6dd98f89-p6tcn 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.108.43.223 443/TCP 1s\n", - "webhook-server-service ClusterIP 10.104.128.63 443/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "There are gRPC issues with the latest Ambassador, so we rewcommend 0.40.2 until these are fixed." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri Aug 16 22:57:51 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5f7fd859b-96ktm 0/1 ContainerCreating 0 1s\n", - "ambassador-5f7fd859b-qv5x9 0/1 ContainerCreating 0 1s\n", - "ambassador-5f7fd859b-zcrb2 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.97.72.34 80:30535/TCP,443:32073/TCP 1s\n", - "ambassador-admin ClusterIP 10.108.82.228 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "ambassador-crds 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "ambassador-crds 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "kubernetesserviceresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1589,7 +1333,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/deep_mnist/deep_mnist.ipynb b/examples/models/deep_mnist/deep_mnist.ipynb index 0fdeab03db..12dd90d6ef 100644 --- a/examples/models/deep_mnist/deep_mnist.ipynb +++ b/examples/models/deep_mnist/deep_mnist.ipynb @@ -367,268 +367,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Wed Aug 7 16:44:57 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-config 1 1s\n", - "seldon-spartakus-config 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "seldon-spartakus-volunteer-df68b9d48-hzzbd 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.110.184.41 443/TCP 1s\n", - "webhook-server-service ClusterIP 10.109.225.134 443/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed Aug 7 16:45:10 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-6d49d6b5c7-d77lw 0/1 ContainerCreating 0 0s\n", - "ambassador-6d49d6b5c7-m4f2h 0/1 ContainerCreating 0 0s\n", - "ambassador-6d49d6b5c7-rcb5n 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.98.88.166 80:31622/TCP,443:30825/TCP 0s\n", - "ambassador-admins ClusterIP 10.109.108.136 8877/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 0s\n", - "consulresolvers.getambassador.io 0s\n", - "kubernetesendpointresolvers.getambassador.io 0s\n", - "kubernetesserviceresolvers.getambassador.io 0s\n", - "mappings.getambassador.io 0s\n", - "modules.getambassador.io 0s\n", - "ratelimitservices.getambassador.io 0s\n", - "tcpmappings.getambassador.io 0s\n", - "tlscontexts.getambassador.io 0s\n", - "tracingservices.getambassador.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -899,7 +644,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/gpu_tensorflow_deep_mnist/gpu_tensorflow_deep_mnist.ipynb b/examples/models/gpu_tensorflow_deep_mnist/gpu_tensorflow_deep_mnist.ipynb index bcb0678158..5851cff38f 100644 --- a/examples/models/gpu_tensorflow_deep_mnist/gpu_tensorflow_deep_mnist.ipynb +++ b/examples/models/gpu_tensorflow_deep_mnist/gpu_tensorflow_deep_mnist.ipynb @@ -581,343 +581,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Install Seldon Core" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Before installing Seldon Core, we need to install HELM**\n", + "## Setup Seldon Core\n", "\n", - "To do so, we need to creat a ClusterRoleBinding for us, a ServiceAccount and then a RoleBinding" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\r\n" - ] - } - ], - "source": [ - "!kubectl create serviceaccount tiller --namespace kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/tiller-role-binding created\r\n" - ] - } - ], - "source": [ - "!kubectl apply -f tiller-role-binding.yaml" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Once that is set-up we can install Tiller**" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hang tight while we grab the latest from your chart repositories...\n", - "...Skip local chart repository\n", - "...Successfully got an update from the \"stable\" chart repository\n", - "Update Complete.\n" - ] - } - ], - "source": [ - "!helm repo update" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /Users/Seldon/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n" - ] - } - ], - "source": [ - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "# Wait until Tiller finishes\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Now we can install SELDON.**\n", - "\n", - "We first start with the custom resource definitions (CRDs)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "E0624 14:57:46.960571 83748 portforward.go:372] error copying from remote stream to local connection: readfrom tcp4 127.0.0.1:64632->127.0.0.1:64637: write tcp4 127.0.0.1:64632->127.0.0.1:64637: write: broken pipe\n", - "LAST DEPLOYED: Mon Jun 24 14:57:44 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 2s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 2s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 3s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.76.8.100 443/TCP 2s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 2s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And confirm they are running by getting the pods:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Error from server (NotFound): namespaces \"seldon-system\" not found\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "\n", - "This will allow you to reach the Seldon models from outside the kubernetes cluster.\n", - "\n", - "In EKS it automatically creates an Elastic Load Balancer, which you can configure from the EC2 Console." - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Mon Jun 24 14:58:01 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-865c877494-2td9s 0/1 ContainerCreating 0 0s\n", - "ambassador-865c877494-2vsk2 0/1 ContainerCreating 0 0s\n", - "ambassador-865c877494-qzh4c 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.76.8.138 80:30783/TCP,443:32277/TCP 1s\n", - "ambassador-admins ClusterIP 10.76.12.144 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "kubernetesserviceresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And let's wait until it's fully deployed" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1286,7 +952,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/h2o_mojo/h2o_model.ipynb b/examples/models/h2o_mojo/h2o_model.ipynb index 35186c4788..e3bddf5a38 100644 --- a/examples/models/h2o_mojo/h2o_model.ipynb +++ b/examples/models/h2o_mojo/h2o_model.ipynb @@ -1248,925 +1248,9 @@ "Downloaded: https://repo.maven.apache.org/maven2/org/bytedeco/javacpp-presets/openblas/0.2.19-1.3/openblas-0.2.19-1.3-macosx-x86_64.jar (12117 KB at 270.6 KB/sec)\n", "Downloading: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-macosx-x86_64.jar\n", "Downloaded: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-linux-x86_64.jar (941 KB at 20.3 KB/sec)\n", - "Downloading: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-windows-x86_64.jar\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "608/1402 KB 7159/11111 KB 48/2078 KB 1328/2093 KB 1028/2578 KB 7159/11111 KB 48/2078 KB 1328/2093 KB 1032/2578 KB \r", - "608/1402 KB 7159/11111 KB 48/2078 KB 1328/2093 KB 1036/2578 KB \r", - "608/1402 KB 7159/11111 KB 48/2078 KB 1328/2093 KB 1040/2578 KB \r", - "608/1402 KB 7163/11111 KB 48/2078 KB 1328/2093 KB 1040/2578 KB \r", - "608/1402 KB 7167/11111 KB 48/2078 KB 1328/2093 KB 1040/2578 KB \r", - "608/1402 KB 7171/11111 KB 48/2078 KB 1328/2093 KB 1040/2578 KB \r", - "608/1402 KB 7175/11111 KB 48/2078 KB 1328/2093 KB 1040/2578 KB \r", - "608/1402 KB 7175/11111 KB 48/2078 KB 1332/2093 KB 1040/2578 KB \r", - "608/1402 KB 7175/11111 KB 48/2078 KB 1336/2093 KB 1040/2578 KB \r", - "608/1402 KB 7175/11111 KB 48/2078 KB 1340/2093 KB 1040/2578 KB \r", - "608/1402 KB 7175/11111 KB 48/2078 KB 1344/2093 KB 1040/2578 KB \r", - "612/1402 KB 7175/11111 KB 48/2078 KB 1344/2093 KB 1040/2578 KB \r", - "616/1402 KB 7175/11111 KB 48/2078 KB 1344/2093 KB 1040/2578 KB \r", - "620/1402 KB 7175/11111 KB 48/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 48/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 52/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 56/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 60/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1344/2093 KB 1040/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1344/2093 KB 1044/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1344/2093 KB 1048/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1344/2093 KB 1052/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1344/2093 KB 1056/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1348/2093 KB 1056/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1352/2093 KB 1056/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1356/2093 KB 1056/2578 KB \r", - "624/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "628/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "632/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "636/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "640/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "644/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "648/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "652/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 64/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 68/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 72/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 76/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 80/2078 KB 1360/2093 KB 1056/2578 KB \r", - "656/1402 KB 7175/11111 KB 80/2078 KB 1360/2093 KB 1060/2578 KB \r", - "656/1402 KB 7175/11111 KB 80/2078 KB 1360/2093 KB 1064/2578 KB \r", - "656/1402 KB 7175/11111 KB 80/2078 KB 1360/2093 KB 1068/2578 KB \r", - "656/1402 KB 7175/11111 KB 80/2078 KB 1360/2093 KB 1072/2578 KB \r", - "656/1402 KB 7179/11111 KB 80/2078 KB 1360/2093 KB 1072/2578 KB \r", - "656/1402 KB 7183/11111 KB 80/2078 KB 1360/2093 KB 1072/2578 KB \r", - "656/1402 KB 7187/11111 KB 80/2078 KB 1360/2093 KB 1072/2578 KB \r", - "656/1402 KB 7191/11111 KB 80/2078 KB 1360/2093 KB 1072/2578 KB \r", - "656/1402 KB 7191/11111 KB 80/2078 KB 1364/2093 KB 1072/2578 KB \r", - "656/1402 KB 7191/11111 KB 80/2078 KB 1368/2093 KB 1072/2578 KB \r", - "656/1402 KB 7191/11111 KB 80/2078 KB 1372/2093 KB 1072/2578 KB \r", - "656/1402 KB 7191/11111 KB 80/2078 KB 1376/2093 KB 1072/2578 KB \r", - "660/1402 KB 7191/11111 KB 80/2078 KB 1376/2093 KB 1072/2578 KB \r", - "664/1402 KB 7191/11111 KB 80/2078 KB 1376/2093 KB 1072/2578 KB \r", - "668/1402 KB 7191/11111 KB 80/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 80/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 84/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 88/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 92/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 96/2078 KB 1376/2093 KB 1072/2578 KB \r", - "672/1402 KB 7191/11111 KB 96/2078 KB 1376/2093 KB 1076/2578 KB \r", - "672/1402 KB 7191/11111 KB 96/2078 KB 1376/2093 KB 1080/2578 KB \r", - "672/1402 KB 7191/11111 KB 96/2078 KB 1376/2093 KB 1084/2578 KB \r", - "672/1402 KB 7191/11111 KB 96/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7195/11111 KB 96/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7199/11111 KB 96/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7203/11111 KB 96/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 96/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 100/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 104/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 108/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1376/2093 KB 1088/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1376/2093 KB 1092/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1376/2093 KB 1096/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1376/2093 KB 1100/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1376/2093 KB 1104/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1380/2093 KB 1104/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1384/2093 KB 1104/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1388/2093 KB 1104/2578 KB \r", - "672/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "676/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "680/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "684/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "688/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "692/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "696/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "700/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "704/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1104/2578 KB \r", - "704/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1108/2578 KB \r", - "704/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1112/2578 KB \r", - "704/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1116/2578 KB \r", - "704/1402 KB 7207/11111 KB 112/2078 KB 1392/2093 KB 1120/2578 KB \r", - "704/1402 KB 7211/11111 KB 112/2078 KB 1392/2093 KB 1120/2578 KB \r", - "704/1402 KB 7215/11111 KB 112/2078 KB 1392/2093 KB 1120/2578 KB \r", - "704/1402 KB 7219/11111 KB 112/2078 KB 1392/2093 KB 1120/2578 KB \r", - "704/1402 KB 7223/11111 KB 112/2078 KB 1392/2093 KB 1120/2578 KB \r", - "704/1402 KB 7223/11111 KB 112/2078 KB 1396/2093 KB 1120/2578 KB \r", - "704/1402 KB 7223/11111 KB 112/2078 KB 1400/2093 KB 1120/2578 KB \r", - "704/1402 KB 7223/11111 KB 112/2078 KB 1404/2093 KB 1120/2578 KB \r", - "704/1402 KB 7223/11111 KB 112/2078 KB 1408/2093 KB 1120/2578 KB \r", - "708/1402 KB 7223/11111 KB 112/2078 KB 1408/2093 KB 1120/2578 KB \r", - "712/1402 KB 7223/11111 KB 112/2078 KB 1408/2093 KB 1120/2578 KB \r", - "716/1402 KB 7223/11111 KB 112/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 112/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 116/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 120/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 124/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 128/2078 KB 1408/2093 KB 1120/2578 KB \r", - "720/1402 KB 7223/11111 KB 128/2078 KB 1408/2093 KB 1124/2578 KB \r", - "720/1402 KB 7223/11111 KB 128/2078 KB 1408/2093 KB 1128/2578 KB \r", - "720/1402 KB 7223/11111 KB 128/2078 KB 1408/2093 KB 1132/2578 KB \r", - "720/1402 KB 7223/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "720/1402 KB 7227/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "720/1402 KB 7231/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "720/1402 KB 7235/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "720/1402 KB 7239/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "724/1402 KB 7239/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "728/1402 KB 7239/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "732/1402 KB 7239/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 128/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 132/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 136/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 140/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1408/2093 KB 1136/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1408/2093 KB 1140/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1408/2093 KB 1144/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1408/2093 KB 1148/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1408/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1412/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1416/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1420/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 144/2078 KB 1424/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 148/2078 KB 1424/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 152/2078 KB 1424/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 156/2078 KB 1424/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1152/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1156/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1160/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1164/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1168/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1172/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1176/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1180/2578 KB \r", - "736/1402 KB 7239/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "736/1402 KB 7243/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "736/1402 KB 7247/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "736/1402 KB 7251/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "736/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "740/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "744/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "748/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "752/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1184/2578 KB \r", - "752/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1188/2578 KB \r", - "752/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1192/2578 KB \r", - "752/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1196/2578 KB \r", - "752/1402 KB 7255/11111 KB 160/2078 KB 1424/2093 KB 1200/2578 KB \r", - "752/1402 KB 7259/11111 KB 160/2078 KB 1424/2093 KB 1200/2578 KB \r", - "752/1402 KB 7263/11111 KB 160/2078 KB 1424/2093 KB 1200/2578 KB \r", - "752/1402 KB 7267/11111 KB 160/2078 KB 1424/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1424/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1428/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1432/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1436/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1440/2093 KB 1200/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1440/2093 KB 1204/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1440/2093 KB 1208/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1440/2093 KB 1212/2578 KB \r", - "752/1402 KB 7271/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "752/1402 KB 7275/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "752/1402 KB 7279/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "752/1402 KB 7283/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "752/1402 KB 7287/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "756/1402 KB 7287/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "760/1402 KB 7287/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "764/1402 KB 7287/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 160/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 164/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 168/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 172/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 176/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 180/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 184/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 188/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 192/2078 KB 1440/2093 KB 1216/2578 KB \r", - "768/1402 KB 7287/11111 KB 192/2078 KB 1440/2093 KB 1220/2578 KB \r", - "768/1402 KB 7287/11111 KB 192/2078 KB 1440/2093 KB 1224/2578 KB \r", - "768/1402 KB 7287/11111 KB 192/2078 KB 1440/2093 KB 1228/2578 KB \r", - "768/1402 KB 7287/11111 KB 192/2078 KB 1440/2093 KB 1232/2578 KB \r", - "768/1402 KB 7291/11111 KB 192/2078 KB 1440/2093 KB 1232/2578 KB \r", - "768/1402 KB 7295/11111 KB 192/2078 KB 1440/2093 KB 1232/2578 KB \r", - "768/1402 KB 7299/11111 KB 192/2078 KB 1440/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 192/2078 KB 1440/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 192/2078 KB 1444/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 192/2078 KB 1448/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 192/2078 KB 1452/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 192/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 196/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 200/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 204/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7303/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7307/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7311/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7315/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "768/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "772/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "776/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "780/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1232/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1236/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1240/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1244/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1248/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1252/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1256/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1260/2578 KB \r", - "784/1402 KB 7319/11111 KB 208/2078 KB 1456/2093 KB 1264/2578 KB \r", - "784/1402 KB 7323/11111 KB 208/2078 KB 1456/2093 KB 1264/2578 KB \r", - "784/1402 KB 7327/11111 KB 208/2078 KB 1456/2093 KB 1264/2578 KB \r", - "784/1402 KB 7331/11111 KB 208/2078 KB 1456/2093 KB 1264/2578 KB \r", - "784/1402 KB 7335/11111 KB 208/2078 KB 1456/2093 KB 1264/2578 KB \r", - "784/1402 KB 7335/11111 KB 208/2078 KB 1460/2093 KB 1264/2578 KB \r", - "784/1402 KB 7335/11111 KB 208/2078 KB 1464/2093 KB 1264/2578 KB \r", - "784/1402 KB 7335/11111 KB 208/2078 KB 1468/2093 KB 1264/2578 KB \r", - "784/1402 KB 7335/11111 KB 208/2078 KB 1472/2093 KB 1264/2578 KB \r", - "788/1402 KB 7335/11111 KB 208/2078 KB 1472/2093 KB 1264/2578 KB \r", - "792/1402 KB 7335/11111 KB 208/2078 KB 1472/2093 KB 1264/2578 KB \r", - "796/1402 KB 7335/11111 KB 208/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 208/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 212/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 216/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 220/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1472/2093 KB 1264/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1472/2093 KB 1268/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1472/2093 KB 1272/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1472/2093 KB 1276/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1472/2093 KB 1280/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1476/2093 KB 1280/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1480/2093 KB 1280/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1484/2093 KB 1280/2578 KB \r", - "800/1402 KB 7335/11111 KB 224/2078 KB 1488/2093 KB 1280/2578 KB \r", - "804/1402 KB 7335/11111 KB 224/2078 KB 1488/2093 KB 1280/2578 KB \r", - "808/1402 KB 7335/11111 KB 224/2078 KB 1488/2093 KB 1280/2578 KB \r", - "812/1402 KB 7335/11111 KB 224/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 224/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 228/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 232/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 236/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 240/2078 KB 1488/2093 KB 1280/2578 KB \r", - "816/1402 KB 7335/11111 KB 240/2078 KB 1488/2093 KB 1284/2578 KB \r", - "816/1402 KB 7335/11111 KB 240/2078 KB 1488/2093 KB 1288/2578 KB \r", - "816/1402 KB 7335/11111 KB 240/2078 KB 1488/2093 KB 1292/2578 KB \r", - "816/1402 KB 7335/11111 KB 240/2078 KB 1488/2093 KB 1296/2578 KB \r", - "816/1402 KB 7335/11111 KB 244/2078 KB 1488/2093 KB 1296/2578 KB \r", - "816/1402 KB 7335/11111 KB 248/2078 KB 1488/2093 KB 1296/2578 KB \r", - "816/1402 KB 7335/11111 KB 252/2078 KB 1488/2093 KB 1296/2578 KB \r", - "816/1402 KB 7335/11111 KB 256/2078 KB 1488/2093 KB 1296/2578 KB \r", - "816/1402 KB 7335/11111 KB 256/2078 KB 1488/2093 KB 1300/2578 KB \r", - "816/1402 KB 7335/11111 KB 256/2078 KB 1488/2093 KB 1304/2578 KB \r", - "816/1402 KB 7335/11111 KB 256/2078 KB 1488/2093 KB 1308/2578 KB \r", - "816/1402 KB 7335/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7339/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7343/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7347/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7351/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7355/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7359/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7363/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7367/11111 KB 256/2078 KB 1488/2093 KB 1312/2578 KB \r", - "816/1402 KB 7367/11111 KB 256/2078 KB 1492/2093 KB 1312/2578 KB \r", - "816/1402 KB 7367/11111 KB 256/2078 KB 1496/2093 KB 1312/2578 KB \r", - "816/1402 KB 7367/11111 KB 256/2078 KB 1500/2093 KB 1312/2578 KB \r", - "816/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1312/2578 KB \r", - "820/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1312/2578 KB \r", - "824/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1312/2578 KB \r", - "828/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1312/2578 KB \r", - "832/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1312/2578 KB \r", - "832/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1316/2578 KB \r", - "832/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1320/2578 KB \r", - "832/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1324/2578 KB \r", - "832/1402 KB 7367/11111 KB 256/2078 KB 1504/2093 KB 1328/2578 KB \r", - "832/1402 KB 7371/11111 KB 256/2078 KB 1504/2093 KB 1328/2578 KB \r", - "832/1402 KB 7375/11111 KB 256/2078 KB 1504/2093 KB 1328/2578 KB \r", - "832/1402 KB 7379/11111 KB 256/2078 KB 1504/2093 KB 1328/2578 KB \r", - "832/1402 KB 7383/11111 KB 256/2078 KB 1504/2093 KB 1328/2578 KB \r", - "832/1402 KB 7383/11111 KB 256/2078 KB 1508/2093 KB 1328/2578 KB \r", - "832/1402 KB 7383/11111 KB 256/2078 KB 1512/2093 KB 1328/2578 KB \r", - "832/1402 KB 7383/11111 KB 256/2078 KB 1516/2093 KB 1328/2578 KB \r", - "832/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1328/2578 KB \r", - "836/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1328/2578 KB \r", - "840/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1328/2578 KB \r", - "844/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1328/2578 KB \r", - "848/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1328/2578 KB \r", - "848/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1332/2578 KB \r", - "848/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1336/2578 KB \r", - "848/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1340/2578 KB \r", - "848/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1344/2578 KB \r", - "852/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1344/2578 KB \r", - "856/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1344/2578 KB \r", - "860/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 256/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 260/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 264/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 268/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 272/2078 KB 1520/2093 KB 1344/2578 KB \r", - "864/1402 KB 7383/11111 KB 272/2078 KB 1520/2093 KB 1348/2578 KB \r", - "864/1402 KB 7383/11111 KB 272/2078 KB 1520/2093 KB 1352/2578 KB \r", - "864/1402 KB 7383/11111 KB 272/2078 KB 1520/2093 KB 1356/2578 KB \r", - "864/1402 KB 7383/11111 KB 272/2078 KB 1520/2093 KB 1360/2578 KB \r", - "864/1402 KB 7387/11111 KB 272/2078 KB 1520/2093 KB 1360/2578 KB \r", - "864/1402 KB 7391/11111 KB 272/2078 KB 1520/2093 KB 1360/2578 KB \r", - "864/1402 KB 7395/11111 KB 272/2078 KB 1520/2093 KB 1360/2578 KB \r", - "864/1402 KB 7399/11111 KB 272/2078 KB 1520/2093 KB 1360/2578 KB \r", - "864/1402 KB 7399/11111 KB 272/2078 KB 1524/2093 KB 1360/2578 KB \r", - "864/1402 KB 7399/11111 KB 272/2078 KB 1528/2093 KB 1360/2578 KB \r", - "864/1402 KB 7399/11111 KB 272/2078 KB 1532/2093 KB 1360/2578 KB \r", - "864/1402 KB 7399/11111 KB 272/2078 KB 1536/2093 KB 1360/2578 KB \r", - "868/1402 KB 7399/11111 KB 272/2078 KB 1536/2093 KB 1360/2578 KB \r", - "872/1402 KB 7399/11111 KB 272/2078 KB 1536/2093 KB 1360/2578 KB \r", - "876/1402 KB 7399/11111 KB 272/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 272/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 276/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 280/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 284/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 288/2078 KB 1536/2093 KB 1360/2578 KB \r", - "880/1402 KB 7399/11111 KB 288/2078 KB 1536/2093 KB 1364/2578 KB \r", - "880/1402 KB 7399/11111 KB 288/2078 KB 1536/2093 KB 1368/2578 KB \r", - "880/1402 KB 7399/11111 KB 288/2078 KB 1536/2093 KB 1372/2578 KB \r", - "880/1402 KB 7399/11111 KB 288/2078 KB 1536/2093 KB 1376/2578 KB \r", - "880/1402 KB 7403/11111 KB 288/2078 KB 1536/2093 KB 1376/2578 KB \r", - "880/1402 KB 7407/11111 KB 288/2078 KB 1536/2093 KB 1376/2578 KB \r", - "880/1402 KB 7411/11111 KB 288/2078 KB 1536/2093 KB 1376/2578 KB \r", - "880/1402 KB 7415/11111 KB 288/2078 KB 1536/2093 KB 1376/2578 KB \r", - "880/1402 KB 7415/11111 KB 288/2078 KB 1540/2093 KB 1376/2578 KB \r", - "880/1402 KB 7415/11111 KB 288/2078 KB 1544/2093 KB 1376/2578 KB \r", - "880/1402 KB 7415/11111 KB 288/2078 KB 1548/2093 KB 1376/2578 KB \r", - "880/1402 KB 7415/11111 KB 288/2078 KB 1552/2093 KB 1376/2578 KB \r", - "884/1402 KB 7415/11111 KB 288/2078 KB 1552/2093 KB 1376/2578 KB \r", - "888/1402 KB 7415/11111 KB 288/2078 KB 1552/2093 KB 1376/2578 KB \r", - "892/1402 KB 7415/11111 KB 288/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 288/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 292/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 296/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 300/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 304/2078 KB 1552/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 304/2078 KB 1556/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 304/2078 KB 1560/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 304/2078 KB 1564/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 304/2078 KB 1568/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 308/2078 KB 1568/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 312/2078 KB 1568/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 316/2078 KB 1568/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1376/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1380/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1384/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1388/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1392/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1396/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1400/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1404/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1568/2093 KB 1408/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1572/2093 KB 1408/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1576/2093 KB 1408/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1580/2093 KB 1408/2578 KB \r", - "896/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "900/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "904/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "908/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "912/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "916/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "920/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "924/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7415/11111 KB 320/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7415/11111 KB 324/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7415/11111 KB 328/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7415/11111 KB 332/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7415/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7419/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7423/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7427/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7431/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7435/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7439/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7443/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7447/11111 KB 336/2078 KB 1584/2093 KB 1408/2578 KB \r", - "928/1402 KB 7447/11111 KB 336/2078 KB 1588/2093 KB 1408/2578 KB \r", - "928/1402 KB 7447/11111 KB 336/2078 KB 1592/2093 KB 1408/2578 KB \r", - "928/1402 KB 7447/11111 KB 336/2078 KB 1596/2093 KB 1408/2578 KB \r", - "928/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1408/2578 KB \r", - "932/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1408/2578 KB \r", - "936/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1408/2578 KB \r", - "940/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1408/2578 KB \r", - "944/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1408/2578 KB \r", - "944/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1412/2578 KB \r", - "944/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1416/2578 KB \r", - "944/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1420/2578 KB \r", - "944/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1424/2578 KB \r", - "948/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1424/2578 KB \r", - "952/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1424/2578 KB \r", - "956/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 336/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 340/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 344/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 348/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 352/2078 KB 1600/2093 KB 1424/2578 KB \r", - "960/1402 KB 7447/11111 KB 352/2078 KB 1600/2093 KB 1428/2578 KB \r", - "960/1402 KB 7447/11111 KB 352/2078 KB 1600/2093 KB 1432/2578 KB \r", - "960/1402 KB 7447/11111 KB 352/2078 KB 1600/2093 KB 1436/2578 KB \r", - "960/1402 KB 7447/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "960/1402 KB 7451/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "960/1402 KB 7455/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "960/1402 KB 7459/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "960/1402 KB 7463/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "964/1402 KB 7463/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "968/1402 KB 7463/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "972/1402 KB 7463/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 352/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 356/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 360/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 364/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 368/2078 KB 1600/2093 KB 1440/2578 KB \r", - "976/1402 KB 7463/11111 KB 368/2078 KB 1600/2093 KB 1444/2578 KB \r", - "976/1402 KB 7463/11111 KB 368/2078 KB 1600/2093 KB 1448/2578 KB \r", - "976/1402 KB 7463/11111 KB 368/2078 KB 1600/2093 KB 1452/2578 KB \r", - "976/1402 KB 7463/11111 KB 368/2078 KB 1600/2093 KB 1456/2578 KB \r", - "976/1402 KB 7467/11111 KB 368/2078 KB 1600/2093 KB 1456/2578 KB \r", - "976/1402 KB 7471/11111 KB 368/2078 KB 1600/2093 KB 1456/2578 KB \r", - "976/1402 KB 7475/11111 KB 368/2078 KB 1600/2093 KB 1456/2578 KB \r", - "976/1402 KB 7479/11111 KB 368/2078 KB 1600/2093 KB 1456/2578 KB \r", - "976/1402 KB 7479/11111 KB 368/2078 KB 1604/2093 KB 1456/2578 KB \r", - "976/1402 KB 7479/11111 KB 368/2078 KB 1608/2093 KB 1456/2578 KB \r", - "976/1402 KB 7479/11111 KB 368/2078 KB 1612/2093 KB 1456/2578 KB \r", - "976/1402 KB 7479/11111 KB 368/2078 KB 1616/2093 KB 1456/2578 KB \r", - "980/1402 KB 7479/11111 KB 368/2078 KB 1616/2093 KB 1456/2578 KB \r", - "984/1402 KB 7479/11111 KB 368/2078 KB 1616/2093 KB 1456/2578 KB \r", - "988/1402 KB 7479/11111 KB 368/2078 KB 1616/2093 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 368/2078 KB 1616/2093 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 372/2078 KB 1616/2093 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 376/2078 KB 1616/20" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "93 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 380/2078 KB 1616/2093 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 384/2078 KB 1616/2093 KB 1456/2578 KB \r", - "992/1402 KB 7479/11111 KB 384/2078 KB 1616/2093 KB 1460/2578 KB \r", - "992/1402 KB 7479/11111 KB 384/2078 KB 1616/2093 KB 1464/2578 KB \r", - "992/1402 KB 7479/11111 KB 384/2078 KB 1616/2093 KB 1468/2578 KB \r", - "992/1402 KB 7479/11111 KB 384/2078 KB 1616/2093 KB 1472/2578 KB \r", - "992/1402 KB 7483/11111 KB 384/2078 KB 1616/2093 KB 1472/2578 KB \r", - "992/1402 KB 7487/11111 KB 384/2078 KB 1616/2093 KB 1472/2578 KB \r", - "992/1402 KB 7491/11111 KB 384/2078 KB 1616/2093 KB 1472/2578 KB \r", - "992/1402 KB 7495/11111 KB 384/2078 KB 1616/2093 KB 1472/2578 KB \r", - "992/1402 KB 7495/11111 KB 384/2078 KB 1620/2093 KB 1472/2578 KB \r", - "992/1402 KB 7495/11111 KB 384/2078 KB 1624/2093 KB 1472/2578 KB \r", - "992/1402 KB 7495/11111 KB 384/2078 KB 1628/2093 KB 1472/2578 KB \r", - "992/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "996/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1000/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1004/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1008/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1012/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1016/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1020/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 384/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 388/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 392/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 396/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 400/2078 KB 1632/2093 KB 1472/2578 KB \r", - "1024/1402 KB 7495/11111 KB 400/2078 KB 1632/2093 KB 1476/2578 KB \r", - "1024/1402 KB 7495/11111 KB 400/2078 KB 1632/2093 KB 1480/2578 KB \r", - "1024/1402 KB 7495/11111 KB 400/2078 KB 1632/2093 KB 1484/2578 KB \r", - "1024/1402 KB 7495/11111 KB 400/2078 KB 1632/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7499/11111 KB 400/2078 KB 1632/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7503/11111 KB 400/2078 KB 1632/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7507/11111 KB 400/2078 KB 1632/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 400/2078 KB 1632/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 400/2078 KB 1636/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 400/2078 KB 1640/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 400/2078 KB 1644/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 400/2078 KB 1648/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 404/2078 KB 1648/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 408/2078 KB 1648/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 412/2078 KB 1648/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 416/2078 KB 1648/2093 KB 1488/2578 KB \r", - "1024/1402 KB 7511/11111 KB 416/2078 KB 1648/2093 KB 1492/2578 KB \r", - "1024/1402 KB 7511/11111 KB 416/2078 KB 1648/2093 KB 1496/2578 KB \r", - "1024/1402 KB 7511/11111 KB 416/2078 KB 1648/2093 KB 1500/2578 KB \r", - "1024/1402 KB 7511/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1024/1402 KB 7515/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1024/1402 KB 7519/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1024/1402 KB 7523/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1024/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1028/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1032/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1036/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1040/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1504/2578 KB \r", - "1040/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1508/2578 KB \r", - "1040/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1512/2578 KB \r", - "1040/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1516/2578 KB \r", - "1040/1402 KB 7527/11111 KB 416/2078 KB 1648/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7531/11111 KB 416/2078 KB 1648/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7535/11111 KB 416/2078 KB 1648/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7539/11111 KB 416/2078 KB 1648/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7543/11111 KB 416/2078 KB 1648/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7543/11111 KB 416/2078 KB 1652/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7543/11111 KB 416/2078 KB 1656/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7543/11111 KB 416/2078 KB 1660/2093 KB 1520/2578 KB \r", - "1040/1402 KB 7543/11111 KB 416/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1044/1402 KB 7543/11111 KB 416/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1048/1402 KB 7543/11111 KB 416/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1052/1402 KB 7543/11111 KB 416/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 416/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 420/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 424/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 428/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 432/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 436/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 440/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 444/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 448/2078 KB 1664/2093 KB 1520/2578 KB \r", - "1056/1402 KB 7543/11111 KB 448/2078 KB 1664/2093 KB 1524/2578 KB \r", - "1056/1402 KB 7543/11111 KB 448/2078 KB 1664/2093 KB 1528/2578 KB \r", - "1056/1402 KB 7543/11111 KB 448/2078 KB 1664/2093 KB 1532/2578 KB \r", - "1056/1402 KB 7543/11111 KB 448/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7547/11111 KB 448/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7551/11111 KB 448/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7555/11111 KB 448/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 448/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 452/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 456/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 460/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1664/2093 KB 1536/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1664/2093 KB 1540/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1664/2093 KB 1544/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1664/2093 KB 1548/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1664/2093 KB 1552/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1668/2093 KB 1552/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1672/2093 KB 1552/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1676/2093 KB 1552/2578 KB \r", - "1056/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1552/2578 KB \r", - "1060/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1552/2578 KB \r", - "1064/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1552/2578 KB \r", - "1068/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1552/2578 KB \r", - "1072/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1552/2578 KB \r", - "1072/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1556/2578 KB \r", - "1072/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1560/2578 KB \r", - "1072/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1564/2578 KB \r", - "1072/1402 KB 7559/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1072/1402 KB 7563/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1072/1402 KB 7567/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1072/1402 KB 7571/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1072/1402 KB 7575/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1076/1402 KB 7575/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1080/1402 KB 7575/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1084/1402 KB 7575/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 464/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 468/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 472/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 476/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 480/2078 KB 1680/2093 KB 1568/2578 KB \r", - "1088/1402 KB 7575/11111 KB 480/2078 KB 1680/2093 KB 1572/2578 KB \r", - "1088/1402 KB 7575/11111 KB 480/2078 KB 1680/2093 KB 1576/2578 KB \r", - "1088/1402 KB 7575/11111 KB 480/2078 KB 1680/2093 KB 1580/2578 KB \r", - "1088/1402 KB 7575/11111 KB 480/2078 KB 1680/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7579/11111 KB 480/2078 KB 1680/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7583/11111 KB 480/2078 KB 1680/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7587/11111 KB 480/2078 KB 1680/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 480/2078 KB 1680/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 480/2078 KB 1684/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 480/2078 KB 1688/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 480/2078 KB 1692/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 480/2078 KB 1696/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 484/2078 KB 1696/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 488/2078 KB 1696/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 492/2078 KB 1696/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 496/2078 KB 1696/2093 KB 1584/2578 KB \r", - "1088/1402 KB 7591/11111 KB 496/2078 KB 1696/2093 KB 1588/2578 KB \r", - "1088/1402 KB 7591/11111 KB 496/2078 KB 1696/2093 KB 1592/2578 KB \r", - "1088/1402 KB 7591/11111 KB 496/2078 KB 1696/2093 KB 1596/2578 KB \r", - "1088/1402 KB 7591/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1088/1402 KB 7595/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1088/1402 KB 7599/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1088/1402 KB 7603/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1088/1402 KB 7607/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1092/1402 KB 7607/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1096/1402 KB 7607/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1100/1402 KB 7607/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 496/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 500/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 504/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 508/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 512/2078 KB 1696/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 512/2078 KB 1700/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 512/2078 KB 1704/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 512/2078 KB 1708/2093 KB 1600/2578 KB \r", - "1104/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1600/2578 KB \r", - "1108/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1600/2578 KB \r", - "1112/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1600/2578 KB \r", - "1116/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1600/2578 KB \r", - "1120/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1600/2578 KB \r", - "1120/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1604/2578 KB \r", - "1120/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1608/2578 KB \r", - "1120/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1612/2578 KB \r", - "1120/1402 KB 7607/11111 KB 512/2078 KB 1712/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7611/11111 KB 512/2078 KB 1712/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7615/11111 KB 512/2078 KB 1712/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7619/11111 KB 512/2078 KB 1712/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7623/11111 KB 512/2078 KB 1712/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7623/11111 KB 512/2078 KB 1716/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7623/11111 KB 512/2078 KB 1720/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7623/11111 KB 512/2078 KB 1724/2093 KB 1616/2578 KB \r", - "1120/1402 KB 7623/11111 KB 512/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1124/1402 KB 7623/11111 KB 512/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1128/1402 KB 7623/11111 KB 512/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1132/1402 KB 7623/11111 KB 512/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 512/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 516/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 520/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 524/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 528/2078 KB 1728/2093 KB 1616/2578 KB \r", - "1136/1402 KB 7623/11111 KB 528/2078 KB 1728/2093 KB 1620/2578 KB \r", - "1136/1402 KB 7623/11111 KB 528/2078 KB 1728/2093 KB 1624/2578 KB \r", - "1136/1402 KB 7623/11111 KB 528/2078 KB 1728/2093 KB 1628/2578 KB \r", - "1136/1402 KB 7623/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1136/1402 KB 7627/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1136/1402 KB 7631/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1136/1402 KB 7635/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1136/1402 KB 7639/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1140/1402 KB 7639/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1144/1402 KB 7639/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1148/1402 KB 7639/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7639/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7643/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7647/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7651/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7655/11111 KB 528/2078 KB 1728/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7655/11111 KB 528/2078 KB 1732/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7655/11111 KB 528/2078 KB 1736/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7655/11111 KB 528/2078 KB 1740/2093 KB 1632/2578 KB \r", - "1152/1402 KB 7655/11111 KB 528/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1156/1402 KB 7655/11111 KB 528/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1160/1402 KB 7655/11111 KB 528/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1164/1402 KB 7655/11111 KB 528/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 528/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 532/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 536/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 540/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 544/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 548/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 552/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 556/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1632/2578 KB \r", - "1168/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1636/2578 KB \r", - "1168/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1640/2578 KB \r", - "1168/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1644/2578 KB \r", - "1168/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1172/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1176/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1180/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7655/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7659/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7663/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7667/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7671/11111 KB 560/2078 KB 1744/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7671/11111 KB 560/2078 KB 1748/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7671/11111 KB 560/2078 KB 1752/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7671/11111 KB 560/2078 KB 1756/2093 KB 1648/2578 KB \r", - "1184/1402 KB 7671/11111 KB 560/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1188/1402 KB 7671/11111 KB 560/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1192/1402 KB 7671/11111 KB 560/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1196/1402 KB 7671/11111 KB 560/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 560/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 564/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 568/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 572/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1760/2093 KB 1648/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1760/2093 KB 1652/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1760/2093 KB 1656/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1760/2093 KB 1660/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1760/2093 KB 1664/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1764/2093 KB 1664/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1768/2093 KB 1664/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1772/2093 KB 1664/2578 KB \r", - "1200/1402 KB 7671/11111 KB 576/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1204/1402 KB 7671/11111 KB 576/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1208/1402 KB 7671/11111 KB 576/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1212/1402 KB 7671/11111 KB 576/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 576/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 580/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 584/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 588/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 592/2078 KB 1776/2093 KB 1664/2578 KB \r", - "1216/1402 KB 7671/11111 KB 592/2078 KB 1776/2093 KB 1668/2578 KB \r", - "1216/1402 KB 7671/11111 KB 592/2078 KB 1776/2093 KB 1672/2578 KB \r", - "1216/1402 KB 7671/11111 KB 592/2078 KB 1776/2093 KB 1676/2578 KB \r", - "1216/1402 KB 7671/11111 KB 592/2078 KB 1776/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7675/11111 KB 592/2078 KB 1776/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7679/11111 KB 592/2078 KB 1776/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7683/11111 KB 592/2078 KB 1776/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7687/11111 KB 592/2078 KB 1776/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7687/11111 KB 592/2078 KB 1780/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7687/11111 KB 592/2078 KB 1784/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7687/11111 KB 592/2078 KB 1788/2093 KB 1680/2578 KB \r", - "1216/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1220/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1224/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1228/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1232/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1236/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1240/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1244/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 592/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 596/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 600/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 604/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 608/2078 KB 1792/2093 KB 1680/2578 KB \r", - "1248/1402 KB 7687/11111 KB 608/2078 KB 1792/2093 KB 1684/2578 KB \r", - "1248/1402 KB 7687/11111 KB 608/2078 KB 1792/2093 KB 1688/2578 KB \r", - "1248/1402 KB 7687/11111 KB 608/2078 KB 1792/2093 KB 1692/2578 KB \r", - "1248/1402 KB 7687/11111 KB 608/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7691/11111 KB 608/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7695/11111 KB 608/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7699/11111 KB 608/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 608/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 612/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 616/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 620/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1792/2093 KB 1696/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1792/2093 KB 1700/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1792/2093 KB 1704/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1792/2093 KB 1708/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1792/2093 KB 1712/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1796/2093 KB 1712/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1800/2093 KB 1712/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1804/2093 KB 1712/2578 KB \r", - "1248/1402 KB 7703/11111 KB 624/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1252/1402 KB 7703/11111 KB 624/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1256/1402 KB 7703/11111 KB 624/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1260/1402 KB 7703/11111 KB 624/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7703/11111 KB 624/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7703/11111 KB 628/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7703/11111 KB 632/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7703/11111 KB 636/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7703/11111 KB 640/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7707/11111 KB 640/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7711/11111 KB 640/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7715/11111 KB 640/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7719/11111 KB 640/2078 KB 1808/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7719/11111 KB 640/2078 KB 1812/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7719/11111 KB 640/2078 KB 1816/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7719/11111 KB 640/2078 KB 1820/2093 KB 1712/2578 KB \r", - "1264/1402 KB 7719/11111 KB 640/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1268/1402 KB 7719/11111 KB 640/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1272/1402 KB 7719/11111 KB 640/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1276/1402 KB 7719/11111 KB 640/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 640/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 644/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 648/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 652/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 656/2078 KB 1824/2093 KB 1712/2578 KB \r", - "1280/1402 KB 7719/11111 KB 656/2078 KB 1824/2093 KB 1716/2578 KB \r", - "1280/1402 KB 7719/11111 KB 656/2078 KB 1824/2093 KB 1720/2578 KB \r", - "1280/1402 KB 7719/11111 KB 656/2078 KB 1824/2093 KB 1724/2578 KB \r", - "1280/1402 KB 7719/11111 KB 656/2078 KB 1824/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7723/11111 KB 656/2078 KB 1824/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7727/11111 KB 656/2078 KB 1824/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7731/11111 KB 656/2078 KB 1824/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7735/11111 KB 656/2078 KB 1824/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7735/11111 KB 656/2078 KB 1828/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7735/11111 KB 656/2078 KB 1832/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7735/11111 KB 656/2078 KB 1836/2093 KB 1728/2578 KB \r", - "1280/1402 KB 7735/11111 KB 656/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1284/1402 KB 7735/11111 KB 656/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1288/1402 KB 7735/11111 KB 656/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1292/1402 KB 7735/11111 KB 656/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 656/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 660/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 664/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 668/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 672/2078 KB 1840/2093 KB 1728/2578 KB \r", - "1296/1402 KB 7735/11111 KB 672/2078 KB 1840/2093 KB 1732/2578 KB \r", - "1296/1402 KB 7735/11111 KB 672/2078 KB 1840/2093 KB 1736/2578 KB \r", - "1296/1402 KB 7735/11111 KB 672/2078 KB 1840/2093 KB 1740/2578 KB \r", - "1296/1402 KB 7735/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1296/1402 KB 7739/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1296/1402 KB 7743/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1296/1402 KB 7747/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1296/1402 KB 7751/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1300/1402 KB 7751/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1304/1402 KB 7751/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1308/1402 KB 7751/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 672/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 676/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 680/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 684/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 688/2078 KB 1840/2093 KB 1744/2578 KB \r", - "1312/1402 KB 7751/11111 KB 688/2078 KB 1840/2093 KB 1748/2578 KB \r", - "1312/1402 KB 7751/11111 KB 688/2078 KB 1840/2093 KB 1752/2578 KB \r", - "1312/1402 KB 7751/11111 KB 688/2078 KB 1840/2093 KB 1756/2578 KB \r", - "1312/1402 KB 7751/11111 KB 688/2078 KB 1840/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7755/11111 KB 688/2078 KB 1840/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7759/11111 KB 688/2078 KB 1840/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7763/11111 KB 688/2078 KB 1840/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7767/11111 KB 688/2078 KB 1840/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7767/11111 KB 688/2078 KB 1844/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7767/11111 KB 688/2078 KB 1848/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7767/11111 KB 688/2078 KB 1852/2093 KB 1760/2578 KB \r", - "1312/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1760/2578 KB \r", - "1316/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1760/2578 KB \r", - "1320/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1760/2578 KB \r", - "1324/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1760/2578 KB \r", - "1328/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1760/2578 KB \r", - "1328/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1764/2578 KB \r", - "1328/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1768/2578 KB \r", - "1328/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1772/2578 KB \r", - "1328/1402 KB 7767/11111 KB 688/2078 KB 1856/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7771/11111 KB 688/2078 KB 1856/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7775/11111 KB 688/2078 KB 1856/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7779/11111 KB 688/2078 KB 1856/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7783/11111 KB 688/2078 KB 1856/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7783/11111 KB 688/2078 KB 1860/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7783/11111 KB 688/2078 KB 1864/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7783/11111 KB 688/2078 KB 1868/2093 KB 1776/2578 KB \r", - "1328/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1776/2578 KB \r", - "1332/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1776/2578 KB \r", - "1336/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1776/2578 KB \r", - "1340/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1776/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1776/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1780/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1784/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1788/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1872/2093 KB 1792/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1876/2093 KB 1792/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1880/2093 KB 1792/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1884/2093 KB 1792/2578 KB \r", - "1344/1402 KB 7783/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1348/1402 KB 7783/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1352/1402 KB 7783/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1356/1402 KB 7783/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7783/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7787/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7791/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7795/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7799/11111 KB 688/2078 KB 1888/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7799/11111 KB 688/2078 KB 1892/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7799/11111 KB 688/2078 KB 1896/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7799/11111 KB 688/2078 KB 1900/2093 KB 1792/2578 KB \r", - "1360/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1792/2578 KB \r", - "1364/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1792/2578 KB \r", - "1368/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1792/2578 KB \r", - "1372/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1792/2578 KB \r", - "1376/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1792/2578 KB \r", - "1376/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1796/2578 KB \r", - "1376/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1800/2578 KB \r", - "1376/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1804/2578 KB \r", - "1376/1402 KB 7799/11111 KB 688/2078 KB 1904/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7803/11111 KB 688/2078 KB 1904/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7807/11111 KB 688/2078 KB 1904/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7811/11111 KB 688/2078 KB 1904/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7815/11111 KB 688/2078 KB 1904/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7815/11111 KB 688/2078 KB 1908/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7815/11111 KB 688/2078 KB 1912/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7815/11111 KB 688/2078 KB 1916/2093 KB 1808/2578 KB \r", - "1376/1402 KB 7815/11111 KB 688/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1380/1402 KB 7815/11111 KB 688/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1384/1402 KB 7815/11111 KB 688/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1388/1402 KB 7815/11111 KB 688/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 688/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 692/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 696/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 700/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 704/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 708/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 712/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 716/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 720/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 724/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 728/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 732/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 736/2078 KB 1920/2093 KB 1808/2578 KB \r", - "1392/1402 KB 7815/11111 KB 736/2078 KB 1920/2093 KB 1812/2578 KB \r", - "1392/1402 KB 7815/11111 KB 736/2078 KB 1920/2093 KB 1816/2578 KB \r", - "1392/1402 KB 7815/11111 KB 736/2078 KB 1920/2093 KB 1820/2578 KB \r", - "1392/1402 KB 7815/11111 KB 736/2078 KB 1920/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7819/11111 KB 736/2078 KB 1920/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7823/11111 KB 736/2078 KB 1920/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7827/11111 KB 736/2078 KB 1920/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7831/11111 KB 736/2078 KB 1920/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7831/11111 KB 736/2078 KB 1924/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7831/11111 KB 736/2078 KB 1928/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7831/11111 KB 736/2078 KB 1932/2093 KB 1824/2578 KB \r", - "1392/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1824/2578 KB \r", - "1396/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1824/2578 KB \r", - "1400/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1824/2578 KB \r", - "1402/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1824/2578 KB \r", - "1402/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1828/2578 KB \r", - "1402/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1832/2578 KB \r", - "1402/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1836/2578 KB \r", - "1402/1402 KB 7831/11111 KB 736/2078 KB 1936/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7835/11111 KB 736/2078 KB 1936/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7839/11111 KB 736/2078 KB 1936/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7843/11111 KB 736/2078 KB 1936/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7847/11111 KB 736/2078 KB 1936/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7847/11111 KB 736/2078 KB 1940/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7847/11111 KB 736/2078 KB 1944/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7847/11111 KB 736/2078 KB 1948/2093 KB 1840/2578 KB \r", - "1402/1402 KB 7847/11111 KB 736/2078 KB 1952/2093 KB 1840/2578 KB \r", - " \r", - "Downloaded: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-macosx-x86_64.jar (1402 KB at 29.2 KB/sec)\r\n", - "Downloading: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-linux-ppc64le.jar\r\n" + "Downloading: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-windows-x86_64.jar\n", + "Downloaded: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-macosx-x86_64.jar (1402 KB at 29.2 KB/sec) KB 1456/2578 KB \n", + "Downloading: https://repo.maven.apache.org/maven2/org/nd4j/nd4j-native/0.9.1/nd4j-native-0.9.1-linux-ppc64le.jar\n" ] }, { @@ -4100,249 +3184,13 @@ "!minikube start --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 11:14:58 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.106.188.235 443/TCP 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 11:19:48 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-47rk7 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-d4smm 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-gbdrr 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.99.142.81 8877/TCP 0s\n", - "ambassador LoadBalancer 10.101.199.210 80:30273/TCP,443:30467/TCP 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -8844,7 +7692,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/keras_mnist/keras_mnist.ipynb b/examples/models/keras_mnist/keras_mnist.ipynb index b976c1c131..fdf17e95a9 100644 --- a/examples/models/keras_mnist/keras_mnist.ipynb +++ b/examples/models/keras_mnist/keras_mnist.ipynb @@ -581,230 +581,13 @@ "!minikube start --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Fri May 3 19:38:47 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.135.115 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri May 3 19:40:12 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-f7prg 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-jkbtz 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-mjgj8 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.100.85.59 8877/TCP 0s\n", - "ambassador LoadBalancer 10.109.230.160 80:31635/TCP,443:30969/TCP 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1068,7 +851,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/mean_classifier_with_custom_endpoints/mean_classifier_with_custom_endpoints.ipynb b/examples/models/mean_classifier_with_custom_endpoints/mean_classifier_with_custom_endpoints.ipynb index ce4d33a049..32585b8504 100644 --- a/examples/models/mean_classifier_with_custom_endpoints/mean_classifier_with_custom_endpoints.ipynb +++ b/examples/models/mean_classifier_with_custom_endpoints/mean_classifier_with_custom_endpoints.ipynb @@ -346,136 +346,12 @@ ] }, { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "#\n", - "# Create a cluster-admin role binding\n", - "#\n", - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu May 9 16:16:47 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.198.177 443/TCP 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 17, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -554,107 +430,12 @@ } ], "source": [ - "!helm install ../../../helm-charts/seldon-core-analytics --name seldon-core-analytics \\\n", + "!helm install seldon-core-analytics ../../../helm-charts/seldon-core-analytics \\\n", " --set grafana_prom_admin_password=password \\\n", " --set persistence.enabled=false \\\n", " --set prometheus.service_type=NodePort" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu May 9 16:17:06 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.97.163.140 8877/TCP 0s\n", - "ambassador LoadBalancer 10.107.81.103 80:32071/TCP,443:31991/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-4sv7q 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-9f87w 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-djx76 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, { "cell_type": "code", "execution_count": 21, @@ -843,7 +624,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/mlflow_model/mlflow.ipynb b/examples/models/mlflow_model/mlflow.ipynb index 3a30e40a6d..fbbcefb663 100644 --- a/examples/models/mlflow_model/mlflow.ipynb +++ b/examples/models/mlflow_model/mlflow.ipynb @@ -372,249 +372,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 14:39:51 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.96.202.141 443/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 14:40:42 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-ph44v 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-q4jfn 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-qdc9t 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.101.35.185 8877/TCP 1s\n", - "ambassador LoadBalancer 10.108.206.144 80:30921/TCP,443:30522/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -883,7 +647,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/mlflow_server_ab_test_ambassador/mlflow_server_ab_test_ambassador.ipynb b/examples/models/mlflow_server_ab_test_ambassador/mlflow_server_ab_test_ambassador.ipynb index 1f7b1e3d8a..3688a6f7b6 100644 --- a/examples/models/mlflow_server_ab_test_ambassador/mlflow_server_ab_test_ambassador.ipynb +++ b/examples/models/mlflow_server_ab_test_ambassador/mlflow_server_ab_test_ambassador.ipynb @@ -42,7 +42,7 @@ "\n", "In regards to other dependencies, make sure you have installed:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* kubectl v1.14+\n", "* Python 3.6+\n", "* MLFlow 1.1.0\n", @@ -588,12 +588,22 @@ "source": [ "## 2. Deploy your model using the Pre-packaged Moldel Server for MLFlow\n", "\n", - "Once you have a Kubernetes Cluster running with [Seldon](https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html) and [Ambassador](https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html#install-ambassador) running we can deploy our trained MLFlow model.\n", + "Now we can deploy our trained MLFlow model.\n", + "\n", "For this we have to create a Seldon definition of the model server definition, which we will break down further below.\n", "\n", "We will be using the model we updated to our google bucket (gs://seldon-models/mlflow/elasticnet_wine), but you can use your model if you uploaded it to a public bucket." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." + ] + }, { "cell_type": "code", "execution_count": 27, diff --git a/examples/models/nodejs_mnist/nodejs_mnist.ipynb b/examples/models/nodejs_mnist/nodejs_mnist.ipynb index 50e4f5a567..7684fb3e26 100644 --- a/examples/models/nodejs_mnist/nodejs_mnist.ipynb +++ b/examples/models/nodejs_mnist/nodejs_mnist.ipynb @@ -108,14 +108,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1G-------------------------------------------------------------------------: 152.4\u001b[0K\u001b[1G-------------------------------------------------------------------------: 145.1\u001b[0K\u001b[1G>------------------------------------------------------------------------: 143.2\u001b[0K\u001b[1G>------------------------------------------------------------------------: 147.7\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.9\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.5\u001b[0K\u001b[1G>------------------------------------------------------------------------: 148.6\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.7\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 144.8\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 144.6\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 143.8\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 142.5\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 142.6\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 141.2\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 139.6\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.5\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.3\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.0\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 137.1\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 137.1\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 136.3\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.5\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.8\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.8\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 136.1\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 136.0\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.9\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.4\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.9\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.4\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.5\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.0\u001b[0K\u001b[1G======>------------------------------------------------------------------: 134.6\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.1\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 133.7\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 135.2\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.9\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.9\u001b[0K\u001b[1G========>----------------------------------------------------------------: 135.3\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.8\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 134.6\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 134.0\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 133.5\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 133.2\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 132.6\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 132.2\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 132.1\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.8\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.4\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.1\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 130.7\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 130.2\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 130.0\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 129.6\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 129.1\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 128.9\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 128.6\u001b[0K\u001b[1G============>------------------------------------------------------------: 128.2\u001b[0K\u001b[1G============>------------------------------------------------------------: 128.0\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.7\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.5\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.0\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 126.4\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 126.1\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.7\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.5\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.2\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 124.7\u001b[0K\u001b[1G==============>----------------------------------------------------------: 124.3\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.8\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.4\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.1\u001b[0K\u001b[1G==============>----------------------------------------------------------: 122.8\u001b[0K\u001b[1G===============>---------------------------------------------------------: 122.4\u001b[0K\u001b[1G===============>---------------------------------------------------------: 122.1\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.9\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.6\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.2\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.0\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.6\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.2\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.0\u001b[0K\u001b[1G================>--------------------------------------------------------: 119.5\u001b[0K\u001b[1G================>--------------------------------------------------------: 119.0\u001b[0K\u001b[1G=================>-------------------------------------------------------: 118.7\u001b[0K" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1G=================>-------------------------------------------------------: 118.2\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.8\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.5\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.0\u001b[0K\u001b[1G=================>-------------------------------------------------------: 116.6\u001b[0K\u001b[1G==================>------------------------------------------------------: 116.3\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.9\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.5\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.2\u001b[0K\u001b[1G==================>------------------------------------------------------: 114.8\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.6\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.2\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.0\u001b[0K\u001b[1G===================>-----------------------------------------------------: 113.7\u001b[0K\u001b[1G===================>-----------------------------------------------------: 113.3\u001b[0K\u001b[1G===================>-----------------------------------------------------: 112.8\u001b[0K\u001b[1G====================>----------------------------------------------------: 112.5\u001b[0K\u001b[1G====================>----------------------------------------------------: 112.1\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.7\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.4\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.0\u001b[0K\u001b[1G=====================>---------------------------------------------------: 110.7\u001b[0K\u001b[1G=====================>---------------------------------------------------: 110.3\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.8\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.4\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.0\u001b[0K\u001b[1G======================>--------------------------------------------------: 108.5\u001b[0K\u001b[1G======================>--------------------------------------------------: 108.1\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.8\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.4\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.0\u001b[0K\u001b[1G======================>--------------------------------------------------: 106.7\u001b[0K\u001b[1G=======================>-------------------------------------------------: 106.2\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.8\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.5\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.4\u001b[0K\u001b[1G========================>------------------------------------------------: 105.0\u001b[0K\u001b[1G========================>------------------------------------------------: 104.6\u001b[0K\u001b[1G========================>------------------------------------------------: 104.2\u001b[0K\u001b[1G========================>------------------------------------------------: 103.8\u001b[0K\u001b[1G========================>------------------------------------------------: 103.3\u001b[0K\u001b[1G========================>------------------------------------------------: 102.9\u001b[0K\u001b[1G=========================>-----------------------------------------------: 102.5\u001b[0K\u001b[1G=========================>-----------------------------------------------: 102.0\u001b[0K\u001b[1G=========================>-----------------------------------------------: 101.7\u001b[0K\u001b[1G=========================>-----------------------------------------------: 101.3\u001b[0K\u001b[1G=========================>-----------------------------------------------: 100.9\u001b[0K\u001b[1G==========================>----------------------------------------------: 100.5\u001b[0K\u001b[1G==========================>----------------------------------------------: 100.1\u001b[0K\u001b[1G==========================>-----------------------------------------------: 99.7\u001b[0K\u001b[1G==========================>-----------------------------------------------: 99.2\u001b[0K\u001b[1G===========================>----------------------------------------------: 98.8\u001b[0K\u001b[1G===========================>----------------------------------------------: 98.3\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.9\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.5\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.1\u001b[0K\u001b[1G============================>---------------------------------------------: 96.7\u001b[0K\u001b[1G============================>---------------------------------------------: 96.3\u001b[0K\u001b[1G============================>---------------------------------------------: 95.8\u001b[0K\u001b[1G============================>---------------------------------------------: 95.4\u001b[0K\u001b[1G============================>---------------------------------------------: 95.0\u001b[0K\u001b[1G============================>---------------------------------------------: 94.6\u001b[0K\u001b[1G=============================>--------------------------------------------: 94.2\u001b[0K\u001b[1G=============================>--------------------------------------------: 93.7\u001b[0K\u001b[1G=============================>--------------------------------------------: 93.3\u001b[0K\u001b[1G=============================>--------------------------------------------: 92.9\u001b[0K\u001b[1G=============================>--------------------------------------------: 92.5\u001b[0K\u001b[1G==============================>-------------------------------------------: 92.1\u001b[0K\u001b[1G==============================>-------------------------------------------: 91.7\u001b[0K\u001b[1G==============================>-------------------------------------------: 91.4\u001b[0K\u001b[1G==============================>-------------------------------------------: 90.9\u001b[0K\u001b[1G==============================>-------------------------------------------: 90.6\u001b[0K\u001b[1G===============================>------------------------------------------: 90.2\u001b[0K\u001b[1G===============================>------------------------------------------: 89.8\u001b[0K\u001b[1G===============================>------------------------------------------: 89.4\u001b[0K\u001b[1G===============================>------------------------------------------: 89.0\u001b[0K\u001b[1G===============================>------------------------------------------: 88.5\u001b[0K\u001b[1G===============================>------------------------------------------: 88.1\u001b[0K\u001b[1G================================>-----------------------------------------: 87.7\u001b[0K\u001b[1G================================>-----------------------------------------: 87.3\u001b[0K\u001b[1G================================>-----------------------------------------: 86.9\u001b[0K\u001b[1G================================>-----------------------------------------: 86.5\u001b[0K\u001b[1G================================>-----------------------------------------: 86.0\u001b[0K\u001b[1G=================================>----------------------------------------: 85.7\u001b[0K\u001b[1G=================================>----------------------------------------: 85.2\u001b[0K\u001b[1G=================================>----------------------------------------: 84.8\u001b[0K\u001b[1G=================================>----------------------------------------: 84.5\u001b[0K\u001b[1G=================================>----------------------------------------: 84.0\u001b[0K\u001b[1G=================================>----------------------------------------: 83.6\u001b[0K\u001b[1G==================================>---------------------------------------: 83.2\u001b[0K\u001b[1G==================================>---------------------------------------: 82.8\u001b[0K\u001b[1G==================================>---------------------------------------: 82.4\u001b[0K\u001b[1G==================================>---------------------------------------: 82.0\u001b[0K\u001b[1G==================================>---------------------------------------: 81.6\u001b[0K" + "\u001b[1G-------------------------------------------------------------------------: 152.4\u001b[0K\u001b[1G-------------------------------------------------------------------------: 145.1\u001b[0K\u001b[1G>------------------------------------------------------------------------: 143.2\u001b[0K\u001b[1G>------------------------------------------------------------------------: 147.7\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.9\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.5\u001b[0K\u001b[1G>------------------------------------------------------------------------: 148.6\u001b[0K\u001b[1G>------------------------------------------------------------------------: 146.7\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 144.8\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 144.6\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 143.8\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 142.5\u001b[0K\u001b[1G=>-----------------------------------------------------------------------: 142.6\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 141.2\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 139.6\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.5\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.3\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 138.0\u001b[0K\u001b[1G==>----------------------------------------------------------------------: 137.1\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 137.1\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 136.3\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.5\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G===>---------------------------------------------------------------------: 135.8\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.8\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 136.1\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 136.0\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.9\u001b[0K\u001b[1G====>--------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.4\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.7\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.9\u001b[0K\u001b[1G=====>-------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.4\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.5\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.6\u001b[0K\u001b[1G======>------------------------------------------------------------------: 135.0\u001b[0K\u001b[1G======>------------------------------------------------------------------: 134.6\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.1\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 133.7\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G=======>-----------------------------------------------------------------: 135.2\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.9\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.5\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.9\u001b[0K\u001b[1G========>----------------------------------------------------------------: 135.3\u001b[0K\u001b[1G========>----------------------------------------------------------------: 134.8\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 134.6\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 134.0\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 133.5\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 133.2\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 132.6\u001b[0K\u001b[1G=========>---------------------------------------------------------------: 132.2\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 132.1\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.8\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.4\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 131.1\u001b[0K\u001b[1G==========>--------------------------------------------------------------: 130.7\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 130.2\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 130.0\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 129.6\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 129.1\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 128.9\u001b[0K\u001b[1G===========>-------------------------------------------------------------: 128.6\u001b[0K\u001b[1G============>------------------------------------------------------------: 128.2\u001b[0K\u001b[1G============>------------------------------------------------------------: 128.0\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.7\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.5\u001b[0K\u001b[1G============>------------------------------------------------------------: 127.0\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 126.4\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 126.1\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.7\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.5\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 125.2\u001b[0K\u001b[1G=============>-----------------------------------------------------------: 124.7\u001b[0K\u001b[1G==============>----------------------------------------------------------: 124.3\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.8\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.4\u001b[0K\u001b[1G==============>----------------------------------------------------------: 123.1\u001b[0K\u001b[1G==============>----------------------------------------------------------: 122.8\u001b[0K\u001b[1G===============>---------------------------------------------------------: 122.4\u001b[0K\u001b[1G===============>---------------------------------------------------------: 122.1\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.9\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.6\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.2\u001b[0K\u001b[1G===============>---------------------------------------------------------: 121.0\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.6\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.2\u001b[0K\u001b[1G================>--------------------------------------------------------: 120.0\u001b[0K\u001b[1G================>--------------------------------------------------------: 119.5\u001b[0K\u001b[1G================>--------------------------------------------------------: 119.0\u001b[0K\u001b[1G=================>-------------------------------------------------------: 118.7\u001b[0K\u001b[1G=================>-------------------------------------------------------: 118.2\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.8\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.5\u001b[0K\u001b[1G=================>-------------------------------------------------------: 117.0\u001b[0K\u001b[1G=================>-------------------------------------------------------: 116.6\u001b[0K\u001b[1G==================>------------------------------------------------------: 116.3\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.9\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.5\u001b[0K\u001b[1G==================>------------------------------------------------------: 115.2\u001b[0K\u001b[1G==================>------------------------------------------------------: 114.8\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.6\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.2\u001b[0K\u001b[1G===================>-----------------------------------------------------: 114.0\u001b[0K\u001b[1G===================>-----------------------------------------------------: 113.7\u001b[0K\u001b[1G===================>-----------------------------------------------------: 113.3\u001b[0K\u001b[1G===================>-----------------------------------------------------: 112.8\u001b[0K\u001b[1G====================>----------------------------------------------------: 112.5\u001b[0K\u001b[1G====================>----------------------------------------------------: 112.1\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.7\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.4\u001b[0K\u001b[1G====================>----------------------------------------------------: 111.0\u001b[0K\u001b[1G=====================>---------------------------------------------------: 110.7\u001b[0K\u001b[1G=====================>---------------------------------------------------: 110.3\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.8\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.4\u001b[0K\u001b[1G=====================>---------------------------------------------------: 109.0\u001b[0K\u001b[1G======================>--------------------------------------------------: 108.5\u001b[0K\u001b[1G======================>--------------------------------------------------: 108.1\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.8\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.4\u001b[0K\u001b[1G======================>--------------------------------------------------: 107.0\u001b[0K\u001b[1G======================>--------------------------------------------------: 106.7\u001b[0K\u001b[1G=======================>-------------------------------------------------: 106.2\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.8\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.5\u001b[0K\u001b[1G=======================>-------------------------------------------------: 105.4\u001b[0K\u001b[1G========================>------------------------------------------------: 105.0\u001b[0K\u001b[1G========================>------------------------------------------------: 104.6\u001b[0K\u001b[1G========================>------------------------------------------------: 104.2\u001b[0K\u001b[1G========================>------------------------------------------------: 103.8\u001b[0K\u001b[1G========================>------------------------------------------------: 103.3\u001b[0K\u001b[1G========================>------------------------------------------------: 102.9\u001b[0K\u001b[1G=========================>-----------------------------------------------: 102.5\u001b[0K\u001b[1G=========================>-----------------------------------------------: 102.0\u001b[0K\u001b[1G=========================>-----------------------------------------------: 101.7\u001b[0K\u001b[1G=========================>-----------------------------------------------: 101.3\u001b[0K\u001b[1G=========================>-----------------------------------------------: 100.9\u001b[0K\u001b[1G==========================>----------------------------------------------: 100.5\u001b[0K\u001b[1G==========================>----------------------------------------------: 100.1\u001b[0K\u001b[1G==========================>-----------------------------------------------: 99.7\u001b[0K\u001b[1G==========================>-----------------------------------------------: 99.2\u001b[0K\u001b[1G===========================>----------------------------------------------: 98.8\u001b[0K\u001b[1G===========================>----------------------------------------------: 98.3\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.9\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.5\u001b[0K\u001b[1G===========================>----------------------------------------------: 97.1\u001b[0K\u001b[1G============================>---------------------------------------------: 96.7\u001b[0K\u001b[1G============================>---------------------------------------------: 96.3\u001b[0K\u001b[1G============================>---------------------------------------------: 95.8\u001b[0K\u001b[1G============================>---------------------------------------------: 95.4\u001b[0K\u001b[1G============================>---------------------------------------------: 95.0\u001b[0K\u001b[1G============================>---------------------------------------------: 94.6\u001b[0K\u001b[1G=============================>--------------------------------------------: 94.2\u001b[0K\u001b[1G=============================>--------------------------------------------: 93.7\u001b[0K\u001b[1G=============================>--------------------------------------------: 93.3\u001b[0K\u001b[1G=============================>--------------------------------------------: 92.9\u001b[0K\u001b[1G=============================>--------------------------------------------: 92.5\u001b[0K\u001b[1G==============================>-------------------------------------------: 92.1\u001b[0K\u001b[1G==============================>-------------------------------------------: 91.7\u001b[0K\u001b[1G==============================>-------------------------------------------: 91.4\u001b[0K\u001b[1G==============================>-------------------------------------------: 90.9\u001b[0K\u001b[1G==============================>-------------------------------------------: 90.6\u001b[0K\u001b[1G===============================>------------------------------------------: 90.2\u001b[0K\u001b[1G===============================>------------------------------------------: 89.8\u001b[0K\u001b[1G===============================>------------------------------------------: 89.4\u001b[0K\u001b[1G===============================>------------------------------------------: 89.0\u001b[0K\u001b[1G===============================>------------------------------------------: 88.5\u001b[0K\u001b[1G===============================>------------------------------------------: 88.1\u001b[0K\u001b[1G================================>-----------------------------------------: 87.7\u001b[0K\u001b[1G================================>-----------------------------------------: 87.3\u001b[0K\u001b[1G================================>-----------------------------------------: 86.9\u001b[0K\u001b[1G================================>-----------------------------------------: 86.5\u001b[0K\u001b[1G================================>-----------------------------------------: 86.0\u001b[0K\u001b[1G=================================>----------------------------------------: 85.7\u001b[0K\u001b[1G=================================>----------------------------------------: 85.2\u001b[0K\u001b[1G=================================>----------------------------------------: 84.8\u001b[0K\u001b[1G=================================>----------------------------------------: 84.5\u001b[0K\u001b[1G=================================>----------------------------------------: 84.0\u001b[0K\u001b[1G=================================>----------------------------------------: 83.6\u001b[0K\u001b[1G==================================>---------------------------------------: 83.2\u001b[0K\u001b[1G==================================>---------------------------------------: 82.8\u001b[0K\u001b[1G==================================>---------------------------------------: 82.4\u001b[0K\u001b[1G==================================>---------------------------------------: 82.0\u001b[0K\u001b[1G==================================>---------------------------------------: 81.6\u001b[0K" ] }, { @@ -2083,250 +2076,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 15:29:41 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.107.173.100 443/TCP 1s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 15:30:27 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-b2snz 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-ktd9h 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-x8tcg 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.98.139.122 8877/TCP 0s\n", - "ambassador LoadBalancer 10.98.135.113 80:31109/TCP,443:30421/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -3338,7 +3094,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/nodejs_tensorflow/nodejs_tensorflow.ipynb b/examples/models/nodejs_tensorflow/nodejs_tensorflow.ipynb index 54d3f76566..bdc370df9a 100644 --- a/examples/models/nodejs_tensorflow/nodejs_tensorflow.ipynb +++ b/examples/models/nodejs_tensorflow/nodejs_tensorflow.ipynb @@ -440,230 +440,13 @@ "!minikube start --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Fri May 10 07:06:05 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.104.23.226 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri May 10 07:06:20 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.102.250.208 8877/TCP 0s\n", - "ambassador LoadBalancer 10.111.31.208 80:31312/TCP,443:32348/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-97jqg 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-lhd5t 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-nzr6d 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -841,7 +624,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/nvidia-mnist/nvidia_mnist.ipynb b/examples/models/nvidia-mnist/nvidia_mnist.ipynb index b78c7e7e52..0b8613647c 100644 --- a/examples/models/nvidia-mnist/nvidia_mnist.ipynb +++ b/examples/models/nvidia-mnist/nvidia_mnist.ipynb @@ -622,283 +622,35 @@ "## Run MNIST Inference Graph" ] }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"gke_seldon-demos_europe-west4-a_myinferenceserver\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 19:19:04 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 2s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 2s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-spartakus-volunteer-57647c7679-z9fvw 0/1 ContainerCreating 0 0s\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.15.255.125 443/TCP 2s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 1 1 0 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --set engine.port=7000 --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 17:35:27 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.15.252.67 8877/TCP 0s\n", - "ambassador LoadBalancer 10.15.251.65 80:31240/TCP,443:31402/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-7fb5454fb8-bxp7g 0/1 ContainerCreating 0 0s\n", - "ambassador-7fb5454fb8-flzbj 1/1 Terminating 0 3m\n", - "ambassador-7fb5454fb8-jqkxk 0/1 ContainerCreating 0 0s\n", - "ambassador-7fb5454fb8-kfbls 0/1 Terminating 0 3m\n", - "ambassador-7fb5454fb8-mnxrj 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "NAME: nvidia-mnist\n", - "LAST DEPLOYED: Tue Apr 16 19:19:38 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1alpha2/SeldonDeployment\n", - "NAME AGE\n", - "nvidia-mnist 1s\n", - "\n", - "\n" + "NAME: nvidia-mnist\r\n", + "LAST DEPLOYED: Wed Dec 4 10:31:29 2019\r\n", + "NAMESPACE: default\r\n", + "STATUS: deployed\r\n", + "REVISION: 1\r\n", + "TEST SUITE: None\r\n" ] } ], "source": [ - "!helm install nvidia-mnist --namespace seldon --name nvidia-mnist --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}" + "!helm install nvidia-mnist nvidia-mnist --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}" ] }, { @@ -907,7 +659,7 @@ "metadata": {}, "outputs": [], "source": [ - "!helm template nvidia-mnist --name nvidia-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET} > mnist.json" + "!helm template nvidia-mnist nvidia-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET} > mnist.json" ] }, { @@ -1291,7 +1043,7 @@ } ], "source": [ - "!helm install ../../../helm-charts/seldon-core-analytics --name seldon-core-analytics \\\n", + "!helm install seldon-core-analytics ../../../helm-charts/seldon-core-analytics \\\n", " --set grafana_prom_admin_password=password \\\n", " --set persistence.enabled=false \\\n", " --namespace seldon" @@ -1348,7 +1100,7 @@ } ], "source": [ - "!helm install seldon-core-loadtesting --name loadtest \\\n", + "!helm install loadtest seldon-core-loadtesting \\\n", " --namespace seldon \\\n", " --repo https://storage.googleapis.com/seldon-charts \\\n", " --set locust.script=mnist_rest_locust.py \\\n", @@ -1404,7 +1156,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/onnx_resnet50/onnx_resnet50.ipynb b/examples/models/onnx_resnet50/onnx_resnet50.ipynb index 53b505e629..2a3f592236 100644 --- a/examples/models/onnx_resnet50/onnx_resnet50.ipynb +++ b/examples/models/onnx_resnet50/onnx_resnet50.ipynb @@ -3387,230 +3387,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Wed Apr 24 16:04:55 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.109.6.84 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed Apr 24 16:05:49 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.100.104.84 8877/TCP 0s\n", - "ambassador LoadBalancer 10.100.39.238 80:30316/TCP,443:30972/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-6nr2m 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-9xp9c 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-hhd49 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -6788,7 +6571,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/openvino/openvino-squeezenet.ipynb b/examples/models/openvino/openvino-squeezenet.ipynb index 3b768a0fb3..19f0cdf85e 100644 --- a/examples/models/openvino/openvino-squeezenet.ipynb +++ b/examples/models/openvino/openvino-squeezenet.ipynb @@ -116,260 +116,13 @@ "!minikube start --memory 4096 --disk-size 20g --extra-config=apiserver.authorization-mode=RBAC" ] }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Wed Apr 24 14:30:26 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.106.190.234 443/TCP 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed Apr 24 14:30:56 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.96.174.103 8877/TCP 0s\n", - "ambassador LoadBalancer 10.103.89.121 80:30996/TCP,443:31363/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-45vms 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-c66rn 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-c8p8k 0/1 Pending 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"ambassador\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -424,7 +177,7 @@ } ], "source": [ - "!helm install ../../../helm-charts/seldon-openvino --name=openvino-squeezenet \\\n", + "!helm install openvino-squeezenet ../../../helm-charts/seldon-openvino \\\n", " --set openvino.model.path=/opt/ml/squeezenet \\\n", " --set openvino.model.name=squeezenet1.1 \\\n", " --set openvino.model.input=data \\\n", @@ -599,7 +352,7 @@ } ], "source": [ - "!helm template ../../../helm-charts/seldon-openvino --name=openvino-squeezenet \\\n", + "!helm template openvino-squeezenet ../../../helm-charts/seldon-openvino \\\n", " --set openvino.model.path=/opt/ml/squeezenet \\\n", " --set openvino.model.name=squeezenet1.1 \\\n", " --set openvino.model.input=data \\\n", @@ -724,7 +477,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/openvino_imagenet_ensemble/openvino_imagenet_ensemble.ipynb b/examples/models/openvino_imagenet_ensemble/openvino_imagenet_ensemble.ipynb index e3835488b8..d00a4394ce 100644 --- a/examples/models/openvino_imagenet_ensemble/openvino_imagenet_ensemble.ipynb +++ b/examples/models/openvino_imagenet_ensemble/openvino_imagenet_ensemble.ipynb @@ -63,263 +63,13 @@ "!minikube start --memory 4096 --cpus 4 --disk-size 20g" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Wed Apr 24 15:19:35 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.107.189.217 443/TCP 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed Apr 24 15:20:31 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.110.65.117 8877/TCP 0s\n", - "ambassador LoadBalancer 10.96.204.128 80:32059/TCP,443:31261/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-46tmd 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-dlvhg 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-nhzj2 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1289,7 +1039,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/r_iris/r_iris.ipynb b/examples/models/r_iris/r_iris.ipynb index eb34f16a49..487bc1dda8 100644 --- a/examples/models/r_iris/r_iris.ipynb +++ b/examples/models/r_iris/r_iris.ipynb @@ -244,229 +244,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu Apr 25 07:50:01 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.98.14.111 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Apr 25 07:50:50 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.101.39.122 8877/TCP 0s\n", - "ambassador LoadBalancer 10.101.95.247 80:31868/TCP,443:32659/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-gvbx4 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-qgs78 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-xzzjc 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -687,7 +471,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/r_mnist/r_mnist.ipynb b/examples/models/r_mnist/r_mnist.ipynb index d4732249ea..92b96e8c96 100644 --- a/examples/models/r_mnist/r_mnist.ipynb +++ b/examples/models/r_mnist/r_mnist.ipynb @@ -334,197 +334,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Wed Apr 24 16:36:50 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.110.57.111 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Wed Apr 24 16:37:34 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-5rmss 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-kzmp2 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-qmf7z 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.98.164.148 8877/TCP 0s\n", - "ambassador LoadBalancer 10.111.173.75 80:30659/TCP,443:31171/TCP 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -733,7 +549,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/sagemaker/sagemaker_seldon_scikit_iris_example.ipynb b/examples/models/sagemaker/sagemaker_seldon_scikit_iris_example.ipynb index e61f7bc2a1..ecfccd51f1 100644 --- a/examples/models/sagemaker/sagemaker_seldon_scikit_iris_example.ipynb +++ b/examples/models/sagemaker/sagemaker_seldon_scikit_iris_example.ipynb @@ -1618,229 +1618,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu Apr 25 08:04:38 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.114.155 443/TCP 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Apr 25 08:05:20 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.99.152.6 8877/TCP 0s\n", - "ambassador LoadBalancer 10.99.132.110 80:31299/TCP,443:32655/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-jbmnk 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-khqmn 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-kjl4k 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -3276,7 +3060,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/sk_mnist/skmnist.ipynb b/examples/models/sk_mnist/skmnist.ipynb index b75a25ed6c..603f428f32 100644 --- a/examples/models/sk_mnist/skmnist.ipynb +++ b/examples/models/sk_mnist/skmnist.ipynb @@ -397,229 +397,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu Apr 25 09:09:18 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 1s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 1s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.108.139.240 443/TCP 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Apr 25 09:09:56 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.102.85.86 8877/TCP 0s\n", - "ambassador LoadBalancer 10.98.255.212 80:31305/TCP,443:32008/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-947t9 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-bqqbp 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-nj5rf 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -882,7 +666,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/sklearn_iris/sklearn_iris.ipynb b/examples/models/sklearn_iris/sklearn_iris.ipynb index fe5cf7fc4e..b9f9e79624 100644 --- a/examples/models/sklearn_iris/sklearn_iris.ipynb +++ b/examples/models/sklearn_iris/sklearn_iris.ipynb @@ -424,229 +424,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu Apr 25 09:02:59 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.106.80.138 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu Apr 25 09:03:43 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.107.239.6 8877/TCP 0s\n", - "ambassador LoadBalancer 10.97.236.148 80:30062/TCP,443:30447/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-8rjms 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-fvqjc 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-wr55x 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -816,7 +600,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/sklearn_iris_fbs/sklearn_iris.ipynb b/examples/models/sklearn_iris_fbs/sklearn_iris.ipynb index e3b23a52be..db2a1690ea 100644 --- a/examples/models/sklearn_iris_fbs/sklearn_iris.ipynb +++ b/examples/models/sklearn_iris_fbs/sklearn_iris.ipynb @@ -140,7 +140,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/sklearn_iris_jsondata/sklearn_iris_jsondata.ipynb b/examples/models/sklearn_iris_jsondata/sklearn_iris_jsondata.ipynb index f27c13f3b5..58aa742080 100644 --- a/examples/models/sklearn_iris_jsondata/sklearn_iris_jsondata.ipynb +++ b/examples/models/sklearn_iris_jsondata/sklearn_iris_jsondata.ipynb @@ -250,263 +250,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/gsunner/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Jul 9 11:32:59 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.98.37.166 443/TCP 0s\n", - "webhook-server-service ClusterIP 10.105.235.39 443/TCP 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 1 1 0 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-spartakus-volunteer-7d6dd98f89-dzr5k 0/1 ContainerCreating 0 0s\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 1 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 0s\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Jul 9 11:33:20 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.111.150.168 8877/TCP 0s\n", - "ambassador LoadBalancer 10.108.34.71 80:30241/TCP,443:32292/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-78bd586dc9-9r6f7 0/1 ContainerCreating 0 0s\n", - "ambassador-78bd586dc9-hwcp4 0/1 ContainerCreating 0 0s\n", - "ambassador-78bd586dc9-kctmz 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "modules.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "authservices.getambassador.io 1s\n", - "consulresolvers.getambassador.io 1s\n", - "kubernetesendpointresolvers.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 0s\n", - "kubernetesserviceresolvers.getambassador.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { diff --git a/examples/models/sklearn_iris_multipart_formdata/sklearn_iris_multipart_formdata.ipynb b/examples/models/sklearn_iris_multipart_formdata/sklearn_iris_multipart_formdata.ipynb index 5857aa1d66..d2bc84832e 100644 --- a/examples/models/sklearn_iris_multipart_formdata/sklearn_iris_multipart_formdata.ipynb +++ b/examples/models/sklearn_iris_multipart_formdata/sklearn_iris_multipart_formdata.ipynb @@ -235,255 +235,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io \"kube-system-cluster-admin\" created\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /Users/lkuma37/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Fri Aug 2 00:26:15 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-config 1 1s\n", - "seldon-spartakus-config 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "seldon-spartakus-volunteer-df68b9d48-h2qbb 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.107.117.224 443/TCP 0s\n", - "webhook-server-service ClusterIP 10.98.171.142 443/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "#!helm delete --purge seldon-core\n", - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri Aug 2 00:27:11 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-d7c4cb5f9-frgcx 0/1 ContainerCreating 0 0s\n", - "ambassador-d7c4cb5f9-jzb58 0/1 ContainerCreating 0 0s\n", - "ambassador-d7c4cb5f9-n4lp7 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.103.254.55 80:32306/TCP,443:32061/TCP 0s\n", - "ambassador-admins ClusterIP 10.108.204.21 8877/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "#!helm delete --purge ambassador\n", - "!helm install stable/ambassador --name ambassador --set crds.keep=false --set image.tag=0.40.2" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -702,7 +460,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.0" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/sklearn_spacy_text/sklearn_spacy_text_classifier_example.ipynb b/examples/models/sklearn_spacy_text/sklearn_spacy_text_classifier_example.ipynb index 3b0ee16283..84928f06a5 100644 --- a/examples/models/sklearn_spacy_text/sklearn_spacy_text_classifier_example.ipynb +++ b/examples/models/sklearn_spacy_text/sklearn_spacy_text_classifier_example.ipynb @@ -32,7 +32,7 @@ "### Before you start\n", "Make sure you install the following dependencies, as they are critical for this example to work:\n", "\n", - "* Helm v2.13.1+\n", + "* Helm v3.0.0+\n", "* A Kubernetes cluster running v1.13 or above (minkube / docker-for-windows work well if enough RAM)\n", "* kubectl v1.14+\n", "* Python 3.6+\n", @@ -813,225 +813,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 4) Run Seldon in your kubernetes cluster\n", - "In order to run Seldon we need to make sure that Helm is initialised and Tiller is running. \n", - "\n", - "For this we can run the following initialisation and waiting commands." - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\n", - "$HELM_HOME has been configured at /home/alejandro/.helm.\n", - "Warning: Tiller is already installed in the cluster.\n", - "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)\n", - "Happy Helming!\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "# If not running you can install it\n", - "# First initialise helm\n", - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default\n", - "!helm init\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can install run the Seldon Operator using the latest Helm charts" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-operator\n", - "LAST DEPLOYED: Mon May 27 15:04:30 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.147.136 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-operator --name seldon-core-operator --repo https://storage.googleapis.com/seldon-charts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And we can make sure that it is actually running with the following command " - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "seldon-operator-controller-manager-0 1/1 Running 1 12s\r\n" - ] - } - ], - "source": [ - "!kubectl get pod | grep seldon" + "## 4) Run Seldon in your kubernetes cluster\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In order for us to be able to reach the model, we will need to set up an ingress. For this we will use ambassador:" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Mon May 27 15:04:50 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-7bfc87f865-jkxs8 0/1 ContainerCreating 0 0s\n", - "ambassador-7bfc87f865-nr7bn 0/1 ContainerCreating 0 0s\n", - "ambassador-7bfc87f865-q4lng 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.101.89.32 localhost 80:30004/TCP,443:31350/TCP 0s\n", - "ambassador-admins ClusterIP 10.98.228.159 8877/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can now see the ambassador service is running. In our case we can reach it through the external IP which is our localhost, but if you are using a cloud provider, make sure you have access to the ambassador endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\r\n", - "ambassador LoadBalancer 10.101.89.32 localhost 80:30004/TCP,443:31350/TCP 2m43s\r\n" - ] - } - ], - "source": [ - "!kubectl get svc ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1316,19 +1107,21 @@ }, { "cell_type": "code", - "execution_count": 71, - "metadata": {}, + "execution_count": 1, + "metadata": { + "collapsed": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "release \"ambassador\" deleted\r\n" + "Error: uninstall: Release not loaded: ambassador: release: not found\r\n" ] } ], "source": [ - "!helm del --purge ambassador" + "!helm del ambassador" ] }, { @@ -1345,7 +1138,7 @@ } ], "source": [ - "!helm del --purge seldon-core-operator" + "!helm del seldon-core-operator" ] }, { @@ -1372,7 +1165,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/template_model_bindata/modelWithBindata.ipynb b/examples/models/template_model_bindata/modelWithBindata.ipynb index dad092155e..86c7e3c311 100644 --- a/examples/models/template_model_bindata/modelWithBindata.ipynb +++ b/examples/models/template_model_bindata/modelWithBindata.ipynb @@ -311,231 +311,13 @@ "!minikube start --vm-driver kvm2 --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Sat May 4 09:19:04 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.101.206.113 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Sat May 4 09:19:17 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.98.248.131 8877/TCP 0s\n", - "ambassador LoadBalancer 10.97.204.124 80:32752/TCP,443:30577/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-59ql7 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-jwx2m 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-pxbds 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -838,7 +620,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/template_model_tracing/tracing.ipynb b/examples/models/template_model_tracing/tracing.ipynb index 64b2744994..2d19e2231a 100644 --- a/examples/models/template_model_tracing/tracing.ipynb +++ b/examples/models/template_model_tracing/tracing.ipynb @@ -53,96 +53,12 @@ ] }, { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"minikube\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -186,213 +102,6 @@ "```" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Install Seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Mon Jun 17 15:44:51 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "seldon-spartakus-volunteer-5866b6df59-kpk4l 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.110.128.191 443/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-core-seldon-core-operator 1 1s\n", - "seldon-spartakus-volunteer 1 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME READY AGE\n", - "seldon-operator-controller-manager 0/1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 0/1 1 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Ingress" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "E0617 15:45:16.008304 10050 portforward.go:376] error copying from local connection to remote stream: read tcp4 127.0.0.1:42883->127.0.0.1:35738: read: connection reset by peer\n", - "LAST DEPLOYED: Mon Jun 17 15:45:15 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-778b689797-56npq 0/1 ContainerCreating 0 1s\n", - "ambassador-778b689797-phrjc 0/1 ContainerCreating 0 1s\n", - "ambassador-778b689797-qwx9z 0/1 ContainerCreating 0 1s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.100.134.88 80:31764/TCP,443:32730/TCP 1s\n", - "ambassador-admins ClusterIP 10.108.143.187 8877/TCP 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 1s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 1s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 1s\n", - "mappings.getambassador.io 1s\n", - "modules.getambassador.io 1s\n", - "ratelimitservices.getambassador.io 1s\n", - "tcpmappings.getambassador.io 1s\n", - "tlscontexts.getambassador.io 1s\n", - "tracingservices.getambassador.io 1s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -795,7 +504,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/template_model_with_feedback/modelWithFeedback.ipynb b/examples/models/template_model_with_feedback/modelWithFeedback.ipynb index 2d1219de1d..f1d2cd04b1 100644 --- a/examples/models/template_model_with_feedback/modelWithFeedback.ipynb +++ b/examples/models/template_model_with_feedback/modelWithFeedback.ipynb @@ -458,225 +458,13 @@ "!minikube start --vm-driver kvm2 --memory 4096 " ] }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Error from server (AlreadyExists): clusterrolebindings.rbac.authorization.k8s.io \"kube-system-cluster-admin\" already exists\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "Warning: Tiller is already installed in the cluster.\n", - "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deployment \"tiller-deploy\" successfully rolled out\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Sat May 4 10:05:02 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.96.202.63 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Sat May 4 10:05:12 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.97.137.121 8877/TCP 0s\n", - "ambassador LoadBalancer 10.101.45.134 80:31163/TCP,443:32041/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-2w25b 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-8b2k5 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-scg65 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1942,7 +1730,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/template_model_with_metrics/modelWithMetrics.ipynb b/examples/models/template_model_with_metrics/modelWithMetrics.ipynb index bfa459c46f..351f1e68c1 100644 --- a/examples/models/template_model_with_metrics/modelWithMetrics.ipynb +++ b/examples/models/template_model_with_metrics/modelWithMetrics.ipynb @@ -361,329 +361,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Tue Apr 16 13:52:58 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.100.187.38 443/TCP 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "seldon-spartakus-volunteer 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1/ClusterRole\n", - "NAME AGE\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "seldon-spartakus-volunteer 1 0 0 0 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-spartakus-volunteer 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "seldon-spartakus-config 3 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core-analytics\n", - "LAST DEPLOYED: Tue Apr 16 13:53:06 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "alertmanager ClusterIP 10.107.187.67 80/TCP 0s\n", - "grafana-prom NodePort 10.96.185.3 80:31405/TCP 0s\n", - "prometheus-node-exporter ClusterIP None 9100/TCP 0s\n", - "prometheus-seldon ClusterIP 10.109.47.248 80/TCP 0s\n", - "\n", - "==> v1beta1/DaemonSet\n", - "NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE\n", - "prometheus-node-exporter 1 1 0 1 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "grafana-prom-secret Opaque 1 1s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "prometheus 1 0s\n", - "\n", - "==> v1/Job\n", - "NAME DESIRED SUCCESSFUL AGE\n", - "grafana-prom-import-dashboards 1 0 0s\n", - "\n", - "==> v1beta1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "alertmanager-deployment 1 1 1 0 0s\n", - "grafana-prom-deployment 1 1 1 0 0s\n", - "prometheus-deployment 1 1 1 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "grafana-prom-import-dashboards-k5zmm 0/1 ContainerCreating 0 0s\n", - "alertmanager-deployment-7cd568f668-9fvhm 0/1 ContainerCreating 0 0s\n", - "grafana-prom-deployment-899b4dd7b-n664s 0/1 ContainerCreating 0 0s\n", - "prometheus-node-exporter-wzntd 0/1 Pending 0 0s\n", - "prometheus-deployment-7554c97586-5dfl7 0/1 Pending 0 0s\n", - "\n", - "==> v1/ConfigMap\n", - "NAME DATA AGE\n", - "alertmanager-server-conf 1 1s\n", - "grafana-import-dashboards 11 1s\n", - "prometheus-rules 0 0s\n", - "prometheus-server-conf 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "prometheus 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "prometheus 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install seldon-core-analytics --name seldon-core-analytics --set grafana_prom_admin_password=password --set persistence.enabled=false --repo https://storage.googleapis.com/seldon-charts " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Tue Apr 16 13:53:59 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.104.133.196 8877/TCP 0s\n", - "ambassador LoadBalancer 10.103.248.191 80:31100/TCP,443:31733/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-25vlr 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-dtnm6 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-j7km2 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { @@ -1058,7 +742,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/models/tfserving-mnist/mnist.json b/examples/models/tfserving-mnist/mnist.json new file mode 100644 index 0000000000..6c438371a2 --- /dev/null +++ b/examples/models/tfserving-mnist/mnist.json @@ -0,0 +1,96 @@ +--- +# Source: tfserving-mnist/templates/mnist_tfserving_deployment.json +{ + "apiVersion": "machinelearning.seldon.io/v1alpha2", + "kind": "SeldonDeployment", + "metadata": { + "labels": { + "app": "seldon" + }, + "name": "tfserving-mnist", + "namespace": "seldon" + }, + "spec": { + "name": "tf-mnist", + "predictors": [ + { + "componentSpecs": [{ + "spec": { + "containers": [ + { + "image": "seldonio/tfserving-proxy:0.1", + "name": "tfserving-proxy" + }, + { + "args": [ + "/usr/bin/tensorflow_model_server", + "--port=7001", + "--model_name=mnist-model", + "--model_base_path=/mnist-model" + ], + "image": "tensorflow/serving:latest", + "name": "mnist-model", + "ports": [ + { + "containerPort": 7001, + "protocol": "TCP" + } + ], + "resources": { + "limits": { + "cpu": "4", + "memory": "4Gi" + }, + "requests": { + "cpu": "1", + "memory": "1Gi" + } + }, + "securityContext": { + "runAsUser": 1000 + } + } + ], + "terminationGracePeriodSeconds": 1 + } + }], + "graph": { + "name": "tfserving-proxy", + "endpoint": { "type" : "REST" }, + "type": "MODEL", + "children": [], + "parameters": + [ + { + "name":"grpc_endpoint", + "type":"STRING", + "value":"localhost:7001" + }, + { + "name":"model_name", + "type":"STRING", + "value":"mnist-model" + }, + { + "name":"model_output", + "type":"STRING", + "value":"scores" + }, + { + "name":"model_input", + "type":"STRING", + "value":"images" + }, + { + "name":"signature_name", + "type":"STRING", + "value":"predict_images" + } + ] + }, + "name": "mnist-tfserving", + "replicas": 1 + } + ] + } +} diff --git a/examples/models/tfserving-mnist/tfserving-mnist.ipynb b/examples/models/tfserving-mnist/tfserving-mnist.ipynb index ddf7e34db7..b6d787e86a 100644 --- a/examples/models/tfserving-mnist/tfserving-mnist.ipynb +++ b/examples/models/tfserving-mnist/tfserving-mnist.ipynb @@ -301,253 +301,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Run MNIST Inference Graph" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller created\n", - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!kubectl -n kube-system create sa tiller\n", - "!kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller\n", - "!helm init --service-account tiller" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namespace/seldon created\r\n" - ] - } - ], - "source": [ - "!kubectl create namespace seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Context \"gke_seldon-demos_europe-west3-c_standard-cluster-1\" modified.\r\n" - ] - } - ], - "source": [ - "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Fri May 3 14:50:05 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 2s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 2s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 2s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.35.248.202 443/TCP 1s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 1s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 1s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "partitioned roll out complete: 1 new pods have been updated...\r\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri May 3 14:50:22 2019\n", - "NAMESPACE: seldon\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-7fb5454fb8-9zk8s 0/1 ContainerCreating 0 0s\n", - "ambassador-7fb5454fb8-pkqcq 0/1 ContainerCreating 0 0s\n", - "ambassador-7fb5454fb8-x598p 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.35.244.151 8877/TCP 0s\n", - "ambassador LoadBalancer 10.35.244.109 80:30617/TCP,443:30073/TCP 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace seldon ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace seldon ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "### Run MNIST Inference Graph" ] }, { @@ -574,16 +337,16 @@ } ], "source": [ - "!helm install tfserving-mnist --name tfserving-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}/mnist-model " + "!helm install tfserving-mnist tfserving-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}/mnist-model " ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "!helm template tfserving-mnist --name tfserving-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}/mnist-model > mnist.json" + "!helm template tfserving-mnist tfserving-mnist --namespace seldon --set tfserving.model_base_path=${MODEL_REPOSITORY_BUCKET}/mnist-model > mnist.json" ] }, { @@ -904,7 +667,7 @@ } ], "source": [ - "!helm install ../../../helm-charts/seldon-core-analytics --name seldon-core-analytics \\\n", + "!helm install seldon-core-analytics ../../../helm-charts/seldon-core-analytics \\\n", " --set grafana_prom_admin_password=password \\\n", " --set persistence.enabled=false \\\n", " --namespace seldon" @@ -961,7 +724,7 @@ } ], "source": [ - "!helm install seldon-core-loadtesting --name loadtest \\\n", + "!helm install loadtest seldon-core-loadtesting \\\n", " --namespace seldon \\\n", " --repo https://storage.googleapis.com/seldon-charts \\\n", " --set locust.script=mnist_rest_locust.py \\\n", @@ -1013,7 +776,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.7.5" }, "varInspector": { "cols": { diff --git a/examples/models/xss/xss-example.ipynb b/examples/models/xss/xss-example.ipynb index 9f4ded2a81..80533bef65 100644 --- a/examples/models/xss/xss-example.ipynb +++ b/examples/models/xss/xss-example.ipynb @@ -9830,16 +9830,26 @@ "output_type": "stream", "text": [ "Creating cluster \"kind\" ...\n", - " ✓ Ensuring node image (kindest/node:v1.15.3) 🖼\n", - " ✓ Preparing nodes 📦 \n", - " ✓ Creating kubeadm config 📜 \n", - " ✓ Starting control-plane 🕹️ \n", - " ✓ Installing CNI 🔌 \n", - " ✓ Installing StorageClass 💾 \n", - "Cluster creation complete. You can now use the cluster with:\n", + " \u001b[32m✓\u001b[0m Ensuring node image (kindest/node:v1.16.3) 🖼\n", + " \u001b[32m✓\u001b[0m Preparing nodes 📦7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\n", + " \u001b[32m✓\u001b[0m Writing configuration 📜7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\n", + " \u001b[32m✓\u001b[0m Starting control-plane 🕹️7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\u001b[?7l\n", + " \u001b[32m✓\u001b[0m Installing CNI 🔌7l\u001b[?7l\u001b[?7l\n", + " \u001b[32m✓\u001b[0m Installing StorageClass 💾7l\u001b[?7l\n", + "Set kubectl context to \"kind-kind\"\n", + "You can now use your cluster with:\n", "\n", - "export KUBECONFIG=\"$(kind get kubeconfig-path --name=\"kind\")\"\n", - "kubectl cluster-info\n" + "kubectl cluster-info --context kind-kind\n", + "\n", + "Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂\n", + "`kind get kubeconfig-path` is deprecated!\n", + "\n", + "KIND will export and merge kubeconfig like kops, minikube, etc.\n", + "This command is now unnecessary and will be removed in a future release.\n", + "\n", + "For more info see: https://github.com/kubernetes-sigs/kind/issues/1060\n", + "See also the output of `kind create cluster`\n", + "\n" ] } ], @@ -9852,39 +9862,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We then install Helm and a corresponding service account." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /Users/kaseyo/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n", - "serviceaccount/tiller created\n", - "clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created\n", - "deployment.extensions/tiller-deploy patched\n" - ] - } - ], - "source": [ - "!helm init --history-max 200\n", - "!kubectl rollout status deploy/tiller-deploy -n kube-system\n", - "!kubectl create serviceaccount --namespace kube-system tiller\n", - "!kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller\n", - "!kubectl patch deploy --namespace kube-system tiller-deploy -p '{\"spec\":{\"template\":{\"spec\":{\"serviceAccount\":\"tiller\"}}}}'" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador)." ] }, { @@ -9973,9 +9953,8 @@ } ], "source": [ - "!helm install \\\n", + "!helm install seldon-core \\\n", " ../../../helm-charts/seldon-core-operator \\\n", - " --name seldon-core \\\n", " --namespace seldon-system \\\n", " --set engine.image.pullPolicy=Never \\\n", " --set usagemetrics.enabled=true \\\n", @@ -9983,126 +9962,6 @@ "!kubectl rollout status statefulset.apps/seldon-operator-controller-manager -n seldon-system" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we install `ambassador` which will allow us to reach the Seldon engine in the cluster." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Fri Sep 27 15:35:27 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Deployment\n", - "NAME READY UP-TO-DATE AVAILABLE AGE\n", - "ambassador 0/3 3 0 2s\n", - "\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5784b5cb9d-2vjbj 0/1 ContainerCreating 0 2s\n", - "ambassador-5784b5cb9d-mlc94 0/1 ContainerCreating 0 2s\n", - "ambassador-5784b5cb9d-wnsdt 0/1 ContainerCreating 0 2s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador LoadBalancer 10.103.22.11 80:31375/TCP,443:31954/TCP 2s\n", - "ambassador-admin ClusterIP 10.103.249.154 8877/TCP 2s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 3s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 2s\n", - "ambassador-crds 2s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 2s\n", - "ambassador-crds 2s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "authservices.getambassador.io 2s\n", - "consulresolvers.getambassador.io 2s\n", - "kubernetesendpointresolvers.getambassador.io 2s\n", - "kubernetesserviceresolvers.getambassador.io 2s\n", - "mappings.getambassador.io 2s\n", - "modules.getambassador.io 3s\n", - "ratelimitservices.getambassador.io 2s\n", - "tcpmappings.getambassador.io 3s\n", - "tlscontexts.getambassador.io 2s\n", - "tracingservices.getambassador.io 2s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n", - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false\n", - "!kubectl rollout status deployment.apps/ambassador" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Forward port\n", - "\n", - "Once the cluster has been created, we need to allow access from the outside to the `ambassador` gateway.\n", - "One way to do this is to use the `kubectl port-forward` command.\n", - "In particular, we will forward port `8003` of our local host to the cluster's gateway.\n", - "\n", - "This command needs to run constantly on the background, so **please make sure you run it on a separate terminal**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```bash\n", - "kubectl \\\n", - " port-forward \\\n", - " $(kubectl get pods \\\n", - " -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') \\\n", - " 8003:8080\n", - "```" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -10559,7 +10418,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.5" } }, "nbformat": 4, diff --git a/examples/seldon_core_setup.ipynb b/examples/seldon_core_setup.ipynb new file mode 100644 index 0000000000..4aee7e6fd8 --- /dev/null +++ b/examples/seldon_core_setup.ipynb @@ -0,0 +1,225 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Seldon Core Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prerequisites\n", + "\n", + "You will need\n", + " - [Git clone of Seldon Core](https://github.com/SeldonIO/seldon-core)\n", + " - [A running Kubernetes cluster with kubectl authenticated](https://kubernetes.io/docs/setup/)\n", + " - [seldon-core Python package](https://pypi.org/project/seldon-core/) (```pip install seldon-core>=0.2.6.1```)\n", + " - [Helm client](https://helm.sh/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup Cluster" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "namespace/seldon created\r\n" + ] + } + ], + "source": [ + "!kubectl create namespace seldon" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Context \"gke_dev-george_us-central1-a_standard-cluster-10\" modified.\r\n" + ] + } + ], + "source": [ + "!kubectl config set-context $(kubectl config current-context) --namespace=seldon" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" + ] + } + ], + "source": [ + "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Install Ingress\n", + "\n", + "### Ambassador\n", + "\n", + "[Ambassador install](https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html#install-ambassador)\n", + "\n", + "**Note:** There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check all services are running before proceeding." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", + "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", + "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", + "deployment \"ambassador\" successfully rolled out\n" + ] + } + ], + "source": [ + "!kubectl rollout status deployment.apps/ambassador" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Forwarding from 127.0.0.1:8003 -> 8080\r\n", + "Forwarding from [::1]:8003 -> 8080\r\n" + ] + } + ], + "source": [ + "!kubectl port-forward $(kubectl get pods -n seldon -l app.kubernetes.io/name=ambassador -o jsonpath='{.items[0].metadata.name}') -n seldon 8003:8080" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*or*\n", + "\n", + "### Istio\n", + "\n", + "[Istio install](https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html#install-istio-ingress-gateway)\n", + "\n", + "**Note:** Remember to add ```--set istio.enabled=true``` flag when installing Seldon Core as shown below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Install Seldon Core\n", + "\n", + "Follow the [Seldon Core Install documentation](https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:** If using Istio Ingress remember to add ```--set istio.enabled=true``` flag." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!helm install seldon-core seldon-core-operator --repo https://storage.googleapis.com/seldon-charts --set usageMetrics.enabled=true --namespace seldon-system --set istio.enabled=true" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check all services are running before proceeding." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "deployment \"seldon-controller-manager\" successfully rolled out\r\n" + ] + } + ], + "source": [ + "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/wrappers/go/SeldonGoModel.ipynb b/examples/wrappers/go/SeldonGoModel.ipynb index 73aa689243..71aacdc38e 100644 --- a/examples/wrappers/go/SeldonGoModel.ipynb +++ b/examples/wrappers/go/SeldonGoModel.ipynb @@ -432,230 +432,13 @@ "!minikube start --memory 4096" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "clusterrolebinding.rbac.authorization.k8s.io/kube-system-cluster-admin created\r\n" - ] - } - ], - "source": [ - "!kubectl create clusterrolebinding kube-system-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "$HELM_HOME has been configured at /home/clive/.helm.\n", - "\n", - "Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n", - "\n", - "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n", - "To prevent this, run `helm init` with the --tiller-tls-verify flag.\n", - "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation\n", - "Happy Helming!\n" - ] - } - ], - "source": [ - "!helm init" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"tiller-deploy\" rollout to finish: 0 of 1 updated replicas are available...\n", - "deployment \"tiller-deploy\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/tiller-deploy -n kube-system" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: seldon-core\n", - "LAST DEPLOYED: Thu May 9 15:47:55 2019\n", - "NAMESPACE: seldon-system\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "seldon-operator-controller-manager-0 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/Secret\n", - "NAME TYPE DATA AGE\n", - "seldon-operator-webhook-server-secret Opaque 0 0s\n", - "\n", - "==> v1beta1/CustomResourceDefinition\n", - "NAME AGE\n", - "seldondeployments.machinelearning.seldon.io 0s\n", - "\n", - "==> v1/ClusterRole\n", - "seldon-operator-manager-role 0s\n", - "\n", - "==> v1/ClusterRoleBinding\n", - "NAME AGE\n", - "seldon-operator-manager-rolebinding 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "seldon-operator-controller-manager-service ClusterIP 10.105.155.80 443/TCP 0s\n", - "\n", - "==> v1/StatefulSet\n", - "NAME DESIRED CURRENT AGE\n", - "seldon-operator-controller-manager 1 1 0s\n", - "\n", - "\n", - "NOTES:\n", - "NOTES: TODO\n", - "\n", - "\n" - ] - } - ], - "source": [ - "!helm install ../../../helm-charts/seldon-core-operator --name seldon-core --set usageMetrics.enabled=true --namespace seldon-system" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for 1 pods to be ready...\n", - "partitioned roll out complete: 1 new pods have been updated...\n" - ] - } - ], - "source": [ - "!kubectl rollout status deploy/seldon-controller-manager -n seldon-system" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Setup Ingress\n", - "Please note: There are reported gRPC issues with ambassador (see https://github.com/SeldonIO/seldon-core/issues/473)." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NAME: ambassador\n", - "LAST DEPLOYED: Thu May 9 15:48:08 2019\n", - "NAMESPACE: default\n", - "STATUS: DEPLOYED\n", - "\n", - "RESOURCES:\n", - "==> v1/Pod(related)\n", - "NAME READY STATUS RESTARTS AGE\n", - "ambassador-5b89d44544-2s79n 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-fmvgk 0/1 ContainerCreating 0 0s\n", - "ambassador-5b89d44544-gmd8s 0/1 ContainerCreating 0 0s\n", - "\n", - "==> v1/ServiceAccount\n", - "NAME SECRETS AGE\n", - "ambassador 1 0s\n", - "\n", - "==> v1beta1/ClusterRole\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1beta1/ClusterRoleBinding\n", - "NAME AGE\n", - "ambassador 0s\n", - "\n", - "==> v1/Service\n", - "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n", - "ambassador-admins ClusterIP 10.111.86.228 8877/TCP 0s\n", - "ambassador LoadBalancer 10.99.124.251 80:32260/TCP,443:31122/TCP 0s\n", - "\n", - "==> v1/Deployment\n", - "NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE\n", - "ambassador 3 3 3 0 0s\n", - "\n", - "\n", - "NOTES:\n", - "Congratuations! You've successfully installed Ambassador.\n", - "\n", - "For help, visit our Slack at https://d6e.co/slack or view the documentation online at https://www.getambassador.io.\n", - "\n", - "To get the IP address of Ambassador, run the following commands:\n", - "NOTE: It may take a few minutes for the LoadBalancer IP to be available.\n", - " You can watch the status of by running 'kubectl get svc -w --namespace default ambassador'\n", - "\n", - " On GKE/Azure:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n", - "\n", - " On AWS:\n", - " export SERVICE_IP=$(kubectl get svc --namespace default ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n", - "\n", - " echo http://$SERVICE_IP:\n", - "\n" - ] - } - ], - "source": [ - "!helm install stable/ambassador --name ambassador --set crds.keep=false" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Waiting for deployment \"ambassador\" rollout to finish: 0 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 1 of 3 updated replicas are available...\n", - "Waiting for deployment \"ambassador\" rollout to finish: 2 of 3 updated replicas are available...\n", - "deployment \"ambassador\" successfully rolled out\n" - ] - } - ], - "source": [ - "!kubectl rollout status deployment.apps/ambassador" + "## Setup Seldon Core\n", + "\n", + "Follow the instructions to [Setup Cluster](../../seldon_core_setup.ipynb#Setup-Cluster) with [Ambassador Ingress](../../seldon_core_setup.ipynb#Ambassador) and [Install Seldon Core](../../seldon_core_setup.ipynb#Install-Seldon-Core)." ] }, {